From 2f1d4a94ebb4e5c412ea4332751e2a6104c7f26b Mon Sep 17 00:00:00 2001 From: Gabriel Birke Date: Thu, 30 Dec 2010 17:24:38 +0100 Subject: Modified config and lang files for new option --- lib/plugins/config/lang/de/lang.php | 1 + lib/plugins/config/lang/en/lang.php | 1 + lib/plugins/config/settings/config.class.php | 2 +- lib/plugins/config/settings/config.metadata.php | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php index aa763da03..9a8ca3b30 100644 --- a/lib/plugins/config/lang/de/lang.php +++ b/lib/plugins/config/lang/de/lang.php @@ -48,6 +48,7 @@ $lang['dmode'] = 'Rechte für neue Verzeichnisse'; $lang['lang'] = 'Sprache'; $lang['basedir'] = 'Installationsverzeichnis'; $lang['baseurl'] = 'Installationspfad (URL)'; +$lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad wie "baseurl" zu benutzen.'; $lang['savedir'] = 'Speicherverzeichnis'; $lang['start'] = 'Startseitenname'; $lang['title'] = 'Titel des Wikis'; diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php index a944d6bd7..9003337df 100644 --- a/lib/plugins/config/lang/en/lang.php +++ b/lib/plugins/config/lang/en/lang.php @@ -58,6 +58,7 @@ $lang['lang'] = 'Interface language'; $lang['basedir'] = 'Server path (eg. /dokuwiki/). Leave blank for autodetection.'; $lang['baseurl'] = 'Server URL (eg. http://www.yourserver.com). Leave blank for autodetection.'; $lang['savedir'] = 'Directory for saving data'; +$lang['cookiedir'] = 'Cookie path. Leave blank for using baseurl.'; $lang['start'] = 'Start page name'; $lang['title'] = 'Wiki title'; $lang['template'] = 'Template'; diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php index 01f15a54e..b38f79906 100644 --- a/lib/plugins/config/settings/config.class.php +++ b/lib/plugins/config/settings/config.class.php @@ -341,7 +341,7 @@ if (!class_exists('setting')) { var $_input = NULL; // only used by those classes which error check var $_cautionList = array( - 'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger', + 'basedir' => 'danger', 'baseurl' => 'danger', 'savedir' => 'danger', 'cookiedir' => 'danger', 'useacl' => 'danger', 'authtype' => 'danger', 'superuser' => 'danger', 'userewrite' => 'danger', 'start' => 'warning', 'camelcase' => 'warning', 'deaccent' => 'warning', 'sepchar' => 'warning', 'compression' => 'warning', 'xsendfile' => 'warning', 'renderer_xhtml' => 'warning', 'fnencode' => 'warning', 'allowdebug' => 'security', 'htmlok' => 'security', 'phpok' => 'security', 'iexssprotect' => 'security', 'xmlrpc' => 'security', 'fullpath' => 'security' ); diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php index c2c3a2d0c..c64fded81 100644 --- a/lib/plugins/config/settings/config.metadata.php +++ b/lib/plugins/config/settings/config.metadata.php @@ -95,6 +95,7 @@ $meta['license'] = array('license'); $meta['savedir'] = array('savedir'); $meta['basedir'] = array('string'); $meta['baseurl'] = array('string'); +$meta['cookiedir'] = array('string'); $meta['dmode'] = array('numeric','_pattern' => '/0[0-7]{3,4}/'); // only accept octal representation $meta['fmode'] = array('numeric','_pattern' => '/0[0-7]{3,4}/'); // only accept octal representation $meta['allowdebug'] = array('onoff'); -- cgit v1.2.3 From bd6d984f1ebbd5da31b431960e408efd150825b7 Mon Sep 17 00:00:00 2001 From: Michael Hamann Date: Tue, 19 Jul 2011 16:49:11 +0200 Subject: Make getElementsByClass() work without given tag This fixes the hiding of the highlighting of the current section when the mouse leaves the edit section button. --- lib/scripts/compatibility.js | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/scripts/compatibility.js b/lib/scripts/compatibility.js index 27347972a..13b088582 100644 --- a/lib/scripts/compatibility.js +++ b/lib/scripts/compatibility.js @@ -99,6 +99,7 @@ function findPosY(object){ function getElementsByClass(searchClass,node,tag){ DEPRECATED('Use jQuery() instead'); if(node == null) node = document; + if(typeof tag === 'undefined') tag = ''; return jQuery(node).find(tag+'.'+searchClass).toArray(); } -- cgit v1.2.3 From 9ee7fd095e8cb3c84ad95dd52c35630147333ecb Mon Sep 17 00:00:00 2001 From: Sami Olmari Date: Mon, 25 Jul 2011 20:17:44 +0200 Subject: Finish language update --- lib/plugins/acl/lang/fi/lang.php | 1 + lib/plugins/config/lang/fi/lang.php | 2 ++ lib/plugins/plugin/lang/fi/lang.php | 2 ++ lib/plugins/popularity/lang/fi/lang.php | 1 + lib/plugins/revert/lang/fi/lang.php | 1 + lib/plugins/usermanager/lang/fi/lang.php | 1 + 6 files changed, 8 insertions(+) (limited to 'lib') diff --git a/lib/plugins/acl/lang/fi/lang.php b/lib/plugins/acl/lang/fi/lang.php index 04074d8d4..4f145e0f6 100644 --- a/lib/plugins/acl/lang/fi/lang.php +++ b/lib/plugins/acl/lang/fi/lang.php @@ -5,6 +5,7 @@ * @author otto@valjakko.net * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['admin_acl'] = 'Käyttöoikeudet (ACL)'; $lang['acl_group'] = 'Ryhmä'; diff --git a/lib/plugins/config/lang/fi/lang.php b/lib/plugins/config/lang/fi/lang.php index c3434c1f3..0e9bad030 100644 --- a/lib/plugins/config/lang/fi/lang.php +++ b/lib/plugins/config/lang/fi/lang.php @@ -5,6 +5,7 @@ * @author otto@valjakko.net * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['menu'] = 'Asetukset'; $lang['error'] = 'Asetuksia ei päivitetty väärän arvon vuoksi. Tarkista muutokset ja lähetä sivu uudestaan. @@ -111,6 +112,7 @@ $lang['jpg_quality'] = 'JPG pakkauslaatu (0-100)'; $lang['subscribers'] = 'Salli tuki sivujen tilaamiselle'; $lang['subscribe_time'] = 'Aika jonka jälkeen tilauslinkit ja yhteenveto lähetetään (sek). Tämän pitäisi olla pienempi, kuin recent_days aika.'; $lang['compress'] = 'Pakkaa CSS ja javascript'; +$lang['cssdatauri'] = 'Maksimikoko tavuina jossa kuvat joihin viitataan CSS-tiedostoista olisi sisällytettynä suoraan tyylitiedostoon jotta HTTP-kyselyjen kaistaa saataisiin kutistettua. Tämä tekniikka ei toimi IE versiossa aikasempi kuin 8! 400:sta 600:aan tavua on hyvä arvo. Aseta 0 kytkeäksesi ominaisuuden pois.'; $lang['hidepages'] = 'Piilota seuraavat sivut (säännönmukainen lauseke)'; $lang['send404'] = 'Lähetä "HTTP 404/Page Not Found" puuttuvista sivuista'; $lang['sitemap'] = 'Luo Google sitemap (päiviä)'; diff --git a/lib/plugins/plugin/lang/fi/lang.php b/lib/plugins/plugin/lang/fi/lang.php index 817b4f20a..c348a2331 100644 --- a/lib/plugins/plugin/lang/fi/lang.php +++ b/lib/plugins/plugin/lang/fi/lang.php @@ -5,6 +5,7 @@ * @author otto@valjakko.net * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['menu'] = 'Ylläpidä liitännäisiä'; $lang['download'] = 'Lataa ja asenna uusi liitännäinen'; @@ -50,3 +51,4 @@ $lang['enabled'] = 'Liitännäinen %s käytössä'; $lang['notenabled'] = 'Liitännäistä %s ei voitu ottaa käyttöön. Tarkista tiedostojen oikeudet.'; $lang['disabled'] = 'Liitännäinen %s pois käytössä'; $lang['notdisabled'] = 'Liitännäistä %s ei voitu ottaa pois käytöstä. Tarkista tiedostojen oikeudet.'; +$lang['packageinstalled'] = 'Pluginpaketti (%d plugin%s: %s:) asennettu onnistuneesti.'; diff --git a/lib/plugins/popularity/lang/fi/lang.php b/lib/plugins/popularity/lang/fi/lang.php index a73f63501..d7c230742 100644 --- a/lib/plugins/popularity/lang/fi/lang.php +++ b/lib/plugins/popularity/lang/fi/lang.php @@ -4,6 +4,7 @@ * * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['name'] = 'Suosion palaute (voi kestää jonkun aikaa latautua)'; $lang['submit'] = 'Lähetä tiedot'; diff --git a/lib/plugins/revert/lang/fi/lang.php b/lib/plugins/revert/lang/fi/lang.php index 26bc6b76a..fdf9bb81c 100644 --- a/lib/plugins/revert/lang/fi/lang.php +++ b/lib/plugins/revert/lang/fi/lang.php @@ -5,6 +5,7 @@ * @author otto@valjakko.net * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['menu'] = 'Palautuksenhallinta'; $lang['filter'] = 'Etsi spammattyjä sivuja'; diff --git a/lib/plugins/usermanager/lang/fi/lang.php b/lib/plugins/usermanager/lang/fi/lang.php index 6eeb4c3e8..1db4bd7fb 100644 --- a/lib/plugins/usermanager/lang/fi/lang.php +++ b/lib/plugins/usermanager/lang/fi/lang.php @@ -5,6 +5,7 @@ * @author otto@valjakko.net * @author Otto Vainio * @author Teemu Mattila + * @author Sami Olmari */ $lang['menu'] = 'Käyttäjähallinta'; $lang['noauth'] = '(autentikointi ei ole käytössä)'; -- cgit v1.2.3 From c4241309cc2c5ed1d2675cf234f9b59ded0019f4 Mon Sep 17 00:00:00 2001 From: Dejan Igrec Date: Mon, 25 Jul 2011 20:19:01 +0200 Subject: Croatian language update --- lib/plugins/acl/lang/hr/help.txt | 11 +++++++++++ lib/plugins/acl/lang/hr/lang.php | 29 +++++++++++++++++++++++++++++ lib/plugins/config/lang/hr/lang.php | 1 + lib/plugins/plugin/lang/hr/lang.php | 1 + lib/plugins/popularity/lang/hr/lang.php | 1 + lib/plugins/revert/lang/hr/lang.php | 1 + lib/plugins/usermanager/lang/hr/lang.php | 1 + 7 files changed, 45 insertions(+) create mode 100644 lib/plugins/acl/lang/hr/help.txt (limited to 'lib') diff --git a/lib/plugins/acl/lang/hr/help.txt b/lib/plugins/acl/lang/hr/help.txt new file mode 100644 index 000000000..4e7cfc3c2 --- /dev/null +++ b/lib/plugins/acl/lang/hr/help.txt @@ -0,0 +1,11 @@ +=== Brza Pomoć: === + +Na ovoj stranici možeš dodavati i brisati dozvole za imenske prostore i stranice u svom wiki-u. + +Lijevi prozor prikazuje sve dostupne imenske prostore i stranice. + +Forma iznad ti omogućuje pregled i mijenjanje dozvola odabranom korisniku ili grupi. + +U tablici ispod prikazana su sva trenutno postavljena pravila kontrole pristupa. Koristite je za višestruko brisanje ili mijenjanje pravila. + +Čitanje [[doku>acl|službena dokumentacija o ACL]] može vam pomoći potpuno razumijeti kako kontrola pristupa radi u DokuWiki. \ No newline at end of file diff --git a/lib/plugins/acl/lang/hr/lang.php b/lib/plugins/acl/lang/hr/lang.php index d2094b77b..8c21f1b0b 100644 --- a/lib/plugins/acl/lang/hr/lang.php +++ b/lib/plugins/acl/lang/hr/lang.php @@ -4,4 +4,33 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ +$lang['admin_acl'] = 'Upravljanje listom kontrole pristupa'; +$lang['acl_group'] = 'Grupa'; +$lang['acl_user'] = 'Korisnik'; +$lang['acl_perms'] = 'Dozvole za'; +$lang['page'] = 'Stranica'; +$lang['namespace'] = 'Imenski prostor'; +$lang['btn_select'] = 'Odaberi'; +$lang['p_user_id'] = 'Korisnik %s trenutno ima sljedeće dozvole na stranici %s: %s.'; +$lang['p_user_ns'] = 'Korisnik %s trenutno ima sljedeće dozvole u imenskom prostoru %s: %s.'; +$lang['p_group_id'] = 'Članovi grupe %s trenutno imaju sljedeće dozvole na stranici %s: %s.'; +$lang['p_group_ns'] = 'Članovi grupe %s trenutno imaju sljedeće dozvole u imenskom prostoru %s: %s.'; +$lang['p_choose_id'] = 'Molim unesti korisnika ili grupu u gornju formu za pregled ili uređivanje dozvola postavljenih za stranicu %s.'; +$lang['p_choose_ns'] = 'Molim unesti korisnika ili grupu u gornju formu za pregled ili uređivanje dozvola postavljenih za imenski prostor %s.'; +$lang['p_inherited'] = 'Napomena: Ove dozvole nisu postavljene eksplicitno već su naslijeđene od drugih grupa ili nadređenih imenskih prostora.'; +$lang['p_isadmin'] = 'Napomena: Odabrana grupa ili korisnik uvijek ima sve dozvole jer je postavljen kao superuser.'; +$lang['p_include'] = 'Više dozvole uključuju sve niže. Dozvole Kreiraj, Učitaj i Briši se primjenjuju samo na imenske prostore, ne stranice.'; +$lang['current'] = 'Trenutna ACL Pravila'; +$lang['where'] = 'Stranica/Imenski prostor'; +$lang['who'] = 'Korisnik/Grupa'; +$lang['perm'] = 'Dozvole'; +$lang['acl_perm0'] = 'Ništa'; +$lang['acl_perm1'] = 'Čitaj'; +$lang['acl_perm2'] = 'Uredi'; +$lang['acl_perm4'] = 'Kreiraj'; +$lang['acl_perm8'] = 'Učitaj'; +$lang['acl_perm16'] = 'Briši'; +$lang['acl_new'] = 'Dodaj novi Zapis'; +$lang['acl_mod'] = 'Promijeni Zapis'; diff --git a/lib/plugins/config/lang/hr/lang.php b/lib/plugins/config/lang/hr/lang.php index d2094b77b..96f1d6afe 100644 --- a/lib/plugins/config/lang/hr/lang.php +++ b/lib/plugins/config/lang/hr/lang.php @@ -4,4 +4,5 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ diff --git a/lib/plugins/plugin/lang/hr/lang.php b/lib/plugins/plugin/lang/hr/lang.php index d2094b77b..96f1d6afe 100644 --- a/lib/plugins/plugin/lang/hr/lang.php +++ b/lib/plugins/plugin/lang/hr/lang.php @@ -4,4 +4,5 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ diff --git a/lib/plugins/popularity/lang/hr/lang.php b/lib/plugins/popularity/lang/hr/lang.php index d2094b77b..96f1d6afe 100644 --- a/lib/plugins/popularity/lang/hr/lang.php +++ b/lib/plugins/popularity/lang/hr/lang.php @@ -4,4 +4,5 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ diff --git a/lib/plugins/revert/lang/hr/lang.php b/lib/plugins/revert/lang/hr/lang.php index d2094b77b..96f1d6afe 100644 --- a/lib/plugins/revert/lang/hr/lang.php +++ b/lib/plugins/revert/lang/hr/lang.php @@ -4,4 +4,5 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ diff --git a/lib/plugins/usermanager/lang/hr/lang.php b/lib/plugins/usermanager/lang/hr/lang.php index d2094b77b..96f1d6afe 100644 --- a/lib/plugins/usermanager/lang/hr/lang.php +++ b/lib/plugins/usermanager/lang/hr/lang.php @@ -4,4 +4,5 @@ * * @author Branko Rihtman * @author Dražen Odobašić + * @author Dejan Igrec dejan.igrec@gmail.com */ -- cgit v1.2.3 From 63f4f854ffdcaed0985da6da32e960efbfab59c5 Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Sat, 30 Jul 2011 09:46:11 +0100 Subject: made TOC toggle faster to avoid clunky text flow around it --- lib/scripts/behaviour.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index dd7676432..a94e40b7a 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -104,7 +104,7 @@ var dw_behaviour = { .attr('id','toc__toggle') .css('cursor','pointer') .click(function(){ - $toc.slideToggle(); + $toc.slideToggle(200); setClicky(); }); $header.prepend($clicky); -- cgit v1.2.3 From 71d344831fe505f34e9be3fcbad3dadb7a2a409b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Neves?= Date: Sat, 30 Jul 2011 20:29:32 +0200 Subject: Portuguese language update --- lib/plugins/config/lang/pt/lang.php | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/plugins/config/lang/pt/lang.php b/lib/plugins/config/lang/pt/lang.php index 7f5eb9971..f4382aa94 100644 --- a/lib/plugins/config/lang/pt/lang.php +++ b/lib/plugins/config/lang/pt/lang.php @@ -112,6 +112,7 @@ $lang['jpg_quality'] = 'Compressão/Qualidade JPG (0-100)'; $lang['subscribers'] = 'Habilitar o suporte a subscrição de páginas '; $lang['subscribe_time'] = 'Tempo após o qual as listas de subscrição e "digests" são enviados (seg.); Isto deve ser inferior ao tempo especificado em recent_days.'; $lang['compress'] = 'Compactar as saídas de CSS e JavaScript'; +$lang['cssdatauri'] = 'Tamanho em bytes até ao qual as imagens referenciadas em ficheiros CSS devem ser embutidas diretamente no CSS para reduzir a carga de pedidos HTTP extra. Esta técnica não funciona em IE < 8! 400 a 600 bytes é um bom valor. Escolher 0 para desativar.'; $lang['hidepages'] = 'Esconder páginas correspondentes (expressões regulares)'; $lang['send404'] = 'Enviar "HTTP 404/Página não encontrada" para páginas não existentes'; $lang['sitemap'] = 'Gerar Sitemap Google (dias)'; -- cgit v1.2.3 From 4f616b5f20590d5f3a592bd53f2fc932968940d8 Mon Sep 17 00:00:00 2001 From: Christophe Martin Date: Sat, 30 Jul 2011 20:33:43 +0200 Subject: French language update --- lib/plugins/acl/lang/fr/lang.php | 1 + lib/plugins/config/lang/fr/lang.php | 2 ++ lib/plugins/plugin/lang/fr/lang.php | 1 + lib/plugins/popularity/lang/fr/lang.php | 1 + lib/plugins/revert/lang/fr/lang.php | 1 + lib/plugins/usermanager/lang/fr/lang.php | 1 + 6 files changed, 7 insertions(+) (limited to 'lib') diff --git a/lib/plugins/acl/lang/fr/lang.php b/lib/plugins/acl/lang/fr/lang.php index 36323a51f..fd3f40dfc 100644 --- a/lib/plugins/acl/lang/fr/lang.php +++ b/lib/plugins/acl/lang/fr/lang.php @@ -21,6 +21,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)'; $lang['acl_group'] = 'Groupe'; diff --git a/lib/plugins/config/lang/fr/lang.php b/lib/plugins/config/lang/fr/lang.php index 39a665da0..1de255b40 100644 --- a/lib/plugins/config/lang/fr/lang.php +++ b/lib/plugins/config/lang/fr/lang.php @@ -16,6 +16,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['menu'] = 'Paramètres de configuration'; $lang['error'] = 'Paramètres non modifiés en raison d\'une valeur non valide, vérifiez vos réglages et réessayez.
Les valeurs erronées sont entourées d\'une bordure rouge.'; @@ -120,6 +121,7 @@ $lang['jpg_quality'] = 'Qualité de la compression JPEG (0-100)'; $lang['subscribers'] = 'Activer l\'abonnement aux pages'; $lang['subscribe_time'] = 'Délai après lequel les listes d\'abonnement et résumés sont envoyés (en secondes). Devrait être plus petit que le délai précisé dans recent_days.'; $lang['compress'] = 'Compresser CSS et JavaScript'; +$lang['cssdatauri'] = 'Taille maximale en octets pour inclure dans les feuilles de styles CSS, les images qui y sont référencées. Cette technique minimise les requêtes HTTP. Pour IE, ceci ne fonctionne qu\'à partir de la version 8 ! Valeurs correctes entre 400 et 600. 0 pour désactiver.'; $lang['hidepages'] = 'Cacher les pages correspondant à (expression régulière)'; $lang['send404'] = 'Renvoyer "HTTP 404/Page Non Trouvée" pour les pages introuvables'; $lang['sitemap'] = 'Fréquence de génération une carte Google du site (en jours)'; diff --git a/lib/plugins/plugin/lang/fr/lang.php b/lib/plugins/plugin/lang/fr/lang.php index 2989d4913..0ff26da19 100644 --- a/lib/plugins/plugin/lang/fr/lang.php +++ b/lib/plugins/plugin/lang/fr/lang.php @@ -16,6 +16,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['menu'] = 'Gestion des modules externes'; $lang['download'] = 'Télécharger et installer un nouveau module'; diff --git a/lib/plugins/popularity/lang/fr/lang.php b/lib/plugins/popularity/lang/fr/lang.php index 9aaf3c7d2..3ccc4cb5f 100644 --- a/lib/plugins/popularity/lang/fr/lang.php +++ b/lib/plugins/popularity/lang/fr/lang.php @@ -13,6 +13,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['name'] = 'Enquête de popularité (peut nécessiter un certain temps pour être chargée)'; $lang['submit'] = 'Envoyer les données'; diff --git a/lib/plugins/revert/lang/fr/lang.php b/lib/plugins/revert/lang/fr/lang.php index d6dc3ee3d..17a2c3a01 100644 --- a/lib/plugins/revert/lang/fr/lang.php +++ b/lib/plugins/revert/lang/fr/lang.php @@ -14,6 +14,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['menu'] = 'Gestionnaire de réversions'; $lang['filter'] = 'Trouver les pages spammées '; diff --git a/lib/plugins/usermanager/lang/fr/lang.php b/lib/plugins/usermanager/lang/fr/lang.php index 49baf9d51..b6910663c 100644 --- a/lib/plugins/usermanager/lang/fr/lang.php +++ b/lib/plugins/usermanager/lang/fr/lang.php @@ -15,6 +15,7 @@ * @author Florian Gaub * @author Samuel Dorsaz samuel.dorsaz@novelion.net * @author Johan Guilbaud + * @author schplurtz@laposte.net */ $lang['menu'] = 'Gestion des utilisateurs'; $lang['noauth'] = '(authentification utilisateur non disponible)'; -- cgit v1.2.3 From 872a6d295eacbfa8abad2877ec4e367930da3692 Mon Sep 17 00:00:00 2001 From: Anika Henke Date: Sun, 31 Jul 2011 00:52:10 +0100 Subject: added apple-touch-icon (aka 'mobile favicon') --- lib/tpl/default/images/apple-touch-icon.png | Bin 0 -> 17728 bytes lib/tpl/default/main.php | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 lib/tpl/default/images/apple-touch-icon.png (limited to 'lib') diff --git a/lib/tpl/default/images/apple-touch-icon.png b/lib/tpl/default/images/apple-touch-icon.png new file mode 100644 index 000000000..45fa4e7b0 Binary files /dev/null and b/lib/tpl/default/images/apple-touch-icon.png differ diff --git a/lib/tpl/default/main.php b/lib/tpl/default/main.php index 94c2322aa..26e84fde6 100644 --- a/lib/tpl/default/main.php +++ b/lib/tpl/default/main.php @@ -28,8 +28,7 @@ if (!defined('DOKU_INC')) die(); - - + -- cgit v1.2.3 From 11cfbdbd017ee1dedbcebd99a694421c1b815f65 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Mon, 1 Aug 2011 00:01:21 +0200 Subject: fixed media insertion FS#2298 --- lib/scripts/media.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/scripts/media.js b/lib/scripts/media.js index b9dacfa29..1402ad4bf 100644 --- a/lib/scripts/media.js +++ b/lib/scripts/media.js @@ -135,7 +135,7 @@ var dw_mediamanager = { * @author Dominik Eckelmann * @author Pierre Spring */ - insert: function () { + insert: function (id) { var opts, alignleft, alignright, edid, s; // set syntax options -- cgit v1.2.3 From 4678059bd0b91fb4d92aaa85cd5d0855818a2c30 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 14 Aug 2011 17:29:44 +0200 Subject: don't remove msg() errors on click this interferred with copy'n'pasting error messages --- lib/scripts/behaviour.js | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index a94e40b7a..aadf74a1c 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -13,7 +13,6 @@ var dw_behaviour = { init: function(){ dw_behaviour.focusMarker(); dw_behaviour.scrollToMarker(); - dw_behaviour.closeMsgOnClick(); dw_behaviour.removeHighlightOnClick(); dw_behaviour.quickSelect(); dw_behaviour.checkWindowsShares(); @@ -37,17 +36,6 @@ var dw_behaviour = { jQuery('#focus__this').focus(); }, - /** - * Close messages shown by the msg() PHP function by click - */ - closeMsgOnClick: function(){ - jQuery('div.success, div.info, div.error, div.notify').click( - function(e){ - jQuery(e.target).fadeOut('fast'); - } - ); - }, - /** * Remove all search highlighting when clicking on a highlighted term * -- cgit v1.2.3 From b2a330ca75f1ceec063a08029abb0204110e3601 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sat, 6 Aug 2011 13:56:57 +0200 Subject: removed events.js --- lib/exe/js.php | 1 - lib/scripts/compatibility.js | 15 +++++++++++++ lib/scripts/events.js | 50 -------------------------------------------- lib/scripts/helpers.js | 29 +++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 51 deletions(-) delete mode 100644 lib/scripts/events.js (limited to 'lib') diff --git a/lib/exe/js.php b/lib/exe/js.php index 44ab2d5ca..4355cbfd7 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -44,7 +44,6 @@ function js_out(){ DOKU_INC.'lib/scripts/jquery/jquery.cookie.js', DOKU_INC."lib/scripts/jquery/jquery-ui$min.js", DOKU_INC.'lib/scripts/helpers.js', - DOKU_INC.'lib/scripts/events.js', DOKU_INC.'lib/scripts/delay.js', DOKU_INC.'lib/scripts/cookie.js', DOKU_INC.'lib/scripts/script.js', diff --git a/lib/scripts/compatibility.js b/lib/scripts/compatibility.js index 13b088582..a5cc87e58 100644 --- a/lib/scripts/compatibility.js +++ b/lib/scripts/compatibility.js @@ -108,3 +108,18 @@ function prependChild(parent,element) { jQuery(parent).prepend(element); } +function addEvent(element, type, handler) { + DEPRECATED('Use jQuery.bind() instead.'); + jQuery(element).bind(type,{},handler); +} + +function removeEvent(element, type, handler) { + DEPRECATED('Use jQuery.unbind() instead.'); + jQuery(element).unbind(type,handler); +} + +function addInitEvent(func) { + DEPRECATED('Use jQuery() instead'); + jQuery(func); +} + diff --git a/lib/scripts/events.js b/lib/scripts/events.js deleted file mode 100644 index 796d3cc4c..000000000 --- a/lib/scripts/events.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * The event functions are no longer in use and a mere wrapper around - * jQuery's event handlers. - * - * @deprecated - */ -function addEvent(element, type, handler) { - DEPRECATED('Use jQuery.bind() instead.'); - jQuery(element).bind(type,{},handler); -} - -function removeEvent(element, type, handler) { - DEPRECATED('Use jQuery.unbind() instead.'); - jQuery(element).unbind(type,handler); -} - -function addInitEvent(func) { - DEPRECATED('Use jQuery() instead'); - jQuery(func); -} - -/** - * Bind variables to a function call creating a closure - * - * Use this to circumvent variable scope problems when creating closures - * inside a loop - * - * @author Adrian Lang - * @fixme Is there a jQuery equivalent? Otherwise move to somewhere else - * @link http://www.cosmocode.de/en/blog/gohr/2009-10/15-javascript-fixing-the-closure-scope-in-loops - * @param functionref fnc - the function to be called - * @param mixed - any arguments to be passed to the function - * @returns functionref - */ -function bind(fnc/*, ... */) { - var Aps = Array.prototype.slice; - // Store passed arguments in this scope. - // Since arguments is no Array nor has an own slice method, - // we have to apply the slice method from the Array.prototype - var static_args = Aps.call(arguments, 1); - - // Return a function evaluating the passed function with the - // given args and optional arguments passed on invocation. - return function (/* ... */) { - // Same here, but we use Array.prototype.slice solely for - // converting arguments to an Array. - return fnc.apply(this, - static_args.concat(Aps.call(arguments, 0))); - }; -} diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js index 77e7ffc4a..b286965cf 100644 --- a/lib/scripts/helpers.js +++ b/lib/scripts/helpers.js @@ -163,3 +163,32 @@ function substr_replace(str, replace, start, length) { b1 = (length < 0 ? str.length : a2) + length; return str.substring(0, a2) + replace + str.substring(b1); } + +/** + * Bind variables to a function call creating a closure + * + * Use this to circumvent variable scope problems when creating closures + * inside a loop + * + * @author Adrian Lang + * @link http://www.cosmocode.de/en/blog/gohr/2009-10/15-javascript-fixing-the-closure-scope-in-loops + * @param functionref fnc - the function to be called + * @param mixed - any arguments to be passed to the function + * @returns functionref + */ +function bind(fnc/*, ... */) { + var Aps = Array.prototype.slice; + // Store passed arguments in this scope. + // Since arguments is no Array nor has an own slice method, + // we have to apply the slice method from the Array.prototype + var static_args = Aps.call(arguments, 1); + + // Return a function evaluating the passed function with the + // given args and optional arguments passed on invocation. + return function (/* ... */) { + // Same here, but we use Array.prototype.slice solely for + // converting arguments to an Array. + return fnc.apply(this, + static_args.concat(Aps.call(arguments, 0))); + }; +} -- cgit v1.2.3 From d4228d2db11332beba5ca9fa483a45e31a9edbe9 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 18 Aug 2011 09:45:28 +0200 Subject: popularity plugin: send info on autosend Added information about the autosubmitting feature of the popularity plugin itself. --- lib/plugins/popularity/helper.php | 1 + lib/plugins/popularity/plugin.info.txt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/plugins/popularity/helper.php b/lib/plugins/popularity/helper.php index 5ce562319..af1e8a706 100644 --- a/lib/plugins/popularity/helper.php +++ b/lib/plugins/popularity/helper.php @@ -134,6 +134,7 @@ class helper_plugin_popularity extends Dokuwiki_Plugin { $data['popversion'] = $this->version; $data['language'] = $conf['lang']; $data['now'] = time(); + $data['popauto'] = (int) $this->isAutoSubmitEnabled(); // some config values $data['conf_useacl'] = $conf['useacl']; diff --git a/lib/plugins/popularity/plugin.info.txt b/lib/plugins/popularity/plugin.info.txt index 2652bd669..16b148f41 100644 --- a/lib/plugins/popularity/plugin.info.txt +++ b/lib/plugins/popularity/plugin.info.txt @@ -1,7 +1,7 @@ base popularity author Andreas Gohr email andi@splitbrain.org -date 2010-12-09 +date 2011-08-18 name Popularity Feedback Plugin desc Send anonymous data about your wiki to the developers. url http://www.dokuwiki.org/plugin:popularity -- cgit v1.2.3 From 5b812846ce6a2e72e388adbb0dcaadbc0137b173 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 18 Aug 2011 10:30:16 +0200 Subject: jqueryized usermanager script --- lib/plugins/usermanager/script.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'lib') diff --git a/lib/plugins/usermanager/script.js b/lib/plugins/usermanager/script.js index 68d437129..de013242b 100644 --- a/lib/plugins/usermanager/script.js +++ b/lib/plugins/usermanager/script.js @@ -1,9 +1,8 @@ /** * Add JavaScript confirmation to the User Delete button */ -function usrmgr_delconfirm(){ - if($('usrmgr__del')){ - addEvent( $('usrmgr__del'),'click',function(){ return confirm(reallyDel); } ); - } -}; -addInitEvent(usrmgr_delconfirm); +jQuery(function(){ + jQuery('#usrmgr__del').click(function(){ + return confirm(LANG.del_confirm); + }); +}); -- cgit v1.2.3 From 20e3e8ebefec296327d39fb572b06d60c151c867 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 18 Aug 2011 11:36:18 +0200 Subject: added some function comments --- lib/scripts/behaviour.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index aadf74a1c..6012e5d1d 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -112,14 +112,31 @@ var dw_behaviour = { }; +/** + * Hides elements with a slide animation + * + * @param fn optional callback to run after hiding + * @author Adrian Lang + */ jQuery.fn.dw_hide = function(fn) { return this.slideUp('fast', fn); }; -jQuery.fn.dw_show = function() { - return this.slideDown('fast'); +/** + * Unhides elements with a slide animation + * + * @param fn optional callback to run after hiding + * @author Adrian Lang + */ +jQuery.fn.dw_show = function(fn) { + return this.slideDown('fast', fn); }; +/** + * Toggles visibility of an element using a slide element + * + * @param bool the current state of the element (optional) + */ jQuery.fn.dw_toggle = function(bool) { return this.each(function() { var $this = jQuery(this); -- cgit v1.2.3 From 02782d1287173f3981a008755958543c178de296 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 18 Aug 2011 12:24:43 +0200 Subject: moved subscription javascript into behaviour --- lib/exe/js.php | 1 - lib/scripts/behaviour.js | 36 +++++++++++++++++++++++++++++++++++- lib/scripts/subscriptions.js | 38 -------------------------------------- 3 files changed, 35 insertions(+), 40 deletions(-) delete mode 100644 lib/scripts/subscriptions.js (limited to 'lib') diff --git a/lib/exe/js.php b/lib/exe/js.php index 4355cbfd7..93d5439e0 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -59,7 +59,6 @@ function js_out(){ DOKU_INC.'lib/scripts/locktimer.js', DOKU_INC.'lib/scripts/linkwiz.js', DOKU_INC.'lib/scripts/media.js', - DOKU_INC.'lib/scripts/subscriptions.js', DOKU_INC.'lib/scripts/compatibility.js', # disabled for FS#1958 DOKU_INC.'lib/scripts/hotkeys.js', DOKU_TPLINC.'script.js', diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index 6012e5d1d..0f69d5721 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -17,6 +17,7 @@ var dw_behaviour = { dw_behaviour.quickSelect(); dw_behaviour.checkWindowsShares(); dw_behaviour.initTocToggle(); + dw_behaviour.subscription(); }, /** @@ -108,8 +109,41 @@ var dw_behaviour = { }; setClicky(); - } + }, + /** + * Hide list subscription style if target is a page + * + * @author Adrian Lang + * @author Pierre Spring + */ + subscription: function(){ + var $form, $list, $digest; + + $form = jQuery('#subscribe__form'); + if (0 === $form.length) return; + + $list = $form.find("input[name='sub_style'][value='list']"); + $digest = $form.find("input[name='sub_style'][value='digest']"); + + $form.find("input[name='sub_target']") + .click( + function () { + var $this = jQuery(this), show_list; + if (!$this.prop('checked')) { + return; + } + + show_list = $this.val().match(/:$/); + $list.parent().dw_toggle(show_list); + if (!show_list && $list.prop('checked')) { + $digest.prop('checked', 'checked'); + } + } + ) + .filter(':checked') + .click(); + } }; /** diff --git a/lib/scripts/subscriptions.js b/lib/scripts/subscriptions.js deleted file mode 100644 index b7bffb158..000000000 --- a/lib/scripts/subscriptions.js +++ /dev/null @@ -1,38 +0,0 @@ -/*jslint sloppy: true */ -/*global jQuery */ -/** - * Hide list subscription style if target is a page - * - * @author Adrian Lang - * @author Pierre Spring - */ -jQuery(function () { - var $form, $list, $digest; - - $form = jQuery('#subscribe__form'); - - if (0 === $form.length) { - return; - } - - $list = $form.find("input[name='sub_style'][value='list']"); - $digest = $form.find("input[name='sub_style'][value='digest']"); - - $form.find("input[name='sub_target']") - .click( - function () { - var $this = jQuery(this), show_list; - if (!$this.prop('checked')) { - return; - } - - show_list = $this.val().match(/:$/); - $list.parent().dw_toggle(show_list); - if (!show_list && $list.prop('checked')) { - $digest.prop('checked', 'checked'); - } - } - ) - .filter(':checked') - .click(); -}); -- cgit v1.2.3 From fbedf1265a6551391cbb7442ec5f9360328ff508 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Thu, 18 Aug 2011 15:17:54 +0200 Subject: moved footnotes and section highlighting to ne file jquerized --- lib/exe/js.php | 3 +- lib/scripts/script.js | 133 -------------------------------------------------- 2 files changed, 2 insertions(+), 134 deletions(-) (limited to 'lib') diff --git a/lib/exe/js.php b/lib/exe/js.php index 93d5439e0..0e0a22d42 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -61,8 +61,9 @@ function js_out(){ DOKU_INC.'lib/scripts/media.js', DOKU_INC.'lib/scripts/compatibility.js', # disabled for FS#1958 DOKU_INC.'lib/scripts/hotkeys.js', - DOKU_TPLINC.'script.js', DOKU_INC.'lib/scripts/behaviour.js', + DOKU_INC.'lib/scripts/page.js', + DOKU_TPLINC.'script.js', ); // add possible plugin scripts and userscript diff --git a/lib/scripts/script.js b/lib/scripts/script.js index b44d95d6f..3e2ec4f89 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -180,104 +180,6 @@ function hideLoadBar(id){ if(obj) obj.style.display="none"; } - -/** - * Create JavaScript mouseover popup - */ -function insitu_popup(target, popup_id) { - - // get or create the popup div - var fndiv = $(popup_id); - if(!fndiv){ - fndiv = document.createElement('div'); - fndiv.id = popup_id; - fndiv.className = 'insitu-footnote JSpopup dokuwiki'; - - // autoclose on mouseout - ignoring bubbled up events - addEvent(fndiv,'mouseout',function(e){ - var p = e.relatedTarget || e.toElement; - while (p && p !== this) { - p = p.parentNode; - } - if (p === this) { - return; - } - // okay, hide it - this.style.display='none'; - }); - getElementsByClass('dokuwiki', document.body, 'div')[0].appendChild(fndiv); - } - - var non_static_parent = fndiv.parentNode; - while (non_static_parent != document && gcs(non_static_parent)['position'] == 'static') { - non_static_parent = non_static_parent.parentNode; - } - - var fixed_target_parent = target; - while (fixed_target_parent != document && gcs(fixed_target_parent)['position'] != 'fixed') { - fixed_target_parent = fixed_target_parent.parentNode; - } - - // position the div and make it visible - if (fixed_target_parent != document) { - // the target has position fixed, that means the footnote needs to be fixed, too - fndiv.style.position = 'fixed'; - } else { - fndiv.style.position = 'absolute'; - } - - if (fixed_target_parent != document || non_static_parent == document) { - fndiv.style.left = findPosX(target)+'px'; - fndiv.style.top = (findPosY(target)+target.offsetHeight * 1.5) + 'px'; - } else { - fndiv.style.left = (findPosX(target) - findPosX(non_static_parent)) +'px'; - fndiv.style.top = (findPosY(target)+target.offsetHeight * 1.5 - findPosY(non_static_parent)) + 'px'; - } - - fndiv.style.display = ''; - return fndiv; -} - -/** - * Display an insitu footnote popup - * - * @author Andreas Gohr - * @author Chris Smith - */ -function footnote(e){ - var fndiv = insitu_popup(e.target, 'insitu__fn'); - - // locate the footnote anchor element - var a = $("fn__" + e.target.id.substr(5)); - if (!a){ return; } - - // anchor parent is the footnote container, get its innerHTML - var content = new String (a.parentNode.parentNode.innerHTML); - - // strip the leading content anchors and their comma separators - content = content.replace(/.*<\/sup>/gi, ''); - content = content.replace(/^\s+(,\s+)+/,''); - - // prefix ids on any elements with "insitu__" to ensure they remain unique - content = content.replace(/\bid=(['"])([^"']+)\1/gi,'id="insitu__$2'); - - // now put the content into the wrapper - fndiv.innerHTML = content; -} - -/** - * Add the event handlers to footnotes - * - * @author Andreas Gohr - */ -addInitEvent(function(){ - var elems = getElementsByClass('fn_top',null,'a'); - for(var i=0; i - */ -addInitEvent(function(){ - var btns = getElementsByClass('btn_secedit',document,'form'); - for(var i=0; i Date: Thu, 18 Aug 2011 20:45:07 +0200 Subject: added link to popularity page in intro FS#2305 --- lib/plugins/popularity/lang/de/intro.txt | 2 +- lib/plugins/popularity/lang/en/intro.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'lib') diff --git a/lib/plugins/popularity/lang/de/intro.txt b/lib/plugins/popularity/lang/de/intro.txt index 63b120662..dc014e029 100644 --- a/lib/plugins/popularity/lang/de/intro.txt +++ b/lib/plugins/popularity/lang/de/intro.txt @@ -1,6 +1,6 @@ ====== Popularitäts-Feedback ====== -Dieses Werkzeug sammelt verschiedene anonyme Daten über Ihr Wiki und erlaubt es Ihnen, diese an die DokuWiki-Entwickler zurückzusenden. Diese Daten helfen den Entwicklern besser zu verstehen, wie DokuWiki eingesetzt wird und stellt sicher, dass zukünftige, die Weiterentwicklung von DokuWiki betreffende, Entscheidungen auf Basis echter Nutzerdaten getroffen werden. +Dieses [[doku>popularity|Werkzeug]] sammelt verschiedene anonyme Daten über Ihr Wiki und erlaubt es Ihnen, diese an die DokuWiki-Entwickler zurückzusenden. Diese Daten helfen den Entwicklern besser zu verstehen, wie DokuWiki eingesetzt wird und stellt sicher, dass zukünftige, die Weiterentwicklung von DokuWiki betreffende, Entscheidungen auf Basis echter Nutzerdaten getroffen werden. Bitte wiederholen Sie das Versenden der Daten von Zeit zu Zeit, um die Entwickler über das Wachstum Ihres Wikis auf dem Laufenden zu halten. Ihre wiederholten Dateneinsendungen werden über eine anonyme ID identifiziert. diff --git a/lib/plugins/popularity/lang/en/intro.txt b/lib/plugins/popularity/lang/en/intro.txt index 0812ffbe3..e1d6d940a 100644 --- a/lib/plugins/popularity/lang/en/intro.txt +++ b/lib/plugins/popularity/lang/en/intro.txt @@ -1,6 +1,6 @@ ====== Popularity Feedback ====== -This tool gathers anonymous data about your wiki and allows you to send it back to the DokuWiki developers. This helps them to understand them how DokuWiki is used by its users and makes sure future development decisions are backed up by real world usage statistics. +This [[doku>popularity|tool]] gathers anonymous data about your wiki and allows you to send it back to the DokuWiki developers. This helps them to understand them how DokuWiki is used by its users and makes sure future development decisions are backed up by real world usage statistics. You are encouraged to repeat this step from time to time to keep developers informed when your wiki grows. Your repeated data sets will be identified by an anonymous ID. -- cgit v1.2.3 From 37f58beb831123388fa2373e0540fc8a5e585dac Mon Sep 17 00:00:00 2001 From: Guillaume Turri Date: Fri, 19 Aug 2011 21:34:16 +0300 Subject: French localization of 69b3d ("added link to popularity page in intro FS#2305") --- lib/plugins/popularity/lang/fr/intro.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/plugins/popularity/lang/fr/intro.txt b/lib/plugins/popularity/lang/fr/intro.txt index 58be61d03..041e65d69 100644 --- a/lib/plugins/popularity/lang/fr/intro.txt +++ b/lib/plugins/popularity/lang/fr/intro.txt @@ -1,6 +1,6 @@ ====== Enquête de popularité ====== -Cet outil collecte des données anonymes concernant votre wiki et vous permet de les expédier aux développeurs de DokuWiki. Ceci leur permet de mieux comprendre comment DokuWiki est employé par ses utilisateurs et d'orienter les décisions sur les développements futurs en tenant compte des statistiques d'usage réel. +Cet [[doku>popularity|outil]] collecte des données anonymes concernant votre wiki et vous permet de les expédier aux développeurs de DokuWiki. Ceci leur permet de mieux comprendre comment DokuWiki est employé par ses utilisateurs et d'orienter les décisions sur les développements futurs en tenant compte des statistiques d'usage réel. Vous êtes encouragé à répéter l'opération de collecte et d'envoi des données anonymes de temps en temps afin d'informer les développeurs de la croissance de votre wiki. -- cgit v1.2.3 From f48fbadf2218e4ad1df6909374c30bddbb7a24bb Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 11:24:07 +0200 Subject: added missing file yeah, yeah I know... --- lib/scripts/page.js | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 lib/scripts/page.js (limited to 'lib') diff --git a/lib/scripts/page.js b/lib/scripts/page.js new file mode 100644 index 000000000..189c1f148 --- /dev/null +++ b/lib/scripts/page.js @@ -0,0 +1,115 @@ +/** + * Page behaviours + * + * This class adds various behaviours to the rendered page + */ +dw_page = { + /** + * initialize page behaviours + */ + init: function(){ + dw_page.sectionHighlight(); + jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay); + }, + + /** + * Highlight the section when hovering over the appropriate section edit button + * + * @author Andreas Gohr + */ + sectionHighlight: function() { + jQuery('form.btn_secedit') + .mouseover(function(e){ + var tgt = this.parentNode; + var nr = tgt.className.match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2]; + do { + tgt = tgt.previousSibling; + } while (tgt !== null && typeof tgt.tagName === 'undefined'); + if (tgt === null) return; + while(typeof tgt.className === 'undefined' || + tgt.className.match('(\\s+|^)sectionedit' + nr + '(\\s+|$)') === null) { + if (typeof tgt.className !== 'undefined') { + jQuery(tgt).addClass('section_highlight'); + } + tgt = (tgt.previousSibling !== null) ? tgt.previousSibling : tgt.parentNode; + } + + jQuery(tgt).addClass('section_highlight'); + }) + .mouseout(function(e){ + jQuery('.section_highlight').removeClass('section_highlight'); + }); + }, + + /** + * Create/get a insitu popup used by the footnotes + * + * @param target - the DOM element at which the popup should be aligned at + * @param popup_id - the ID of the (new) DOM popup + * @return the Popup JQuery object + */ + insituPopup: function(target, popup_id) { + // get or create the popup div + var $fndiv = jQuery('#popup_id'); + + // popup doesn't exist, yet -> create it + if(!$fndiv.length){ + $fndiv = jQuery(document.createElement('div')) + .attr('id', popup_id) + .addClass('insitu-footnote JSpopup') + .mouseout(function(e){ + // autoclose on mouseout - ignoring bubbled up events + //FIXME can this made simpler in jQuery? + var p = e.relatedTarget || e.toElement; + while (p && p !== this) { + p = p.parentNode; + } + if (p === this) { + return; + } + jQuery(this).hide(); + }); + + jQuery('div.dokuwiki:first').append($fndiv); + } + + $fndiv.position({ + my: 'left top', + at: 'left center', + of: target + }); + + $fndiv.hide(); + return $fndiv; + }, + + /** + * Display an insitu footnote popup + * + * @author Andreas Gohr + * @author Chris Smith + */ + footnoteDisplay: function(e){ + var $fndiv = dw_page.insituPopup(e.target, 'insitu__fn'); + + // locate the footnote anchor element + var $a = jQuery("#fn__" + e.target.id.substr(5)); + if (!$a.length){ return; } + + // anchor parent is the footnote container, get its innerHTML + var content = new String ($a.parent().parent().html()); + + // strip the leading content anchors and their comma separators + content = content.replace(/.*<\/sup>/gi, ''); + content = content.replace(/^\s+(,\s+)+/,''); + + // prefix ids on any elements with "insitu__" to ensure they remain unique + content = content.replace(/\bid=(['"])([^"']+)\1/gi,'id="insitu__$2'); + + // now put the content into the wrapper + $fndiv.html(content); + $fndiv.show(); + } +}; + +jQuery(dw_page.init); -- cgit v1.2.3 From 99e7bfd4c733d81cd01dd2d97e10bb4dda62df66 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 11:35:58 +0200 Subject: jqueryized locktimer --- lib/exe/js.php | 2 +- lib/scripts/locktimer.js | 72 +++++++++++++++++++++++------------------------- 2 files changed, 35 insertions(+), 39 deletions(-) (limited to 'lib') diff --git a/lib/exe/js.php b/lib/exe/js.php index 0e0a22d42..e96d45ee6 100644 --- a/lib/exe/js.php +++ b/lib/exe/js.php @@ -109,7 +109,7 @@ function js_out(){ js_runonstart("addEvent(document,'click',closePopups)"); js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)"); if($conf['locktime'] != 0){ - js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].", 'wiki__text')"); + js_runonstart("dw_locktimer.init(".($conf['locktime'] - 60).",".$conf['usedraft'].")"); } // init hotkeys - must have been done after init of toolbar # disabled for FS#1958 js_runonstart('initializeHotkeys()'); diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js index 60508a8e7..b83840557 100644 --- a/lib/scripts/locktimer.js +++ b/lib/scripts/locktimer.js @@ -1,64 +1,62 @@ /** -* Class managing the timer to display a warning on a expiring lock -*/ -var locktimer = { - sack: null, + * Class managing the timer to display a warning on a expiring lock + */ +var dw_locktimer = { timeout: 0, + draft: false, timerID: null, lasttime: null, msg: '', pageid: '', - init: function(timeout,msg,draft,edid){ - var edit = $(edid); - if(!edit) return; - if(edit.readOnly) return; + /** + * Initialize the lock timer + * + * @param int timeout Lenght of timeout in seconds + * @param bool draft save drafts + */ + init: function(timeout,draft){ //FIXME which elements to pass here? + var $edit = jQuery('#wiki__text'); + if(!$edit.length) return; + if($edit.attr('readonly')) return; // init values - this.timeout = timeout*1000; - this.msg = msg; - this.draft = draft; - this.lasttime = new Date(); + dw_locktimer.timeout = timeout*1000; + dw_locktimer.draft = draft; + dw_locktimer.lasttime = new Date(); - if(jQuery('#dw__editform').length == 0) return; - this.pageid = jQuery('#dw__editform input[name=id]').val(); - if(!this.pageid) return; - - if(jQuery('#wiki__text').attr('readonly')) return; + dw_locktimer.pageid = jQuery('#dw__editform input[name=id]').val(); + if(!dw_locktimer.pageid) return; // register refresh event - jQuery('#dw__editform').keypress( - function() { - locktimer.refresh(); - } - ); + jQuery('#wiki__text').keypress(dw_locktimer.refresh); // start timer - this.reset(); + dw_locktimer.reset(); }, /** * (Re)start the warning timer */ reset: function(){ - this.clear(); - this.timerID = window.setTimeout("locktimer.warning()", this.timeout); + dw_locktimer.clear(); + dw_locktimer.timerID = window.setTimeout(dw_locktimer.warning, dw_locktimer.timeout); }, /** * Display the warning about the expiring lock */ warning: function(){ - this.clear(); - alert(this.msg); + dw_locktimer.clear(); + alert(LANG.willexpire.replace(/\\n/,"\n")); }, /** * Remove the current warning timer */ clear: function(){ - if(this.timerID !== null){ - window.clearTimeout(this.timerID); - this.timerID = null; + if(dw_locktimer.timerID !== null){ + window.clearTimeout(dw_locktimer.timerID); + dw_locktimer.timerID = null; } }, @@ -71,11 +69,11 @@ var locktimer = { var now = new Date(); var params = {}; // refresh every minute only - if(now.getTime() - this.lasttime.getTime() > 30*1000){ + if(now.getTime() - dw_locktimer.lasttime.getTime() > 30*1000){ params['call'] = 'lock'; - params['id'] = locktimer.pageid; + params['id'] = dw_locktimer.pageid; - if(locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){ + if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){ params['prefix'] = jQuery('#dw__editform input[name=prefix]').val(); params['wikitext'] = jQuery('#dw__editform textarea[name=wikitext]').val(); params['suffix'] = jQuery('#dw__editform input[name=suffix]').val(); @@ -87,12 +85,10 @@ var locktimer = { jQuery.post( DOKU_BASE + 'lib/exe/ajax.php', params, - function (data) { - locktimer.refreshed(data); - }, + dw_locktimer.refreshed, 'html' ); - this.lasttime = now; + dw_locktimer.lasttime = now; } }, @@ -105,6 +101,6 @@ var locktimer = { jQuery('#draft__status').html(data); if(error != '1') return; // locking failed - this.reset(); + dw_locktimer.reset(); } }; -- cgit v1.2.3 From eea912192ec9661fe82639db9442586954f6932e Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Fri, 19 Aug 2011 12:10:36 +0200 Subject: Fix popup DOM element sharing, simplify event handling --- lib/scripts/page.js | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) (limited to 'lib') diff --git a/lib/scripts/page.js b/lib/scripts/page.js index 189c1f148..f5d84e239 100644 --- a/lib/scripts/page.js +++ b/lib/scripts/page.js @@ -50,36 +50,24 @@ dw_page = { */ insituPopup: function(target, popup_id) { // get or create the popup div - var $fndiv = jQuery('#popup_id'); + var $fndiv = jQuery('#' + popup_id); // popup doesn't exist, yet -> create it - if(!$fndiv.length){ + if($fndiv.length === 0){ $fndiv = jQuery(document.createElement('div')) .attr('id', popup_id) .addClass('insitu-footnote JSpopup') - .mouseout(function(e){ - // autoclose on mouseout - ignoring bubbled up events - //FIXME can this made simpler in jQuery? - var p = e.relatedTarget || e.toElement; - while (p && p !== this) { - p = p.parentNode; - } - if (p === this) { - return; - } - jQuery(this).hide(); - }); - + .mouseleave(function () {jQuery(this).hide();}); jQuery('div.dokuwiki:first').append($fndiv); } - $fndiv.position({ + // position() does not support hidden elements + $fndiv.show().position({ my: 'left top', at: 'left center', of: target - }); + }).hide(); - $fndiv.hide(); return $fndiv; }, @@ -90,7 +78,7 @@ dw_page = { * @author Chris Smith */ footnoteDisplay: function(e){ - var $fndiv = dw_page.insituPopup(e.target, 'insitu__fn'); + var $fndiv = dw_page.insituPopup(this, 'insitu__fn'); // locate the footnote anchor element var $a = jQuery("#fn__" + e.target.id.substr(5)); -- cgit v1.2.3 From 2c5ba7b2e80436af80001c436908217885ce4be3 Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Fri, 19 Aug 2011 13:03:38 +0200 Subject: jQuerify edit section highlighting --- lib/scripts/page.js | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'lib') diff --git a/lib/scripts/page.js b/lib/scripts/page.js index f5d84e239..05c5ece20 100644 --- a/lib/scripts/page.js +++ b/lib/scripts/page.js @@ -19,24 +19,20 @@ dw_page = { */ sectionHighlight: function() { jQuery('form.btn_secedit') - .mouseover(function(e){ - var tgt = this.parentNode; - var nr = tgt.className.match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2]; - do { - tgt = tgt.previousSibling; - } while (tgt !== null && typeof tgt.tagName === 'undefined'); - if (tgt === null) return; - while(typeof tgt.className === 'undefined' || - tgt.className.match('(\\s+|^)sectionedit' + nr + '(\\s+|$)') === null) { - if (typeof tgt.className !== 'undefined') { - jQuery(tgt).addClass('section_highlight'); - } - tgt = (tgt.previousSibling !== null) ? tgt.previousSibling : tgt.parentNode; - } + .mouseover(function(){ + var $tgt = jQuery(this).parent(); + var nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2]; - jQuery(tgt).addClass('section_highlight'); + // Walk the DOM tree up (first previous siblings, then parents) + // until boundary element + while($tgt.length > 0 && !$tgt.hasClass('sectionedit' + nr)) { + // $.last gives the DOM-ordered last element: + // prev if present, else parent. + $tgt = $tgt.prev().add($tgt.parent()).last(); + $tgt.addClass('section_highlight'); + } }) - .mouseout(function(e){ + .mouseout(function(){ jQuery('.section_highlight').removeClass('section_highlight'); }); }, -- cgit v1.2.3 From 38331508a78e955e63596e778f863996dfa7763b Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 13:06:25 +0200 Subject: jqueryized diff checkbox script --- lib/scripts/behaviour.js | 30 ++++++++++++++++++++++++++++++ lib/scripts/script.js | 28 ---------------------------- 2 files changed, 30 insertions(+), 28 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index 0f69d5721..1580ae86f 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -18,6 +18,11 @@ var dw_behaviour = { dw_behaviour.checkWindowsShares(); dw_behaviour.initTocToggle(); dw_behaviour.subscription(); + + dw_behaviour.revisionBoxHandler(); + jQuery('#page__revisions input[type=checkbox]').click( + dw_behaviour.revisionBoxHandler + ); }, /** @@ -143,7 +148,32 @@ var dw_behaviour = { ) .filter(':checked') .click(); + }, + + /** + * disable multiple revisions checkboxes if two are checked + * + * @author Andreas Gohr + */ + revisionBoxHandler: function(){ + var $checked = jQuery('#page__revisions input[type=checkbox]:checked'); + var $all = jQuery('#page__revisions input[type=checkbox]'); + + if($checked.length < 2){ + $all.attr('disabled',false); + jQuery('#page__revisions input[type=submit]').attr('disabled',true); + }else{ + $all.attr('disabled',true); + jQuery('#page__revisions input[type=submit]').attr('disabled',false); + for(var i=0; i<$checked.length; i++){ + $checked[i].disabled = false; + if(i>1){ + $checked[i].checked = false; + } + } + } } + }; /** diff --git a/lib/scripts/script.js b/lib/scripts/script.js index 3e2ec4f89..caa2a107c 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -187,32 +187,4 @@ function closePopups(){ jQuery('div.JSpopup').hide(); } -/** - * disable multiple revisions checkboxes if two are checked - * - * @author Anika Henke - */ -addInitEvent(function(){ - var revForm = $('page__revisions'); - if (!revForm) return; - var elems = revForm.elements; - var countTicks = 0; - for (var i=0; i= 2) input2.disabled = (input2.type=='checkbox' && !input2.checked); - else input2.disabled = (input2.type!='checkbox'); - } - }); - input1.checked = false; // chrome reselects on back button which messes up the logic - } else if(input1.type=='submit'){ - input1.disabled = true; - } - } -}); -- cgit v1.2.3 From 26fc53c6a8fe022cd60b5df5474cfbe35afd34e4 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 15:40:58 +0200 Subject: moved more stuff out from script.js the file is nearly empty now --- lib/scripts/compatibility.js | 87 +++++++++++++++++++++ lib/scripts/helpers.js | 178 ++++++++++++++++++++++++++----------------- lib/scripts/script.js | 128 ------------------------------- 3 files changed, 197 insertions(+), 196 deletions(-) (limited to 'lib') diff --git a/lib/scripts/compatibility.js b/lib/scripts/compatibility.js index a5cc87e58..ddc8823d3 100644 --- a/lib/scripts/compatibility.js +++ b/lib/scripts/compatibility.js @@ -1,6 +1,78 @@ /*jslint sloppy: true */ /*global dw_index, dw_qsearch, DEPRECATED_WRAP */ +/** + * Mark a JavaScript function as deprecated + * + * This will print a warning to the JavaScript console (if available) in + * Firebug and Chrome and a stack trace (if available) to easily locate the + * problematic function call. + * + * @param msg optional message to print + */ +function DEPRECATED(msg){ + if(!window.console) return; + if(!msg) msg = ''; + + var func; + if(arguments.callee) func = arguments.callee.caller.name; + if(func) func = ' '+func+'()'; + var line = 'DEPRECATED function call'+func+'. '+msg; + + if(console.warn){ + console.warn(line); + }else{ + console.log(line); + } + + if(console.trace) console.trace(); +} + +/** + * Construct a wrapper function for deprecated function names + * + * This function returns a wrapper function which just calls DEPRECATED + * and the new function. + * + * @param func The new function + * @param context Optional; The context (`this`) of the call + */ +function DEPRECATED_WRAP(func, context) { + return function () { + DEPRECATED(); + return func.apply(context || this, arguments); + } +} + +/** + * Handy shortcut to document.getElementById + * + * This function was taken from the prototype library + * + * @link http://prototype.conio.net/ + */ +function $() { + DEPRECATED('Please use the JQuery() function instead.'); + + var elements = new Array(); + + for (var i = 0; i < arguments.length; i++) { + var element = arguments[i]; + if (typeof element == 'string') + element = document.getElementById(element); + + if (arguments.length == 1) + return element; + + elements.push(element); + } + + return elements; +} + + + + var index = { throbber_delay: dw_index.throbber_delay, toggle: DEPRECATED_WRAP(dw_index.toggle, dw_index), @@ -123,3 +195,18 @@ function addInitEvent(func) { jQuery(func); } + +function jsEscape(text){ + DEPRECATED('Insert text through jQuery.text() instead of escaping on your own'); + var re=new RegExp("\\\\","g"); + text=text.replace(re,"\\\\"); + re=new RegExp("'","g"); + text=text.replace(re,"\\'"); + re=new RegExp('"',"g"); + text=text.replace(re,'"'); + re=new RegExp("\\\\\\\\n","g"); + text=text.replace(re,"\\n"); + return text; +} + + diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js index b286965cf..b0f76cdb0 100644 --- a/lib/scripts/helpers.js +++ b/lib/scripts/helpers.js @@ -1,134 +1,161 @@ /** - * Differrent helper functions + * Various helper functions + */ + + +/** + * Simple function to check if a global var is defined * - * @author Ilya Lebedev - * @license LGPL + * @author Kae Verens + * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835 */ -//----------------------------------------------------------------------------- -// Variable/property checks -//----------------------------------------------------------------------------- +function isset(varname){ + return(typeof(window[varname])!='undefined'); +} + /** - * Checks if property is undefined + * Checks if property is undefined * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isUndefined (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'undefined'); + return (typeof prop == 'undefined'); } + /** - * Checks if property is function + * Checks if property is function * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isFunction (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'function'); + return (typeof prop == 'function'); } /** - * Checks if property is string + * Checks if property is string * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isString (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'string'); + return (typeof prop == 'string'); } + /** - * Checks if property is number + * Checks if property is number * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isNumber (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'number'); + return (typeof prop == 'number'); } + /** - * Checks if property is the calculable number + * Checks if property is the calculable number * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isNumeric (prop /* :Object */) /* :Boolean */ { - return isNumber(prop)&&!isNaN(prop)&&isFinite(prop); + return isNumber(prop)&&!isNaN(prop)&&isFinite(prop); } + /** - * Checks if property is array + * Checks if property is array * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isArray (prop /* :Object */) /* :Boolean */ { - return (prop instanceof Array); + return (prop instanceof Array); } + /** * Checks if property is regexp * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isRegExp (prop /* :Object */) /* :Boolean */ { - return (prop instanceof RegExp); + return (prop instanceof RegExp); } + /** - * Checks if property is a boolean value + * Checks if property is a boolean value * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isBoolean (prop /* :Object */) /* :Boolean */ { - return ('boolean' == typeof prop); + return ('boolean' == typeof prop); } + /** - * Checks if property is a scalar value (value that could be used as the hash key) + * Checks if property is a scalar value (value that could be used as the hash key) * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isScalar (prop /* :Object */) /* :Boolean */ { - return isNumeric(prop)||isString(prop); + return isNumeric(prop)||isString(prop); } + /** - * Checks if property is empty + * Checks if property is empty * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev */ function isEmpty (prop /* :Object */) /* :Boolean */ { - if (isBoolean(prop)) return false; - if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true; - if (isString(prop) || isNumber(prop)) return !prop; - if (Boolean(prop)&&false != prop) { - for (var i in prop) if(prop.hasOwnProperty(i)) return false; - } - return true; + if (isBoolean(prop)) return false; + if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true; + if (isString(prop) || isNumber(prop)) return !prop; + if (Boolean(prop)&&false != prop) { + for (var i in prop) if(prop.hasOwnProperty(i)) return false; + } + return true; } /** - * Checks if property is derived from prototype, applies method if it is not exists + * Checks if property is derived from prototype, applies method if it is not exists * - * @param string property name - * @return bool true if prototyped - * @access public + * @param string property name + * @return bool true if prototyped + * @access public + * @author Ilya Lebedev */ if ('undefined' == typeof Object.hasOwnProperty) { - Object.prototype.hasOwnProperty = function (prop) { - return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]); - }; + Object.prototype.hasOwnProperty = function (prop) { + return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]); + }; } /** * Very simplistic Flash plugin check, probably works for Flash 8 and higher only + * + * @author Andreas Gohr */ function hasFlash(version){ var ver = 0; @@ -192,3 +219,18 @@ function bind(fnc/*, ... */) { static_args.concat(Aps.call(arguments, 0))); }; } + +/** + * Get the computed style of a node. + * + * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/ + * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js + */ +function gcs(node){ + if(node.currentStyle){ + return node.currentStyle; + }else{ + return node.ownerDocument.defaultView.getComputedStyle(node, null); + } +} + diff --git a/lib/scripts/script.js b/lib/scripts/script.js index caa2a107c..8db223d61 100644 --- a/lib/scripts/script.js +++ b/lib/scripts/script.js @@ -3,53 +3,6 @@ if ('function' === typeof jQuery && 'function' === typeof jQuery.noConflict) { jQuery.noConflict(); } -/** - * Mark a JavaScript function as deprecated - * - * This will print a warning to the JavaScript console (if available) in - * Firebug and Chrome and a stack trace (if available) to easily locate the - * problematic function call. - * - * @param msg optional message to print - */ -function DEPRECATED(msg){ - if(!window.console) return; - if(!msg) msg = ''; - - var func; - if(arguments.callee) func = arguments.callee.caller.name; - if(func) func = ' '+func+'()'; - var line = 'DEPRECATED function call'+func+'. '+msg; - - if(console.warn){ - console.warn(line); - }else{ - console.log(line); - } - - if(console.trace) console.trace(); -} - -/** - * Construct a wrapper function for deprecated function names - * - * This function returns a wrapper function which just calls DEPRECATED - * and the new function. - * - * @param func The new function - * @param context Optional; The context (`this`) of the call - */ -function DEPRECATED_WRAP(func, context) { - return function () { - DEPRECATED(); - return func.apply(context || this, arguments); - } -} - -/** - * Some of these scripts were taken from wikipedia.org and were modified for DokuWiki - */ - /** * Some browser detection */ @@ -65,87 +18,6 @@ if (clientPC.indexOf('opera')!=-1) { var is_opera_seven = (window.opera && document.childNodes); } -/** - * Handy shortcut to document.getElementById - * - * This function was taken from the prototype library - * - * @link http://prototype.conio.net/ - */ -function $() { - DEPRECATED('Please use the JQuery() function instead.'); - - var elements = new Array(); - - for (var i = 0; i < arguments.length; i++) { - var element = arguments[i]; - if (typeof element == 'string') - element = document.getElementById(element); - - if (arguments.length == 1) - return element; - - elements.push(element); - } - - return elements; -} - -/** - * Simple function to check if a global var is defined - * - * @author Kae Verens - * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835 - */ -function isset(varname){ - return(typeof(window[varname])!='undefined'); -} - -/** - * Get the computed style of a node. - * - * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/ - * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js - */ -function gcs(node){ - if(node.currentStyle){ - return node.currentStyle; - }else{ - return node.ownerDocument.defaultView.getComputedStyle(node, null); - } -} - -/** - * Escape special chars in JavaScript - * - * @author Andreas Gohr - */ -function jsEscape(text){ - var re=new RegExp("\\\\","g"); - text=text.replace(re,"\\\\"); - re=new RegExp("'","g"); - text=text.replace(re,"\\'"); - re=new RegExp('"',"g"); - text=text.replace(re,'"'); - re=new RegExp("\\\\\\\\n","g"); - text=text.replace(re,"\\n"); - return text; -} - -/** - * This function escapes some special chars - * @deprecated by above function - */ -function escapeQuotes(text) { - var re=new RegExp("'","g"); - text=text.replace(re,"\\'"); - re=new RegExp('"',"g"); - text=text.replace(re,'"'); - re=new RegExp("\\n","g"); - text=text.replace(re,"\\n"); - return text; -} - /** * Prints a animated gif to show the search is performed * -- cgit v1.2.3 From 2b580f7af6af343aef14df02fb81a9ba382ae41a Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Fri, 19 Aug 2011 15:55:32 +0200 Subject: jQuerify acl plugin JavaScript --- lib/plugins/acl/admin.php | 3 +- lib/plugins/acl/script.js | 163 ++++++++++++++++++++-------------------------- lib/plugins/acl/style.css | 1 + 3 files changed, 74 insertions(+), 93 deletions(-) (limited to 'lib') diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php index 7c12b3374..53f6db0cc 100644 --- a/lib/plugins/acl/admin.php +++ b/lib/plugins/acl/admin.php @@ -540,7 +540,8 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin { function _html_li_acl($item){ - return '
  • '; + return '
  • '; } diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js index 5b6c9ce1b..4fc97aeb5 100644 --- a/lib/plugins/acl/script.js +++ b/lib/plugins/acl/script.js @@ -3,16 +3,44 @@ * * @author Andreas Gohr */ -acl = { +var dw_acl = { /** * Initialize the object and attach the event handlers */ - init: function(){ - if(!jQuery('#acl_manager').length) return; //FIXME only one underscore!! + init: function () { + var $tree; - jQuery('#acl__user select').change(acl.userselhandler); - jQuery('#acl__tree').click(acl.treehandler); - jQuery('#acl__user input[type=submit]').click(acl.loadinfo); + //FIXME only one underscore!! + if (jQuery('#acl_manager').length === 0) { + return; + } + + jQuery('#acl__user select').change(dw_acl.userselhandler); + jQuery('#acl__user input[type=submit]').click(dw_acl.loadinfo); + + $tree = jQuery('#acl__tree'); + $tree.dw_tree({toggle_selector: 'img', + load_data: function (show_sublist, $clicky) { + // get the enclosed link and the edit form + var $frm = jQuery('#acl__detail form'); + + jQuery.post( + DOKU_BASE + 'lib/plugins/acl/ajax.php', + jQuery.extend(dw_acl.parseatt($clicky.parent().find('a')[0].search), + {ajax: 'tree', + current_ns: $frm.find('input[name=ns]').val(), + current_id: $frm.find('input[name=id]').val()}), + show_sublist, + 'html' + ); + }, + + toggle_display: function ($clicky, opening) { + $clicky.attr('src', + DOKU_BASE + 'lib/images/' + + (opening ? 'minus' : 'plus') + '.gif'); + }}); + $tree.delegate('a', 'click', dw_acl.treehandler); }, /** @@ -21,32 +49,20 @@ acl = { * Hides or shows the user/group entry box depending on what was selected in the * dropdown element */ - userselhandler: function(e){ + userselhandler: function () { // make entry field visible/invisible - if(this.value == '__g__' || this.value == '__u__'){ - jQuery('#acl__user input').show(); - }else{ - jQuery('#acl__user input').hide(); - } - acl.loadinfo(); + jQuery('#acl__user input').toggle(this.value === '__g__' || + this.value === '__u__'); + dw_acl.loadinfo(); }, /** * Load the current permission info and edit form */ - loadinfo: function(){ - var frm = jQuery('#acl__detail form')[0]; - + loadinfo: function () { jQuery('#acl__info').load( DOKU_BASE + 'lib/plugins/acl/ajax.php', - { - 'ns': frm.elements['ns'].value, - 'id': frm.elements['id'].value, - 'acl_t': frm.elements['acl_t'].value, - 'acl_w': frm.elements['acl_w'].value, - 'sectok': frm.elements['sectok'].value, - 'ajax': 'info', - } + jQuery('#acl__detail form').serialize() + '&ajax=info' ); return false; }, @@ -56,11 +72,13 @@ acl = { * * @todo put into global script lib? */ - parseatt: function(str){ - if(str[0] == '?') str = str.substr(1); + parseatt: function (str) { + if (str[0] === '?') { + str = str.substr(1); + } var attributes = {}; var all = str.split('&'); - for(var i=0; i - * @param DOMElement clicky - the plus/minus icon in front of a namespace + * Handles clicks to the tree nodes */ - treetoggle: function(clicky){ - var listitem = jQuery(clicky).parent().parent(); - - // if already open, close by removing the sublist - var sublists = listitem.find('ul'); - if(sublists.length){ - listitem.remove('ul'); - clicky.src = DOKU_BASE+'lib/images/plus.gif'; - clicky.alt = '+'; - return false; - } + treehandler: function () { + var $link, $frm; - // prepare new ul to load into it via ajax - var ul = document.createElement('ul'); - listitem[0].appendChild(ul); + $link = jQuery(this); - // get the enclosed link and the edit form - var link = listitem.find('a')[0]; - var frm = jQuery('#acl__detail form')[0]; + // remove highlighting + jQuery('#acl__tree a.cur').removeClass('cur'); - // prepare ajax data - var data = acl.parseatt(link.search); - data['ajax'] = 'tree'; - data['current_ns'] = frm.elements['ns'].value; - data['current_id'] = frm.elements['id'].value; + // add new highlighting + $link.addClass('cur'); - // run ajax - jQuery(ul).load(DOKU_BASE + 'lib/plugins/acl/ajax.php', data); - - clicky.src = DOKU_BASE+'lib/images/minus.gif'; - return false; - }, - - /** - * Handles all clicks in the tree, dispatching the right action based on the - * clicked element - * - * @param Event e The event object that caused the execution - */ - treehandler: function(e){ - if(e.target.src){ // is it an image? - acl.treetoggle(e.target); - } else if(e.target.href){ // is it a link? - // remove highlighting - jQuery('#acl__tree a.cur').removeClass('cur'); - - var link = jQuery(e.target); - - // add new highlighting - link.addClass('cur'); - - // set new page to detail form - var frm = jQuery('#acl__detail form')[0]; - if(link.hasClass('wikilink1')){ - jQuery('#acl__detail form input[name=ns]').val(''); - jQuery('#acl__detail form input[name=id]').val(acl.parseatt(link[0].search)['id']); - }else if(link.hasClass('idx_dir')){ - jQuery('#acl__detail form input[name=ns]').val(acl.parseatt(link[0].search)['ns']); - jQuery('#acl__detail form input[name=id]').val(''); - } - acl.loadinfo(); + // set new page to detail form + $frm = jQuery('#acl__detail form'); + if ($link.hasClass('wikilink1')) { + $frm.find('input[name=ns]').val(''); + $frm.find('input[name=id]').val(dw_acl.parseatt($link[0].search).id); + } else if ($link.hasClass('idx_dir')) { + $frm.find('input[name=ns]').val(dw_acl.parseatt($link[0].search).ns); + $frm.find('input[name=id]').val(''); } + dw_acl.loadinfo(); - e.stopPropagation(); - e.preventDefault(); return false; } - }; -jQuery(acl.init); +jQuery(dw_acl.init); + +var acl = { + init: DEPRECATED_WRAP(dw_acl.init, dw_acl), + userselhandler: DEPRECATED_WRAP(dw_acl.userselhandler, dw_acl), + loadinfo: DEPRECATED_WRAP(dw_acl.loadinfo, dw_acl), + parseatt: DEPRECATED_WRAP(dw_acl.parseatt, dw_acl), + treehandler: DEPRECATED_WRAP(dw_acl.treehandler, dw_acl) +}; diff --git a/lib/plugins/acl/style.css b/lib/plugins/acl/style.css index 0c5a9819b..b7154aa78 100644 --- a/lib/plugins/acl/style.css +++ b/lib/plugins/acl/style.css @@ -22,6 +22,7 @@ div#acl_manager div#acl__tree ul { div#acl_manager div#acl__tree li { padding-left: 1em; + list-style-image: none; } div#acl_manager div#acl__tree ul img { -- cgit v1.2.3 From 9d3aa748d04561e32a6fd18a394d9970a3d334be Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 16:31:34 +0200 Subject: deprecated delay.js --- lib/scripts/delay.js | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/scripts/delay.js b/lib/scripts/delay.js index 2ef9f8846..edd53def3 100644 --- a/lib/scripts/delay.js +++ b/lib/scripts/delay.js @@ -51,6 +51,7 @@ Delay.prototype = { }, start: function () { + DEPRECATED('don\'t use the Delay object, use window.timeout with a callback instead'); this.delTimer(); var _this = this; this.timer = timer.add(function () { _this.exec.call(_this); }, -- cgit v1.2.3 From 0a245976b7d2b80796b2e22956a6838fe241f59e Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 19:35:04 +0200 Subject: renamed some variables in editor.js --- lib/scripts/editor.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'lib') diff --git a/lib/scripts/editor.js b/lib/scripts/editor.js index fbdb1d79a..d1bfe0232 100644 --- a/lib/scripts/editor.js +++ b/lib/scripts/editor.js @@ -14,10 +14,10 @@ var dw_editor = { * textareas */ init: function(){ - var editor = jQuery('#wiki__text'); - if(!editor.length) return; + var $editor = jQuery('#wiki__text'); + if(!$editor.length) return; - dw_editor.initSizeCtl('#size__ctl',editor); + dw_editor.initSizeCtl('#size__ctl',$editor); }, /** @@ -29,20 +29,20 @@ var dw_editor = { * @param selector editor the textarea to control */ initSizeCtl: function(ctlarea,editor){ - var ctl = jQuery(ctlarea); - var textarea = jQuery(editor); - if(!ctl.length || !textarea.length) return; + var $ctl = jQuery(ctlarea); + var $textarea = jQuery(editor); + if(!$ctl.length || !$textarea.length) return; var hgt = DokuCookie.getValue('sizeCtl'); if(hgt){ - textarea.css('height', hgt); + $textarea.css('height', hgt); }else{ - textarea.css('height', '300px'); + $textarea.css('height', '300px'); } var wrp = DokuCookie.getValue('wrapCtl'); if(wrp){ - dw_editor.setWrap(textarea[0], wrp); + dw_editor.setWrap($textarea[0], wrp); } // else use default value var l = document.createElement('img'); @@ -54,9 +54,9 @@ var dw_editor = { jQuery(l).click(function(){dw_editor.sizeCtl(editor,100);}); jQuery(s).click(function(){dw_editor.sizeCtl(editor,-100);}); jQuery(w).click(function(){dw_editor.toggleWrap(editor);}); - ctl.append(l); - ctl.append(s); - ctl.append(w); + $ctl.append(l); + $ctl.append(s); + $ctl.append(w); }, /** @@ -66,11 +66,11 @@ var dw_editor = { * @param int val the relative value to resize in pixel */ sizeCtl: function(editor,val){ - var textarea = jQuery(editor); - var height = parseInt(textarea.css('height')); + var $textarea = jQuery(editor); + var height = parseInt($textarea.css('height')); height += val; - textarea.css('height', height+'px'); - DokuCookie.setValue('sizeCtl',textarea.css('height')); + $textarea.css('height', height+'px'); + DokuCookie.setValue('sizeCtl',$textarea.css('height')); }, /** @@ -80,14 +80,14 @@ var dw_editor = { * @param selector editor the textarea to control */ toggleWrap: function(editor){ - var textarea = jQuery(editor); + var $textarea = jQuery(editor); var wrap = textarea.attr('wrap'); if(wrap && wrap.toLowerCase() == 'off'){ dw_editor.setWrap(textarea[0], 'soft'); }else{ dw_editor.setWrap(textarea[0], 'off'); } - DokuCookie.setValue('wrapCtl',textarea.attr('wrap')); + DokuCookie.setValue('wrapCtl',$textarea.attr('wrap')); }, /** -- cgit v1.2.3 From bedfa6abf0ea09be1ea44de0c014d83bd57a7412 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Fri, 19 Aug 2011 20:09:07 +0200 Subject: moved keyhandler to the new dw_editor object --- lib/scripts/edit.js | 88 ------------------------------------------------- lib/scripts/editor.js | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 88 deletions(-) (limited to 'lib') diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js index a9623e14d..816568e92 100644 --- a/lib/scripts/edit.js +++ b/lib/scripts/edit.js @@ -155,86 +155,6 @@ function addBtnActionSignature(btn, props, edid) { return false; } -/** - * Make intended formattings easier to handle - * - * Listens to all key inputs and handle indentions - * of lists and code blocks - * - * Currently handles space, backspce and enter presses - * - * @author Andreas Gohr - * @fixme handle tabs - */ -function keyHandler(e){ - if(e.keyCode != 13 && - e.keyCode != 8 && - e.keyCode != 32) return; - var field = e.target; - var selection = getSelection(field); - if(selection.getLength()) return; //there was text selected, keep standard behavior - var search = "\n"+field.value.substr(0,selection.start); - var linestart = Math.max(search.lastIndexOf("\n"), - search.lastIndexOf("\r")); //IE workaround - search = search.substr(linestart); - - - if(e.keyCode == 13){ // Enter - // keep current indention for lists and code - var match = search.match(/(\n +([\*-] ?)?)/); - if(match){ - var scroll = field.scrollHeight; - var match2 = search.match(/^\n +[\*-]\s*$/); - // Cancel list if the last item is empty (i. e. two times enter) - if (match2 && field.value.substr(selection.start).match(/^($|\r?\n)/)) { - field.value = field.value.substr(0, linestart) + "\n" + - field.value.substr(selection.start); - selection.start = linestart + 1; - selection.end = linestart + 1; - setSelection(selection); - } else { - insertAtCarret(field.id,match[1]); - } - field.scrollTop += (field.scrollHeight - scroll); - e.preventDefault(); // prevent enter key - return false; - } - }else if(e.keyCode == 8){ // Backspace - // unindent lists - var match = search.match(/(\n +)([*-] ?)$/); - if(match){ - var spaces = match[1].length-1; - - if(spaces > 3){ // unindent one level - field.value = field.value.substr(0,linestart)+ - field.value.substr(linestart+2); - selection.start = selection.start - 2; - selection.end = selection.start; - }else{ // delete list point - field.value = field.value.substr(0,linestart)+ - field.value.substr(selection.start); - selection.start = linestart; - selection.end = linestart; - } - setSelection(selection); - e.preventDefault(); // prevent backspace - return false; - } - }else if(e.keyCode == 32){ // Space - // intend list item - var match = search.match(/(\n +)([*-] )$/); - if(match){ - field.value = field.value.substr(0,linestart)+' '+ - field.value.substr(linestart); - selection.start = selection.start + 2; - selection.end = selection.start; - setSelection(selection); - e.preventDefault(); // prevent space - return false; - } - } -} - /** * Determine the current section level while editing * @@ -303,14 +223,6 @@ addInitEvent(function () { if (edit_text.length > 0) { if(edit_text.attr('readOnly')) return; - // in Firefox, keypress doesn't send the correct keycodes, - // in Opera, the default of keydown can't be prevented - if (is_opera) { - edit_text.keypress(keyHandler); - } else { - edit_text.keydown(keyHandler); - } - // set focus and place cursor at the start var sel = getSelection(edit_text.get(0)); sel.start = 0; diff --git a/lib/scripts/editor.js b/lib/scripts/editor.js index d1bfe0232..6d7f9f4a8 100644 --- a/lib/scripts/editor.js +++ b/lib/scripts/editor.js @@ -18,6 +18,17 @@ var dw_editor = { if(!$editor.length) return; dw_editor.initSizeCtl('#size__ctl',$editor); + + if($editor.attr('readOnly')) return; + + // in Firefox, keypress doesn't send the correct keycodes, + // in Opera, the default of keydown can't be prevented + if (jQuery.browser.opera) { + $editor.keypress(dw_editor.keyHandler); + } else { + $editor.keydown(dw_editor.keyHandler); + } + }, /** @@ -108,6 +119,86 @@ var dw_editor = { var nxtSib = textarea.nextSibling; parNod.removeChild(textarea); parNod.insertBefore(textarea, nxtSib); + }, + + /** + * Make intended formattings easier to handle + * + * Listens to all key inputs and handle indentions + * of lists and code blocks + * + * Currently handles space, backspce and enter presses + * + * @author Andreas Gohr + * @fixme handle tabs + * @param event e - the key press event object + */ + keyHandler: function(e){ + if(e.keyCode != 13 && + e.keyCode != 8 && + e.keyCode != 32) return; + var field = e.target; + var selection = getSelection(field); + if(selection.getLength()) return; //there was text selected, keep standard behavior + var search = "\n"+field.value.substr(0,selection.start); + var linestart = Math.max(search.lastIndexOf("\n"), + search.lastIndexOf("\r")); //IE workaround + search = search.substr(linestart); + + if(e.keyCode == 13){ // Enter + // keep current indention for lists and code + var match = search.match(/(\n +([\*-] ?)?)/); + if(match){ + var scroll = field.scrollHeight; + var match2 = search.match(/^\n +[\*-]\s*$/); + // Cancel list if the last item is empty (i. e. two times enter) + if (match2 && field.value.substr(selection.start).match(/^($|\r?\n)/)) { + field.value = field.value.substr(0, linestart) + "\n" + + field.value.substr(selection.start); + selection.start = linestart + 1; + selection.end = linestart + 1; + setSelection(selection); + } else { + insertAtCarret(field.id,match[1]); + } + field.scrollTop += (field.scrollHeight - scroll); + e.preventDefault(); // prevent enter key + return false; + } + }else if(e.keyCode == 8){ // Backspace + // unindent lists + var match = search.match(/(\n +)([*-] ?)$/); + if(match){ + var spaces = match[1].length-1; + + if(spaces > 3){ // unindent one level + field.value = field.value.substr(0,linestart)+ + field.value.substr(linestart+2); + selection.start = selection.start - 2; + selection.end = selection.start; + }else{ // delete list point + field.value = field.value.substr(0,linestart)+ + field.value.substr(selection.start); + selection.start = linestart; + selection.end = linestart; + } + setSelection(selection); + e.preventDefault(); // prevent backspace + return false; + } + }else if(e.keyCode == 32){ // Space + // intend list item + var match = search.match(/(\n +)([*-] )$/); + if(match){ + field.value = field.value.substr(0,linestart)+' '+ + field.value.substr(linestart); + selection.start = selection.start + 2; + selection.end = selection.start; + setSelection(selection); + e.preventDefault(); // prevent space + return false; + } + } } -- cgit v1.2.3 From ba72dce1b47b01a626df51666b84593d8cbc1050 Mon Sep 17 00:00:00 2001 From: Andreas Gohr Date: Sun, 21 Aug 2011 14:33:07 +0200 Subject: fixed TOC-Bug and moved TOC behaviour to page.js FS#2314 --- lib/scripts/behaviour.js | 31 ------------------------------- lib/scripts/page.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 31 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index 1580ae86f..d7c3d2975 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -16,7 +16,6 @@ var dw_behaviour = { dw_behaviour.removeHighlightOnClick(); dw_behaviour.quickSelect(); dw_behaviour.checkWindowsShares(); - dw_behaviour.initTocToggle(); dw_behaviour.subscription(); dw_behaviour.revisionBoxHandler(); @@ -86,36 +85,6 @@ var dw_behaviour = { }); }, - /** - * Adds the toggle switch to the TOC - */ - initTocToggle: function() { - var $header = jQuery('#toc__header'); - if(!$header.length) return; - var $toc = jQuery('#toc__inside'); - - var $clicky = jQuery(document.createElement('span')) - .attr('id','toc__toggle') - .css('cursor','pointer') - .click(function(){ - $toc.slideToggle(200); - setClicky(); - }); - $header.prepend($clicky); - - var setClicky = function(){ - if($toc.css('display') == 'none'){ - $clicky.html('+'); - $clicky[0].className = 'toc_open'; - }else{ - $clicky.html(''); - $clicky[0].className = 'toc_close'; - } - }; - - setClicky(); - }, - /** * Hide list subscription style if target is a page * diff --git a/lib/scripts/page.js b/lib/scripts/page.js index 05c5ece20..f3d35609d 100644 --- a/lib/scripts/page.js +++ b/lib/scripts/page.js @@ -10,6 +10,7 @@ dw_page = { init: function(){ dw_page.sectionHighlight(); jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay); + dw_page.initTocToggle(); }, /** @@ -93,7 +94,38 @@ dw_page = { // now put the content into the wrapper $fndiv.html(content); $fndiv.show(); + }, + + /** + * Adds the toggle switch to the TOC + */ + initTocToggle: function() { + var $header = jQuery('#toc__header'); + if(!$header.length) return; + var $toc = jQuery('#toc__inside'); + + var setClicky = function(){ + if($toc.css('display') == 'none'){ + $clicky.html('+'); + $clicky[0].className = 'toc_open'; + }else{ + $clicky.html(''); + $clicky[0].className = 'toc_close'; + } + }; + + var $clicky = jQuery(document.createElement('span')) + .attr('id','toc__toggle') + $header.css('cursor','pointer') + .click(function(){ + $toc.slideToggle(200,setClicky); + }) + .prepend($clicky); + + setClicky(); } + + }; jQuery(dw_page.init); -- cgit v1.2.3 From cafc90889ce6f5ce7c4007147b2fee974d80401a Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 22 Aug 2011 13:16:33 +0200 Subject: JSLINT locktimer, fix date passing in draftsave Since 80997d21e0aee9b8f27153000742ecd781f429f8 the date passed to the draft save backend is indeed the page id, not the date. --- lib/scripts/locktimer.js | 56 ++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 26 deletions(-) (limited to 'lib') diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js index b83840557..857002abf 100644 --- a/lib/scripts/locktimer.js +++ b/lib/scripts/locktimer.js @@ -17,8 +17,9 @@ var dw_locktimer = { */ init: function(timeout,draft){ //FIXME which elements to pass here? var $edit = jQuery('#wiki__text'); - if(!$edit.length) return; - if($edit.attr('readonly')) return; + if($edit.length === 0 || $edit.attr('readonly')) { + return; + } // init values dw_locktimer.timeout = timeout*1000; @@ -26,10 +27,12 @@ var dw_locktimer = { dw_locktimer.lasttime = new Date(); dw_locktimer.pageid = jQuery('#dw__editform input[name=id]').val(); - if(!dw_locktimer.pageid) return; + if(!dw_locktimer.pageid) { + return; + } // register refresh event - jQuery('#wiki__text').keypress(dw_locktimer.refresh); + $edit.keypress(dw_locktimer.refresh); // start timer dw_locktimer.reset(); }, @@ -66,30 +69,29 @@ var dw_locktimer = { * Called on keypresses in the edit area */ refresh: function(){ - var now = new Date(); - var params = {}; - // refresh every minute only - if(now.getTime() - dw_locktimer.lasttime.getTime() > 30*1000){ - params['call'] = 'lock'; - params['id'] = dw_locktimer.pageid; + var now = new Date(), + params = 'call=lock&id=' + dw_locktimer.pageid + '&'; - if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){ - params['prefix'] = jQuery('#dw__editform input[name=prefix]').val(); - params['wikitext'] = jQuery('#dw__editform textarea[name=wikitext]').val(); - params['suffix'] = jQuery('#dw__editform input[name=suffix]').val(); - if(jQuery('#dw__editform input[name=date]').length > 0) { - params['date'] = jQuery('#dw__editform input[name=id]').val(); - } - } + // refresh every minute only + if(now.getTime() - dw_locktimer.lasttime.getTime() <= 30*1000) { + return; + } - jQuery.post( - DOKU_BASE + 'lib/exe/ajax.php', - params, - dw_locktimer.refreshed, - 'html' - ); - dw_locktimer.lasttime = now; + // POST everything necessary for draft saving + if(dw_locktimer.draft && jQuery('#dw__editform textarea[name=wikitext]').length > 0){ + params += jQuery('#dw__editform').find('input[name=prefix], ' + + 'textarea[name=wikitext], ' + + 'input[name=suffix], ' + + 'input[name=date]').serialize(); } + + jQuery.post( + DOKU_BASE + 'lib/exe/ajax.php', + params, + dw_locktimer.refreshed, + 'html' + ); + dw_locktimer.lasttime = now; }, /** @@ -100,7 +102,9 @@ var dw_locktimer = { data = data.substring(1); jQuery('#draft__status').html(data); - if(error != '1') return; // locking failed + if(error != '1') { + return; // locking failed + } dw_locktimer.reset(); } }; -- cgit v1.2.3 From 10ecffd81cdbfc2eb72dda53c4039701687aae33 Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 22 Aug 2011 14:55:02 +0200 Subject: page.js: Improve footnote cleaning regex, cleaner toc toggling * elements are only removed from the start of a footnote * the TOC wrapper instantly gets the target size to reduce layout jumping --- lib/scripts/page.js | 60 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 25 deletions(-) (limited to 'lib') diff --git a/lib/scripts/page.js b/lib/scripts/page.js index f3d35609d..e4033b76d 100644 --- a/lib/scripts/page.js +++ b/lib/scripts/page.js @@ -21,8 +21,8 @@ dw_page = { sectionHighlight: function() { jQuery('form.btn_secedit') .mouseover(function(){ - var $tgt = jQuery(this).parent(); - var nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2]; + var $tgt = jQuery(this).parent(), + nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2]; // Walk the DOM tree up (first previous siblings, then parents) // until boundary element @@ -74,38 +74,38 @@ dw_page = { * @author Andreas Gohr * @author Chris Smith */ - footnoteDisplay: function(e){ - var $fndiv = dw_page.insituPopup(this, 'insitu__fn'); + footnoteDisplay: function () { + var content = jQuery(jQuery(this).attr('href')) // Footnote text anchor + .closest('div.fn').html(); - // locate the footnote anchor element - var $a = jQuery("#fn__" + e.target.id.substr(5)); - if (!$a.length){ return; } - - // anchor parent is the footnote container, get its innerHTML - var content = new String ($a.parent().parent().html()); + if (content === null){ + return; + } // strip the leading content anchors and their comma separators - content = content.replace(/.*<\/sup>/gi, ''); - content = content.replace(/^\s+(,\s+)+/,''); + content = content.replace(/((^|\s*,\s*).*?<\/sup>)+\s*/gi, ''); // prefix ids on any elements with "insitu__" to ensure they remain unique content = content.replace(/\bid=(['"])([^"']+)\1/gi,'id="insitu__$2'); // now put the content into the wrapper - $fndiv.html(content); - $fndiv.show(); + dw_page.insituPopup(this, 'insitu__fn').html(content).show(); }, /** * Adds the toggle switch to the TOC */ initTocToggle: function() { - var $header = jQuery('#toc__header'); - if(!$header.length) return; - var $toc = jQuery('#toc__inside'); + var $header, $clicky, $toc, $tocul, setClicky; + $header = jQuery('#toc__header'); + if(!$header.length) { + return; + } + $toc = jQuery('#toc__inside'); + $tocul = $toc.children('ul.toc'); - var setClicky = function(){ - if($toc.css('display') == 'none'){ + setClicky = function(hiding){ + if(hiding){ $clicky.html('+'); $clicky[0].className = 'toc_open'; }else{ @@ -114,18 +114,28 @@ dw_page = { } }; - var $clicky = jQuery(document.createElement('span')) - .attr('id','toc__toggle') + $clicky = jQuery(document.createElement('span')) + .attr('id','toc__toggle'); $header.css('cursor','pointer') - .click(function(){ - $toc.slideToggle(200,setClicky); + .click(function () { + var hidden; + + // Assert that $toc instantly takes the whole TOC space + $toc.css('height', $toc.height()).show(); + + hidden = $tocul.stop(true, true).is(':hidden'); + + setClicky(!hidden); + + // Start animation and assure that $toc is hidden/visible + $tocul.dw_toggle(hidden, function () { + $toc.toggle(hidden); + }); }) .prepend($clicky); setClicky(); } - - }; jQuery(dw_page.init); -- cgit v1.2.3 From cb42e5f1de77ce65441002c0b0b94d5855cab1f0 Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 22 Aug 2011 15:25:15 +0200 Subject: Deprecate several helper functions, JSLINT helpers.js --- lib/scripts/compatibility.js | 172 +++++++++++++++++++++++++++++++++++++++++- lib/scripts/helpers.js | 176 ++----------------------------------------- 2 files changed, 174 insertions(+), 174 deletions(-) (limited to 'lib') diff --git a/lib/scripts/compatibility.js b/lib/scripts/compatibility.js index ddc8823d3..39f703c71 100644 --- a/lib/scripts/compatibility.js +++ b/lib/scripts/compatibility.js @@ -1,6 +1,3 @@ -/*jslint sloppy: true */ -/*global dw_index, dw_qsearch, DEPRECATED_WRAP */ - /** * Mark a JavaScript function as deprecated * @@ -209,4 +206,173 @@ function jsEscape(text){ return text; } +/** + * Simple function to check if a global var is defined + * + * @author Kae Verens + * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835 + */ +function isset(varname){ + DEPRECATED("Use `typeof var !== 'undefined'` instead"); + return(typeof(window[varname])!='undefined'); +} + +/** + * Checks if property is undefined + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isUndefined (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'undefined'` instead"); + return (typeof prop == 'undefined'); +} + +/** + * Checks if property is function + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isFunction (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'function'` instead"); + return (typeof prop == 'function'); +} +/** + * Checks if property is string + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isString (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'string'` instead"); + return (typeof prop == 'string'); +} + +/** + * Checks if property is number + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isNumber (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'number'` instead"); + return (typeof prop == 'number'); +} + +/** + * Checks if property is the calculable number + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isNumeric (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'number' && !isNaN(var) && isFinite(var)` instead"); + return isNumber(prop)&&!isNaN(prop)&&isFinite(prop); +} + +/** + * Checks if property is array + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isArray (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `var instanceof Array` instead"); + return (prop instanceof Array); +} + +/** + * Checks if property is regexp + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isRegExp (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `var instanceof RegExp` instead"); + return (prop instanceof RegExp); +} + +/** + * Checks if property is a boolean value + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isBoolean (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'boolean'` instead"); + return ('boolean' == typeof prop); +} + +/** + * Checks if property is a scalar value (value that could be used as the hash key) + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isScalar (prop /* :Object */) /* :Boolean */ { + DEPRECATED("Use `typeof var === 'string' || (typeof var === 'number' &&" + + " !isNaN(var) && isFinite(var))` instead"); + return isNumeric(prop)||isString(prop); +} + +/** + * Checks if property is empty + * + * @param {Object} prop value to check + * @return {Boolean} true if matched + * @scope public + * @author Ilya Lebedev + */ +function isEmpty (prop /* :Object */) /* :Boolean */ { + DEPRECATED(); + var i; + if (isBoolean(prop)) { + return false; + } else if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) { + return true; + } else if (isString(prop) || isNumber(prop)) { + return !prop; + } else if (Boolean(prop) && false != prop) { + for (i in prop) { + if(prop.hasOwnProperty(i)) { + return false; + } + } + } + return true; +} + +/** + * Get the computed style of a node. + * + * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/ + * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js + */ +function gcs(node){ + DEPRECATED('Use jQuery(node).style() instead'); + if(node.currentStyle){ + return node.currentStyle; + }else{ + return node.ownerDocument.defaultView.getComputedStyle(node, null); + } +} diff --git a/lib/scripts/helpers.js b/lib/scripts/helpers.js index b0f76cdb0..d6f36967d 100644 --- a/lib/scripts/helpers.js +++ b/lib/scripts/helpers.js @@ -2,156 +2,6 @@ * Various helper functions */ - -/** - * Simple function to check if a global var is defined - * - * @author Kae Verens - * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835 - */ -function isset(varname){ - return(typeof(window[varname])!='undefined'); -} - -/** - * Checks if property is undefined - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isUndefined (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'undefined'); -} - -/** - * Checks if property is function - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isFunction (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'function'); -} -/** - * Checks if property is string - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isString (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'string'); -} - -/** - * Checks if property is number - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isNumber (prop /* :Object */) /* :Boolean */ { - return (typeof prop == 'number'); -} - -/** - * Checks if property is the calculable number - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isNumeric (prop /* :Object */) /* :Boolean */ { - return isNumber(prop)&&!isNaN(prop)&&isFinite(prop); -} - -/** - * Checks if property is array - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isArray (prop /* :Object */) /* :Boolean */ { - return (prop instanceof Array); -} - -/** - * Checks if property is regexp - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isRegExp (prop /* :Object */) /* :Boolean */ { - return (prop instanceof RegExp); -} - -/** - * Checks if property is a boolean value - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isBoolean (prop /* :Object */) /* :Boolean */ { - return ('boolean' == typeof prop); -} - -/** - * Checks if property is a scalar value (value that could be used as the hash key) - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isScalar (prop /* :Object */) /* :Boolean */ { - return isNumeric(prop)||isString(prop); -} - -/** - * Checks if property is empty - * - * @param {Object} prop value to check - * @return {Boolean} true if matched - * @scope public - * @author Ilya Lebedev - */ -function isEmpty (prop /* :Object */) /* :Boolean */ { - if (isBoolean(prop)) return false; - if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true; - if (isString(prop) || isNumber(prop)) return !prop; - if (Boolean(prop)&&false != prop) { - for (var i in prop) if(prop.hasOwnProperty(i)) return false; - } - return true; -} - -/** - * Checks if property is derived from prototype, applies method if it is not exists - * - * @param string property name - * @return bool true if prototyped - * @access public - * @author Ilya Lebedev - */ -if ('undefined' == typeof Object.hasOwnProperty) { - Object.prototype.hasOwnProperty = function (prop) { - return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]); - }; -} - /** * Very simplistic Flash plugin check, probably works for Flash 8 and higher only * @@ -163,13 +13,12 @@ function hasFlash(version){ if(navigator.plugins != null && navigator.plugins.length > 0){ ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0]; }else{ - var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - ver = axo.GetVariable("$version").split(' ')[1].split(',')[0]; + ver = (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) + .GetVariable("$version").split(' ')[1].split(',')[0]; } }catch(e){ } - if(ver >= version) return true; - return false; + return ver >= version; } /** @@ -204,11 +53,11 @@ function substr_replace(str, replace, start, length) { * @returns functionref */ function bind(fnc/*, ... */) { - var Aps = Array.prototype.slice; + var Aps = Array.prototype.slice, // Store passed arguments in this scope. // Since arguments is no Array nor has an own slice method, // we have to apply the slice method from the Array.prototype - var static_args = Aps.call(arguments, 1); + static_args = Aps.call(arguments, 1); // Return a function evaluating the passed function with the // given args and optional arguments passed on invocation. @@ -219,18 +68,3 @@ function bind(fnc/*, ... */) { static_args.concat(Aps.call(arguments, 0))); }; } - -/** - * Get the computed style of a node. - * - * @link https://acidmartin.wordpress.com/2008/08/26/style-get-any-css-property-value-of-an-object/ - * @link http://svn.dojotoolkit.org/src/dojo/trunk/_base/html.js - */ -function gcs(node){ - if(node.currentStyle){ - return node.currentStyle; - }else{ - return node.ownerDocument.defaultView.getComputedStyle(node, null); - } -} - -- cgit v1.2.3 From 511885ddd1d0f56b93fe6ad9ad0fbdc3836cf892 Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 22 Aug 2011 15:34:47 +0200 Subject: Add missing callback param to dw_toggle --- lib/scripts/behaviour.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'lib') diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js index d7c3d2975..afb210840 100644 --- a/lib/scripts/behaviour.js +++ b/lib/scripts/behaviour.js @@ -1,6 +1,3 @@ -/*jslint sloppy: true */ -/*global jQuery, LANG, document, alert */ - /** * Automatic behaviours * @@ -170,13 +167,13 @@ jQuery.fn.dw_show = function(fn) { * * @param bool the current state of the element (optional) */ -jQuery.fn.dw_toggle = function(bool) { +jQuery.fn.dw_toggle = function(bool, fn) { return this.each(function() { var $this = jQuery(this); if (typeof bool === 'undefined') { bool = $this.is(':hidden'); } - $this[bool ? "dw_show" : "dw_hide" ](); + $this[bool ? "dw_show" : "dw_hide" ](fn); }); }; -- cgit v1.2.3 From 1c5f7481f4e685ad3ffe9ba48ed47ed75196e64a Mon Sep 17 00:00:00 2001 From: Adrian Lang Date: Mon, 22 Aug 2011 16:10:05 +0200 Subject: Update jquery-cookie, cleanup dw_cookie Pulled the current jquery-cookie version from https://github.com/carhartl/jquery-cookie. --- lib/scripts/cookie.js | 73 ++++++------------------ lib/scripts/jquery/jquery.cookie.js | 111 +++++++++--------------------------- 2 files changed, 45 insertions(+), 139 deletions(-) (limited to 'lib') diff --git a/lib/scripts/cookie.js b/lib/scripts/cookie.js index f7d9b5ffb..f97882855 100644 --- a/lib/scripts/cookie.js +++ b/lib/scripts/cookie.js @@ -2,7 +2,7 @@ * Handles the cookie used by several JavaScript functions * * Only a single cookie is written and read. You may only save -* sime name-value pairs - no complex types! +* simple name-value pairs - no complex types! * * You should only use the getValue and setValue methods * @@ -10,7 +10,7 @@ * @author Michal Rezler */ DokuCookie = { - data: Array(), + data: {}, name: 'DOKU_PREFS', /** @@ -19,21 +19,17 @@ DokuCookie = { * @author Andreas Gohr */ setValue: function(key,val){ + var text = ''; this.init(); this.data[key] = val; - // prepare expire date - var now = new Date(); - this.fixDate(now); - now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year - //save the whole data array - var text = ''; - for(var key in this.data){ - if (!this.data.hasOwnProperty(key)) continue; - text += '#'+escape(key)+'#'+this.data[key]; - } - this.setCookie(this.name,text.substr(1),now,DOKU_BASE); + jQuery.each(this.data, function (val, key) { + if (this.data.hasOwnProperty(key)) { + text += '#'+encodeURIComponent(key)+'#'+encodeURIComponent(val); + } + }); + jQuery.cookie(this.name,text.substr(1), {expires: 365, path: DOKU_BASE}); }, /** @@ -52,51 +48,16 @@ DokuCookie = { * @author Andreas Gohr */ init: function(){ - if(this.data.length) return; - var text = this.getCookie(this.name); + var text, parts, i; + if(!jQuery.isEmptyObject(this.data)) { + return; + } + text = jQuery.cookie(this.name); if(text){ - var parts = text.split('#'); - for(var i=0; i 0){ - date.setTime(date.getTime() - skew); - } } }; diff --git a/lib/scripts/jquery/jquery.cookie.js b/lib/scripts/jquery/jquery.cookie.js index 6df1faca2..6a3e394b4 100644 --- a/lib/scripts/jquery/jquery.cookie.js +++ b/lib/scripts/jquery/jquery.cookie.js @@ -1,96 +1,41 @@ /** - * Cookie plugin + * jQuery Cookie plugin * - * Copyright (c) 2006 Klaus Hartl (stilbuero.de) + * Copyright (c) 2010 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 * */ +jQuery.cookie = function (key, value, options) { -/** - * 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 - */ + // key and at least value given, set cookie... + if (arguments.length > 1 && String(value) !== "[object Object]") { + options = jQuery.extend({}, options); -/** - * 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 = ''; + if (value === null || value === undefined) { 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; - } - } + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setDate(t.getDate() + days); } - return cookieValue; + + value = String(value); + + return (document.cookie = [ + encodeURIComponent(key), '=', + options.raw ? value : encodeURIComponent(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); } -}; \ No newline at end of file + + // key and possibly options given, get cookie... + options = value || {}; + var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; + return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; +}; -- cgit v1.2.3