From d037776267bd3ba7311ca4bb64464516a382a098 Mon Sep 17 00:00:00 2001 From: opi Date: Sun, 20 Nov 2016 20:31:40 +0100 Subject: [PATCH] =?UTF-8?q?[fix]=C2=A0Restore=20and=20upgrade=20missing=20?= =?UTF-8?q?plugins.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sources/lib/plugins/captcha/.travis.yml | 13 + sources/lib/plugins/captcha/README | 25 + .../lib/plugins/captcha/_test/helper.test.php | 84 ++ sources/lib/plugins/captcha/action.php | 199 +++ sources/lib/plugins/captcha/conf/default.php | 15 + sources/lib/plugins/captcha/conf/metadata.php | 15 + sources/lib/plugins/captcha/figlet.flf | 1097 +++++++++++++++++ sources/lib/plugins/captcha/figlet.php | 169 +++ sources/lib/plugins/captcha/fonts/README | 8 + .../plugins/captcha/fonts/Rufscript010.ttf | Bin 0 -> 23080 bytes sources/lib/plugins/captcha/fonts/VeraSe.ttf | Bin 0 -> 60280 bytes sources/lib/plugins/captcha/helper.php | 342 +++++ sources/lib/plugins/captcha/img.php | 22 + sources/lib/plugins/captcha/lang/ar/lang.php | 12 + .../lib/plugins/captcha/lang/ar/settings.php | 23 + sources/lib/plugins/captcha/lang/cs/lang.php | 13 + .../lib/plugins/captcha/lang/cs/settings.php | 23 + sources/lib/plugins/captcha/lang/cy/lang.php | 12 + .../lib/plugins/captcha/lang/cy/settings.php | 22 + sources/lib/plugins/captcha/lang/da/lang.php | 12 + .../lib/plugins/captcha/lang/da/settings.php | 23 + .../plugins/captcha/lang/de-informal/lang.php | 12 + .../captcha/lang/de-informal/settings.php | 23 + sources/lib/plugins/captcha/lang/de/lang.php | 12 + .../lib/plugins/captcha/lang/de/settings.php | 24 + .../lib/plugins/captcha/lang/en/audio/LICENSE | 4 + .../lib/plugins/captcha/lang/en/audio/README | 13 + .../lib/plugins/captcha/lang/en/audio/a.wav | Bin 0 -> 33134 bytes .../lib/plugins/captcha/lang/en/audio/b.wav | Bin 0 -> 32318 bytes .../lib/plugins/captcha/lang/en/audio/c.wav | Bin 0 -> 33342 bytes .../lib/plugins/captcha/lang/en/audio/d.wav | Bin 0 -> 35886 bytes .../lib/plugins/captcha/lang/en/audio/e.wav | Bin 0 -> 30862 bytes .../lib/plugins/captcha/lang/en/audio/f.wav | Bin 0 -> 35310 bytes .../lib/plugins/captcha/lang/en/audio/g.wav | Bin 0 -> 34478 bytes .../lib/plugins/captcha/lang/en/audio/h.wav | Bin 0 -> 33422 bytes .../lib/plugins/captcha/lang/en/audio/i.wav | Bin 0 -> 34030 bytes .../lib/plugins/captcha/lang/en/audio/j.wav | Bin 0 -> 35438 bytes .../lib/plugins/captcha/lang/en/audio/k.wav | Bin 0 -> 34566 bytes .../lib/plugins/captcha/lang/en/audio/l.wav | Bin 0 -> 32030 bytes .../lib/plugins/captcha/lang/en/audio/m.wav | Bin 0 -> 32550 bytes .../lib/plugins/captcha/lang/en/audio/n.wav | Bin 0 -> 37678 bytes .../lib/plugins/captcha/lang/en/audio/o.wav | Bin 0 -> 34862 bytes .../lib/plugins/captcha/lang/en/audio/p.wav | Bin 0 -> 34862 bytes .../lib/plugins/captcha/lang/en/audio/q.wav | Bin 0 -> 32798 bytes .../lib/plugins/captcha/lang/en/audio/r.wav | Bin 0 -> 35830 bytes .../lib/plugins/captcha/lang/en/audio/s.wav | Bin 0 -> 35374 bytes .../lib/plugins/captcha/lang/en/audio/t.wav | Bin 0 -> 33010 bytes .../lib/plugins/captcha/lang/en/audio/u.wav | Bin 0 -> 37854 bytes .../lib/plugins/captcha/lang/en/audio/v.wav | Bin 0 -> 33166 bytes .../lib/plugins/captcha/lang/en/audio/w.wav | Bin 0 -> 34862 bytes .../lib/plugins/captcha/lang/en/audio/x.wav | Bin 0 -> 34862 bytes .../lib/plugins/captcha/lang/en/audio/y.wav | Bin 0 -> 35070 bytes .../lib/plugins/captcha/lang/en/audio/z.wav | Bin 0 -> 34382 bytes sources/lib/plugins/captcha/lang/en/lang.php | 12 + .../lib/plugins/captcha/lang/en/settings.php | 23 + sources/lib/plugins/captcha/lang/eo/lang.php | 13 + .../lib/plugins/captcha/lang/eo/settings.php | 22 + sources/lib/plugins/captcha/lang/es/lang.php | 12 + .../lib/plugins/captcha/lang/es/settings.php | 20 + sources/lib/plugins/captcha/lang/fa/lang.php | 12 + .../lib/plugins/captcha/lang/fa/settings.php | 23 + sources/lib/plugins/captcha/lang/fr/lang.php | 14 + .../lib/plugins/captcha/lang/fr/settings.php | 25 + sources/lib/plugins/captcha/lang/hu/lang.php | 12 + .../lib/plugins/captcha/lang/hu/settings.php | 22 + sources/lib/plugins/captcha/lang/is/lang.php | 12 + .../lib/plugins/captcha/lang/is/settings.php | 22 + sources/lib/plugins/captcha/lang/it/lang.php | 13 + .../lib/plugins/captcha/lang/it/settings.php | 23 + sources/lib/plugins/captcha/lang/ja/lang.php | 13 + .../lib/plugins/captcha/lang/ja/settings.php | 24 + sources/lib/plugins/captcha/lang/ko/lang.php | 14 + .../lib/plugins/captcha/lang/ko/settings.php | 24 + sources/lib/plugins/captcha/lang/nl/lang.php | 14 + .../lib/plugins/captcha/lang/nl/settings.php | 25 + sources/lib/plugins/captcha/lang/nn/lang.php | 12 + .../lib/plugins/captcha/lang/nn/settings.php | 21 + sources/lib/plugins/captcha/lang/no/lang.php | 13 + .../lib/plugins/captcha/lang/no/settings.php | 23 + sources/lib/plugins/captcha/lang/pl/lang.php | 12 + .../lib/plugins/captcha/lang/pl/settings.php | 21 + .../lib/plugins/captcha/lang/pt-br/lang.php | 12 + .../plugins/captcha/lang/pt-br/settings.php | 23 + sources/lib/plugins/captcha/lang/pt/lang.php | 12 + .../lib/plugins/captcha/lang/pt/settings.php | 23 + sources/lib/plugins/captcha/lang/ru/lang.php | 13 + .../lib/plugins/captcha/lang/ru/settings.php | 24 + sources/lib/plugins/captcha/lang/sk/lang.php | 13 + .../lib/plugins/captcha/lang/sk/settings.php | 22 + sources/lib/plugins/captcha/lang/tr/lang.php | 12 + .../lib/plugins/captcha/lang/tr/settings.php | 24 + sources/lib/plugins/captcha/lang/uk/lang.php | 12 + .../lib/plugins/captcha/lang/uk/settings.php | 21 + .../lib/plugins/captcha/lang/zh-tw/lang.php | 13 + .../plugins/captcha/lang/zh-tw/settings.php | 24 + sources/lib/plugins/captcha/lang/zh/lang.php | 13 + .../lib/plugins/captcha/lang/zh/settings.php | 24 + sources/lib/plugins/captcha/manager.dat | 2 + sources/lib/plugins/captcha/plugin.info.txt | 8 + sources/lib/plugins/captcha/script.js | 32 + sources/lib/plugins/captcha/sound.png | Bin 0 -> 610 bytes sources/lib/plugins/captcha/style.css | 23 + sources/lib/plugins/captcha/wav.php | 88 ++ sources/lib/plugins/gallery/README | 25 + sources/lib/plugins/gallery/all.less | 30 + sources/lib/plugins/gallery/conf/default.php | 15 + sources/lib/plugins/gallery/conf/metadata.php | 16 + sources/lib/plugins/gallery/deleted.files | 47 + sources/lib/plugins/gallery/images/blank.gif | Bin 0 -> 110 bytes sources/lib/plugins/gallery/images/close.gif | Bin 0 -> 99 bytes sources/lib/plugins/gallery/images/expand.gif | Bin 0 -> 209 bytes .../lib/plugins/gallery/images/loading.gif | Bin 0 -> 2230 bytes sources/lib/plugins/gallery/images/next.gif | Bin 0 -> 93 bytes .../lib/plugins/gallery/images/overlay.png | Bin 0 -> 406 bytes .../lib/plugins/gallery/images/overlayie.png | Bin 0 -> 389 bytes sources/lib/plugins/gallery/images/prev.gif | Bin 0 -> 94 bytes sources/lib/plugins/gallery/images/shrink.gif | Bin 0 -> 207 bytes sources/lib/plugins/gallery/lang/ar/lang.php | 9 + .../lib/plugins/gallery/lang/ar/settings.php | 18 + sources/lib/plugins/gallery/lang/ca/lang.php | 9 + .../lib/plugins/gallery/lang/ca/settings.php | 18 + sources/lib/plugins/gallery/lang/cs/lang.php | 9 + .../lib/plugins/gallery/lang/cs/settings.php | 19 + sources/lib/plugins/gallery/lang/cy/lang.php | 9 + .../lib/plugins/gallery/lang/cy/settings.php | 18 + sources/lib/plugins/gallery/lang/da/lang.php | 9 + .../lib/plugins/gallery/lang/da/settings.php | 18 + sources/lib/plugins/gallery/lang/de/lang.php | 9 + .../lib/plugins/gallery/lang/de/settings.php | 18 + sources/lib/plugins/gallery/lang/en/lang.php | 4 + .../lib/plugins/gallery/lang/en/settings.php | 22 + sources/lib/plugins/gallery/lang/eo/lang.php | 9 + .../lib/plugins/gallery/lang/eo/settings.php | 18 + sources/lib/plugins/gallery/lang/es/lang.php | 10 + .../lib/plugins/gallery/lang/es/settings.php | 19 + sources/lib/plugins/gallery/lang/fa/lang.php | 9 + .../lib/plugins/gallery/lang/fa/settings.php | 18 + sources/lib/plugins/gallery/lang/fr/lang.php | 11 + .../lib/plugins/gallery/lang/fr/settings.php | 20 + sources/lib/plugins/gallery/lang/hu/lang.php | 9 + .../lib/plugins/gallery/lang/hu/settings.php | 18 + .../lib/plugins/gallery/lang/it/settings.php | 18 + sources/lib/plugins/gallery/lang/ja/lang.php | 9 + .../lib/plugins/gallery/lang/ja/settings.php | 18 + sources/lib/plugins/gallery/lang/ko/lang.php | 8 + .../lib/plugins/gallery/lang/ko/settings.php | 21 + sources/lib/plugins/gallery/lang/nl/lang.php | 9 + .../lib/plugins/gallery/lang/nl/settings.php | 18 + sources/lib/plugins/gallery/lang/no/lang.php | 9 + .../lib/plugins/gallery/lang/no/settings.php | 18 + .../lib/plugins/gallery/lang/pt-br/lang.php | 9 + .../plugins/gallery/lang/pt-br/settings.php | 18 + sources/lib/plugins/gallery/lang/ru/lang.php | 9 + .../lib/plugins/gallery/lang/ru/settings.php | 18 + sources/lib/plugins/gallery/lang/sk/lang.php | 9 + .../lib/plugins/gallery/lang/sk/settings.php | 18 + sources/lib/plugins/gallery/lang/ta/lang.php | 9 + .../lib/plugins/gallery/lang/ta/settings.php | 18 + sources/lib/plugins/gallery/lang/tr/lang.php | 10 + .../lib/plugins/gallery/lang/tr/settings.php | 19 + .../lib/plugins/gallery/lang/zh-tw/lang.php | 9 + .../plugins/gallery/lang/zh-tw/settings.php | 18 + sources/lib/plugins/gallery/lang/zh/lang.php | 9 + .../lib/plugins/gallery/lang/zh/settings.php | 18 + sources/lib/plugins/gallery/manager.dat | 2 + sources/lib/plugins/gallery/plugin.info.txt | 7 + sources/lib/plugins/gallery/screen.less | 60 + sources/lib/plugins/gallery/script.js | 59 + sources/lib/plugins/gallery/swipebox/README | 6 + .../gallery/swipebox/css/swipebox.less | 291 +++++ .../gallery/swipebox/css/swipebox.min.css | 1 + .../plugins/gallery/swipebox/img/icons.png | Bin 0 -> 729 bytes .../plugins/gallery/swipebox/img/icons.svg | 1 + .../plugins/gallery/swipebox/img/loader.gif | Bin 0 -> 2608 bytes .../gallery/swipebox/js/jquery.swipebox.js | 956 ++++++++++++++ .../swipebox/js/jquery.swipebox.min.js | 2 + sources/lib/plugins/gallery/syntax.php | 663 ++++++++++ sources/lib/plugins/translation/README | 25 + sources/lib/plugins/translation/action.php | 289 +++++ sources/lib/plugins/translation/admin.php | 101 ++ .../lib/plugins/translation/conf/default.php | 19 + .../lib/plugins/translation/conf/metadata.php | 21 + sources/lib/plugins/translation/flags/af.gif | Bin 0 -> 369 bytes sources/lib/plugins/translation/flags/ar.gif | Bin 0 -> 370 bytes sources/lib/plugins/translation/flags/da.gif | Bin 0 -> 374 bytes sources/lib/plugins/translation/flags/de.gif | Bin 0 -> 362 bytes sources/lib/plugins/translation/flags/el.gif | Bin 0 -> 368 bytes sources/lib/plugins/translation/flags/en.gif | Bin 0 -> 260 bytes sources/lib/plugins/translation/flags/es.gif | Bin 0 -> 360 bytes sources/lib/plugins/translation/flags/et.gif | Bin 0 -> 364 bytes sources/lib/plugins/translation/flags/fa.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/flags/fr.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/flags/ga.gif | Bin 0 -> 371 bytes sources/lib/plugins/translation/flags/he.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/flags/hu.gif | Bin 0 -> 357 bytes sources/lib/plugins/translation/flags/it.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/flags/ja.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/flags/ko.gif | Bin 0 -> 385 bytes .../lib/plugins/translation/flags/more/ad.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/ae.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/ag.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/ai.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/al.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/am.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/an.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/ao.gif | Bin 0 -> 244 bytes .../lib/plugins/translation/flags/more/ar.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/as.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/at.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/au.gif | Bin 0 -> 378 bytes .../lib/plugins/translation/flags/more/aw.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/ax.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/more/az.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/ba.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/bb.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/bd.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/be.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/bf.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/bg.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/bh.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/bi.gif | Bin 0 -> 374 bytes .../lib/plugins/translation/flags/more/bj.gif | Bin 0 -> 368 bytes .../translation/flags/more/blankflag.gif | Bin 0 -> 42 bytes .../lib/plugins/translation/flags/more/bm.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/bn.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/bo.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/bs.gif | Bin 0 -> 351 bytes .../lib/plugins/translation/flags/more/bt.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/bv.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/more/bw.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/by.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/bz.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/ca.gif | Bin 0 -> 376 bytes .../translation/flags/more/catalonia.gif | Bin 0 -> 238 bytes .../lib/plugins/translation/flags/more/cc.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/cd.gif | Bin 0 -> 243 bytes .../lib/plugins/translation/flags/more/cf.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/cg.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/ch.gif | Bin 0 -> 332 bytes .../lib/plugins/translation/flags/more/ci.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/ck.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/cl.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/cm.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/co.gif | Bin 0 -> 353 bytes .../lib/plugins/translation/flags/more/cr.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/cs.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/cu.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/cv.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/cx.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/cy.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/cz.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/dj.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/dm.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/do.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/dz.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/ec.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/eg.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/eh.gif | Bin 0 -> 359 bytes .../translation/flags/more/england.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/er.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/et.gif | Bin 0 -> 364 bytes .../translation/flags/more/europeanunion.gif | Bin 0 -> 171 bytes .../plugins/translation/flags/more/fam.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/fi.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/fj.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/fk.gif | Bin 0 -> 372 bytes .../lib/plugins/translation/flags/more/fm.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/fo.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/ga.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/gd.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/ge.gif | Bin 0 -> 379 bytes .../lib/plugins/translation/flags/more/gf.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/gh.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/gi.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/gl.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/gm.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/gn.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/gp.gif | Bin 0 -> 357 bytes .../lib/plugins/translation/flags/more/gq.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/gs.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/gt.gif | Bin 0 -> 374 bytes .../lib/plugins/translation/flags/more/gu.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/gw.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/gy.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/hk.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/hm.gif | Bin 0 -> 378 bytes .../lib/plugins/translation/flags/more/hn.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/hr.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/ht.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/id.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/in.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/io.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/iq.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/is.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/ja.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/jm.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/jo.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/ke.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/kg.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/kh.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/ki.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/km.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/kn.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/ko.gif | Bin 0 -> 385 bytes .../lib/plugins/translation/flags/more/kp.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/kw.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/ky.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/kz.gif | Bin 0 -> 374 bytes .../lib/plugins/translation/flags/more/la.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/lb.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/lc.gif | Bin 0 -> 259 bytes .../lib/plugins/translation/flags/more/li.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/lk.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/lr.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/ls.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/lt.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/lu.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/lv.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/ly.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/ma.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/mc.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/md.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/me.gif | Bin 0 -> 238 bytes .../lib/plugins/translation/flags/more/mg.gif | Bin 0 -> 372 bytes .../lib/plugins/translation/flags/more/mh.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/mk.gif | Bin 0 -> 382 bytes .../lib/plugins/translation/flags/more/ml.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/mm.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/mn.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/mo.gif | Bin 0 -> 378 bytes .../lib/plugins/translation/flags/more/mp.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/mq.gif | Bin 0 -> 379 bytes .../lib/plugins/translation/flags/more/mr.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/ms.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/mt.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/mu.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/mv.gif | Bin 0 -> 372 bytes .../lib/plugins/translation/flags/more/mw.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/mx.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/my.gif | Bin 0 -> 375 bytes .../lib/plugins/translation/flags/more/mz.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/na.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/nc.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/ne.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/nf.gif | Bin 0 -> 375 bytes .../lib/plugins/translation/flags/more/ng.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/ni.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/np.gif | Bin 0 -> 302 bytes .../lib/plugins/translation/flags/more/nr.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/nu.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/nz.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/om.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/pa.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/pe.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/pf.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/pg.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/ph.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/pk.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/pl.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/pm.gif | Bin 0 -> 374 bytes .../lib/plugins/translation/flags/more/pn.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/pr.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/ps.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/pw.gif | Bin 0 -> 374 bytes .../lib/plugins/translation/flags/more/py.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/qa.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/re.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/rs.gif | Bin 0 -> 238 bytes .../lib/plugins/translation/flags/more/rw.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/sb.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/sc.gif | Bin 0 -> 357 bytes .../translation/flags/more/scotland.gif | Bin 0 -> 378 bytes .../lib/plugins/translation/flags/more/sd.gif | Bin 0 -> 355 bytes .../lib/plugins/translation/flags/more/sg.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/sh.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/si.gif | Bin 0 -> 362 bytes .../lib/plugins/translation/flags/more/sj.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/more/sk.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/sl.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/sm.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/sn.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/so.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/more/sr.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/st.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/sv.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/sy.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/sz.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/tc.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/td.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/tf.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/tg.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/tj.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/tk.gif | Bin 0 -> 372 bytes .../lib/plugins/translation/flags/more/tl.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/tm.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/tn.gif | Bin 0 -> 375 bytes .../lib/plugins/translation/flags/more/to.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/tt.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/tv.gif | Bin 0 -> 361 bytes .../lib/plugins/translation/flags/more/tw.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/tz.gif | Bin 0 -> 366 bytes .../lib/plugins/translation/flags/more/ua.gif | Bin 0 -> 360 bytes .../lib/plugins/translation/flags/more/ug.gif | Bin 0 -> 359 bytes .../lib/plugins/translation/flags/more/um.gif | Bin 0 -> 371 bytes .../lib/plugins/translation/flags/more/us.gif | Bin 0 -> 367 bytes .../lib/plugins/translation/flags/more/uy.gif | Bin 0 -> 373 bytes .../lib/plugins/translation/flags/more/uz.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/va.gif | Bin 0 -> 369 bytes .../lib/plugins/translation/flags/more/vc.gif | Bin 0 -> 370 bytes .../lib/plugins/translation/flags/more/ve.gif | Bin 0 -> 364 bytes .../lib/plugins/translation/flags/more/vg.gif | Bin 0 -> 368 bytes .../lib/plugins/translation/flags/more/vi.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/more/vu.gif | Bin 0 -> 365 bytes .../plugins/translation/flags/more/wales.gif | Bin 0 -> 372 bytes .../lib/plugins/translation/flags/more/wf.gif | Bin 0 -> 377 bytes .../lib/plugins/translation/flags/more/ws.gif | Bin 0 -> 365 bytes .../lib/plugins/translation/flags/more/ye.gif | Bin 0 -> 356 bytes .../lib/plugins/translation/flags/more/yt.gif | Bin 0 -> 382 bytes .../lib/plugins/translation/flags/more/za.gif | Bin 0 -> 363 bytes .../lib/plugins/translation/flags/more/zm.gif | Bin 0 -> 358 bytes .../lib/plugins/translation/flags/more/zw.gif | Bin 0 -> 365 bytes sources/lib/plugins/translation/flags/nl.gif | Bin 0 -> 360 bytes sources/lib/plugins/translation/flags/no.gif | Bin 0 -> 376 bytes .../lib/plugins/translation/flags/pt-br.gif | Bin 0 -> 367 bytes sources/lib/plugins/translation/flags/pt.gif | Bin 0 -> 369 bytes sources/lib/plugins/translation/flags/ro.gif | Bin 0 -> 363 bytes sources/lib/plugins/translation/flags/ru.gif | Bin 0 -> 361 bytes sources/lib/plugins/translation/flags/sv.gif | Bin 0 -> 367 bytes sources/lib/plugins/translation/flags/th.gif | Bin 0 -> 360 bytes sources/lib/plugins/translation/flags/tr.gif | Bin 0 -> 371 bytes sources/lib/plugins/translation/flags/vi.gif | Bin 0 -> 370 bytes sources/lib/plugins/translation/flags/zh.gif | Bin 0 -> 366 bytes sources/lib/plugins/translation/helper.php | 413 +++++++ .../lib/plugins/translation/lang/bn/lang.php | 10 + .../plugins/translation/lang/bn/settings.php | 10 + .../translation/lang/bn/totranslate.txt | 1 + .../lib/plugins/translation/lang/ca/lang.php | 16 + .../plugins/translation/lang/ca/settings.php | 19 + .../translation/lang/ca/totranslate.txt | 1 + .../lib/plugins/translation/lang/cs/lang.php | 16 + .../plugins/translation/lang/cs/settings.php | 19 + .../translation/lang/cs/totranslate.txt | 1 + .../lib/plugins/translation/lang/cy/lang.php | 11 + .../plugins/translation/lang/cy/settings.php | 18 + .../translation/lang/cy/totranslate.txt | 1 + .../lib/plugins/translation/lang/da/lang.php | 12 + .../plugins/translation/lang/da/settings.php | 20 + .../translation/lang/da/totranslate.txt | 1 + .../translation/lang/de-informal/lang.php | 3 + .../translation/lang/de-informal/settings.php | 13 + .../lib/plugins/translation/lang/de/lang.php | 16 + .../plugins/translation/lang/de/settings.php | 19 + .../translation/lang/de/totranslate.txt | 1 + .../lib/plugins/translation/lang/en/lang.php | 11 + .../plugins/translation/lang/en/settings.php | 20 + .../translation/lang/en/totranslate.txt | 1 + .../lib/plugins/translation/lang/eo/lang.php | 11 + .../plugins/translation/lang/eo/settings.php | 18 + .../translation/lang/eo/totranslate.txt | 1 + .../lib/plugins/translation/lang/es/lang.php | 12 + .../plugins/translation/lang/es/settings.php | 20 + .../translation/lang/es/totranslate.txt | 1 + .../lib/plugins/translation/lang/fa/lang.php | 16 + .../plugins/translation/lang/fa/settings.php | 19 + .../translation/lang/fa/totranslate.txt | 1 + .../lib/plugins/translation/lang/fr/lang.php | 19 + .../plugins/translation/lang/fr/settings.php | 22 + .../translation/lang/fr/totranslate.txt | 1 + .../lib/plugins/translation/lang/hr/lang.php | 16 + .../plugins/translation/lang/hr/settings.php | 19 + .../translation/lang/hr/totranslate.txt | 1 + .../lib/plugins/translation/lang/hu/lang.php | 11 + .../plugins/translation/lang/hu/settings.php | 18 + .../translation/lang/hu/totranslate.txt | 1 + .../lib/plugins/translation/lang/it/lang.php | 10 + .../plugins/translation/lang/it/settings.php | 20 + .../translation/lang/it/totranslate.txt | 1 + .../lib/plugins/translation/lang/ja/lang.php | 16 + .../plugins/translation/lang/ja/settings.php | 19 + .../translation/lang/ja/totranslate.txt | 1 + .../lib/plugins/translation/lang/ko/lang.php | 16 + .../plugins/translation/lang/ko/settings.php | 19 + .../translation/lang/ko/totranslate.txt | 1 + .../plugins/translation/lang/langnames.txt | 188 +++ .../lib/plugins/translation/lang/lv/lang.php | 11 + .../plugins/translation/lang/lv/settings.php | 19 + .../translation/lang/lv/totranslate.txt | 1 + .../lib/plugins/translation/lang/nl/lang.php | 17 + .../plugins/translation/lang/nl/settings.php | 21 + .../translation/lang/nl/totranslate.txt | 1 + .../plugins/translation/lang/pt-br/lang.php | 15 + .../translation/lang/pt-br/settings.php | 20 + .../translation/lang/pt-br/totranslate.txt | 1 + .../lib/plugins/translation/lang/pt/lang.php | 11 + .../plugins/translation/lang/pt/settings.php | 19 + .../lib/plugins/translation/lang/ru/lang.php | 18 + .../plugins/translation/lang/ru/settings.php | 21 + .../translation/lang/ru/totranslate.txt | 1 + .../lib/plugins/translation/lang/sl/lang.php | 9 + .../plugins/translation/lang/sl/settings.php | 18 + .../lib/plugins/translation/lang/tr/lang.php | 10 + .../plugins/translation/lang/tr/settings.php | 15 + .../translation/lang/tr/totranslate.txt | 1 + .../lib/plugins/translation/lang/uk/lang.php | 5 + .../plugins/translation/lang/uk/settings.php | 18 + .../plugins/translation/lang/zh-tw/lang.php | 6 + .../translation/lang/zh-tw/settings.php | 16 + .../lib/plugins/translation/lang/zh/lang.php | 12 + .../plugins/translation/lang/zh/settings.php | 19 + .../translation/lang/zh/totranslate.txt | 1 + sources/lib/plugins/translation/manager.dat | 2 + .../lib/plugins/translation/plugin.info.txt | 8 + sources/lib/plugins/translation/print.css | 1 + sources/lib/plugins/translation/script.js | 20 + sources/lib/plugins/translation/style.css | 97 ++ .../plugins/translation/syntax/notrans.php | 73 ++ .../lib/plugins/translation/syntax/trans.php | 57 + sources/lib/plugins/upgrade/README | 25 + .../plugins/upgrade/VerboseTarLib.class.php | 599 +++++++++ sources/lib/plugins/upgrade/admin.php | 508 ++++++++ sources/lib/plugins/upgrade/lang/cs/lang.php | 46 + .../lib/plugins/upgrade/lang/cs/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/cs/step0.txt | 7 + sources/lib/plugins/upgrade/lang/cy/lang.php | 46 + .../lib/plugins/upgrade/lang/cy/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/cy/step0.txt | 7 + sources/lib/plugins/upgrade/lang/da/lang.php | 48 + .../lib/plugins/upgrade/lang/da/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/da/step0.txt | 7 + .../plugins/upgrade/lang/de-informal/lang.php | 46 + .../upgrade/lang/de-informal/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/de/lang.php | 49 + .../lib/plugins/upgrade/lang/de/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/de/step0.txt | 7 + sources/lib/plugins/upgrade/lang/en/lang.php | 55 + .../lib/plugins/upgrade/lang/en/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/en/step0.txt | 7 + sources/lib/plugins/upgrade/lang/eo/lang.php | 46 + .../lib/plugins/upgrade/lang/eo/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/eo/step0.txt | 7 + sources/lib/plugins/upgrade/lang/es/lang.php | 46 + .../lib/plugins/upgrade/lang/es/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/es/step0.txt | 7 + sources/lib/plugins/upgrade/lang/fa/lang.php | 46 + .../lib/plugins/upgrade/lang/fa/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/fa/step0.txt | 7 + sources/lib/plugins/upgrade/lang/fr/lang.php | 50 + .../lib/plugins/upgrade/lang/fr/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/fr/step0.txt | 7 + sources/lib/plugins/upgrade/lang/hr/lang.php | 46 + .../lib/plugins/upgrade/lang/hr/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/hr/step0.txt | 7 + sources/lib/plugins/upgrade/lang/hu/lang.php | 47 + .../lib/plugins/upgrade/lang/hu/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/hu/step0.txt | 7 + sources/lib/plugins/upgrade/lang/is/lang.php | 46 + .../lib/plugins/upgrade/lang/is/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/is/step0.txt | 7 + sources/lib/plugins/upgrade/lang/it/lang.php | 48 + .../lib/plugins/upgrade/lang/it/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/it/step0.txt | 7 + sources/lib/plugins/upgrade/lang/ja/lang.php | 46 + .../lib/plugins/upgrade/lang/ja/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/ja/step0.txt | 9 + sources/lib/plugins/upgrade/lang/ko/lang.php | 46 + .../lib/plugins/upgrade/lang/ko/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/ko/step0.txt | 7 + sources/lib/plugins/upgrade/lang/nl/lang.php | 49 + .../lib/plugins/upgrade/lang/nl/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/nl/step0.txt | 7 + sources/lib/plugins/upgrade/lang/no/lang.php | 48 + .../lib/plugins/upgrade/lang/no/safemode.txt | 2 + sources/lib/plugins/upgrade/lang/no/step0.txt | 7 + .../lib/plugins/upgrade/lang/pt-br/lang.php | 16 + sources/lib/plugins/upgrade/lang/pt/lang.php | 47 + .../lib/plugins/upgrade/lang/pt/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/pt/step0.txt | 7 + sources/lib/plugins/upgrade/lang/ru/lang.php | 50 + .../lib/plugins/upgrade/lang/ru/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/ru/step0.txt | 7 + sources/lib/plugins/upgrade/lang/tr/lang.php | 45 + .../lib/plugins/upgrade/lang/tr/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/tr/step0.txt | 7 + .../lib/plugins/upgrade/lang/zh-tw/lang.php | 45 + .../plugins/upgrade/lang/zh-tw/safemode.txt | 1 + .../lib/plugins/upgrade/lang/zh-tw/step0.txt | 7 + sources/lib/plugins/upgrade/lang/zh/lang.php | 47 + .../lib/plugins/upgrade/lang/zh/safemode.txt | 1 + sources/lib/plugins/upgrade/lang/zh/step0.txt | 7 + sources/lib/plugins/upgrade/manager.dat | 2 + sources/lib/plugins/upgrade/plugin.info.txt | 7 + sources/lib/plugins/upgrade/style.css | 97 ++ sources/lib/plugins/vshare/README | 25 + sources/lib/plugins/vshare/all.css | 24 + sources/lib/plugins/vshare/button.png | Bin 0 -> 710 bytes sources/lib/plugins/vshare/lang/en/lang.php | 6 + sources/lib/plugins/vshare/lang/fr/lang.php | 10 + sources/lib/plugins/vshare/lang/ja/lang.php | 10 + sources/lib/plugins/vshare/lang/ko/lang.php | 10 + sources/lib/plugins/vshare/lang/nl/lang.php | 10 + sources/lib/plugins/vshare/manager.dat | 3 + sources/lib/plugins/vshare/pdf.css | 16 + sources/lib/plugins/vshare/plugin.info.txt | 8 + sources/lib/plugins/vshare/redir.php | 22 + sources/lib/plugins/vshare/script.js | 116 ++ sources/lib/plugins/vshare/sites.conf | 27 + sources/lib/plugins/vshare/sites.js | 36 + sources/lib/plugins/vshare/syntax.php | 209 ++++ sources/lib/plugins/vshare/video.png | Bin 0 -> 6682 bytes sources/lib/plugins/wrap/.travis.yml | 13 + sources/lib/plugins/wrap/COPYING | 340 +++++ sources/lib/plugins/wrap/README | 1 + .../plugins/wrap/_test/wrap_syntax.test.php | 243 ++++ sources/lib/plugins/wrap/action.php | 152 +++ sources/lib/plugins/wrap/all.css | 321 +++++ sources/lib/plugins/wrap/conf/default.php | 12 + sources/lib/plugins/wrap/conf/lang2dir.conf | 249 ++++ sources/lib/plugins/wrap/conf/metadata.php | 12 + sources/lib/plugins/wrap/example.txt | 437 +++++++ sources/lib/plugins/wrap/helper.php | 489 ++++++++ sources/lib/plugins/wrap/images/README | 18 + .../lib/plugins/wrap/images/note/16/alert.png | Bin 0 -> 883 bytes .../plugins/wrap/images/note/16/download.png | Bin 0 -> 683 bytes .../lib/plugins/wrap/images/note/16/help.png | Bin 0 -> 929 bytes .../plugins/wrap/images/note/16/important.png | Bin 0 -> 574 bytes .../lib/plugins/wrap/images/note/16/info.png | Bin 0 -> 796 bytes .../lib/plugins/wrap/images/note/16/tip.png | Bin 0 -> 841 bytes .../lib/plugins/wrap/images/note/16/todo.png | Bin 0 -> 692 bytes .../lib/plugins/wrap/images/note/48/alert.png | Bin 0 -> 3654 bytes .../plugins/wrap/images/note/48/download.png | Bin 0 -> 2801 bytes .../lib/plugins/wrap/images/note/48/help.png | Bin 0 -> 3283 bytes .../plugins/wrap/images/note/48/important.png | Bin 0 -> 3029 bytes .../lib/plugins/wrap/images/note/48/info.png | Bin 0 -> 3315 bytes .../lib/plugins/wrap/images/note/48/tip.png | Bin 0 -> 4232 bytes .../lib/plugins/wrap/images/note/48/todo.png | Bin 0 -> 3176 bytes .../lib/plugins/wrap/images/toolbar/box.png | Bin 0 -> 353 bytes .../lib/plugins/wrap/images/toolbar/clear.png | Bin 0 -> 797 bytes .../plugins/wrap/images/toolbar/column.png | Bin 0 -> 246 bytes .../lib/plugins/wrap/images/toolbar/em.png | Bin 0 -> 235 bytes .../lib/plugins/wrap/images/toolbar/hi.png | Bin 0 -> 259 bytes .../lib/plugins/wrap/images/toolbar/lo.png | Bin 0 -> 211 bytes .../plugins/wrap/images/toolbar/picker.png | Bin 0 -> 870 bytes sources/lib/plugins/wrap/lang/ar/lang.php | 16 + sources/lib/plugins/wrap/lang/ar/settings.php | 11 + sources/lib/plugins/wrap/lang/bn/lang.php | 21 + sources/lib/plugins/wrap/lang/bn/settings.php | 14 + sources/lib/plugins/wrap/lang/cs/lang.php | 21 + sources/lib/plugins/wrap/lang/cs/settings.php | 14 + sources/lib/plugins/wrap/lang/da/lang.php | 21 + sources/lib/plugins/wrap/lang/da/settings.php | 12 + .../plugins/wrap/lang/de-informal/lang.php | 19 + .../wrap/lang/de-informal/settings.php | 14 + sources/lib/plugins/wrap/lang/de/lang.php | 19 + sources/lib/plugins/wrap/lang/de/settings.php | 14 + sources/lib/plugins/wrap/lang/en/lang.php | 19 + sources/lib/plugins/wrap/lang/en/settings.php | 14 + sources/lib/plugins/wrap/lang/eo/lang.php | 21 + sources/lib/plugins/wrap/lang/eo/settings.php | 14 + sources/lib/plugins/wrap/lang/es/lang.php | 20 + sources/lib/plugins/wrap/lang/es/settings.php | 15 + sources/lib/plugins/wrap/lang/fa/lang.php | 20 + sources/lib/plugins/wrap/lang/fr/lang.php | 23 + sources/lib/plugins/wrap/lang/fr/settings.php | 18 + sources/lib/plugins/wrap/lang/hr/lang.php | 21 + sources/lib/plugins/wrap/lang/hr/settings.php | 15 + sources/lib/plugins/wrap/lang/hu/lang.php | 21 + sources/lib/plugins/wrap/lang/hu/settings.php | 16 + sources/lib/plugins/wrap/lang/it/lang.php | 12 + sources/lib/plugins/wrap/lang/it/settings.php | 12 + sources/lib/plugins/wrap/lang/ja/lang.php | 21 + sources/lib/plugins/wrap/lang/ja/settings.php | 16 + sources/lib/plugins/wrap/lang/ko/lang.php | 21 + sources/lib/plugins/wrap/lang/ko/settings.php | 15 + sources/lib/plugins/wrap/lang/nl/lang.php | 21 + sources/lib/plugins/wrap/lang/nl/settings.php | 16 + sources/lib/plugins/wrap/lang/no/lang.php | 24 + sources/lib/plugins/wrap/lang/no/settings.php | 15 + sources/lib/plugins/wrap/lang/pt-br/lang.php | 21 + .../lib/plugins/wrap/lang/pt-br/settings.php | 13 + sources/lib/plugins/wrap/lang/ru/lang.php | 23 + sources/lib/plugins/wrap/lang/ru/settings.php | 16 + sources/lib/plugins/wrap/lang/sk/lang.php | 12 + sources/lib/plugins/wrap/lang/sk/settings.php | 12 + sources/lib/plugins/wrap/lang/tr/lang.php | 22 + sources/lib/plugins/wrap/lang/tr/settings.php | 15 + sources/lib/plugins/wrap/lang/zh-tw/lang.php | 19 + .../lib/plugins/wrap/lang/zh-tw/settings.php | 11 + sources/lib/plugins/wrap/lang/zh/lang.php | 20 + sources/lib/plugins/wrap/lang/zh/settings.php | 16 + sources/lib/plugins/wrap/manager.dat | 2 + sources/lib/plugins/wrap/plugin.info.txt | 8 + sources/lib/plugins/wrap/print.css | 57 + sources/lib/plugins/wrap/style.css | 203 +++ .../lib/plugins/wrap/syntax/closesection.php | 40 + sources/lib/plugins/wrap/syntax/div.php | 132 ++ sources/lib/plugins/wrap/syntax/divblock.php | 21 + sources/lib/plugins/wrap/syntax/divwrap.php | 20 + sources/lib/plugins/wrap/syntax/span.php | 105 ++ .../lib/plugins/wrap/syntax/spaninline.php | 20 + sources/lib/plugins/wrap/syntax/spanwrap.php | 21 + 700 files changed, 14927 insertions(+) create mode 100755 sources/lib/plugins/captcha/.travis.yml create mode 100755 sources/lib/plugins/captcha/README create mode 100644 sources/lib/plugins/captcha/_test/helper.test.php create mode 100755 sources/lib/plugins/captcha/action.php create mode 100755 sources/lib/plugins/captcha/conf/default.php create mode 100755 sources/lib/plugins/captcha/conf/metadata.php create mode 100755 sources/lib/plugins/captcha/figlet.flf create mode 100755 sources/lib/plugins/captcha/figlet.php create mode 100755 sources/lib/plugins/captcha/fonts/README create mode 100755 sources/lib/plugins/captcha/fonts/Rufscript010.ttf create mode 100755 sources/lib/plugins/captcha/fonts/VeraSe.ttf create mode 100755 sources/lib/plugins/captcha/helper.php create mode 100755 sources/lib/plugins/captcha/img.php create mode 100755 sources/lib/plugins/captcha/lang/ar/lang.php create mode 100755 sources/lib/plugins/captcha/lang/ar/settings.php create mode 100755 sources/lib/plugins/captcha/lang/cs/lang.php create mode 100755 sources/lib/plugins/captcha/lang/cs/settings.php create mode 100644 sources/lib/plugins/captcha/lang/cy/lang.php create mode 100644 sources/lib/plugins/captcha/lang/cy/settings.php create mode 100755 sources/lib/plugins/captcha/lang/da/lang.php create mode 100755 sources/lib/plugins/captcha/lang/da/settings.php create mode 100755 sources/lib/plugins/captcha/lang/de-informal/lang.php create mode 100755 sources/lib/plugins/captcha/lang/de-informal/settings.php create mode 100755 sources/lib/plugins/captcha/lang/de/lang.php create mode 100755 sources/lib/plugins/captcha/lang/de/settings.php create mode 100755 sources/lib/plugins/captcha/lang/en/audio/LICENSE create mode 100755 sources/lib/plugins/captcha/lang/en/audio/README create mode 100755 sources/lib/plugins/captcha/lang/en/audio/a.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/b.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/c.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/d.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/e.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/f.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/g.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/h.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/i.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/j.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/k.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/l.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/m.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/n.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/o.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/p.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/q.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/r.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/s.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/t.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/u.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/v.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/w.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/x.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/y.wav create mode 100755 sources/lib/plugins/captcha/lang/en/audio/z.wav create mode 100755 sources/lib/plugins/captcha/lang/en/lang.php create mode 100755 sources/lib/plugins/captcha/lang/en/settings.php create mode 100755 sources/lib/plugins/captcha/lang/eo/lang.php create mode 100755 sources/lib/plugins/captcha/lang/eo/settings.php create mode 100755 sources/lib/plugins/captcha/lang/es/lang.php create mode 100755 sources/lib/plugins/captcha/lang/es/settings.php create mode 100644 sources/lib/plugins/captcha/lang/fa/lang.php create mode 100644 sources/lib/plugins/captcha/lang/fa/settings.php create mode 100755 sources/lib/plugins/captcha/lang/fr/lang.php create mode 100755 sources/lib/plugins/captcha/lang/fr/settings.php create mode 100755 sources/lib/plugins/captcha/lang/hu/lang.php create mode 100755 sources/lib/plugins/captcha/lang/hu/settings.php create mode 100755 sources/lib/plugins/captcha/lang/is/lang.php create mode 100755 sources/lib/plugins/captcha/lang/is/settings.php create mode 100755 sources/lib/plugins/captcha/lang/it/lang.php create mode 100755 sources/lib/plugins/captcha/lang/it/settings.php create mode 100755 sources/lib/plugins/captcha/lang/ja/lang.php create mode 100755 sources/lib/plugins/captcha/lang/ja/settings.php create mode 100755 sources/lib/plugins/captcha/lang/ko/lang.php create mode 100755 sources/lib/plugins/captcha/lang/ko/settings.php create mode 100755 sources/lib/plugins/captcha/lang/nl/lang.php create mode 100755 sources/lib/plugins/captcha/lang/nl/settings.php create mode 100644 sources/lib/plugins/captcha/lang/nn/lang.php create mode 100644 sources/lib/plugins/captcha/lang/nn/settings.php create mode 100755 sources/lib/plugins/captcha/lang/no/lang.php create mode 100755 sources/lib/plugins/captcha/lang/no/settings.php create mode 100755 sources/lib/plugins/captcha/lang/pl/lang.php create mode 100755 sources/lib/plugins/captcha/lang/pl/settings.php create mode 100755 sources/lib/plugins/captcha/lang/pt-br/lang.php create mode 100755 sources/lib/plugins/captcha/lang/pt-br/settings.php create mode 100755 sources/lib/plugins/captcha/lang/pt/lang.php create mode 100755 sources/lib/plugins/captcha/lang/pt/settings.php create mode 100755 sources/lib/plugins/captcha/lang/ru/lang.php create mode 100755 sources/lib/plugins/captcha/lang/ru/settings.php create mode 100755 sources/lib/plugins/captcha/lang/sk/lang.php create mode 100755 sources/lib/plugins/captcha/lang/sk/settings.php create mode 100755 sources/lib/plugins/captcha/lang/tr/lang.php create mode 100755 sources/lib/plugins/captcha/lang/tr/settings.php create mode 100755 sources/lib/plugins/captcha/lang/uk/lang.php create mode 100755 sources/lib/plugins/captcha/lang/uk/settings.php create mode 100755 sources/lib/plugins/captcha/lang/zh-tw/lang.php create mode 100755 sources/lib/plugins/captcha/lang/zh-tw/settings.php create mode 100755 sources/lib/plugins/captcha/lang/zh/lang.php create mode 100755 sources/lib/plugins/captcha/lang/zh/settings.php create mode 100644 sources/lib/plugins/captcha/manager.dat create mode 100755 sources/lib/plugins/captcha/plugin.info.txt create mode 100755 sources/lib/plugins/captcha/script.js create mode 100755 sources/lib/plugins/captcha/sound.png create mode 100755 sources/lib/plugins/captcha/style.css create mode 100755 sources/lib/plugins/captcha/wav.php create mode 100755 sources/lib/plugins/gallery/README create mode 100755 sources/lib/plugins/gallery/all.less create mode 100755 sources/lib/plugins/gallery/conf/default.php create mode 100755 sources/lib/plugins/gallery/conf/metadata.php create mode 100755 sources/lib/plugins/gallery/deleted.files create mode 100755 sources/lib/plugins/gallery/images/blank.gif create mode 100755 sources/lib/plugins/gallery/images/close.gif create mode 100755 sources/lib/plugins/gallery/images/expand.gif create mode 100755 sources/lib/plugins/gallery/images/loading.gif create mode 100755 sources/lib/plugins/gallery/images/next.gif create mode 100755 sources/lib/plugins/gallery/images/overlay.png create mode 100755 sources/lib/plugins/gallery/images/overlayie.png create mode 100755 sources/lib/plugins/gallery/images/prev.gif create mode 100755 sources/lib/plugins/gallery/images/shrink.gif create mode 100755 sources/lib/plugins/gallery/lang/ar/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ar/settings.php create mode 100755 sources/lib/plugins/gallery/lang/ca/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ca/settings.php create mode 100755 sources/lib/plugins/gallery/lang/cs/lang.php create mode 100755 sources/lib/plugins/gallery/lang/cs/settings.php create mode 100644 sources/lib/plugins/gallery/lang/cy/lang.php create mode 100644 sources/lib/plugins/gallery/lang/cy/settings.php create mode 100755 sources/lib/plugins/gallery/lang/da/lang.php create mode 100755 sources/lib/plugins/gallery/lang/da/settings.php create mode 100755 sources/lib/plugins/gallery/lang/de/lang.php create mode 100755 sources/lib/plugins/gallery/lang/de/settings.php create mode 100755 sources/lib/plugins/gallery/lang/en/lang.php create mode 100755 sources/lib/plugins/gallery/lang/en/settings.php create mode 100755 sources/lib/plugins/gallery/lang/eo/lang.php create mode 100755 sources/lib/plugins/gallery/lang/eo/settings.php create mode 100755 sources/lib/plugins/gallery/lang/es/lang.php create mode 100755 sources/lib/plugins/gallery/lang/es/settings.php create mode 100644 sources/lib/plugins/gallery/lang/fa/lang.php create mode 100644 sources/lib/plugins/gallery/lang/fa/settings.php create mode 100755 sources/lib/plugins/gallery/lang/fr/lang.php create mode 100755 sources/lib/plugins/gallery/lang/fr/settings.php create mode 100755 sources/lib/plugins/gallery/lang/hu/lang.php create mode 100755 sources/lib/plugins/gallery/lang/hu/settings.php create mode 100755 sources/lib/plugins/gallery/lang/it/settings.php create mode 100755 sources/lib/plugins/gallery/lang/ja/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ja/settings.php create mode 100755 sources/lib/plugins/gallery/lang/ko/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ko/settings.php create mode 100755 sources/lib/plugins/gallery/lang/nl/lang.php create mode 100755 sources/lib/plugins/gallery/lang/nl/settings.php create mode 100755 sources/lib/plugins/gallery/lang/no/lang.php create mode 100755 sources/lib/plugins/gallery/lang/no/settings.php create mode 100755 sources/lib/plugins/gallery/lang/pt-br/lang.php create mode 100755 sources/lib/plugins/gallery/lang/pt-br/settings.php create mode 100755 sources/lib/plugins/gallery/lang/ru/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ru/settings.php create mode 100755 sources/lib/plugins/gallery/lang/sk/lang.php create mode 100755 sources/lib/plugins/gallery/lang/sk/settings.php create mode 100755 sources/lib/plugins/gallery/lang/ta/lang.php create mode 100755 sources/lib/plugins/gallery/lang/ta/settings.php create mode 100755 sources/lib/plugins/gallery/lang/tr/lang.php create mode 100755 sources/lib/plugins/gallery/lang/tr/settings.php create mode 100755 sources/lib/plugins/gallery/lang/zh-tw/lang.php create mode 100755 sources/lib/plugins/gallery/lang/zh-tw/settings.php create mode 100755 sources/lib/plugins/gallery/lang/zh/lang.php create mode 100755 sources/lib/plugins/gallery/lang/zh/settings.php create mode 100644 sources/lib/plugins/gallery/manager.dat create mode 100755 sources/lib/plugins/gallery/plugin.info.txt create mode 100755 sources/lib/plugins/gallery/screen.less create mode 100755 sources/lib/plugins/gallery/script.js create mode 100755 sources/lib/plugins/gallery/swipebox/README create mode 100755 sources/lib/plugins/gallery/swipebox/css/swipebox.less create mode 100755 sources/lib/plugins/gallery/swipebox/css/swipebox.min.css create mode 100755 sources/lib/plugins/gallery/swipebox/img/icons.png create mode 100755 sources/lib/plugins/gallery/swipebox/img/icons.svg create mode 100755 sources/lib/plugins/gallery/swipebox/img/loader.gif create mode 100755 sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.js create mode 100755 sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.min.js create mode 100755 sources/lib/plugins/gallery/syntax.php create mode 100755 sources/lib/plugins/translation/README create mode 100755 sources/lib/plugins/translation/action.php create mode 100644 sources/lib/plugins/translation/admin.php create mode 100755 sources/lib/plugins/translation/conf/default.php create mode 100755 sources/lib/plugins/translation/conf/metadata.php create mode 100755 sources/lib/plugins/translation/flags/af.gif create mode 100755 sources/lib/plugins/translation/flags/ar.gif create mode 100755 sources/lib/plugins/translation/flags/da.gif create mode 100755 sources/lib/plugins/translation/flags/de.gif create mode 100755 sources/lib/plugins/translation/flags/el.gif create mode 100755 sources/lib/plugins/translation/flags/en.gif create mode 100755 sources/lib/plugins/translation/flags/es.gif create mode 100755 sources/lib/plugins/translation/flags/et.gif create mode 100755 sources/lib/plugins/translation/flags/fa.gif create mode 100755 sources/lib/plugins/translation/flags/fr.gif create mode 100755 sources/lib/plugins/translation/flags/ga.gif create mode 100755 sources/lib/plugins/translation/flags/he.gif create mode 100755 sources/lib/plugins/translation/flags/hu.gif create mode 100755 sources/lib/plugins/translation/flags/it.gif create mode 100755 sources/lib/plugins/translation/flags/ja.gif create mode 100755 sources/lib/plugins/translation/flags/ko.gif create mode 100755 sources/lib/plugins/translation/flags/more/ad.gif create mode 100755 sources/lib/plugins/translation/flags/more/ae.gif create mode 100755 sources/lib/plugins/translation/flags/more/ag.gif create mode 100755 sources/lib/plugins/translation/flags/more/ai.gif create mode 100755 sources/lib/plugins/translation/flags/more/al.gif create mode 100755 sources/lib/plugins/translation/flags/more/am.gif create mode 100755 sources/lib/plugins/translation/flags/more/an.gif create mode 100755 sources/lib/plugins/translation/flags/more/ao.gif create mode 100755 sources/lib/plugins/translation/flags/more/ar.gif create mode 100755 sources/lib/plugins/translation/flags/more/as.gif create mode 100755 sources/lib/plugins/translation/flags/more/at.gif create mode 100755 sources/lib/plugins/translation/flags/more/au.gif create mode 100755 sources/lib/plugins/translation/flags/more/aw.gif create mode 100755 sources/lib/plugins/translation/flags/more/ax.gif create mode 100755 sources/lib/plugins/translation/flags/more/az.gif create mode 100755 sources/lib/plugins/translation/flags/more/ba.gif create mode 100755 sources/lib/plugins/translation/flags/more/bb.gif create mode 100755 sources/lib/plugins/translation/flags/more/bd.gif create mode 100755 sources/lib/plugins/translation/flags/more/be.gif create mode 100755 sources/lib/plugins/translation/flags/more/bf.gif create mode 100755 sources/lib/plugins/translation/flags/more/bg.gif create mode 100755 sources/lib/plugins/translation/flags/more/bh.gif create mode 100755 sources/lib/plugins/translation/flags/more/bi.gif create mode 100755 sources/lib/plugins/translation/flags/more/bj.gif create mode 100755 sources/lib/plugins/translation/flags/more/blankflag.gif create mode 100755 sources/lib/plugins/translation/flags/more/bm.gif create mode 100755 sources/lib/plugins/translation/flags/more/bn.gif create mode 100755 sources/lib/plugins/translation/flags/more/bo.gif create mode 100755 sources/lib/plugins/translation/flags/more/bs.gif create mode 100755 sources/lib/plugins/translation/flags/more/bt.gif create mode 100755 sources/lib/plugins/translation/flags/more/bv.gif create mode 100755 sources/lib/plugins/translation/flags/more/bw.gif create mode 100755 sources/lib/plugins/translation/flags/more/by.gif create mode 100755 sources/lib/plugins/translation/flags/more/bz.gif create mode 100755 sources/lib/plugins/translation/flags/more/ca.gif create mode 100755 sources/lib/plugins/translation/flags/more/catalonia.gif create mode 100755 sources/lib/plugins/translation/flags/more/cc.gif create mode 100755 sources/lib/plugins/translation/flags/more/cd.gif create mode 100755 sources/lib/plugins/translation/flags/more/cf.gif create mode 100755 sources/lib/plugins/translation/flags/more/cg.gif create mode 100755 sources/lib/plugins/translation/flags/more/ch.gif create mode 100755 sources/lib/plugins/translation/flags/more/ci.gif create mode 100755 sources/lib/plugins/translation/flags/more/ck.gif create mode 100755 sources/lib/plugins/translation/flags/more/cl.gif create mode 100755 sources/lib/plugins/translation/flags/more/cm.gif create mode 100755 sources/lib/plugins/translation/flags/more/co.gif create mode 100755 sources/lib/plugins/translation/flags/more/cr.gif create mode 100755 sources/lib/plugins/translation/flags/more/cs.gif create mode 100755 sources/lib/plugins/translation/flags/more/cu.gif create mode 100755 sources/lib/plugins/translation/flags/more/cv.gif create mode 100755 sources/lib/plugins/translation/flags/more/cx.gif create mode 100755 sources/lib/plugins/translation/flags/more/cy.gif create mode 100755 sources/lib/plugins/translation/flags/more/cz.gif create mode 100755 sources/lib/plugins/translation/flags/more/dj.gif create mode 100755 sources/lib/plugins/translation/flags/more/dm.gif create mode 100755 sources/lib/plugins/translation/flags/more/do.gif create mode 100755 sources/lib/plugins/translation/flags/more/dz.gif create mode 100755 sources/lib/plugins/translation/flags/more/ec.gif create mode 100755 sources/lib/plugins/translation/flags/more/eg.gif create mode 100755 sources/lib/plugins/translation/flags/more/eh.gif create mode 100755 sources/lib/plugins/translation/flags/more/england.gif create mode 100755 sources/lib/plugins/translation/flags/more/er.gif create mode 100755 sources/lib/plugins/translation/flags/more/et.gif create mode 100755 sources/lib/plugins/translation/flags/more/europeanunion.gif create mode 100755 sources/lib/plugins/translation/flags/more/fam.gif create mode 100755 sources/lib/plugins/translation/flags/more/fi.gif create mode 100755 sources/lib/plugins/translation/flags/more/fj.gif create mode 100755 sources/lib/plugins/translation/flags/more/fk.gif create mode 100755 sources/lib/plugins/translation/flags/more/fm.gif create mode 100755 sources/lib/plugins/translation/flags/more/fo.gif create mode 100755 sources/lib/plugins/translation/flags/more/ga.gif create mode 100755 sources/lib/plugins/translation/flags/more/gd.gif create mode 100755 sources/lib/plugins/translation/flags/more/ge.gif create mode 100755 sources/lib/plugins/translation/flags/more/gf.gif create mode 100755 sources/lib/plugins/translation/flags/more/gh.gif create mode 100755 sources/lib/plugins/translation/flags/more/gi.gif create mode 100755 sources/lib/plugins/translation/flags/more/gl.gif create mode 100755 sources/lib/plugins/translation/flags/more/gm.gif create mode 100755 sources/lib/plugins/translation/flags/more/gn.gif create mode 100755 sources/lib/plugins/translation/flags/more/gp.gif create mode 100755 sources/lib/plugins/translation/flags/more/gq.gif create mode 100755 sources/lib/plugins/translation/flags/more/gs.gif create mode 100755 sources/lib/plugins/translation/flags/more/gt.gif create mode 100755 sources/lib/plugins/translation/flags/more/gu.gif create mode 100755 sources/lib/plugins/translation/flags/more/gw.gif create mode 100755 sources/lib/plugins/translation/flags/more/gy.gif create mode 100755 sources/lib/plugins/translation/flags/more/hk.gif create mode 100755 sources/lib/plugins/translation/flags/more/hm.gif create mode 100755 sources/lib/plugins/translation/flags/more/hn.gif create mode 100755 sources/lib/plugins/translation/flags/more/hr.gif create mode 100755 sources/lib/plugins/translation/flags/more/ht.gif create mode 100755 sources/lib/plugins/translation/flags/more/id.gif create mode 100755 sources/lib/plugins/translation/flags/more/in.gif create mode 100755 sources/lib/plugins/translation/flags/more/io.gif create mode 100755 sources/lib/plugins/translation/flags/more/iq.gif create mode 100755 sources/lib/plugins/translation/flags/more/is.gif create mode 100755 sources/lib/plugins/translation/flags/more/ja.gif create mode 100755 sources/lib/plugins/translation/flags/more/jm.gif create mode 100755 sources/lib/plugins/translation/flags/more/jo.gif create mode 100755 sources/lib/plugins/translation/flags/more/ke.gif create mode 100755 sources/lib/plugins/translation/flags/more/kg.gif create mode 100755 sources/lib/plugins/translation/flags/more/kh.gif create mode 100755 sources/lib/plugins/translation/flags/more/ki.gif create mode 100755 sources/lib/plugins/translation/flags/more/km.gif create mode 100755 sources/lib/plugins/translation/flags/more/kn.gif create mode 100755 sources/lib/plugins/translation/flags/more/ko.gif create mode 100755 sources/lib/plugins/translation/flags/more/kp.gif create mode 100755 sources/lib/plugins/translation/flags/more/kw.gif create mode 100755 sources/lib/plugins/translation/flags/more/ky.gif create mode 100755 sources/lib/plugins/translation/flags/more/kz.gif create mode 100755 sources/lib/plugins/translation/flags/more/la.gif create mode 100755 sources/lib/plugins/translation/flags/more/lb.gif create mode 100755 sources/lib/plugins/translation/flags/more/lc.gif create mode 100755 sources/lib/plugins/translation/flags/more/li.gif create mode 100755 sources/lib/plugins/translation/flags/more/lk.gif create mode 100755 sources/lib/plugins/translation/flags/more/lr.gif create mode 100755 sources/lib/plugins/translation/flags/more/ls.gif create mode 100755 sources/lib/plugins/translation/flags/more/lt.gif create mode 100755 sources/lib/plugins/translation/flags/more/lu.gif create mode 100755 sources/lib/plugins/translation/flags/more/lv.gif create mode 100755 sources/lib/plugins/translation/flags/more/ly.gif create mode 100755 sources/lib/plugins/translation/flags/more/ma.gif create mode 100755 sources/lib/plugins/translation/flags/more/mc.gif create mode 100755 sources/lib/plugins/translation/flags/more/md.gif create mode 100755 sources/lib/plugins/translation/flags/more/me.gif create mode 100755 sources/lib/plugins/translation/flags/more/mg.gif create mode 100755 sources/lib/plugins/translation/flags/more/mh.gif create mode 100755 sources/lib/plugins/translation/flags/more/mk.gif create mode 100755 sources/lib/plugins/translation/flags/more/ml.gif create mode 100755 sources/lib/plugins/translation/flags/more/mm.gif create mode 100755 sources/lib/plugins/translation/flags/more/mn.gif create mode 100755 sources/lib/plugins/translation/flags/more/mo.gif create mode 100755 sources/lib/plugins/translation/flags/more/mp.gif create mode 100755 sources/lib/plugins/translation/flags/more/mq.gif create mode 100755 sources/lib/plugins/translation/flags/more/mr.gif create mode 100755 sources/lib/plugins/translation/flags/more/ms.gif create mode 100755 sources/lib/plugins/translation/flags/more/mt.gif create mode 100755 sources/lib/plugins/translation/flags/more/mu.gif create mode 100755 sources/lib/plugins/translation/flags/more/mv.gif create mode 100755 sources/lib/plugins/translation/flags/more/mw.gif create mode 100755 sources/lib/plugins/translation/flags/more/mx.gif create mode 100755 sources/lib/plugins/translation/flags/more/my.gif create mode 100755 sources/lib/plugins/translation/flags/more/mz.gif create mode 100755 sources/lib/plugins/translation/flags/more/na.gif create mode 100755 sources/lib/plugins/translation/flags/more/nc.gif create mode 100755 sources/lib/plugins/translation/flags/more/ne.gif create mode 100755 sources/lib/plugins/translation/flags/more/nf.gif create mode 100755 sources/lib/plugins/translation/flags/more/ng.gif create mode 100755 sources/lib/plugins/translation/flags/more/ni.gif create mode 100755 sources/lib/plugins/translation/flags/more/np.gif create mode 100755 sources/lib/plugins/translation/flags/more/nr.gif create mode 100755 sources/lib/plugins/translation/flags/more/nu.gif create mode 100755 sources/lib/plugins/translation/flags/more/nz.gif create mode 100755 sources/lib/plugins/translation/flags/more/om.gif create mode 100755 sources/lib/plugins/translation/flags/more/pa.gif create mode 100755 sources/lib/plugins/translation/flags/more/pe.gif create mode 100755 sources/lib/plugins/translation/flags/more/pf.gif create mode 100755 sources/lib/plugins/translation/flags/more/pg.gif create mode 100755 sources/lib/plugins/translation/flags/more/ph.gif create mode 100755 sources/lib/plugins/translation/flags/more/pk.gif create mode 100755 sources/lib/plugins/translation/flags/more/pl.gif create mode 100755 sources/lib/plugins/translation/flags/more/pm.gif create mode 100755 sources/lib/plugins/translation/flags/more/pn.gif create mode 100755 sources/lib/plugins/translation/flags/more/pr.gif create mode 100755 sources/lib/plugins/translation/flags/more/ps.gif create mode 100755 sources/lib/plugins/translation/flags/more/pw.gif create mode 100755 sources/lib/plugins/translation/flags/more/py.gif create mode 100755 sources/lib/plugins/translation/flags/more/qa.gif create mode 100755 sources/lib/plugins/translation/flags/more/re.gif create mode 100755 sources/lib/plugins/translation/flags/more/rs.gif create mode 100755 sources/lib/plugins/translation/flags/more/rw.gif create mode 100755 sources/lib/plugins/translation/flags/more/sb.gif create mode 100755 sources/lib/plugins/translation/flags/more/sc.gif create mode 100755 sources/lib/plugins/translation/flags/more/scotland.gif create mode 100755 sources/lib/plugins/translation/flags/more/sd.gif create mode 100755 sources/lib/plugins/translation/flags/more/sg.gif create mode 100755 sources/lib/plugins/translation/flags/more/sh.gif create mode 100755 sources/lib/plugins/translation/flags/more/si.gif create mode 100755 sources/lib/plugins/translation/flags/more/sj.gif create mode 100755 sources/lib/plugins/translation/flags/more/sk.gif create mode 100755 sources/lib/plugins/translation/flags/more/sl.gif create mode 100755 sources/lib/plugins/translation/flags/more/sm.gif create mode 100755 sources/lib/plugins/translation/flags/more/sn.gif create mode 100755 sources/lib/plugins/translation/flags/more/so.gif create mode 100755 sources/lib/plugins/translation/flags/more/sr.gif create mode 100755 sources/lib/plugins/translation/flags/more/st.gif create mode 100755 sources/lib/plugins/translation/flags/more/sv.gif create mode 100755 sources/lib/plugins/translation/flags/more/sy.gif create mode 100755 sources/lib/plugins/translation/flags/more/sz.gif create mode 100755 sources/lib/plugins/translation/flags/more/tc.gif create mode 100755 sources/lib/plugins/translation/flags/more/td.gif create mode 100755 sources/lib/plugins/translation/flags/more/tf.gif create mode 100755 sources/lib/plugins/translation/flags/more/tg.gif create mode 100755 sources/lib/plugins/translation/flags/more/tj.gif create mode 100755 sources/lib/plugins/translation/flags/more/tk.gif create mode 100755 sources/lib/plugins/translation/flags/more/tl.gif create mode 100755 sources/lib/plugins/translation/flags/more/tm.gif create mode 100755 sources/lib/plugins/translation/flags/more/tn.gif create mode 100755 sources/lib/plugins/translation/flags/more/to.gif create mode 100755 sources/lib/plugins/translation/flags/more/tt.gif create mode 100755 sources/lib/plugins/translation/flags/more/tv.gif create mode 100755 sources/lib/plugins/translation/flags/more/tw.gif create mode 100755 sources/lib/plugins/translation/flags/more/tz.gif create mode 100755 sources/lib/plugins/translation/flags/more/ua.gif create mode 100755 sources/lib/plugins/translation/flags/more/ug.gif create mode 100755 sources/lib/plugins/translation/flags/more/um.gif create mode 100755 sources/lib/plugins/translation/flags/more/us.gif create mode 100755 sources/lib/plugins/translation/flags/more/uy.gif create mode 100755 sources/lib/plugins/translation/flags/more/uz.gif create mode 100755 sources/lib/plugins/translation/flags/more/va.gif create mode 100755 sources/lib/plugins/translation/flags/more/vc.gif create mode 100755 sources/lib/plugins/translation/flags/more/ve.gif create mode 100755 sources/lib/plugins/translation/flags/more/vg.gif create mode 100755 sources/lib/plugins/translation/flags/more/vi.gif create mode 100755 sources/lib/plugins/translation/flags/more/vu.gif create mode 100755 sources/lib/plugins/translation/flags/more/wales.gif create mode 100755 sources/lib/plugins/translation/flags/more/wf.gif create mode 100755 sources/lib/plugins/translation/flags/more/ws.gif create mode 100755 sources/lib/plugins/translation/flags/more/ye.gif create mode 100755 sources/lib/plugins/translation/flags/more/yt.gif create mode 100755 sources/lib/plugins/translation/flags/more/za.gif create mode 100755 sources/lib/plugins/translation/flags/more/zm.gif create mode 100755 sources/lib/plugins/translation/flags/more/zw.gif create mode 100755 sources/lib/plugins/translation/flags/nl.gif create mode 100755 sources/lib/plugins/translation/flags/no.gif create mode 100755 sources/lib/plugins/translation/flags/pt-br.gif create mode 100755 sources/lib/plugins/translation/flags/pt.gif create mode 100755 sources/lib/plugins/translation/flags/ro.gif create mode 100755 sources/lib/plugins/translation/flags/ru.gif create mode 100755 sources/lib/plugins/translation/flags/sv.gif create mode 100755 sources/lib/plugins/translation/flags/th.gif create mode 100755 sources/lib/plugins/translation/flags/tr.gif create mode 100755 sources/lib/plugins/translation/flags/vi.gif create mode 100755 sources/lib/plugins/translation/flags/zh.gif create mode 100755 sources/lib/plugins/translation/helper.php create mode 100755 sources/lib/plugins/translation/lang/bn/lang.php create mode 100755 sources/lib/plugins/translation/lang/bn/settings.php create mode 100755 sources/lib/plugins/translation/lang/bn/totranslate.txt create mode 100644 sources/lib/plugins/translation/lang/ca/lang.php create mode 100644 sources/lib/plugins/translation/lang/ca/settings.php create mode 100644 sources/lib/plugins/translation/lang/ca/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/cs/lang.php create mode 100755 sources/lib/plugins/translation/lang/cs/settings.php create mode 100755 sources/lib/plugins/translation/lang/cs/totranslate.txt create mode 100644 sources/lib/plugins/translation/lang/cy/lang.php create mode 100644 sources/lib/plugins/translation/lang/cy/settings.php create mode 100644 sources/lib/plugins/translation/lang/cy/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/da/lang.php create mode 100755 sources/lib/plugins/translation/lang/da/settings.php create mode 100755 sources/lib/plugins/translation/lang/da/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/de-informal/lang.php create mode 100755 sources/lib/plugins/translation/lang/de-informal/settings.php create mode 100755 sources/lib/plugins/translation/lang/de/lang.php create mode 100755 sources/lib/plugins/translation/lang/de/settings.php create mode 100755 sources/lib/plugins/translation/lang/de/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/en/lang.php create mode 100755 sources/lib/plugins/translation/lang/en/settings.php create mode 100755 sources/lib/plugins/translation/lang/en/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/eo/lang.php create mode 100755 sources/lib/plugins/translation/lang/eo/settings.php create mode 100755 sources/lib/plugins/translation/lang/eo/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/es/lang.php create mode 100755 sources/lib/plugins/translation/lang/es/settings.php create mode 100755 sources/lib/plugins/translation/lang/es/totranslate.txt create mode 100644 sources/lib/plugins/translation/lang/fa/lang.php create mode 100644 sources/lib/plugins/translation/lang/fa/settings.php create mode 100644 sources/lib/plugins/translation/lang/fa/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/fr/lang.php create mode 100755 sources/lib/plugins/translation/lang/fr/settings.php create mode 100755 sources/lib/plugins/translation/lang/fr/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/hr/lang.php create mode 100755 sources/lib/plugins/translation/lang/hr/settings.php create mode 100755 sources/lib/plugins/translation/lang/hr/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/hu/lang.php create mode 100755 sources/lib/plugins/translation/lang/hu/settings.php create mode 100755 sources/lib/plugins/translation/lang/hu/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/it/lang.php create mode 100755 sources/lib/plugins/translation/lang/it/settings.php create mode 100644 sources/lib/plugins/translation/lang/it/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/ja/lang.php create mode 100755 sources/lib/plugins/translation/lang/ja/settings.php create mode 100755 sources/lib/plugins/translation/lang/ja/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/ko/lang.php create mode 100755 sources/lib/plugins/translation/lang/ko/settings.php create mode 100755 sources/lib/plugins/translation/lang/ko/totranslate.txt create mode 100644 sources/lib/plugins/translation/lang/langnames.txt create mode 100755 sources/lib/plugins/translation/lang/lv/lang.php create mode 100755 sources/lib/plugins/translation/lang/lv/settings.php create mode 100755 sources/lib/plugins/translation/lang/lv/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/nl/lang.php create mode 100755 sources/lib/plugins/translation/lang/nl/settings.php create mode 100755 sources/lib/plugins/translation/lang/nl/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/pt-br/lang.php create mode 100755 sources/lib/plugins/translation/lang/pt-br/settings.php create mode 100644 sources/lib/plugins/translation/lang/pt-br/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/pt/lang.php create mode 100755 sources/lib/plugins/translation/lang/pt/settings.php create mode 100755 sources/lib/plugins/translation/lang/ru/lang.php create mode 100755 sources/lib/plugins/translation/lang/ru/settings.php create mode 100755 sources/lib/plugins/translation/lang/ru/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/sl/lang.php create mode 100755 sources/lib/plugins/translation/lang/sl/settings.php create mode 100755 sources/lib/plugins/translation/lang/tr/lang.php create mode 100755 sources/lib/plugins/translation/lang/tr/settings.php create mode 100755 sources/lib/plugins/translation/lang/tr/totranslate.txt create mode 100755 sources/lib/plugins/translation/lang/uk/lang.php create mode 100755 sources/lib/plugins/translation/lang/uk/settings.php create mode 100755 sources/lib/plugins/translation/lang/zh-tw/lang.php create mode 100755 sources/lib/plugins/translation/lang/zh-tw/settings.php create mode 100755 sources/lib/plugins/translation/lang/zh/lang.php create mode 100755 sources/lib/plugins/translation/lang/zh/settings.php create mode 100755 sources/lib/plugins/translation/lang/zh/totranslate.txt create mode 100644 sources/lib/plugins/translation/manager.dat create mode 100755 sources/lib/plugins/translation/plugin.info.txt create mode 100755 sources/lib/plugins/translation/print.css create mode 100755 sources/lib/plugins/translation/script.js create mode 100755 sources/lib/plugins/translation/style.css create mode 100755 sources/lib/plugins/translation/syntax/notrans.php create mode 100755 sources/lib/plugins/translation/syntax/trans.php create mode 100755 sources/lib/plugins/upgrade/README create mode 100755 sources/lib/plugins/upgrade/VerboseTarLib.class.php create mode 100755 sources/lib/plugins/upgrade/admin.php create mode 100755 sources/lib/plugins/upgrade/lang/cs/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/cs/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/cs/step0.txt create mode 100644 sources/lib/plugins/upgrade/lang/cy/lang.php create mode 100644 sources/lib/plugins/upgrade/lang/cy/safemode.txt create mode 100644 sources/lib/plugins/upgrade/lang/cy/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/da/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/da/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/da/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/de-informal/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/de-informal/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/de/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/de/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/de/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/en/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/en/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/en/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/eo/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/eo/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/eo/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/es/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/es/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/es/step0.txt create mode 100644 sources/lib/plugins/upgrade/lang/fa/lang.php create mode 100644 sources/lib/plugins/upgrade/lang/fa/safemode.txt create mode 100644 sources/lib/plugins/upgrade/lang/fa/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/fr/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/fr/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/fr/step0.txt create mode 100644 sources/lib/plugins/upgrade/lang/hr/lang.php create mode 100644 sources/lib/plugins/upgrade/lang/hr/safemode.txt create mode 100644 sources/lib/plugins/upgrade/lang/hr/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/hu/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/hu/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/hu/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/is/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/is/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/is/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/it/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/it/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/it/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/ja/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/ja/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/ja/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/ko/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/ko/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/ko/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/nl/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/nl/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/nl/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/no/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/no/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/no/step0.txt create mode 100644 sources/lib/plugins/upgrade/lang/pt-br/lang.php create mode 100644 sources/lib/plugins/upgrade/lang/pt/lang.php create mode 100644 sources/lib/plugins/upgrade/lang/pt/safemode.txt create mode 100644 sources/lib/plugins/upgrade/lang/pt/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/ru/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/ru/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/ru/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/tr/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/tr/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/tr/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/zh-tw/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/zh-tw/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/zh-tw/step0.txt create mode 100755 sources/lib/plugins/upgrade/lang/zh/lang.php create mode 100755 sources/lib/plugins/upgrade/lang/zh/safemode.txt create mode 100755 sources/lib/plugins/upgrade/lang/zh/step0.txt create mode 100644 sources/lib/plugins/upgrade/manager.dat create mode 100755 sources/lib/plugins/upgrade/plugin.info.txt create mode 100755 sources/lib/plugins/upgrade/style.css create mode 100755 sources/lib/plugins/vshare/README create mode 100755 sources/lib/plugins/vshare/all.css create mode 100755 sources/lib/plugins/vshare/button.png create mode 100755 sources/lib/plugins/vshare/lang/en/lang.php create mode 100755 sources/lib/plugins/vshare/lang/fr/lang.php create mode 100755 sources/lib/plugins/vshare/lang/ja/lang.php create mode 100755 sources/lib/plugins/vshare/lang/ko/lang.php create mode 100755 sources/lib/plugins/vshare/lang/nl/lang.php create mode 100644 sources/lib/plugins/vshare/manager.dat create mode 100755 sources/lib/plugins/vshare/pdf.css create mode 100755 sources/lib/plugins/vshare/plugin.info.txt create mode 100755 sources/lib/plugins/vshare/redir.php create mode 100755 sources/lib/plugins/vshare/script.js create mode 100755 sources/lib/plugins/vshare/sites.conf create mode 100755 sources/lib/plugins/vshare/sites.js create mode 100755 sources/lib/plugins/vshare/syntax.php create mode 100755 sources/lib/plugins/vshare/video.png create mode 100755 sources/lib/plugins/wrap/.travis.yml create mode 100755 sources/lib/plugins/wrap/COPYING create mode 100755 sources/lib/plugins/wrap/README create mode 100644 sources/lib/plugins/wrap/_test/wrap_syntax.test.php create mode 100755 sources/lib/plugins/wrap/action.php create mode 100755 sources/lib/plugins/wrap/all.css create mode 100755 sources/lib/plugins/wrap/conf/default.php create mode 100755 sources/lib/plugins/wrap/conf/lang2dir.conf create mode 100755 sources/lib/plugins/wrap/conf/metadata.php create mode 100755 sources/lib/plugins/wrap/example.txt create mode 100755 sources/lib/plugins/wrap/helper.php create mode 100755 sources/lib/plugins/wrap/images/README create mode 100755 sources/lib/plugins/wrap/images/note/16/alert.png create mode 100755 sources/lib/plugins/wrap/images/note/16/download.png create mode 100755 sources/lib/plugins/wrap/images/note/16/help.png create mode 100755 sources/lib/plugins/wrap/images/note/16/important.png create mode 100755 sources/lib/plugins/wrap/images/note/16/info.png create mode 100755 sources/lib/plugins/wrap/images/note/16/tip.png create mode 100755 sources/lib/plugins/wrap/images/note/16/todo.png create mode 100755 sources/lib/plugins/wrap/images/note/48/alert.png create mode 100755 sources/lib/plugins/wrap/images/note/48/download.png create mode 100755 sources/lib/plugins/wrap/images/note/48/help.png create mode 100755 sources/lib/plugins/wrap/images/note/48/important.png create mode 100755 sources/lib/plugins/wrap/images/note/48/info.png create mode 100755 sources/lib/plugins/wrap/images/note/48/tip.png create mode 100755 sources/lib/plugins/wrap/images/note/48/todo.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/box.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/clear.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/column.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/em.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/hi.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/lo.png create mode 100755 sources/lib/plugins/wrap/images/toolbar/picker.png create mode 100755 sources/lib/plugins/wrap/lang/ar/lang.php create mode 100755 sources/lib/plugins/wrap/lang/ar/settings.php create mode 100755 sources/lib/plugins/wrap/lang/bn/lang.php create mode 100755 sources/lib/plugins/wrap/lang/bn/settings.php create mode 100755 sources/lib/plugins/wrap/lang/cs/lang.php create mode 100755 sources/lib/plugins/wrap/lang/cs/settings.php create mode 100755 sources/lib/plugins/wrap/lang/da/lang.php create mode 100755 sources/lib/plugins/wrap/lang/da/settings.php create mode 100755 sources/lib/plugins/wrap/lang/de-informal/lang.php create mode 100755 sources/lib/plugins/wrap/lang/de-informal/settings.php create mode 100755 sources/lib/plugins/wrap/lang/de/lang.php create mode 100755 sources/lib/plugins/wrap/lang/de/settings.php create mode 100755 sources/lib/plugins/wrap/lang/en/lang.php create mode 100755 sources/lib/plugins/wrap/lang/en/settings.php create mode 100755 sources/lib/plugins/wrap/lang/eo/lang.php create mode 100755 sources/lib/plugins/wrap/lang/eo/settings.php create mode 100755 sources/lib/plugins/wrap/lang/es/lang.php create mode 100755 sources/lib/plugins/wrap/lang/es/settings.php create mode 100755 sources/lib/plugins/wrap/lang/fa/lang.php create mode 100755 sources/lib/plugins/wrap/lang/fr/lang.php create mode 100755 sources/lib/plugins/wrap/lang/fr/settings.php create mode 100755 sources/lib/plugins/wrap/lang/hr/lang.php create mode 100755 sources/lib/plugins/wrap/lang/hr/settings.php create mode 100755 sources/lib/plugins/wrap/lang/hu/lang.php create mode 100755 sources/lib/plugins/wrap/lang/hu/settings.php create mode 100755 sources/lib/plugins/wrap/lang/it/lang.php create mode 100755 sources/lib/plugins/wrap/lang/it/settings.php create mode 100755 sources/lib/plugins/wrap/lang/ja/lang.php create mode 100755 sources/lib/plugins/wrap/lang/ja/settings.php create mode 100755 sources/lib/plugins/wrap/lang/ko/lang.php create mode 100755 sources/lib/plugins/wrap/lang/ko/settings.php create mode 100755 sources/lib/plugins/wrap/lang/nl/lang.php create mode 100755 sources/lib/plugins/wrap/lang/nl/settings.php create mode 100755 sources/lib/plugins/wrap/lang/no/lang.php create mode 100755 sources/lib/plugins/wrap/lang/no/settings.php create mode 100755 sources/lib/plugins/wrap/lang/pt-br/lang.php create mode 100755 sources/lib/plugins/wrap/lang/pt-br/settings.php create mode 100755 sources/lib/plugins/wrap/lang/ru/lang.php create mode 100755 sources/lib/plugins/wrap/lang/ru/settings.php create mode 100755 sources/lib/plugins/wrap/lang/sk/lang.php create mode 100755 sources/lib/plugins/wrap/lang/sk/settings.php create mode 100755 sources/lib/plugins/wrap/lang/tr/lang.php create mode 100755 sources/lib/plugins/wrap/lang/tr/settings.php create mode 100755 sources/lib/plugins/wrap/lang/zh-tw/lang.php create mode 100755 sources/lib/plugins/wrap/lang/zh-tw/settings.php create mode 100755 sources/lib/plugins/wrap/lang/zh/lang.php create mode 100755 sources/lib/plugins/wrap/lang/zh/settings.php create mode 100644 sources/lib/plugins/wrap/manager.dat create mode 100755 sources/lib/plugins/wrap/plugin.info.txt create mode 100755 sources/lib/plugins/wrap/print.css create mode 100755 sources/lib/plugins/wrap/style.css create mode 100755 sources/lib/plugins/wrap/syntax/closesection.php create mode 100755 sources/lib/plugins/wrap/syntax/div.php create mode 100755 sources/lib/plugins/wrap/syntax/divblock.php create mode 100755 sources/lib/plugins/wrap/syntax/divwrap.php create mode 100755 sources/lib/plugins/wrap/syntax/span.php create mode 100755 sources/lib/plugins/wrap/syntax/spaninline.php create mode 100755 sources/lib/plugins/wrap/syntax/spanwrap.php diff --git a/sources/lib/plugins/captcha/.travis.yml b/sources/lib/plugins/captcha/.travis.yml new file mode 100755 index 0000000..321f554 --- /dev/null +++ b/sources/lib/plugins/captcha/.travis.yml @@ -0,0 +1,13 @@ +language: php +php: + - "7.0" + - "5.6" + - "5.5" + - "5.4" + - "5.3" +env: + - DOKUWIKI=master + - DOKUWIKI=stable +before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh +install: sh travis.sh +script: cd _test && phpunit --stderr --group plugin_captcha diff --git a/sources/lib/plugins/captcha/README b/sources/lib/plugins/captcha/README new file mode 100755 index 0000000..237f135 --- /dev/null +++ b/sources/lib/plugins/captcha/README @@ -0,0 +1,25 @@ +captcha Plugin for DokuWiki + +All documentation for this plugin can be found at +http://www.dokuwiki.org/plugin:captcha + +If you install this plugin manually, make sure it is installed in +lib/plugins/captcha/ - if the folder is called different it +will not work! + +Please refer to http://www.dokuwiki.org/plugins for additional info +on how to install plugins in DokuWiki. + +---- +Copyright (C) Andreas Gohr + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See the COPYING file in your DokuWiki folder for details diff --git a/sources/lib/plugins/captcha/_test/helper.test.php b/sources/lib/plugins/captcha/_test/helper.test.php new file mode 100644 index 0000000..b3e8d47 --- /dev/null +++ b/sources/lib/plugins/captcha/_test/helper.test.php @@ -0,0 +1,84 @@ +field_in; + } + public function get_field_sec() { + return $this->field_sec; + } + public function get_field_hp() { + return $this->field_hp; + } +} + +/** + * @group plugin_captcha + * @group plugins + */ +class helper_plugin_captcha_test extends DokuWikiTest { + + protected $pluginsEnabled = array('captcha'); + + public function testConfig() { + global $conf; + $conf['plugin']['captcha']['lettercount'] = 20; + + $helper = new helper_plugin_captcha_public(); + + // generateCAPTCHA generates a maximum of 16 chars + $code = $helper->_generateCAPTCHA("fixed", 0); + $this->assertEquals(16, strlen($code)); + } + + public function testDecrypt() { + + $helper = new helper_plugin_captcha_public(); + + $rand = "12345"; + $secret = $helper->encrypt($rand); + $this->assertNotSame(false, $secret); + $this->assertSame($rand, $helper->decrypt($secret)); + + $this->assertFalse($helper->decrypt('')); + $this->assertFalse($helper->decrypt('X')); + } + + public function testCheck() { + + global $INPUT, $ID; + + $helper = new helper_plugin_captcha_public(); + + $INPUT->set($helper->get_field_hp(), ''); + $INPUT->set($helper->get_field_in(), 'X'); + $INPUT->set($helper->get_field_sec(), ''); + + $this->assertFalse($helper->check(false)); + $INPUT->set($helper->get_field_sec(), 'X'); + $this->assertFalse($helper->check(false)); + + $rand = 0; + $code = $helper->_generateCAPTCHA($helper->_fixedIdent(), $rand); + $INPUT->set($helper->get_field_in(), $code); + $this->assertFalse($helper->check(false)); + $INPUT->set($helper->get_field_sec(), $helper->encrypt($rand)); + $this->assertTrue($helper->check(false)); + $ID = 'test:fail'; + $this->assertFalse($helper->check(false)); + } + + public function testGenerate() { + + $helper = new helper_plugin_captcha_public(); + + $rand = 0; + $code = $helper->_generateCAPTCHA($helper->_fixedIdent(), $rand); + $newcode = $helper->_generateCAPTCHA($helper->_fixedIdent().'X', $rand); + $this->assertNotEquals($newcode, $code); + $newcode = $helper->_generateCAPTCHA($helper->_fixedIdent(), $rand+0.1); + $this->assertNotEquals($newcode, $code); + } + +} diff --git a/sources/lib/plugins/captcha/action.php b/sources/lib/plugins/captcha/action.php new file mode 100755 index 0000000..6fdf2f2 --- /dev/null +++ b/sources/lib/plugins/captcha/action.php @@ -0,0 +1,199 @@ + + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); + +class action_plugin_captcha extends DokuWiki_Action_Plugin { + + /** + * register the eventhandlers + */ + public function register(Doku_Event_Handler $controller) { + // check CAPTCHA success + $controller->register_hook( + 'ACTION_ACT_PREPROCESS', + 'BEFORE', + $this, + 'handle_captcha_input', + array() + ); + + // inject in edit form + $controller->register_hook( + 'HTML_EDITFORM_OUTPUT', + 'BEFORE', + $this, + 'handle_form_output', + array() + ); + + // inject in user registration + $controller->register_hook( + 'HTML_REGISTERFORM_OUTPUT', + 'BEFORE', + $this, + 'handle_form_output', + array() + ); + + // inject in password reset + $controller->register_hook( + 'HTML_RESENDPWDFORM_OUTPUT', + 'BEFORE', + $this, + 'handle_form_output', + array() + ); + + if($this->getConf('loginprotect')) { + // inject in login form + $controller->register_hook( + 'HTML_LOGINFORM_OUTPUT', + 'BEFORE', + $this, + 'handle_form_output', + array() + ); + // check on login + $controller->register_hook( + 'AUTH_LOGIN_CHECK', + 'BEFORE', + $this, + 'handle_login', + array() + ); + } + } + + /** + * Check if the current mode should be handled by CAPTCHA + * + * Note: checking needs to be done when a form has been submitted, not when the form + * is shown for the first time. Except for the editing process this is not determined + * by $act alone but needs to inspect other input variables. + * + * @param string $act cleaned action mode + * @return bool + */ + protected function needs_checking($act) { + global $INPUT; + + switch($act) { + case 'save': + return true; + case 'register': + case 'resendpwd': + return $INPUT->bool('save'); + case 'login': + // we do not handle this here, but in handle_login() + default: + return false; + } + } + + /** + * Aborts the given mode + * + * Aborting depends on the mode. It might unset certain input parameters or simply switch + * the mode to something else (giving as return which needs to be passed back to the + * ACTION_ACT_PREPROCESS event) + * + * @param string $act cleaned action mode + * @return string the new mode to use + */ + protected function abort_action($act) { + global $INPUT; + + switch($act) { + case 'save': + return 'preview'; + case 'register': + case 'resendpwd': + $INPUT->post->set('save', false); + return $act; + case 'login': + // we do not handle this here, but in handle_login() + default: + return $act; + } + } + + /** + * Handles CAPTCHA check in login + * + * Logins happen very early in the DokuWiki lifecycle, so we have to intercept them + * in their own event. + * + * @param Doku_Event $event + * @param $param + */ + public function handle_login(Doku_Event $event, $param) { + global $INPUT; + if(!$this->getConf('loginprotect')) return; // no protection wanted + if(!$INPUT->bool('u')) return; // this login was not triggered by a form + + // we need to have $ID set for the captcha check + global $ID; + $ID = getID(); + + /** @var helper_plugin_captcha $helper */ + $helper = plugin_load('helper', 'captcha'); + if(!$helper->check()) { + $event->data['silent'] = true; // we have our own message + $event->result = false; // login fail + $event->preventDefault(); + $event->stopPropagation(); + } + } + + /** + * Intercept all actions and check for CAPTCHA first. + */ + public function handle_captcha_input(Doku_Event $event, $param) { + $act = act_clean($event->data); + if(!$this->needs_checking($act)) return; + + // do nothing if logged in user and no CAPTCHA required + if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) { + return; + } + + // check captcha + /** @var helper_plugin_captcha $helper */ + $helper = plugin_load('helper', 'captcha'); + if(!$helper->check()) { + $event->data = $this->abort_action($act); + } + } + + /** + * Inject the CAPTCHA in a DokuForm + */ + public function handle_form_output(Doku_Event $event, $param) { + // get position of submit button + $pos = $event->data->findElementByAttribute('type', 'submit'); + if(!$pos) return; // no button -> source view mode + + // do nothing if logged in user and no CAPTCHA required + if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) { + return; + } + + // get the CAPTCHA + /** @var helper_plugin_captcha $helper */ + $helper = plugin_load('helper', 'captcha'); + $out = $helper->getHTML(); + + // new wiki - insert after the submit button + $event->data->insertElement($pos + 1, $out); + } + +} + diff --git a/sources/lib/plugins/captcha/conf/default.php b/sources/lib/plugins/captcha/conf/default.php new file mode 100755 index 0000000..a46580b --- /dev/null +++ b/sources/lib/plugins/captcha/conf/default.php @@ -0,0 +1,15 @@ + + */ + +$conf['mode'] = 'js'; +$conf['forusers'] = 0; +$conf['loginprotect']= 0; +$conf['lettercount'] = 5; +$conf['width'] = 115; +$conf['height'] = 22; +$conf['question'] = 'What\'s the answer to life, the universe and everything?'; +$conf['answer'] = '42'; diff --git a/sources/lib/plugins/captcha/conf/metadata.php b/sources/lib/plugins/captcha/conf/metadata.php new file mode 100755 index 0000000..84ddfaf --- /dev/null +++ b/sources/lib/plugins/captcha/conf/metadata.php @@ -0,0 +1,15 @@ + + */ + +$meta['mode'] = array('multichoice', '_choices' => array('js', 'text', 'math', 'question', 'image', 'audio', 'figlet')); +$meta['forusers'] = array('onoff'); +$meta['loginprotect']= array('onoff'); +$meta['lettercount'] = array('numeric', '_min' => 3, '_max' => 16); +$meta['width'] = array('numeric', '_pattern' => '/[0-9]+/'); +$meta['height'] = array('numeric', '_pattern' => '/[0-9]+/'); +$meta['question'] = array('string'); +$meta['answer'] = array('string'); diff --git a/sources/lib/plugins/captcha/figlet.flf b/sources/lib/plugins/captcha/figlet.flf new file mode 100755 index 0000000..24284b8 --- /dev/null +++ b/sources/lib/plugins/captcha/figlet.flf @@ -0,0 +1,1097 @@ +flf2a$ 5 4 14 15 10 0 22415 96 +SmSlant by Glenn Chappell 6/93 - based on Small & Slant +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $@ + $ @ + $ @ + $ @ +$ @@ + __@ + / /@ + /_/ @ +(_) @ + @@ + _ _ @ +( | )@ +|/|/ @ +$ @ + @@ + ____ @ + __/ / /_@ + /_ . __/@ +/_ __/ @ + /_/_/ @@ + @ + _//@ + (_-<@ +/ __/@ +// @@ + _ __@ +(_)_/_/@ + _/_/_ @ +/_/ (_)@ + @@ + ____ @ + / __/___@ + > _/_ _/@ +|_____/ @ + @@ + _ @ +( )@ +|/ @ +$ @ + @@ + __@ + _/_/@ + / / @ +/ / @ +|_| @@ + _ @ + | |@ + / /@ + _/_/ @ +/_/ @@ + @ + _/|@ +> _<@ +|/ @ + @@ + __ @ + __/ /_@ +/_ __/@ + /_/ @ + @@ + @ + @ + _ @ +( )@ +|/ @@ + @ + ____@ +/___/@ + $ @ + @@ + @ + @ + _ @ +(_)@ + @@ + __@ + _/_/@ + _/_/ @ +/_/ @ + @@ + ___ @ + / _ \@ +/ // /@ +\___/ @ + @@ + ___@ + < /@ + / / @ +/_/ @ + @@ + ___ @ + |_ |@ + / __/ @ +/____/ @ + @@ + ____@ + |_ /@ + _/_ < @ +/____/ @ + @@ + ____@ + / / /@ +/_ _/@ + /_/ @ + @@ + ____@ + / __/@ + /__ \ @ +/____/ @ + @@ + ____@ + / __/@ +/ _ \ @ +\___/ @ + @@ + ____@ +/_ /@ + / / @ +/_/ @ + @@ + ___ @ + ( _ )@ +/ _ |@ +\___/ @ + @@ + ___ @ + / _ \@ + \_, /@ +/___/ @ + @@ + _ @ + (_)@ + _ @ +(_) @ + @@ + _ @ + (_)@ + _ @ +( ) @ +|/ @@ + __@ + / /@ +< < @ + \_\@ + @@ + @ + ____@ + /___/@ +/___/ @ + @@ +__ @ +\ \ @ + > >@ +/_/ @ + @@ + ___ @ +/__ \@ + /__/@ +(_) @ + @@ + _____ @ + / ___ \@ +/ / _ `/@ +\ \_,_/ @ + \___/ @@ + ___ @ + / _ |@ + / __ |@ +/_/ |_|@ + @@ + ___ @ + / _ )@ + / _ |@ +/____/ @ + @@ + _____@ + / ___/@ +/ /__ @ +\___/ @ + @@ + ___ @ + / _ \@ + / // /@ +/____/ @ + @@ + ____@ + / __/@ + / _/ @ +/___/ @ + @@ + ____@ + / __/@ + / _/ @ +/_/ @ + @@ + _____@ + / ___/@ +/ (_ / @ +\___/ @ + @@ + __ __@ + / // /@ + / _ / @ +/_//_/ @ + @@ + ____@ + / _/@ + _/ / @ +/___/ @ + @@ + __@ + __ / /@ +/ // / @ +\___/ @ + @@ + __ __@ + / //_/@ + / ,< @ +/_/|_| @ + @@ + __ @ + / / @ + / /__@ +/____/@ + @@ + __ ___@ + / |/ /@ + / /|_/ / @ +/_/ /_/ @ + @@ + _ __@ + / |/ /@ + / / @ +/_/|_/ @ + @@ + ____ @ + / __ \@ +/ /_/ /@ +\____/ @ + @@ + ___ @ + / _ \@ + / ___/@ +/_/ @ + @@ + ____ @ + / __ \@ +/ /_/ /@ +\___\_\@ + @@ + ___ @ + / _ \@ + / , _/@ +/_/|_| @ + @@ + ____@ + / __/@ + _\ \ @ +/___/ @ + @@ + ______@ +/_ __/@ + / / @ +/_/ @ + @@ + __ __@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ + _ __@ + | | / /@ + | |/ / @ + |___/ @ + @@ + _ __@ + | | /| / /@ + | |/ |/ / @ + |__/|__/ @ + @@ + _ __@ + | |/_/@ + _> < @ +/_/|_| @ + @@ + __ __@ + \ \/ /@ + \ / @ + /_/ @ + @@ + ____@ + /_ /@ + / /_@ + /___/@ + @@ + ___@ + / _/@ + / / @ + / / @ +/__/ @@ +__ @ +\ \ @ + \ \ @ + \_\@ + @@ + ___@ + / /@ + / / @ + _/ / @ +/__/ @@ + //|@ +|/||@ + $ @ +$ @ + @@ + @ + @ + @ + ____@ +/___/@@ + _ @ +( )@ + V @ +$ @ + @@ + @ + ___ _@ +/ _ `/@ +\_,_/ @ + @@ + __ @ + / / @ + / _ \@ +/_.__/@ + @@ + @ + ____@ +/ __/@ +\__/ @ + @@ + __@ + ___/ /@ +/ _ / @ +\_,_/ @ + @@ + @ + ___ @ +/ -_)@ +\__/ @ + @@ + ___@ + / _/@ + / _/ @ +/_/ @ + @@ + @ + ___ _@ + / _ `/@ + \_, / @ +/___/ @@ + __ @ + / / @ + / _ \@ +/_//_/@ + @@ + _ @ + (_)@ + / / @ +/_/ @ + @@ + _ @ + (_)@ + / / @ + __/ / @ +|___/ @@ + __ @ + / /__@ + / '_/@ +/_/\_\ @ + @@ + __@ + / /@ + / / @ +/_/ @ + @@ + @ + __ _ @ + / ' \@ +/_/_/_/@ + @@ + @ + ___ @ + / _ \@ +/_//_/@ + @@ + @ + ___ @ +/ _ \@ +\___/@ + @@ + @ + ___ @ + / _ \@ + / .__/@ +/_/ @@ + @ + ___ _@ +/ _ `/@ +\_, / @ + /_/ @@ + @ + ____@ + / __/@ +/_/ @ + @@ + @ + ___@ + (_-<@ +/___/@ + @@ + __ @ + / /_@ +/ __/@ +\__/ @ + @@ + @ + __ __@ +/ // /@ +\_,_/ @ + @@ + @ + _ __@ +| |/ /@ +|___/ @ + @@ + @ + _ __@ +| |/|/ /@ +|__,__/ @ + @@ + @ + __ __@ + \ \ /@ +/_\_\ @ + @@ + @ + __ __@ + / // /@ + \_, / @ +/___/ @@ + @ + ___@ +/_ /@ +/__/@ + @@ + __@ + _/_/@ +_/ / @ +/ / @ +\_\ @@ + __@ + / /@ + / / @ + / / @ +/_/ @@ + __ @ + \ \ @ + / /_@ + _/_/ @ +/_/ @@ + /\//@ +//\/ @ + $ @ +$ @ + @@ + _ _ @ + (_)(_)@ + / - | @ +/_/|_| @ + @@ + _ _ @ + (_)_(_)@ +/ __ \ @ +\____/ @ + @@ + _ _ @ + (_) (_)@ +/ /_/ / @ +\____/ @ + @@ + _ _ @ + (_)(_)@ +/ _ `/ @ +\_,_/ @ + @@ + _ _ @ + (_)(_)@ +/ _ \ @ +\___/ @ + @@ + _ _ @ + (_)(_)@ +/ // / @ +\_,_/ @ + @@ + ____ @ + / _ )@ + / /< < @ + / //__/ @ +/_/ @@ +160 NO-BREAK SPACE + $@ + $ @ + $ @ + $ @ +$ @@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + / / @ +/_/ @ + @@ +162 CENT SIGN + @ + __//@ +/ __/@ +\ _/ @ +// @@ +163 POUND SIGN + __ @ + __/__|@ + /_ _/_ @ +(_,___/ @ + @@ +164 CURRENCY SIGN + /|_/|@ + | . / @ + /_ | @ +|/ |/ @ + @@ +165 YEN SIGN + ____@ + _| / /@ + /_ __/@ +/_ __/ @ + /_/ @@ +166 BROKEN BAR + __@ + / /@ + /_/ @ + / / @ +/_/ @@ +167 SECTION SIGN + __ @ + _/ _)@ + / | | @ + | |_/ @ +(__/ @@ +168 DIAERESIS + _ _ @ +(_) (_)@ + $ $ @ +$ $ @ + @@ +169 COPYRIGHT SIGN + ____ @ + / ___\ @ + / / _/ |@ +| |__/ / @ + \____/ @@ +170 FEMININE ORDINAL INDICATOR + ___ _@ + / _ `/@ + _\_,_/ @ +/____/ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ +< < < @ + \_\_\@ + @@ +172 NOT SIGN + @ + ____@ +/_ /@ + /_/ @ + @@ +173 SOFT HYPHEN + @ + ___@ +/__/@ + $ @ + @@ +174 REGISTERED SIGN + ____ @ + / __ \ @ + / / -) |@ +| //\\ / @ + \____/ @@ +175 MACRON + ____@ +/___/@ + $ @ +$ @ + @@ +176 DEGREE SIGN + __ @ + /. |@ +|__/ @ + $ @ + @@ +177 PLUS-MINUS SIGN + __ @ + __/ /_@ + /_ __/@ + __/_/_ @ +/_____/ @@ +178 SUPERSCRIPT TWO + __ @ + |_ )@ +/__| @ + $ @ + @@ +179 SUPERSCRIPT THREE + ___@ + |_ /@ +/__) @ + $ @ + @@ +180 ACUTE ACCENT + __@ +/_/@ + $ @ +$ @ + @@ +181 MICRO SIGN + @ + __ __@ + / // /@ + / .,_/ @ +/_/ @@ +182 PILCROW SIGN + _____@ + / /@ +|_ / / @ +/_/_/ @ + @@ +183 MIDDLE DOT + @ + _ @ +(_)@ +$ @ + @@ +184 CEDILLA + @ + @ + @ + _ @ +/_)@@ +185 SUPERSCRIPT ONE + __@ + < /@ +/_/ @ +$ @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \@ + _\___/@ +/____/ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +____ @ +\ \ \ @ + > > >@ +/_/_/ @ + @@ +188 VULGAR FRACTION ONE QUARTER + __ __ @ + < /_/_/___@ +/_//_//_' /@ + /_/ /_/ @ + @@ +189 VULGAR FRACTION ONE HALF + __ __ @ + < /_/_/_ @ +/_//_/|_ )@ + /_/ /__| @ + @@ +190 VULGAR FRACTION THREE QUARTERS + ___ __ @ + |_ /_/_/___@ +/__)/_//_' /@ + /_/ /_/ @ + @@ +191 INVERTED QUESTION MARK + _ @ + _(_)@ +/ _/_@ +\___/@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + _\_\@ + / - |@ +/_/|_|@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __@ + _/_/@ + / - |@ +/_/|_|@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + //|@ + _|/||@ + / - | @ +/_/|_| @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\//@ + _//\/ @ + / - | @ +/_/|_| @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ + / - | @ +/_/|_| @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + (())@ + / _ |@ + / __ |@ +/_/ |_|@ + @@ +198 LATIN CAPITAL LETTER AE + _______@ + / _ __/@ + / _ _/ @ +/_//___/ @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + _____@ + / ___/@ +/ /__ @ +\___/ @ +/_) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + \_\@ + / -<@ +/__< @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __@ + _/_/@ + / -< @ +/__< @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + //|@ + |/||@ + / -< @ +/__< @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_)(_)@ + / -< @ +/__< @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + _\_\ @ + /_ __/@ +/____/ @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __@ + __/_/@ + /_ __/@ +/____/ @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //|@ + _|/||@ + /_ __/@ +/____/ @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)(_)@ + /_ __/ @ +/____/ @ + @@ +208 LATIN CAPITAL LETTER ETH + ____ @ + _/ __ \@ +/_ _// /@ +/_____/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\//@ + __//\/ @ + / |/ / @ +/_/|__/ @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + _\_\ @ +/ __ \@ +\____/@ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __@ + __/_/@ +/ __ \@ +\____/@ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ +/ __ \@ +\____/@ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\//@ + _//\/ @ +/ __ \ @ +\____/ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ +/ __ \ @ +\____/ @ + @@ +215 MULTIPLICATION SIGN + @ + /|/|@ + > < @ +|/|/ @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _____ @ + / _// \@ +/ //// /@ +\_//__/ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + __\_\ @ +/ /_/ /@ +\____/ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __@ + __ /_/@ +/ /_/ /@ +\____/ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //|@ + __|/||@ +/ /_/ /@ +\____/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ +/ /_/ / @ +\____/ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __@ +__/_/@ +\ V /@ + /_/ @ + @@ +222 LATIN CAPITAL LETTER THORN + __ @ + / / @ + / -_)@ +/_/ @ + @@ +223 LATIN SMALL LETTER SHARP S + ____ @ + / _ )@ + / /< < @ + / //__/ @ +/_/ @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + _\_\_@ +/ _ `/@ +\_,_/ @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __@ + __/_/@ +/ _ `/@ +\_,_/ @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + //|@ + _|/||@ +/ _ `/@ +\_,_/ @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\//@ + _//\/ @ +/ _ `/ @ +\_,_/ @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ +/ _ `/ @ +\_,_/ @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + _(())@ +/ _ `/@ +\_,_/ @ + @@ +230 LATIN SMALL LETTER AE + @ + ___ ___ @ +/ _ ` -_)@ +\_,____/ @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + ____@ +/ __/@ +\__/ @ +/_) @@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + _\_\@ +/ -_)@ +\__/ @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __@ + _/_/@ +/ -_)@ +\__/ @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //|@ + |/||@ +/ -_)@ +\__/ @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ +(_)(_)@ +/ -_) @ +\__/ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + / / @ +/_/ @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + / / @ +/_/ @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //|@ + |/||@ + / / @ +/_/ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ +(_)_(_)@ + / / @ +/_/ @ + @@ +240 LATIN SMALL LETTER ETH + _||_@ + __ || @ +/ _` | @ +\___/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\//@ + _//\/ @ + / _ \ @ +/_//_/ @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + _\_\@ +/ _ \@ +\___/@ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __@ + _/_/@ +/ _ \@ +\___/@ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ +/ _ \ @ +\___/ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\//@ + _//\/ @ +/ _ \ @ +\___/ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)(_)@ +/ _ \ @ +\___/ @ + @@ +247 DIVISION SIGN + _ @ + _(_)@ +/___/@ +(_) @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + ___ @ +/ //\@ +\//_/@ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + __\_\@ +/ // /@ +\_,_/ @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __@ + __/_/@ +/ // /@ +\_,_/ @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + //|@ + _|/||@ +/ // /@ +\_,_/ @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_)(_)@ +/ // / @ +\_,_/ @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __@ + __/_/@ + / // /@ + \_, / @ +/___/ @@ +254 LATIN SMALL LETTER THORN + __ @ + / / @ + / _ \@ + / .__/@ +/_/ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_)(_)@ + / // / @ + \_, / @ +/___/ @@ diff --git a/sources/lib/plugins/captcha/figlet.php b/sources/lib/plugins/captcha/figlet.php new file mode 100755 index 0000000..bd7692b --- /dev/null +++ b/sources/lib/plugins/captcha/figlet.php @@ -0,0 +1,169 @@ +loadFont("fonts/standard.flf")) { + * $phpFiglet->display("Hello World"); + * } else { + * trigger_error("Could not load font file"); + * } + * + */ + + +class phpFiglet +{ + + /* + * Internal variables + */ + + var $signature; + var $hardblank; + var $height; + var $baseline; + var $maxLenght; + var $oldLayout; + var $commentLines; + var $printDirection; + var $fullLayout; + var $codeTagCount; + var $fontFile; + + + /* + * Contructor + */ + + function phpFiglet() + { + + } + + + /* + * Load an flf font file. Return true on success, false on error. + */ + + function loadfont($fontfile) + { + $this->fontFile = @file($fontfile); + if (!$this->fontFile) return false; + + $hp = explode(" ", $this->fontFile[0]); // get header + + $this->signature = substr($hp[0], 0, strlen($hp[0]) -1); + $this->hardblank = substr($hp[0], strlen($hp[0]) -1, 1); + $this->height = $hp[1]; + $this->baseline = $hp[2]; + $this->maxLenght = $hp[3]; + $this->oldLayout = $hp[4]; + $this->commentLines = $hp[5] + 1; + $this->printDirection = $hp[6]; + $this->fullLayout = $hp[7]; + $this->codeTagCount = $hp[8]; + + unset($hp); + + if ($this->signature != "flf2a") { + return false; + } else { + return true; + } + } + + + /* + * Get a character as a string, or an array with one line + * for each font height. + */ + + function getCharacter($character, $asarray = false) + { + $asciValue = ord($character); + $start = $this->commentLines + ($asciValue - 32) * $this->height; + $data = ($asarray) ? array() : ""; + + for ($a = 0; $a < $this->height; $a++) + { + $tmp = $this->fontFile[$start + $a]; + $tmp = str_replace("@", "", $tmp); + //$tmp = trim($tmp); + $tmp = str_replace($this->hardblank, " ", $tmp); + + if ($asarray) { + $data[] = $tmp; + } else { + $data .= $tmp; + } + } + + return $data; + } + + + /* + * Returns a figletized line of characters. + */ + + function fetch($line) + { + $ret = ""; + + for ($i = 0; $i < (strlen($line)); $i++) + { + $data[] = $this->getCharacter($line[$i], true); + } + + @reset($data); + + for ($i = 0; $i < $this->height; $i++) + { + while (list($k, $v) = each($data)) + { + $ret .= str_replace("\n", "", $v[$i]); + } + reset($data); + $ret .= "\n"; + } + + return $ret; + } + + + /* + * Display (print) a figletized line of characters. + */ + + function display($line) + { + print $this->fetch($line); + } + +} +?> diff --git a/sources/lib/plugins/captcha/fonts/README b/sources/lib/plugins/captcha/fonts/README new file mode 100755 index 0000000..69edcbe --- /dev/null +++ b/sources/lib/plugins/captcha/fonts/README @@ -0,0 +1,8 @@ +All fonts placed in this directory will be used randomly for the image captcha. +The more and exotic fonts you use, the harder it will be to OCR. However you +should be aware that most fonts are very hard to read when used for small sizes. + +Provided fonts: + +VeraSe.ttf - Bitsream Vera, http://www-old.gnome.org/fonts/ +Rufscript010.ttf - Rufscript, http://openfontlibrary.org/en/font/rufscript diff --git a/sources/lib/plugins/captcha/fonts/Rufscript010.ttf b/sources/lib/plugins/captcha/fonts/Rufscript010.ttf new file mode 100755 index 0000000000000000000000000000000000000000..887a4496f3c8dbdb62efe1c95dfd9b2604cb732c GIT binary patch literal 23080 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/fonts/VeraSe.ttf b/sources/lib/plugins/captcha/fonts/VeraSe.ttf new file mode 100755 index 0000000000000000000000000000000000000000..4b4ecc66671e45e9dac162aa85dab558cebc191c GIT binary patch literal 60280 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 + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/'); + + +class helper_plugin_captcha extends DokuWiki_Plugin { + + protected $field_in = 'plugin__captcha'; + protected $field_sec = 'plugin__captcha_secret'; + protected $field_hp = 'plugin__captcha_honeypot'; + + /** + * Constructor. Initializes field names + */ + public function __construct() { + $this->field_in = md5($this->_fixedIdent().$this->field_in); + $this->field_sec = md5($this->_fixedIdent().$this->field_sec); + $this->field_hp = md5($this->_fixedIdent().$this->field_hp); + } + + /** + * Check if the CAPTCHA should be used. Always check this before using the methods below. + * + * @return bool true when the CAPTCHA should be used + */ + public function isEnabled() { + if(!$this->getConf('forusers') && $_SERVER['REMOTE_USER']) return false; + return true; + } + + /** + * Returns the HTML to display the CAPTCHA with the chosen method + */ + public function getHTML() { + global $ID; + + $rand = (float) (rand(0, 10000)) / 10000; + if($this->getConf('mode') == 'math') { + $code = $this->_generateMATH($this->_fixedIdent(), $rand); + $code = $code[0]; + $text = $this->getLang('fillmath'); + } elseif($this->getConf('mode') == 'question') { + $text = $this->getConf('question'); + } else { + $code = $this->_generateCAPTCHA($this->_fixedIdent(), $rand); + $text = $this->getLang('fillcaptcha'); + } + $secret = $this->encrypt($rand); + + $txtlen = $this->getConf('lettercount'); + + $out = ''; + $out .= '
'; + $out .= ''; + $out .= ' '; + + switch($this->getConf('mode')) { + case 'math': + case 'text': + $out .= $this->_obfuscateText($code); + break; + case 'js': + $out .= ''.$this->_obfuscateText($code).''; + break; + case 'image': + $out .= ' '; + break; + case 'audio': + $out .= ' '; + $out .= ''; + $out .= ''.$this->getLang('soundlink').''; + break; + case 'figlet': + require_once(dirname(__FILE__).'/figlet.php'); + $figlet = new phpFiglet(); + if($figlet->loadfont(dirname(__FILE__).'/figlet.flf')) { + $out .= '
';
+                    $out .= rtrim($figlet->fetch($code));
+                    $out .= '
'; + } else { + msg('Failed to load figlet.flf font file. CAPTCHA broken', -1); + } + break; + } + $out .= ' '; + + // add honeypot field + $out .= ''; + $out .= '
'; + return $out; + } + + /** + * Checks if the the CAPTCHA was solved correctly + * + * @param bool $msg when true, an error will be signalled through the msg() method + * @return bool true when the answer was correct, otherwise false + */ + public function check($msg = true) { + global $INPUT; + + $code = ''; + $field_sec = $INPUT->str($this->field_sec); + $field_in = $INPUT->str($this->field_in); + $field_hp = $INPUT->str($this->field_hp); + + // reconstruct captcha from provided $field_sec + $rand = $this->decrypt($field_sec); + + if($this->getConf('mode') == 'math') { + $code = $this->_generateMATH($this->_fixedIdent(), $rand); + $code = $code[1]; + } elseif($this->getConf('mode') == 'question') { + $code = $this->getConf('answer'); + } else { + $code = $this->_generateCAPTCHA($this->_fixedIdent(), $rand); + } + + // compare values + if(!$field_sec || + !$field_in || + $rand === false || + utf8_strtolower($field_in) != utf8_strtolower($code) || + trim($field_hp) !== '' + ) { + if($msg) msg($this->getLang('testfailed'), -1); + return false; + } + return true; + } + + /** + * Build a semi-secret fixed string identifying the current page and user + * + * This string is always the same for the current user when editing the same + * page revision, but only for one day. Editing a page before midnight and saving + * after midnight will result in a failed CAPTCHA once, but makes sure it can + * not be reused which is especially important for the registration form where the + * $ID usually won't change. + * + * @return string + */ + public function _fixedIdent() { + global $ID; + $lm = @filemtime(wikiFN($ID)); + $td = date('Y-m-d'); + return auth_browseruid(). + auth_cookiesalt(). + $ID.$lm.$td; + } + + /** + * Adds random space characters within the given text + * + * Keeps subsequent numbers without spaces (for math problem) + * + * @param $text + * @return string + */ + protected function _obfuscateText($text) { + $new = ''; + + $spaces = array( + "\r", + "\n", + "\r\n", + ' ', + "\xC2\xA0", // \u00A0 NO-BREAK SPACE + "\xE2\x80\x80", // \u2000 EN QUAD + "\xE2\x80\x81", // \u2001 EM QUAD + "\xE2\x80\x82", // \u2002 EN SPACE + // "\xE2\x80\x83", // \u2003 EM SPACE + "\xE2\x80\x84", // \u2004 THREE-PER-EM SPACE + "\xE2\x80\x85", // \u2005 FOUR-PER-EM SPACE + "\xE2\x80\x86", // \u2006 SIX-PER-EM SPACE + "\xE2\x80\x87", // \u2007 FIGURE SPACE + "\xE2\x80\x88", // \u2008 PUNCTUATION SPACE + "\xE2\x80\x89", // \u2009 THIN SPACE + "\xE2\x80\x8A", // \u200A HAIR SPACE + "\xE2\x80\xAF", // \u202F NARROW NO-BREAK SPACE + "\xE2\x81\x9F", // \u205F MEDIUM MATHEMATICAL SPACE + + "\xE1\xA0\x8E\r\n", // \u180E MONGOLIAN VOWEL SEPARATOR + "\xE2\x80\x8B\r\n", // \u200B ZERO WIDTH SPACE + "\xEF\xBB\xBF\r\n", // \uFEFF ZERO WIDTH NO-BREAK SPACE + ); + + $len = strlen($text); + for($i = 0; $i < $len - 1; $i++) { + $new .= $text{$i}; + + if(!is_numeric($text{$i + 1})) { + $new .= $spaces[array_rand($spaces)]; + } + } + $new .= $text{$len - 1}; + return $new; + } + + /** + * Generate some numbers from a known string and random number + * + * @param $fixed string the fixed part, any string + * @param $rand float some random number between 0 and 1 + * @return string + */ + protected function _generateNumbers($fixed, $rand) { + $fixed = hexdec(substr(md5($fixed), 5, 5)); // use part of the md5 to generate an int + $rand = $rand * 0xFFFFF; // bitmask from the random number + return md5($rand ^ $fixed); // combine both values + } + + /** + * Generates a random char string + * + * @param $fixed string the fixed part, any string + * @param $rand float some random number between 0 and 1 + * @return string + */ + public function _generateCAPTCHA($fixed, $rand) { + $numbers = $this->_generateNumbers($fixed, $rand); + + // now create the letters + $code = ''; + $lettercount = $this->getConf('lettercount') * 2; + if($lettercount > strlen($numbers)) $lettercount = strlen($numbers); + for($i = 0; $i < $lettercount; $i += 2) { + $code .= chr(floor(hexdec($numbers[$i].$numbers[$i + 1]) / 10) + 65); + } + + return $code; + } + + /** + * Create a mathematical task and its result + * + * @param $fixed string the fixed part, any string + * @param $rand float some random number between 0 and 1 + * @return array taks, result + */ + protected function _generateMATH($fixed, $rand) { + $numbers = $this->_generateNumbers($fixed, $rand); + + // first letter is the operator (+/-) + $op = (hexdec($numbers[0]) > 8) ? -1 : 1; + $num = array(hexdec($numbers[1].$numbers[2]), hexdec($numbers[3])); + + // we only want positive results + if(($op < 0) && ($num[0] < $num[1])) rsort($num); + + // prepare result and task text + $res = $num[0] + ($num[1] * $op); + $task = $num[0].(($op < 0) ? '-' : '+').$num[1].'=?'; + + return array($task, $res); + } + + /** + * Create a CAPTCHA image + * + * @param string $text the letters to display + */ + public function _imageCAPTCHA($text) { + $w = $this->getConf('width'); + $h = $this->getConf('height'); + + $fonts = glob(dirname(__FILE__).'/fonts/*.ttf'); + + // create a white image + $img = imagecreatetruecolor($w, $h); + $white = imagecolorallocate($img, 255, 255, 255); + imagefill($img, 0, 0, $white); + + // add some lines as background noise + for($i = 0; $i < 30; $i++) { + $color = imagecolorallocate($img, rand(100, 250), rand(100, 250), rand(100, 250)); + imageline($img, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $color); + } + + // draw the letters + $txtlen = strlen($text); + for($i = 0; $i < $txtlen; $i++) { + $font = $fonts[array_rand($fonts)]; + $color = imagecolorallocate($img, rand(0, 100), rand(0, 100), rand(0, 100)); + $size = rand(floor($h / 1.8), floor($h * 0.7)); + $angle = rand(-35, 35); + + $x = ($w * 0.05) + $i * floor($w * 0.9 / $txtlen); + $cheight = $size + ($size * 0.5); + $y = floor($h / 2 + $cheight / 3.8); + + imagettftext($img, $size, $angle, $x, $y, $color, $font, $text[$i]); + } + + header("Content-type: image/png"); + imagepng($img); + imagedestroy($img); + } + + /** + * Encrypt the given string with the cookie salt + * + * @param string $data + * @return string + */ + public function encrypt($data) { + if(function_exists('auth_encrypt')) { + $data = auth_encrypt($data, auth_cookiesalt()); // since binky + } else { + $data = PMA_blowfish_encrypt($data, auth_cookiesalt()); // deprecated + } + + return base64_encode($data); + } + + /** + * Decrypt the given string with the cookie salt + * + * @param string $data + * @return string + */ + public function decrypt($data) { + $data = base64_decode($data); + if($data === false || $data === '') return false; + + if(function_exists('auth_decrypt')) { + return auth_decrypt($data, auth_cookiesalt()); // since binky + } else { + return PMA_blowfish_decrypt($data, auth_cookiesalt()); // deprecated + } + } +} diff --git a/sources/lib/plugins/captcha/img.php b/sources/lib/plugins/captcha/img.php new file mode 100755 index 0000000..e0efcb7 --- /dev/null +++ b/sources/lib/plugins/captcha/img.php @@ -0,0 +1,22 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../'); +define('NOSESSION', true); +define('DOKU_DISABLE_GZIP_OUTPUT', 1); +require_once(DOKU_INC.'inc/init.php'); +require_once(DOKU_INC.'inc/auth.php'); + +$ID = $_REQUEST['id']; +/** @var helper_plugin_captcha $plugin */ +$plugin = plugin_load('helper', 'captcha'); +$rand = $plugin->decrypt($_REQUEST['secret']); +$code = $plugin->_generateCAPTCHA($plugin->_fixedIdent(), $rand); +$plugin->_imageCAPTCHA($code); + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/sources/lib/plugins/captcha/lang/ar/lang.php b/sources/lib/plugins/captcha/lang/ar/lang.php new file mode 100755 index 0000000..54984c6 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ar/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'عذراً، لكن لم يكن الرد على كلمة التحقق بشكل صحيح.'; +$lang['fillcaptcha'] = 'الرجاء تعبئة كافة الأحرف في المربع.'; +$lang['fillmath'] = 'الرجاء حل المعادلة التالية.'; +$lang['soundlink'] = 'إذا كنت لا تستطيع قراءة الحروف على الصورة، تحميل ملف الصوت يساعدك على قراءة الأحرف.'; +$lang['honeypot'] = 'الرجاء الحفاظ على هذا الحقل فارغاً:'; diff --git a/sources/lib/plugins/captcha/lang/ar/settings.php b/sources/lib/plugins/captcha/lang/ar/settings.php new file mode 100755 index 0000000..d5fbea1 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ar/settings.php @@ -0,0 +1,23 @@ + + * @author habiiibo + */ +$lang['mode'] = 'أي نوع من كلمة التحقق استخدامها؟'; +$lang['mode_o_js'] = 'نص (مملوءة مسبقا مع جافا سكريبت)'; +$lang['mode_o_text'] = 'النص (دليل فقط)'; +$lang['mode_o_math'] = 'مشكلة الرياضيات'; +$lang['mode_o_question'] = 'مسألة ثابتة'; +$lang['mode_o_image'] = 'الصورة (أسوأ إمكانية الوصول)'; +$lang['mode_o_audio'] = 'الصورة + الصوت (أفضل إمكانية الوصول)'; +$lang['mode_o_figlet'] = 'برنامج صنع الكلمات (تعذر الوصول)'; +$lang['forusers'] = 'استخدام كلمة التحقق في تسجيل المستخدمين، أيضا؟'; +$lang['loginprotect'] = 'لا بد من ادخال كود التحقق او كابتشا لمتابعة تسجيل الدخول؟'; +$lang['lettercount'] = 'عدد من الرسائل لاستخدام (3-16). إذا قمت بزيادة كمية، ومن المؤكد أن زيادة العرض في الصورة أدناه كذلك.'; +$lang['width'] = 'عرض الصورة كلمة التحقق (بالبكسل)'; +$lang['height'] = 'ارتفاع الصورة كلمة التحقق (بالبكسل)'; +$lang['question'] = 'سؤال لوضع مسألة ثابتة'; +$lang['answer'] = 'جواب المسألة الثابتة'; diff --git a/sources/lib/plugins/captcha/lang/cs/lang.php b/sources/lib/plugins/captcha/lang/cs/lang.php new file mode 100755 index 0000000..e03223f --- /dev/null +++ b/sources/lib/plugins/captcha/lang/cs/lang.php @@ -0,0 +1,13 @@ + + * @author Jaroslav Lichtblau + */ +$lang['testfailed'] = 'Bohužel, ale na CAPTCHA nebylo odpovězeno správně. Jste vůbec člověk?'; +$lang['fillcaptcha'] = 'Vyplňte, prosím, všechna písmena v poli, abyste dokázali, že nejste robot.'; +$lang['fillmath'] = 'Prosíme, vyřešte nasledující rovnici, abyste dokázali, že nejste robot.'; +$lang['soundlink'] = 'Pokud nedokážete přečíst písmena na obrázku, stáhněte si tento .wav soubor, kde je text přečtený.'; +$lang['honeypot'] = 'Ponechte prosím toto pole prázdné:'; diff --git a/sources/lib/plugins/captcha/lang/cs/settings.php b/sources/lib/plugins/captcha/lang/cs/settings.php new file mode 100755 index 0000000..5167538 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/cs/settings.php @@ -0,0 +1,23 @@ + + * @author Jaroslav Lichtblau + */ +$lang['mode'] = 'Který typ CAPTCHA se má použít?'; +$lang['mode_o_js'] = 'Text (předvyplněný JavaScriptem)'; +$lang['mode_o_text'] = 'Text (pouze manuálně vložený)'; +$lang['mode_o_math'] = 'Matematický problém'; +$lang['mode_o_question'] = 'Vlastní otázka'; +$lang['mode_o_image'] = 'Obrázek (špatná přístupnost)'; +$lang['mode_o_audio'] = 'Obrázek (lepší přístupnost)'; +$lang['mode_o_figlet'] = 'ASCII art figlet (špatná přístupnost) '; +$lang['forusers'] = 'Používat CAPTCHA i pro registrované uživatele?'; +$lang['loginprotect'] = 'Vyžadovat pro přihlášení CAPTCHA?'; +$lang['lettercount'] = 'Počet použitých písmen (3-16). Pokud navýšíte množství, ujistěte se, že jste navýšili i šířku obrázku níže.'; +$lang['width'] = 'Šírka CAPTCHA obrázku (v bodech)'; +$lang['height'] = 'Výška CAPTCHA obrázku (v bodech)'; +$lang['question'] = 'Otázka pro režim vlastní otázky'; +$lang['answer'] = 'Odpověď pro režim vlastní otázky'; diff --git a/sources/lib/plugins/captcha/lang/cy/lang.php b/sources/lib/plugins/captcha/lang/cy/lang.php new file mode 100644 index 0000000..42e3d51 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/cy/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Sori, ond wnaethoch chi ddim ateb y CAPTCHA\'n gywir. Efallai \'dych chi ddim yn ddynol wedi\'r cyfan?'; +$lang['fillcaptcha'] = 'Llenwch pob llythyren i\'r blwch i brofi\'ch bod chi\'n ddynol.'; +$lang['fillmath'] = 'Datryswch yr hafaliad canlynol i brofi\'ch bod chi\'n ddynol.'; +$lang['soundlink'] = 'Os \'dych chi ddim yn gallu darllen llythrennau\'r ddelwedd, lawrlwythwch y ffeil .wav hwn er mwyn cael nhw wedi\'u darllen i chi.'; +$lang['honeypot'] = 'Cadwch y maes hwn yn wag:'; diff --git a/sources/lib/plugins/captcha/lang/cy/settings.php b/sources/lib/plugins/captcha/lang/cy/settings.php new file mode 100644 index 0000000..2e0a0b7 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/cy/settings.php @@ -0,0 +1,22 @@ + + */ +$lang['mode'] = 'Pa fath CAPTCHA i\'w ddefnyddio?'; +$lang['mode_o_js'] = 'Testun (wedi\'i rhaglenwi gan JavaScript)'; +$lang['mode_o_text'] = 'Testun (gan law yn unig)'; +$lang['mode_o_math'] = 'Problem fathemategol'; +$lang['mode_o_question'] = 'Cwestiwn gosodedig'; +$lang['mode_o_image'] = 'Delwedd (hygyrchedd gwael)'; +$lang['mode_o_audio'] = 'Delwedd+Sain (gwell hygyrchedd)'; +$lang['mode_o_figlet'] = 'Celf Figlet ASCII (hygyrchedd gwael)'; +$lang['forusers'] = 'Defnyddio CAPTCHA ar gyfer defnyddwyr sydd wedi mewngofnodi hefyd?'; +$lang['loginprotect'] = 'Angen CAPTCHA i fewngofnodi?'; +$lang['lettercount'] = 'Bufer y llythrennau i\'w defnyddio (3-16). Os ydych chi\'n cynnyddu\'r nifer, sicrhewch eich bod chi\'n cynyddu lled y ddelwedd isod hefyd.'; +$lang['width'] = 'Lled y ddelwedd CAPTCHA (picsel)'; +$lang['height'] = 'Uchder y ddelwedd CAPTCHA (picsel)'; +$lang['question'] = 'Cwestiwn ar gyfer modd cwestiwn gosodedig'; +$lang['answer'] = 'Ateb ar gyfer modd cwestiwn gosodedig'; diff --git a/sources/lib/plugins/captcha/lang/da/lang.php b/sources/lib/plugins/captcha/lang/da/lang.php new file mode 100755 index 0000000..bed7a73 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/da/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Desværre, CAPTCHA blev ikke besvaret korrekt. Du er muligvis ikke et menneske?'; +$lang['fillcaptcha'] = 'Skriv venligst alle bogstaverne i boksen for at bevise at du er et menneske.'; +$lang['fillmath'] = 'Løs venligst følgende ligning for at bevise at du er et menneske.'; +$lang['soundlink'] = 'Hvis du ikke kan læse bogstaverne på skærmen, kan du downloade denne .wav-fil, for at få dem læst op.'; +$lang['honeypot'] = 'Hold venligst dette felt tomt:'; diff --git a/sources/lib/plugins/captcha/lang/da/settings.php b/sources/lib/plugins/captcha/lang/da/settings.php new file mode 100755 index 0000000..36f6276 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/da/settings.php @@ -0,0 +1,23 @@ + + * @author Jacob Palm + */ +$lang['mode'] = 'Hvilken type CAPTCHA skal benyttes?'; +$lang['mode_o_js'] = 'Tekst (præudfyldt af JavaScript)'; +$lang['mode_o_text'] = 'Tekst (kun manuelt)'; +$lang['mode_o_math'] = 'Matematikproblem'; +$lang['mode_o_question'] = 'Løsning'; +$lang['mode_o_image'] = 'Billede (dårlig tilgængelighed)'; +$lang['mode_o_audio'] = 'Billede+Audio (bedre tilgængelighed)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (dårlig tilgængelighed)'; +$lang['forusers'] = 'Benyt også CAPTCHA til brugere der er logget ind?'; +$lang['loginprotect'] = 'Kræv CAPTCHA ved login?'; +$lang['lettercount'] = 'Antal af bogstaver der skal benyttes (3-16). Hvis du øger antallet, skal du også huske at øge bredden af billedet herunder.'; +$lang['width'] = 'Bredden af CAPTCHA-billedet (pixel)'; +$lang['height'] = 'Højden af CAPTCHA-billedet (pixel)'; +$lang['question'] = 'Spørgsmål til fast-spørgsmål-tilstand'; +$lang['answer'] = 'Svar til fast-spørgsmål-tilstand'; diff --git a/sources/lib/plugins/captcha/lang/de-informal/lang.php b/sources/lib/plugins/captcha/lang/de-informal/lang.php new file mode 100755 index 0000000..867031e --- /dev/null +++ b/sources/lib/plugins/captcha/lang/de-informal/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Das CAPTCHA wurde nicht korrekt beantwortet.'; +$lang['fillcaptcha'] = 'Bitte übertrage die Buchstaben in das Eingabefeld.'; +$lang['fillmath'] = 'Bitte löse folgende Gleichung:'; +$lang['soundlink'] = 'Wenn Du die Buchstaben auf dem Bild nicht lesen kannst, lade diese .wav Datei herunter, um sie vorgelesen zu bekommen.'; +$lang['honeypot'] = 'Dieses Feld bitte leer lassen'; diff --git a/sources/lib/plugins/captcha/lang/de-informal/settings.php b/sources/lib/plugins/captcha/lang/de-informal/settings.php new file mode 100755 index 0000000..28a2004 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/de-informal/settings.php @@ -0,0 +1,23 @@ + + * @author Dana + */ +$lang['mode'] = 'Welcher CAPTCHA-Typ soll benutzt werden?'; +$lang['mode_o_js'] = 'Text (automatisch ausgefüllt via JavaScript)'; +$lang['mode_o_text'] = 'Text (manuell auszufüllen)'; +$lang['mode_o_math'] = 'Mathe-Aufgabe'; +$lang['mode_o_question'] = 'Feste Frage'; +$lang['mode_o_image'] = 'Bild (nicht barrierefrei)'; +$lang['mode_o_audio'] = 'Bild+Audio (barrierefrei)'; +$lang['mode_o_figlet'] = 'Figlet ASCII-Kunst (nicht barrierefrei)'; +$lang['forusers'] = 'CAPTCHA auch für angemeldete Benutzer verwenden?'; +$lang['loginprotect'] = 'Vorraussetzen eines CAPTCHA zum Einloggen?'; +$lang['lettercount'] = 'Anzahl der zu verwendenen Buchstaben (3-16). Wenn Du die Anzahl erhöhst, denke daran auch die Breite des Bildes im nächsten Feld zu erhöhen.'; +$lang['width'] = 'Breite des CAPTCHA Bildes (in Pixel)'; +$lang['height'] = 'Höhe des CAPTCHA Bildes (in Pixel)'; +$lang['question'] = 'Frage für den "Feste Frage" Modus.'; +$lang['answer'] = 'Antwort für den "Feste Frage" Modus.'; diff --git a/sources/lib/plugins/captcha/lang/de/lang.php b/sources/lib/plugins/captcha/lang/de/lang.php new file mode 100755 index 0000000..ac6fa4a --- /dev/null +++ b/sources/lib/plugins/captcha/lang/de/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Das CAPTCHA wurde nicht korrekt beantwortet.'; +$lang['fillcaptcha'] = 'Bitte übertragen Sie die Buchstaben in das Eingabefeld.'; +$lang['fillmath'] = 'Bitte lösen Sie folgende Gleichung:'; +$lang['soundlink'] = 'Wenn Sie die Buchstaben auf dem Bild nicht lesen können, laden Sie diese .wav Datei herunter, um sie vorgelesen zu bekommen.'; +$lang['honeypot'] = 'Dieses Feld bitte leer lassen'; diff --git a/sources/lib/plugins/captcha/lang/de/settings.php b/sources/lib/plugins/captcha/lang/de/settings.php new file mode 100755 index 0000000..549a53d --- /dev/null +++ b/sources/lib/plugins/captcha/lang/de/settings.php @@ -0,0 +1,24 @@ + + * @author Thomas Templin + * @author Leo Rudin + */ +$lang['mode'] = 'Welcher CAPTCHA-Typ soll benutzt werden?'; +$lang['mode_o_js'] = 'Text (automatisch ausgefüllt via JavaScript)'; +$lang['mode_o_text'] = 'Text (manuell auszufüllen)'; +$lang['mode_o_math'] = 'Mathe-Aufgabe'; +$lang['mode_o_question'] = 'Feste Frage'; +$lang['mode_o_image'] = 'Bild (nicht barrierefrei)'; +$lang['mode_o_audio'] = 'Bild+Audio (barrierefrei)'; +$lang['mode_o_figlet'] = 'Figlet ASCII-Kunst (nicht barrierefrei)'; +$lang['forusers'] = 'Soll das CAPTCHA auch für eingeloggte Benutzer gebraucht werden?'; +$lang['loginprotect'] = 'Benötigt es ein CAPTCHA um sich einzuloggen?'; +$lang['lettercount'] = 'Anzahl der zu verwendenen Buchstaben (3-16). Wenn Sie die Anzahl erhöhen, denken Sie daran auch die Breite des Bildes im nächsten Feld zu erhöhen.'; +$lang['width'] = 'Weite des CAPTCHA Bildes (pixel)'; +$lang['height'] = 'Höhe des CAPTCHA Bildes (pixel)'; +$lang['question'] = 'Frage für den "Feste Frage" Modus.'; +$lang['answer'] = 'Antwort für den "Feste Frage" Modus.'; diff --git a/sources/lib/plugins/captcha/lang/en/audio/LICENSE b/sources/lib/plugins/captcha/lang/en/audio/LICENSE new file mode 100755 index 0000000..e97f8cc --- /dev/null +++ b/sources/lib/plugins/captcha/lang/en/audio/LICENSE @@ -0,0 +1,4 @@ +This work is licensed under the Creative Commons Sampling Plus 1.0 License. To +view a copy of this license, visit +http://creativecommons.org/licenses/sampling+/1.0/ or send a letter to Creative +Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA. diff --git a/sources/lib/plugins/captcha/lang/en/audio/README b/sources/lib/plugins/captcha/lang/en/audio/README new file mode 100755 index 0000000..979c5f0 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/en/audio/README @@ -0,0 +1,13 @@ +Author: Michael Klier +Link: http://www.chimeric.de/projects/npa +Voice: Christian Spellenberg + +These samples represent the NATO phonetical alphabet. They are protected +by the Creative Commons Sampling Plus 1.0 License. You are free to use +and redistribute these samples under the conditions defined by the +license. For further information read the LICENSE file and visit +http://www.creativecommons.org. + +Note: The original high quality wave files were downsampled and converted + to 8-Bit mono files for distribution with the CAPTCHA plugin. Visit + the link above for the original files. diff --git a/sources/lib/plugins/captcha/lang/en/audio/a.wav b/sources/lib/plugins/captcha/lang/en/audio/a.wav new file mode 100755 index 0000000000000000000000000000000000000000..e7505ca32dcc00ea1def31efdd9d3c1bf195dfe9 GIT binary patch literal 33134 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 XI0!fhI0!fhI0!fhI0*bdjlll_=R=qr literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/b.wav b/sources/lib/plugins/captcha/lang/en/audio/b.wav new file mode 100755 index 0000000000000000000000000000000000000000..eb9fffab8bde78d9e233d35b650c694005f5d890 GIT binary patch literal 32318 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/c.wav b/sources/lib/plugins/captcha/lang/en/audio/c.wav new file mode 100755 index 0000000000000000000000000000000000000000..117fc93d7855da654283b2381a30fa02cc46f300 GIT binary patch literal 33342 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/d.wav b/sources/lib/plugins/captcha/lang/en/audio/d.wav new file mode 100755 index 0000000000000000000000000000000000000000..9a1ea528b212749e53953062d2416cc3d0236dac GIT binary patch literal 35886 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 O0t5mC0t9{^5cnUKcPwfE literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/f.wav b/sources/lib/plugins/captcha/lang/en/audio/f.wav new file mode 100755 index 0000000000000000000000000000000000000000..dc4ff2b5c19526b810bd9a2be9ea1e735a4a6380 GIT binary patch literal 35310 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/h.wav b/sources/lib/plugins/captcha/lang/en/audio/h.wav new file mode 100755 index 0000000000000000000000000000000000000000..50365bb4f392eae25eb6af69df62f29c376b8ab2 GIT binary patch literal 33422 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 Ta0qY+a0qY+a0vXriNOB^&sbL} literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/j.wav b/sources/lib/plugins/captcha/lang/en/audio/j.wav new file mode 100755 index 0000000000000000000000000000000000000000..56a9535214db8dd28aeb2a05de57334cd4a4f666 GIT binary patch literal 35438 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

P( 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 X@DT72@DT72@DT72@DTVvj=+Bdctdqa literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/n.wav b/sources/lib/plugins/captcha/lang/en/audio/n.wav new file mode 100755 index 0000000000000000000000000000000000000000..bd4304d8a75025893d4a571666c4c83c7d9c1c81 GIT binary patch literal 37678 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 Qv^~)FK-&ZVZ+hT=0C%Tv^#A|> literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/o.wav b/sources/lib/plugins/captcha/lang/en/audio/o.wav new file mode 100755 index 0000000000000000000000000000000000000000..02ffa9b7c65de71e639ee7f5ffe8690bc01906ee GIT binary patch literal 34862 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/p.wav b/sources/lib/plugins/captcha/lang/en/audio/p.wav new file mode 100755 index 0000000000000000000000000000000000000000..1863235d77b0a7e306109a39ab39c5249703ad2a GIT binary patch literal 34862 zcmeHPS*#>ic{X{sg2(-S!^*_u<*w*uVGO_Q$swb)4>x&?co7 z4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S z4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4FL@S4T1kR2nZ}M?BA!5H zI+GD4F`LQaAFfjwF;~dvrF1GQinxK6$y6$tNW}SgJc+*X6L)fjLLrySqh&sy%Socd zE+lk>r!piY+NL1@4w($Sk)0=3bWJxW@(W4ypQJ+qQqdJ%(uv+XEj-475{pHt#8|9%H>MAR4Uh+&6=Fg7fZ!LkxdTujrpPZ6>-dn`JzmB=(VV4la6Ul zCwM*~Kq+WS(o#V#7eyfbhR1)1l7cuvx7ZlhJHeT8jrQL2+D$Q=ID3w~>cB7#TFJ8X5HEh=# zo#AG`)gEka3^zvIX0;^CweH5|pjlHkcF{w(qbP&zOS>C`!Jwx!8l7HCE;P3vyMAf2 z-|6&+!@*!Q-rnBc+CiI6tx{38u0Fao9ACb=(<+ubgHE;5*}Z;kXSA_><HuCY1CWYVNX#yy?(#f>ko$gW~tojDJ3yes4J~ztyIX%rBbb4moo&7lw~$R zk}IX0l#|lQSU41pC4@BTV!j|IIG58C;Ji+!+vD?jJ#LrPZ1-?}{NjQ>r`6{1xlB5v zljEF5oyp;}Su7UA(z#RTSB-|H*(F;vo#r`@!)aeXcjD~A;@r9OOD3nsVb<$RHp}YV zh54n0*+sp>sXKS<^pe49(Jd`oLwwk4x7uyG`Pns#&Ahg7Zg$OVUYna;cLqZ~ht=k? z>y}n5Znx9vi;1~}2fAZ`I+^VfgVF=ko=_KC9kfcYC}6UX+VcI-M&PQenTB zi^E!F$;Rb!#Y(Lz=L%4rYPF2@T5r^<4MkC!4b1Vyt?kQKFYR93-NsyZ8)doDXm|Vl z(RibWQ@_`)V>XI4rB#!2#d@bd7!5mhrjT+b;`Mmke!id#21>2jA3-fe&b+#;clbP( zwUsrKJLtC?^+uD$?yy@8E6aMT&1SP(^=oSeo6BXlSe?EgnW~WA>kCHXFg4jisn%>m z{hBDPc86Vcp+DQ>(P+GL@zU<@rOUgU8(SAIU)tUn_Ius#VAOAxE49{Oyfy5Q#eo^B zf~2_wT#&_P@R7#QcS04<9?fYS69Bo|-vw ze9_`G&Yd`Z>dcvwr_P-}b8P0U-X9HEX>r>uR!=D8@e1wBj}Gz?ENzELx3;osaK?&C zzg?l_*KEMD<#WYavr)?M(S%q8l)e6Fb8Ba3d$ZT9*A+r^FdA))$AGu3vp>H9uK-5o)91BVfo{NSSZ&ZP7VvCSdauhF4i}%JUVU_#Z)2^aNBJT zZ>-Q6?~MCxtiyIS2M?T<*2h%9Y*m#t3E5fvkBk zEj7l^eD`O+`t`4V@y6Gm>_leo{pkDO`@Ro;{J_Z-M@Yz5s&a~Rn2jdhj=82(DwD4?nvG_s2btT=Mx$1i;ql=ya)lz0ZERe9?uF-H zdHt8a{q?`R(9MP&bNfH~zW4ss$L>46?1*LMY87CmqF&R=(z?ykMo2=gys< zT|iAR30d*tyqJiD$&bJ>Ci#%hRxr7P!Ej@!6ort_NgCtua2N+{He4Ij zx?Zco-BlnKgo2?LGI^}UX1g~UZ*7ixN==r?*_G?v@s+2Zf9ch4|I<%?@bznzsLQl` z{B!&E?SEv!2x&z@j{AaOP$cbqLHq2}kN>wZ)m=!GdN$+=7-0;_7XyS)B@ z-w!Wq$C4p`X>s}^Nz8aY2VX8gJV;4ST!_cWGke^?Gh6KpVQ6GghXz z5l0DDE*=d>;+dQbCt0bGp6A6ZB9pv~u%Ze?;SuXtdvIgDt;e4K%1d8*_UXrW>oMcp znG-XI4;(x?Yw`voaRISoJRCp>081P|px}2S2rwGfmY3JfSV}^+P=;DiIFiNkfFlx_ zxUp~mW-p$vLk00y&nH7}i(Y52x;au?Sle73>pHWTDh2~kf~UNg$01X zvfFL9yThHUPdxj=tKa_4SD)@nL8oc{=)IrXci_aL(GiGe5wX&G^}FnL%u+b$qe#VS zTwR!*TQ=CeVIfz7HE$_Oy@c==fvbR^C>9M|g2HqcfEgwha%0ILHp8rAwp;K6!_A#5PrUHW*MIQ67caLY-m5#g|L;Ej=|iVi ztiD(V=wPJjsMle0kS4+dJDd)iVP)?8?2_K*i>33>qE@G?RC7X%;!_9)(GY?~;|O!e z6E$k3e3}nJIczqkm*d$ZFou|9#O+vTsVpKO3N2wGD>S{8qLd};*6IwmcP~Hw!uQ^M z>w8akbE&w0ZRWF|ylel_bE`IZKa8qWE~XS+)B4G}InuNlJ!1PFElr=Yv=xHmg~; zyfDA8th4&~EG!{bU#$YU5W*u07gEVsgqNy~QYz>}NW)<{1-M8e179ztkW5euJ`&*t zk!&c^7>b!$bX`Mq*eb(;SDQ+A&3L61W9E&1uvRO>})x~+BW%fj~r5ZxFHtdF+jYonAVW5tos90?_aE~m%jb__rLeGFYLBN&T!^| zd+xsHz{6*j?Lh%SFA0^2qw@eqdP5PlL&a)w)#wZ+M7gH)N27kHQGsXU5!nYKsX|eL zx<&EBi!jO;0_X^$3rHQXe$gfrO(20pI)S->5t3j!@}*h}iy6*ixUqftu`j&%wQqjo zhPvIMUY4h1|;EAj)I%NIm!LgtE@3K6*_QUQVGF@T7291OjVoT=GDj659g zUb+6%v(G*E>=Ov3TZLr6re9u|y)Zk!w5l^&onAkZoDfMutBcl`nhioY4)a9y;V9+P zEWL%_!L*?8SdglA;q^2zWay#!NxH-OLCS=jB8 zQ5bVTOam2`w@(|Q0c%1zEVX36S=BAis87-)Obg58$(pJ{L-J`-ja8{4%+Mix_6kd( z)wG$WlL>>Bz+O#nW?Bb-!U_#yDh{1#7#Wyxl7NkTdblY^XER3x0!#AQOsmsFH}(p9 zKs~5^P?wV-62~zqZ^wi|Ng(Z^q@qi5v9fo8Uz0x6UZ*18^kQ~79l@<C zyi<5q^RDf0y+Q9`x+)<1&PJj#0y27L zFs26d7kD*dY@i%s2DuN;BzHE;-U{AZ%85zxL-Fn81EW1x zmsi%-aX>qCpf}sVr2r4syv>XE0QVyGA~Y+^t!ywZZC)z+LtR{SM+hVl~^nL9g2z z4ngpsQt9A*Ab9#4;8GD(4o5?FtA~VdGz8-V`RmPkNtEP9r&VhpdjLmKk`m!4jEMvW zxLPEwLo$%dBthpOnh}?;=p9~3&qx&UFBgjNpt(bU z9myT-ryyOCh+SbR7dSv@RlU_|H!D~RlqDdiQI#9nBcd5397&vc7-kR%(P%)wY)tev z2jx_uzdMq7pZ?6l2kzN-*JtiKaPOx+@#$l$YiExfKC!TZ_;+P#{=$U|vvafOPtP1a za&m5I7UU_oKDXD8ATaOd7=#*IevpqA>I#}Y?*d|u>2u?1h1zo1|(LE z68Sdag+!}VLM~XtTB>0#pesN}K#mBL!N#x1~^fNEM`r;Ftvh&3L`}Q9= z`1wPJ?!9Z@=jW})`IE=buUG;w%6^b1&`z&qcIKgD7gpBSR@YW_)=)Z&>@ERiEmZ48 zArehy#7r{kvpa%PqggE=@2oUiH7Vjosv4pF1umK{xBK8t!Kilnomvh%5FmWYpmLCX zgAM9IgNEbn@vvPhmyvC@s`+e2Dpu;HRM^Q?pLz2?fAQ1re)q?3{_y3E*us6cf8axR zeDdy3-+lM}$JT>sfdg^r7m6}gISh3?8Tac?AAaEI+4-f#g@sjHq|j_taU`vrAN=bN-?{Iz zpPQN0JBVVEGa}XftG9jq@yDNj@rVEM-#`1>B`8?hdgAVn{>{hk ze&E>I6`MbnNP*yKUd+#T_u=*yd@0@vfIa z&q_to17vl`$UWHBh{TgA46RPwXBVOqp($l(+n2>mjFLjuOy-tMKc=722nBF`&7GIu z`o&MbvfCSMwD^U4Z~yQe`|dyZ;E4qj()?7pRnG=JfkY7rw~zo+D)JuV;_0Ig9(m-< z{EFTdNY_WZ*sj9HLIW*gh*Uxl3alDfP%o0`FrO*4M>`jHceXZ%SPj`Yh$$ECB85S& zOmEC zFpXWpIajj&o!s&bacMvBXg9j8c4$dTJ9N+~4i z7+8X_oWxjxeF8B;xha+~*c%r6V7PfT03+@iHa-Qv!pH!|KY+L|X8DM8{m1|H^H+zZ z?&Hs2j?aAL&p)*9fx`z6J+feS1yahTtD{_q%XD^k+7h40*Bf%eXP7&7`0&v)^N32! zq0-h9PhZ~|4L3H2ikyo0oKBCQ3xJhfH#+@9E<{qL&gSmLoiVd01tI9bzLX97zdn^n zQzwOJ8-?~>iNWQ;A7L-ijqO_=K?tdIvkp2KbXSx}43eILSH=})5Qr1|Ok3I@_+bht zZ_P5co&|*Pve?mvH9|^_&=TP#h}}>m;4oOEXW#nw??2XRUwh@1vE#Gv|BE~JKX~Zi zgXi>4f4n+=bX)eDt^ECX6Eji#SbliaxhU=Kv1_hk|A7z=M;_Z zOBI@<-A5nY-ROdXFQg-QC5U=ZxXS%e z=h`hj`J;dP!IRB$|N2uy|3i0t=+65eI{L_&WsA!j&JQkKY{uQLNU_~62@yV9EEh9T z*V@@fj-6XU{BCu{%9~fOUxvY^*eI8ZU=Q3IjPVhl-D1Ng8d9!AMs5vZ(#HK3@=8g7 z!H41l0OYQS3mL@>avBJV2lZTyW?6GCZLZ~0BfaRlRsgT&BYWZ67k#C*Zs;DzWV&QEcdQIb1A2L z_~4OK2)E}~jaIuiQSP*hQI{i-uGHi-AEzx%Ig4mwVRm8Ngb!P+KA|?;+U#R%jCLXs zQw0MY7E6Lz%U~4QIli}&o4wHnB1U`>QV^42q>>cs!ZBn0ij*Hy`iZ>-vj0#P7%{eI z=SMh9bD5)C*y6;7CxS@qajpYeJ0NIl%~cRXqf3SgnlT#<+6oN~WAN8uWXd4u=z|9YP=4U%;af zkLf+JW#~LkW}XNmM2=)_NX<#lsgN-wA!uiSJx30LhE7Qb94J-{laHvODO1b{8(Kuf zZP5~9>x1qxVAa0aBEwr~t)Yf&E=fbnEESLP^7a>BdS+ZJHwS$=uzc$HsdE=*m#`ho z`2+D{vsDs8h!qM%xj@2HA|4I842u`$)~p^3lSeq;Ma+ue7`>+PB@z;DxDsrCfd)f{ zkfij4_9lDXCfb1Qh~Q%$q`e`^ULXo3B*Zac1QZBT48=krP;dBH0Ff8FOM5Ft7DUiI zVp@REq|hRntPhY}fB>N-g&}MKvCk4PaTqHRV=Bt@IBmW{Gua9u9iVlCLaH)Bhc<<7 z+PzTuuZfy4U7%N}FTsr94SSE1s;D>VhHBCP_hiy0uh?ru4b&IYn_0WbVe(7WJGB|T z1cf!A`kR`gl6~0;Ex|C@FKS1P)rZ)?-d2S=wOVa5JrW2cC$vaCsi;hE|L*e*S>Aph zK2R*s$A~})1|kT(0Y2)2B|8tx&sHtjB@&pShbjOJLQN~Au?x}M;@cT(qg@{^=d!Bx)_ z&><`Nty>C&MNzA0Ak&-ELD9>osPeM6z$i`IV>o0Vm?}Ir}V;{1p zggjZysdc3pqS?e~iPI%Vq8ehR(7=ZV#)hJ)Rj!F={^(o7Lid; zH*YR%0H~Puq26QN-#AQXaIcx#YVwRKs=CO?OslfvtZE%8pIWI_k#eeq?%yb=oBTjK zR&Ly*pA$fEQt#e4q6(srOeB#i&O|n~0!LM1cD&`*UhB8tns&q*>~)|%t3Cu1d~>{||hK;mhlXb5NsXb5NsXb5Ns zXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5NsXb5Ns aXb5NsXb5NsXb5NsXb5NsXbAjX1pWss7xZxe literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/q.wav b/sources/lib/plugins/captcha/lang/en/audio/q.wav new file mode 100755 index 0000000000000000000000000000000000000000..24fc9c0e7553a83f1b08e5bf9145cce6b7e3ffab GIT binary patch literal 32798 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 C_weBW literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/r.wav b/sources/lib/plugins/captcha/lang/en/audio/r.wav new file mode 100755 index 0000000000000000000000000000000000000000..8f557824d53f8a09ae16bdf15cbd00b395711432 GIT binary patch literal 35830 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/s.wav b/sources/lib/plugins/captcha/lang/en/audio/s.wav new file mode 100755 index 0000000000000000000000000000000000000000..c92e5ba66536634cde26a4256705acd3b5edbf56 GIT binary patch literal 35374 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/w.wav b/sources/lib/plugins/captcha/lang/en/audio/w.wav new file mode 100755 index 0000000000000000000000000000000000000000..b0d7659420e1ff0e3647935b8ba490b938e3307a GIT binary patch literal 34862 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/y.wav b/sources/lib/plugins/captcha/lang/en/audio/y.wav new file mode 100755 index 0000000000000000000000000000000000000000..4edf31f17b4d9711ce5a25f13152e6de7b8c2e8f GIT binary patch literal 35070 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 RcnEk1cnEk1{J)35{{g>BU8Vp4 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/audio/z.wav b/sources/lib/plugins/captcha/lang/en/audio/z.wav new file mode 100755 index 0000000000000000000000000000000000000000..f329629f9a624fbdcb43d159cd9e242d01952c08 GIT binary patch literal 34382 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/lang/en/lang.php b/sources/lib/plugins/captcha/lang/en/lang.php new file mode 100755 index 0000000..7163928 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/en/lang.php @@ -0,0 +1,12 @@ + + */ + +$lang['testfailed'] = "Sorry, but the CAPTCHA wasn't answered correctly. Maybe you're not human at all?"; +$lang['fillcaptcha'] = "Please fill all the letters into the box to prove you're human."; +$lang['fillmath'] = "Please solve the following equation to prove you're human."; +$lang['soundlink'] = "If you can't read the letters on the image, download this .wav file to get them read to you."; +$lang['honeypot'] = "Please keep this field empty: "; diff --git a/sources/lib/plugins/captcha/lang/en/settings.php b/sources/lib/plugins/captcha/lang/en/settings.php new file mode 100755 index 0000000..fe1714c --- /dev/null +++ b/sources/lib/plugins/captcha/lang/en/settings.php @@ -0,0 +1,23 @@ + + */ + +$lang['mode'] = "Which type of CAPTCHA to use?"; +$lang['mode_o_js'] = "Text (prefilled with JavaScript)"; +$lang['mode_o_text'] = "Text (manual only)"; +$lang['mode_o_math'] = "Math Problem"; +$lang['mode_o_question'] = "Fixed Question"; +$lang['mode_o_image'] = "Image (bad accessibility)"; +$lang['mode_o_audio'] = "Image+Audio (better accessibility)"; +$lang['mode_o_figlet'] = "Figlet ASCII Art (bad accessibility)"; + +$lang['forusers'] = "Use CAPTCHA for logged in users, too?"; +$lang['loginprotect'] = "Require a CAPTCHA to login?"; +$lang['lettercount']= "Number of letters to use (3-16). If you increase the amount, be sure to increase the width of the image below as well."; +$lang['width'] = "Width of the CAPTCHA image (pixel)"; +$lang['height'] = "Height of the CAPTCHA image (pixel)"; +$lang['question'] = "Question for fixed question mode"; +$lang['answer'] = "Answer for fixed question mode"; diff --git a/sources/lib/plugins/captcha/lang/eo/lang.php b/sources/lib/plugins/captcha/lang/eo/lang.php new file mode 100755 index 0000000..01ed128 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/eo/lang.php @@ -0,0 +1,13 @@ + + * @author Robert Bogenschneider + */ +$lang['testfailed'] = 'Pardonon, sed CAPTCHA ne respondis korekte. Eble vi tute ne estas homo, ĉu?'; +$lang['fillcaptcha'] = 'Bonvolu tajpi ĉiujn literojn en la kampeton, por pruvi ke vi estas homo.'; +$lang['fillmath'] = 'Bonvolu solvi sekvan ekvacion por pruvi, ke vi estas homa.'; +$lang['soundlink'] = 'Se vi ne povas legi la literojn en la bildo, ŝarĝu tiun .wav-dosieron por aŭdi ilin.'; +$lang['honeypot'] = 'Bonvolu lasi tiun kampon malplena:'; diff --git a/sources/lib/plugins/captcha/lang/eo/settings.php b/sources/lib/plugins/captcha/lang/eo/settings.php new file mode 100755 index 0000000..c197757 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/eo/settings.php @@ -0,0 +1,22 @@ + + * @author Robert Bogenschneider + */ +$lang['mode'] = 'Kiun varianton de CAPTCHA uzi?'; +$lang['mode_o_js'] = 'Teksto (prilaborita per Java-skripto)'; +$lang['mode_o_text'] = 'Teksto (nur permane)'; +$lang['mode_o_math'] = 'Matematika problemo'; +$lang['mode_o_question'] = 'Fiksa demando'; +$lang['mode_o_image'] = 'Bildo (malbona alirebleco)'; +$lang['mode_o_audio'] = 'Bildo+Sono (pli bona alirebleco)'; +$lang['mode_o_figlet'] = 'Figlet ASCII - arto (malbona alirebleco)'; +$lang['forusers'] = 'Uzi CAPTCHA-n ankaŭ por ensalutintaj uzantoj?'; +$lang['lettercount'] = 'Kvanto da uzendaj literoj (3-16). Se vi pligrandigas la kvanton, certigu ke vi same pligrandigas la larĝecon de la suba bildo.'; +$lang['width'] = 'Larĝeco de CAPTCHA-bildo (pikseloj)'; +$lang['height'] = 'Alteco de CAPTCHA-bildo (pikseloj)'; +$lang['question'] = 'Demando por fiks-demanda funkciado'; +$lang['answer'] = 'Respondo por fiks-demanda funkciado'; diff --git a/sources/lib/plugins/captcha/lang/es/lang.php b/sources/lib/plugins/captcha/lang/es/lang.php new file mode 100755 index 0000000..91f5396 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/es/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Lo sentimos, pero el CAPTCHA no fue respondido correctamente. Tal vez no eres una persona.'; +$lang['fillcaptcha'] = 'Por favor, complete todas las letras de la caja para demostrar que eres una persona.'; +$lang['fillmath'] = 'Por favor, resuelve la siguiente ecuación para demostrar que eres una persona.'; +$lang['soundlink'] = 'Si no puede leer toda las letras de la imagen, descargue el archivo wav que lo leerá por ti.'; +$lang['honeypot'] = 'Por favor, mantenga este campo vacío: '; diff --git a/sources/lib/plugins/captcha/lang/es/settings.php b/sources/lib/plugins/captcha/lang/es/settings.php new file mode 100755 index 0000000..8e02dd3 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/es/settings.php @@ -0,0 +1,20 @@ + + */ +$lang['mode'] = '¿Qué tipo de CAPTCHA usará?'; +$lang['mode_o_js'] = 'Texto (rellenados con JavaScript)'; +$lang['mode_o_text'] = 'Texto (manual)'; +$lang['mode_o_math'] = 'Problemas de matemáticas'; +$lang['mode_o_question'] = 'Pregunta fija'; +$lang['mode_o_image'] = 'Imagen (peor accesibilidad)'; +$lang['mode_o_audio'] = 'Imagen + Audio (peor accesibilidad)'; +$lang['forusers'] = '¿Utilizar CAPTCHA para los usuarios registrados también?'; +$lang['lettercount'] = 'Número de letras para usar (3-16). Si aumenta la cantidad, asegúrese de incrementar el ancho de la imagen de abajo también.'; +$lang['width'] = 'Ancho de la imagen CAPTCHA (pixel)'; +$lang['height'] = 'Altura de la imagen CAPTCHA (pixel)'; +$lang['question'] = 'Pregunta para el modo de pregunta fija'; +$lang['answer'] = 'Responda al modo de pregunta fija'; diff --git a/sources/lib/plugins/captcha/lang/fa/lang.php b/sources/lib/plugins/captcha/lang/fa/lang.php new file mode 100644 index 0000000..53f1fec --- /dev/null +++ b/sources/lib/plugins/captcha/lang/fa/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'متاسفم، شما به درستی مقدار کپچا را جواب نداده اید. لطفا با دقت بیشتری آن را پر نمایید.'; +$lang['fillcaptcha'] = 'لطفا تمام حروف تصویر کپچا را وارد نمایید. می خواهیم مطمئن شویم شما ربات نیستید.'; +$lang['fillmath'] = 'لطفا معادله را حل کرده و پاسخ را وارد نمایید. می خواهیم مطمئن شویم شما ربات نیستید.'; +$lang['soundlink'] = 'اگر تصویر نامفهوم است. این فایل صوتی را دانلود کرده تا آن را برای شما بخواند.'; +$lang['honeypot'] = 'لطفا این بخش را خالی بگذارید: '; diff --git a/sources/lib/plugins/captcha/lang/fa/settings.php b/sources/lib/plugins/captcha/lang/fa/settings.php new file mode 100644 index 0000000..bfc5c8e --- /dev/null +++ b/sources/lib/plugins/captcha/lang/fa/settings.php @@ -0,0 +1,23 @@ + + * @author Sam01 + */ +$lang['mode'] = 'از کدام نوع کپچا می خواهید استفاده کنید؟'; +$lang['mode_o_js'] = 'متن (با جاوااسکریپت تنظیم می شود)'; +$lang['mode_o_text'] = 'متن (فقط دستی)'; +$lang['mode_o_math'] = 'سوال ریاضی'; +$lang['mode_o_question'] = 'سوال ثابت'; +$lang['mode_o_image'] = 'عکس (دسترسی بد)'; +$lang['mode_o_audio'] = 'عکس+صوت (دسترسی بهتر)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (دسترسی بد)'; +$lang['forusers'] = ' آیا برای کاربران وارد شده به سایت نیز از کپچا استفاده شود؟'; +$lang['loginprotect'] = 'برای ورود به سایت کپچا نیاز باشد؟'; +$lang['lettercount'] = 'تعداد حروف مورد استفاده (3 تا 16 حرف). اگر شما مقدار را اضافه می کنید، مطمئن شوید که عرض تصویر را متناظرا افزایش دهید.'; +$lang['width'] = 'عرض تصویر کپچا (پیکسل)'; +$lang['height'] = 'ارتفاع تصویر کپچا (پیکسل)'; +$lang['question'] = 'سوال برای حالت «سوال ثابت« '; +$lang['answer'] = 'پاسخ سوال برای حالت «سوال ثابت»'; diff --git a/sources/lib/plugins/captcha/lang/fr/lang.php b/sources/lib/plugins/captcha/lang/fr/lang.php new file mode 100755 index 0000000..a1b3e53 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/fr/lang.php @@ -0,0 +1,14 @@ + + * @author bruno + * @author Fabrice Dejaigher + */ +$lang['testfailed'] = 'Désolé, vous n\'avez pas répondu correctement au test anti-spam. Peut-être n\'êtes vous pas humain ?'; +$lang['fillcaptcha'] = 'Merci de recopier le code ci-contre pour prouver que vous êtes humain :'; +$lang['fillmath'] = 'S\'il vous plaît résolvez l\'équation suivante pour prouver que vous êtes humain.'; +$lang['soundlink'] = 'Si vous ne pouvez pas lire le code, téléchargez ce fichier .wav pour l\'écouter.'; +$lang['honeypot'] = 'Merci de laisser ce champ vide : '; diff --git a/sources/lib/plugins/captcha/lang/fr/settings.php b/sources/lib/plugins/captcha/lang/fr/settings.php new file mode 100755 index 0000000..70fc879 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/fr/settings.php @@ -0,0 +1,25 @@ + + * @author bruno + * @author Fabrice Dejaigher + * @author Pietroni + */ +$lang['mode'] = 'Quel type de CAPTCHA utiliser ?'; +$lang['mode_o_js'] = 'Texte (prérempli avec JavaScript)'; +$lang['mode_o_text'] = 'Texte (remplissage manuel)'; +$lang['mode_o_math'] = 'Problème mathématique'; +$lang['mode_o_question'] = 'Question fixe'; +$lang['mode_o_image'] = 'Image (mauvaise accessibilité)'; +$lang['mode_o_audio'] = 'Image + Audio (meilleure accessibilité)'; +$lang['mode_o_figlet'] = 'ASCII Art (mauvaise accessibilité)'; +$lang['forusers'] = 'Utiliser également le CAPTCHA pour les utilisateurs connectés ?'; +$lang['loginprotect'] = 'Exiger un CAPTCHA pour se connecter?'; +$lang['lettercount'] = 'Nombre de lettres à utiliser (3 à 16). Pensez à augmenter la taille de l\'image ci-dessous en adéquation avec le nombre de lettres afin que celles-ci soient correctement affichées.'; +$lang['width'] = 'Largeur de l\'image du CAPTCHA (en pixels)'; +$lang['height'] = 'Hauteur de l\'image du CAPTCHA (en pixels)'; +$lang['question'] = 'Question pour le mode \'question fixe\''; +$lang['answer'] = 'Réponse pour le mode \'question fixe\''; diff --git a/sources/lib/plugins/captcha/lang/hu/lang.php b/sources/lib/plugins/captcha/lang/hu/lang.php new file mode 100755 index 0000000..49bd062 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/hu/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Rosszul válaszoltál a CAPTCHA-ra. Lehet, hogy nem is ember vagy?'; +$lang['fillcaptcha'] = 'Kérlek írd be az összes betűt a dobozba, hogy bebizonyítsd, ember vagy.'; +$lang['fillmath'] = 'Kérlek oldd meg az alábbi egyenletet, hogy bebizonyítsd, ember vagy.'; +$lang['soundlink'] = 'Ha nem látod a képen szereplő szöveget, töltsd le ezt a .wav fájlt, amiben felolvassák.'; +$lang['honeypot'] = 'Ezt a mezőt kérlek hagyd üresen:'; diff --git a/sources/lib/plugins/captcha/lang/hu/settings.php b/sources/lib/plugins/captcha/lang/hu/settings.php new file mode 100755 index 0000000..348363c --- /dev/null +++ b/sources/lib/plugins/captcha/lang/hu/settings.php @@ -0,0 +1,22 @@ + + * @author Marina Vladi + */ +$lang['mode'] = 'Milyen CAPTCHA-t használjunk?'; +$lang['mode_o_js'] = 'Szöveg (JavaScript által kitöltve)'; +$lang['mode_o_text'] = 'Szöveg (kézzel kitöltendő)'; +$lang['mode_o_math'] = 'Matematikai feladat'; +$lang['mode_o_question'] = 'Biztonsági kérdés'; +$lang['mode_o_image'] = 'Kép (nehezen érthető)'; +$lang['mode_o_audio'] = 'Kép+hang (jobban érthető)'; +$lang['mode_o_figlet'] = 'FIGlet-betűrajz (nehezen érthető)'; +$lang['forusers'] = 'Bejelentkezett felhasználóknál is használjunk CAPTCHA-t?'; +$lang['lettercount'] = 'Felhasználandó betűk száma (3-16). Ha növeled a karakterek számát, ne felejtsd el a kép szélességét is megváltoztatni.'; +$lang['width'] = 'CAPTCHA-hoz felhasznált kép szélessége (pixel)'; +$lang['height'] = 'CAPTCHA-hoz felhasznált kép magassága (pixel)'; +$lang['question'] = 'Biztonsági kérdés mód kérdése'; +$lang['answer'] = 'Válasz a biztonsági kérdésre'; diff --git a/sources/lib/plugins/captcha/lang/is/lang.php b/sources/lib/plugins/captcha/lang/is/lang.php new file mode 100755 index 0000000..652978c --- /dev/null +++ b/sources/lib/plugins/captcha/lang/is/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Því miður, en staðfestingarkóðanum var ekki rétt svarað. Kannski ertu ekki mennsk(ur) þrátt fyrir allt?'; +$lang['fillcaptcha'] = 'Vinsamlegast ritaðu alla stafina inn í reitinn til að sanna að þú sért manneskja.'; +$lang['fillmath'] = 'Vinsamlegast leystu eftirfarandi jöfnu til að sanna að þú sért manneskja.'; +$lang['soundlink'] = 'Ef þú getur ekki lesið stafina á myndinni, sæktu þá þessa .wav skrá til að fá stafina lesna fyrir þig.'; +$lang['honeypot'] = 'Vinsamlegast skildu þennan reit eftir auðan:'; diff --git a/sources/lib/plugins/captcha/lang/is/settings.php b/sources/lib/plugins/captcha/lang/is/settings.php new file mode 100755 index 0000000..2867f30 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/is/settings.php @@ -0,0 +1,22 @@ + + */ +$lang['mode'] = 'Hverslags stafestingarkóða á að nota?'; +$lang['mode_o_js'] = 'Texta (fylltan fyrirfram með JavaScript)'; +$lang['mode_o_text'] = 'Texta (aðeins handvirkt)'; +$lang['mode_o_math'] = 'Stærðfræðiþraut'; +$lang['mode_o_question'] = 'Fyrirfram ákveðin spurning'; +$lang['mode_o_image'] = 'Mynd (slæmt aðgengi fatlaðra)'; +$lang['mode_o_audio'] = 'Mynd og hljóð (betra aðgengi fatlaðra)'; +$lang['mode_o_figlet'] = 'Figlet ASCII mynd (slæmt aðgengi fatlaðra)'; +$lang['forusers'] = 'Á að nota staðfestingarkóða fyrir innskráða notendur líka?'; +$lang['loginprotect'] = 'Þarf að nota staðfestingarkóða til að skrá inn?'; +$lang['lettercount'] = 'Fjöldi stafa sem á að nota (3-16). Ef þú eykur fjöldann, vertu þá viss um að auka breidd myndarinnar að neðan einnig.'; +$lang['width'] = 'Breidd staðfestingarmyndarinnar í punktum'; +$lang['height'] = 'Hæð staðfestingarmyndarinnar í punktum'; +$lang['question'] = 'Spurning fyrir fyrir ákveðnu staðfestingarspurninguna'; +$lang['answer'] = 'Svar fyrir fyrirfram ákveðnu staðfestingarspurninguna'; diff --git a/sources/lib/plugins/captcha/lang/it/lang.php b/sources/lib/plugins/captcha/lang/it/lang.php new file mode 100755 index 0000000..444023c --- /dev/null +++ b/sources/lib/plugins/captcha/lang/it/lang.php @@ -0,0 +1,13 @@ + + */ +$lang['testfailed'] = 'Spiacente, ma non hai risposto correttamente a CAPTCHA. Potresti non essere del tutto umano.'; +$lang['fillcaptcha'] = 'Per favore inserisci le lettere nel box accanto per provare che sei una persona reale.'; +$lang['fillmath'] = 'Per favore risolvi la seguente equazione per dimostrare che sei un essere umano.'; +$lang['soundlink'] = 'Se non riesci a leggere le lettere nell\'immagine, scarica questo file .wav ed eseguilo, leggerà le lettere per te.'; +$lang['honeypot'] = 'Per favore lascia questo campo vuoto:'; diff --git a/sources/lib/plugins/captcha/lang/it/settings.php b/sources/lib/plugins/captcha/lang/it/settings.php new file mode 100755 index 0000000..b45b957 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/it/settings.php @@ -0,0 +1,23 @@ + + */ +$lang['mode'] = 'Che tipo di CAPTCHA vuoi usare?'; +$lang['mode_o_js'] = 'Testo (precompilato con JavaScript)'; +$lang['mode_o_text'] = 'Testo (Solo Manuale)'; +$lang['mode_o_math'] = 'Problema di matematica'; +$lang['mode_o_question'] = 'Domanda Immutabile'; +$lang['mode_o_image'] = 'Immagine (Non molto Accessibile)'; +$lang['mode_o_audio'] = 'Immagine + Audio (Migliore Accessibilità)'; +$lang['mode_o_figlet'] = 'Immagine ASCII FIGlet (Non molto Accessibile)'; +$lang['forusers'] = 'Vuoi usare CAPTCHA anche per gli utenti loggati?'; +$lang['loginprotect'] = 'Richiedere un CAPTCHA per l\'accesso?'; +$lang['lettercount'] = 'Numero di lettere da usare (3-16). Se aumenti il numero, accertati di aumentare anche la larghezza dell\'immagine qui sotto.'; +$lang['width'] = 'Larghezza dell\'immagine di CAPTCHA (pixel)'; +$lang['height'] = 'Altezza dell\'immagine di CAPTCHA (pixel)'; +$lang['question'] = 'Domanda per la modalità Domanda Immutabile'; +$lang['answer'] = 'Risposta per la modalità Domanda Immutabile'; diff --git a/sources/lib/plugins/captcha/lang/ja/lang.php b/sources/lib/plugins/captcha/lang/ja/lang.php new file mode 100755 index 0000000..7e7fd25 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ja/lang.php @@ -0,0 +1,13 @@ + + * @author Hideaki SAWADA + */ +$lang['testfailed'] = '申し訳ありませんが、CAPTCHAに対して適切に応答していません。おそらくですが人ではありませんね?'; +$lang['fillcaptcha'] = '人間の証明として、ボックス内の全ての文字を入力してください。'; +$lang['fillmath'] = '人間の証明として、以下の数式の答えを入力して下さい。'; +$lang['soundlink'] = '画像の文字が読めなければ、文字を読んだ.wavファイルをダウンロードして下さい。'; +$lang['honeypot'] = 'この項目は空のままにして下さい:'; diff --git a/sources/lib/plugins/captcha/lang/ja/settings.php b/sources/lib/plugins/captcha/lang/ja/settings.php new file mode 100755 index 0000000..1fb5372 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ja/settings.php @@ -0,0 +1,24 @@ + + * @author Hideaki SAWADA + * @author Ikuo Obataya + */ +$lang['mode'] = '認証の方式'; +$lang['mode_o_js'] = '文字 (JavaScriptによる自動入力)'; +$lang['mode_o_text'] = '文字 (手動入力)'; +$lang['mode_o_math'] = '計算式'; +$lang['mode_o_question'] = '固定質問'; +$lang['mode_o_image'] = '画像 (低アクセシビリティ)'; +$lang['mode_o_audio'] = '画像+音声 (中アクセシビリティ)'; +$lang['mode_o_figlet'] = 'Figlet [アルファベットAA] (低アクセシビリティ)'; +$lang['forusers'] = 'ログインユーザーに対してもCAPTCHA認証を行う'; +$lang['loginprotect'] = 'ログインにCAPTCHAを要求しますか?'; +$lang['lettercount'] = '使用する文字数(3~16)。文字数を増やす場合は下の画像の幅も同様に増やして下さい。'; +$lang['width'] = 'CAPTCHA画像の幅 (ピクセル)'; +$lang['height'] = 'CAPTCHA画像の高さ(ピクセル)'; +$lang['question'] = '固定質問方式の質問'; +$lang['answer'] = '固定質問方式の回答'; diff --git a/sources/lib/plugins/captcha/lang/ko/lang.php b/sources/lib/plugins/captcha/lang/ko/lang.php new file mode 100755 index 0000000..fb254a0 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ko/lang.php @@ -0,0 +1,14 @@ + + * @author Myeongjin + * @author chobkwon + */ +$lang['testfailed'] = '죄송하지만 CAPTCHA(캡차)가 올바르지 않습니다. 아마도 인간이 아니죠?'; +$lang['fillcaptcha'] = '인간임을 증명하기 위해 상자에 있는 모든 글자를 채워주세요.'; +$lang['fillmath'] = '인간임을 증명하기 위해 다음 방정식을 푸세요.'; +$lang['soundlink'] = '그림에 있는 글자를 읽을 수 없다면, 당신에게 들려줄 이 .wav 파일을 다운로드하세요.'; +$lang['honeypot'] = '이 필드는 비어 있도록 유지하세요:'; diff --git a/sources/lib/plugins/captcha/lang/ko/settings.php b/sources/lib/plugins/captcha/lang/ko/settings.php new file mode 100755 index 0000000..49865a8 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ko/settings.php @@ -0,0 +1,24 @@ + + * @author Myeongjin + * @author chobkwon + */ +$lang['mode'] = '어떤 CAPTCHA(캡차) 종류를 사용하겠습니까?'; +$lang['mode_o_js'] = '글자 (자바스크립트로 미리 채워짐)'; +$lang['mode_o_text'] = '글자 (설명문서만)'; +$lang['mode_o_math'] = '수학 문제'; +$lang['mode_o_question'] = '고정된 질문'; +$lang['mode_o_image'] = '그림 (접근성이 낮음)'; +$lang['mode_o_audio'] = '그림+소리 (접근성이 더 나음)'; +$lang['mode_o_figlet'] = 'Figlet ASCII 아트 (접근성이 낮음)'; +$lang['forusers'] = '로그인한 사용자도 CAPTCHA(캡차)를 사용하겠습니까?'; +$lang['loginprotect'] = '로그인하려면 CAPTCHA(캡차)가 필요합니까?'; +$lang['lettercount'] = '사용할 글자 수. (3-16) 양을 증가하면, 아래 그림의 너비도 증가해야 합니다.'; +$lang['width'] = 'CAPTCHA(캡차) 그림의 너비 (픽셀)'; +$lang['height'] = 'CAPTCHA(캡차) 그림의 높이 (픽셀)'; +$lang['question'] = '고정된 질문 모드에 대한 질문'; +$lang['answer'] = '고정된 질문 모드에 대한 답변'; diff --git a/sources/lib/plugins/captcha/lang/nl/lang.php b/sources/lib/plugins/captcha/lang/nl/lang.php new file mode 100755 index 0000000..bf07a56 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/nl/lang.php @@ -0,0 +1,14 @@ + + * @author Mark C. Prins + * @author Mark Prins + */ +$lang['testfailed'] = 'Sorry, maar de CAPTCHA is onjuist beantwoord. Misschien ben je toch geen mens?'; +$lang['fillcaptcha'] = 'Tik de letters in het onderstaande vakje over om aan te tonen dat je een mens bent.'; +$lang['fillmath'] = 'Geef antwoord op de rekensom om aan te tonen dat je een mens bent.'; +$lang['soundlink'] = 'Als je de letters in de afbeelding niet kunt lezen kun je dit .wav bestand downloaden om ze te laten voorlezen.'; +$lang['honeypot'] = 'Dit veld leeg laten'; diff --git a/sources/lib/plugins/captcha/lang/nl/settings.php b/sources/lib/plugins/captcha/lang/nl/settings.php new file mode 100755 index 0000000..0050236 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/nl/settings.php @@ -0,0 +1,25 @@ + + * @author Mark C. Prins + * @author Mark Prins + * @author Johan Wijnker + */ +$lang['mode'] = 'Welk type CAPTCHA wil je gebruiken?'; +$lang['mode_o_js'] = 'Tekst (automatisch ingevuld via JavaScript)'; +$lang['mode_o_text'] = 'Tekst (handmatig overtikken)'; +$lang['mode_o_math'] = 'Wiskunde opgave (eenvoudige rekensom)'; +$lang['mode_o_question'] = 'Vaste vraag'; +$lang['mode_o_image'] = 'Afbeelding (slechte toegankelijkhied)'; +$lang['mode_o_audio'] = 'Afbeelding+Audio (betere toegankelijkheid)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (slechte toegankelijkheid)'; +$lang['forusers'] = 'Ook CAPTCHA voor ingelogde gebruikers gebruiken?'; +$lang['loginprotect'] = 'Vereis een CAPTCHA om in te loggen?'; +$lang['lettercount'] = 'Aantal te gebruiken letters (3-16). Let er op ook de breedte van de afbeelding hieronder te vergroten als het aantal wordt verhoogd'; +$lang['width'] = 'Breedte van de CAPTCHA afbeelding (pixels)'; +$lang['height'] = 'Hoogte van de CAPTCHA afbeelding (pixels)'; +$lang['question'] = 'Vraag voor de vaste vraag modus'; +$lang['answer'] = 'Antwoord voor de vaste vraag modus'; diff --git a/sources/lib/plugins/captcha/lang/nn/lang.php b/sources/lib/plugins/captcha/lang/nn/lang.php new file mode 100644 index 0000000..dc20a1a --- /dev/null +++ b/sources/lib/plugins/captcha/lang/nn/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Lei for det, men CAPTHCA-svaret ditt var ikkje korrekt. Er du kanskje ikkje eit menneske likevel?'; +$lang['fillcaptcha'] = 'Gjer vel og fyll inn alle bokstavane i boksen for å bevise at du er eit menenske.'; +$lang['fillmath'] = 'Gjer vel og løys denne likninga for å bevise at du er menneske'; +$lang['soundlink'] = 'Dersom du ikkje kan lese bokstavane i bildet, last ned .wav-fila for å få dei opplest'; +$lang['honeypot'] = 'Hald dette feltet tomt'; diff --git a/sources/lib/plugins/captcha/lang/nn/settings.php b/sources/lib/plugins/captcha/lang/nn/settings.php new file mode 100644 index 0000000..5bf2d60 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/nn/settings.php @@ -0,0 +1,21 @@ + + */ +$lang['mode'] = 'Kva type CAPTCA skal du bruke?'; +$lang['mode_o_js'] = 'Tekst (forfylt med JavaScript)'; +$lang['mode_o_text'] = 'Tekst (berre manuell)'; +$lang['mode_o_math'] = 'Matteproblem'; +$lang['mode_o_question'] = 'Fast spørsmål'; +$lang['mode_o_image'] = 'Bilde (vanskeleg tilgjenge)'; +$lang['mode_o_audio'] = 'Bilde og lys (betre tilgjenge)'; +$lang['mode_o_figlet'] = 'Figlet ASCII-kunst (vanskeleg tilgjenge)'; +$lang['forusers'] = 'Bruk CAPTCHA for innlogga brukarar'; +$lang['lettercount'] = 'Kor mange bokstavar skal brukast (3-16). Dersom du aukar mengda, må du og utvide storleiken på feltet.'; +$lang['width'] = 'Breidda på CAPTCHA-bildet (pikslar)'; +$lang['height'] = 'Høgda på CAPTCHA-bildet (i pikslar)'; +$lang['question'] = 'Fast spørsmål'; +$lang['answer'] = 'Svar på fast spørsmål'; diff --git a/sources/lib/plugins/captcha/lang/no/lang.php b/sources/lib/plugins/captcha/lang/no/lang.php new file mode 100755 index 0000000..0ef1790 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/no/lang.php @@ -0,0 +1,13 @@ + + * @author Arne Hanssen + */ +$lang['testfailed'] = 'Dessverre, du svarte ikke rett på CAPTCHAen. Kanskje du ikke er et menneske likevel?'; +$lang['fillcaptcha'] = 'Vennligst fyll inn alle bokstavene i feltet for å bevise at du er et menneske.'; +$lang['fillmath'] = 'Vennligst løys denne ligninga for å bevise at du er et menneske.'; +$lang['soundlink'] = 'Dersom du ikke kan lese bokstavene på bildet, last ned denne .wav-fila for å få de opplest.'; +$lang['honeypot'] = 'Vennligst hold dette feltet tomt.'; diff --git a/sources/lib/plugins/captcha/lang/no/settings.php b/sources/lib/plugins/captcha/lang/no/settings.php new file mode 100755 index 0000000..677e6ce --- /dev/null +++ b/sources/lib/plugins/captcha/lang/no/settings.php @@ -0,0 +1,23 @@ + + * @author Daniel Raknes + */ +$lang['mode'] = 'Hvilken type CAPTCHA vil du bruke?'; +$lang['mode_o_js'] = 'Tekst (forfylt med JavaScript)'; +$lang['mode_o_text'] = 'Tekst (bare manuelt)'; +$lang['mode_o_math'] = 'Matteproblem'; +$lang['mode_o_question'] = 'Fast spørsmål'; +$lang['mode_o_image'] = 'Bilde (vanskelig tilgjengelig)'; +$lang['mode_o_audio'] = 'Bilde og lyd (bedre tilgjengelighet)'; +$lang['mode_o_figlet'] = 'Figlet ASCII-kunst (vanskelig tilgjengelig)'; +$lang['forusers'] = 'Bruke CAPTCHA for innlogga brukere?'; +$lang['loginprotect'] = 'Kreve CAPTCHA ved innlogging?'; +$lang['lettercount'] = 'Antall bokstaver (3-16). Om du øker antallet må du også øke bredden av bildet under.'; +$lang['width'] = 'Bredde på CAPTCHA-bildet (i piksler)'; +$lang['height'] = 'Høyde på CAPTCHA-bildet (i piksler)'; +$lang['question'] = 'Fast spørsmål'; +$lang['answer'] = 'Svar på fast spørsmål'; diff --git a/sources/lib/plugins/captcha/lang/pl/lang.php b/sources/lib/plugins/captcha/lang/pl/lang.php new file mode 100755 index 0000000..cb23f92 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pl/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Wybacz, ale CAPTCHA nie została uzupełniona poprawnie. Może wcale nie jesteś człowiekiem?'; +$lang['fillcaptcha'] = 'Proszę wprowadzić wszystkie znaki w pole, by udowodnić, że jesteś człowiekiem.'; +$lang['fillmath'] = 'Proszę rozwiązać poniższe równanie, by udowodnić, że jesteś człowiekiem.'; +$lang['soundlink'] = 'Jeżeli nie jesteś w stanie przeczytać znaków widocznych na obrazie pobierz plik .wav, w którym zawarta jest ich głosowa reprezentacja.'; +$lang['honeypot'] = 'Proszę pozostawić to pole puste.'; diff --git a/sources/lib/plugins/captcha/lang/pl/settings.php b/sources/lib/plugins/captcha/lang/pl/settings.php new file mode 100755 index 0000000..33605ed --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pl/settings.php @@ -0,0 +1,21 @@ + + * @author Mati + */ +$lang['mode'] = 'Jaki typ CAPTCHA zastosować?'; +$lang['mode_o_text'] = 'Tekst (tylko ręcznie)'; +$lang['mode_o_math'] = 'Problem matematyczny'; +$lang['mode_o_question'] = 'Stałe pytanie'; +$lang['mode_o_image'] = 'Obraz (słaba dostępność)'; +$lang['mode_o_audio'] = 'Obraz+Dźwięk (lepsza dostępność)'; +$lang['mode_o_figlet'] = 'Sztuka figletowych ASCII (słaba dostępność)'; +$lang['forusers'] = 'Stosować CAPTCHA również dla zalogowanych użytkowników?'; +$lang['lettercount'] = 'Wykorzystywane liczby i litery (3-16). Pamiętaj by wraz ze wzrostem ich ilości zwiększać również szerokość obrazu poniżej.'; +$lang['width'] = 'Szerokość obrazu CAPTCHA (w pikselach)'; +$lang['height'] = 'Wysokość obrazu CAPTCHA (w pikselach)'; +$lang['question'] = 'Pytanie stosowane w trybie stałego pytania'; +$lang['answer'] = 'Odpowiedź na stałe pytanie'; diff --git a/sources/lib/plugins/captcha/lang/pt-br/lang.php b/sources/lib/plugins/captcha/lang/pt-br/lang.php new file mode 100755 index 0000000..7a37dd1 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pt-br/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Desculpe, mas o CAPTCHA não foi preenchido corretamente. Talvez você não seja humano?'; +$lang['fillcaptcha'] = 'Por favor preencha todas as letras dentro da caixa para provar que você é humano.'; +$lang['fillmath'] = 'Por favor resolva a seguinte equação para provar que você é humano.'; +$lang['soundlink'] = 'Se você não pode ler as letras na imagem, faça o download desse .wav para que elas sejam lidas para você.'; +$lang['honeypot'] = 'Por favor deixe esse campo em branco:'; diff --git a/sources/lib/plugins/captcha/lang/pt-br/settings.php b/sources/lib/plugins/captcha/lang/pt-br/settings.php new file mode 100755 index 0000000..01d3e84 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pt-br/settings.php @@ -0,0 +1,23 @@ + + * @author Oze Projetos + */ +$lang['mode'] = 'Qual tipo de CAPTCHA usar?'; +$lang['mode_o_js'] = 'Texto (pré-preenchido com JavaScript)'; +$lang['mode_o_text'] = 'Texto (somente manual)'; +$lang['mode_o_math'] = 'Problema de Matemática'; +$lang['mode_o_question'] = 'Questão Resolvida'; +$lang['mode_o_image'] = 'Imagem (acessibilidade ruim)'; +$lang['mode_o_audio'] = 'Imagem+Áudio (acessibilidade melhor)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (acessibilidade ruim)'; +$lang['forusers'] = 'Também usar CAPTCHA para usuários logados?'; +$lang['loginprotect'] = 'Exigir um CAPTCHA para entrar?'; +$lang['lettercount'] = 'Número de letras para usar (3-16). Se você aumentar a quantidade, lembre de também aumentar a largura da imagem abaixo.'; +$lang['width'] = 'Largura da imagem do CAPTCHA (pixel)'; +$lang['height'] = 'Altura da imagem do CAPTCHA (pixel)'; +$lang['question'] = 'Pergunta para o modo de pergunta fixa'; +$lang['answer'] = 'Resposta para o modo de pergunta fixa'; diff --git a/sources/lib/plugins/captcha/lang/pt/lang.php b/sources/lib/plugins/captcha/lang/pt/lang.php new file mode 100755 index 0000000..3ee95d5 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pt/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Infelizmente o CAPTCHA não foi respondido corretamente. Talvez você afinal não seja humano?'; +$lang['fillcaptcha'] = 'Por favor preencha todas as letras na caixa para provar que é humano.'; +$lang['fillmath'] = 'Por favor resolva a seguinte equação para provar que é humano.'; +$lang['soundlink'] = 'Se não pode ler as letras na imagem, descarregue este ficheiro .wav para as ouvir.'; +$lang['honeypot'] = 'Por favor mantenha este campo vazio:'; diff --git a/sources/lib/plugins/captcha/lang/pt/settings.php b/sources/lib/plugins/captcha/lang/pt/settings.php new file mode 100755 index 0000000..4682f81 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/pt/settings.php @@ -0,0 +1,23 @@ + + * @author ANeves + */ +$lang['mode'] = 'Que tipo de CAPTCHA usar?'; +$lang['mode_o_js'] = 'Texto (pré-preenchido com JavaScript)'; +$lang['mode_o_text'] = 'Texto (somente manual)'; +$lang['mode_o_math'] = 'Problema Matemático'; +$lang['mode_o_question'] = 'Pergunta Fixa'; +$lang['mode_o_image'] = 'Imagem (má acessibilidade)'; +$lang['mode_o_audio'] = 'Imagem+Áudio (melhor acessibilidade)'; +$lang['mode_o_figlet'] = 'Arte em ASCII Figlet (má acessibilidade)'; +$lang['forusers'] = 'Também usar CAPTCHA para utilizadores autenticados?'; +$lang['loginprotect'] = 'Exigir um CAPTCHA para se autenticar.'; +$lang['lettercount'] = 'Número de letras a usar (3-16). Se aumentar a quantidade, assegure-se de aumentar também a largura da imagem, abaixo.'; +$lang['width'] = 'Largura da imagem CAPTCHA (pixel)'; +$lang['height'] = 'Altura da imagem CAPTCHA (pixel)'; +$lang['question'] = 'Pergunta para o modo de pergunta fixa'; +$lang['answer'] = 'Resposta para o modo de pergunta fixa'; diff --git a/sources/lib/plugins/captcha/lang/ru/lang.php b/sources/lib/plugins/captcha/lang/ru/lang.php new file mode 100755 index 0000000..4810ec3 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ru/lang.php @@ -0,0 +1,13 @@ + + * @author Ilya Rozhkov + */ +$lang['testfailed'] = 'Извините, код подтверждения введён неверно.'; +$lang['fillcaptcha'] = 'Пожалуйста, введите код подтверждения, чтобы доказать, что вы не робот:'; +$lang['fillmath'] = 'Ответьте пожалуйста на вопрос, чтобы доказать, что вы человек.'; +$lang['soundlink'] = 'Если вы не можете прочитать символы на изображении, загрузите и воспроизведите wav-файл.'; +$lang['honeypot'] = 'Пожалуйста, оставьте это поле пустым:'; diff --git a/sources/lib/plugins/captcha/lang/ru/settings.php b/sources/lib/plugins/captcha/lang/ru/settings.php new file mode 100755 index 0000000..dc01396 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/ru/settings.php @@ -0,0 +1,24 @@ + + * @author Ilya Rozhkov + * @author Shpak Andrey + */ +$lang['mode'] = 'Какой тип CAPTCHA использовать?'; +$lang['mode_o_js'] = 'Текст (заполнение JavaScript)'; +$lang['mode_o_text'] = 'Текст (ручной ввод)'; +$lang['mode_o_math'] = 'Математическая задача'; +$lang['mode_o_question'] = 'Конкретный вопрос'; +$lang['mode_o_image'] = 'Изображение (хорошая защита)'; +$lang['mode_o_audio'] = 'Изображение и звук (плохая защита)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (хорошая защита)'; +$lang['forusers'] = 'Использоваться CAPTCHA для зарегистрированных пользователей?'; +$lang['loginprotect'] = 'Требовать ввод CAPTCHA для входа?'; +$lang['lettercount'] = 'Количество букв (3-16). Если вы увеличиваете количество букв, не забудьте увеличить ширину изображения ниже.'; +$lang['width'] = 'Ширина изображения CAPTCHA (пиксель)'; +$lang['height'] = 'Высота изображения CAPTCHA (пиксель)'; +$lang['question'] = 'Вопрос для режима конкретного вопроса'; +$lang['answer'] = 'Ответ для режима конкретного вопроса '; diff --git a/sources/lib/plugins/captcha/lang/sk/lang.php b/sources/lib/plugins/captcha/lang/sk/lang.php new file mode 100755 index 0000000..f04ab4c --- /dev/null +++ b/sources/lib/plugins/captcha/lang/sk/lang.php @@ -0,0 +1,13 @@ + + * @author Martin Michalek + */ +$lang['testfailed'] = 'Ľutujem, ale na CAPTCHA nebolo odpovedané správne. Je možné, že by ste vôbec neboli človekom?'; +$lang['fillcaptcha'] = 'Vyplňte prosím všetky písmená v poli, aby ste dokázali, že nie ste skript.'; +$lang['fillmath'] = 'Prosím vyriešte nasledujúcu rovnicu, aby sme vás odlíšili od automatických web nástrojov.'; +$lang['soundlink'] = 'Ak nedokážete prečítať písmená na obrázku, stiahnite si tento .wav súbor a text vám prečítame.'; +$lang['honeypot'] = 'Prosím nechajte toto pole prázdne:'; diff --git a/sources/lib/plugins/captcha/lang/sk/settings.php b/sources/lib/plugins/captcha/lang/sk/settings.php new file mode 100755 index 0000000..2f6c582 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/sk/settings.php @@ -0,0 +1,22 @@ + + * @author Martin Michalek + */ +$lang['mode'] = 'Ktorý typ CAPTCHA sa má použiť?'; +$lang['mode_o_js'] = 'Text (predvyplnený JavaScriptom)'; +$lang['mode_o_text'] = 'Text (iba manuálne vložený)'; +$lang['mode_o_math'] = 'Matematický problém'; +$lang['mode_o_question'] = 'Pevne zadaná otázka'; +$lang['mode_o_image'] = 'Obrázok (pre ľudí s postihom)'; +$lang['mode_o_audio'] = 'Obrázok a zvuk (pre ľudí s menším postihom)'; +$lang['mode_o_figlet'] = 'ASCII obrázok (pre ľudí s postihom)'; +$lang['forusers'] = 'Používať CAPTCHA aj pre registrovaných užívateľov?'; +$lang['lettercount'] = 'Počet písmen (3-16). Ak zvýšite počet, zväčšite tiež šírku obrázka uvedeného nižšie.'; +$lang['width'] = 'Šírka CAPTCHA obrázku (v bodoch)'; +$lang['height'] = 'Výška CAPTCHA obrázku (v bodoch)'; +$lang['question'] = 'Otázka pre typ pevne zadanej otázky'; +$lang['answer'] = 'Odpoveď pre typ pevne zadanej otázky'; diff --git a/sources/lib/plugins/captcha/lang/tr/lang.php b/sources/lib/plugins/captcha/lang/tr/lang.php new file mode 100755 index 0000000..5132d09 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/tr/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Üzgünüz, CAPTCHA doğru cevaplanmadı. Belki bir insan değilsiniz (bot\'sunuz)?'; +$lang['fillcaptcha'] = 'İnsan olduğunuzu kanıtlamak için lütfen bütün harfleri kutuya giriniz.'; +$lang['fillmath'] = 'Lütfen şu eşitliği çözünüz ki insan olduğunuzu ispatlayınız.'; +$lang['soundlink'] = 'Eğer resimdeki harfleri okuyamıyorsanız, bu .wav dosyasını size okuması için indiriniz.'; +$lang['honeypot'] = 'Lütfen bu alanı boş bırakınız: '; diff --git a/sources/lib/plugins/captcha/lang/tr/settings.php b/sources/lib/plugins/captcha/lang/tr/settings.php new file mode 100755 index 0000000..3ab73a2 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/tr/settings.php @@ -0,0 +1,24 @@ + + * @author Ozan Hacibekiroglu + * @author İlker R. Kapaç + */ +$lang['mode'] = 'Ne çeşit CAPTCHA kullanılacak?'; +$lang['mode_o_js'] = 'Metin (JavaScript ile önceden doldurulur)'; +$lang['mode_o_text'] = 'Metin (sadece manuel)'; +$lang['mode_o_math'] = 'Matematik Problemi'; +$lang['mode_o_question'] = 'Sabit Soru'; +$lang['mode_o_image'] = 'Resim (Kötü erişebilirlik)'; +$lang['mode_o_audio'] = 'Resim+Ses (iyi erişebilirlik)'; +$lang['mode_o_figlet'] = 'Figlet ASCII Art (kötü erişebilirlik)'; +$lang['forusers'] = 'CAPTCHA giriş yapmış kullanıcılar için de kullanılsın mı?'; +$lang['loginprotect'] = 'Oturum açılışında CAPTCHA sorulsun mu?'; +$lang['lettercount'] = 'Kullanılacak harf sayısı (3-16). Karakter sayısını artırırsanız, resim genişliğinin de arttığından emin olunuz.'; +$lang['width'] = 'CAPTCHA resminin genişliği (piksel)'; +$lang['height'] = 'CAPTCHA resminin yüksekliği (piksel)'; +$lang['question'] = 'Sabit soru modu için soru'; +$lang['answer'] = 'Sabit soru modu için cevap'; diff --git a/sources/lib/plugins/captcha/lang/uk/lang.php b/sources/lib/plugins/captcha/lang/uk/lang.php new file mode 100755 index 0000000..898a138 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/uk/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['testfailed'] = 'Вибачте, ви дали неправильну CAPTCHA-відповідь. Може ви взагалі не людина?'; +$lang['fillcaptcha'] = 'Будь ласка неберіть всі символи аби підтвердити, що ви людина.'; +$lang['fillmath'] = 'Розв\'жіть, будь ласка це рівняння аби підтвердити, що ви людина.'; +$lang['soundlink'] = 'Якщо ви не можете прочитати літери на картинці, завантажте цей .wav файл і прослухайте.'; +$lang['honeypot'] = 'Залиште це поле порожнім:'; diff --git a/sources/lib/plugins/captcha/lang/uk/settings.php b/sources/lib/plugins/captcha/lang/uk/settings.php new file mode 100755 index 0000000..949c615 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/uk/settings.php @@ -0,0 +1,21 @@ + + */ +$lang['mode'] = 'Який тип CAPTCHA використати?'; +$lang['mode_o_js'] = 'Текст (заповнений JavaScript)'; +$lang['mode_o_text'] = 'Текст (лише вручну)'; +$lang['mode_o_math'] = 'Математична задача'; +$lang['mode_o_question'] = 'Фіксоване питання'; +$lang['mode_o_image'] = 'Зображення (погана впізнаваність)'; +$lang['mode_o_audio'] = 'Зображення+аудіо (краща впізнаваність)'; +$lang['mode_o_figlet'] = 'Картинка з ASCII-символів (погана впізнаваність)'; +$lang['forusers'] = 'Використовувати CAPTCHA для авторизованих користувачів?'; +$lang['lettercount'] = 'Кількість символів (3-16). Якщо ви збільшуєте кількість, розширте також картинку нижче.'; +$lang['width'] = 'Ширина CAPTCHA-зображення (пікселів)'; +$lang['height'] = 'Висота CAPTCHA-зображення (пікселів)'; +$lang['question'] = 'Питання для режиму фіксованого питання'; +$lang['answer'] = 'Відповідь для режиму фіксованого питання'; diff --git a/sources/lib/plugins/captcha/lang/zh-tw/lang.php b/sources/lib/plugins/captcha/lang/zh-tw/lang.php new file mode 100755 index 0000000..4f6355f --- /dev/null +++ b/sources/lib/plugins/captcha/lang/zh-tw/lang.php @@ -0,0 +1,13 @@ + + * @author lioujheyu + */ +$lang['testfailed'] = '很抱歉,您沒有輸入正確的 CAPTCHA 驗證碼。'; +$lang['fillcaptcha'] = '請將字母填入方框。'; +$lang['fillmath'] = '請解開下列方程式以證明你是人類'; +$lang['soundlink'] = '如果您無法閱讀圖片中的字母,請下載收聽這個 WAV 檔。'; +$lang['honeypot'] = '請保持這個欄位空白'; diff --git a/sources/lib/plugins/captcha/lang/zh-tw/settings.php b/sources/lib/plugins/captcha/lang/zh-tw/settings.php new file mode 100755 index 0000000..e494563 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/zh-tw/settings.php @@ -0,0 +1,24 @@ + + * @author lioujheyu + * @author CHENG + */ +$lang['mode'] = '使用哪種 CAPTCHA 類型?'; +$lang['mode_o_js'] = '文字 (預先用 Javascript 填入)'; +$lang['mode_o_text'] = '文字 (手動填入)'; +$lang['mode_o_math'] = '數學問題'; +$lang['mode_o_question'] = '固定問題'; +$lang['mode_o_image'] = '圖片 (易用性差)'; +$lang['mode_o_audio'] = '圖片+聲音 (易用性較佳)'; +$lang['mode_o_figlet'] = 'Figlet ASCII 藝術字 (易用性差)'; +$lang['forusers'] = '已登入使用者也要 CAPTCHA 驗證嗎?'; +$lang['loginprotect'] = '登入前需要 CAPTCHA 驗證嗎?'; +$lang['lettercount'] = '多少字母會被使用(3-16)。如果你增加使用個數,請確保同時加寬圖片長度'; +$lang['width'] = 'CAPTCHA 圖片寬度 (像素)'; +$lang['height'] = 'CAPTCHA 圖片高度 (像素)'; +$lang['question'] = '固定問題模式的問題'; +$lang['answer'] = '固定問題模式的答案'; diff --git a/sources/lib/plugins/captcha/lang/zh/lang.php b/sources/lib/plugins/captcha/lang/zh/lang.php new file mode 100755 index 0000000..7a01198 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/zh/lang.php @@ -0,0 +1,13 @@ + + * @author lainme + */ +$lang['testfailed'] = '抱歉,您输入的验证码不正确。'; +$lang['fillcaptcha'] = '请在输入框中填入验证码以证明您不是机器人。'; +$lang['fillmath'] = '请填入算式的结果以证明您不是机器人。'; +$lang['soundlink'] = '如果您无法阅读图片中的字母,请下载此 .wav 文件。'; +$lang['honeypot'] = '请将此区域留空:'; diff --git a/sources/lib/plugins/captcha/lang/zh/settings.php b/sources/lib/plugins/captcha/lang/zh/settings.php new file mode 100755 index 0000000..03548d9 --- /dev/null +++ b/sources/lib/plugins/captcha/lang/zh/settings.php @@ -0,0 +1,24 @@ + + * @author lainme + * @author 橙子狼 <2949384951@qq.com> + */ +$lang['mode'] = '使用什么类型的验证码?'; +$lang['mode_o_js'] = '文本 (预先由 JavaScript 填写)'; +$lang['mode_o_text'] = '文本 (手动输入)'; +$lang['mode_o_math'] = '算术题'; +$lang['mode_o_question'] = '固定问题'; +$lang['mode_o_image'] = '图片 (无障碍性差)'; +$lang['mode_o_audio'] = '图片+音频 (更好的无障碍性)'; +$lang['mode_o_figlet'] = 'Figlet ASCII 艺术 (无障碍性差)'; +$lang['forusers'] = '对已登入的用户也适用吗?'; +$lang['loginprotect'] = '请输入验证码'; +$lang['lettercount'] = '使用字母的数目 (3-16)。如果您增加数目,请确保同时增加图片的宽度。'; +$lang['width'] = '验证码图片宽度 (像素)'; +$lang['height'] = '验证码图片高度 (像素)'; +$lang['question'] = '固定问题模式的问题'; +$lang['answer'] = '固定问题模式的答案'; diff --git a/sources/lib/plugins/captcha/manager.dat b/sources/lib/plugins/captcha/manager.dat new file mode 100644 index 0000000..757da09 --- /dev/null +++ b/sources/lib/plugins/captcha/manager.dat @@ -0,0 +1,2 @@ +downloadurl=https://github.com/splitbrain/dokuwiki-plugin-captcha/zipball/master +installed=Sun, 20 Nov 2016 19:29:07 +0000 diff --git a/sources/lib/plugins/captcha/plugin.info.txt b/sources/lib/plugins/captcha/plugin.info.txt new file mode 100755 index 0000000..c1b3984 --- /dev/null +++ b/sources/lib/plugins/captcha/plugin.info.txt @@ -0,0 +1,8 @@ +base captcha +author Andreas Gohr +email andi@splitbrain.org +date 2016-07-06 +name CAPTCHA Plugin +desc Use a CAPTCHA challenge to protect DokuWiki against automated spam +url http://www.dokuwiki.org/plugin:captcha + diff --git a/sources/lib/plugins/captcha/script.js b/sources/lib/plugins/captcha/script.js new file mode 100755 index 0000000..3cb402c --- /dev/null +++ b/sources/lib/plugins/captcha/script.js @@ -0,0 +1,32 @@ + +jQuery(function () { + var $wrap = jQuery('#plugin__captcha_wrapper'); + if(!$wrap.length) return; + + /** + * Autofill and hide the whole CAPTCHA stuff in the simple JS mode + */ + var $code = jQuery('#plugin__captcha_code'); + if ($code.length) { + var $box = $wrap.find('input[type=text]'); + $box.first().val($code.text().replace(/([^A-Z])+/g, '')); + $wrap.hide(); + } + + /** + * Add a HTML5 player for the audio version of the CAPTCHA + */ + var $audiolink = $wrap.find('a'); + if($audiolink.length) { + var audio = document.createElement('audio'); + if(audio) { + audio.src = $audiolink.attr('href'); + $wrap.append(audio); + $audiolink.click(function (e) { + audio.play(); + e.preventDefault(); + e.stopPropagation(); + }); + } + } +}); diff --git a/sources/lib/plugins/captcha/sound.png b/sources/lib/plugins/captcha/sound.png new file mode 100755 index 0000000000000000000000000000000000000000..6056d234a9818d248987389d4a621e5c83ce0851 GIT binary patch literal 610 zcmV-o0-gPdP)FDRfPcVFW5d%9V=z{?A#;oriL5xO+n6O2X~nf!lQuE^VWXpgu83qI(qCF{ zS}dqc=wWy-JjhR6YYDxINHb)T^nMSh)vA20R`F7)lzCSCZF94My}d73T>N+m zpyXWPL`#FF;s+j3t(LL2R!6+EP98p9G9EaJe<5S)o@#CPu0JyV*YBbiNC<>y{C`3_2 zFc^fUC0P=`0GC2D0rmxry!i<{eh#|t2UjSV*w|QyY37m5W)KQZKoA6m%^;bK|K7sb zq~^Y!1U(%y>Cs5W^^bz?JUQeR7IK)M&$43OYdMwDJVcVBtSjl_Ar8Hmr2)a$eK-tv zNC4d)(7D`Piq~gVUR7m2k$BH5O6=$i%I6Kpa_sVNy!&j)9UKPT@*VWNNNm+UIUciF wPJ00!a`S;oH}3WS@hUTDnx*^y9@F3E2OYGed{u8eJ^%m!07*qoM6N<$f+a~A3jhEB literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/captcha/style.css b/sources/lib/plugins/captcha/style.css new file mode 100755 index 0000000..9f6ec0c --- /dev/null +++ b/sources/lib/plugins/captcha/style.css @@ -0,0 +1,23 @@ +.dokuwiki #plugin__captcha_wrapper img { + margin: 1px; + vertical-align: bottom; + border: 1px solid __border__; +} + +.dokuwiki #plugin__captcha_wrapper pre { + font-size: 70%; + font-family: monospace; + font-weight: bold; + border: none; + background-color: __background__; + color: __text__; + padding: 0; +} + +.dokuwiki #plugin__captcha_wrapper .no { + display: none; +} + +.dokuwiki #plugin__captcha_wrapper { +clear: left; +} diff --git a/sources/lib/plugins/captcha/wav.php b/sources/lib/plugins/captcha/wav.php new file mode 100755 index 0000000..996d52a --- /dev/null +++ b/sources/lib/plugins/captcha/wav.php @@ -0,0 +1,88 @@ + + */ + +if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__).'/../../../'); +define('NOSESSION', true); +define('DOKU_DISABLE_GZIP_OUTPUT', 1); +require_once(DOKU_INC.'inc/init.php'); +require_once(DOKU_INC.'inc/auth.php'); + +$ID = $_REQUEST['id']; +/** @var $plugin helper_plugin_captcha */ +$plugin = plugin_load('helper', 'captcha'); + +if($plugin->getConf('mode') != 'audio') { + http_status(404); + exit; +} + +$rand = $plugin->decrypt($_REQUEST['secret']); +$code = strtolower($plugin->_generateCAPTCHA($plugin->_fixedIdent(), $rand)); + +// prepare an array of wavfiles +$lc = dirname(__FILE__).'/lang/'.$conf['lang'].'/audio/'; +$en = dirname(__FILE__).'/lang/en/audio/'; +$wavs = array(); +$lettercount = $plugin->getConf('lettercount'); +if($lettercount > strlen($code)) $lettercount = strlen($code); +for($i = 0; $i < $lettercount; $i++) { + $file = $lc.$code{$i}.'.wav'; + if(!@file_exists($file)) $file = $en.$code{$i}.'.wav'; + $wavs[] = $file; +} + +header('Content-type: audio/x-wav'); +header('Content-Disposition: attachment;filename=captcha.wav'); + +echo joinwavs($wavs); + +/** + * Join multiple wav files + * + * All wave files need to have the same format and need to be uncompressed. + * The headers of the last file will be used (with recalculated datasize + * of course) + * + * @link http://ccrma.stanford.edu/CCRMA/Courses/422/projects/WaveFormat/ + * @link http://www.thescripts.com/forum/thread3770.html + */ +function joinwavs($wavs) { + $fields = join( + '/', array( + 'H8ChunkID', 'VChunkSize', 'H8Format', + 'H8Subchunk1ID', 'VSubchunk1Size', + 'vAudioFormat', 'vNumChannels', 'VSampleRate', + 'VByteRate', 'vBlockAlign', 'vBitsPerSample' + ) + ); + + $data = ''; + foreach($wavs as $wav) { + $fp = fopen($wav, 'rb'); + $header = fread($fp, 36); + $info = unpack($fields, $header); + + // read optional extra stuff + if($info['Subchunk1Size'] > 16) { + $header .= fread($fp, ($info['Subchunk1Size'] - 16)); + } + + // read SubChunk2ID + $header .= fread($fp, 4); + + // read Subchunk2Size + $size = unpack('vsize', fread($fp, 4)); + $size = $size['size']; + + // read data + $data .= fread($fp, $size); + } + + return $header.pack('V', strlen($data)).$data; +} + diff --git a/sources/lib/plugins/gallery/README b/sources/lib/plugins/gallery/README new file mode 100755 index 0000000..f003735 --- /dev/null +++ b/sources/lib/plugins/gallery/README @@ -0,0 +1,25 @@ +gallery Plugin for DokuWiki + +All documentation for this plugin can be found at +http://www.dokuwiki.org/plugin:gallery + +If you install this plugin manually, make sure it is installed in +lib/plugins/gallery/ - if the folder is called different it +will not work! + +Please refer to http://www.dokuwiki.org/plugins for additional info +on how to install plugins in DokuWiki. + +---- +Copyright (C) Andreas Gohr + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See the COPYING file in your DokuWiki folder for details diff --git a/sources/lib/plugins/gallery/all.less b/sources/lib/plugins/gallery/all.less new file mode 100755 index 0000000..9bafd7d --- /dev/null +++ b/sources/lib/plugins/gallery/all.less @@ -0,0 +1,30 @@ +/* load swipe box */ +@import "swipebox/css/swipebox.less"; + +/* fix image paths */ +#swipebox-slider .slide-loading { + background: url(swipebox/img/loader.gif) no-repeat center center; +} + +#swipebox-prev, +#swipebox-next, +#swipebox-close { + background-image: url(swipebox/img/icons.png); +} + +/* style overrides */ +#swipebox-overlay { + background: rgba(0, 0, 0, 0.95); +} + +#swipebox-top-bar { + div.title { + font-size: 15px; + line-height: 1.5em; + } + div.caption { + font-size: 13px; + line-height: 1.5em; + } + padding: 10px; +} diff --git a/sources/lib/plugins/gallery/conf/default.php b/sources/lib/plugins/gallery/conf/default.php new file mode 100755 index 0000000..f4b511e --- /dev/null +++ b/sources/lib/plugins/gallery/conf/default.php @@ -0,0 +1,15 @@ + + */ + +$conf['thumbnail_width'] = 120; +$conf['thumbnail_height'] = 120; +$conf['image_width'] = 800; +$conf['image_height'] = 600; +$conf['cols'] = 5; + +$conf['sort'] = 'file'; +$conf['options'] = 'cache'; diff --git a/sources/lib/plugins/gallery/conf/metadata.php b/sources/lib/plugins/gallery/conf/metadata.php new file mode 100755 index 0000000..fd25663 --- /dev/null +++ b/sources/lib/plugins/gallery/conf/metadata.php @@ -0,0 +1,16 @@ + + */ + +$meta['thumbnail_width'] = array('numeric'); +$meta['thumbnail_height'] = array('numeric'); +$meta['image_width'] = array('numeric'); +$meta['image_height'] = array('numeric'); +$meta['cols'] = array('numeric'); + +$meta['sort'] = array('multichoice', '_choices' => array('file','mod','date','title')); +$meta['options'] = array('multicheckbox', '_choices' => array('cache','crop','direct','lightbox','random','reverse','showname','showtitle')); + diff --git a/sources/lib/plugins/gallery/deleted.files b/sources/lib/plugins/gallery/deleted.files new file mode 100755 index 0000000..010a113 --- /dev/null +++ b/sources/lib/plugins/gallery/deleted.files @@ -0,0 +1,47 @@ +jquery.prettyPhoto.js +prettyPhoto/dark_rounded/btnNext.png +prettyPhoto/dark_rounded/btnPrevious.png +prettyPhoto/dark_rounded/contentPattern.png +prettyPhoto/dark_rounded/default_thumbnail.gif +prettyPhoto/dark_rounded/loader.gif +prettyPhoto/dark_rounded/sprite.png +prettyPhoto/dark_rounded/ +prettyPhoto/dark_square/btnNext.png +prettyPhoto/dark_square/btnPrevious.png +prettyPhoto/dark_square/contentPattern.png +prettyPhoto/dark_square/default_thumbnail.gif +prettyPhoto/dark_square/loader.gif +prettyPhoto/dark_square/sprite.png +prettyPhoto/dark_square/ +prettyPhoto/default/default_thumb.png +prettyPhoto/default/loader.gif +prettyPhoto/default/sprite.png +prettyPhoto/default/sprite_next.png +prettyPhoto/default/sprite_prev.png +prettyPhoto/default/sprite_x.png +prettyPhoto/default/sprite_y.png +prettyPhoto/default/ +prettyPhoto/facebook/btnNext.png +prettyPhoto/facebook/btnPrevious.png +prettyPhoto/facebook/contentPatternBottom.png +prettyPhoto/facebook/contentPatternLeft.png +prettyPhoto/facebook/contentPatternRight.png +prettyPhoto/facebook/contentPatternTop.png +prettyPhoto/facebook/default_thumbnail.gif +prettyPhoto/facebook/loader.gif +prettyPhoto/facebook/sprite.png +prettyPhoto/facebook/ +prettyPhoto/light_rounded/btnNext.png +prettyPhoto/light_rounded/btnPrevious.png +prettyPhoto/light_rounded/default_thumbnail.gif +prettyPhoto/light_rounded/loader.gif +prettyPhoto/light_rounded/sprite.png +prettyPhoto/light_square/btnNext.png +prettyPhoto/light_square/btnPrevious.png +prettyPhoto/light_square/default_thumbnail.gif +prettyPhoto/light_square/loader.gif +prettyPhoto/light_square/sprite.png +prettyPhoto/light_square/ +prettyPhoto/ +screen.css +style.css diff --git a/sources/lib/plugins/gallery/images/blank.gif b/sources/lib/plugins/gallery/images/blank.gif new file mode 100755 index 0000000000000000000000000000000000000000..93636392ea80885534a898f2d0f9c446a1b8b8f4 GIT binary patch literal 110 zcmZ?wbhEHbbYO5`XkcLY4+e@qSy)9F7#MVb7%1+*z`*3%(!cWbTmHp!w%qF8d~eTh z{4XU<-)taz;a0_}o}+XxTj4ssq3~n)^=`FT zQd6_NqOL}8$uO2gCT*6}t!BSVug0gqRn_Q}nD%a;F>$&5j?dTY@|jhN#|A}&wg#4V zIQP<(h*-9#f;C97MMss=l$B%zICY3{B#B80H)D3<6~rU@_qoF|!WFBU$5aB+7ZKT5 LNCjgDQvd)v!q;7m literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/images/loading.gif b/sources/lib/plugins/gallery/images/loading.gif new file mode 100755 index 0000000000000000000000000000000000000000..83d4d3fd914382e7e945ef38decb6b135fd3734e GIT binary patch literal 2230 zcmZ|Qdr(t%76ii@Zip!J2!9M92y!L7#O&C@#5LDXWQD^nwy(z z-yEyeYBHI!va-_B(&FOcVq#)cDpg2G$OHfc1_lDZaeODZDTTgDCb!o~OF}~sMzLVoYXduVb5GwaB9Tbo1Yd+Xu z2{$MN*vVTb_I%pr&N&dRHOM}IA9ZG5-`Ys8Dl4R?-u=TOdh;#$@Ki|)ONIcs= z`o-9nKfI=u8oR8nY3YmdC+ElTDSo+b9+D%QLP1!_lJ)wg6%MNxd-=~E>`E7TZMXhx zpJh#7E>Q=`S1x%R2!vG{8=dv< zFMN53`d?@mfB_zWz!jR_E-7g$6lyd0P4~+pHRO!|)kuvx;%|3?-}7~sPxs-D4v(3| zk+A!HtqNy&f4!`T8xnNb482cVZ&V|2VIq3@$&cst8X2`X_%9_Ny`IoRENo34B4q>l zQaOWU&ITYcS_oC_fLS^?b_c7_uXr1)-m$ZWIjUzqn&tcds42h{7s@n=+U=ulEg`~b zzb)31K!)P4<_4PQ@xf=ek_fA*<*Z3)r3;;=j?k@*s-C$TSqfvacM2pzTW#~b+`mJm zQR--wtko~FA1tayHs<9aYz$+E7*&M_4q8gf%1~B`1!l2wEl|x;rrx#&0U990UWOp6 zZ6IQ3IAQz+OyH^)fM!p^v;u7%+2klQCC?rhRNVizz2ni>N?YIPG%ru=uCpW4CmsOt z2CPOyFVlEV^QG20vmWGzW_&XaYKBz8=<*(Y&o!Eg?7BYwoQ+D+MG-iU&*$NKqiJ!G z*^*ZQY^@Z5Fj7(hA%`o(;Ky+dj$`6qr91e+j9!e1{kx-`WlrCf@TmNG74k{%{fF&?!dAL8>QB_w}u z6^-(#6AaFGRIzfIw|H*SZN|bPJ4AmNO2tpuKTqBp;z%ZeO zWm*+&QYxd>ecVqpKBuJWbLf)ko_!tJ*DrZ{5=D;B@~%F7()~_zru?M~mza^yu#NAl zah#z@>3SKD#}L$JEuYUIR8_`d5k^^3DqTIC@v9<(OJr2k%R-3bwGJeJyux)lVs8g- z@nX#wj=ScStWO1g?<=JGJnlW+6zPT)_+5LF9f6uu2IbDa`_J}Xr+o!@>Z;z9$7-6N(U`$)Uo3e(5mu>Yv*<;r3Xy!n1m$=EOkT7F_TQUrAa}BG>52$-1V@=8ot?lzVRm5=Lmg7MCL{q=W zT_@gCVC>Zhu!E6J<-tJmshJSmVV+7AdE=l#xm6ECVFE89uRkg^#ENZ+%js9Hu4Xtp zMbMJn(g#0L`GB}|qW)G!c&6fM9G z(T5pUl<4Sulw)95p{%tFIrjAinpF|PY3>xkUBT^@RkfQOx~qeKxaJ(XKGPRi_%Cm( B>jMA) literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/images/next.gif b/sources/lib/plugins/gallery/images/next.gif new file mode 100755 index 0000000000000000000000000000000000000000..6fca51c69d2b2db8597557b0c421e7c6d2d43efe GIT binary patch literal 93 zcmZ?wbhEHb6krfwIK;>xD=Yi%-Mceq&irR!IC$`2T3T9UWF$~T@h1zT2m?EV4g(N? v)G{zDRjj)BFY(|_iMh`&*?3-@oY*j-f-z&(q~4RemKba*$-Q63#9$2oUPmO) literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/images/overlay.png b/sources/lib/plugins/gallery/images/overlay.png new file mode 100755 index 0000000000000000000000000000000000000000..72b76bb42216121f69ba583d67aca5dc8eebd4bd GIT binary patch literal 406 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf4nJ za0`Jjzmvv4F FO#q+HS{MKT literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/images/overlayie.png b/sources/lib/plugins/gallery/images/overlayie.png new file mode 100755 index 0000000000000000000000000000000000000000..43c0747e2554c5c6b1424c10aaf4cbfbe0760363 GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&%?a=caRt(hjEqc7Ow7#8EG#Un ztgLKoZ0zjp92^{+oSa--T-@B;JUl$Syu5sTeEj_U0s;bpf`URqLc+qrA|fK9qM~AA zV&dZB5)u-Ul9EzVQqt1WGBPr3JMB}ii%1~O3KR0Dk>_fs;X*gYU=9h z8X6j!nwnZ#TH4y$IyySKy1IILdiwhM1_lO(hK5E)M#jd*H+CJb1i7yy$S;_|;n|He z5GTpo-G!lpRn`N@;VkfoEM{Qf76xHPhFNnYfP(BLp1!W^*I494fQnW-oC69adAc}; zRNQ)dfsvPif#>jos$KQ@;zmu(ua2c2XkcV!2(poDRT-^N!aA)2jO9^@(pPgg&e IbxsLQ0D7@Wi2wiq literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/images/prev.gif b/sources/lib/plugins/gallery/images/prev.gif new file mode 100755 index 0000000000000000000000000000000000000000..6901f617edba5aa075530ca51fd358483d07b86d GIT binary patch literal 94 zcmZ?wbhEHb6krfwIK;>xD=Yi%-Mceq&irR!IC$`2T3T9UWF$~T@h1zT2m?EV4g(N? v)G{zDOYD;QzTT7dc~6*J@h1zb2m=#?4u}JiXJA^;Qorc5E{Ed`6NdKb zYcAiIkvj27Y?ox4hUdI6t$pXe=NYXD6!#8)arnngt39&EQ#h3RjayD%KUG9n8LQB1(4Y^Dn#p_MPv(=Vi%P{rKv)@-R1xj%jQjX%d@{ z-k71_A#!4KTfk@5?;Bh~r&I_nVRcPDVw#>D^61lIjo>AX+k?28q%K~b!Sv%`x^)l( GgEau9oLG?n literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/lang/ar/lang.php b/sources/lib/plugins/gallery/lang/ar/lang.php new file mode 100755 index 0000000..6c2b3ef --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ar/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'صفحات المعرض '; +$lang['js']['addgal'] = 'أضف نطاق كامعرض '; diff --git a/sources/lib/plugins/gallery/lang/ar/settings.php b/sources/lib/plugins/gallery/lang/ar/settings.php new file mode 100755 index 0000000..d6113cb --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ar/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'عرض الصورة المصغرة'; +$lang['thumbnail_height'] = 'طول الصورة المصغرة '; +$lang['image_width'] = 'عرض الصورة '; +$lang['image_height'] = 'ارتفاع الصورة '; +$lang['cols'] = 'صورة لكل صف'; +$lang['sort'] = 'كيف تريد ترتيب صورة المعرض '; +$lang['sort_o_file'] = 'ترتيب حسب اسم الملف'; +$lang['sort_o_mod'] = 'ترتيب حسب تاريخ الملف'; +$lang['sort_o_date'] = 'ترتيب حسب التاريخ المسجل في تفاصيل الملفات'; +$lang['sort_o_title'] = 'ترتيب حسب الاسم المسجل في تفاصيل الملفات'; +$lang['options'] = 'اعدادت اضافية للمعرض '; diff --git a/sources/lib/plugins/gallery/lang/ca/lang.php b/sources/lib/plugins/gallery/lang/ca/lang.php new file mode 100755 index 0000000..2e42315 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ca/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Pàgines de la galeria'; +$lang['js']['addgal'] = 'Afegeix un espai com a galeria'; diff --git a/sources/lib/plugins/gallery/lang/ca/settings.php b/sources/lib/plugins/gallery/lang/ca/settings.php new file mode 100755 index 0000000..4b93619 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ca/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Amplada de la miniatura'; +$lang['thumbnail_height'] = 'Alçada de la miniatura'; +$lang['image_width'] = 'Amplada de la imatge'; +$lang['image_height'] = 'Alçada de la imatge'; +$lang['cols'] = 'Imatges per fila'; +$lang['sort'] = 'Com ordenar les imatges'; +$lang['sort_o_file'] = 'Ordenar per nom de l\'arxiu'; +$lang['sort_o_mod'] = 'Ordenar per data de l\'arxiu'; +$lang['sort_o_date'] = 'Ordenar per la data de l\'EXIF'; +$lang['sort_o_title'] = 'Ordenar pel títol de l\'EXIF'; +$lang['options'] = 'Opcions predeterminades de galeria adicionals'; diff --git a/sources/lib/plugins/gallery/lang/cs/lang.php b/sources/lib/plugins/gallery/lang/cs/lang.php new file mode 100755 index 0000000..cca690a --- /dev/null +++ b/sources/lib/plugins/gallery/lang/cs/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Stránky galerie:'; +$lang['js']['addgal'] = 'Přidat jmenný prostor jako galerii'; diff --git a/sources/lib/plugins/gallery/lang/cs/settings.php b/sources/lib/plugins/gallery/lang/cs/settings.php new file mode 100755 index 0000000..13d7ad8 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/cs/settings.php @@ -0,0 +1,19 @@ + + * @author Jaroslav Lichtblau + */ +$lang['thumbnail_width'] = 'Šířka náhledu'; +$lang['thumbnail_height'] = 'Výška náhledu'; +$lang['image_width'] = 'Šířka obrázku'; +$lang['image_height'] = 'Výška obrázku'; +$lang['cols'] = 'Obrázků na řádku'; +$lang['sort'] = 'Jak řadit obrázky v galerii'; +$lang['sort_o_file'] = 'řadit podle jména souboru'; +$lang['sort_o_mod'] = 'řadit podle data souboru'; +$lang['sort_o_date'] = 'řadit podle EXIF data'; +$lang['sort_o_title'] = 'řadit podle EXIF jména'; +$lang['options'] = 'Dodatečná výchozí nastavení galerie'; diff --git a/sources/lib/plugins/gallery/lang/cy/lang.php b/sources/lib/plugins/gallery/lang/cy/lang.php new file mode 100644 index 0000000..1b04ea7 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/cy/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Tudalennau Oriel:'; +$lang['js']['addgal'] = 'Ychwanegu namespace fel oriel'; diff --git a/sources/lib/plugins/gallery/lang/cy/settings.php b/sources/lib/plugins/gallery/lang/cy/settings.php new file mode 100644 index 0000000..2454497 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/cy/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Lled bawdlun'; +$lang['thumbnail_height'] = 'Uchder bawdlun'; +$lang['image_width'] = 'Lled delwedd'; +$lang['image_height'] = 'Uchder delwedd'; +$lang['cols'] = 'Delweddau y rhes'; +$lang['sort'] = 'Sut i drefnu delweddau\'r oriel'; +$lang['sort_o_file'] = 'trefnu gan enw ffeil'; +$lang['sort_o_mod'] = 'trefnu gan ddyddiad ffeil'; +$lang['sort_o_date'] = 'trefnu gan ddyddiad EXIF'; +$lang['sort_o_title'] = 'trefnu gan deitl EXIF'; +$lang['options'] = 'Opsiynau diofyn ychwanegol oriel'; diff --git a/sources/lib/plugins/gallery/lang/da/lang.php b/sources/lib/plugins/gallery/lang/da/lang.php new file mode 100755 index 0000000..4d5ce88 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/da/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Gallerisider:'; +$lang['js']['addgal'] = 'Tilføj navnerum som galleri'; diff --git a/sources/lib/plugins/gallery/lang/da/settings.php b/sources/lib/plugins/gallery/lang/da/settings.php new file mode 100755 index 0000000..9ca4ec6 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/da/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Miniaturebillede bredde'; +$lang['thumbnail_height'] = 'Miniaturebillede højde'; +$lang['image_width'] = 'Billede bredde'; +$lang['image_height'] = 'Billede højde'; +$lang['cols'] = 'Billeder per række'; +$lang['sort'] = 'Sortér galleribilleder efter'; +$lang['sort_o_file'] = 'sortér efter filnavn'; +$lang['sort_o_mod'] = 'sortér efter fildato'; +$lang['sort_o_date'] = 'sortér efter EXIF dato'; +$lang['sort_o_title'] = 'sortér efter EXIF titel'; +$lang['options'] = 'Yderligere galleri-standardindstillinger'; diff --git a/sources/lib/plugins/gallery/lang/de/lang.php b/sources/lib/plugins/gallery/lang/de/lang.php new file mode 100755 index 0000000..4918657 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/de/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Galerie-Seiten:'; +$lang['js']['addgal'] = 'Namensraum als Galerie hinzufügen'; diff --git a/sources/lib/plugins/gallery/lang/de/settings.php b/sources/lib/plugins/gallery/lang/de/settings.php new file mode 100755 index 0000000..7e52a65 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/de/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Vorschaubildbreite'; +$lang['thumbnail_height'] = 'Vorschaubildhöhe'; +$lang['image_width'] = 'Bildbreite'; +$lang['image_height'] = 'Bildhöhe'; +$lang['cols'] = 'Bilder pro Zeile'; +$lang['sort'] = 'Sortierung der Galeriebilder'; +$lang['sort_o_file'] = 'nach Dateiname sortieren'; +$lang['sort_o_mod'] = 'nach Dateidatum sortieren'; +$lang['sort_o_date'] = 'nach EXIF-Datum sortieren'; +$lang['sort_o_title'] = 'nach EXIF-Titel sortieren'; +$lang['options'] = 'Zusätzliche Galerie Standard-Einstellungen'; diff --git a/sources/lib/plugins/gallery/lang/en/lang.php b/sources/lib/plugins/gallery/lang/en/lang.php new file mode 100755 index 0000000..85df9a3 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/en/lang.php @@ -0,0 +1,4 @@ + + * @author Andreas Gohr + */ + +$lang['thumbnail_width'] = 'Thumbnail image width'; +$lang['thumbnail_height'] = 'Thumbnail image height'; +$lang['image_width'] = 'Image width'; +$lang['image_height'] = 'Image height'; +$lang['cols'] = 'Images per row'; + +$lang['sort'] = 'How to sort the gallery images'; +$lang['sort_o_file'] = 'sort by filename'; +$lang['sort_o_mod'] = 'sort by file date'; +$lang['sort_o_date'] = 'sort by EXIF date'; +$lang['sort_o_title'] = 'sort by EXIF title'; + +$lang['options'] = 'Additional gallery default options'; + diff --git a/sources/lib/plugins/gallery/lang/eo/lang.php b/sources/lib/plugins/gallery/lang/eo/lang.php new file mode 100755 index 0000000..7f648cf --- /dev/null +++ b/sources/lib/plugins/gallery/lang/eo/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Galeripaĝoj:'; +$lang['js']['addgal'] = 'Aldoni nomspacon kiel galerio'; diff --git a/sources/lib/plugins/gallery/lang/eo/settings.php b/sources/lib/plugins/gallery/lang/eo/settings.php new file mode 100755 index 0000000..7d26c30 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/eo/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Bildeta larĝeco'; +$lang['thumbnail_height'] = 'Bildeta alteco'; +$lang['image_width'] = 'Bildlarĝeco'; +$lang['image_height'] = 'Bildalteco'; +$lang['cols'] = 'Bildoj po vico'; +$lang['sort'] = 'Kiel ordigi la galeribildojn'; +$lang['sort_o_file'] = 'ordigi per dosier-nomo'; +$lang['sort_o_mod'] = 'ordigi per dosier-dato'; +$lang['sort_o_date'] = 'ordigi per EXIF-dato'; +$lang['sort_o_title'] = 'ordigi per EXIF-titolo'; +$lang['options'] = 'Aldonaj galeriaj standardaj opcioj'; diff --git a/sources/lib/plugins/gallery/lang/es/lang.php b/sources/lib/plugins/gallery/lang/es/lang.php new file mode 100755 index 0000000..8de8a56 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/es/lang.php @@ -0,0 +1,10 @@ + + * @author Domingo Redal + */ +$lang['pages'] = 'Páginas de Galería'; +$lang['js']['addgal'] = 'Añadir espacio de nombres de galería'; diff --git a/sources/lib/plugins/gallery/lang/es/settings.php b/sources/lib/plugins/gallery/lang/es/settings.php new file mode 100755 index 0000000..393e24a --- /dev/null +++ b/sources/lib/plugins/gallery/lang/es/settings.php @@ -0,0 +1,19 @@ + + * @author Domingo Redal + */ +$lang['thumbnail_width'] = 'Ancho de la miniatura de la imagen'; +$lang['thumbnail_height'] = 'Alto de la miniatura de la imagen'; +$lang['image_width'] = 'Ancho de la imagen'; +$lang['image_height'] = 'Alto de la imagen'; +$lang['cols'] = 'Imágenes por fila'; +$lang['sort'] = 'Como ordenar las imágenes de la galería'; +$lang['sort_o_file'] = 'ordenar por nombre de archivo'; +$lang['sort_o_mod'] = 'ordenar por fecha de archivo'; +$lang['sort_o_date'] = 'ordenar por fecha EXIF'; +$lang['sort_o_title'] = 'ordenar por titulo EXIF'; +$lang['options'] = 'Opciones predeterminadas adicionales de la galería'; diff --git a/sources/lib/plugins/gallery/lang/fa/lang.php b/sources/lib/plugins/gallery/lang/fa/lang.php new file mode 100644 index 0000000..6019eda --- /dev/null +++ b/sources/lib/plugins/gallery/lang/fa/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'صفحه‌های گالری:'; +$lang['js']['addgal'] = 'اضافه کردن فضای نام به‌عنوان گالری'; diff --git a/sources/lib/plugins/gallery/lang/fa/settings.php b/sources/lib/plugins/gallery/lang/fa/settings.php new file mode 100644 index 0000000..60cffd8 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/fa/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'عرض تصویر بند انگشتی'; +$lang['thumbnail_height'] = 'طول تصویر بند انگشتی'; +$lang['image_width'] = 'عرض تصویر'; +$lang['image_height'] = 'طول تصویر'; +$lang['cols'] = 'عکس در هر ردیف'; +$lang['sort'] = 'چگونگی مرتب سازی تصاویر گالری'; +$lang['sort_o_file'] = 'مرتب کردن توسط نام فایل'; +$lang['sort_o_mod'] = 'مرتب‌ کردن توسط تاریخ فایل'; +$lang['sort_o_date'] = 'مرتب کردن توسط تاریخ EXIF'; +$lang['sort_o_title'] = 'مرتب کردن توسط عنوان EXIF'; +$lang['options'] = 'اضافی کردن گزینه‌های پیش‌فرض گالری'; diff --git a/sources/lib/plugins/gallery/lang/fr/lang.php b/sources/lib/plugins/gallery/lang/fr/lang.php new file mode 100755 index 0000000..8b58603 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/fr/lang.php @@ -0,0 +1,11 @@ + + * @author NicolasFriedli + * @author Schplurtz le Déboulonné + */ +$lang['pages'] = 'Pages galerie:'; +$lang['js']['addgal'] = 'Utiliser cette catégorie comme galerie'; diff --git a/sources/lib/plugins/gallery/lang/fr/settings.php b/sources/lib/plugins/gallery/lang/fr/settings.php new file mode 100755 index 0000000..504b2cd --- /dev/null +++ b/sources/lib/plugins/gallery/lang/fr/settings.php @@ -0,0 +1,20 @@ + + * @author Emmanuel Dupin + * @author NicolasFriedli + */ +$lang['thumbnail_width'] = 'Largeur des miniatures'; +$lang['thumbnail_height'] = 'Hauteur des miniatures'; +$lang['image_width'] = 'Largeur des images'; +$lang['image_height'] = 'Hauteur des images'; +$lang['cols'] = 'Nombre d\'images par ligne'; +$lang['sort'] = 'Critère de tri des images'; +$lang['sort_o_file'] = 'trier par nom du fichier'; +$lang['sort_o_mod'] = 'trier par date de modification du fichier'; +$lang['sort_o_date'] = 'trier par date EXIF'; +$lang['sort_o_title'] = 'trier par titre EXIF'; +$lang['options'] = 'Options par défaut supplémentaires'; diff --git a/sources/lib/plugins/gallery/lang/hu/lang.php b/sources/lib/plugins/gallery/lang/hu/lang.php new file mode 100755 index 0000000..5f00fbe --- /dev/null +++ b/sources/lib/plugins/gallery/lang/hu/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Képgaléria oldalai:'; +$lang['js']['addgal'] = 'Névtér hozzáadása képgalériaként'; diff --git a/sources/lib/plugins/gallery/lang/hu/settings.php b/sources/lib/plugins/gallery/lang/hu/settings.php new file mode 100755 index 0000000..4e11d1b --- /dev/null +++ b/sources/lib/plugins/gallery/lang/hu/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Bélyegkép szélessége'; +$lang['thumbnail_height'] = 'Bélyegkép magassága'; +$lang['image_width'] = 'Képszélesség'; +$lang['image_height'] = 'Képmagasság'; +$lang['cols'] = 'Képek száma soronként'; +$lang['sort'] = 'Galériaképek rendezése'; +$lang['sort_o_file'] = 'Fájlok neve szerint'; +$lang['sort_o_mod'] = 'Fájlok dátuma szerint'; +$lang['sort_o_date'] = 'EXIF-dátum szerint'; +$lang['sort_o_title'] = 'EXIF-cím szerint'; +$lang['options'] = 'További alapértelmezett beállítások'; diff --git a/sources/lib/plugins/gallery/lang/it/settings.php b/sources/lib/plugins/gallery/lang/it/settings.php new file mode 100755 index 0000000..d5d367a --- /dev/null +++ b/sources/lib/plugins/gallery/lang/it/settings.php @@ -0,0 +1,18 @@ + + * @author Diego Pierotto + */ + +$lang['thumbnail_width'] = 'Larghezza immagine anteprima'; +$lang['thumbnail_height'] = 'Altezza immagine anteprima'; +$lang['image_width'] = 'Larghezza immagine'; +$lang['image_height'] = 'Altezza immagine'; +$lang['cols'] = 'Immagini per riga'; +$lang['direct'] = 'Collegamento direct'; +$lang['lightbox'] = 'Utilizza Lightbox (implica il collegamento diretto)'; +$lang['showname'] = 'Mostra nome file immagine'; +$lang['reverse'] = 'Inverti ordine'; +$lang['js_ok'] = 'Allow javascript urls'; diff --git a/sources/lib/plugins/gallery/lang/ja/lang.php b/sources/lib/plugins/gallery/lang/ja/lang.php new file mode 100755 index 0000000..734ad14 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ja/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'ギャラリー・ページ'; +$lang['js']['addgal'] = '名前空間の追加'; diff --git a/sources/lib/plugins/gallery/lang/ja/settings.php b/sources/lib/plugins/gallery/lang/ja/settings.php new file mode 100755 index 0000000..d7af76e --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ja/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'サムネイル画像の幅'; +$lang['thumbnail_height'] = 'サムネイル画像の高さ'; +$lang['image_width'] = '画像の幅'; +$lang['image_height'] = '画像の高さ'; +$lang['cols'] = '一行の画像数'; +$lang['sort'] = '画像のソート方法'; +$lang['sort_o_file'] = 'ファイル名順'; +$lang['sort_o_mod'] = 'ファイル日付順'; +$lang['sort_o_date'] = 'EXIF日付順'; +$lang['sort_o_title'] = 'EXIFタイトル順'; +$lang['options'] = 'デフォルトに追加するギャラリーのオプション'; diff --git a/sources/lib/plugins/gallery/lang/ko/lang.php b/sources/lib/plugins/gallery/lang/ko/lang.php new file mode 100755 index 0000000..aadb882 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ko/lang.php @@ -0,0 +1,8 @@ + + * @author Andreas Gohr + * @author SC Yoo + * @author Myeongjin + */ +$lang['thumbnail_width'] = '섬네일 그림 너비'; +$lang['thumbnail_height'] = '섬네일 그림 높이'; +$lang['image_width'] = '그림 너비'; +$lang['image_height'] = '그림 높이'; +$lang['cols'] = '열당 그림 수'; +$lang['sort'] = '갤러리 그림 정렬 방법'; +$lang['sort_o_file'] = '파일 이름 순서로 정렬'; +$lang['sort_o_mod'] = '파일 날짜 순서로 정렬'; +$lang['sort_o_date'] = 'EXIF 날짜 순서로 정렬'; +$lang['sort_o_title'] = 'EXIF 제목 순서로 정렬'; +$lang['options'] = '추가적인 갤러리 기본 설정'; diff --git a/sources/lib/plugins/gallery/lang/nl/lang.php b/sources/lib/plugins/gallery/lang/nl/lang.php new file mode 100755 index 0000000..7703677 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/nl/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Beeldreeks pagina\'s:'; +$lang['js']['addgal'] = 'Voeg naamruimte toe als beeldreeks'; diff --git a/sources/lib/plugins/gallery/lang/nl/settings.php b/sources/lib/plugins/gallery/lang/nl/settings.php new file mode 100755 index 0000000..f1cd4de --- /dev/null +++ b/sources/lib/plugins/gallery/lang/nl/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Breedte van het miniatuur beeld'; +$lang['thumbnail_height'] = 'Hoogte van het miniatuur beeld'; +$lang['image_width'] = 'Beeld breedte'; +$lang['image_height'] = 'Beeld hoogte'; +$lang['cols'] = 'Aantal beelden per rij'; +$lang['sort'] = 'Hoe de beeldreeks sorteren'; +$lang['sort_o_file'] = 'sorteren op bestandsnaam'; +$lang['sort_o_mod'] = 'sorteren op bestandsdatum'; +$lang['sort_o_date'] = 'sorteren op EXIF datum'; +$lang['sort_o_title'] = 'sorteren op EXIF titel'; +$lang['options'] = 'Bijkomende beeldreeks verstek opties'; diff --git a/sources/lib/plugins/gallery/lang/no/lang.php b/sources/lib/plugins/gallery/lang/no/lang.php new file mode 100755 index 0000000..40683a8 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/no/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Bildesider:'; +$lang['js']['addgal'] = 'Navnerom som bildearkiv'; diff --git a/sources/lib/plugins/gallery/lang/no/settings.php b/sources/lib/plugins/gallery/lang/no/settings.php new file mode 100755 index 0000000..0e0bb6a --- /dev/null +++ b/sources/lib/plugins/gallery/lang/no/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Miniatyrbilde bredde'; +$lang['thumbnail_height'] = 'Miniatyrbilde høyde'; +$lang['image_width'] = 'Bildebredde'; +$lang['image_height'] = 'Bildehøyde'; +$lang['cols'] = 'Bilder pr. rad'; +$lang['sort'] = 'Sortering av bildene'; +$lang['sort_o_file'] = 'sorter etter filnavn'; +$lang['sort_o_mod'] = 'sorter etter fildato'; +$lang['sort_o_date'] = 'sorter etter EXIF dato'; +$lang['sort_o_title'] = 'sorter etter EXIT tittel'; +$lang['options'] = 'Andre standardvalg for bildearkivet'; diff --git a/sources/lib/plugins/gallery/lang/pt-br/lang.php b/sources/lib/plugins/gallery/lang/pt-br/lang.php new file mode 100755 index 0000000..2f3d09d --- /dev/null +++ b/sources/lib/plugins/gallery/lang/pt-br/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Páginas da galeria:'; +$lang['js']['addgal'] = 'Adicionar domínio como galeria'; diff --git a/sources/lib/plugins/gallery/lang/pt-br/settings.php b/sources/lib/plugins/gallery/lang/pt-br/settings.php new file mode 100755 index 0000000..c942a47 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/pt-br/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Largura da imagem miniatura'; +$lang['thumbnail_height'] = 'Altura da imagem miniatura'; +$lang['image_width'] = 'Largura da imagem'; +$lang['image_height'] = 'Altura da imagem'; +$lang['cols'] = 'Imagens por linha'; +$lang['sort'] = 'Como ordenar as imagens da galeria'; +$lang['sort_o_file'] = 'ordenar por nome do arquivo'; +$lang['sort_o_mod'] = 'ordenar por data do arquivo'; +$lang['sort_o_date'] = 'ordenar por data EXIF'; +$lang['sort_o_title'] = 'ordenar por título EXIF'; +$lang['options'] = 'Opções padrão da galeria adicional'; diff --git a/sources/lib/plugins/gallery/lang/ru/lang.php b/sources/lib/plugins/gallery/lang/ru/lang.php new file mode 100755 index 0000000..752ca12 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ru/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Страницы галереи:'; +$lang['js']['addgal'] = 'Добавить пространство имён как галерею'; diff --git a/sources/lib/plugins/gallery/lang/ru/settings.php b/sources/lib/plugins/gallery/lang/ru/settings.php new file mode 100755 index 0000000..1830149 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ru/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Ширина миниатюры изображения'; +$lang['thumbnail_height'] = 'Высота миниатюры изображения'; +$lang['image_width'] = 'Ширина изображения'; +$lang['image_height'] = 'Высота изображения'; +$lang['cols'] = 'Изображения в ряд'; +$lang['sort'] = 'Как сортировать изображения в галерее'; +$lang['sort_o_file'] = 'сортировать по имени файла'; +$lang['sort_o_mod'] = 'сортировать по дате файла'; +$lang['sort_o_date'] = 'сортировать по EXIF-дате'; +$lang['sort_o_title'] = 'сортировать по EXIF-заголовку'; +$lang['options'] = 'Дополнительные опции'; diff --git a/sources/lib/plugins/gallery/lang/sk/lang.php b/sources/lib/plugins/gallery/lang/sk/lang.php new file mode 100755 index 0000000..191afa9 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/sk/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'Stránky galérie:'; +$lang['js']['addgal'] = 'Pridaj menný priestor ako galériu'; diff --git a/sources/lib/plugins/gallery/lang/sk/settings.php b/sources/lib/plugins/gallery/lang/sk/settings.php new file mode 100755 index 0000000..4fe1a3d --- /dev/null +++ b/sources/lib/plugins/gallery/lang/sk/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'Šírka náhľadu'; +$lang['thumbnail_height'] = 'Výška náhľadu'; +$lang['image_width'] = 'Šírka obrázku'; +$lang['image_height'] = 'Výška obrázku'; +$lang['cols'] = 'Počet obrázkov na riadok'; +$lang['sort'] = 'Spôsob triedenia obrázkov galérie'; +$lang['sort_o_file'] = 'triedenie podľa mena'; +$lang['sort_o_mod'] = 'triedenie podľa dátumu'; +$lang['sort_o_date'] = 'triedenie podľa EXIF dátumu'; +$lang['sort_o_title'] = 'triedenie podľa EXIF názvu'; +$lang['options'] = 'Dodatočné imlicitné voľby galérie'; diff --git a/sources/lib/plugins/gallery/lang/ta/lang.php b/sources/lib/plugins/gallery/lang/ta/lang.php new file mode 100755 index 0000000..f28f650 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ta/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = 'பட தொகுப்பு பக்கங்கள் '; +$lang['js']['addgal'] = 'பட தொகுப்பை பெயர்வேளியாக சேர் '; diff --git a/sources/lib/plugins/gallery/lang/ta/settings.php b/sources/lib/plugins/gallery/lang/ta/settings.php new file mode 100755 index 0000000..77b50fe --- /dev/null +++ b/sources/lib/plugins/gallery/lang/ta/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = 'சிறு படத்தின் உயரம்'; +$lang['thumbnail_height'] = 'சிறு படத்தின் அகலம் '; +$lang['image_width'] = 'படத்தின் அகலம்'; +$lang['image_height'] = 'படத்தின் உயரம்'; +$lang['cols'] = 'ஒரு வரிசையில் எத்தனை படங்கள் '; +$lang['sort'] = 'இந்த பட தொகுப்பை எப்படி வகைப்படுத்துவது '; +$lang['sort_o_file'] = 'கோப்பின் பெயரை வைத்து வகைப்படுத்து '; +$lang['sort_o_mod'] = 'கோப்பின் தேதியை வைத்து வகைப்படுத்து '; +$lang['sort_o_date'] = 'EXIF தேதியை வைத்து வகைப்படுத்து'; +$lang['sort_o_title'] = 'EXIF பெயரை வைத்து வகைப்படுத்து'; +$lang['options'] = 'கூடுதல் படத் தொகுப்பின் முன்னிருப்பு விருப்பங்கள் '; diff --git a/sources/lib/plugins/gallery/lang/tr/lang.php b/sources/lib/plugins/gallery/lang/tr/lang.php new file mode 100755 index 0000000..5d294b4 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/tr/lang.php @@ -0,0 +1,10 @@ + + * @author ilker Rifat Kapaç + */ +$lang['pages'] = 'Sergi Sayfaları'; +$lang['js']['addgal'] = 'İsimalanını sergi olarak ekle'; diff --git a/sources/lib/plugins/gallery/lang/tr/settings.php b/sources/lib/plugins/gallery/lang/tr/settings.php new file mode 100755 index 0000000..3e56595 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/tr/settings.php @@ -0,0 +1,19 @@ + + * @author ilker Rifat Kapaç + */ +$lang['thumbnail_width'] = 'Küçük resim genişliği'; +$lang['thumbnail_height'] = 'Küçük resim yüksekliği'; +$lang['image_width'] = 'Resim genişliği'; +$lang['image_height'] = 'Resim yüksekliği'; +$lang['cols'] = 'Satır başına görüntü sayısı'; +$lang['sort'] = 'Sergi resimleri nasıl sıralansın'; +$lang['sort_o_file'] = 'Dosya adına göre sırala'; +$lang['sort_o_mod'] = 'Dosya tarihine göre sıralama'; +$lang['sort_o_date'] = 'EXIF tarihine göre sırala'; +$lang['sort_o_title'] = 'EXIF başlığına göre sırala'; +$lang['options'] = 'İlave serginin varsayılan seçenekleri'; diff --git a/sources/lib/plugins/gallery/lang/zh-tw/lang.php b/sources/lib/plugins/gallery/lang/zh-tw/lang.php new file mode 100755 index 0000000..52cec3e --- /dev/null +++ b/sources/lib/plugins/gallery/lang/zh-tw/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = '相簿頁碼'; +$lang['js']['addgal'] = '添加作為相簿的名字空間'; diff --git a/sources/lib/plugins/gallery/lang/zh-tw/settings.php b/sources/lib/plugins/gallery/lang/zh-tw/settings.php new file mode 100755 index 0000000..7883577 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/zh-tw/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = '縮圖的寬度'; +$lang['thumbnail_height'] = '縮圖的高度'; +$lang['image_width'] = '圖像寬度'; +$lang['image_height'] = '圖像高度'; +$lang['cols'] = '每一列的圖像數'; +$lang['sort'] = '相簿圖像要如何排序?'; +$lang['sort_o_file'] = '依檔名排序'; +$lang['sort_o_mod'] = '依建檔日期排序'; +$lang['sort_o_date'] = '依EXIF日期排序'; +$lang['sort_o_title'] = '依EXIF標題排序'; +$lang['options'] = '額外的相簿預設選項'; diff --git a/sources/lib/plugins/gallery/lang/zh/lang.php b/sources/lib/plugins/gallery/lang/zh/lang.php new file mode 100755 index 0000000..daf90a9 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/zh/lang.php @@ -0,0 +1,9 @@ + + */ +$lang['pages'] = '相册页面'; +$lang['js']['addgal'] = '将命名空间添加为相册'; diff --git a/sources/lib/plugins/gallery/lang/zh/settings.php b/sources/lib/plugins/gallery/lang/zh/settings.php new file mode 100755 index 0000000..91f5198 --- /dev/null +++ b/sources/lib/plugins/gallery/lang/zh/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['thumbnail_width'] = '缩略图宽度'; +$lang['thumbnail_height'] = '缩略图高度'; +$lang['image_width'] = '图片宽度'; +$lang['image_height'] = '图片高度'; +$lang['cols'] = '每行图片数'; +$lang['sort'] = '图片排序方式'; +$lang['sort_o_file'] = '按文件名'; +$lang['sort_o_mod'] = '按文件时间'; +$lang['sort_o_date'] = '按 EXIF 时间'; +$lang['sort_o_title'] = '按 EXIT 标题'; +$lang['options'] = '附加相册默认选项'; diff --git a/sources/lib/plugins/gallery/manager.dat b/sources/lib/plugins/gallery/manager.dat new file mode 100644 index 0000000..d8c2844 --- /dev/null +++ b/sources/lib/plugins/gallery/manager.dat @@ -0,0 +1,2 @@ +downloadurl=https://github.com/splitbrain/dokuwiki-plugin-gallery/zipball/master +installed=Sun, 20 Nov 2016 19:29:16 +0000 diff --git a/sources/lib/plugins/gallery/plugin.info.txt b/sources/lib/plugins/gallery/plugin.info.txt new file mode 100755 index 0000000..dac8442 --- /dev/null +++ b/sources/lib/plugins/gallery/plugin.info.txt @@ -0,0 +1,7 @@ +base gallery +author Andreas Gohr +email andi@splitbrain.org +date 2016-06-15 +name Gallery Plugin +desc Creates a gallery of images from a namespace or RSS/ATOM feed +url http://www.dokuwiki.org/plugin:gallery diff --git a/sources/lib/plugins/gallery/screen.less b/sources/lib/plugins/gallery/screen.less new file mode 100755 index 0000000..9536404 --- /dev/null +++ b/sources/lib/plugins/gallery/screen.less @@ -0,0 +1,60 @@ +div.dokuwiki div.gallery table { + border: none; +} +div.dokuwiki div.gallery table td { + padding: 1em; + text-align: center; + vertical-align: middle; + border: none; +} + +div.dokuwiki div.gallery table img.tn { + padding: 0.4em; + border: 1px solid __border__; + max-width: none; +} + +div.dokuwiki div.gallery { + clear: left; + margin-bottom: 1em; +} + +/*div.dokuwiki div.gallery div { + * float: left; + * }*/ + +div.dokuwiki div.gallery img.tn { + margin: 9px; + vertical-align: middle; + padding: 0.4em; + border: 1px solid #000; +} + +div.dokuwiki div.gallery_left { + float: left; +} + +div.dokuwiki div.gallery div { + float: left; +} + +div.dokuwiki div.gallery_right { + float: right; +} + +div.dokuwiki div.gallery_center { + margin-left: auto; + margin-right: auto; +} + +div.dokuwiki div.gallery_center { + width: 80%; + text-align: center; +} + +/* for pagination */ +div.dokuwiki div.gallery div.gallery_pages { + float: none; + text-align: left; +} + diff --git a/sources/lib/plugins/gallery/script.js b/sources/lib/plugins/gallery/script.js new file mode 100755 index 0000000..124eeac --- /dev/null +++ b/sources/lib/plugins/gallery/script.js @@ -0,0 +1,59 @@ +/* DOKUWIKI:include_once swipebox/js/jquery.swipebox.js */ + +/** + * Add a quicklink to the media popup + */ +function gallery_plugin(){ + var $opts = jQuery('#media__opts'); + if(!$opts.length) return; + if(!window.opener) return; + + var glbl = document.createElement('label'); + var glnk = document.createElement('a'); + var gbrk = document.createElement('br'); + glnk.name = 'gallery_plugin'; + glnk.innerHTML = LANG.plugins.gallery.addgal; //FIXME localize + glnk.style.cursor = 'pointer'; + + glnk.onclick = function(){ + var $h1 = jQuery('#media__ns'); + if(!$h1.length) return; + var ns = $h1[0].innerHTML; + opener.insertAtCarret('wiki__text','{{gallery>'+ns+'}}'); + if(!dw_mediamanager.keepopen) window.close(); + }; + + $opts[0].appendChild(glbl); + glbl.appendChild(glnk); + $opts[0].appendChild(gbrk); +} + +/** + * Display a selected page and hide all others + */ +function gallery_pageselect(e){ + var galid = e.target.hash.substr(10,4); + var $pages = jQuery('div.gallery__'+galid); + $pages.hide(); + jQuery('#'+e.target.hash.substr(1)).show(); + return false; +} + +// === main === +jQuery(function(){ + // initialize the lightbox mechanism + jQuery("a.lightbox, a[rel^='lightbox']").swipebox({ + loopAtEnd: true + }); + + gallery_plugin(); + + // hide all pages except the first one + var $pages = jQuery('div.gallery_page'); + $pages.hide(); + $pages.eq(0).show(); + + // attach page selector + jQuery('a.gallery_pgsel').click(gallery_pageselect); +}); + diff --git a/sources/lib/plugins/gallery/swipebox/README b/sources/lib/plugins/gallery/swipebox/README new file mode 100755 index 0000000..48f58e7 --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/README @@ -0,0 +1,6 @@ +This is a silightly modified version of the SwipeBox script available at https://github.com/brutaldesign/swipebox.git + +The modfied sources are available at https://github.com/splitbrain/swipebox/tree/dokuwiki - only the src directory is +included here. + +css/swipebox.css has been renamed to css/swipebox.less to work with DokuWiki's less compiler inclusion mechanism diff --git a/sources/lib/plugins/gallery/swipebox/css/swipebox.less b/sources/lib/plugins/gallery/swipebox/css/swipebox.less new file mode 100755 index 0000000..07ce236 --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/css/swipebox.less @@ -0,0 +1,291 @@ +/*! Swipebox v1.3.0 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */ +html.swipebox-html.swipebox-touch { + overflow: hidden !important; +} + +#swipebox-overlay img { + border: none !important; +} + +#swipebox-overlay { + width: 100%; + height: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 99999 !important; + overflow: hidden; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#swipebox-container { + position: relative; + width: 100%; + height: 100%; +} + +#swipebox-slider { + -webkit-transition: -webkit-transform 0.4s ease; + transition: transform 0.4s ease; + height: 100%; + left: 0; + top: 0; + width: 100%; + white-space: nowrap; + position: absolute; + display: none; + cursor: pointer; +} +#swipebox-slider .slide { + height: 100%; + width: 100%; + line-height: 1px; + text-align: center; + display: inline-block; +} +#swipebox-slider .slide:before { + content: ""; + display: inline-block; + height: 50%; + width: 1px; + margin-right: -1px; +} +#swipebox-slider .slide img, +#swipebox-slider .slide .swipebox-video-container, +#swipebox-slider .slide .swipebox-inline-container { + display: inline-block; + max-height: 100%; + max-width: 100%; + margin: 0; + padding: 0; + width: auto; + height: auto; + vertical-align: middle; +} +#swipebox-slider .slide .swipebox-video-container { + background: none; + max-width: 1140px; + max-height: 100%; + width: 100%; + padding: 5%; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +#swipebox-slider .slide .swipebox-video-container .swipebox-video { + width: 100%; + height: 0; + padding-bottom: 56.25%; + overflow: hidden; + position: relative; +} +#swipebox-slider .slide .swipebox-video-container .swipebox-video iframe { + width: 100% !important; + height: 100% !important; + position: absolute; + top: 0; + left: 0; +} +#swipebox-slider .slide-loading { + background: url(../img/loader.gif) no-repeat center center; +} + +#swipebox-bottom-bar, +#swipebox-top-bar { + -webkit-transition: 0.5s; + transition: 0.5s; + position: absolute; + left: 0; + z-index: 999; + min-height: 50px; + width: 100%; +} + +#swipebox-bottom-bar { + bottom: -50px; +} +#swipebox-bottom-bar.visible-bars { + -webkit-transform: translate3d(0, -50px, 0); + transform: translate3d(0, -50px, 0); +} + +#swipebox-top-bar { + bottom: 100%; +} +#swipebox-top-bar.visible-bars { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); +} + +#swipebox-title { + display: block; + width: 100%; + text-align: center; +} + +#swipebox-prev, +#swipebox-next, +#swipebox-close { + background-image: url(../img/icons.png); + background-repeat: no-repeat; + border: none !important; + text-decoration: none !important; + cursor: pointer; + width: 50px; + height: 50px; + top: 0; +} + +#swipebox-arrows { + display: block; + margin: 0 auto; + width: 100%; + height: 50px; +} + +#swipebox-prev { + background-position: -32px 13px; + float: left; +} + +#swipebox-next { + background-position: -78px 13px; + float: right; +} + +#swipebox-close { + top: 0; + right: 0; + position: absolute; + z-index: 9999; + background-position: 15px 12px; +} + +.swipebox-no-close-button #swipebox-close { + display: none; +} + +#swipebox-prev.disabled, +#swipebox-next.disabled { + opacity: 0.3; +} + +.swipebox-no-touch #swipebox-overlay.rightSpring #swipebox-slider { + -webkit-animation: rightSpring 0.3s; + animation: rightSpring 0.3s; +} +.swipebox-no-touch #swipebox-overlay.leftSpring #swipebox-slider { + -webkit-animation: leftSpring 0.3s; + animation: leftSpring 0.3s; +} + +.swipebox-touch #swipebox-container:before, .swipebox-touch #swipebox-container:after { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transition: all .3s ease; + transition: all .3s ease; + content: ' '; + position: absolute; + z-index: 999; + top: 0; + height: 100%; + width: 20px; + opacity: 0; +} +.swipebox-touch #swipebox-container:before { + left: 0; + -webkit-box-shadow: inset 10px 0px 10px -8px #656565; + box-shadow: inset 10px 0px 10px -8px #656565; +} +.swipebox-touch #swipebox-container:after { + right: 0; + -webkit-box-shadow: inset -10px 0px 10px -8px #656565; + box-shadow: inset -10px 0px 10px -8px #656565; +} +.swipebox-touch #swipebox-overlay.leftSpringTouch #swipebox-container:before { + opacity: 1; +} +.swipebox-touch #swipebox-overlay.rightSpringTouch #swipebox-container:after { + opacity: 1; +} + +@-webkit-keyframes rightSpring { + 0% { + left: 0; + } + 50% { + left: -30px; + } + 100% { + left: 0; + } +} + +@keyframes rightSpring { + 0% { + left: 0; + } + 50% { + left: -30px; + } + 100% { + left: 0; + } +} +@-webkit-keyframes leftSpring { + 0% { + left: 0; + } + 50% { + left: 30px; + } + 100% { + left: 0; + } +} +@keyframes leftSpring { + 0% { + left: 0; + } + 50% { + left: 30px; + } + 100% { + left: 0; + } +} +@media screen and (min-width: 800px) { + #swipebox-close { + right: 10px; + } + + #swipebox-arrows { + width: 92%; + max-width: 800px; + } +} +/* Skin +--------------------------*/ +#swipebox-overlay { + background: #0d0d0d; +} + +#swipebox-bottom-bar, +#swipebox-top-bar { + text-shadow: 1px 1px 1px black; + background: #000; + opacity: 0.95; +} + +#swipebox-top-bar { + color: white !important; + font-size: 15px; + line-height: 43px; + font-family: Helvetica, Arial, sans-serif; +} +#swipebox-top-bar div.caption { + font-size: 13px; + line-height: 20px; +} diff --git a/sources/lib/plugins/gallery/swipebox/css/swipebox.min.css b/sources/lib/plugins/gallery/swipebox/css/swipebox.min.css new file mode 100755 index 0000000..a500a38 --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/css/swipebox.min.css @@ -0,0 +1 @@ +/*! Swipebox v1.3.0 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */html.swipebox-html.swipebox-touch{overflow:hidden!important}#swipebox-overlay img{border:none!important}#swipebox-overlay{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999!important;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#swipebox-container{position:relative;width:100%;height:100%}#swipebox-slider{-webkit-transition:-webkit-transform .4s ease;transition:transform .4s ease;height:100%;left:0;top:0;width:100%;white-space:nowrap;position:absolute;display:none;cursor:pointer}#swipebox-slider .slide{height:100%;width:100%;line-height:1px;text-align:center;display:inline-block}#swipebox-slider .slide:before{content:"";display:inline-block;height:50%;width:1px;margin-right:-1px}#swipebox-slider .slide .swipebox-inline-container,#swipebox-slider .slide .swipebox-video-container,#swipebox-slider .slide img{display:inline-block;max-height:100%;max-width:100%;margin:0;padding:0;width:auto;height:auto;vertical-align:middle}#swipebox-slider .slide .swipebox-video-container{background:0 0;max-width:1140px;max-height:100%;width:100%;padding:5%;-webkit-box-sizing:border-box;box-sizing:border-box}#swipebox-slider .slide .swipebox-video-container .swipebox-video{width:100%;height:0;padding-bottom:56.25%;overflow:hidden;position:relative}#swipebox-slider .slide .swipebox-video-container .swipebox-video iframe{width:100%!important;height:100%!important;position:absolute;top:0;left:0}#swipebox-slider .slide-loading{background:url(../img/loader.gif) center center no-repeat}#swipebox-bottom-bar,#swipebox-top-bar{-webkit-transition:.5s;transition:.5s;position:absolute;left:0;z-index:999;min-height:50px;width:100%}#swipebox-bottom-bar{bottom:-50px}#swipebox-bottom-bar.visible-bars{-webkit-transform:translate3d(0,-50px,0);transform:translate3d(0,-50px,0)}#swipebox-top-bar{bottom:100%}#swipebox-top-bar.visible-bars{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}#swipebox-title{display:block;width:100%;text-align:center}#swipebox-close,#swipebox-next,#swipebox-prev{background-image:url(../img/icons.png);background-repeat:no-repeat;border:none!important;text-decoration:none!important;cursor:pointer;width:50px;height:50px;top:0}#swipebox-arrows{display:block;margin:0 auto;width:100%;height:50px}#swipebox-prev{background-position:-32px 13px;float:left}#swipebox-next{background-position:-78px 13px;float:right}#swipebox-close{top:0;right:0;position:absolute;z-index:9999;background-position:15px 12px}.swipebox-no-close-button #swipebox-close{display:none}#swipebox-next.disabled,#swipebox-prev.disabled{opacity:.3}.swipebox-no-touch #swipebox-overlay.rightSpring #swipebox-slider{-webkit-animation:rightSpring .3s;animation:rightSpring .3s}.swipebox-no-touch #swipebox-overlay.leftSpring #swipebox-slider{-webkit-animation:leftSpring .3s;animation:leftSpring .3s}.swipebox-touch #swipebox-container:after,.swipebox-touch #swipebox-container:before{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:all .3s ease;transition:all .3s ease;content:' ';position:absolute;z-index:999;top:0;height:100%;width:20px;opacity:0}.swipebox-touch #swipebox-container:before{left:0;-webkit-box-shadow:inset 10px 0 10px -8px #656565;box-shadow:inset 10px 0 10px -8px #656565}.swipebox-touch #swipebox-container:after{right:0;-webkit-box-shadow:inset -10px 0 10px -8px #656565;box-shadow:inset -10px 0 10px -8px #656565}.swipebox-touch #swipebox-overlay.leftSpringTouch #swipebox-container:before,.swipebox-touch #swipebox-overlay.rightSpringTouch #swipebox-container:after{opacity:1}@-webkit-keyframes rightSpring{0%{left:0}50%{left:-30px}100%{left:0}}@keyframes rightSpring{0%{left:0}50%{left:-30px}100%{left:0}}@-webkit-keyframes leftSpring{0%{left:0}50%{left:30px}100%{left:0}}@keyframes leftSpring{0%{left:0}50%{left:30px}100%{left:0}}@media screen and (min-width:800px){#swipebox-close{right:10px}#swipebox-arrows{width:92%;max-width:800px}}#swipebox-overlay{background:#0d0d0d}#swipebox-bottom-bar,#swipebox-top-bar{text-shadow:1px 1px 1px #000;background:#000;opacity:.95}#swipebox-top-bar{color:#fff!important;font-size:15px;line-height:43px;font-family:Helvetica,Arial,sans-serif}#swipebox-top-bar div.caption{font-size:13px;line-height:20px} \ No newline at end of file diff --git a/sources/lib/plugins/gallery/swipebox/img/icons.png b/sources/lib/plugins/gallery/swipebox/img/icons.png new file mode 100755 index 0000000000000000000000000000000000000000..7a79f7a75cc17d4dd61795b9f4c82cca02853ca8 GIT binary patch literal 729 zcmV;~0w(>5P);IjcJFb2c|KzybM1alZL1|jAxf(;-sujmH&t$?xu*g?6kaw6CD zPw@+N(nPYNHp%nNJ+b}lB$=6#Z7>+j(XA#)@*V3f3ylqE{N&P@a0QAv4vgD{z6YVP z0|O6Z(+iCY(DZ^bEA~6k`5UUU@_-e%sb4oR?>y8zuIr(39h;gTh6AZbsfGu#z$1MPU4h6$?J+w9u>kEbU>J|if1TZSPM)Wfj z<2WV6ba74-h^0i-PO|O!an9DC4AVS#G&9hb92`^Mc{Ht_pCA zfGl^>1ajYC_7DE2`I&B;co$tIxZIG{B+CXlR=AXT(gPT!zL4I@F(zN2*SvDYADbp2 zs4wJ+w_K4wEMotzxlw}N;#~G~naO?Jk@vK5Z%3{=wew&P$Wg$Rx--*5Sz5>rxU_`1 z>htjGS}=8awuFj&jcz^H@=%rzG8bF|rH;WqaMOlULw5C#IgWF}9RchJY?4|-&H>SM z2{+sfum{{8_4x*2HDm_JMZlE-o8D&7Im3j?k$6$IN)JIaTiM2B=zWEGx`ia~gi2?A zx{|emgE~MX*|Nbj5Bq05EVH|Iw<~ZESFrmP`%jp6lblsR7L0;>r@Q23!_WId%R4#lvkVY(#Qg00000 LNkvXXu0mjfCyPmL literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/swipebox/img/icons.svg b/sources/lib/plugins/gallery/swipebox/img/icons.svg new file mode 100755 index 0000000..414e844 --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/img/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/sources/lib/plugins/gallery/swipebox/img/loader.gif b/sources/lib/plugins/gallery/swipebox/img/loader.gif new file mode 100755 index 0000000000000000000000000000000000000000..a82c2aa4dc6114efde112eee35bc36975e0e67e4 GIT binary patch literal 2608 zcmdVceNwsM1&+2XX^}Xdn?PVUdn-NeEaq(kLKf zf+zxFVL(Ko^(Zebpk+d>1(iYyA}Us1qK3jil&ELNTIbrH>e=RkrQO-t{@Zp=_x$<% z^E~Hse$V&&$m3!p>vZ0LH}EY0xVpNIj*fbIdIkjrMMOlz#>T4EYJY$KsHmvqjtmxqOgaX1{MQW+Q+C=?2tnwmO0JFBXyBoaw(ZfcuN9A^_0K$RblLk3pk=Md?)l$pV#C(ZYlb!0P#TCm?RifChhRXyCbIy|U8aV2(u*}r1ZDvwcRpr3 z!hmHNC3H4NCxE<4_2i^{pmEQ(e5!Pdp3U8ZbJ-?ZZT_kAI43{G#OzlyO>&cJ7)MO8 zrZYEAo8nA0Hh^VPe0c-1&&}u|%ETOe`+d!*?dFHz(ACKAxCIafJ9;kQuK zk);do!#;m^e8sO5#S7VH$}LuO%C!v@=aklxy?m~*;@P35RZ%IJs9`^~HBM4w@7Yye zV^xF`4KVtB`E^5dPflwATt+ z#n&clXyza2!%|n{09T)T|Dt{F&j!GUp@z5TX{THpMZh(sjozZ%f;PXz{Hbmf=cwpN3iU z3m(jJ@hzQAQxA=>#f2C@jXOad^Qf)GMvtdcnTpi~wzIqFa^_%J?aayYEslj_j9^Ee zS6p|?Rqh*6&Utz@SETI+@3e9P>6alyEYUIy6LCc4u#`n8CMThB`#E%WmPffh<32a*R>X#VjU-9l7oF z`9iB4niG`)-mqSS1b8vnB-62`O%hM8}uJ5U8gy2>?53sBov|OzJElvGm@m<9%W^} z`XRElWSrU92-LsICC@h0OK8TqP0nCKx>1F**9;_jHzu&kYPDcP8~>U!oXBq7?h`mn zPUIZ51 zEvDDqMS)*raPmlge@tlKzCA{lVtb?(@AD0cPC5IK86D}lV&Q_Q(>IN@0ThjNtOsh1jMOKF|bF!UU8?^Ic z>VDr18AZea-g~K8RP8Sym8a*g(;&lXKZdVYuGq4cRe+se|#|KK4dPvR1~v9Ly93JPmK3@C!cP^q29GYF0C@!+KUbx{*f8VOrN?>6Q5* hw6?$|ULSgP+4Ycxy=$k>J1cIzv*Ok-{*PX*zXK?kgfsvE literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.js b/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.js new file mode 100755 index 0000000..f5e970b --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.js @@ -0,0 +1,956 @@ +/*! Swipebox v1.4.1 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */ + +;( function ( window, document, $, undefined ) { + + $.swipebox = function( elem, options ) { + + // Default options + var ui, + defaults = { + useCSS : true, + useSVG : true, + initialIndexOnArray : 0, + removeBarsOnMobile : true, + hideCloseButtonOnMobile : false, + hideBarsDelay : 3000, + videoMaxWidth : 1140, + vimeoColor : 'cccccc', + beforeOpen: null, + afterOpen: null, + afterClose: null, + nextSlide: null, + prevSlide: null, + loopAtEnd: false, + autoplayVideos: false, + queryStringData: {}, + toggleClassOnLoad: '', + titleAttribute: 'title', + captionAttribute: 'data-caption' + }, + + plugin = this, + elements = [], // slides array [ { href:'...', title:'...' }, ...], + $elem, + selector = elem.selector, + $selector = $( selector ), + isMobile = navigator.userAgent.match( /(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i ), + isTouch = isMobile !== null || document.createTouch !== undefined || ( 'ontouchstart' in window ) || ( 'onmsgesturechange' in window ) || navigator.msMaxTouchPoints, + supportSVG = !! document.createElementNS && !! document.createElementNS( 'http://www.w3.org/2000/svg', 'svg').createSVGRect, + winWidth = window.innerWidth ? window.innerWidth : $( window ).width(), + winHeight = window.innerHeight ? window.innerHeight : $( window ).height(), + currentX = 0, + /* jshint multistr: true */ + html = '

\ +
\ +
\ +
\ +
\ +
\ +
\ +
\ + \ + \ +
\ +
\ + \ +
\ +
'; + + plugin.settings = {}; + + $.swipebox.close = function () { + ui.closeSlide(); + }; + + $.swipebox.extend = function () { + return ui; + }; + + plugin.init = function() { + + plugin.settings = $.extend( {}, defaults, options ); + + if ( $.isArray( elem ) ) { + + elements = elem; + ui.target = $( window ); + ui.init( plugin.settings.initialIndexOnArray ); + + } else { + + $( document ).on( 'click', selector, function( event ) { + + // console.log( isTouch ); + + if ( event.target.parentNode.className === 'slide current' ) { + + return false; + } + + if ( ! $.isArray( elem ) ) { + ui.destroy(); + $elem = $( selector ); + ui.actions(); + } + + elements = []; + var index , relType, relVal; + + // Allow for HTML5 compliant attribute before legacy use of rel + if ( ! relVal ) { + relType = 'data-rel'; + relVal = $( this ).attr( relType ); + } + + if ( ! relVal ) { + relType = 'rel'; + relVal = $( this ).attr( relType ); + } + + if ( relVal && relVal !== '' && relVal !== 'nofollow' ) { + $elem = $selector.filter( '[' + relType + '="' + relVal + '"]' ); + } else { + $elem = $( selector ); + } + + $elem.each( function() { + + var title = null, + caption = null, + href = null; + + if ( $( this ).attr( plugin.settings.titleAttribute ) ) { + title = $( this ).attr( plugin.settings.titleAttribute ); + } + + if ( $( this ).attr( plugin.settings.captionAttribute ) ) { + caption = $( this ).attr( plugin.settings.captionAttribute ); + } + + if ( $( this ).attr( 'href' ) ) { + href = $( this ).attr( 'href' ); + } + + elements.push( { + href: href, + title: title, + caption: caption + } ); + } ); + + index = $elem.index( $( this ) ); + event.preventDefault(); + event.stopPropagation(); + ui.target = $( event.target ); + ui.init( index ); + } ); + } + }; + + ui = { + + /** + * Initiate Swipebox + */ + init : function( index ) { + if ( plugin.settings.beforeOpen ) { + plugin.settings.beforeOpen(); + } + this.target.trigger( 'swipebox-start' ); + $.swipebox.isOpen = true; + this.build(); + this.openSlide( index ); + this.openMedia( index ); + this.preloadMedia( index+1 ); + this.preloadMedia( index-1 ); + if ( plugin.settings.afterOpen ) { + plugin.settings.afterOpen(); + } + }, + + /** + * Built HTML containers and fire main functions + */ + build : function () { + var $this = this, bg; + + $( 'body' ).append( html ); + + if ( supportSVG && plugin.settings.useSVG === true ) { + bg = $( '#swipebox-close' ).css( 'background-image' ); + bg = bg.replace( 'png', 'svg' ); + $( '#swipebox-prev, #swipebox-next, #swipebox-close' ).css( { + 'background-image' : bg + } ); + } + + if ( isMobile && plugin.settings.removeBarsOnMobile ) { + $( '#swipebox-bottom-bar, #swipebox-top-bar' ).remove(); + } + + $.each( elements, function() { + $( '#swipebox-slider' ).append( '
' ); + } ); + + $this.setDim(); + $this.actions(); + + if ( isTouch ) { + $this.gesture(); + } + + // Devices can have both touch and keyboard input so always allow key events + $this.keyboard(); + + $this.animBars(); + $this.resize(); + + }, + + /** + * Set dimensions depending on windows width and height + */ + setDim : function () { + + var width, height, sliderCss = {}; + + // Reset dimensions on mobile orientation change + if ( 'onorientationchange' in window ) { + + window.addEventListener( 'orientationchange', function() { + if ( window.orientation === 0 ) { + width = winWidth; + height = winHeight; + } else if ( window.orientation === 90 || window.orientation === -90 ) { + width = winHeight; + height = winWidth; + } + }, false ); + + + } else { + + width = window.innerWidth ? window.innerWidth : $( window ).width(); + height = window.innerHeight ? window.innerHeight : $( window ).height(); + } + + sliderCss = { + width : width, + height : height + }; + + $( '#swipebox-overlay' ).css( sliderCss ); + + }, + + /** + * Reset dimensions on window resize envent + */ + resize : function () { + var $this = this; + + $( window ).resize( function() { + $this.setDim(); + } ).resize(); + }, + + /** + * Check if device supports CSS transitions + */ + supportTransition : function () { + + var prefixes = 'transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition'.split( ' ' ), + i; + + for ( i = 0; i < prefixes.length; i++ ) { + if ( document.createElement( 'div' ).style[ prefixes[i] ] !== undefined ) { + return prefixes[i]; + } + } + return false; + }, + + /** + * Check if CSS transitions are allowed (options + devicesupport) + */ + doCssTrans : function () { + if ( plugin.settings.useCSS && this.supportTransition() ) { + return true; + } + }, + + /** + * Touch navigation + */ + gesture : function () { + + var $this = this, + index, + hDistance, + vDistance, + hDistanceLast, + vDistanceLast, + hDistancePercent, + vSwipe = false, + hSwipe = false, + hSwipMinDistance = 10, + vSwipMinDistance = 50, + startCoords = {}, + endCoords = {}, + bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' ), + slider = $( '#swipebox-slider' ); + + bars.addClass( 'visible-bars' ); + $this.setTimeout(); + + $( 'body' ).bind( 'touchstart', function( event ) { + + $( this ).addClass( 'touching' ); + index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ); + endCoords = event.originalEvent.targetTouches[0]; + startCoords.pageX = event.originalEvent.targetTouches[0].pageX; + startCoords.pageY = event.originalEvent.targetTouches[0].pageY; + + $( '#swipebox-slider' ).css( { + '-webkit-transform' : 'translate3d(' + currentX +'%, 0, 0)', + 'transform' : 'translate3d(' + currentX + '%, 0, 0)' + } ); + + $( '.touching' ).bind( 'touchmove',function( event ) { + event.preventDefault(); + event.stopPropagation(); + endCoords = event.originalEvent.targetTouches[0]; + + if ( ! hSwipe ) { + vDistanceLast = vDistance; + vDistance = endCoords.pageY - startCoords.pageY; + if ( Math.abs( vDistance ) >= vSwipMinDistance || vSwipe ) { + var opacity = 0.75 - Math.abs(vDistance) / slider.height(); + + slider.css( { 'top': vDistance + 'px' } ); + slider.css( { 'opacity': opacity } ); + + vSwipe = true; + } + } + + hDistanceLast = hDistance; + hDistance = endCoords.pageX - startCoords.pageX; + hDistancePercent = hDistance * 100 / winWidth; + + if ( ! hSwipe && ! vSwipe && Math.abs( hDistance ) >= hSwipMinDistance ) { + $( '#swipebox-slider' ).css( { + '-webkit-transition' : '', + 'transition' : '' + } ); + hSwipe = true; + } + + if ( hSwipe ) { + + // swipe left + if ( 0 < hDistance ) { + + // first slide + if ( 0 === index ) { + // console.log( 'first' ); + $( '#swipebox-overlay' ).addClass( 'leftSpringTouch' ); + } else { + // Follow gesture + $( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); + $( '#swipebox-slider' ).css( { + '-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)', + 'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)' + } ); + } + + // swipe rught + } else if ( 0 > hDistance ) { + + // last Slide + if ( elements.length === index +1 ) { + // console.log( 'last' ); + $( '#swipebox-overlay' ).addClass( 'rightSpringTouch' ); + } else { + $( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); + $( '#swipebox-slider' ).css( { + '-webkit-transform' : 'translate3d(' + ( currentX + hDistancePercent ) +'%, 0, 0)', + 'transform' : 'translate3d(' + ( currentX + hDistancePercent ) + '%, 0, 0)' + } ); + } + + } + } + } ); + + return false; + + } ).bind( 'touchend',function( event ) { + event.preventDefault(); + event.stopPropagation(); + + $( '#swipebox-slider' ).css( { + '-webkit-transition' : '-webkit-transform 0.4s ease', + 'transition' : 'transform 0.4s ease' + } ); + + vDistance = endCoords.pageY - startCoords.pageY; + hDistance = endCoords.pageX - startCoords.pageX; + hDistancePercent = hDistance*100/winWidth; + + // Swipe to bottom to close + if ( vSwipe ) { + vSwipe = false; + if ( Math.abs( vDistance ) >= 2 * vSwipMinDistance && Math.abs( vDistance ) > Math.abs( vDistanceLast ) ) { + var vOffset = vDistance > 0 ? slider.height() : - slider.height(); + slider.animate( { top: vOffset + 'px', 'opacity': 0 }, + 300, + function () { + $this.closeSlide(); + } ); + } else { + slider.animate( { top: 0, 'opacity': 1 }, 300 ); + } + + } else if ( hSwipe ) { + + hSwipe = false; + + // swipeLeft + if( hDistance >= hSwipMinDistance && hDistance >= hDistanceLast) { + + $this.getPrev(); + + // swipeRight + } else if ( hDistance <= -hSwipMinDistance && hDistance <= hDistanceLast) { + + $this.getNext(); + } + + } else { // Top and bottom bars have been removed on touchable devices + // tap + if ( ! bars.hasClass( 'visible-bars' ) ) { + $this.showBars(); + $this.setTimeout(); + } else { + $this.clearTimeout(); + $this.hideBars(); + } + } + + $( '#swipebox-slider' ).css( { + '-webkit-transform' : 'translate3d(' + currentX + '%, 0, 0)', + 'transform' : 'translate3d(' + currentX + '%, 0, 0)' + } ); + + $( '#swipebox-overlay' ).removeClass( 'leftSpringTouch' ).removeClass( 'rightSpringTouch' ); + $( '.touching' ).off( 'touchmove' ).removeClass( 'touching' ); + + } ); + }, + + /** + * Set timer to hide the action bars + */ + setTimeout: function () { + if ( plugin.settings.hideBarsDelay > 0 ) { + var $this = this; + $this.clearTimeout(); + $this.timeout = window.setTimeout( function() { + $this.hideBars(); + }, + + plugin.settings.hideBarsDelay + ); + } + }, + + /** + * Clear timer + */ + clearTimeout: function () { + window.clearTimeout( this.timeout ); + this.timeout = null; + }, + + /** + * Show navigation and title bars + */ + showBars : function () { + var bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' ); + bars.addClass( 'visible-bars' ); + }, + + /** + * Hide navigation and title bars + */ + hideBars : function () { + var bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' ); + bars.removeClass( 'visible-bars' ); + }, + + /** + * Animate navigation and top bars + */ + animBars : function () { + var $this = this, + bars = $( '#swipebox-top-bar, #swipebox-bottom-bar' ); + + bars.addClass( 'visible-bars' ); + $this.setTimeout(); + + $( '#swipebox-slider' ).click( function() { + if ( ! bars.hasClass( 'visible-bars' ) ) { + $this.showBars(); + $this.setTimeout(); + } + } ); + + $( '#swipebox-bottom-bar' ).hover( function() { + $this.showBars(); + bars.addClass( 'visible-bars' ); + $this.clearTimeout(); + + }, function() { + if ( plugin.settings.hideBarsDelay > 0 ) { + bars.removeClass( 'visible-bars' ); + $this.setTimeout(); + } + + } ); + }, + + /** + * Keyboard navigation + */ + keyboard : function () { + var $this = this; + $( window ).bind( 'keyup', function( event ) { + event.preventDefault(); + event.stopPropagation(); + + if ( event.keyCode === 37 ) { + + $this.getPrev(); + + } else if ( event.keyCode === 39 ) { + + $this.getNext(); + + } else if ( event.keyCode === 27 ) { + + $this.closeSlide(); + } + } ); + }, + + /** + * Navigation events : go to next slide, go to prevous slide and close + */ + actions : function () { + var $this = this, + action = 'touchend click'; // Just detect for both event types to allow for multi-input + + if ( elements.length < 2 ) { + + $( '#swipebox-bottom-bar' ).hide(); + + if ( undefined === elements[ 1 ] ) { + $( '#swipebox-top-bar' ).hide(); + } + + } else { + $( '#swipebox-prev' ).bind( action, function( event ) { + event.preventDefault(); + event.stopPropagation(); + $this.getPrev(); + $this.setTimeout(); + } ); + + $( '#swipebox-next' ).bind( action, function( event ) { + event.preventDefault(); + event.stopPropagation(); + $this.getNext(); + $this.setTimeout(); + } ); + } + + $( '#swipebox-close' ).bind( action, function() { + $this.closeSlide(); + } ); + }, + + /** + * Set current slide + */ + setSlide : function ( index, isFirst ) { + + isFirst = isFirst || false; + + var slider = $( '#swipebox-slider' ); + + currentX = -index*100; + + if ( this.doCssTrans() ) { + slider.css( { + '-webkit-transform' : 'translate3d(' + (-index*100)+'%, 0, 0)', + 'transform' : 'translate3d(' + (-index*100)+'%, 0, 0)' + } ); + } else { + slider.animate( { left : ( -index*100 )+'%' } ); + } + + $( '#swipebox-slider .slide' ).removeClass( 'current' ); + $( '#swipebox-slider .slide' ).eq( index ).addClass( 'current' ); + this.setTitle( index ); + + if ( isFirst ) { + slider.fadeIn(); + } + + $( '#swipebox-prev, #swipebox-next' ).removeClass( 'disabled' ); + + if ( index === 0 ) { + $( '#swipebox-prev' ).addClass( 'disabled' ); + } else if ( index === elements.length - 1 && plugin.settings.loopAtEnd !== true ) { + $( '#swipebox-next' ).addClass( 'disabled' ); + } + + // reshow bars on each navigation + this.showBars(); + this.setTimeout(); + }, + + /** + * Open slide + */ + openSlide : function ( index ) { + $( 'html' ).addClass( 'swipebox-html' ); + if ( isTouch ) { + $( 'html' ).addClass( 'swipebox-touch' ); + + if ( plugin.settings.hideCloseButtonOnMobile ) { + $( 'html' ).addClass( 'swipebox-no-close-button' ); + } + } else { + $( 'html' ).addClass( 'swipebox-no-touch' ); + } + $( window ).trigger( 'resize' ); // fix scroll bar visibility on desktop + this.setSlide( index, true ); + }, + + /** + * Set a time out if the media is a video + */ + preloadMedia : function ( index ) { + var $this = this, + src = null; + + if ( elements[ index ] !== undefined ) { + src = elements[ index ].href; + } + + if ( ! $this.isVideo( src ) ) { + setTimeout( function() { + $this.openMedia( index ); + }, 1000); + } else { + $this.openMedia( index ); + } + }, + + /** + * Open + */ + openMedia : function ( index ) { + var $this = this, + src, + slide; + + if ( elements[ index ] !== undefined ) { + src = elements[ index ].href; + } + + if ( index < 0 || index >= elements.length ) { + return false; + } + + slide = $( '#swipebox-slider .slide' ).eq( index ); + + if ( ! $this.isVideo( src ) ) { + slide.addClass( 'slide-loading' ); + $this.loadMedia( src, function() { + slide.removeClass( 'slide-loading' ); + slide.html( this ); + } ); + } else { + slide.html( $this.getVideo( src ) ); + } + + }, + + /** + * Set link title attribute as caption + */ + setTitle : function ( index ) { + var title = null; + var caption = null; + + $( '#swipebox-title' ).empty(); + + if ( elements[ index ] !== undefined ) { + title = elements[ index ].title; + caption = elements[ index ].caption; + } + + if ( title || caption ) { + $( '#swipebox-top-bar' ).show(); + + if(title) { + var tdiv = $('
').addClass('title').text(title); + $('#swipebox-title').append(tdiv); + } + + if(caption) { + var cdiv = $('
').addClass('caption').text(caption); + $('#swipebox-title').append(cdiv); + } + } else { + $( '#swipebox-top-bar' ).hide(); + } + }, + + /** + * Check if the URL is a video + */ + isVideo : function ( src ) { + + if ( src ) { + if ( src.match( /(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/) || src.match( /vimeo\.com\/([0-9]*)/ ) || src.match( /youtu\.be\/([a-zA-Z0-9\-_]+)/ ) ) { + return true; + } + + if ( src.toLowerCase().indexOf( 'swipeboxvideo=1' ) >= 0 ) { + + return true; + } + } + + }, + + /** + * Parse URI querystring and: + * - overrides value provided via dictionary + * - rebuild it again returning a string + */ + parseUri : function (uri, customData) { + var a = document.createElement('a'), + qs = {}; + + // Decode the URI + a.href = decodeURIComponent( uri ); + + // QueryString to Object + if ( a.search ) { + qs = JSON.parse( '{"' + a.search.toLowerCase().replace('?','').replace(/&/g,'","').replace(/=/g,'":"') + '"}' ); + } + + // Extend with custom data + if ( $.isPlainObject( customData ) ) { + qs = $.extend( qs, customData, plugin.settings.queryStringData ); // The dev has always the final word + } + + // Return querystring as a string + return $ + .map( qs, function (val, key) { + if ( val && val > '' ) { + return encodeURIComponent( key ) + '=' + encodeURIComponent( val ); + } + }) + .join('&'); + }, + + /** + * Get video iframe code from URL + */ + getVideo : function( url ) { + var iframe = '', + youtubeUrl = url.match( /((?:www\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/ ), + youtubeShortUrl = url.match(/(?:www\.)?youtu\.be\/([a-zA-Z0-9\-_]+)/), + vimeoUrl = url.match( /(?:www\.)?vimeo\.com\/([0-9]*)/ ), + qs = ''; + if ( youtubeUrl || youtubeShortUrl) { + if ( youtubeShortUrl ) { + youtubeUrl = youtubeShortUrl; + } + qs = ui.parseUri( url, { + 'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ), + 'v' : '' + }); + iframe = ''; + + } else if ( vimeoUrl ) { + qs = ui.parseUri( url, { + 'autoplay' : ( plugin.settings.autoplayVideos ? '1' : '0' ), + 'byline' : '0', + 'portrait' : '0', + 'color': plugin.settings.vimeoColor + }); + iframe = ''; + + } else { + iframe = ''; + } + + return '
' + iframe + '
'; + }, + + /** + * Load image + */ + loadMedia : function ( src, callback ) { + // Inline content + if ( src.trim().indexOf('#') === 0 ) { + callback.call( + $('
', { + 'class' : 'swipebox-inline-container' + }) + .append( + $(src) + .clone() + .toggleClass( plugin.settings.toggleClassOnLoad ) + ) + ); + } + // Everything else + else { + if ( ! this.isVideo( src ) ) { + var img = $( '' ).on( 'load', function() { + callback.call( img ); + } ); + + img.attr( 'src', src ); + } + } + }, + + /** + * Get next slide + */ + getNext : function () { + var $this = this, + src, + index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ); + if ( index + 1 < elements.length ) { + + src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); + $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); + index++; + $this.setSlide( index ); + $this.preloadMedia( index+1 ); + if ( plugin.settings.nextSlide ) { + plugin.settings.nextSlide(); + } + } else { + + if ( plugin.settings.loopAtEnd === true ) { + src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src' ); + $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); + index = 0; + $this.preloadMedia( index ); + $this.setSlide( index ); + $this.preloadMedia( index + 1 ); + if ( plugin.settings.nextSlide ) { + plugin.settings.nextSlide(); + } + } else { + $( '#swipebox-overlay' ).addClass( 'rightSpring' ); + setTimeout( function() { + $( '#swipebox-overlay' ).removeClass( 'rightSpring' ); + }, 500 ); + } + } + }, + + /** + * Get previous slide + */ + getPrev : function () { + var index = $( '#swipebox-slider .slide' ).index( $( '#swipebox-slider .slide.current' ) ), + src; + if ( index > 0 ) { + src = $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe').attr( 'src' ); + $( '#swipebox-slider .slide' ).eq( index ).contents().find( 'iframe' ).attr( 'src', src ); + index--; + this.setSlide( index ); + this.preloadMedia( index-1 ); + if ( plugin.settings.prevSlide ) { + plugin.settings.prevSlide(); + } + } else { + $( '#swipebox-overlay' ).addClass( 'leftSpring' ); + setTimeout( function() { + $( '#swipebox-overlay' ).removeClass( 'leftSpring' ); + }, 500 ); + } + }, + + nextSlide : function () { + // Callback for next slide + }, + + prevSlide : function () { + // Callback for prev slide + }, + + /** + * Close + */ + closeSlide : function () { + $( 'html' ).removeClass( 'swipebox-html' ); + $( 'html' ).removeClass( 'swipebox-touch' ); + $( window ).trigger( 'resize' ); + this.destroy(); + }, + + /** + * Destroy the whole thing + */ + destroy : function () { + $( window ).unbind( 'keyup' ); + $( 'body' ).unbind( 'touchstart' ); + $( 'body' ).unbind( 'touchmove' ); + $( 'body' ).unbind( 'touchend' ); + $( '#swipebox-slider' ).unbind(); + $( '#swipebox-overlay' ).remove(); + + if ( ! $.isArray( elem ) ) { + elem.removeData( '_swipebox' ); + } + + if ( this.target ) { + this.target.trigger( 'swipebox-destroy' ); + } + + $.swipebox.isOpen = false; + + if ( plugin.settings.afterClose ) { + plugin.settings.afterClose(); + } + } + }; + + plugin.init(); + }; + + $.fn.swipebox = function( options ) { + + if ( ! $.data( this, '_swipebox' ) ) { + var swipebox = new $.swipebox( this, options ); + this.data( '_swipebox', swipebox ); + } + return this.data( '_swipebox' ); + + }; + +}( window, document, jQuery ) ); \ No newline at end of file diff --git a/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.min.js b/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.min.js new file mode 100755 index 0000000..195d15c --- /dev/null +++ b/sources/lib/plugins/gallery/swipebox/js/jquery.swipebox.min.js @@ -0,0 +1,2 @@ +/*! Swipebox v1.4.1 | Constantin Saguin csag.co | MIT License | github.com/brutaldesign/swipebox */ +!function(a,b,c,d){c.swipebox=function(e,f){var g,h,i={useCSS:!0,useSVG:!0,initialIndexOnArray:0,removeBarsOnMobile:!0,hideCloseButtonOnMobile:!1,hideBarsDelay:3e3,videoMaxWidth:1140,vimeoColor:"cccccc",beforeOpen:null,afterOpen:null,afterClose:null,nextSlide:null,prevSlide:null,loopAtEnd:!1,autoplayVideos:!1,queryStringData:{},toggleClassOnLoad:"",titleAttribute:"title",captionAttribute:"data-caption"},j=this,k=[],l=e.selector,m=c(l),n=navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i),o=null!==n||b.createTouch!==d||"ontouchstart"in a||"onmsgesturechange"in a||navigator.msMaxTouchPoints,p=!!b.createElementNS&&!!b.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect,q=a.innerWidth?a.innerWidth:c(a).width(),r=a.innerHeight?a.innerHeight:c(a).height(),s=0,t='
';j.settings={},c.swipebox.close=function(){g.closeSlide()},c.swipebox.extend=function(){return g},j.init=function(){j.settings=c.extend({},i,f),c.isArray(e)?(k=e,g.target=c(a),g.init(j.settings.initialIndexOnArray)):c(b).on("click",l,function(a){if("slide current"===a.target.parentNode.className)return!1;c.isArray(e)||(g.destroy(),h=c(l),g.actions()),k=[];var b,d,f;f||(d="data-rel",f=c(this).attr(d)),f||(d="rel",f=c(this).attr(d)),h=f&&""!==f&&"nofollow"!==f?m.filter("["+d+'="'+f+'"]'):c(l),h.each(function(){var a=null,b=null,d=null;c(this).attr(j.settings.titleAttribute)&&(a=c(this).attr(j.settings.titleAttribute)),c(this).attr(j.settings.captionAttribute)&&(b=c(this).attr(j.settings.captionAttribute)),c(this).attr("href")&&(d=c(this).attr("href")),k.push({href:d,title:a,caption:b})}),b=h.index(c(this)),a.preventDefault(),a.stopPropagation(),g.target=c(a.target),g.init(b)})},g={init:function(a){j.settings.beforeOpen&&j.settings.beforeOpen(),this.target.trigger("swipebox-start"),c.swipebox.isOpen=!0,this.build(),this.openSlide(a),this.openMedia(a),this.preloadMedia(a+1),this.preloadMedia(a-1),j.settings.afterOpen&&j.settings.afterOpen()},build:function(){var a,b=this;c("body").append(t),p&&j.settings.useSVG===!0&&(a=c("#swipebox-close").css("background-image"),a=a.replace("png","svg"),c("#swipebox-prev, #swipebox-next, #swipebox-close").css({"background-image":a})),n&&j.settings.removeBarsOnMobile&&c("#swipebox-bottom-bar, #swipebox-top-bar").remove(),c.each(k,function(){c("#swipebox-slider").append('
')}),b.setDim(),b.actions(),o&&b.gesture(),b.keyboard(),b.animBars(),b.resize()},setDim:function(){var b,d,e={};"onorientationchange"in a?a.addEventListener("orientationchange",function(){0===a.orientation?(b=q,d=r):(90===a.orientation||-90===a.orientation)&&(b=r,d=q)},!1):(b=a.innerWidth?a.innerWidth:c(a).width(),d=a.innerHeight?a.innerHeight:c(a).height()),e={width:b,height:d},c("#swipebox-overlay").css(e)},resize:function(){var b=this;c(a).resize(function(){b.setDim()}).resize()},supportTransition:function(){var a,c="transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition".split(" ");for(a=0;a=m||i)){var p=.75-Math.abs(d)/r.height();r.css({top:d+"px"}),r.css({opacity:p}),i=!0}e=b,b=o.pageX-n.pageX,g=100*b/q,!j&&!i&&Math.abs(b)>=l&&(c("#swipebox-slider").css({"-webkit-transition":"",transition:""}),j=!0),j&&(b>0?0===a?c("#swipebox-overlay").addClass("leftSpringTouch"):(c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c("#swipebox-slider").css({"-webkit-transform":"translate3d("+(s+g)+"%, 0, 0)",transform:"translate3d("+(s+g)+"%, 0, 0)"})):0>b&&(k.length===a+1?c("#swipebox-overlay").addClass("rightSpringTouch"):(c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c("#swipebox-slider").css({"-webkit-transform":"translate3d("+(s+g)+"%, 0, 0)",transform:"translate3d("+(s+g)+"%, 0, 0)"}))))}),!1}).bind("touchend",function(a){if(a.preventDefault(),a.stopPropagation(),c("#swipebox-slider").css({"-webkit-transition":"-webkit-transform 0.4s ease",transition:"transform 0.4s ease"}),d=o.pageY-n.pageY,b=o.pageX-n.pageX,g=100*b/q,i)if(i=!1,Math.abs(d)>=2*m&&Math.abs(d)>Math.abs(f)){var k=d>0?r.height():-r.height();r.animate({top:k+"px",opacity:0},300,function(){h.closeSlide()})}else r.animate({top:0,opacity:1},300);else j?(j=!1,b>=l&&b>=e?h.getPrev():-l>=b&&e>=b&&h.getNext()):p.hasClass("visible-bars")?(h.clearTimeout(),h.hideBars()):(h.showBars(),h.setTimeout());c("#swipebox-slider").css({"-webkit-transform":"translate3d("+s+"%, 0, 0)",transform:"translate3d("+s+"%, 0, 0)"}),c("#swipebox-overlay").removeClass("leftSpringTouch").removeClass("rightSpringTouch"),c(".touching").off("touchmove").removeClass("touching")})},setTimeout:function(){if(j.settings.hideBarsDelay>0){var b=this;b.clearTimeout(),b.timeout=a.setTimeout(function(){b.hideBars()},j.settings.hideBarsDelay)}},clearTimeout:function(){a.clearTimeout(this.timeout),this.timeout=null},showBars:function(){var a=c("#swipebox-top-bar, #swipebox-bottom-bar");a.addClass("visible-bars")},hideBars:function(){var a=c("#swipebox-top-bar, #swipebox-bottom-bar");a.removeClass("visible-bars")},animBars:function(){var a=this,b=c("#swipebox-top-bar, #swipebox-bottom-bar");b.addClass("visible-bars"),a.setTimeout(),c("#swipebox-slider").click(function(){b.hasClass("visible-bars")||(a.showBars(),a.setTimeout())}),c("#swipebox-bottom-bar").hover(function(){a.showBars(),b.addClass("visible-bars"),a.clearTimeout()},function(){j.settings.hideBarsDelay>0&&(b.removeClass("visible-bars"),a.setTimeout())})},keyboard:function(){var b=this;c(a).bind("keyup",function(a){a.preventDefault(),a.stopPropagation(),37===a.keyCode?b.getPrev():39===a.keyCode?b.getNext():27===a.keyCode&&b.closeSlide()})},actions:function(){var a=this,b="touchend click";k.length<2?(c("#swipebox-bottom-bar").hide(),d===k[1]&&c("#swipebox-top-bar").hide()):(c("#swipebox-prev").bind(b,function(b){b.preventDefault(),b.stopPropagation(),a.getPrev(),a.setTimeout()}),c("#swipebox-next").bind(b,function(b){b.preventDefault(),b.stopPropagation(),a.getNext(),a.setTimeout()})),c("#swipebox-close").bind(b,function(){a.closeSlide()})},setSlide:function(a,b){b=b||!1;var d=c("#swipebox-slider");s=100*-a,this.doCssTrans()?d.css({"-webkit-transform":"translate3d("+100*-a+"%, 0, 0)",transform:"translate3d("+100*-a+"%, 0, 0)"}):d.animate({left:100*-a+"%"}),c("#swipebox-slider .slide").removeClass("current"),c("#swipebox-slider .slide").eq(a).addClass("current"),this.setTitle(a),b&&d.fadeIn(),c("#swipebox-prev, #swipebox-next").removeClass("disabled"),0===a?c("#swipebox-prev").addClass("disabled"):a===k.length-1&&j.settings.loopAtEnd!==!0&&c("#swipebox-next").addClass("disabled"),this.showBars(),this.setTimeout()},openSlide:function(b){c("html").addClass("swipebox-html"),o?(c("html").addClass("swipebox-touch"),j.settings.hideCloseButtonOnMobile&&c("html").addClass("swipebox-no-close-button")):c("html").addClass("swipebox-no-touch"),c(a).trigger("resize"),this.setSlide(b,!0)},preloadMedia:function(a){var b=this,c=null;k[a]!==d&&(c=k[a].href),b.isVideo(c)?b.openMedia(a):setTimeout(function(){b.openMedia(a)},1e3)},openMedia:function(a){var b,e,f=this;return k[a]!==d&&(b=k[a].href),0>a||a>=k.length?!1:(e=c("#swipebox-slider .slide").eq(a),void(f.isVideo(b)?e.html(f.getVideo(b)):(e.addClass("slide-loading"),f.loadMedia(b,function(){e.removeClass("slide-loading"),e.html(this)}))))},setTitle:function(a){var b=null,e=null;if(c("#swipebox-title").empty(),k[a]!==d&&(b=k[a].title,e=k[a].caption),b||e){if(c("#swipebox-top-bar").show(),b){var f=c("
").addClass("title").text(b);c("#swipebox-title").append(f)}if(e){var g=c("
").addClass("caption").text(e);c("#swipebox-title").append(g)}}else c("#swipebox-top-bar").hide()},isVideo:function(a){if(a){if(a.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||a.match(/vimeo\.com\/([0-9]*)/)||a.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/))return!0;if(a.toLowerCase().indexOf("swipeboxvideo=1")>=0)return!0}},parseUri:function(a,d){var e=b.createElement("a"),f={};return e.href=decodeURIComponent(a),e.search&&(f=JSON.parse('{"'+e.search.toLowerCase().replace("?","").replace(/&/g,'","').replace(/=/g,'":"')+'"}')),c.isPlainObject(d)&&(f=c.extend(f,d,j.settings.queryStringData)),c.map(f,function(a,b){return a&&a>""?encodeURIComponent(b)+"="+encodeURIComponent(a):void 0}).join("&")},getVideo:function(a){var b="",c=a.match(/((?:www\.)?youtube\.com|(?:www\.)?youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/),d=a.match(/(?:www\.)?youtu\.be\/([a-zA-Z0-9\-_]+)/),e=a.match(/(?:www\.)?vimeo\.com\/([0-9]*)/),f="";return c||d?(d&&(c=d),f=g.parseUri(a,{autoplay:j.settings.autoplayVideos?"1":"0",v:""}),b=''):e?(f=g.parseUri(a,{autoplay:j.settings.autoplayVideos?"1":"0",byline:"0",portrait:"0",color:j.settings.vimeoColor}),b=''):b='','
'+b+"
"},loadMedia:function(a,b){if(0===a.trim().indexOf("#"))b.call(c("
",{"class":"swipebox-inline-container"}).append(c(a).clone().toggleClass(j.settings.toggleClassOnLoad)));else if(!this.isVideo(a)){var d=c("").on("load",function(){b.call(d)});d.attr("src",a)}},getNext:function(){var a,b=this,d=c("#swipebox-slider .slide").index(c("#swipebox-slider .slide.current"));d+10?(a=c("#swipebox-slider .slide").eq(b).contents().find("iframe").attr("src"),c("#swipebox-slider .slide").eq(b).contents().find("iframe").attr("src",a),b--,this.setSlide(b),this.preloadMedia(b-1),j.settings.prevSlide&&j.settings.prevSlide()):(c("#swipebox-overlay").addClass("leftSpring"),setTimeout(function(){c("#swipebox-overlay").removeClass("leftSpring")},500))},nextSlide:function(){},prevSlide:function(){},closeSlide:function(){c("html").removeClass("swipebox-html"),c("html").removeClass("swipebox-touch"),c(a).trigger("resize"),this.destroy()},destroy:function(){c(a).unbind("keyup"),c("body").unbind("touchstart"),c("body").unbind("touchmove"),c("body").unbind("touchend"),c("#swipebox-slider").unbind(),c("#swipebox-overlay").remove(),c.isArray(e)||e.removeData("_swipebox"),this.target&&this.target.trigger("swipebox-destroy"),c.swipebox.isOpen=!1,j.settings.afterClose&&j.settings.afterClose()}},j.init()},c.fn.swipebox=function(a){if(!c.data(this,"_swipebox")){var b=new c.swipebox(this,a);this.data("_swipebox",b)}return this.data("_swipebox")}}(window,document,jQuery); \ No newline at end of file diff --git a/sources/lib/plugins/gallery/syntax.php b/sources/lib/plugins/gallery/syntax.php new file mode 100755 index 0000000..80a841c --- /dev/null +++ b/sources/lib/plugins/gallery/syntax.php @@ -0,0 +1,663 @@ + + * @author Joe Lapp + * @author Dave Doyle + */ + +if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); +require_once(DOKU_INC.'inc/search.php'); +require_once(DOKU_INC.'inc/JpegMeta.php'); + +class syntax_plugin_gallery extends DokuWiki_Syntax_Plugin { + + /** + * What kind of syntax are we? + */ + function getType(){ + return 'substition'; + } + + /** + * What about paragraphs? + */ + function getPType(){ + return 'block'; + } + + /** + * Where to sort in? + */ + function getSort(){ + return 301; + } + + + /** + * Connect pattern to lexer + */ + function connectTo($mode) { + $this->Lexer->addSpecialPattern('\{\{gallery>[^}]*\}\}',$mode,'plugin_gallery'); + } + + /** + * Handle the match + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + global $ID; + $match = substr($match,10,-2); //strip markup from start and end + + $data = array(); + + $data['galid'] = substr(md5($match),0,4); + + // alignment + $data['align'] = 0; + if(substr($match,0,1) == ' ') $data['align'] += 1; + if(substr($match,-1,1) == ' ') $data['align'] += 2; + + // extract params + list($ns,$params) = explode('?',$match,2); + $ns = trim($ns); + + // namespace (including resolving relatives) + if(!preg_match('/^https?:\/\//i',$ns)){ + $data['ns'] = resolve_id(getNS($ID),$ns); + }else{ + $data['ns'] = $ns; + } + + // set the defaults + $data['tw'] = $this->getConf('thumbnail_width'); + $data['th'] = $this->getConf('thumbnail_height'); + $data['iw'] = $this->getConf('image_width'); + $data['ih'] = $this->getConf('image_height'); + $data['cols'] = $this->getConf('cols'); + $data['filter'] = ''; + $data['lightbox'] = false; + $data['direct'] = false; + $data['showname'] = false; + $data['showtitle'] = false; + $data['reverse'] = false; + $data['random'] = false; + $data['cache'] = true; + $data['crop'] = false; + $data['recursive']= true; + $data['sort'] = $this->getConf('sort'); + $data['limit'] = 0; + $data['offset'] = 0; + $data['paginate'] = 0; + + // parse additional options + $params = $this->getConf('options').','.$params; + $params = preg_replace('/[,&\?]+/',' ',$params); + $params = explode(' ',$params); + foreach($params as $param){ + if($param === '') continue; + if($param == 'titlesort'){ + $data['sort'] = 'title'; + }elseif($param == 'datesort'){ + $data['sort'] = 'date'; + }elseif($param == 'modsort'){ + $data['sort'] = 'mod'; + }elseif(preg_match('/^=(\d+)$/',$param,$match)){ + $data['limit'] = $match[1]; + }elseif(preg_match('/^\+(\d+)$/',$param,$match)){ + $data['offset'] = $match[1]; + }elseif(is_numeric($param)){ + $data['cols'] = (int) $param; + }elseif(preg_match('/^~(\d+)$/',$param,$match)){ + $data['paginate'] = $match[1]; + }elseif(preg_match('/^(\d+)([xX])(\d+)$/',$param,$match)){ + if($match[2] == 'X'){ + $data['iw'] = $match[1]; + $data['ih'] = $match[3]; + }else{ + $data['tw'] = $match[1]; + $data['th'] = $match[3]; + } + }elseif(strpos($param,'*') !== false){ + $param = preg_quote($param,'/'); + $param = '/^'.str_replace('\\*','.*?',$param).'$/'; + $data['filter'] = $param; + }else{ + if(substr($param,0,2) == 'no'){ + $data[substr($param,2)] = false; + }else{ + $data[$param] = true; + } + } + } + + // implicit direct linking? + if($data['lightbox']) $data['direct'] = true; + + + return $data; + } + + /** + * Create output + */ + function render($mode, Doku_Renderer $R, $data){ + global $ID; + if($mode == 'xhtml'){ + $R->info['cache'] &= $data['cache']; + $R->doc .= $this->_gallery($data); + return true; + }elseif($mode == 'metadata'){ + $rel = p_get_metadata($ID,'relation',METADATA_RENDER_USING_CACHE); + $img = $rel['firstimage']; + if(empty($img)){ + $files = $this->_findimages($data); + if(count($files)) $R->internalmedia($files[0]['id']); + } + return true; + } + return false; + } + + /** + * Loads images from a MediaRSS or ATOM feed + */ + function _loadRSS($url){ + require_once(DOKU_INC.'inc/FeedParser.php'); + $feed = new FeedParser(); + $feed->set_feed_url($url); + $feed->init(); + $files = array(); + + // base url to use for broken feeds with non-absolute links + $main = parse_url($url); + $host = $main['scheme'].'://'. + $main['host']. + (($main['port'])?':'.$main['port']:''); + $path = dirname($main['path']).'/'; + + foreach($feed->get_items() as $item){ + if ($enclosure = $item->get_enclosure()){ + // skip non-image enclosures + if($enclosure->get_type()){ + if(substr($enclosure->get_type(),0,5) != 'image') continue; + }else{ + if(!preg_match('/\.(jpe?g|png|gif)(\?|$)/i', + $enclosure->get_link())) continue; + } + + // non absolute links + $ilink = $enclosure->get_link(); + if(!preg_match('/^https?:\/\//i',$ilink)){ + if($ilink{0} == '/'){ + $ilink = $host.$ilink; + }else{ + $ilink = $host.$path.$ilink; + } + } + $link = $item->link; + if(!preg_match('/^https?:\/\//i',$link)){ + if($link{0} == '/'){ + $link = $host.$link; + }else{ + $link = $host.$path.$link; + } + } + + $files[] = array( + 'id' => $ilink, + 'isimg' => true, + 'file' => basename($ilink), + // decode to avoid later double encoding + 'title' => htmlspecialchars_decode($enclosure->get_title(),ENT_COMPAT), + 'desc' => strip_tags(htmlspecialchars_decode($enclosure->get_description(),ENT_COMPAT)), + 'width' => $enclosure->get_width(), + 'height' => $enclosure->get_height(), + 'mtime' => $item->get_date('U'), + 'ctime' => $item->get_date('U'), + 'detail' => $link, + ); + } + } + return $files; + } + + /** + * Gather all photos matching the given criteria + */ + function _findimages(&$data){ + global $conf; + $files = array(); + + // http URLs are supposed to be media RSS feeds + if(preg_match('/^https?:\/\//i',$data['ns'])){ + $files = $this->_loadRSS($data['ns']); + $data['_single'] = false; + }else{ + $dir = utf8_encodeFN(str_replace(':','/',$data['ns'])); + // all possible images for the given namespace (or a single image) + if(is_file($conf['mediadir'].'/'.$dir)){ + require_once(DOKU_INC.'inc/JpegMeta.php'); + $files[] = array( + 'id' => $data['ns'], + 'isimg' => preg_match('/\.(jpe?g|gif|png)$/',$dir), + 'file' => basename($dir), + 'mtime' => filemtime($conf['mediadir'].'/'.$dir), + 'meta' => new JpegMeta($conf['mediadir'].'/'.$dir) + ); + $data['_single'] = true; + }else{ + $depth = $data['recursive'] ? 0 : 1; + search($files, + $conf['mediadir'], + 'search_media', + array('depth'=>$depth), + $dir); + $data['_single'] = false; + } + } + + // done, yet? + $len = count($files); + if(!$len) return $files; + if($data['single']) return $files; + + // filter images + for($i=0; $i<$len; $i++){ + if(!$files[$i]['isimg']){ + unset($files[$i]); // this is faster, because RE was done before + }elseif($data['filter']){ + if(!preg_match($data['filter'],noNS($files[$i]['id']))) unset($files[$i]); + } + } + if($len<1) return $files; + + // random? + if($data['random']){ + shuffle($files); + }else{ + // sort? + if($data['sort'] == 'date'){ + usort($files,array($this,'_datesort')); + }elseif($data['sort'] == 'mod'){ + usort($files,array($this,'_modsort')); + }elseif($data['sort'] == 'title'){ + usort($files,array($this,'_titlesort')); + } + + // reverse? + if($data['reverse']) $files = array_reverse($files); + } + + // limits and offsets? + if($data['offset']) $files = array_slice($files,$data['offset']); + if($data['limit']) $files = array_slice($files,0,$data['limit']); + + return $files; + } + + /** + * usort callback to sort by file lastmodified time + */ + function _modsort($a,$b){ + if($a['mtime'] < $b['mtime']) return -1; + if($a['mtime'] > $b['mtime']) return 1; + return strcmp($a['file'],$b['file']); + } + + /** + * usort callback to sort by EXIF date + */ + function _datesort($a,$b){ + $da = $this->_meta($a,'cdate'); + $db = $this->_meta($b,'cdate'); + if($da < $db) return -1; + if($da > $db) return 1; + return strcmp($a['file'],$b['file']); + } + + /** + * usort callback to sort by EXIF title + */ + function _titlesort($a,$b){ + $ta = $this->_meta($a,'title'); + $tb = $this->_meta($b,'title'); + return strcmp($ta,$tb); + } + + + /** + * Does the gallery formatting + */ + function _gallery($data){ + global $conf; + global $lang; + $ret = ''; + + $files = $this->_findimages($data); + + //anything found? + if(!count($files)){ + $ret .= '
'.$lang['nothingfound'].'
'; + return $ret; + } + + // prepare alignment + $align = ''; + $xalign = ''; + if($data['align'] == 1){ + $align = ' gallery_right'; + $xalign = ' align="right"'; + } + if($data['align'] == 2){ + $align = ' gallery_left'; + $xalign = ' align="left"'; + } + if($data['align'] == 3){ + $align = ' gallery_center'; + $xalign = ' align="center"'; + } + if(!$data['_single']){ + if(!$align) $align = ' gallery_center'; // center galleries on default + if(!$xalign) $xalign = ' align="center"'; + } + + $page = 0; + + // build gallery + if($data['_single']){ + $ret .= $this->_image($files[0],$data); + $ret .= $this->_showname($files[0],$data); + $ret .= $this->_showtitle($files[0],$data); + }elseif($data['cols'] > 0){ // format as table + $close_pg = false; + + $i = 0; + foreach($files as $img){ + + // new page? + if($data['paginate'] && ($i % $data['paginate'] == 0)){ + $ret .= ''; + $close_pg = false; + } + + } + + if ($close_tr){ + // add remaining empty cells + while($i % $data['cols']){ + $ret .= ''; + $i++; + } + $ret .= ''; + } + + if(!$data['paginate']){ + $ret .= ''; + }elseif ($close_pg){ + $ret .= ''; + $ret .= '
'; + } + }else{ // format as div sequence + $i = 0; + $close_pg = false; + foreach($files as $img){ + + if($data['paginate'] && ($i % $data['paginate'] == 0)){ + $ret .= ''; + $close_pg = false; + } + } + + if($close_pg) $ret .= '
'; + + $ret .= '
'; + } + + // pagination links + $pgret = ''; + if($page){ + $pgret .= ''; + } + + return '
'.$pgret.$ret.'
'; + } + + /** + * Defines how a thumbnail should look like + */ + function _image(&$img,$data){ + global $ID; + + // calculate thumbnail size + if(!$data['crop']){ + $w = (int) $this->_meta($img,'width'); + $h = (int) $this->_meta($img,'height'); + if($w && $h){ + $dim = array(); + if($w > $data['tw'] || $h > $data['th']){ + $ratio = $this->_ratio($img,$data['tw'],$data['th']); + $w = floor($w * $ratio); + $h = floor($h * $ratio); + $dim = array('w'=>$w,'h'=>$h); + } + }else{ + $data['crop'] = true; // no size info -> always crop + } + } + if($data['crop']){ + $w = $data['tw']; + $h = $data['th']; + $dim = array('w'=>$w,'h'=>$h); + } + + //prepare img attributes + $i = array(); + $i['width'] = $w; + $i['height'] = $h; + $i['border'] = 0; + $i['alt'] = $this->_meta($img,'title'); + $i['class'] = 'tn'; + $iatt = buildAttributes($i); + $src = ml($img['id'],$dim); + + // prepare lightbox dimensions + $w_lightbox = (int) $this->_meta($img,'width'); + $h_lightbox = (int) $this->_meta($img,'height'); + $dim_lightbox = array(); + if($w_lightbox > $data['iw'] || $h_lightbox > $data['ih']){ + $ratio = $this->_ratio($img,$data['iw'],$data['ih']); + $w_lightbox = floor($w_lightbox * $ratio); + $h_lightbox = floor($h_lightbox * $ratio); + $dim_lightbox = array('w'=>$w_lightbox,'h'=>$h_lightbox); + } + + //prepare link attributes + $a = array(); + $a['title'] = $this->_meta($img,'title'); + $a['data-caption'] = trim(str_replace("\n",' ',$this->_meta($img,'desc'))); + if(!$a['data-caption']) unset($a['data-caption']); + if($data['lightbox']){ + $href = ml($img['id'],$dim_lightbox); + $a['class'] = "lightbox JSnocheck"; + $a['rel'] = 'lightbox[gal-'.substr(md5($ID),4).']'; //unique ID for the gallery + }elseif($img['detail'] && !$data['direct']){ + $href = $img['detail']; + }else{ + $href = ml($img['id'],array('id'=>$ID),$data['direct']); + } + $aatt = buildAttributes($a); + + // prepare output + $ret = ''; + $ret .= ''; + $ret .= ''; + $ret .= ''; + return $ret; + } + + + /** + * Defines how a filename + link should look + */ + function _showname($img,$data){ + global $ID; + + if(!$data['showname'] ) { return ''; } + + //prepare link + $lnk = ml($img['id'],array('id'=>$ID),false); + + // prepare output + $ret = ''; + $ret .= '
'; + $ret .= hsc($img['file']); + $ret .= ''; + return $ret; + } + + /** + * Defines how title + link should look + */ + function _showtitle($img,$data){ + global $ID; + + if(!$data['showtitle'] ) { return ''; } + + //prepare link + $lnk = ml($img['id'],array('id'=>$ID),false); + + // prepare output + $ret = ''; + $ret .= '
'; + $ret .= hsc($this->_meta($img,'title')); + $ret .= ''; + return $ret; + } + + /** + * Return the metadata of an item + * + * Automatically checks if a JPEGMeta object is available or if all data is + * supplied in array + */ + function _meta(&$img,$opt){ + if($img['meta']){ + // map JPEGMeta calls to opt names + + switch($opt){ + case 'title': + return $img['meta']->getField('Simple.Title'); + case 'desc': + return $img['meta']->getField('Iptc.Caption'); + case 'cdate': + return $img['meta']->getField('Date.EarliestTime'); + case 'width': + return $img['meta']->getField('File.Width'); + case 'height': + return $img['meta']->getField('File.Height'); + + + default: + return ''; + } + + }else{ + // just return the array field + return $img[$opt]; + } + } + + /** + * Calculates the multiplier needed to resize the image to the given + * dimensions + * + * @author Andreas Gohr + */ + function _ratio(&$img,$maxwidth,$maxheight=0){ + if(!$maxheight) $maxheight = $maxwidth; + + $w = $this->_meta($img,'width'); + $h = $this->_meta($img,'height'); + + $ratio = 1; + if($w >= $h){ + if($w >= $maxwidth){ + $ratio = $maxwidth/$w; + }elseif($h > $maxheight){ + $ratio = $maxheight/$h; + } + }else{ + if($h >= $maxheight){ + $ratio = $maxheight/$h; + }elseif($w > $maxwidth){ + $ratio = $maxwidth/$w; + } + } + return $ratio; + } + +} + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/sources/lib/plugins/translation/README b/sources/lib/plugins/translation/README new file mode 100755 index 0000000..1a5b5ef --- /dev/null +++ b/sources/lib/plugins/translation/README @@ -0,0 +1,25 @@ +translation Plugin for DokuWiki + +All documentation for this plugin can be found at +http://www.dokuwiki.org/plugin:translation + +If you install this plugin manually, make sure it is installed in +lib/plugins/translation/ - if the folder is called different it +will not work! + +Please refer to http://www.dokuwiki.org/plugins for additional info +on how to install plugins in DokuWiki. + +---- +Copyright (C) Andreas Gohr + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See the COPYING file in your DokuWiki folder for details diff --git a/sources/lib/plugins/translation/action.php b/sources/lib/plugins/translation/action.php new file mode 100755 index 0000000..80f82ab --- /dev/null +++ b/sources/lib/plugins/translation/action.php @@ -0,0 +1,289 @@ + + * @author Guy Brand + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); +require_once(DOKU_PLUGIN . 'action.php'); + +class action_plugin_translation extends DokuWiki_Action_Plugin { + + /** + * For the helper plugin + * @var helper_plugin_translation + */ + var $helper = null; + + var $locale; + + /** + * Constructor. Load helper plugin + */ + function __construct() { + $this->helper =& plugin_load('helper', 'translation'); + } + + /** + * Register the events + */ + function register(Doku_Event_Handler $controller) { + $scriptName = basename($_SERVER['PHP_SELF']); + + // should the lang be applied to UI? + if($this->getConf('translateui')) { + switch($scriptName) { + case 'js.php': + $controller->register_hook('INIT_LANG_LOAD', 'BEFORE', $this, 'translation_js'); + $controller->register_hook('JS_CACHE_USE', 'BEFORE', $this, 'translation_jscache'); + break; + + case 'ajax.php': + $controller->register_hook('INIT_LANG_LOAD', 'BEFORE', $this, 'translate_media_manager'); + break; + + case 'mediamanager.php': + $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'setJsCacheKey'); + break; + + default: + $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'setJsCacheKey'); + } + } + + if($scriptName !== 'js.php' && $scriptName !== 'ajax.php') { + $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'translation_hook'); + $controller->register_hook('MEDIAMANAGER_STARTED', 'BEFORE', $this, 'translation_hook'); + } + + $controller->register_hook('SEARCH_QUERY_PAGELOOKUP', 'AFTER', $this, 'translation_search'); + $controller->register_hook('COMMON_PAGETPL_LOAD', 'AFTER', $this, 'page_template_replacement'); + } + + /** + * Hook Callback. Make current language available as page template placeholder and handle + * original language copying + * + * @param $event + * @param $args + */ + function page_template_replacement(&$event, $args) { + global $ID; + + // load orginal content as template? + if($this->getConf('copytrans') && $this->helper->istranslatable($ID, false)) { + // look for existing translations + $translations = $this->helper->getAvailableTranslations($ID); + if($translations) { + // find original language (might've been provided via parameter or use first translation) + $orig = (string) $_REQUEST['fromlang']; + if(!$orig) $orig = array_shift(array_keys($translations)); + + // load file + $origfile = $translations[$orig]; + $event->data['tpl'] = io_readFile(wikiFN($origfile)); + + // prefix with warning + $warn = io_readFile($this->localFN('totranslate')); + if($warn) $warn .= "\n\n"; + $event->data['tpl'] = $warn . $event->data['tpl']; + + // show user a choice of translations if any + if(count($translations) > 1) { + $links = array(); + foreach($translations as $t => $l) { + $links[] = '' . $this->helper->getLocalName($t) . ''; + } + + msg( + sprintf( + $this->getLang('transloaded'), + $this->helper->getLocalName($orig), + join(', ', $links) + ) + ); + } + + } + } + + // apply placeholders + $event->data['tpl'] = str_replace('@LANG@', $this->helper->realLC(''), $event->data['tpl']); + $event->data['tpl'] = str_replace('@TRANS@', $this->helper->getLangPart($ID), $event->data['tpl']); + } + + /** + * Hook Callback. Load correct translation when loading JavaScript + * + * @param $event + * @param $args + */ + function translation_js(&$event, $args) { + global $conf; + if(!isset($_GET['lang'])) return; + if(!in_array($_GET['lang'], $this->helper->translations)) return; + $lang = $_GET['lang']; + $event->data = $lang; + $conf['lang'] = $lang; + } + + /** + * Hook Callback. Pass language code to JavaScript dispatcher + * + * @param $event + * @param $args + * @return bool + */ + function setJsCacheKey(&$event, $args) { + if(!isset($this->locale)) return false; + $count = count($event->data['script']); + for($i = 0; $i < $count; $i++) { + if(strpos($event->data['script'][$i]['src'], '/lib/exe/js.php') !== false) { + $event->data['script'][$i]['src'] .= '&lang=' . hsc($this->locale); + } + } + + return false; + } + + /** + * Hook Callback. Make sure the JavaScript is translation dependent + * + * @param $event + * @param $args + */ + function translation_jscache(&$event, $args) { + if(!isset($_GET['lang'])) return; + if(!in_array($_GET['lang'], $this->helper->translations)) return; + + $lang = $_GET['lang']; + // reuse the constructor to reinitialize the cache key + if(method_exists($event->data, '__construct')) { + // New PHP 5 style constructor + $event->data->__construct( + $event->data->key . $lang, + $event->data->ext + ); + } else { + // Old PHP 4 style constructor - deprecated + $event->data->cache( + $event->data->key . $lang, + $event->data->ext + ); + } + } + + /** + * Hook Callback. Translate the AJAX loaded media manager + * + * @param $event + * @param $args + */ + function translate_media_manager(&$event, $args) { + global $conf; + if(isset($_REQUEST['ID'])) { + $id = getID(); + $lc = $this->helper->getLangPart($id); + } elseif(isset($_SESSION[DOKU_COOKIE]['translationlc'])) { + $lc = $_SESSION[DOKU_COOKIE]['translationlc']; + } else { + return; + } + if(!$lc) return; + + $conf['lang'] = $lc; + $event->data = $lc; + } + + /** + * Hook Callback. Change the UI language in foreign language namespaces + */ + function translation_hook(&$event, $args) { + global $ID; + global $lang; + global $conf; + global $ACT; + // redirect away from start page? + if($this->conf['redirectstart'] && $ID == $conf['start'] && $ACT == 'show') { + $lc = $this->helper->getBrowserLang(); + if(!$lc) $lc = $conf['lang']; + header('Location: ' . wl($lc . ':' . $conf['start'], '', true, '&')); + exit; + } + + // check if we are in a foreign language namespace + $lc = $this->helper->getLangPart($ID); + + // store language in session (for page related views only) + if(in_array($ACT, array('show', 'recent', 'diff', 'edit', 'preview', 'source', 'subscribe'))) { + $_SESSION[DOKU_COOKIE]['translationlc'] = $lc; + } + if(!$lc) $lc = $_SESSION[DOKU_COOKIE]['translationlc']; + if(!$lc) return; + $this->locale = $lc; + + if(!$this->getConf('translateui')) { + return true; + } + + if(file_exists(DOKU_INC . 'inc/lang/' . $lc . '/lang.php')) { + require(DOKU_INC . 'inc/lang/' . $lc . '/lang.php'); + } + $conf['lang_before_translation'] = $conf['lang']; //store for later access in syntax plugin + $conf['lang'] = $lc; + + return true; + } + + /** + * Hook Callback. Resort page match results so that results are ordered by translation, having the + * default language first + */ + function translation_search(&$event, $args) { + + if($event->data['has_titles']) { + // sort into translation slots + $res = array(); + foreach($event->result as $r => $t) { + $tr = $this->helper->getLangPart($r); + if(!is_array($res["x$tr"])) $res["x$tr"] = array(); + $res["x$tr"][] = array($r, $t); + } + // sort by translations + ksort($res); + // combine + $event->result = array(); + foreach($res as $r) { + foreach($r as $l) { + $event->result[$l[0]] = $l[1]; + } + } + } else { + # legacy support for old DokuWiki hooks + + // sort into translation slots + $res = array(); + foreach($event->result as $r) { + $tr = $this->helper->getLangPart($r); + if(!is_array($res["x$tr"])) $res["x$tr"] = array(); + $res["x$tr"][] = $r; + } + // sort by translations + ksort($res); + // combine + $event->result = array(); + foreach($res as $r) { + $event->result = array_merge($event->result, $r); + } + } + } + +} + +//Setup VIM: ex: et ts=4 : diff --git a/sources/lib/plugins/translation/admin.php b/sources/lib/plugins/translation/admin.php new file mode 100644 index 0000000..f8d95a1 --- /dev/null +++ b/sources/lib/plugins/translation/admin.php @@ -0,0 +1,101 @@ +defaultlang; + + /** @var Doku_Renderer_xhtml $xhtml_renderer */ + $xhtml_renderer = p_get_renderer('xhtml'); + + echo "

" . $this->getLang("menu") . "

"; + echo ""; + echo ""; + if ($this->getConf('show_path')) { + echo ""; + } + foreach ($helper->translations as $t) { + if($t === $default_language) { + continue; + } + echo ""; + } + echo ""; + + $pages = $this->getAllPages(); + foreach ($pages as $page) { + if (!$helper->getLangPart($page["id"]) === $default_language || + !$helper->istranslatable($page["id"], false) || + !page_exists($page["id"]) + ) { + continue; + } + // We have an existing and translatable page in the default language + $showRow = false; + $row = ""; + if ($this->getConf('show_path')) { + $row .= ""; + } + + list($lc, $idpart) = $helper->getTransParts($page["id"]); + + foreach ($helper->translations as $t) { + if ($t === $default_language) { + continue; + } + + list($translID, $name) = $helper->buildTransID($t, $idpart); + + + $difflink = ''; + if(!page_exists($translID)) { + $class = "missing"; + $title = $this->getLang("missing"); + $showRow = true; + } else { + $translfn = wikiFN($translID); + if($page['mtime'] > filemtime($translfn)) { + $class = "outdated"; + $difflink = " getLang('old'); + $showRow = true; + } else { + $class = "current"; + $title = $this->getLang('current'); + } + } + $row .= ""; + } + $row .= ""; + + if ($showRow) { + echo $row; + } + + } + echo "
default: $default_language" . $this->getLang('path') . "$t
" . $xhtml_renderer->internallink($page['id'],null,null,true) . "" . $xhtml_renderer->internallink($page['id'],$page['id'],null,true) . "" . $xhtml_renderer->internallink($translID,$title,null,true) . $difflink . "
"; + + } + + function getAllPages() { + $namespace = $this->getConf("translationns"); + $dir = dirname(wikiFN("$namespace:foo")); + $pages = array(); + search($pages, $dir, 'search_allpages',array()); + return $pages; + } +} diff --git a/sources/lib/plugins/translation/conf/default.php b/sources/lib/plugins/translation/conf/default.php new file mode 100755 index 0000000..3a20131 --- /dev/null +++ b/sources/lib/plugins/translation/conf/default.php @@ -0,0 +1,19 @@ + + */ + +$conf['translations'] = ''; +$conf['translationns'] = ''; +$conf['skiptrans'] = ''; +$conf['dropdown'] = 0; +$conf['translateui'] = 0; +$conf['redirectstart'] = 0; +$conf['checkage'] = 0; +$conf['about'] = ''; +$conf['localabout'] = 0; +$conf['display'] = 'langcode,title'; +$conf['copytrans'] = 0; +$conf['show_path'] = 1; diff --git a/sources/lib/plugins/translation/conf/metadata.php b/sources/lib/plugins/translation/conf/metadata.php new file mode 100755 index 0000000..d9c4d22 --- /dev/null +++ b/sources/lib/plugins/translation/conf/metadata.php @@ -0,0 +1,21 @@ + + */ + +$meta['translations'] = array('string','_pattern' => '/^(|[a-zA-Z\- ,]+)$/'); +$meta['translationns'] = array('string','_pattern' => '/^(|[\w:\-]+)$/'); +$meta['skiptrans'] = array('string'); +$meta['dropdown'] = array('onoff'); +$meta['display'] = array('multicheckbox', + '_choices' => array('langcode','name','flag','title','twolines')); +$meta['translateui'] = array('onoff'); +$meta['redirectstart'] = array('onoff'); +$meta['checkage'] = array('onoff'); +$meta['about'] = array('string','_pattern' => '/^(|[\w:\-]+)$/'); +$meta['localabout'] = array('onoff'); +$meta['copytrans'] = array('onoff'); +$meta['show_path'] = array('onoff'); + diff --git a/sources/lib/plugins/translation/flags/af.gif b/sources/lib/plugins/translation/flags/af.gif new file mode 100755 index 0000000000000000000000000000000000000000..9889408211b669651f8b45b359f1703d9d844090 GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h`fO|@oh5sFdk7Q<7nK+8xwil+0M!5hU0q!@qcxP2 zl=WFzb8~Y=tVQ_&0RU_OTDDs4C@7?IL}$Hc_Qb@DjEww*g!4*D^ion(R8*B)C+n2%!TWms0>s z00000A^8LV00000EC2ui01yBR000J$K%Y>EKqQWnf)CD0m(r zJv}=CC>sq86eKMmKM5HN0VyXIG8hmB79;=-r5XV=5-tr23^5`E000U<6IWRmn=~jA QAiKj#Oh3}o)IUK0JE%R1wg3PC literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/da.gif b/sources/lib/plugins/translation/flags/da.gif new file mode 100755 index 0000000000000000000000000000000000000000..03e75bd297377de3d398b7c36a613ae283ca64e2 GIT binary patch literal 374 zcmV-+0g3)cNk%w1VGsZd0M!5h@KjXydV2Tk>-Tnb?>;`x008evN%!~n^<7=$LMcM0086-4e2E%>pnj6VPWhsG4xqk z?Kd~;D=YMBYV&4h@?Blw008hoLg*hK=NTFK`T6wp^yo4&{{H^%PEN=G0QL3t`{(EL zR8;Nl?dUZ%@mN^t&(G>PIqy3=`}_OyPfzgx0Ql_A^8LV00000EC2ui01yBR000J)K$~wk`LQOGN+ra6JbZ!Z0HqsvJ{b@UkZM2? zh|Mq8a)@ReO~=rf1j4PKqIOPqE{nosuxZtJ3Uz81BNzogC_g+rG&m(Y2L~%A5i1El zii{ACk&_V-CJ7ZD1`Y%zHyn2(BoY!QDit55GdnjL6s!^!77RTVSz9{-DGL}fFDDGX UOCb*pE-?)S)G8`HJt{!}JEF&=EC2ui literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/de.gif b/sources/lib/plugins/translation/flags/de.gif new file mode 100755 index 0000000000000000000000000000000000000000..75728ddf21520698e46ede37ffb6ffe6797b2eda GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h@Z4^tKQH`sb@}U;sC_TBwX3LxFY`x7nTvh(rdIZ{ zX_SeDRmk~Z$xI*esy^4v)C;Ck|#M6-%7SXfx=i6{ABV78<$X*oGRKRWhOQtvY}y1KFV zSy{b7F`I-h{MDq&xUcenaD!W0=FJ`I9v)^%Jm`WQ@8E5%t)rE4a)5z>`|+ZjoRH|x zB0oPbA^8LV00000EC2ui01yBR000Juz>Q<*Nd1n;q=UsQ6mn1oqt{z3e#_l%GHG~8 zq|GLU_}O9-iB9+V%pPzQs_d!=1Q?2`r8*oeD-bdPb$EJwet-~ygcW&veSd)vHG>2& z3JM9EA|f3fB_%fs0Vg~e85$ZOARZnZ96mHSFDC=H0};9*ya2uc7bC(W1Ox`hF9a9L I7Z*VQJGrf#Gynhq literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/el.gif b/sources/lib/plugins/translation/flags/el.gif new file mode 100755 index 0000000000000000000000000000000000000000..b4c8c04e53f756f02342c608ba2dab22fd0c8f58 GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5hJY>%R1*_B3)xyo}qO|0?#_IX``tI=dzRBve!R7Gq z^7i)l@$&REUCfQ5+v)A~;pFX!pW6#P!~iM0f|}g`0GExV;q>(NO>)(NgUjvj_M5HX zdz9KOSIL#A-T)c2xy9!I0E*`6^7#4u_xSts_4?!H@B%f$;^N}`{QS4X=g-&gSa!$? zG@;Vg-SYJJy~yXt%GLlFq1oT@=<4&Tu*dA~^78Ze2O+8G=k5S}K;&nLhPNH9Mi1~aOXNQ>;tg^K!o zy} OO#v0p&mq#%K>#}%6u74V literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/en.gif b/sources/lib/plugins/translation/flags/en.gif new file mode 100755 index 0000000000000000000000000000000000000000..3c6bce15c44106c2df5c7a50f43ace1ed95bf047 GIT binary patch literal 260 zcmV+f0sH<(Nk%w1VGsZd0K@^ZuCMA~Rr!T{VS~Ynna}=XVtbp!|Lf{JQmlm=H*ti=+u`)AVSnMi-(+*O z!o=O#-R=JV|NsC0A^8LV00000EC2ui01yBR000GnV5Ce?*=1Q51Qm2lOygk;;}L`x zMcji75JjW$iF_oI&!s{5FcJ_(MDzF@0Y^%qa!GVN)-V7Y{&)%*0&>hYxZMEDxBPL3 z5%_H+P@p93bqfgr0u>A&4+I-^1_%`h1P&1b10D|?7Z)C52rC>24jU5(0STrB78V5p KtO)}NApkqQ-f7za literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/es.gif b/sources/lib/plugins/translation/flags/es.gif new file mode 100755 index 0000000000000000000000000000000000000000..c27d65e5f1218537ae3dc51733ae628cca95ecc6 GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h{9Ii6Q&aWzCHD3!^erv?V`Jv#0RD1w{{D9J78d>e z0Q~$+>;M4s008~{ZSwLH{{C9~`$hLlOZr4a^fNR0JU#I8LG<-I{cCIgdV2RnMC@o) z^*cM|008(lHt`J&_VzII^BMU70QB@9`1m&9008;n?pN$nQT$9y^1ZOY&ZyvwQRJse>&Z*q008{} z0RI30A^8LV00000EC2ui01yBR000Jsz@PBvEBZvphLXYfWuBSC0fQ+N0D*v{nE`mS zx5=d9p%AtT1O!r3$s!RG2{aJM3~2~0wOLu@bOIw6cnByb8!b37b9EyjgbEG|E;=?Z zDuIs=k&`(*J1`cGArB8AGa?0JWCR2(EC~r89|R?;Us@U(92^v81U*U(OvN3?B_%z} GK>$1Bgrgn+ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/et.gif b/sources/lib/plugins/translation/flags/et.gif new file mode 100755 index 0000000000000000000000000000000000000000..9397a2d084aa397846d125405e06e31f81ca3eeb GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h04K9&qux6^JMr=HUY_3K;^K64b=un6(b3TWH@g4; znaaw_QkB_ElGrLMD;O9UA|fIH7OP51N&pF@S)1KGh}1?#Mm9D!KtMoLR8%*F(lLS1 zDtpcN`1tnr_Vo1hd$8pD`}@DYzxDO?071XS#l=rgPyGD+LyOc$kJnU~+b}RN!NI}9 z!^3#4gpdSZ}D|-{0T)`T6tn^ZNSw_xJbm^6~&f zzW@LLA^8LV00000EC2ui01yBR000JwK%dY@N*DpiNMtfm_&^|+OLn^j0tDKO(QtwY z1d58ALRB;yPE0{^g~yHZIn6;Seg<2{B(Y!w7b^}B5EwsrdwqX_gAfk_hcA47fP#b% z4;Mc*Cm|s_IUPJ6BOf|FJvuD~Cp(~`q^3Os13fGSpE;pCqot>)A~**JFfa(m3kxMB KEi57;K>$0OoS+N< literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/fa.gif b/sources/lib/plugins/translation/flags/fa.gif new file mode 100755 index 0000000000000000000000000000000000000000..156040fc578e6a7a1bc2399c40523cfa7f41e945 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h>Hq-wmX^8Wx%8{60E7U`<;$nnr{(44*Y4L!v`WnA z%<_bU{AFhI#l`X!754V_V!mSfy1D>&0Q566089W}yj=SA_It{E0Av9A)YSS!MEYA> zQn*oT!fQOPJaWZz`L(wAP*C$NE%!u3^(7_sJ3I0K0Q&m+^Yioe%+28d0Qdj^`J$q; z-?XpZu|K0fcgT10rKMB0Q&+lI_wn*Es4)09H~Bm~{N?5Q`}_6v_1ypf{QUd?i2(HU z^!@$)A^8LV00000EC2ui01yBR000Jyz@AV@AV`i9j8aLsTwt)zr_+HzDl=Jv(z{%- z98MzP@ziQtfdV05BU%cV!cd^Ue)u1cX90m|4-Yy%ItO`sIRPvY0fIg#g?NZ3CkqQS zgD5CI2Mah68K5931EdWx4Fd}+3>q3YHWMNwBo4L?6FaOM8zH_UBPAshvLZVs$R+^G M%PP()JJCS^JK%<hy?y-rnB$m5kKX z)Yt$3w8iJV%jsr^%<5`g?(XiPwcY0C=H%q$?sjUj!{w&A-t&HP_xJazz2WW&0CJMj zs?RiQbXoVKJ@hTySuv= zN2U1q__xUC>|Rjp>+3{pyW-;FpP!#^kI|;N;Ipu>uD|3gSFo+9_7 z>~odVA^8LV00000EC2ui01yBR000Jyz@PB9K_CFBujQ zjbnlXC>E^k-~a$hv`X}aJLBWy`k7kwdM5alQDVPh_<}cg z$alWJu+Y%Z_Ixbx`0)4d=;7bnSiD&Ei9hrp06?xk0FeOr`1sub0Qvd(_V)Jr`uhC* z{P*|wA^8LV00000EC2ui01yBR000J%KwMxL7#Ihqnay^&U;>3`%h&1nd_5FOr4m3_ z3Qf#v=xtaOSj1Zhhho0+ZbSH_)`1o+Gy=$TG9L~JHC_*VB>+7;IX^OkASMD03nL{S z0E|C83<)406eN_FHxrFK6$~H;2Lz%k9ybsZn-!@C85trZ5?~q#w6zQb1R^3j4H6O@ R94;>}78WifBs$hX06RAOp?v@V literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/he.gif b/sources/lib/plugins/translation/flags/he.gif new file mode 100755 index 0000000000000000000000000000000000000000..c8483ae52f057c8131c67501b466bd5bdd3e46fd GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h&d$z)rTd+o`NG1&dY<`ek@k(P{eGhQTZQw1l=tW7 z=jG+)m$UxY*Vn(lzst+Z)6>(tySwr6@#Ev;)z#I-#l^k7z2V{E$H&KTkNS$B`(=yv z-{0Tv?)r0>_jQ{1{rvrQj`wtw`-Y$OgPHn>pZZ~l^#@1kYm52m>Gq1J`T!;000706 ztNQZt^z`-h>FN0U`}_F#_}kmt`T6FNFb z{r>*`A^8LV00000EC2ui01yBR000Jyz@AX3SS%(N&TQ78Ku(Nk)L>Al0tW)&!|MIM zKc9~mtI=dOoDJapig}vSIlaR@6mAehL=tRNI6FE!7qT^01W^xjxG*;4(N1r^YimXo<#s90K5PIJ(xW@mOAQtd$j-n05|~QOiVA4FDi~I zB#R{0Dk>j`9~6NU-aAHk%VprRSYEHkW3d1LYzG;FX-Onn zhgF6J3W;1D7W4HDkIUyyCpYMsOugL>bxM^~Bsx4g3U+yWeSd*G5IBW-G<<%5f)Efq z3IsJV5ik`68XFuQBOeYoKLi1tpP{3r4h{{e0RaZLGo2KlHx08Gz!Jg?#6QNzKS2OH D+N+ap literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/it.gif b/sources/lib/plugins/translation/flags/it.gif new file mode 100755 index 0000000000000000000000000000000000000000..d79e90e99e9cd5e9603313cd6a840bdf23abd8f2 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h_e@Lxg#hB>;@;lg<^TZl6BGGWRrK`q^*uf8008nX zE?Bx*09OF<4GsSO{#?CW^8f%tuR>I|RRDbed&+wNWdKyURP`k#^BEaWwod?d0P`|3 z-~a#si2%aF!uK&TNwi7yA0PHBD|yIybjEb$<>dfx005By^foqFyjac6&GsxT$jHb` zvrG6lH#(|1Xu@dvTwL=tHTFbAV83D8+uQZ^_1ypf{r&y>`}_R-{Py)K?d|L9>-R4&_%=4><>lAc z*XQTw_9`mr>FM3w-PP6A+uPgwMn>P?-}p5(_A4v+G&KBGRoU6u`8+(~%`awbW*4FfWef0J9{i>?b(b4r)RrXt3`~3U#lau|syY;)f{r&#= zmX-Riul(uh`+0f%et-M>`}Fkm@$vD`&(Hb!`TF|$_xJbw{QUj>{qpki^Yiom{{Hp# z_5c6>A^8LV00000EC2ui01yBR000JyK%Y>^yfXlG~P=jHkN z`NYJ;-sIx-_4V1=+U@f4{Mgv(>FJ7!ipSLL%F4>_4Co$*W>Bw*WcaQ;os%!>*ww5^7Q%Z@$l2x+34={uCTDs*VScizN*CV-{0TH zd6Uc0&-1ah(9q5D_4W1i^R=DBqpaE5+}zL8(a+V>{{H^`{r&Xx^z!oZ_xJbw{QU9v z_5c6>A^8LV00000EC2ui01yBR000J_K%Y?9={z1K%}De~FnqtCW1-9CdcEC-qToG$ z5ecD|gFqAx1i`@z`EU*i>M$@E20IjD(Ez=15iu`z6%_*-4mu4O9XMA#GlePzEj&6I z4IU3y5i%#DGxmY1OX%fq5vlW92*%oB|R(z2m(A46FV>*2oyUO8a)aN fC=on74Gj?iC_BeXO$-bnAQ&bdDK-`sE7#Qm$ zB&f9J_V!($tK;oCIQ#o}?d>T0`)!t_;nc5ru)FHewutjcNcHtl$p8S!x>NI3P38aq zUUJmBrF!#PT9l#P?(ReFLPFR80Hd$vS8UWRNWPJu-?qQ(>C<7Js_4pNny+2sd`ao z&-3wbA^8LV00000EC2ui01yBR000J%z!hgm5*Uv(+Gfc)IVprF;qeFrJf2N+F-kom zzZm0UvDiGK=BS~IR4S7k*=Ep)NEEgt(hHze19UAGB0dy45+)22C@wcF1}zF9B0LL; z1uz{hI0!P52@V)93nm2x7aa(z5DEzi1{gadr!@mC85s}|uL&&}C2SuB3}XWzAP$kg RI|t4OGtmIk7}eE506T1-p$-55 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ae.gif b/sources/lib/plugins/translation/flags/more/ae.gif new file mode 100755 index 0000000000000000000000000000000000000000..78d15b67dcba8937b13dd3a4514037af411e38b0 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h{#{)FXaLsM)&N)l07n4){QUF)02US&L_|bQwM{!a zJ1#CRQnykxG&K7~MF4vM{#jZ7dwc$OclrPT?f?J)bO8HGNevAR^78Wg`}@(+(fm(O z`aM1TR8;{7Oq@ zz-9buYW-7FAt514OG{zCU`Vq_{&I8u008sz^ZNSw`1ttw`T6(v_w@Ai_4W1k_V)h( z00000A^8LV00000EC2ui01yBR000JtK%dZ8dps(YfO5bj_#zRHBt&hsWTg=!;f$OB z5N%?XN|`>NnbQOA6bhMJ4yWt!dV-n+(jmd+bap#Dc{DE@EOB#nJUccj8Z|T<77l=n zju<-{6E2k;i-I;77&aiC4jdc}3nDNu2L~4y3qJ-YCo3H&F$f3>3Jt8a2E`Nx z*e)ma?d|GgUfMJ*;#5wpU2^H5pXC4me0OEedwMwl0Kvb2w=Fw?004up-P^%bgn)75 znVGe-Ym9$Uj(dB5Z#G7R%u$crhciH4k<0CYeBZx4Wny4moZreMBhqK1`Xu~6I^ zV1mz)AV^<}%Vie>(<}uCucDHiBm%+1HK+W={*92I(D{i^@+;so| zRIAVK01}EvipKwjichuW0048F%I#yL(PX{m{gRegoX&i(*{xWCU7*mff}Com)BpfG zGK0ndBboN*r#gkiP?gI^k;y)Z$NId%)XLm&snlkm&w;bs?}3Qrlb!#?%J_(o@AUcq zt+48#s{g94G=IbS+~ro4$6B7xk(<4+kg5PKqAh^LT86lYsLr0T(npcU-;|;E;+Dy5 ziPBVUA^8LV00000EC2ui01yBR000J#K*Hg0xf~k4PKUvSI1#bMNU%^vEEYpaqme*< zFN$NlLYXR>EJmUrkVX_r%T=2NScL*>rZ^OIJSh?A6Z8;wq83-~oAR!(A z2_69oHYXAoGZls*A`_+$AR8SPprQjIq#_RwHv_5`p`#5VA21vo2qCHlT3w&HAg?LB(9j#x(?I|`wXLLC literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/al.gif b/sources/lib/plugins/translation/flags/more/al.gif new file mode 100755 index 0000000000000000000000000000000000000000..c44fe0a0aec913b8667d8d4f97acb82bb5b33db5 GIT binary patch literal 370 zcmZ?wbhEHb6kyz3*}0WNQQnvVdvF@dpO9#693UzcW`aWZ|>R$Cbv9v>Zj zRafpT1H&yhiwBXux0xBPnW*0JvAA zyIK1a6Z5xF`pJP4pI&E-JAhTIwFxZ(2F);`!Bq4Wte13okgB~V^5PN-pf{h*p zAteG86(=ezEhsMpAT$_0Jer-Kp`)c3rxy$`FghC>92^n5A|eY59}El+!~wgvzV&T?|aJ3FiQL`3`h z`_}*fy1U{404(+O_3Z!vAt9Xr0Cq%0u~byK{7g*uFfjHiD)l5J`9D8TPqy~<_WMUi z;o;%v=jYws-QVBe<>lq$Dk%YNlCM|w%ym)?La`QHa4b+iq7-%^Y{1n`1ttC%gg%u`ttJf`T6<&{{Hdt z@&Et-A^8LV00000EC2ui01yBR000J!K%Y=}dKe#_4k*O=_#~nZLK!| literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ao.gif b/sources/lib/plugins/translation/flags/more/ao.gif new file mode 100755 index 0000000000000000000000000000000000000000..8c854fa1084eb333de9df427f96983a28cf4e35c GIT binary patch literal 244 zcmZ?wbhEHb6ky+^Ctb=TzxAm zD>E~*kIgX~pw=%k)gc|Ao`~`SG%K%Jl$* z-r4N-Dzo>~)6@R`{sEio;qv?T_VyE}@Al(K)#>w#)Ax+l{F&PMqu%_G)%W`P`sMci z^YioH@%e+!^Z<D}-6A+PhVGu49(E0Y`USYuTe9rimz0Ujl`@h=fpTgCg+xq(Jb)Mb)3#0Az_4WMx z{PgtnA^8LV00000EC2ui01yBR000Jyz?WfY2pItY1_Py%s0^uSYCy%5cDc)H^#~0> z;6T7)IUHiNMCH+PZQi31q|-T(77G&2&ge>OT369R@m9Ep65 z8VE8n2!|XTKMgl9a&&fh6sf5-3_E6M39$sTGcySa3?*4x85I>Q9v%h53II$JJP*nu MA|D?L&>uknJCLTx^#A|> literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/as.gif b/sources/lib/plugins/translation/flags/more/as.gif new file mode 100755 index 0000000000000000000000000000000000000000..d776ec2711bcd6ff8f0451188b0d3c739c309e70 GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5hRaEwDEp<;cvh zmg&=GczFE-1N~@c`kMd%Y#p=i+=i}ivibS>_Vx7WjD6^Ue7Tf#+fG92l$7$Pp!)If z0RZgw%*BU?{gY2F>dj8UqI{sBo&W%!m2%IZQ?T#W%Cmn}&{}ieU|-a1ec)YD`Q+Tb z004VpPuE2}qKtt60O91|;+lr(@aV!rLGuFu0DJ%fyH|#HRm|hs(;*@M@Z_)f@#z2n z`4JKSA^8LV00000EC2ui01yBR000Jxz};{7Yxs`H(XG|`1)fiX)Ii8&G#!|e!F4z! zs)6NTQe0eH21#YHXnGUH=@Sw;32hB)!k1s@2oM==8+?2b6bUi{bsRGi76TO>6cZFY z5eXqWB0dHV0691*D-|Xb3m_m7ody7}H8l_gFBlaG2{fG^9$j9qB`7Nc2c1V8$jC9v LF(WoN4?zGsMO>ji literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/at.gif b/sources/lib/plugins/translation/flags/more/at.gif new file mode 100755 index 0000000000000000000000000000000000000000..87e1217365c869c8bf2fa6a35cd597108dbe47c5 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h`uh6#`1tGq0P_F<`ZYEEqN4V4a`#J1_V)JrL`3v6 zGxFNCd z0RI30A^8LV00000EC2ui01yBR000Jtz@PBvEBa2zfl?s&HJ+0Rj=?aEP&Ce=+0bZe zF&it9SP&GXEujEwK_IJ7NOm)nGM`5;mGba-F8}}m0T&lN4j_AefP#bwhKP!cfr9}E z4i_7UGdTqj5pi>McNiElDkmmoW+XZ;6%``07O7V>9a<6+6ch>y78W~715Cyb$SNv3 H%s~J<(#ocW literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/au.gif b/sources/lib/plugins/translation/flags/more/au.gif new file mode 100755 index 0000000000000000000000000000000000000000..5269c6a0e0a2c5ff0554266d9fdb854c5e8c2807 GIT binary patch literal 378 zcmV-=0fqiYNk%w1VGsZd0M!5hthUorYNpAFmH;h|$9IETa;%q+vf+)8=jrf|D@Z|H zod5tb002@WL5j)H;s5{=<7sHLz0`J#yGmoCo2knH0%eb#!f1W6HBp!Grld`4sybGg zi*}uDfwPsQ#=67WMPHtAg}5+Hlu2TrK3SXAW@_hgZ|Ka?-NVdvJ!zq$!lkm%e~Gu{ z-R7UU+uf|Qvx1nUkgSJ)r?+v3=()aYMRnfc>)>y2ws2+)GW3#LM5@q^ivc z3EsHAA^8LV00000EC2ui01yBR000J;K!R+LNDNZ5ijpy6EEc<5>(xW)0Fuy!=U5dM zz5@;dG2Kc9&Ex{W1QrQe28YWWU;)a6gaLFGEGH@g0xmx>6dxZL77-B(H3kPCM3J(k+1vUs2B&Z?{ARY}Qx>_DQ Yq5-4|5jGYZx(rTFPY>D;4ckEgI~~rLTmS$7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/aw.gif b/sources/lib/plugins/translation/flags/more/aw.gif new file mode 100755 index 0000000000000000000000000000000000000000..27fdb4d13906897b572573cf0364bb72d800054b GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5hVy@I}wAfRm&H!$=eY@L?#Ns-Z#*@h7^4~=A+$(ao z+WhWz06LcW*Z@PD$p9&oS*g-$v)5g!(faFb`{`8xSE~8uOZMVC0DQavW3K>8n)&Ht z4Ti$^=34gSQsQoIPNB?(!QOVd+upGNg1_EXrq4;9%K%uj0CTkyip2m(sT+~W^x{gM z#NB4F)enlq06n7UiHUr_;Bd9rXs^>~vDg3~h5PDU27$ly-!xdL&>@k>Tc^(eGL-k@ zLtd-XA^8LV00000EC2ui01yBR000Jxz+GyU;&5;n3<@>KWGb0gD|V&_xBzzL_Kr{{KP*w!!KXxD{01P+XD|HEL{k zjt)FM4GT9E6c!df7Z*7Rs0bqiB$aC=m<|TB0ydo!6B`>H9UdMmEC|A@87C(dDk?BA L3_TCe&p`k?K;@jA literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ax.gif b/sources/lib/plugins/translation/flags/more/ax.gif new file mode 100755 index 0000000000000000000000000000000000000000..0ceb6849f49d128216572e9fa7d9b6318090c31b GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5h?7K+=N~&j+%0+m&{TK{}s@VA2hVsK$H*K~jXt|NH z*!$9ZbezokXJve&((W`Y_FGi|B$ogHY}Rc6>$pGw08Ri6i#&3*p1k7uuoGU5$|z#4 z05+msio*PRbWwx8{gjVZg~j`IZy#d4OMbrm+m-ZEN$tT}^TuWQ#Bcb`Z1>`#>&s@^ z003f-#r)x&X_C?H(Rm(Qt;<;e^k`r3(rfm*VENB=?Mg!PNkdP8!|Aa!@k2cHz9{g% zPS1@1A^8LV00000EC2ui01yBR000J+z{F_SBV+;r4kr?^I1`xY3RF@Q3JwQDAdrkO zSA%E4fC)4q9Z4gBhDEontMefZI+EVYU|2L#DkujBJ^&Oa69gb0A`J}?5GFZ150yAA z86^uhDiAh8Z0J0uLubnGBOtx99ax8G$$0b#*@te literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/az.gif b/sources/lib/plugins/translation/flags/more/az.gif new file mode 100755 index 0000000000000000000000000000000000000000..d771618498ded597d5d95979e455fa797e77c0cc GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5hG_KcFw{-xD#p8>NNwwNmx!VAJ0NiwR0Biu&Vqwip zOaM;+E~Zu5Yiu^ETmW~t(_38SmzV%D07tWGlK=qTdwV^wV#`ED^V-|$xVX?#Q2=DD zSH9tA!QLC9M*vu;a>n9b!Q*<$8VuqG3ax&5B2k|~b7DarE_DPRAqW#ad>9cw5)Cyk1OyBqhCC;V zAsIZ4kpK)Ih8>tVHVYdRF#s~32o@U=A*2fn9u=so3#}U!23?pSJP-}DtrkyEPzcHn J2M)?X06XGIopAsF literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bb.gif b/sources/lib/plugins/translation/flags/more/bb.gif new file mode 100755 index 0000000000000000000000000000000000000000..b7d08e57e3686b1fcec0bf4668fd99ffa8bcedb2 GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5h001id$12hmiRI literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bd.gif b/sources/lib/plugins/translation/flags/more/bd.gif new file mode 100755 index 0000000000000000000000000000000000000000..0fd27ecabe8d3014611684d8d81a1c6a8529fce3 GIT binary patch literal 361 zcmZ?wbhEHb6kyB6foGBf_Bm?D%#Qiu>wVkbDPVFy-ika1 zX9gfp{K*2M7<51c$WIJxZ4UD_jU#(5bnG@?xbvhkx3Yz_p}ajOznr?2L~$dpks%9PyRABpNuLt0 zm@x~7tUWs;4}+)%_iQmeRSsc=MIsFHY(l1Ubk+(BGcAg*v01u>ErV&V7pu>y)2AI7 FtO3oAcfkMv literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/be.gif b/sources/lib/plugins/translation/flags/more/be.gif new file mode 100755 index 0000000000000000000000000000000000000000..ae09bfbe149911d7877616273c87935511426dbc GIT binary patch literal 359 zcmV-t0hsb-^(-t(N=ow_9P#e}`}=eD?6 z@&Eu-R8;%>M_5@|_xCUM_9{9$I{f@h_4Oo0MMeGT0QvJh-_Zc{?K$}JHsRv{)!_j4 zH#bjDPyPK-`S$?N+W`0XF!|^JKtDhG_F(+{W%TVI(cb{u-2kNk0Q2)e_Vz;Y@ih1G zFaQ7mA^8LV00000EC2ui01yBR000Jrz@JcfFqvks8E44}{2ovS0s(>8YJ;r6`Jhlf zn%Bs4Ikf_g7Fa+1{qEacm)!07%~Zffld)F1tmLtAR!3` z1{E!iku(k%l_WQr6#xo96D2evJ)sQ^6&o9-sB9V%5u0s6) z0RI30A^8LV00000EC2ui01yBR000Jqz@PBvD;5z*WFqlfI2VIKr2>KQL;wnNVXfZ4HdccqdBJh?EiD(F7ySJE-0a-*78Xf) z6z22hJghuTxlQu&@=LW#?(XjD_UiguTl{2X9HSg9sxA8Z`uF$uYLh+rQd8>c>iRuB za+*i>_V(W1-s}JXC88zuJ3I3L0ObGxVT&^JG&JM!<3O`O@eK`9xKaRw0015UE2S&o z002g_Mp(L7AfF)M?cXq`Ft^jU(dW_l0000&0QfXCJFq(7@8IA^8LV00000EC2ui01yBR000JsK%Y?PC_;`JO=CpZEXdlVD~0yZ`T z92^)JBqRf$3ZWz`H4^|EAvXmDIywmnC@2Ljr4kYu834K=AtfcNJR-s$#Ka@VEiF9D GK>#~f5SPFJ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bh.gif b/sources/lib/plugins/translation/flags/more/bh.gif new file mode 100755 index 0000000000000000000000000000000000000000..56aa72b2b645a4054500f28e6c2336aafc8ab784 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h_bn~@K|%RaQv3V+@-8m@0Ri?ZD)>7){p#xK>gx0$ zAoV3B@eK|4MMd{ZOY;B#@(>XHYH9U8KIQ-b_%=4`0092|{rpQy`$tFa0092b(EV<1 z_b@R0W@YprAM+U*_%t;7008+{SK?}vx}hKAh$0Q&m+{QUg#^78)v z{{R2~A^8LV00000EC2ui01yBR000Jzz@D&ID;Nu*&|{g&^nOqaA_v<$0=*^74@Y0EW_r?D_Tl*4*fbh-<`Z*OQ9fXJ`8Q z`T%4A_w4fHc6QubTh#;u$Lq@T#l>^Sa^>jUSiV?Nx>Lyj00372o7Cpiup3;{PE7apk*31SHeBncV- Utrs{bA<@wS)YLLEFgig1JGeZe&;S4c literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bj.gif b/sources/lib/plugins/translation/flags/more/bj.gif new file mode 100755 index 0000000000000000000000000000000000000000..e676116f8ea589be623ced9474ae95d26b409ae1 GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5hRJK(0^&~s1I(o@^_e41WQ~>+?0A9UbvXB=jF2-~a&g z85!s20Q>t#_b)H?^*>0kM)vkZSh`kXzhXnJKwQ0Ca>jG^Ha7P=F#P;XPO?isuRq-Y z004;qA^8LV00000EC2ui01yBR000J!z@PBvC>oBLj7IbMI0n!Y^zleoArQvqH#po( z-rY+S8j(uc=htJRjmzi2%;h+lJSh)=Y%T=?F?2Y16)8Lf1UeED78V2u4GJk09ThS; zFeoZ3EfYDA3Y0w^Hkq596ALU2H61+yubP|_ARrhl5j6)K0K60w7Z(c)7#Kbc5fKH; O1qjXvEG$0LK>$1EJ(0`+ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/blankflag.gif b/sources/lib/plugins/translation/flags/more/blankflag.gif new file mode 100755 index 0000000000000000000000000000000000000000..9935f82104a336a22da8f8bac84db0749a4bd27b GIT binary patch literal 42 pcmZ?wbhEHbWMp7uXkY+=|Ns9h{$ycf01D`U_#hbuCPp6yYXG?z2LJ#7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bm.gif b/sources/lib/plugins/translation/flags/more/bm.gif new file mode 100755 index 0000000000000000000000000000000000000000..9feb87bc9e846584ff47884f0b08b21637a36896 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h%NG}sahT%O-_0y6<%NaQJ3M;2WAotO+PA@tO>&t4 z0P)({gu!msuDRZ0W6m)#=zMvq0081^YK{N^wg3RwN=fmkrF9`q+gn@JN=nc*HQsD& z*i}_+#O2mSMaB*e$6;;MKtQ>Jn$tx^&pJBGAt5v-P1Hg{-@(h7i;IzlvBP|hgBLyM z&(`L)*me*ge$*`cb~Pfy=?di3Y#kD$!}09k(( zJ%<1QA^8LV00000EC2ui01yBR000JzKv3Z3WA!c|ijop(Mocb21BYnAHVy}d!^tTC zGQvy((QQ1Zg61*EC@wAwfnce{(!2a&q@bZxA|gBu0cr;w9Sb27FDnTkAPF`zYYQeR z3nUX1GdUF=A!=+42BjLC5}%=K10^M-9}hni4xnlStt9{eAF;DqTR9mcX(VfGvrZ8T N%oENNKhZxy06PV_l#2iW literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bn.gif b/sources/lib/plugins/translation/flags/more/bn.gif new file mode 100755 index 0000000000000000000000000000000000000000..b7b6b0f9199a96b4ef57eb4cac7413fe8a71793a GIT binary patch literal 373 zcmV-*0gC=dNk%w1VGsZd0M!5h*@ScBy8zjGWz@n?Mn*{IW$=0|4^4?A^E-v-e0KTa|+?tW#iFo|`==t;W?$|Hn z-uU+CRPy)t@7qi8-B9t*0QKfQiHC=(s;czoc(aE9QBhI&?M?OB0QK_MVPRqZ{{8>} z0RR90A^8LV00000EC2ui01yBR000J(K%Hr5su*RLOJf-b{C*G!V><10G8u!x`RjRA z48!Aq!7LVt3C-K%xD}|w;mjgUd>@`j!C9pMEiV!~F(eLnI5-3V03Zc_5)vU21tvBF z1epL76ape3A(I6a3@$kb11ACk6c(-oH43B%2N5$G9v%s5gG|6 TzDf;E0Ta;<4ih8SH$eb9y}PV* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bo.gif b/sources/lib/plugins/translation/flags/more/bo.gif new file mode 100755 index 0000000000000000000000000000000000000000..4844f856924ae58edfb7fba44e7f5c448a2409cf GIT binary patch literal 359 zcmV-t0hs4vV(D)Xgb0J8x6j)oh?9PI!A>Dfc;*-7r+SMA+W=+{2y)j90jO;OfS+aCb+ zZ2+~@I#HDX`@xU-Yhm@MWcaUe{SE+6*-y~rdg<6v>DpD3#Q^l7S@h_CxYj>a*j4D* zPX84HA^8LV00000EC2ui01yBR000Jrz@P9(D-Mpwk#h8VI3JN{C=>`BuFOZ(dMJ2f zF@>TqYQZ?1nMNb~=yZbkhc)S3E)GY9H53#K02vt#up%M=2&W4R8yh_+f5#0kd62+7Jp F06Q~Io@M|5 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bs.gif b/sources/lib/plugins/translation/flags/more/bs.gif new file mode 100755 index 0000000000000000000000000000000000000000..c0a741e5ca69ebadee7774120d87675df8f6671f GIT binary patch literal 351 zcmV-l0igazNk%w1VGsZd0M!5hMwYHDg_-ri8!;Q+I)&W*gF7+nE;!qRZKOZCw|d!C*;+}}yn+fUcmx}HB1#?JuD%K#f2#Hvf&yg>cgPCviDJJ8U&oE3tS1(vB1E9iJ}{c4-fTIVo~<2!MAGgDgFLhzJ)0iw_wz xkbjbsiy1pHWd{cv8#N#x2P!{4BvmsX9v(bA6ciyL1UCgs1p&Uk1i`{V06Udwm5Ej<$3qzlIq*j_PPM<>g?U%;q-DH zHz@pY7YC=NAd&!=j7w<4FL0hGvELK*3i%RX*Bbn0QcQj_}5dq zmwf!+Nalz{@sUyQ6#(zM0PNRa-@8`meof^k6VUOkydMcq-6}VrsEW3M&=`)TtD{ zkw~S{$joSq1J_#!yF{6IX16(Ty6p%d*8_Z7HV|nXKMG+4A`cH5A0#9j8v`5|h6FA( z4;L2(5HAQJk{AL67Ca~h3=07oI1(WyCkX-y5DY0AHwzmGpCJw>KLR=w!~rk|0|O=| X4h}vlBO@^-B_JRi*e54G+(7_4r_HFM literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bv.gif b/sources/lib/plugins/translation/flags/more/bv.gif new file mode 100755 index 0000000000000000000000000000000000000000..6202d1f3a2df4184878f5ed8bc23aa630d43c061 GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5h01vKZmEH98^zCF}`uh6sZENy;dei^_23FAb_xIv4 zFM6fq>gwv0xa;FBE9*^5?Ot5H007+=6wLqt>r_(O008MkL-O+Sq$r8H8S8KAKx4qwEzI+G%}a&g)Y3x25QbD!hlDJJ;%`1$$yu>b)6{{G_A^8LV00000EC2ui01yBR000J+K%cOO_*IUTgL1<384SHfuU06)29OoSwQzVEFmNnFct&>I;*X(EH(-}2Ut4`IvFn*G%YA0 W3NpY46Bhss8xhtKBqTiBK>$0|z?fYC literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/bw.gif b/sources/lib/plugins/translation/flags/more/bw.gif new file mode 100755 index 0000000000000000000000000000000000000000..986ab63c2764732ffd789269068ea5b033c3ace0 GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h0Ega4$@D@(LOaCqa&mL>^72YbN;5Mv0JHX7()euE z_k-U2W7PVV<^THn`u6tr0G;YpRaJ`N{r&y@`1tr`()K$$I{>coe&7CS*7_2|{`B

v=j^b6%_x}F=0IBa4#s7NR`F`B`Pft%J z$^T%_^Z>W_Z`k~L-2TnY%?ZH$?d|PR&GwVz{*U7Ra@Y5B*!XkW{dU{^)z#IA-~0i+ z{Qv*}A^8LV00000EC2ui01yBR000Jwz*cIgnazBo(F<|8pir7d!)CkPB)!FAr6S=V zQ4A)w)4?(sMj~NSKnkb$WbUX_9{30EM~FmN1_A;W2L~J>Ap$>qe}RLAhanvniv)mz zgocP69S1)&6LofZ8wI8XGA|2hYbG@TumiFp00>)MISL9D6)qkgBD60}C?FsZ5FZ~U KB>>I$03T&+g{ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/by.gif b/sources/lib/plugins/translation/flags/more/by.gif new file mode 100755 index 0000000000000000000000000000000000000000..43ffcd4c7168eed43697af80901f59eb800c8d2e GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h^B5TYTU+S>093qGEvhXRp%(m0OZPA^^#B0Ij1oIEdc!h z0RI30A^8LV00000EC2ui01yBR000Jtz)u48^BIkZWKtmbxf~9RbTUaK0<@V#a5Iep z0SL*!xnx3z#r7u*kIUz@Vke-0Mi3R*j9w@d8Uj8aG?sYQ0`8CB=w=;M2%_}ui@050@}uG%YO>r938jh^H}W7}|?_-K3K zM1A#akM4Aj*@T_#<5Dho0|wkLR+Wj%A4LZh+xDUfJE%({`-8pwZ9f z{Ndf=;q&d~$@RWoci%R5=|6Golc2NI>C&_C&Srt-fT#OlgzToYz=W6VaHPjheDCQ1 z0Qmp_A^8LV00000EC2ui01yBR000J!z@KnP@c9VHqA^5jek3~#rqn@gHZc$d2LOlw zESpVnnI#fE!PYA}v>K7g;gPVUDH4&W!gwtlDlj}277uE90W2*A4kiT?2o@tVY8n9n zd<{A@5ezFM5R@U77Xb$~5iSb{2@nto0;3lk92W`(1`0B+uL1%c9Va;fHy$1_4;jiS OAV$tU1JTmcK>#~z$E7#` literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ca.gif b/sources/lib/plugins/translation/flags/more/ca.gif new file mode 100755 index 0000000000000000000000000000000000000000..457d9662d54d976cdd5b4f4d8e480831995d9af1 GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5h_3Z8L?(Xu0iRy=l@p^jcX>8{c8~XbC@H|54tgHR~ z{p{o9^^lbH_4V@d^4S0Y+eAs^MMu~qDBL$X>Rw;?qo?RyWA1ZyrT_rA008Uj>+XGl z$p8S=85!+vbKXr;=1x@WC@jm%%f!UQ?PX@=VP@_yIonlP;%sf|SXl8(Q|!II=^rQF zYHQTg)b-HQ_nxBe&dtBSzw`C=^ox+{QeE3CFX-Ld^p=?QnV#ZRTln|*=)l3>GB@Ep zK=kzVA^8LV00000EC2ui01yBR000J+KotTJ`WcN5N8rKam?{;VVhR8p4!gp|!$DLS zo9SV&nKc>_P{CQD5frZ&iNaese34Sd1QT2iS{?-@5Dq;)78xNq0v=;27Bvwq0X7pl z87w#(BnJQ}ARs3T0TMkQ83qg&6gv$72??Yc9X1~r4>TSr4L=Syv$PTrxB?pmy-ESg W8WRx2Ob;9`BGn_;G8ozzK>$0p52i2x literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/catalonia.gif b/sources/lib/plugins/translation/flags/more/catalonia.gif new file mode 100755 index 0000000000000000000000000000000000000000..73df9a0498e644d740d4b977b750e7c2f81c6777 GIT binary patch literal 238 zcmV>2R(OZZtg{&-mI@-yij3G>G+^+_kur3&)* zRQT&N?ejb0wj1j3Dd+AZ_{=f;YDez$MDjlu?7$`U=P22&66m}k?^h%Ay9L;CJOA^8LV00000EC2ui01yBR000GRASa4Yd7M;wH4xyw+omXjATbR_ z?0n>Vg8^n>fW%@nfksm(I2?ssXFBx&2Z-zhVK{ug;Ll=Fsbn%03&zS0Vzt}ua>-~u oAAx)zv9`Li2or*W1{5_m40TQqczFpa6e|sr7L^tWmZ&#vi!oWTyicM>= zhmfsIOrUA~?N;j4Rj|#BG>=sgeLO*$Wh{(RN}X%~76AYBesQ#oRG(};m|-=NS^!f3 z07L*pms~xQRYsj?Ih9>zu7hB!eoUQS=FC1!n^Iq*gHNGvceRn>%}V3YQ{vNQ?9xyE z-B^6BU(voNRhBx+#7NJ{QUF~SLYHNzx=l@-V*pPXW1vrLt#M?oaMHv-+Q~uM%1;1Y z0{{R3A^8LV00000EC2ui01yBR000J%K%Y>!DRPd2jX+TGJuCy%<)To8M1@u1)Et-! z4FCZ1kz_!)38gZ#7z|;GLzP)TCJEQ?_GmS92P!fdH9QLmFg-~ZIRFP3EF&Ey2nhiJ z1V0-WClm}eDKQ>+moFMW9109&9UUY)mH`nF5U3#^XBr-Nmk}@#6R090Vx1o}X9PQG RKTAs$&=o(^Kho1d06YCiiGu(D literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cd.gif b/sources/lib/plugins/translation/flags/more/cd.gif new file mode 100755 index 0000000000000000000000000000000000000000..1df717ae5cdacf3d7ea543831aaf2fdb0f94262a GIT binary patch literal 243 zcmV}Nk%w1VGsZd0K@0RL4d|2GYA-u}p90A|GB{{Rq6xZ3|^8TV$2-0BSTOZ tJ`>D_6ZdB5brBvA8-;Rze|2hu4{{fe7ZH+^gBA%3n3x5d9-W;b06Q}=W@i8Z literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cf.gif b/sources/lib/plugins/translation/flags/more/cf.gif new file mode 100755 index 0000000000000000000000000000000000000000..35787ca489da892f75fb431d52e85ad726b85b3d GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h`b9-Fr!*Lr7?RSH`T1A%_4V}hIiuO501eXV>6HEb z{f4IZ3O(rdDk{6;F$7`+i^_{+i1YaP_?Wc%`8YY$)BsDmOGURuCY&a1$Zh20=d#-z z1~B0LYiod^_`|~h^71dM)(v`{_TJtA03+Vc&H(ZN001BW*#H3h`~AS?Tbi4q&y8{3Je{YcVx#GE#tooSGnC6XK%v(QD>^g>goG3n0|O9?HV+RO78VydITQ^T z7y_CBCy$bp0S%X$n#~#3Y`-G literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cg.gif b/sources/lib/plugins/translation/flags/more/cg.gif new file mode 100755 index 0000000000000000000000000000000000000000..e0a62a51cafbd00551b5258b17284e542272d4d3 GIT binary patch literal 359 zcmV-t0hsg*-+&G0P{37UEWHq-x`d#!NAM+U*-~a$r+f?z%0s8ts^UDeL zvnuz?OHkNM%JOCP%@Oy}7yJ8Qtm|UG@JH=Q0Qas=P1OMRQ%3E-0QS8pX5D6<=tSKB z006@PA^8LV00000EC2ui01yBR000Jrz@Kn9C^BR*mWpEg1)d7UWio-yN|?%x-i_`v_xJf&S^aWy{$F4GWo7tRSoJ+U`$V)sTy`awef zdwTg;So~^g^&=zw{Qdb`TlOj{_b)I0d3pQ$`~G@*?EnDy`1tzz`uzO-`T6<%{r&v_ z0RI30A^8LV00000EC2ui01E&M000JQz@PBvEBY7&!0&LV-EJ8Ts8aZ~C=NldmkO8` zznY`7-33@Eg|DWK?QA-ptl_)$cJFv@g!4^yCvZGD5e5(pFBl?vG&3Fp1SKCNgApMx e4+#J&94-$1Sv6Q#~ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ci.gif b/sources/lib/plugins/translation/flags/more/ci.gif new file mode 100755 index 0000000000000000000000000000000000000000..844120a52b2ace1595d581a03c564d71d3f14f0c GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5h`m8gwt)$}Rwl0QB_q($doZhX69oGW>l24Z{ucWdQrJMgIQ&Ce0=`%{KnKS^c`}_R-{Py=9HV>Qy5;rs^761T%qz?}T6ci0NGb$-49Dtb*84?W*9y1jc3JND8 O%n%R`H#Z&*K>$0Fexktu literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ck.gif b/sources/lib/plugins/translation/flags/more/ck.gif new file mode 100755 index 0000000000000000000000000000000000000000..2edb73994c90da240f120ea7a3143da4fd1b0723 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5hixQZ�Ba-d*wp60o~!^6Yf z)83@4%IKArdyBAef1%iKb3RdjrBiL=Y-?zGr1<#wL{@{-8yPn@f!UCkyJvfopvUIJ z$^ZZWA^8LV00000EC2ui01yBR000JuKpslu@tis|!iT^lC=@zhtI;TsTrt6jVUws7 zxfdW%3j}1K2jyUJWPY9%1^~e9OqatA;@}v50|f~c6+I0lI1zjt3lu*c2@)0-4-6qQ zZHx#9EFUl_8EOZLeG3Q(5kH=xYY`fK2B#Ynssf^}rKb}c8me1eDy#>i5U)Q?PftI~ I%*;UmJAFx!?*IS* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cl.gif b/sources/lib/plugins/translation/flags/more/cl.gif new file mode 100755 index 0000000000000000000000000000000000000000..cbc370e6ca757d338d851e78a257338c5088edff GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5hRHfwoZEXNt#rj)Y{A6Tir``HdQS$Qg>gwwG^78T% z6WQwbRFu-}008$yMC1Sf^*cNC008nXF7)l~g}mnO@9*&q4f_B9d$#5KMMd~DH1{tr z_9`m%Bqa17ANe{u`btXkGBWcS8Q%Z^=jZ48KR+|dD`anSRHa6wc(|D`gRGQiV zKd)P$+t=y#k;CU(nAH9K{@?BRcd_F4@bLKf`1SSm-2edm{QUOz_Wk|+`uh6&`}_I% z`S#~9+pog_ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cm.gif b/sources/lib/plugins/translation/flags/more/cm.gif new file mode 100755 index 0000000000000000000000000000000000000000..1fb102b295c86d04176b567ac795d92913dd23c8 GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h_AD&?YG?LHIOgU6^Ya||J2?0EN$l+aXu@dsc60gp zR{(|p_4OoEyHoo_MMZ!}X15^;I|>4pih*93Mh&*jH7OM41RiNO4Iv>JI2af>8Vm%10~a?T4;>i= z6EOf9j}$tQ2$eiJ1pojrA_No^Cn*;Q9Uve%rZA`!B_$jw8(ceVG$bT&JtrI-J{KD+ P%ry|t&nYQB)Ik6{8V!;B literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/co.gif b/sources/lib/plugins/translation/flags/more/co.gif new file mode 100755 index 0000000000000000000000000000000000000000..d0e15cafea10c597b392193657b1c1454e979e78 GIT binary patch literal 353 zcmV-n0iOOxNk%w1VGsZd0M!5h7*WvfT3Y9-0OK<@`qn~lmFKwt03=$}+mrzO-DBS* zDE{JeIcnNcf8f^u0PC;-#sC2I%_Q$;XaEhz{^WW0)=d81UHsWg-5Vf0Y}P|_-TvKK z_|rD`(J|DC0OvwO>`zbm)I8f18ZBYhGiKN`WYtZ3-}cTd005pyci#QlQT^Lg`Poy8aNCjBL@cn87O~(gocQU000aq zE(MW?BZ-TZB`6LOEgvrf12zf@7$PD(0|ui3v>+g*rl_g14!yk)z`zE>!$AN$75JQN literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cr.gif b/sources/lib/plugins/translation/flags/more/cr.gif new file mode 100755 index 0000000000000000000000000000000000000000..0728dd6a498c4c3e2a69652e0476a60aafe60171 GIT binary patch literal 359 zcmV-t0hs42Jdg_UT4O>Pkug0516X`S5ac002{7e7D^g z7-xgL<~uv>q@;wL%<=N_f0xSk`T3Km)a_MO?yRf(%F5v-CF3hA004OLuC0xu(fP&1 z`~Cg)zP|Rny8r-X{Qmy+xwyFi0C$nbbdJMriNM|f0Q0uB^|!X)X=nMNq3cgi<>~3? zKtSE!-{2n~@rQ+ppw81lKlj4H>!6?d$jI})zWmhGdz8rG008;?{Q3X?^Rlt?^z`$z zv-|%3A^8LV00000EC2ui01yBR000Jrz<^MQDHcD-4+0U8I3*fQ%;A9GMx+vA2kQPf z9G%V(i3rXt)vZ#iZ8oz`#}hjFY^mH~GFcG@Eerqv7ZxuqA|`u&fP#dE3Ji${jDduO zFA53(A}}>{C_X$H6ci1oG!!xh90sliX97JBw6rc5R909eB?}7)zzGFNOT`EU$jQh- F06PNatDgV> literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cs.gif b/sources/lib/plugins/translation/flags/more/cs.gif new file mode 100755 index 0000000000000000000000000000000000000000..101db64939d70025b6a4712466a58640ff4023b7 GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5hb92T1{{HrJb6{Y-^A;8W0Eb*$yLx)b`uh6#`1tnr z_U6mWOiZzCY{7nh$ogAb`htS}=;-`pWJN`<002mXgUk6+Q}k?X`aM1Sii%THw(I}^ z_(VjCiqAAOru92J^8f$<0C@5)F7xyA@?~Y^00000Wb-sM@eK{&008^@`}Zy`kC4)& zq}umOOIcXC_%t;5008wNAvrm%^>}#re0(e{q4_B(Wo5wQ$H(;b_57fq_4W1L008{_ z{PgtnA^8LV00000EC2ui01yBR000Jwz=CjC2pL1BWU_E*9sqzw12-_dGz92g%kD>pJS1OzB3BBl}#4;B_K92_4XCnq8zJs`##$jBwj KDJebAK>#~H;F-+; literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cu.gif b/sources/lib/plugins/translation/flags/more/cu.gif new file mode 100755 index 0000000000000000000000000000000000000000..291255ca3f7621e4af8eec0a3239a7f75d22a6a9 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h`T6<%$jA9;XxiJ|_Jq?EnA(CY< z^Mktn01D^oEiL{1{bi~BYNytGv)%LPT>u#CPn-Fj#LM*b^z!oZ@kmH@vHX0t{$Zv0 z_xJYzDDRrW$MaHBY^?fdsrf&V_C}QTL6Gu?z5f6J;cKn_Pnz}XMn-6>{zR1b-T(kg zm-P30drFx2Zm<52y217DZ~XhZ06QEjsZsy{ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cx.gif b/sources/lib/plugins/translation/flags/more/cx.gif new file mode 100755 index 0000000000000000000000000000000000000000..a5b43089b01283eabb0e53b270e414575d24679b GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5hXV+)rR004|-W!KN{ zNC0jCCsdO~%|(se94IKpt*z%-a!RsRc0B{%_xkE$J z01Qw}%}f)z6QJZj005*@(oRo|A{h)Y9}6Tm7Z(8=IXf#Aehv;jf&nNIC>uCB zHYx*-9uf;62?P)j1qCfG4-7mWou8o_r4OFew3<>lq3*RJB@;{4ib^W~d`$By{bNBYx1_V)Ar{rvs$#re}e`qx+D<%^c7!WanIvNN(RvjoW z5F08akT^R6JXkUrFcA$A5j#3KI649bIW<}XAut}QI6^ox0AgcgkS(k;NlOj^1P28L L2m%5#&_Mt@EbY{X literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/cz.gif b/sources/lib/plugins/translation/flags/more/cz.gif new file mode 100755 index 0000000000000000000000000000000000000000..0a605e581dee0f0d8500f0f0d67d7feb3f1d6f03 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h$^Za_s@~NB0d}k9<{23PM6~kq^6u{Lz0&OJ>gwd> z<@B4I-QC^sl$7NY6Yq-RdeT z=_DlWG&JlxI_New+5iCPA0Kg@*yu7c>@P2RquY_Z>Wi=7@Q;t}OH0n(^6pSjm$>Bp z{r>ANF4x!BW1ZgbnVD^*;lkDL$Ay{x{{H*>`}p|y{QUg+`T6$t_Wk|+`uh6A008&* z_x1JlA^8LV00000EC2ui01yBR000JuK+EYzG#C%aL_)!|m{hfBYlp+xc)6R8VSx;0 zwH@`E_35_VzyLAEYIQ#ymle>+5ac)U_o}coB^fX@3kwYmC=U-Y0u>X1A{QPVBpVzd z1P&hn6(<>yla-g54kG{sC!ifJmY5D07!*AP0W=a4D=85X9v&Yf6tV?9ARq$A0szX& IJTR{s5@}G|e*rmH>^h`X9+3l(+oH+5S}6 zRQ>$@iLLoMdHZFo#G1PLro;XGn3y@xIeet{jH&k|YV@ne{w>ih07~f+#S(<1_x$qm zMAJn1`uTmH^&`zAak9z{!wnf?@PVoKO4dn)tN5V5{29p^`uh9#_xJPn|6QiQzvI@8 z-;I^$mj1!P6J75BNr5eK_jKNL6v`Co_vw_h`PStA>hb+slm7rY=iT(({{H>|hXDKg z`~Uy{A^8LV00000EC2ui01yBR000J#z(h_!BsPw+N<{<{{Zt8y)B=H+Opgb`hWY(? zHxpuPFfdA^iJ{AD<1A$}dZNZG7O%|$m9SAL8X6uR6gqej5eq&jEFd5bkSicDiV+(= z9RMU37at!dG!g|qiat9t1OWjb2PYXB1U(&lngkcCtr;O90X-=-E(*dV92^o71gX6( P1I^6^(9k{8(?I|`axbfZ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/dm.gif b/sources/lib/plugins/translation/flags/more/dm.gif new file mode 100755 index 0000000000000000000000000000000000000000..2f87f3ca6a52c118cdfe6bc0a6dbc623025db1a8 GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5h0BZng!fANOcuk|@^oCLV{QPvaE&x*iRLC-1x?DV} zJY&COmA5ucv`vA{f&J}j^z`(2cXIaSTlV2N04@MOtv~a0HZ`d=OG-l;8rvDgkm9|A-a-SpKT&M)l)gBIsMxJ{ow$M z%uC&3AK>~-_2NPAW-IDzF!Xak@og&eZ!urKUH){MK+`4=x$Z$a8m$@ z00000A^8LV00000EC2ui01yBR000J!K%Y>k(X4(2fD&*x_#9A&KyZr`0t;IL=X3_N0|+uPBp@IdNClP! zB@7l52nHh%pc@(jI1LRs9t<=FE+{4$3KSXvre`5FBqOdFuoM7T3keA#5*QF?3MwkT ON=;3M8x+#hK>#~#;)-ej literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/do.gif b/sources/lib/plugins/translation/flags/more/do.gif new file mode 100755 index 0000000000000000000000000000000000000000..f7d0bad39e027d93dfedfed5b001b2f32ff31205 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5hQ*62Y{r&1hL|}Np=Q=v}`22Z}&g@-X00372A)xo| z>*6FN=QcIe005Mv*vtR`=RQ8}^Y)FN)mwADIaaUaEG+u=_4M`i`SkPYQc~+ySNi(; z`1ttt_V(KV0C9)Q=SoWLVPU-h0K@q<#=ip))CxkzKSY=X$< zL_~g)(AnST003d>)zR>8Z~XW7^YioV^ZoB?YU)o_;9x^v5Wds;H z04ggcClfFpHk1%@3K5!|6g&tXC6x>nr9G$=00<3N8X7ksr2`WaJOH&zOd}&PFEGjo I%m_gMJNYW5asU7T literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/dz.gif b/sources/lib/plugins/translation/flags/more/dz.gif new file mode 100755 index 0000000000000000000000000000000000000000..ed580a7cec832efa9c9aa4900ddfef45d938e132 GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5h+S=Oe?CkdT_Kmuu<#K4(d2Vc{iBy$ylfS9*)z#Zr zP|?xR;o{=wj)z;Dd-Cn=`TF_*Tqpob5aC-;jhKPlQ%7Q zXrzXIvX}y9HFT?xhPIz!o`89-ly9hv^Yin@$;i&m&eqn}A$d)7dtl~!bnUsgMUH7q zk#6YE%<9?K^~=la^zu%kfVpj8RGfPC@bGl1kIrskW}19HgERA^8LV00000EC2ui01yBR000J$K$LEn@kBffjgr9t05XW^U;qL^u2=y;hv3lSh3Ar3bR z2QDf#BxXJ)5gnBWDGC(?Fc?0KK06X34hJnPIVmfujXgiEHiV-zF(f2DK0iMt5*NxF Q%o`;O3nn`|B_%-sJGCdIJOBUy literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ec.gif b/sources/lib/plugins/translation/flags/more/ec.gif new file mode 100755 index 0000000000000000000000000000000000000000..9e41e0ec8c22fba363719ef9ba536c7c168e0ac7 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h=)C~--(>ULTIq6f$N&KQ>yZEeTiZH1)+#FZ<5&06 z4<}}}?#2N0SW`xQ!*rUrS%aqSH!=C;b=Lp@_v3o@;cYr}zHF1RT#e23;dA=uW9R?? z`{;r7-%R=Def;Tb{p)l1=Y@Ks*JF*X;Y&;N&I9sFMEdEB@IpHPDWd%Cmr;etFm1b4 ziONiY#{J(5e4o4#Q;DSj0N+DH{_J>xqrTK1ALCL|{_v0TP)qgVVnTYs_hVg`w94VK z0QuJ$A^8LV00000EC2ui01yBR000Juz@Jd4P?V00Bw+bdIaP(i=@bfiD3lDK$>DfB z5=o^J2nYljANLy`m(PNV?}ej*K%b9BljwIkIsh>}H83y_4;L3BBM^=k1}P#K7%eL< z4m%bWEG!ESk&~8~nw*{sI|c*;HzXu82eAmVHZ}(`8$7xV4LK$zC@2xb5fd8|$jJoD I%*;UmJDaVaZU6uP literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/eg.gif b/sources/lib/plugins/translation/flags/more/eg.gif new file mode 100755 index 0000000000000000000000000000000000000000..6857c7dd57a75a6232f2ce346c8183f63a0686fb GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5h@ZEI!`uZ&`E%IYy^Wl9wJUsGTToDoxf`WqTG&Ji; zN$_%V?nOoOYisp-df&`s?Q3gWTU+Jj<>deX?p0Owii(PgiuQJPQc_df008#(_Ve@e zL_|dLQ&VeeZ0P_1G&D4OdwXJHW7PlvOG``det`CnkoJy_`}_OyyLRnZ0j?@dkV*@n*m0QjV&>^wd7_4WMx{Pgtn>i_`#{rzTU zW&i*HA^8LV00000EC2ui01yBR000JvK%S8I`Am+-j50IgIi8oxqR|)(3=|5j=`eUZ z9U6myOC($h+v;XIRVuPl%CT5LAgWPs-_z*=Ed(zb8aX>T5`2CrEGz&3g*zLFdy4@C zH8lW+8yhKMfJ|ZDMKRz4<1t0FMbfn-)8(JO2LuNwG=Z?A-bJ z`E+!2M@L5hY5-$nWBSR-;~Eq4$V;^5%--{3K$FCm^G`jL_HFE9K2`{FDt`eI@-rZV17Px0~b_w(}-mJa;< z`~Uy|A^8LV00000EC2ui01yBR000Jrz@KnPEQ)@BBw)b|g&YovL`OkFrJW9AdpfN& z6xa?#1`*CG6>Jp&a}IEy??J05c7AP^QL9~22K zE*l#uDFU7X2@sS64Hz#k1}qsFGcyGRJp(nQ7!wm07YGQbsW~z?qzwVX!zRWf$jBl= F06Y6ZlW+h4 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/england.gif b/sources/lib/plugins/translation/flags/more/england.gif new file mode 100755 index 0000000000000000000000000000000000000000..933a4f0b3dbe2f328d15f73895ba576aa78295ed GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5hm;eCXgM;eo>f(xu{r&yob#>cSRqLap(9h55o}SDo zDA{sy`}Oto^z`}j^Sl56&oMFg@$uMAP0=E`CvM@Qe^-`(Ba z<>lq!;o;-s_-l#}!9?AJ#~)l5v{hKBF&@$K#H{P_6M zRaMcyzvk!aN=?0fyu0Xnen4Z^|l!7&RRaciTXx zJp#iZacpmv+sp?hh$SZn*V3@eTC~F)cv28j}X6%!B&kQV?jG$JK3 zGAWG|6e9}@0RSrmHCa3njvx&-J3BTA0t7l*I1!H~tU^0E0;XFLC?qDUAFVk{O&S|9 N001rs&^gjU06PoNyxsr+ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/er.gif b/sources/lib/plugins/translation/flags/more/er.gif new file mode 100755 index 0000000000000000000000000000000000000000..3d4d612c774fd0e2af39995926d21a3c0b8c33fb GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5hX~bz*eB|_YI{*XE_{357d0X_DP6BTLW{B!MZRY?0 zy6Y(^N3}eC<0QHb`Po6pE007-CF#rGn!wCTDNk;Q#VfK7| z`MFH@&O-o*0Pb8vDyb?uvO2XpU-2?D_Q6E+9UbjoW3d1LRIf<(p;ccs0961%*ok^> za3QR6snbeIineuFWX#1pUi7&-%4kxThfdREezBl<`psB=irs;JII2%5xM4o^M@sas zMlq~0A^8LV00000EC2ui01yBR000JtK#c0(DH;#RgG5=`Y*;rKU^<0Z8Iq=^z@^nt zj8NzY!d50Y90AAaWq3LYsGN-$QiMDwIS9VK0l}>&D+&Y0$O_8K H3PAun=2?lT literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/et.gif b/sources/lib/plugins/translation/flags/more/et.gif new file mode 100755 index 0000000000000000000000000000000000000000..f77995d0ab47d81355552a534b769575ffe05d15 GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5hcf00^#no`Bb77rgPLfgiR8&xyi)FFm_4Oy}0000< z5dHmB^z}RVMn?1V9Q^!CnaZ(wy2}7F0RH}S^jJA*ql7PcT3(xf<>df*t&~QKYx`kh zQQBLHOpS(ke6LM7b* z00000A^8LV00000EC2ui01yBR000JwK$v1klo*YvWJ>XRWip*kWqP^rIJ2K3W4&?= z22Ctxv1oofnP4pdxJ`sOVUTJ~7We?b1u;bs2o4Mwb_)*=0elcDCV_&46NiWZiw6-7 zn1d@gA0IUoHU|eZJvSvK6f7$n4IUyVIUylBARs6xB&r)51-%WwBCjVTBt9d@BMHjO KEX_X8K>#~YC5%M? literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/europeanunion.gif b/sources/lib/plugins/translation/flags/more/europeanunion.gif new file mode 100755 index 0000000000000000000000000000000000000000..28a762a59cae1c775b52f2c26b21ad658632073b GIT binary patch literal 171 zcmZ?wbhEHb6ky8jO69TOFm!wUDVT;A)?!_C{yfy2gaWmCOrR*q$^bR9R{scg(%O@TO|giqzYsR{U*?U8O5D U#0n;zPAS`BTG1CL&&Xg60F0$Rp#T5? literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/fam.gif b/sources/lib/plugins/translation/flags/more/fam.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d528852dc3f4efe6cec2d7f25e4674816af4c7c GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5hRNVW-^HgZw`+DR4UETfrREzpag!n;y)AxGU`GuG5 z0Q_s4$@N_T#q;(ub86K9{dc4FD{i6i0O$Y!`2ZM9+WP>!{6yRPS>gWu04n!Og8-@Q zX3_w2;{EtOd&%=?%JpD#+5iBn@?_xt`9y#Kvi8pRX@KVc!SYYc_GI@scgXT(_%w6B z@k@E={?GMu_c?g^J9qp~h{yC7X~pN zixD#c0XPp9k`)&RESV9UC?5|y0u?$m9uW=^5k4p=Eh`))0s?pi8o?w7A0I0{4<#ZZ Q8ygeP&<_tB95+D#J95gS9{>OV literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/fi.gif b/sources/lib/plugins/translation/flags/more/fi.gif new file mode 100755 index 0000000000000000000000000000000000000000..8d3a1918280816780d79856b678e2ebb5bb76d66 GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h{r>*P&)WbiyhL-+$q-dTj%J8aF`-s|}I z_)&e-x4+G6k=`<8%JTB_Re;vK!qWHn`hcS2hNk7+;_YFI*-d)X!O7PE0Etd|&|iq! z005lz_4Q+m-1heNN_f-z`}Xr?J8L`~36s^SQy#NO#iq_xR=O^YZfY{QUg-`ug|x z_y7O@A^8LV00000EC2ui01yBR000J%K%G!05U@^_N+NMGkubX74?uZM06bo(7gP9F zQ2?M}m}$A*k1s$F%gUQnOp^O_3LOlK(r9=#2Q3gHAOk1}5E%j!27d<-3l}&82rdo_ ziW4({gOY{_4h|X_2{m(rAU=0C4g9xlX|nrTtN5Iz&ug^#l$OE(bNB!&-(s`+ z(LFiN`_)KB*mQZ%Q&iJjT~wa<0Dk;Y zc*Ul#)rlEBT(J49dzFJDNq-YNXBkUnu=&@Bj*x$;ak%+jh0f%+zRwvM=aiM^)7oiO zk9eKgA^8LV00000EC2ui01yBR000J$z(?UQdmU(uPA1c6hC&BKFOksoERcZ7B*5V$ zJKh992A~F;4XhHmNMt(DWCF6qJg|>Sk$NnA2sb1o7zsBX6(0(Vem5357#J--E-Miw z4kr#J3oHRR7Zf!EYz7P`92^W9o}r_q1S1X{4kH>F0ivW41_ZtV91sS#TV0^KA|kxQ QO&w1X&EkWpbP#0IBkZG(I zI|I#NsOdxu#!OOa0CKWjOjd$nAd$g9!fBicDjy#mKOiFk5j-s+BMm7kHWn5b9v}e@ zc>*B;6BIoe6&NBAmk1038!Vg@9-*U`4gvxi8V@g>D59he4hRSv8xIc-6AD>dprRuq Sq?g4^4GIm@(-YR$K>$0bS(5+& literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/fm.gif b/sources/lib/plugins/translation/flags/more/fm.gif new file mode 100755 index 0000000000000000000000000000000000000000..7f8723b7da96997e52b64aa9a90b112828d0c3e1 GIT binary patch literal 377 zcmV-<0fzoZNk%w1VGsZd0M!5hah%8;X0MsK*@LOh2Uethrp>9v;gPl2JAA&LzTSzh z)RVN={QUfetkP|n#`gC1kFwRR$m6EL+`iN1mbcgdG>o~=soV?qm!{D{dLOaapBMH1q}A?D&`J_Xutgouc569)lqu+uPC6(d+B$=jZ3+&CSjG`}^|p^7i)j`uh6!_xJPj z^Z)<S_%x44Qgjl}c&lY3ENVi*#SF`jw zQJXCyqG-9^-Pb2pO=OL2x3{D1IJ5^c-oz zY4-LpRD8_-{&QQrTlMuMUAjEtsVQ89)Jk>C0BQhQfWTjb&-wW~PP9V+MgUT`Qv3Tx`uafl z_%{9h0C&iDRDRK5zF=0lR${+dLvP7|&3P=PEM>u5ZIH=rkkx{r-tzJkag*0|me@V5 zF#v-AA^8LV00000EC2ui01yBR000Jrz@JcfDPBlOi_-G*IA0);Vj6SERFYJ)YQ<(U z8Vtsk{nc(W2xPNCX*9l22$ga*37Pxj^&N8T;Qyd%9}#%_{qI0R7}u^8f(%%UDdOHb$H> zrNlTjrYKjZMEl)f_-;nm-dg?PYZsyy`QAL&008*hHif@+iNkvM(=_#7H|f_=ugXT( z#UD1X3&(aoaIP6(j4a=YRrX{&i@Q&=#15ajd-KmV;m$br(m?svJpG9PimYPY008{} z0RI30A^8LV00000EC2ui01yBR000Jwz@PB9v-m7Vf(65D_-u%1R3!RX1DS*qB?w)< zlQ7Bjh$0qz?3ck literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ge.gif b/sources/lib/plugins/translation/flags/more/ge.gif new file mode 100755 index 0000000000000000000000000000000000000000..faa7f126a7eeb2cdd66c8e7d7bae6c19288d00a7 GIT binary patch literal 379 zcmV->0fhcXNk%w1VGsZd0M!5h^J`|q!^7$}FY#Me`uh6v*x2;+^!)7X+S=Ow{{HKU zgyQ1j?^;yL%ggeamFZ|=>XMD}^78baoA-%^($doUzr5z==J?*-?}dT$VqNpPw(o#@ z@TQ^D0RZh(PwfE!<4#BNkd42;zv=1e-{0TY*Vp%_r1Pz)_oJZqq@mf@+3(57?L|NN zuB_s9ZTZg1Edqm6FfT(fIiI{QUg={r&g% z_v`EHA^8LV00000EC2ui01yBR000J&4c69K@%@B50D}3d^dxy0jRWQH6{`n86gfi4j~dT9~*=NI5-0gECQAS zEFA+jC@B(&10EO(qZ<$%7Fil-I}9EMun-Xj0Si1QE*y6rAO;Z%ATSZN1Q!k$cK{Et Z1u!cSB1{M>B@`4L9Ss570U{zn06Tokyea?y literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gf.gif b/sources/lib/plugins/translation/flags/more/gf.gif new file mode 100755 index 0000000000000000000000000000000000000000..43d0b80172e97a08147c64f811ea5c7775ad46fb GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hs;a7*ui5eO@$F<*#M13od&TML>hy?y-rnB$m5kKX z)Yt$3w8iJV%jsr^%<5`g?(XiPwcY0C=H%q$?sjUj!{w&A-t&HP_xJazz2WW&0CJMj zs?RiQbXoVKJ@hTySuv= zN2U1q__xUC>|Rjp>+3{pyW-;FpP!#^kI|;N;Ipu>uD|3gSFo+9_7 z>~odVA^8LV00000EC2ui01yBR000Jyz@PB9K_CFBujQ zjbnlXC>|i_4OqFa&sJ> z9G#v)0Biu0l{WVFGxY!f<>dhXdU{*CTlOj{Xu@dxVPWe408+M7M@KpJ^*#4YO#N$X z04V@3r7r+j002h-3zZ81H~=)MG$f)V{7g(UrZOs{DioO%`8+-NH#hzL001BW{8d%` zQBnN-PxkgJ_c1a2{7PtMHDF#Z_C!QLuR!eYHu>~A^6x4Tmk;vt6k)z%_)}Bx^G5vu z0RI30A^8LV00000EC2ui01yBR000Jqz@PBvD;6I}q{Z@!I3tO~W>cvESUe3gV!gIV z1_LSun`oN=FIY^TOlTHWArNrIdW(k5@j?tT5OQ@f2MZV&4SfTDfdzI42RAY^IDP{< z4iF3!0s=JzA{{0p3JNDVB^;ZcprWLvIUpS?3_B7M7Z;tMpe3TT9>E{OA;lcWE6G6s EI~OyF2LJ#7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gi.gif b/sources/lib/plugins/translation/flags/more/gi.gif new file mode 100755 index 0000000000000000000000000000000000000000..7b1984bc692fea25c149976f81b83eefe4115c6e GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5h`FL*WsY>!XF8KKP@?25#^YhgJ0QX)~`D|k9&&~Mc z+9?L`uh9(`||Pe>FMdMX=VCmTk~2$@8aR!Ju%|O>|Rv)6$R*3O1V8X@@io8 z_4VOMJp7c6@l;63$H)7GeDvSm>F4L}<>dDE_T2yg_4W1r{r&g%_w@Ai{QUgy@9+Np z{{R2~A^8LV00000EC2ui01yBR000J$z@D(T*>FIh#e%^wH5$F&&qvMWcs!40Fwi-o zRNvzyQ*667Z!ervAP9#U8fSxSs*eOJq)O;)I6F8H96nb(02me*7!rX6Erf?22`(!o z36CE;5Hvg;9U2lO0W&o_1s@*;F)1$qum}eMBN+r4Fcd5|5eOn82eSbb7K;}G0=y9s Q6U`F_710$p)Hgu@JB@m~0ssI2 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gl.gif b/sources/lib/plugins/translation/flags/more/gl.gif new file mode 100755 index 0000000000000000000000000000000000000000..ef445be003587758a9c100f3b8f4ba28d7ecf95e GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5h{JgyUWo7(cUi_n@_4W1b?d|w;bMrJb{QUg;Mn>xD z>gML=`kb8N;^N-k-uIJ}?-CN$*4Ffki~Hf>>;M4d008wnJM;hm`@zBTE-w9UZt)Eb z`v3s^R8{_ylk^`S{7XyU008qD8TlIRt_c0RS`uhztxb4-XQLFAy9W8Y)^` zJuWpLA`k}^93>!Tm@p=s5S}3%0SPt$Fa#4Ms2dv@Ar}GyCLJXtHYgSr2L~A$Hy6qj O%*++fAt5)@K>$0)Ft+3X literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gm.gif b/sources/lib/plugins/translation/flags/more/gm.gif new file mode 100755 index 0000000000000000000000000000000000000000..6847c5a8c0232d984f7c8569a6f7b89b96736963 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h5tR{Cw^Y_hNB}DU(KIvwPXGl@{oP|@Y?=D{_Vz8K zEdU7Rgsc8MtUN<^^<_5J($?(pt{=R9%q&BwrH{BE81UXb>EsQut;Yv1MHQik(Ziu729_51ku@bd5>o*}!zyZH3;^!M~Kr7~iV z`@;YLA^8LV00000EC2ui01yBR000JuK+|tHq!^E+B~N4wt|z8sdlh&I zV1nSJx|lDwTVlQ2h2E@Ig~5nrKB5=m@qk%g3kD1bE*(A|9w{Io4h}0effX4UA|ePK zeHJw|AP);O7aF2GJR7Ds7^yfqB^(e94JZltZIsglm3;X*=`$a|mSy>dB6#V>6C88zu^&&H-GWYjO`|w8m z@k>OnMEp-r_xCUT>j3rjJ^cJ-ADQ4|UZN~l|!gvlF*DuHr^e2w<21@AEEG#Yme6E6cS92*@l3n(-Of<6(3BsGdK z01J;M1r?G5BoYpb04Wa!CN?Ub7onn0QOco{QUg+`T6xtH1=3N z{{H^@`uYLs0P{sE{&r#j%>aM*bo5g+`)pYGXinn*0Nnrpnf#Fa)@c0_0R8%J@IfCP z?Ev#+Nc3n-{_Tht`2*d*sr$8G{Nri;wS@lZaLKWk0Pz5I_G$i;g8a&V@kS)|Y*74$ zcktZGA^8LV00000EC2ui01yBR000Jpz?Nlb@fbag24abz#86OyR3aG+L?TDd^W%6q zm@uZ3$pFqWmF@uoMM#8Fps=}&dL~uP_J~B{0T2at1}`QFFe@o=a)KKp1_myNJ2W$Z zf`kS<5GM&fjB|Aw1|J_R1t&jaWM*do46(5{I9Co@6BQK)yb8V)N=p>OA;k;F$Uy)* Dz3QR) literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gq.gif b/sources/lib/plugins/translation/flags/more/gq.gif new file mode 100755 index 0000000000000000000000000000000000000000..8b4e0cc41ecc29ca33c6780e4d3334123a4aae24 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5hgTMYUq%n5LcID;e`TO}0hyB~y+1XT70BGp}efw#` zX^g`9);c;~yk7VB_f51-;%sd5^Yi)k_Ls{20EPenNC2q-07R`s0CxcL_3{8@0P^nc zQ?^t0`S-j40N!F^-AYQ*EG+r(xBUG4)2@!#O!e!cz8 zA0Cg&>FM|To~6)`!;9ZrTfW1<-{s$-(EY{8$%?;)^!M`gF*dl3;n zehU*4oDwT5Dk>YJ8wQIqARr_RtRW#fEiDW`2rv-0A0ILYyd@Uv%tF_jJjVUR4c6Frd>+Sq$P!khzY;2-MM2%x( zpgTK-N=lKOAUxya>SqWx001uP%+g(5obhdC000!HeVPCOQ{{YoFff0MVvA5vlr}Yi ziH5ZE^YlhWeEpe$=UG|P&Z7Bwao*qN_(R_cf=VV}aquXVN$HH7Mwx{F#FkLGXerQFcmx-4h0Af06z@`JsBAuD>oY$ z9Vjg)1wRl78Vm_&mjfdqDlCnkqNErD0|X=m00^E6qiU}M2fe)*w_9DUX_v2_O%y-N J%+1R|06RkFo6i6M literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gt.gif b/sources/lib/plugins/translation/flags/more/gt.gif new file mode 100755 index 0000000000000000000000000000000000000000..7e94d1dda0ab4a00cf6ce142d317cb66ee3eb114 GIT binary patch literal 374 zcmV-+0g3)cNk%w1VGsZd0M!5h@$~p=rThS0|Aw~zRF?YyHudc9^y=#B07&=%1Lj$o z_fwVj03`2ClKOhD{q^ z-S_wRA^8LV00000EC2ui01yBR000J)K$~D_sU42ASwW>@s04#3NTSi`bd%92gNr~Z zfy~8v>H$h6nZi2=h&C5pc?a;wK8u6^B+A?_b2%6v9~F5PAQ>A36FoaQKNuAiF)t_< z4jUv56OTVU1~DNVEGP&LBm|t0JP!sO933X66sjcvpAW7byeTLJU?VsaKe+}bCMhXC U2ulnRD=rWaFfAx3KG{J4J1s%9mH+?% literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gu.gif b/sources/lib/plugins/translation/flags/more/gu.gif new file mode 100755 index 0000000000000000000000000000000000000000..eafef683d5f0280f58de5bda5d17a9f6766e1b72 GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5hLu2wfUGmw{){dk8VSf70S6`E-|AU(R`T+pn0086w z0B(u;VSV*ndHHFC_fc>2?EnC4hWt!y^>T~)W`g^3js1zA{aktVewF-slKS)j09khQ zcaZ*7bM|(R`EZK;R(1DQbMsMf_ET{3dXxU2xQXOyYh`5VW`Ossfq&m)W}v!{w85sr zd7y5H_s4sm-DX2_jQOBSd(Kv6bdLSnyh6udh2m{-jf1Iwb*Wi)_(x~-_W%I#007$n z0R0I7A^8LV00000EC2ui01yBR000J$z@JcvDDrq3O|J)m{0z{+z+yQZFd5Ip|${z=jq{PzuC=Q~5-0B`hi(b~_At1AP$`Hv$4G4-z{77YPU! z3yTCQCpZO?00A2bJO`Q$GdVRflK}xCKBW|AIvoWt0HLlUJ{njaF$)e33=9_=AtMjH QOHB|8&mca zFyyoV_4Onfof$`~LHzt6FQ_jw zrZOL(AN*Na_Vz^e^*<4h0FKKgkj*RpcXwN^Q2P2@{7+C2mk;%Jc8zj#{Az0UZ*Tno z0RI30A^8LV00000EC2ui01yBR000Jqz@PBv%NQj{k7vRBMV_^UX8L&C3I$5Q$>F>{ ztJSDPGM!Lb?kfZym(L7Xz^4Nsa38lB#bCtdI{*L&1_l)s3N$ko78No+J$45U5FIQ7 zDJ~5v9RfZ)2L~7vmYA9iu_0t6dgAvPBml$9+5v;@M!AjQT4$jCte EJ2d&0^8f$< literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/gy.gif b/sources/lib/plugins/translation/flags/more/gy.gif new file mode 100755 index 0000000000000000000000000000000000000000..1cb4cd71d6fd05fa1d42a8afbfc3d25d4512a43d GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h0B!)EnQ->^IW?y=)#$(Z`^x}K0QyKs$J@E-_10Ck zRFQ`}hRlg$zhl}@PxkqF{&#ow_ALHaR{$~q_V%iD!*>Rh2K;Jj6P6VE`dV^nM7Byu z^YyC4*j*zfYV=QR4sr<|QTZR8-|O zG|T`1^?G{x(b3!h0Pq<)OKR)9c8u3q0?Lk55MMdyoVe2?J@L5^%W@he1Mf7)f?Kn8^N=f7&AM$Ey`@g^S z;opdmE|u59$9OzQ z34=fevWx;4&bCXs%n}pUtb;~`7QYiX(O~6jE&wA4Di#z!8VMgf1QRj@H98n79ubEd zA1Njv1PuT&lO7TZJqIhA9UnFT0xc+_G^7V5CLJRq1_1~Our~!64pwb193eOs5ef)>y2ws2+)GW3#LM5@q^ivc z3EsHAA^8LV00000EC2ui01yBR000J;K!R+LNDNZ5ijpy6EEc<5>(xW)0Fuy!=U5dM zz5@;dG2Kc9&Ex{W1QrQe28YWWU;)a6gaLFGEGH@g0xmx>6dxZL77-B(H3kPCM3J(k+1vUs2B&Z?{ARY}Qx>_DQ Yq5-4|5jGYZx(rTFPY>D;4ckEgI~~rLTmS$7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/hn.gif b/sources/lib/plugins/translation/flags/more/hn.gif new file mode 100755 index 0000000000000000000000000000000000000000..6c4ffe8e84324c2ea40f2a50e6e0ab391b0f77a4 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h{{H^N#KdHN(O7iOJzc|ei`VMx^A9$%dy?7!08#)1 znqGO(CP}>X_4TB);s6q%=H}*wmCI^_)BpgALu1Ik$m;m`_^!I)y2a@L0CTm$sZ_G1Q!otn%E>FI>#O60vzkrt9J5igp zzvo3;r5ixGm#E+K^YhQw@k(dLNN346Sj6My@y5{a`T6<${QQBH*1*c^!OHB#&+fCn z;s5}9A^8LV00000EC2ui01yBR000Jzz=u$%C{B*YpYpM4BA$hUL?T!W1{nonVI7n_ zGzy_+LeWAI*{yft?JAg53k15PTo8bs1moav78?c)gaLT~IUEKY4h|MJF%6N1h&d!1 zfEFD(1~DHE0cj_1DJdEnJ{K1wBR(t>0%Bw+3=A(X2e~K-6I5JY9y1~$1OzH72|p7` N8Oi__SwdDR?U1Oct<>lpbsoy$<%>4ZP`*n40r`}bR()Ttt z`anPc9HdB%(f@9$KW)_t+!_C!SY zNl5@y!TbCB`~3U-OH21xR{#*5_*`5{daY=p+i9fUY^2*!lhgI}_5A<<`OM7p^z{Ax z{r>;}A^8LV00000EC2ui01yBR000Jwz@PB9D;5n%Bn0vcIG-3yqv3GSWXym>Qd(3B zw*qIQNVKxt#Ud8s@W=@h3*!5He3wJ}EjZ|UIuvzyd2Smd0)L5ucrY(IZzKsRJpuwf z6fO}NHUuIyWi=inBNithnw=sKDmf^l7O@&23@a-G6&W}-6RQsz8acEK0L1_u9Wyfs K2q4ZNK>$19yrlgA literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ht.gif b/sources/lib/plugins/translation/flags/more/ht.gif new file mode 100755 index 0000000000000000000000000000000000000000..059604ab20eb6f3a5063c0321ae2e8b1badc4a67 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h_eVDX5y0py7K@tXbA{g4008b+M)GJ`1187oMl)`K z-2el)YjMhyqv%|5)@6Cx>Od~!002^H)9y?={9H`*b7Wm(#C?w9`%*&y9K`lHCw+s| zWoyXG004!R;`1vPdW+rw0Iq6%+Dl^4TkZPe^MD(g2S=`tUA zis1bK0C;`T3l*p0EmYUr3G9Lf{dG&c}c8K5aU{L*g zZ^ZxrA^8LV00000EC2ui01yBR000JtK!i}3$piw6WM~;eG@dltVBqmwKsy01**8HYX?(2@onPECK=~2^|p?qNJv%sw5;3Kd%S7JvIiTq@}o?5e3G_9myR( H%s~J<4X=$u literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/id.gif b/sources/lib/plugins/translation/flags/more/id.gif new file mode 100755 index 0000000000000000000000000000000000000000..865161b0307cfd1609732950cba4d9a6c7999aa3 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h@$vERqMhVoS?qdq@s5YO008Rh>gML=>64A?o|*Eh zrs7RQ+%+oWP)6leP3C4^%m4uEY-Gd$0Mh^f-T(mF008J=SL0Jj?SOgeXkX=AQ{hNG z;Nal={QUj>{p@pV112#cW>!lRp)AA@TZ~kuBz>JZt9nj?3$I| zJu=`!IOdLs@QQ=*jD^)03-0dj`1ttt_V(S~-QNQM`}_O#_4WGt`tfFwS*DGCZG0RagtD+mZL2{IlY9UVA2 zJTyKvIXgW+J0LigmzkTLpFceuJRLfinw*|L002K6KBcCovp+vJIXwU~#0CZj2Ou0A IHqAi*JCOOXTL1t6 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/in.gif b/sources/lib/plugins/translation/flags/more/in.gif new file mode 100755 index 0000000000000000000000000000000000000000..1cd80272e8dff56ea70d78bc81688bd91b0ab504 GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5h_V)Hvq*VLbRAa4U{oP#F&6R7iYyJKGn5WW*n#}a8 z0R88T0Bit5n?wBJbL*P`{ks5Msa)ga<%YtB$IRpV)Hb}q-22u=_ts4O-D7*ZdvmsP z_Sy?`uh6v^7Hz%001}u^YiprrdUp*P5>YP`}_P! zpGo!Je*W#Gp|je6zJUGUZGV!-`~3Uou>kk60Pv&$_RcK)-)V!4z4y>D`P4o9*i7{F z_5Z&BA^8LV00000EC2ui01yBR000Jvz@JbEDVj_+h2nO5{65f+!y(IMG6aDD_4?|E8002HHJ`#B&EQtsfIthX(C54AHEF=^& zGZsFBkrE6O1_lEI5h(#GEe#DFDIlMsq^78<9UTEH3^5uS8ylgc5v2jQ3?arM$S2Am J%qz}806T|Gt@i)` literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/io.gif b/sources/lib/plugins/translation/flags/more/io.gif new file mode 100755 index 0000000000000000000000000000000000000000..de7e7ab385eecd5e55ff60cc67e06604c2ca7ead GIT binary patch literal 373 zcmV-*0gC=dNk%w1VGsZd0M!5hk9Dg60*GdAx`nK8)1|q)z}>aD+IFN@_tw~um%5oQ zUH}I&%uGl6=jQ+bZe3-z{imduwur24O~l6HsI1iay1I#n!|l>Z002&Gn@c|@i`(4n z^4;S5oS8~etev6F)Ya=)V6#I@sovo3?bO?TsAAjG&gr(ks>Ph* z!_4l?IpEIRTSuAQ$wl4Gdcnoo*L{uP;PFveu(G9OaGPHBprQ3&U-$C&tbwT4*z2iH zbD59BA^8LV00000EC2ui01yBR000J(KpG&RP!KhNfWxs^I$)d~V#R5E3ZO!S6`4_V z6-cK8$?*h&N9lkYV0?&1C5Jd!D3kT!5c&K_Dg*>6Efx~ T6b2F>xK2wL)Ya4r*g*h0BUh+0 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/iq.gif b/sources/lib/plugins/translation/flags/more/iq.gif new file mode 100755 index 0000000000000000000000000000000000000000..c34fe3c44ac029c96bbc44f4fd1a814b8235902e GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h>hlr5TwF#*M)d#ytK6*S_2zwh zeZJzt{9|KdV`Mx$JnH}e6ciNp`uTy#gZE5K{cCIcMMeL6diyvyTU%SS;kN#Ec2ZJP z{fdhD{rvodg~H~=oYJ26adPhV@ia6vz2m)XX>5&)jg`-q_vX5cu>1kC^SPodc962ANhPDA|fCG0R(s%EC>rXEG#VxED|S$cs&RS z2`(fg0G*SC0x~8hIynjoHZ?CLB@GHcKMe*B4kH4$5V^Smunia(8yg10v?I2>u*u5H Hut5Mj5z(S@ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/is.gif b/sources/lib/plugins/translation/flags/more/is.gif new file mode 100755 index 0000000000000000000000000000000000000000..b42502de4b0108d98a6ce443709bd95e88523352 GIT binary patch literal 373 zcmV-*0gC=dNk%w1VGsZd0M!5h^z`%q0eIH%{6AP`uh4~io)bW zLI40qah1w#lgUwhyjX(1-Y6#{SfxyOxh`R>^78WUd3Y&Zs6KA9003rQhr$2=S>ro8 zL2b=SW9KbF%;ngZTLPLvXX(003%_#`gC1`}_Mq zZ?Urg0OwX!>R49iO-$wGMR}ioeJSROX0EIFs6(2AHF(e8b8#)k^3NAl< z1uP_igM|PT05Svy84m~wCp8x$2NM$(B?|-|4>LR)J*%x277-{5CRr*xFFg-AI1)4^ TC@l+20RuM!8r2Ke*g*h0+u4{_ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ja.gif b/sources/lib/plugins/translation/flags/more/ja.gif new file mode 100755 index 0000000000000000000000000000000000000000..444c1d05c59ed6a43e63fc7cc7b809f47422ccca GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h`8zxI_V)Pr`0wxU)6>)K?d|L9>-R4&_%=4><>lAc z*XQTw_9`mr>FM3w-PP6A+uPgwMn>P?-}p5(_A4v+G&KBGRoU6u`8+(~%`awbW*4FfWef0J9{i>?b(b4r)RrXt3`~3U#lau|syY;)f{r&#= zmX-Riul(uh`+0f%et-M>`}Fkm@$vD`&(Hb!`TF|$_xJbw{QUj>{qpki^Yiom{{Hp# z_5c6>A^8LV00000EC2ui01yBR000JyK%Y>^dN zd@J3P04Wauo4O>(*?IKSABDqIg2{K~!vN>OBme4q?$1tHSy<-VS(SxFl8t()nOR+_ z82|tPA^8LV00000EC2ui01yBR000JxKu0YFC>9gQ*XA2tx8hJl#0*Mp>0Sg0!8Ut&I4@2FfukLorfVND;ysdus$jd6&pV<1`G%tV`Ly8Bp4YsKNA-K63NLT L%*+xME({S;F)=14CLS9-epOaZVqkDu>-d|2;g6S>^(yPXxw#C% z48dE2V|K+PCnx*(_+)2iU%PfqW03}fJ3~oHiL0w?aB%Q%7Z<77(tm)Ur-#9U;cr+N zgEqsbPoFMcy!f+k;)|T5KXd2*NlS|e4?lnYyy;5Qf3s%Y4fa}6U9C7@@t2F|p9vH8 z#KcUQ9m|lwur<@(V3|SEzNA0?{$IX+wODSE5FK4vS^4?%=N~_QeETpBlj-E-sawYi(g7&(0-fEUvB4T4f<;-Nn_YF|o2; zPR>G=U0K|KnT=D;P)JBiLV{D4T~W`7mzRf!dD(JPQ(0DSeSPjD!ot!gWKYRDGFSru D;P{a* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ke.gif b/sources/lib/plugins/translation/flags/more/ke.gif new file mode 100755 index 0000000000000000000000000000000000000000..c2b5d45c439a29194331b8a43a34280180f6296d GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h-A79RPXP0Gdg@0^0BrzhXlOX7I8Ze<=h)atvq`a? zod7WatFMpbCM@df zZ-qQvx?SNNBcTYxnl_dwY83H$CD#LiO|W?MqSQ008AJGra%+Sy)(L zKtS_hW#AVdH?TYMU14m)ZE#IZ=jh_q*T3uM=grE>+tbJ_q%`yK@!;9cQBhGDp&(aW zTmS$7A^8LV00000EC2ui01yBR000Jsz@KnPEDA};in72gNLW1HQS$WNE|=TG!hQU1 zqmx*N_}3(3k0 GK>$0)Ly?03 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/kg.gif b/sources/lib/plugins/translation/flags/more/kg.gif new file mode 100755 index 0000000000000000000000000000000000000000..72a4d412c805708b5f27c5a38622a46e86a14cad GIT binary patch literal 373 zcmV-*0gC=dNk%w1VGsZd0M!5h_@ztrYismlWAm3S>^nQ`D=X?MALtqy`N~7;BO~Mh z0Q7}9_QNy!)z^Sy}N#MfiJr@?Bl&Ha7HBRP8Y_^G{Frd3otEG4X{f_I*qA zRZ;RtLgy?j^jT5wKsN4QBk(~w_MSWUl1B1aSopv?^tUSXQ&aVKO6@otQ-kt?Kxm(j!%+|jWD|880;3=hGc0v?6DBMW3lJ+U92_?)1pojJg)9p* zFDNT9Iw}edk_CkpGc_D22{8%@3J9SS4-8^tW;PMGBO^TlAXYzF9ykXF1UWe*BmqiH NOc~A@0nyPx06Qe4k+A>( literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ki.gif b/sources/lib/plugins/translation/flags/more/ki.gif new file mode 100755 index 0000000000000000000000000000000000000000..4a0751a221904a25343137a7a4a5aef71e112f5e GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h@rQbxtlas-yX9F&_U_%w)9PDz%0^j|=-Axod}+hX z=jr9+wZiA)NjCP*$?R@k%m4sugwX&3cIsqPe3aPF*X>qgj_Sf#^yO0uE0F15PK%z~ z-Z&)b-BpmK;Bbl4VSUc>-FyH5SHA!N*4*%_xZmPJFEmV*2Fo_ z*3sn7((l~9Q)#JVahYm_&5fD6=@ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/km.gif b/sources/lib/plugins/translation/flags/more/km.gif new file mode 100755 index 0000000000000000000000000000000000000000..5859595e809b6e8a98704cc408a7267920ad3e80 GIT binary patch literal 358 zcmV-s0h#_sNk%w1VGsZd0M!5h01oTx)d2YTQ~LV)mxr|gYXJ84_5A#D>GSE^G#2{$ zYS`=8Xr1@rNGhkd+*cC>-6gY0NwH0 z003D4A^8LV00000EC2ui01yBR000Jqz+1paEE)sIKtVU7P!3SVWh$sDAC{b~gnq9G%<3I~Ib&TxZo_Wz4GoNldUwcoQc+PVr+09H^hX}@W4 z$7M{kOuDfv^id$~I{@0++TY*cX=h@foQj5lTxDTNZ)#U`Z$igy0G*nShJt3@0001q z00000A^8LV00000EC2ui01yBR000J$K#gzcix?9~4dBO&K%OUyg~VzZYz-9Z=Ys^k zsf(+i7|j@BxE&= zfD;Y}2OkwG5e67L6dfQd5*3^uo+yfXlG~P=jHkN z`NYJ;-sIx-_4V1=+U@f4{Mgv(>FJ7!ipSLL%F4>_4Co$*W>Bw*WcaQ;os%!>*ww5^7Q%Z@$l2x+34={uCTDs*VScizN*CV-{0TH zd6Uc0&-1ah(9q5D_4W1i^R=DBqpaE5+}zL8(a+V>{{H^`{r&Xx^z!oZ_xJbw{QU9v z_5c6>A^8LV00000EC2ui01yBR000J_K%Y?9={z1K%}De~FnqtCW1-9CdcEC-qToG$ z5ecD|gFqAx1i`@z`EU*i>M$@E20IjD(Ez=15iu`z6%_*-4mu4O9XMA#GlePzEj&6I z4IU3y5i%#DGxmY1OX%fq5vlW92*%oB|R(z2m(A46FV>*2oyUO8a)aN fC=on74Gj?iC_BeXO$-bnAQ&bdDK-`sE`r_g2Jw5vA>G4cV05t6HJ39bN@c<6qBz6D!#KiMNMeIXE04C?|QdIlO%H{9> z07CBU008xJbKL0q_H}mli;Lpz{`=nD`qR_j>ip&>-Kkf?qp>#egEhb6n~@L!P)=#kB|46ne}gQ`^d<%&G+_& zgz!;PA^8LV00000EC2ui01yBR000Jyz#3&pF&GI*f<(fR;5N{WXj&?LJ_tlX2FuMr zJ5OM&P-K258UXfsX&j7@#S%%e28qiW#EbECBM)_V2?7lO9Udbj9wZI{c6b7Yh&vTN z6(I}{gp)QdhzAE6438<20yZcuh#(3-4<{E55iTtQCMJ44S6EsF1uDV|#5YPz91su~ M%quGs&?`XzJM&4QW&i*H literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/kw.gif b/sources/lib/plugins/translation/flags/more/kw.gif new file mode 100755 index 0000000000000000000000000000000000000000..1efc7347ec1c1387dd0ef7103161c4b246583d00 GIT binary patch literal 362 zcmV-w0hRtoNk%w1VGsZd0M!5h@~o`$R8;r(_i4gu+5iCdv$Lw$ssM=q>MJYmMn>ov z8Bb47;^E>l>J20u+s5T1;X@Z*S%*UzWbssOwF!_RG6&GQb!{>9vG+m7@|Vx4Va?&x;h|s8^>EksaoG6! z)kD0~h_BI+aM9+z*OX+^^?1j!Y1aFT%dCRUyWhV6pVFt_$~foGMu({bf!E<)&gZJh zcmu!xA^8LV00000EC2ui01yBR000J)z~48ZQ0cPx# literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/la.gif b/sources/lib/plugins/translation/flags/more/la.gif new file mode 100755 index 0000000000000000000000000000000000000000..d14cf4d82c62f716ee124e1b2afbf8bd79a41c0f GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h@;N!BW|MW1+gp6p`T6;WLw!AE%7&og%+>Dva&z|p z05o36ggkg`i`%h(sQO}J`dwX}Ta4QP0A+*K004**002pC%;o9xEm*|-Yio;0fSXi= zWQ5rMdV2LlMC||ou5z0I7PwV;)8qgE_fk^#O-=Y#SMe_|03*I%f!Fu<_ic#Qe>8A$ zjoVOl&P#I9?eO<~n&4@O+E8@RvUs17PJ)$HiA-?KpJS82kg@FV_MTsmO#nY_15fb) z0Q~>}A^8LV00000EC2ui01yBR000Jyz@KoaC>DLl&*#@^b`pt9=J9}-NTp9NN27s2 zfxs>j*=%Zo3hK~m$R+{=Vr8it29&j%!+{Y97c&NfA`~G9G8_W}e*`KM3kC}=hA|u| z0|Ppa7ZwW(7&n!eA}<_r1D_Ze78E=VIAb<78U+luEG#t@3RNaoB_19C#3#lQNIps* MBh4cc(9uBvJEn@1%m4rY literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/lb.gif b/sources/lib/plugins/translation/flags/more/lb.gif new file mode 100755 index 0000000000000000000000000000000000000000..003d83af5e0ac0bb96a30dfa4932a43915e3fba6 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hD%NwCGBEU>P{CMGEg1KS zeDQ2t^78WW^z_5R!lKNh@M2NS003L0TlxC>(*OYVfpqR(PCb)7+W-Kx0092|{q0*y z=0r06{r$uM0O>_Cz5oD2mPARKO855m_4W1hdTsvx{`2?sg}Q{x-^=AcF8%xb?N~@C}y*Yt0X(b7Px_hsW==K zScqkVAP_zl5J1Dut#+tdU@{^ZNDhF>)amse5+XJyb$5AuelQX`AtEVucLe}_JvR~( zAr~Pu4F(Jbl9e|TCjl214*@(3p9K^p8!TlnA1VR@3Arsk6jxbevSu$FDk{865gr~O M%o)xZKG8t{JI9i#CjbBd literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/lc.gif b/sources/lib/plugins/translation/flags/more/lc.gif new file mode 100755 index 0000000000000000000000000000000000000000..f5fe5bffd2017b1a599d94b4fd5745098fb0e845 GIT binary patch literal 259 zcmV+e0sQ_)Nk%w1VGsZd0K@-TAu z@%Gn5Hf!~fxAkFQm2{o+Dq`bplkGn{JYR_JahUI(!uQRgGWYE*V~z4EUfn8R;k)Ab zD`W7m!s?EOgeqX$A^8LV00000EC2ui01yBR000GmAO?&;VKN1yG8_X0a8NbdhBOVL zLocom1j1wRpil(7Kn@{Dcsz*+MWH~xbchE*A|YTR3d}%LsOSWU0Jk&1U?vZ;S@1|W zEEY#%!l%dubPWa<7X||W695z$1q}iN3LOWN2OR~85g80V2n(K{3K61=DjXaTs2Uj` J8Lg`!06T6AWa9t; literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/li.gif b/sources/lib/plugins/translation/flags/more/li.gif new file mode 100755 index 0000000000000000000000000000000000000000..713c58e1df193b0256be462a3437c95af926e600 GIT binary patch literal 359 zcmV-t0hssmzVQaqZh z!vGnld1aW&008t@L+xl)DF~@ zSCHT;5Aa4W>|sowk+<${TPX`+X;O^vO*e2`laHREMR3Hv!KX%Z$msw8@N{DP;A8aM zX8-^TA^8LV00000EC2ui01yBR000Jrz=d$QAQ+E?OlA>Ms8Tt_X2aohIv2n)#4`Cr zE5OHtlNd0c?Wre<+{WcI#k160vSM8vL!sa@Gcf~$0}O^XEi@n?3_m*-BO?wDH8n3K zB?1BvH4O(AFbD|=0R;sUnh-7l6$d1uq^78wE+_@9JTfv5FrlykrMCye4aLR{70Jp$ F06Pnflbiqm literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/lk.gif b/sources/lib/plugins/translation/flags/more/lk.gif new file mode 100755 index 0000000000000000000000000000000000000000..1b3ee7f572ddb8199166f65e8803233cdaebca1b GIT binary patch literal 377 zcmV-<0fzoZNk%w1VGsZd0M!5h{+C$v(@WyB7rACo`;AEGyd>$jN1;4ZaHnYW)E}!% zW?Y+G^2j5eHA(i>Q0~Vy_uOQ;Wiqo`Z25*h^Up)ccqB}aNb$@)o-{hmhC;)6bf-mJ z#BUqfm@L|xL{*nm?Y}d(V|1=kX0cgR>%uPi*;JV=LjIy<_SHC}K|J~2a`o9;{gO~b zj6~k2Kv9%W%7Rquz-MNmW!9KB$9p@^f)K4vPsoC6u24#^QeDi1F3^N5-J&1%*HqJz zNBP-TA^8LV00000EC2ui01yBR000J-z@P9}>Ny;N0EKe7JRUy;;&f8QG@+10A{zKQ zKiL8RfM{-9MQ$?~?ZV@-L}7q=JQ>`fQW67L5OW47AT~1*dp!#uECeee3Md&M1qnJ0 z6%Gq81Oz<_8$Jx93>YRH0Us6w6Al{(12i2GJf^5GEfW&~BLfY;CKwSZ9274Wx&baD X2f!vN5j9Ls4Oz$U literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/lr.gif b/sources/lib/plugins/translation/flags/more/lr.gif new file mode 100755 index 0000000000000000000000000000000000000000..435af9e506f70a8cc09022ae3029373facb3ee0c GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h;Ami@006B30N!R@(LFP>wA0{cU&H_a-eX$bURAaL z0L}mag@?Gl00885ZR2ri;caExT2b3qO`HG#003CoRZC`RrPfSB{{H^`{r&Xx^zZNW z_xJk9006lF0M}Vh++0%OY-8tyeW0Po+gVT3L^<{6<@f99*ic8`Z)VtERnRakXhcp5e|E(;u`37noK1Oy)wCUthEk~66;OHB$20>uHx6B9o_ GK>$0mai$so literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ls.gif b/sources/lib/plugins/translation/flags/more/ls.gif new file mode 100755 index 0000000000000000000000000000000000000000..427ae957e508a6c90df90c68f2320b119bf372e7 GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h<>loTn-%~u03Dnr01s_coyhC#>_wKu-`(3QhPvwU z^F*&lB9T_py_GPCz4`h1JF7bYL;y65zx(<2`1bNAe4D>{miq3 z-_Wu>lENi^wBggYHmEi;rZV;K<^25nD1x_as?K<^(Hx*0%H8JxF@pd>jnU!i)xevM zzS{Bh_0hVG_wwpkqRl_4Nx00`OQv)D`};(Zy>FefA)7Sq=GVrmdHehO>FMeG{QT|h z?fUxqA^8LV00000EC2ui01yBR000J#K%dZOFz|SQBw{&J`93faXQa{edb{7FRUr5% zuMMY))hZ4N8^O@PSTMEn1Jy~8Yyw1swb43i7#0Q1BE`QJsoDir+URq$bA z_uD)C=X3hyYxl|k{nP;W-&O5BJ%l;7{1gcNpq%=3ZTkB9`1tq$YVH6;-d(c!gv9#*g7BZ7tSf@AJVX6BGjjJwH7-dJBDjfrEu6Jso$1Tgt5T@ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/lv.gif b/sources/lib/plugins/translation/flags/more/lv.gif new file mode 100755 index 0000000000000000000000000000000000000000..17e71b7eb6bb2dc4f4e63837cd70be048d08f1a1 GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5hu0lhpG&H(YRP5Q=oE#jaGBUzzYjgkrX8-{F{QR*- zMp^&>@!{dhdwRxlbG1=Xtv)`;o}RKwN~JC?>B`FV_4P>r0O{7&zFb^^008>>`uOXBfMEz^Yiom{{EO06y@dR=+o2W&(EqnJnGli#(8&0BdeM3Si~wcH zWdK_MOTJ4`!BBF|a&F9S0A&DS#$i#vQ6;V=O}|YrvoJcgI$_CS08#)|!&QRRg8)SU z089W*z)n}gS2eUXe$#$x%4$KkK_IIjJ+wVHwKqAlIWMsNmIg8Xv}C?!dXPQLsh_4fYX3GxH~nqHaE66Nxn%-yh~lg zT>zN?A^8LV00000EC2ui01yBR000Juz@Jb!7$g#cB9w9}<=Yc$F ziVG}|X;27;)=uKZg;V4P1KlcBD2pHH0x!=EIXV?6G7AF;eR61lgA)Z912JSBb1oJi zjUyr)2@W%q1ePBsDib3BB%BW&JfWAQrT_pY8vP*D9* zQS~Jy`a(kaR8;@^dKPd4Gs57O6~vv^*%l3008@8Ve~pW`bI|jL`3=k0QLX? z@&Ew-Sy}1;0RMY?^dBGd85#F5F#Kw2{AOnQU0vb;0Q^f!`$|dqJU#O=GW}Fk-v9vl zIy(M&dHO#;`B+%Ga_{m6nG9Rd>Ax1Hw1McAs2WLHYgY` z6f`t43y=joCK@A_FD-PPAq530EE*&kr2`0$sSyzdEE`%}2@)6r6c;-x1~NTMO->#j N6%{5XEIrae06XmGiQoVL literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mc.gif b/sources/lib/plugins/translation/flags/more/mc.gif new file mode 100755 index 0000000000000000000000000000000000000000..02a7c8e1bdcd38bf6ce52dc5662d1d75026b67d1 GIT binary patch literal 359 zcmV-t0hs(J z@$vEgU0w3>^YuSJ>gwwBW@i0#bo***^dKP5&(G)Q=lpMP`cF^&aB=!vT=-K{`Bzu= zL`3{$W&C$|$H&LX%gOm?XZ!p6`1tts_4UQY#rF30`T6<%008sz^ZNSw_xJbo^z`!b z^8Ww;A^8LV00000EC2ui01yBR000Jrz@PA!E9NE>gVJy~{5DXBD0LdS3M$qL<=k{S zh{`3QSTr7xNTLfClg;P|r6tKZ!sGHeO(A{i3=A(KRWbzt00RRFArc$`kTW|tG(0yo zJvu%;8Xy5Pl9ZO1nm#%iCILH>m6w@592`D27@?x0nI1l~7`*}l78V2qB^ogqHZV3p F06Uswuu=d3 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/md.gif b/sources/lib/plugins/translation/flags/more/md.gif new file mode 100755 index 0000000000000000000000000000000000000000..e4b8a7e3f67097d65193a435018d68d1a0798af8 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h-B3dS0I{c(RP^B~OJ~w#ecS!+UE*X}+e$s_#sL2E zdxMwa_T@3wGbO120GfwGY=qpl008>wOY_(!ev{(-?r8k%RQufk<-GvrZe-g=IChNQ z;8;xg=tTDAJ=7~4{L%o!0032S)?azq+CVawgFOHMpV&Jsp#T6{b=dgkK=$QK zj7na3)ioRq>SWf5>VEgl*qCmap|6ni3lGcpehgbe_P8#y9A z5-l$}B@8DGl9ZPO9V!o<1E3!WC;<>Y1TQKK6B9hCAFHij1uix=H7g!8Xlbn`$R-I1 N7|j?CDA6cE06R$cn05dF literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/me.gif b/sources/lib/plugins/translation/flags/more/me.gif new file mode 100755 index 0000000000000000000000000000000000000000..a260453c2f73f32c07a75de3dcc5d990fceff33a GIT binary patch literal 238 zcmVjVnU0|@E6KJ?8$=pz#6vOEuFvF)}# z;jSy>oHOJA2LItkA^8LV00000EC2ui01yBS000GR;3tkw=|CuST?pX5upkRc``kCB zQ&LacI7(;X=?w-y04{*ZbTFMGvZmApHX4mndfx o1nz;Q5ovVj2NQP^Qb%-vf-^D)jE#*G36YTzlo14%m;@mJJHTpU4*&oF literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mg.gif b/sources/lib/plugins/translation/flags/more/mg.gif new file mode 100755 index 0000000000000000000000000000000000000000..a91b577d138eeaa5d0f9bc8a00cee9ddb3305062 GIT binary patch literal 372 zcmV-)0gL`eNk%w1VGsZd0M!5hO0r5Eo*epARO$c#>gwt}tUXz}TK#Kl05$;iBqaAt zOy=h1HL5k@;^Nxc+S5HKFQqT^007W49sB?Q3zZ81D*ymT0R3iW`$tFmK|=XFJoq;@ z_c1Z{D=Q?TB>YTFGo~^sq$(7d6#4o2?d|Q~-`_T{HrGcp{9s`hq!%KpBKAZ?+fqQA z008=2T<2$9^*=xTaB&cq57$mREw3&6{QLd<{Vbv^{)L76`}_U<{rdX){QUgy@9+Np z{{R2~A^8LV00000EC2ui01yBR000J&z@D&2ni!3dWMnYt{eC_lE_OIvP%eQ$(S$}1 zf)6I6*>F1CUeu?%h{@(oVl^N|bvD$vd`=`_0|ab5JTELWCnpaN5)v~l1Ufu5IR*s` zG&CwIDJdov1Uxx8I|d98Aszt%A~GNd3p_hJBLJwXtTGf36$_*zBL)Bf1(ysU5H}SK S4J8gG7SR?6)D_kUK>$0+p_E1d literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mh.gif b/sources/lib/plugins/translation/flags/more/mh.gif new file mode 100755 index 0000000000000000000000000000000000000000..92f5f485c3bb6e33dbf40656bda07e3742c071a3 GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5hxy0R=s?qhQZg-KxskYMq0BsmTlZ|k9L}{`3+q?h( zR7+~BwRBrkbh12StM=p2001wAo5ymG!dYjT_kl4(W29SsxmkI%WrDf@02nq~q5l5< zG+3T%hPy{i_^kXs|~^Yw2A8*Wm7JgR#$@g7wX=EKr+wc$#u) zga8S9A^8LV00000EC2ui01yBR000J$z@Jc9C>9k+r0W*}m?8s-MAX4pF1;1)7uak9 zmqsJxaa3M2*zHH~2F9V9!xy6n9;ZTt0KkM6H4_YWC?6#`1p{Fr2sH;XcON(r7Z3#! zV+eu*2`K;_JR=$z1tNb3oFoArAO^0Z1sFX#I{*?IAi1t192p8MEd&yO3mz2}4jLT2 QHYx>35Yf^Z)YL%$J4-p13IG5A literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mk.gif b/sources/lib/plugins/translation/flags/more/mk.gif new file mode 100755 index 0000000000000000000000000000000000000000..7aeb8311b2b6a4e18b278d1774459e57335c1b76 GIT binary patch literal 382 zcmV-^0fGKUNk%w1VGsZd0M!5h{8?7{*f{@h0RED8_Bl8G+;I4bGyD4h^Z)?$ye#Pe z0Qq@4_{>KBb#?o_NBKub`-VsR###JvPyA(N_xCySnG)&h0Qash_NpfT`gijf82*1* z_ADp->r?wvO!Pn?_H8-zM>O_oC+#-?`<6rdZCLqcNA`9q-v9vgEga~^0QF4({Wk#o z;{ftO6#bV`_Bbo@S`*#f0Q2S={CH;j@M8XmS@vBk`Mx>y*dOuA4)WtH`maL$zf}6u zUHXiT c9uEu*1koW0J17S$NebF3Dhepy-!ee}J1K9L&j0`b literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ml.gif b/sources/lib/plugins/translation/flags/more/ml.gif new file mode 100755 index 0000000000000000000000000000000000000000..53d6f490c1777de4f9d44195d5e188cf2a35db0e GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5h?Da!Rv`Xjz0BXW&`22I|=m7luY4kBM_en|lS6BS} z0QD>^^Bf!ihyeE3D0<0y>GL=BBqUL`QS9|j^wb<&y<7l#0CL82I;uJVXaM*3MDi08 z`T0Bg`a$^kHT69`Sh`sNR{-%14e|g0MX^Qu`$zZpFZT8-{QOMy^(0idRNw#r{ryqn zqX6&tQ}py6!4O&4|n0B#;M4t{?E78eo$BmjCQCk_k@ z8#yZ$1CTlp9+W8*m>UP110*^a5TY*>8zLg78C)PL6EPYZH9ci!KNcAoAt5&f$OSDc JD?iRb06S!MmRbM+ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mm.gif b/sources/lib/plugins/translation/flags/more/mm.gif new file mode 100755 index 0000000000000000000000000000000000000000..9e0a2756d2ebf850087f556cf77289009985f3a1 GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5h`9nkXB_-Y6`1CwI`dwZ000610?d1Rf_%=58OH1ki z0Qx>Y@=a6#0LOiO zmFiJU*Kly;czNVTM%}@|@=HtGMLW(_Sl(S&*Yq|v`$$OfLrQFA+Hq~)c5>d`008X( z0002PA^8LV00000EC2ui01yBR000Jxz{c+1@_u`KpBFCl2H5} z6@dU{a^V0ggeKDchQ~7wS}h4+4h`5NWvInMX&QAM0|z8LHaaI9AvAOW9Up~0Dhv!c zIRh+$kRK2?2OAz|3nh<{5D+3G8z2Cs2oZyx7Z(#F1z8qb2^ataH#Z^^6Fo~!J_-s4 L%p)T`&_Mt@&VP;h literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mn.gif b/sources/lib/plugins/translation/flags/more/mn.gif new file mode 100755 index 0000000000000000000000000000000000000000..dff8ea5a63f0a3ec96dfd0dcb95a0a7abed8083c GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5hK|%Ta+GzgCTz7N&^f58_NlE{EdHYpV^(-tZD)v!P z{qr0g`)FH4IPLW$B>d4${Aft?00000>He%%?EnB(N%8z!Tl!r+X=(iC008n66ZJhk zFfaB$J@rRN`ZYE9@eK_C0Q>*|);l}-OicXw001N;_22*iT~hJ;*hC&4^z}A2WnlLn z8SehbdH=P0{@ro=abhYY@cxH(Jvj0tAMZ;`_b@B*`m#j+-ds&V?)h6){ex89008{} z0RI30A^8LV00000EC2ui01yBR000J!z@PBvlZ1{TNn}Z({0uLHVKBg0S(d}0;4}yr z7LX O63r4KCnr7AK>#~`43F&q literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mo.gif b/sources/lib/plugins/translation/flags/more/mo.gif new file mode 100755 index 0000000000000000000000000000000000000000..66cf5b4f05dc02126365be46762113446f171a8b GIT binary patch literal 378 zcmV-=0fqiYNk%w1VGsZd0M!5htJ5t>eK)_ z0QC0sQngY=u|?YK+Iq=)am8`~g8*H=UAEn}m(P~~SpZMAPXI{(M6N^tbO3P0Y)Y|8 zF{LnGyi7l?KRT*93zZ81EC3pu8d|!738K-oN;DY5a``m@aiMCmJs`=!Yv%|;$A$NP0yis$eeV4+6o4SOY!gi9p zM{BlIcBwmInnGuu001C@l!%F>i0sgicaElSjJR!vwDiBKYoDF;_+o*uV2ZQ2#p3<#r26otkD|Afrn#QA zrT{I0A^8LV00000EC2ui01yBR000J!z@Jc9DGrW@Wby}S0t_sN1J>IRN~QzTvf;G^ zw9^DZx#}tgQ1uJ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mq.gif b/sources/lib/plugins/translation/flags/more/mq.gif new file mode 100755 index 0000000000000000000000000000000000000000..570bc5dd18a8cd881e03c9a56c3ebcc514191fa0 GIT binary patch literal 379 zcmV->0fhcXNk%w1VGsZd0M!5hTXLl}RGv_4tisCRo~+NNwAAM6@??9o{QUgT*5k_3 z<+j1v03U?2z1I2p`2YfQ=H})A05XA<#O&_!U3RgBn8lT)&AGzb003F^_4Q9`sk+79 z)!F8Zoy5)5<#~_6003wJ07b~q;?UUXLSCYGjK03e-o3`%_xJh$02lxgeZ$M$SaGn5 zoykaLr%7h0`uh5Eh`rk0=-}n>)!poAfw|q{?_YSayv5t;>FMF-?bh4q`}_O$_V)e# z{rC6xA^8LV00000EC2ui01yBR000J)s+bJnQ06YHGuI>N; literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mr.gif b/sources/lib/plugins/translation/flags/more/mr.gif new file mode 100755 index 0000000000000000000000000000000000000000..f52fcf0933bdd5a8e30a1d2f7d76b97f728c9ed0 GIT binary patch literal 377 zcmV-<0fzoZNk%w1VGsZd0M!5hfXF0h!e{`M05z#K0E7ThwNXT_L_@GK0BHc&>@Y2) zEdV_LGo>>Cc>sFJdH_lQaKv#rmpNj-VqLyn`ujyqt4;6rEkm+HBcUUs*-C4>Yd)?% z09ybVn;9mPCQ7wRAB!JPwogj4N;;}KSh-nLxKwt?b`+Wv04D%Dt~*`4T`rj}g2^NRIXC!;d4wT zq*5W1F>D3{g^24V?FtnNg*G@SFop-gq>J@F1{Wy|3@{!T8w&&wB^5F}G!YRm2{||& zBZ?3qA2SIyEiE+(ARQ+I3k?Au7aI{Q78U@dCpQc~s;wylD;^%SH#Z7D2v=bRA_it7 X0}KiZC=E*-91qqD3qRT@3qb%oq~mv! literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ms.gif b/sources/lib/plugins/translation/flags/more/ms.gif new file mode 100755 index 0000000000000000000000000000000000000000..5e5a67aa882715433cef156d6586341b5f50c8a4 GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5hX)9;rcXyqRRA+R#002$RY&qox!(I;tiatq!836tfEpCMGHrtpi#hprWH0 R%*0Gi1Ps#B9@W)B06X1&k5K>s literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mt.gif b/sources/lib/plugins/translation/flags/more/mt.gif new file mode 100755 index 0000000000000000000000000000000000000000..45c709f2bc68af31bf62940c2765474f1798639a GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h{9|M0=H}JY)8gXd+}zyq6BG0D^7T48^Z)?t008nX zF844n^(7_xQ&aH`4fjn=^*%o4008+yLjL^y_A4v&A0PNPHuW|(^BEc9008;`0Qo#U z^D;8u008*-`1kks_4W1d@9*vH?fF+%y|}p4$;rvc$olW^`dnQ3OH1=LHSgWs@$c{U z>gxP*a`^4->+9?M^78um`S?ag`~3U+@bLHR?EUri-2edj`T6_%`}+F&@$vEg{{H;@ z{Qdp?A^8LV00000EC2ui01yBR000J#Kpu-nB(5|Xgc6ZRfMkMSulKvT007je@kkg1 zq!RTPYe+Vh1tsO2n8vwT33!M%Q3az80A1@CO2Pzy23OFzU0RsaB P1SJs>85tco)Ik6{yXCVQ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mu.gif b/sources/lib/plugins/translation/flags/more/mu.gif new file mode 100755 index 0000000000000000000000000000000000000000..081ab4533607939fa2bb70838fc34e35024272aa GIT binary patch literal 358 zcmV-s0h#_sNk%w1VGsZd0M!5hXLpgiSZP$WRO4r7SZaqkShP8&IRH}tsWeF@M5grg z9I{ASQfj;R_bo=PMwrei`}|AYQ&U4-vj8yw`};!q`8v1&07+!I$^ZcJ@)M-iJ^lS{ z02xc0(JTNK0F%ocb%UJr^fY*j%c=kX=5TR}#tlqfeL7RE=z4lqal!oj0001oFQ6~@ z_%-$QB#@o3T5!GL;Q+~dh!2YZVYvWbx?nF&tVsX>hX4Qo07T(lUZ~kbx!`7w$P=H_ zG{XP@A^8LV00000EC2ui01yBR000JqK+JDAv>1=0ttvyIpt@ zV8r6K62V{$#zi7IootDOBv($Q)aydQ2AAhJFCc;dgan2JCMEzLDjN_G6ciOL4Gk^| z3K=0WjgXR*mY5luF*H0o8X7(w4-X$7JtZX%GY2&_0=W*m2E8o59tXn16UD|J$R0re EJA^uk@&Et; literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mv.gif b/sources/lib/plugins/translation/flags/more/mv.gif new file mode 100755 index 0000000000000000000000000000000000000000..46b63875b1fb72f602ec068d935042455e4ed795 GIT binary patch literal 372 zcmV-)0gL`eNk%w1VGsZd0M!5huG&JNjG2bX7 zUf*8qWL@xAR&wZd>Hq*(-dlR?e&j4S;mhrjc|>04A$;8)`S z0OtSzA^8LV00000EC2ui01yBR000J&KoICh^cj7XWaYvHNuH9y;BY_?2%g5`;v{rB z7+xY_k&Q@zMWCA#i9Uv10T*cjAc5Ziqk1!D0yZ}hCL0QQ10E z4K5!A3<5L;Aw4e-84i~V69ok&Ius@_FEym52oPo@8ZjFiD-RDoF%A`09$5$1RfRXqB literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mw.gif b/sources/lib/plugins/translation/flags/more/mw.gif new file mode 100755 index 0000000000000000000000000000000000000000..ad045a09c124c010eeb1ce5adf28a3b5f28fba4c GIT binary patch literal 364 zcmZ?wbhEHb6ky*$`1tskt};Cv73Hj{sjsj9l!1YTh2fi-*-vZhJO+lp3=FYLT>tp{JFRo-FgKeO z8=H10ZDC~Ol9G~$h4%Iv?WGsUM7y{oF853{H?QBG)m2&PGtDq@UsAD?lfhC0<;BVj z#tcB9_>%=hG3bB@ke?XXIuFb*@UWWOb|OASveA--DS+GID~IwG@e>Cgz7aB;c;eS# z$*AZytAk!GPFv(pDNbC$H~Z|;EgM3##FdN7*m-%?YU)H;8jH)@I%?}#SX7mz%uO{7 zB_u34I2ac(TB@+>@f!)t3kcX68#8aR;bOHC5s{SS=hqfqZDS*_m6cWMxa>(;yE9x| Ic8(0z0Cd)M=l}o! literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mx.gif b/sources/lib/plugins/translation/flags/more/mx.gif new file mode 100755 index 0000000000000000000000000000000000000000..ddc75d04d8f2b05b315d7960abebe0604fd9e1fa GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h=W1?MqI7z=lG`;q09yu2oow7kOSk|4gMO=WUGP6008&*_j9z3-aSIuFE!ygI_=U{QTe5#NOoIjeTn0 zPgCSzWb*Frqq3jR&(FZHllS@f`1JJRN>BCo_B@ne!esC^{avh*CKMIRzCIsgCw literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/my.gif b/sources/lib/plugins/translation/flags/more/my.gif new file mode 100755 index 0000000000000000000000000000000000000000..fc7d5236148edbed734df8a666731eabfe88968e GIT binary patch literal 375 zcmV--0f_!bNk%w1VGsZd0M!5h^ycRK@$vKMn%&Wc>gwrCP4ndB-bGE;007*krQl6hwg3PR2bl8W;?|v= z+c`t-!oudp#sC1t-m0qLEG(0d(AyjwOiSF{&w|6PC5LxQv8}`L$Hm>dyYA)gZEfLq zb;9-U_3P8q_ut>$)TQIvp5Md6@#pS4JK6i^<@fFF57%;0^5q7T=u^K8V V9UTu35D+*ZAQl!qJsTTA06XF)t_T1C literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/mz.gif b/sources/lib/plugins/translation/flags/more/mz.gif new file mode 100755 index 0000000000000000000000000000000000000000..7d635082a690908e3fb17ac14c490b6e39eab441 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hzn{ItTgr0 zDoM0SRJv4k$#wbKH`<7D=i|-KQCR?l0Qb{IX~JncI6L;oUi8m7`$Jo91@Pl4&nF6HJ%NMG!|np7M&mJFnd`S z;Dk7V)%HGxlDY(F!(afG;L$pKA~KIBQ>mCt9zFsFHx?imJbfl7Cn_oxf;$!uh#4y@ zBqTa1DJwod8WO{DxC$Yl79744z!$n; MATw7ID zxc~r<05kw8qA8o7*lKFS`8zusoEwLP!}w-x>*4D>t32W0@A!#{^3v7p>GAk@cW`jU z004T%z`N>543qa92rdRbTTX? z0zpAR?ol+JQ4KNphQ}Za=9GS^I)opnFrH;D5NQ`CF)Iu|8ww8=E(w7cu10t>=AFvDtISC1?JS!^|BqSmt R4Zlq`It0=T)Ya5M06TOHp8)^> literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/nc.gif b/sources/lib/plugins/translation/flags/more/nc.gif new file mode 100755 index 0000000000000000000000000000000000000000..b1e91b9a80f4e4d69a3225e1dce5faaf099e0499 GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h`1UqumfigBbxln;GlW^1nnM5xtQvMkiKydqb4~mE zOZ6p91xLs897bA=+xIhAq;jj9Wutth<3o&Q{rp)beNdsHPy72s04BQtEdXStf&etz302BcAJz(Vk0GY1JkF)9aD^ih>H220taUFf^?pvR{s9m6a^}#yc z;&5DEKu~{b{JDF^sD}N%gIJMx)7Mb*^IoXOQ@7N4B>**Zp5W5ZnnsanRD^C$gw_B{ z%K!iXA^8LV00000EC2ui01yBR000JwK%daZU~G<dD>FPV6FU$1Tl#-7C literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ne.gif b/sources/lib/plugins/translation/flags/more/ne.gif new file mode 100755 index 0000000000000000000000000000000000000000..ff4eaf074e9ffd097b3820ad9c56fdda7e336fd1 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hRJT99`H4pOc{Bh|001ul0BivKq-omi z-5Z!3)z#HJsyzPw{?X;pCZ8tq^78(xbS|PU_V)Jd1_1LS0R5U>_T}39IRHtqN&A&l z`OdXry<+|C;`!;_)#%mw`uh2@hWqQ`L#{(Jr8EBT<^QjG{fh{R2`<`I?)V<&E-~N_a_1VeylTP*H)-|X#p~s>8{QUIv z^!4@iA^8LV00000EC2ui01yBR000Jyz<_WV$QUh1OT`j6IVI49ltyc9a+Sc~a=C3# zC<0-%DijD6oXlkMct-Hg2ZPaJUO$Jv*Q<#J9268kK0gc*dp#*GWg>$<5r&9-DIpvK zF*Ae_5k3qs0yd&H3Z*O{AP)~9JO~{m4Gkp|5D*IsD!CH}t{nis8XB+-JF~k8$Os0@ M1_#Xt(9l5uJ4gkx9{>OV literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/nf.gif b/sources/lib/plugins/translation/flags/more/nf.gif new file mode 100755 index 0000000000000000000000000000000000000000..c83424c2c3c02352efee0e63f4011be0129e2fc5 GIT binary patch literal 375 zcmV--0f_!bNk%w1VGsZd0M!5he5-s+lT5?Q!}a#{VxD6FD*%M8gf@OQw9T}|+Qs_% z`tkAcHlUu^q!s_no*yY$Qd@Ws`T^ev2YNBd%taZ)b&HerT01^PY(z-K&Gc9#3 z6Kxa8-N{OgN<@uBSejT3X$?GtJVJ&-Q zlAGcJh$&rKcY$4i6R$4Gs_pAt4c_1a2L504oCv VJZi&CO)EV$Is!d94Ngu$06RnPl%)Uw literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ng.gif b/sources/lib/plugins/translation/flags/more/ng.gif new file mode 100755 index 0000000000000000000000000000000000000000..bdde7cb3bf708d1ee0bbea86c0b0d407d708b691 GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5hddYe=r#ABU@?5=K?(Xhw#BBh20CL82GN&^2`t<-e z004ymFQhN^_4V)c@9gsI09gP~wovNu>HuT_Pqj~3yIBpE4FF0204xAXvq}<|5&&!f z{r&wVp(RDJMO3y_RJl|+syRQcKP;pyAD$l>n;8_E6ab3=`}_Mzv`N<1*4f$FT)A9C zuSCbw$K2-J=kDiNxmX~dAa}@jV83Blyjbh&>*(+3y~n*~z-IXP`276*`T6{#XcoB}a*Jd(-OcsFXEWzRIb^=!HL%Ey) zv_XZsL-`yb#3*xtia&y~kLOT#TJ2d4L=l*IIu9cqG9n5K2Otp{0&_Y)4;>^WAqoZs z5h)%5fImGFlO_R{1)3rbk39`HB_0>NbZe0G=U#X^llC=&nx18Q8b z*~KC;8kJau1Zed*od$yt1k#~x9JS8t$N%+uDLOef3=BLzJO+J#I3g%8B!)g7iF}M4 zA}T5*haMh21`-c&avcH!cQqOsHZcbgWF;*H5)~B)2s1MU83b5b3m9YyB`#>ZOHCgj M%mL0B(9l5uJD$t2%m4rY literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/np.gif b/sources/lib/plugins/translation/flags/more/np.gif new file mode 100755 index 0000000000000000000000000000000000000000..1096893a70f475c9407efff0afe534deec81af54 GIT binary patch literal 302 zcmV+}0nz?PNk%w1VF>^W0M$PL2MRYH7*)Xl0KxzO+yDR~9Bd&n)-ENh5gT<88gd8> zINksN8Wle0ZEZ6t#ugrb`|Il{H_R+VwCn%?>V17GBAM6#0QS?<`sU^xC!PigHt+xd zCm)0Ch=}A}T_iHP>VksM008;i+zJmq3lK*N5Jdd&@D>s_`QYFZ9C)t)039us#{dBO z!001*8$=^#$@~*BhC%Fp|N&D*RKe$V2vVE zgga)E<;rVZf~hZEjT=pYS$?HpgsSP$e0P?%02^IScAi~k7044wcNL72H z0022XXp~BFoJMb%ex18}nYmYeqi&C}YKyLAhpKdxwBY9LVuYq;h^v#U#7=ji-oaQ@ zdZdr2zb99Pc9gTbfdKK{n%}h@`}_Og!(2;rp6JhZNN}2do3^;e)?K91Plxa2sJDOF&HKr zE*oYG26Qh94+}pUBPui}0%>%h4*&+EBoQY%3kj96S*)B^MPQa-6ojOH2jJ KKh4g~K>$0!fQ&2v literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/nu.gif b/sources/lib/plugins/translation/flags/more/nu.gif new file mode 100755 index 0000000000000000000000000000000000000000..618210a755d0faa72b11a29fb07ab7c0c66d155d GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h+S2WMhw1sIrumhX?dC~rblC3cP2|Wt?9@x}*;M`1 z)ryDQ^6gRe@>%BGJ^1xp-@!HY@K#%S?&{$}^-DrUv-L;mT4>Cr~&;6Cf*M)U7i=ifm6#>L0A-h+C{{`!3V%V7S%zWsM^{ephu zSXt%a_3Y$C{qs^*R?64m{PyBoZe+BAlET4@;6XMqvHP^M=Hf~8>sa&d zQ~cj?A^8LV00000EC2ui01yBR000J#z`|+~z!VA;U1FBWBrXVvOyNQSO1Hr1@n}RC z2#ew)s0@ArOK-&37#JYRc#vY5Tbs6l(D6uB05B#yHU&Hedm;oLF#-!U7y&0OG>8Nu zI2s2T99>>M43?NVFPj_al}cTuV|24eRGOEZ#pJ@uA~}%ps;HHCopL&7HAET>aRJP@1%w*VbZ zFoFSP7(X&DldJGJkX{u6q0)13Hkd(Sz)3JBEFB#ZI~E%=5qkkH2{kf4EiEMt78pMP z6cjuf2_GpS4;&d97zG8H000=B9-$(nrl=RHoe&(arKc1C3JMnm2?$vWU7;Bp8W94f P!3a*z2MN;C(m?<_p3#U7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/om.gif b/sources/lib/plugins/translation/flags/more/om.gif new file mode 100755 index 0000000000000000000000000000000000000000..2b8c77501d4fcb4eebfadfd58e5fceaff2e50afe GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h+*(=yPyqV+`uOgo=i4(8_OGpsVE0083R;zYDW-rnBYR8;o%_AaR|(JCs|MMXTaJpTIn z{{H^hN=ni@JJvuz)jK;Xt11+s6fdnWB&Z}Gr5_oi8PPU2(?37XD=Ppk0NPJa{P*`X zuQW@zOVl+r@9*%@FfcihdMqNJv%4i~Eo0CzVo6B8OTEf5zMDiOxU0m%x> KKg}vCK>$0WIGL^h literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pa.gif b/sources/lib/plugins/translation/flags/more/pa.gif new file mode 100755 index 0000000000000000000000000000000000000000..d518b2f9780dcab0072328d4007ce28bd7f3f064 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h^IBT&h=}R{0Ar=~hr0RfM@IlS=<;%M{QUg!czAZM z_3I=gfVTM3($e)~WA1BfZL0Qrv-s`p?a$86_V)JiOiW3Y@$B^e^3>G&`uYG^^3?zU z07&itDB=Jb-d>{h-v9tqob>K7G3_fW@jN{5H#S+H^-r1e^YioXK|$}w$MMU{*Vor) zsQ8`8`Wt`s@9*&B@cr{qQt*C$08jDgGBJ3u_qf;l_4W1r{r&#_{>#hD^78WZ^z`xZ z@&Et-A^8LV00000EC2ui01yBR000JzK%Y29|%qH<0z*6k@`pQ(=)3n?2fE?^81HVQKd2L}%iGaDKVEdw7W zAtw|RI6WvlJq?qVm=+eCJplncC=)ahmzk!WD+M(wJUbkT5D){Fs2CVLxf}+^9UUGX NEDa446FbsD06SJcu!#Tw literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pe.gif b/sources/lib/plugins/translation/flags/more/pe.gif new file mode 100755 index 0000000000000000000000000000000000000000..3bc7639057b36907b31b465d608bbabe017e9409 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h^*ufEE-v|0Rq+iC{{H^*5D@!CMe+au{#jY>0094c zd;WKK_5c9-U0wAhCFTGC^BEcX008O$0O9}u`bkOiGBV!)0QB_q{7+B)R8;pdG4?Af z@)Q*MKR@&zAO3lH{N&{RTwMKNVfRi>_`}_O+{QUOz_WJtz`T6;rJ6A>nr9g8|N7Z4l;6&9Wb9V>vN7Z;}k0Tv7*TLOTX7cLb60X0ia2{Ohc$P*Sd H%s~J<+RLIo literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pf.gif b/sources/lib/plugins/translation/flags/more/pf.gif new file mode 100755 index 0000000000000000000000000000000000000000..849297a57045d279a8edf2657314cfc5e9496ac5 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h>*-{-007)PJmXVS~=I5Zl$?gej>%Xy+eIWCjc!MB6xayJ1RFUH8(khJb4FhJ0u`7 z4h}XWKRg{jdX*#+5+xH8C7m4|JSh(@WMvQ#At43^Gcy(x4^~()3>6gu0vj6^yGct+ M3C+zE&=f%cJBfF#l>h($ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pg.gif b/sources/lib/plugins/translation/flags/more/pg.gif new file mode 100755 index 0000000000000000000000000000000000000000..2d20b078561ed92f92a9034f24d382e33db894df GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h^8x~$QBin!c>Z;D^(rXy7Z#Wu9A#x?Ha0fs004Ph zT=`X1C@3gIL`2jvG5BRRQ4kPjH8u1yGF)9HO zv9Yn<008_?gxH1m2HZvX)Hyes-+Tp<$^*n4~Y zb7k{F8o|NAG%qjt$~^l^NBc)d^tK;HOG}WDkoKx8jeC3eyf@NOQT28u^@Jt;00930 z00000A^8LV00000EC2ui01yBR000JsKuE&p>lu%LWHRx?u?EnA#nKX~7K;i~FbQB6 z9@(apdl0lg?nI&U%r-HT=|;$GCm_ltka;{vDLW(>TQ3?H95oRR5(GRnE`(`%4FU}a z2nGZNCj}Br2Nw+u6bLX33=ks)o*h324ICk+s2?9I1^^PS2NO02hohLLi>^P%$jQkl GK>#}|p@q}{ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ph.gif b/sources/lib/plugins/translation/flags/more/ph.gif new file mode 100755 index 0000000000000000000000000000000000000000..12b380acd38aba726f63d337660206bafba34339 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h?EnD%{dn;U3-t8p0002=^z{G$ZTCh-Wg>ZUa>f1q zSo9nmG&HJ0L9qE$RQ>(_X=%a$080J+A(&zsEx%BMH{QSvA zMzSCvpZcn;`DJGM(aU*x$@=p0`}~dn|2OaN8v6Qct*w`)jh10xzMr4kva;e>SGjk0 z#@zq_A^8LV00000EC2ui01yBR000JtK%8etG#HPOWNo#R`4S0;R5$8{D3QVA!5f9H ztwx8zn6x4VOGc7PP{QM~8J!6PI0c`WJejyUSt<$&EFw2K7Z(VN2p0qe8UZvMGZiEy zCMOFE8yF~Q8WJ%umzkRzohVu&F9)TXoErilC^jn<4!H-rA0HSPARs>#0L8||D9I>4 H%s~JUbKv57`IX+(7_4In0sJ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pl.gif b/sources/lib/plugins/translation/flags/more/pl.gif new file mode 100755 index 0000000000000000000000000000000000000000..bf10646366e6e2de00d04ca75e60c5cbc662e5d6 GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h{qFAkZf^BEJN8OS^Z)?o*4FYaF8Ekk`~U#>U|{hL z4gLK6@(>XEMMd{DHTN$s_9`mw008wQB<27B;s5~jA0PQTI_dxb`$|dkGc)rU8Q%Z^ z_4W1oKR^BP@$wWD`dwZ3Pfz$$RQyj*_vz{TWo7T-;q^m9{d9En=H~tH@&1mE>Dk%q z-QD@?>-+8P`)FwVYHID@-|^$)`}_O&`1sub0Qvd(_V)Jr`uhC*{P*|w{r&y_@$vrt z{{R2~A^8LV00000EC2ui01yBR000Jsz@D(@Q2_ui7b%sRnPk1+&qw9)bUIq@R@=3r zRG&4w?c#Qg~;C6SYrmzfL-1{(x~hKLO(0s$0JO|I|& literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pm.gif b/sources/lib/plugins/translation/flags/more/pm.gif new file mode 100755 index 0000000000000000000000000000000000000000..99bf6fdb60bb4e92ef55622efaddf8f322b76e48 GIT binary patch literal 374 zcmV-+0g3)cNk%w1VGsZd0M!5h?t^XN;o`WXG33)!zpqdL042z~a)Y9Q@o8aKS-8iy zR!d8tYGZTO$7JFF03%=p(9_j;c(7Mkr+;*4Kti<4xJ3W}MK(9A003k|M4)nLSdxl; zXl0UNTWQn z(|4Hw08db)Oii@bWpU9>T+&u#e}KN)p=apm=EA8Rl9AwEI2nzYq!I&Itw5<1trek03<;E_85kuJ zje$hLSrAGv%L6nzWCw$di0olVERfYFghFxTA_O`l3U`I>`Zo5O=hzI051K~ z(R_<>S8lfe08IC$s7zz1X_}18YJZxl>x+b1RQb4~o>;?C9eRBNk8W`r_Lc|lsEEJ&qabh%J)=l-If*U#vAcDdW0t59c{qL|M? zT9{XUUdpxCcdTA|sdZm*-y1o{004QLj>=kgbga1}^|Q9!qO@64x&Q9&duhKhOrw8Y zt2YSqof5S0td1JtF5IyBnu)pA`1x=TU`vH2oDw`$OXSl NPt6Sp(9sD&06UU^mbL%@ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/pr.gif b/sources/lib/plugins/translation/flags/more/pr.gif new file mode 100755 index 0000000000000000000000000000000000000000..6d5d5896709989000cb51a3d13f77593ba68938d GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h+}!(XWcK5CcKP}F&Nw-JdHlEl0Hy!|%vx>p^74iN z0QvRx*i%&8Y;0Ux{?kK4@$K#Q_V$_p06{_eFCVq(Yu0Mu1g#KQf}GBQg``_)WL z_44un0Q<-&DE#^O`uqI!^z_+XUZh^7#2p=wj{eU)Jl9!S007rWM*H^l^=@hX`1ki- zVE%t==D}z#U02f4{@KaN_4oMMzrScv;No#|s%WaWd$?3l z`~U#|A^8LV00000EC2ui01yBR000J#K-9rPG#HPDgYxhz^kg!@Zr6ZSDxwQR(rme2 zpD=4dj;J`4=E~6mfIx!*i)D^bIwf1lq2VDI3>yy*CMOad7$5*XDHAgU86F-aBqjikL05|~sR#yLddH^c` z{ZCN+Z*TJQ^7)RD(9qEN`T6wq^*EA)g`sSy@#4U`KTifeJ-R)Blm+~v5?p?h4JgnuO)sBnL$6UMmr`nlDu=d2_VNb0k217Wg2cg`?cj|ZmKYK8v+zND;a@583Z(jCJYUV z6BB@fFESz~BmoT-5(^_W3KB;M4z`ua|7-SPAJ^YioT?DFsO`}f(|_b)H>_4?=C-GiCy>VSFs z`}^nV@a^yU_SDh&($MzI$oTW~>UneN>hN%Z%JcO4_xJq#OicCl_5A$&{Qv;;^z;A# zr~d!|A^8LV00000EC2ui01yBR000Jvz@PBPD;5_>Bnb4&I5UUC<|OCLdiK6o5=c`StaMQcHnNM|M6p zWG5hOF)4pdM*IBxg;GuM?(A0$1?lJKmTG14@bHdbTJ`hu_4V_2K|7&%bewZ-a5ph} zML&HFMX?<>TYwrht5fRZny~H2eGe{r&y=`uh3#`S{{H{} z{{R30A^8LV00000EC2ui01yBR000JwK+JB45oZ=7$k?u1o-Ww zQyM@4(hv@tLCrhu@o#}@Z;vhj literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/re.gif b/sources/lib/plugins/translation/flags/more/re.gif new file mode 100755 index 0000000000000000000000000000000000000000..43d0b80172e97a08147c64f811ea5c7775ad46fb GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hs;a7*ui5eO@$F<*#M13od&TML>hy?y-rnB$m5kKX z)Yt$3w8iJV%jsr^%<5`g?(XiPwcY0C=H%q$?sjUj!{w&A-t&HP_xJazz2WW&0CJMj zs?RiQbXoVKJ@hTySuv= zN2U1q__xUC>|Rjp>+3{pyW-;FpP!#^kI|;N;Ipu>uD|3gSFo+9_7 z>~odVA^8LV00000EC2ui01yBR000Jyz@PB9K_CFBujQ zjbnlXC>Hu4#=r=dt008Ib=jvcp(q3Wp^>_62^zga4?W3f@001?Bw(;@t z09Bas^77^7<@NRTA^8LV00000EC2ui01yBR000GRU?hr0X)Y)lAuKz+Qz8REwn9)a z3{2qvH3I_2s8o7CU+tiIJTMH#r9drkID!MydHHk*)hkxpd<-a*fmJ;IxIYX6fnl+9 oHXFsqV|f#H1b27}3LPGLZyy^Sj2(oG9t{qY5)vMln3*8}JCP7%O#lD@ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/rw.gif b/sources/lib/plugins/translation/flags/more/rw.gif new file mode 100755 index 0000000000000000000000000000000000000000..0d095f7aed80a5c8c96622fee0f055407fa9fafe GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5hNUt~h{BcyYQ~-GVlga*kz5X|)H~ISjYqR_G^c?p3 zR{$~q?eQqe$a*}eDgaLa_xCLTY5+#9MgxKU`}|AQ##Y+i0Aj88U90(0r1kszLizbR zjm7=|X7$w2gmt?8^70e%^*r?SGyq5GE}|T8w*7{|{3V?cE}t&=_%#3>003CJ#W_foV%^7cdX_ehGj%=Gw9;mAnu^D_W7 z=LduTA^8LV00000EC2ui01yBR000Jtz@P9pnGBADj&jBP5uOB&)MP5yJRaD{S?GRB zB?Jr8;PDz;f)^~lU}}|$ZZsi$z6db}lgY?r7d{683JNV8000iJBqS#%E)EM3G&BOc61@h$D8VWb55>g`$jB&CB&R#+8hXWlG(Eab^=%ELz-avT5v zyNiqG`1t&CbK*mbL#DGuKtJ0_O5Mem009BWB6cEdY~WH-+ftKLkAI^^Mb;E;6k1!{ zM@QcdX$~}jG$nT>dwb=-sE7aw0OQhQkyik>oq}+jK-IWxrkAL$qP5}FUE|~U005uT z()GW-L*&F?zQt&@weYW*0H3Wt=*&N!p6W|W*j0}*l49~5{KF%~rz9CJDkgb4`&KMEBV z5ji0M2se=l8XlDu5k4n9ke?bIq6#US2qp#w6q2hQ20sJ?BQO^iI1Ua00UjQ+KN2zo MB0tX0(9S^sJJi99umAu6 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sc.gif b/sources/lib/plugins/translation/flags/more/sc.gif new file mode 100755 index 0000000000000000000000000000000000000000..31b47677e0d51f2958f3c833b36345c5267a064d GIT binary patch literal 357 zcmV-r0h<0tNk%w1VGsZd0M!5h2apH&la}uR0MF>s_*7N=`bz*a003M7rPrqb0EaoI zIrb?j`8z!JwYB?;NBfyY^z`)o{Zjn*Y1r9l^YQX}ddm4=V2_TNgi;OnPEP#%0OaK4 zbacsIU%dVOaWA7U`anSVHa1>f!S^sQ1pzMr0D1hDWy#3^`hA7#=imFXXM@Otsi~>p z;A$(CCHOizmzk*S_48)CX7}dp=g-ge!ov2}*Y-q2?(pvRb#?ejNwe9raB#%d+kE-$ z079-pA^8LV00000EC2ui01yBR000Jpz=TkE(inY$q%u)yvOG|U$zmZ8G6JTk(~3k2 z4iFhbdcSh@gVtvZd#003=tu-+(Vym_VDgS_JY{{BRK z#{dC{7+JJus@d}L@_Du4_4V}tNweYM;Z2p&#oX?Y!Q=J%`%;3+HgmrK6qrSn%`J4o zTAtQNjn7k_)YH_|01A&Cbio{b#432i057Wh`}<*!&`WE;M}o<3uiYPj#+}LNC4<8N zRi#s**d+4_rI1Ud8VwT%$LkG9 zm4tY8nRFDDE~G&S9B8pp0*6unx)cKn6nJnh2qh&xJ6#P1AvOyE1uh;Z9fVyYFDfDf zizyQd1(H1w5FQL6m=Q226ofb%8vqavGYlIG84o^$6$T?A3_1?K8U!AL79M3a8Uq*u Y0KWo4EDInq86Y4F3j_o$A0I&gJ6ofk%>V!Z literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sd.gif b/sources/lib/plugins/translation/flags/more/sd.gif new file mode 100755 index 0000000000000000000000000000000000000000..53ae214fa16b78b4c491add45bb56f70f4339a6a GIT binary patch literal 355 zcmV-p0i6CvNk%w1VGsZd0M!5h1#HJ(<>gwuk#BF=edi-N!6ciNu?(O$XO#N$X`a(kedwNQ>O6&jt z{qFAb^Yh~3;yXJ#`}_O$=H}qw;50NePq$C|R#shMU3kfO_)}B;QBl3Uy^z0(K}10S zJpkv&$8M}|T*6#$l*FC5{(%MR9h?rYSWN=oisUF9Ss@MUJ~LPFcm&)v_@;nUOTF){LZc=^lA?&Rb7yuAGG?)~!e@L^%` z=jZDQ3G?ac_3P{FK|$z6Md(;q?O0g*`}_F#`1SSm_V)JY008;<`SbJh`uh6!_xJSl z^z!oZA^8LV00000EC2ui01yBR000Jwz(~#|gcu=>WTV2&ohS?dgCG!qSRUGhBgs)x ziPXgez=SfElBUyL6)uU>2@^xBKQak~p(0!+baoma9}XK400{|KSz8@43Jx$1Vk+U%X literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sh.gif b/sources/lib/plugins/translation/flags/more/sh.gif new file mode 100755 index 0000000000000000000000000000000000000000..dcc7f3bcffadfaf36ba17812e55f66c0fd10b466 GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h_N1uI(B(o`u8Et=MqRQrOsen)40MCV002uoQmg%E zX3wuVOJTLTqDpFg!TAVRxPV;gJFGlwVI~X=wWJAX}C5{ufeNT&#^$$v_ar?f;Ug7psm@myx(P! zWdHy(A^8LV00000EC2ui01yBR000J%K-8gNz!YRF(PnvRUIc(ZBoY|$9F7SolL;XV z5RXD3rdbFAK|*3dU;q#@egr`|)&KyA^78WT?(X_qTl{2XO;pbGvA6pA`b1CB_xJbtQd3)F)A~I< z_V)JmJ3I6M0H-Hi^E5P~9aZrS4Xrh3_V@fiOw9lQw=O)%;Q#>0Z|2P=x>$^&uhg?)LaJG~nR$FF?&d0028l&mS(t0};cjWSy2-qo!Y)jgsTt008y% z_5c6>A^8LV00000EC2ui01yBR000JuK%YoL4$SBGv IJgwv0xa;FBE9*^5?Ot5H007+=6wLqt>r_(O008MkL-O+Sq$r8H8S8KAKx4qwEzI+G%}a&g)Y3x25QbD!hlDJJ;%`1$$yu>b)6{{G_A^8LV00000EC2ui01yBR000J+K%cOO_*IUTgL1<384SHfuU06)29OoSwQzVEFmNnFct&>I;*X(EH(-}2Ut4`IvFn*G%YA0 W3NpY46Bhss8xhtKBqTiBK>$0|z?fYC literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sk.gif b/sources/lib/plugins/translation/flags/more/sk.gif new file mode 100755 index 0000000000000000000000000000000000000000..1b3f22baf9e1af04495b4044dc6b7082552f9f04 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h`uh6xD=YPOdZqvX{D+0t!`l4v^Zot(_3Z9SW7g^b z0Q5IE_(n!VT+#pmrFx3pcYD)3Sk(MvVrF*P?c?P085#OpTj6_*S##Zknd|h6koi(m zRc+XWli>j%%lG&9@&EwPLR!iyM)3^|P-oZu-rnH=0Ew95{q5}bo}$h+P+f4<@N0AS zkd^rF@P>86_y7RMBR}x1v*+F4{msnghLqs5!}93rthes`;^B~*;cITr_*h!q008~< z_5c6>A^8LV00000EC2ui01yBR000JtK%Y=(D7st-#O+3*_GVcXs8?y!r_n-4Gk-Fc4=#Te}NH$bp|bk^45 zii+iD;b=58%TiL+K0eR@0GIRg^8ma6dU@StW!5@6&j0|30G$A!pz2=UUR>K;EiKXe z`}++Iz&EA^8LV00000EC2ui01yBR000Jvz@Jcf8yPJ~3t{;~I1vDVMq@A>4l4($+36fq z*;*vB3j}JYfb4S7K_IqV^zksnEP{c)*J~*h3kwW9K0F(F1AKmff`lT5d5V95gFYf6 zJ~S*T92^uBFC-ZmI5QeZm$h@{>+^E9`isQ<0BQGNtM+BD z`T6tyd%OBwsPt;F_y8o|RipCt_4NQOzN}z?zWa{2fmx~eYOK=n z`TtdoNKc~mezW1D%+i#`_hp^acDelkQ}0NV)r7$OjkmFi!1VU^_V@Sq{r&y%_y7L> z{{R2~A^8LV00000EC2ui01yBR000Jzz*cWaDj7}4g0j=;{eHeEkN2o<7K>dID&=uD z*Q{f8YI^(6iMbM-wv`};>!xl~57L0G(5cgT0(005WKJoorCRkl0k*Z}1EMqs~T@AfLO-Z1$1G@jH!!{k8x@@4$=Y5V$M{rzqD_cn3Gae~M%jLtP!xmeu* z004miA^8LV00000EC2ui01yBR000Jwz@Jd4Dyjg0fO0VSIi4hs2WP9@5?Dmj@sf-L z0u2cBU>y`%r#BQHKXPY?mO&bYE*jU&v}!3J4IcvxI(GyhG$(Ed?D5n;Qou76u|287HNu3mdkp7F|7T6}=P`W@kPY5ycT4$SElk KB_%%3K>$0(ftB|F literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/so.gif b/sources/lib/plugins/translation/flags/more/so.gif new file mode 100755 index 0000000000000000000000000000000000000000..f1961694ab98384142d534dd682287dda3b37892 GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5hl*#@8Nai7+^!WgD_KCv# z;_diGo%D9P{RM&j*y;L4obv!~_CcBQdA$Bvrt<)H`AVPkb+`F!wEI@1@_D)WeZ2Zl zqV*7m{vnb7aJ2UTUhjIi_I$hgX|VTGqViFs_KU>*akTis-TJ=T_p;Uaki_}8+WS?f z`4fr%A^8LV00000EC2ui01yBR000J+z}Ii+YJ3(8lSU+w#9|GA6oA3pHWtQgg@Ofs zfJlVoQ7BTBgh2p#1YBXVqB5EI){qu05S34QARs#zHZ3O!1Roe>DJeM_89ERMCm{!k zH)m-)92^@Rl_LTK3ma$^1``Z27a<`d4kZI778Df+26-nPuMQ3>10oD8TsRLj2?qiK WB`P%o8ci_;1p(Fs*aO-GK>$0Av#T!v literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sr.gif b/sources/lib/plugins/translation/flags/more/sr.gif new file mode 100755 index 0000000000000000000000000000000000000000..0f7499ad954a455a4742c4b53c3c8c2e3f558275 GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5h{bgnVP5}D-`e(st?DFjO`Str%RRD(o^B5TW%|-w+ z0Q^cy0Ac`p%6sVV>GJmT{aIT3Mn(X20A0Oa^)fU4cX#$nOZ6fm`SUsZtWrp_N%*!h z`N%jstUdKBEA>4+GNv>A008Cy0AapkRJc|5`}p-kKHmTUHK;eq*~>w$LQb_%{7+Bv zE->^rIR0*M_(4MUMo9KZL+$zT`hr0CQBe6^UiQK&`q)4Bd@xY9P*}QJaK&(S$aT}@ z)&7c%A^8LV00000EC2ui01yBR000Jtz=LpjkQgP5Wb)8xHhMhXU@)5ONV>pGz~z>{ zg~DU}@P&S_Gyssv7;2Un%q9v|AO_YVfx~eq9v2rMbuW1f5i}SWIe`}lgds0_5ilGZ z8#jUo2rhLMHh48~GA1q*Eglvp1Yltg1hEdYvndi(RwOGL8Y&$fC?FsTNJ#<5#|p~J H3PAunnPZt? literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/st.gif b/sources/lib/plugins/translation/flags/more/st.gif new file mode 100755 index 0000000000000000000000000000000000000000..4f1e6e092b35de465031930db0bd661ab5e1665e GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h>+(1NYXDigRr~u!tf@8tDgf~S0D8)J08#+;^(Ksp zB|57#OS4D$XG}AuF87sH=sZ2EN%iwBqCt&9G(Z63I zC5FqgSU4ElO6-wZMcx3wWCBs~eiaGrF&MB2Fc=Ug2_hGG5)BOlA}2Tm2?{tFhCd$? zIurvi8iWZb87&xx9}N@{adQwI9UL4QJ3lusV`dIBBO^T|Bo00XHCI_-wYClgAxa3# N%RbIN1qD7q06RBYi{tlp#qV34i@{^(4g`4a4_Vxe(w>w%R&?NpnbSvS+W;xo_4W1q{QUIv z^!@$)A^8LV00000EC2ui01yBR000Jvz@2cXP<%eE(}~0673_xJ^z5$PLO3 JD9tEA06WZouv!2B literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sy.gif b/sources/lib/plugins/translation/flags/more/sy.gif new file mode 100755 index 0000000000000000000000000000000000000000..dc8bd50948773d5698d49ad4a214a9847fb09d5b GIT binary patch literal 361 zcmV-v0hazpNk%w1VGsZd0M!5hWMpLfMMeL6dRtpt^Z54G*4F-Zc2ZJP^Z)?t00918 zUPMGh78VvQEiIkZpY;3oG&D3mK0f*Y06IE44Gj(V_xJnz`}+F&^78WW@$u2o(WTp` z>GSJcx?cTJQTkk5jLwen`S9-U?)+n8{cCGWOH1}FEaC9s&(F{IF){czH~3Ri`Bzu@ zOicY$RQ_36At538JU#tzar^xH`1tts_4WMx{Q3F${Qv;=_V)Ah^Yrxe{r&y^{{H^} z00000A^8LV00000EC2ui01yBR000JtK%dZuE8-*)gc6ZR_ykacK}I5t6d%^AIv6{aadLEag`pTaC_exT5fcy%4KOea3=|X%Kdu7<2L~k!u(Gqfy~)bU Hy+Hsw(&wg* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/sz.gif b/sources/lib/plugins/translation/flags/more/sz.gif new file mode 100755 index 0000000000000000000000000000000000000000..f37aaf801198a2afc9700c33f0c71a126358ab67 GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5hP)SKIa=JS-G|P)m+04jKi^iE37kQ1f3|ghfuCK+v zy!pv|^0!#~)RX`(j+wmEt2H#&Qvmh7WXN`P^N|9w&fx$>ou$Ot>ZUoCxzDmpOx&n- z^y}vvWU!60$?dE|gssJ`%HF0bDZg7<^}%lLu}-6#n1TQRIDEP7vQx7|K$AK;o2bX* z;NF9Bke|TT+?ruTgT&>+xd1(Px`0BOMMh>}V!~KdkBf<+owlM;QM^-3UXKTY(pY#G zq_9N7D3ciXq~*0T001yqc9~yusj-_rQfPT=jJ;2Ft~+I=VT8GruG0Vj6f#_( zdw8NeVyW?`rYlf>GFOCig^kv&x08maHejIu0AXf`y3(>idm}~m>CH-UuJFrVP;aPR zfVDtqs@>Gy^A^8LV00000EC2ui01yBR000Jyzy!yDLKy;yl5)Xh8V)Z}?$F4XOqf=oV1d{G z0L4$C=&@XpP$;5;1P-1Wz{5ZgI=t0`Mu12fItUCIA|n?rFewi+E^asl95DnKBP0$d z0s=c78YLALDg-VUBpU-eGCmU_Z7Ng}vMDgWn^XPTyO-%p+miX?J_wA48NJ?dc&%gix@ZxCd zMo8@7TkYa*6+^k?Eic>2A?eLf=srK{&{XT*SMTVa!K(nxmjLERNb%Wh04=j+gw*um zi08WiA^8LV00000EC2ui01yBR000J!Kp14mlPQjh-($IiB%X)c>4ZZ009e4oIgo%p z6bgy7E44BK0asE1lL(H*nU>}yygkp`F#~&-k$9M literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tf.gif b/sources/lib/plugins/translation/flags/more/tf.gif new file mode 100755 index 0000000000000000000000000000000000000000..51a43250963e5862d4cbf19d34a4cbb53cfb3b7b GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5h001pZU8DVNZ2$pje2KbYajtcNv-vqX000$MWuyQA zSN#0^Phg}#QkuNN)^2>YiIv1WPMJ1Il|E3Ic7(Y4K|ufjMvR!oMOdHvM@Lv_sQdr` zI!%}SOiW#EtT9BAMOK~SF!)>sd0a|`}_NDe6vbhpg~idEkTe^V4~jO=Tc*&YI(B&33vYf z{{8*^A^8LV00000EC2ui01yBR000Jxz@E_e`)!T`h0?<8T`s<;U^+XESST65Ns0bS zoeU#@c||l^$c*?4SID=BWCs{P9>2vRQ#oL691>-#1P%=opahkdnGGB!Ar3kQ2nrN4H9V6kE(tj+Aru_B3QSA@ L%m4__&_Mt@20fAt literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tg.gif b/sources/lib/plugins/translation/flags/more/tg.gif new file mode 100755 index 0000000000000000000000000000000000000000..ca6b4e7744dd89a6bc12c61900830fd7054c6554 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5h0Dk~jxmMc47642D^2ro9r#5J^H0#z#ZN_We$SKvh z1^_Vt{aagHt0hmR8T(UH`bkOte0=iOL;iJk+L8d~%`E_80QS)<{@mQ|(KO@FI{Ml@ z``SeQwYL9-g-WnS9hn^fasXnzU@@aE_0A*s)iq(TFFUb2>)d9meE|F2N#~saMXo|n zv`+re&_Ap@`{PF{pez2HoBPE8{N!r=R=!E6)`2{7IR*wd4GlR1J|18X5D+H?BQZQ6AO#C~ zZj2B*CWQ{41_LuRDjXXdb9E#HtT+@3CHXQj=5ENlDQ(G~a7$J7MMc=y z*!ktE^wo6Ybaedu{MuGlEqW~$Y!=;ITmTvX_St@!008;<`7(VnK88ND007xiQltO? z4Q37a-i@sQ0K5PI_xJbu`ufw;)Arw&*G*0K(P18O9$lJU`10Lkpk(>!wmO44SeIDz z)_6;fOZCrPBXuLrEG+ligEfFPE_^QZ_4U&{J^TCn_V)Jk^Yi`v{q*$o{{H^I008y% z^#A|>A^8LV00000EC2ui01yBR000Jtz@D)8DQ1oy&t_TaA)bxs;UEx59vV^;A?adC ziG6m&a23ORXuHz5Eca|}BhgiIU*A&0~jkaG!QT*5fL05G(W2+ECd8D1Ff$Y5D>Z(Kgr6= H%RvA;T1}p6 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tk.gif b/sources/lib/plugins/translation/flags/more/tk.gif new file mode 100755 index 0000000000000000000000000000000000000000..3d3a727fde64fe5afc971a13eb412b6adfd2de77 GIT binary patch literal 372 zcmV-)0gL`eNk%w1VGsZd0M!5hN`-D*b=Cj?i+Ymfv9e^Ks+7aKP_MM8m!g|0N64?R zUCYB)=IQr2RLcMWrT_qYR&LfzWz>w7qG^1}WO~}ArDQl%(d*n!it#^at|=Q zZiC(|ShZE6J+iZYf{ukkUC;mkv==zTQfkCSU%jWNdN54M-O^Zli@vzFe|m$Bf05cC zKgQqLd|RYYmX>1A$Y06EdDhKt*wAI;+=h{!fsvezOXSZ9d5~1|~QjkCxAr=?}AQdfnA{-Di2t6bg7A1rRBMkzH z5h^z*7#1fTFFY`n510}=F*ybm9RMBx8z-d{AtWXXHUtV4t{brr4io_p69qIE7djXK S4JQe}OH2X})YH_|K>$0GgO)@9 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tl.gif b/sources/lib/plugins/translation/flags/more/tl.gif new file mode 100755 index 0000000000000000000000000000000000000000..df22d5823900f670fcccfd571052d18619ac8441 GIT binary patch literal 360 zcmZ?wbhEHb6kyP#$Sy@>RA3l7_!0_GMJ0c?LPjd1n28O@c+234TJ_!r|1d5xP{p_&*rmg)+Pw%_F z{*R!bpJ8E3mMs3r%Ue}d<>lq|)5i7z(7Ml|KR4UVotE^o%=&L|@UQzpKYuy=d}{sO z%3#)_`2U;?{~D`4UAO<47Fk&6`p3uTUu)Fn)iu9jVtjmp{>1q7PmBEd)8_B4n!7;T z89+esCkvR?0g)g-F|f5d96If;6W2FcrTOFLj|puWtx6N`*vN7iKMA@Tq#3o);1Gk! zt$2+^+MGp?KS>5w{;})xP+D+G#6U)hgPFUGuU&~<+gh@*xuvYa!kAGsNW&kJvCUQg1b!{qiMqQS3Jb+e7ief^9TsnVMQIBd(jAkHiJ^(TR z(sE@CVl9uho*Qa9Vwrf(YFx==Uu2qj%x!0^001v`OLnM=#amRnCmGavY_-n5b*G3S zZa=@&$l{@y!Pd!uu9CN4UekYdMu%TVh+)lTQ_*Qug|L;uV_;{VecYOo-imP5g?<1z z00000A^8LV00000EC2ui01yBR000JzK%XyF3Tz&o$6@(v{(J@k;l+wEU>?vUfyq1# z5grMLF;p6p3&K?SsvI25s^)5p5DN+Iw>gn=A{h(-03H?#5G@vbEF3Z+H5L>jhlw8- zKMx8b11ORR1&A#l0tlH5Ap Nvp)evPSMdp06X`pgsA`k literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tn.gif b/sources/lib/plugins/translation/flags/more/tn.gif new file mode 100755 index 0000000000000000000000000000000000000000..917d4288c9424fb3a01546189e8765091127b7c9 GIT binary patch literal 375 zcmV--0f_!bNk%w1VGsZd0M!5h^fNQ{JUsPWT=Xq1{dRWt>+9?Q0Q3L=|9X1*Qc~pr z0R6SK_S@U{OH1`5Bl@wi^BNlVw6yxGtNvYG_C!SbJw5tFMDi08`GbS`R8{_Qa{X>@ z`fhIV4GsHYVfp|7{#jZ4YHIvuX8K)S`$|dR008_?Px|TU^sB4=R8;miH~8o0^Ho*( zy}kXx!S`rq{Iat5WMuTAq4(C-{omjDSXlOaeEFQ5_>`0RcX#~n@BLF#`FMEU008{} z0RI30A^8LV00000EC2ui01yBR000J*z@PBvEBZd4gYsZ7{18wAL9+>oJfm8s;Y3U( zAQw%id+=0%0rv@BEC>ls3-=m0C<-3|lzQJz7#IvO4h{i%8apO12`4!e5d{Jc5Qjb+ zCL|9WH!C+b3<3}rDheMVBo-19F#!S*C@dEj03{zH78Ml_GX(`Q0v8<}10@GoS_usl V6ai>y13gPk)C$%mB|X|f06P+8o0b3o literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/to.gif b/sources/lib/plugins/translation/flags/more/to.gif new file mode 100755 index 0000000000000000000000000000000000000000..d7ed4d11641ae1c1c9001dddc7653973045b6c66 GIT binary patch literal 367 zcmZ?wbhEHb6ky>fLOY4)K-jAT5ud1p)Lqh-N z<$Y05_{huq&Bf)rm)AQ6hOc&Z&lnhfCnkQevifdd@YBlbmy62}GqYa|4Br?SJ~1%7 z0?N9%eUX>{VPf)GQu0q$)}OSrU$L=|fZ|@BKW%J38yVeaVED_x@XOx*|NsAg{`~n1 zM1TMOtEu_@`}h0zAK$-!|L@|(pAiv2vCpQaKdo)Pn3?@cNciLJ^B1TvIQZYce|H%e zK7RbD_>+YJ1av?I$WIJxJqP9oNK9U8B-xv`xzV9c`%w3V)w)iLPIk0$6fCf0Sn%{x zDVLg0>W3fS(so96m->bCaJE0W{(5JbjsdHARt1lskS4bcV_I`7r<{UFCpV*Ny4ZwC zOcpAViZist1=FloSdBO001^NHuL}h<^cioeSP;!OZ6ioDk>^tV`KjF^ZP_ZT3TBBo16KQlm2vd zQ&Us+EG+!)?)5!A_ck^}L`3*fQWzN-`Bql);^Oy3Mf+i4`Tzj@SXlgKX5Ih*`dwX2 zOicSqN&HVw{OjxS-rnQE!T%*C_Li3YQ&ax6wf=c|{pIEQ?d|mA;@i8s^@fK100930 z00000A^8LV00000EC2ui01yBR000J-K-lQ_8{twt6zaizG#WDtV}M{-Yys7YMG{FG zKARG4D<~>zYaIqU7$YMsF$OCSTPa-< XCNu;KlNBY$Oi$Jj5HdtWJ3#FMOnWx-8hvD?$HWv97lqg?>qvO8n2**KTU!;U!T=C}U-{`~y>{r&xE00960 z{{R30A^8LV00000EC2ui01yBR000Jtz@D%N0$Glhi}FHC^hQvP20;Y?WUfab;q&Rf zJl;-1o)8F=miIuiK_H&WhBLrK7z&=lQ8K_Q3v?Ja1t@t83_Cjq3xRbZA9o!B0uCt# zfPym-A}|9T5-B+`a)OW|5e1(TV`XP&4Y9E&7gi4sCMGN@0W~-jz&}d~#2FbYFBU(` H%RvA;*H)jd literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tw.gif b/sources/lib/plugins/translation/flags/more/tw.gif new file mode 100755 index 0000000000000000000000000000000000000000..cacfd9b7aacab39f8975b3567d65ab0ac0e62813 GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5hT!hm2HZ}K4OZjVVgrwg97pwU^Jz|N}_C!RuxaX3R z+42(;bClWlEiLvcD)KHa_)=2!B_;a+0Qpu|03onbeb4kDAby|S@eK`4c+2`gK<)ql z^*%o4008@8Ve~pW_b@Q~MMd@i0P+9;>Hq-Z008;<{h68F^dBGd85#U$X8K)S`8qmR zfzkU)N%Jx?-v9u8o!jg|OYt^3?MF~|nc4IrvLjctHMir)KbL%AFn40IVgYk3wN9R)E505}yH88dhhC@CKu z5(7LgAsQ@&lqm}~Ndugopp^>?FEA1+ou3VPsu&m#Fd|zMT>=OQ93M9?4-Y;}PERBx N9UUblFh0^j06S#9jNSkM literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/tz.gif b/sources/lib/plugins/translation/flags/more/tz.gif new file mode 100755 index 0000000000000000000000000000000000000000..82b52ca29807dcb6dfcc632cb22c853b52f41fd5 GIT binary patch literal 366 zcmV-!0g?VkNk%w1VGsZd0M!5hH>mW~=twm*GgMGB0EGY-n(~~{hJ}v++UjFly<5V? zGv((-l#VL^EZzV~%ve}h(#}Hwc>n-7;(Ez?&fNe~wNi4%b5yxgZpTgG-b62?@`{K< z4wmr%MCfkBZd6o4RI$8w$akH|0C{vt=I~w5=1NXZPUY=4K&|$_y#TwnJ(Sm4U%>#R z-b=3FN5SD+laE&K?OZ=UJoWQQ)zW5VWMWgT08zM1*yTZKziEAYJTs!-;OJm(ZLC>U;-H(TEIYv2%*H~(po?UXafo*1`Y%kZg3lCbT|PZ01^=%eGngK zf+q$A1(7}oGmB>oI4>Za8~_azG?xN`0R}s$92yNjH4hIkJS06RC;$K&#J5Zb6gCbW M9TLtB&=NraJ0=2<1^@s6 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ua.gif b/sources/lib/plugins/translation/flags/more/ua.gif new file mode 100755 index 0000000000000000000000000000000000000000..5d6cd83f597ea6681e2afe62af7745ce3f6ca463 GIT binary patch literal 360 zcmV-u0hj(qNk%w1VGsZd0M!5h{QPM7`C0160QB@60C@aYxYzmlJl?hdD5Lg9vioVm z{QLY%`};)m^E6Sn{NlX;a>o7uX!Y{)6MD)207L0ZveWnXMD_JMYr)=3v-k4yE?vI< z^3?!hz1%{t`SI}$`rZKc+5kMR`2d3cOSb$stN8f%H23!}_Vz0E^(0if{aL*JF{$?e zSMNTn&v3-x`1npkuF)W$^Z;G)E~obZk;jVA=Rd9W{ow#%zWV@AnRm$kTDtn~&j47v z{s4vlA^8LV00000EC2ui01yBR000Jsz@P9p8WE0!h;r6yjV90?1fr#}mt*h$* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ug.gif b/sources/lib/plugins/translation/flags/more/ug.gif new file mode 100755 index 0000000000000000000000000000000000000000..58b731ad5c6cad47c4f3fdea21763c6537010a5a GIT binary patch literal 359 zcmV-t0hsTZ9Ldc$_uEAD^(*~SQiX+mt4&QrL`0l3 zGwJ{U^I|pg^BMNoHu(4V#K~8fCvvH7Y_<0hzdd<35^L84=NJ^lmZDq z05Tq%0|OAB8lf5xE;BI!8yhJFtPQRsBLycJ9UT-DI5;7@480~MJ{iIb#Kk?wKFK~o F06WatnQZ_7 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/um.gif b/sources/lib/plugins/translation/flags/more/um.gif new file mode 100755 index 0000000000000000000000000000000000000000..3b4c84839342c61a9e9b079291cb4b021824019f GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5hkhb2ayyfgnOtAm})YR1Z`T5EK0NdKzxytP7LqnAS z0PXGV={h=h008FZ=2U#n*E%}(_V)1b@a|n*^!4@I0RgAGged` z<}EGM003Em)7m2=;wUJ5wB7vt{G+(wrMcqs^YdVp+5Z0ie}8|_(9rL1Z}Oj?(HgwPoCbr1xqqpGZDk@KR$ya{R?(XjL^78EL z>|2A?A^8LV00000EC2ui01yBR000J%z@PBv**zY*3#h{Ebbcp9RCFu2A`wcjCqexX ztyU~xA&n*zL4qMLd_}Q>B{BkVc|Ofz=0OC=W&j~-3>h2=13MxC1tb&z5*T z4=-gnf*2+Y7aSlT5DF;;StSw@lN$~W2L~`0D=KMghB-DLEG!TWGO2e9c^fnb1Sv2~ R6;2%n&;tVs3Juml06QBhscHZK literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/us.gif b/sources/lib/plugins/translation/flags/more/us.gif new file mode 100755 index 0000000000000000000000000000000000000000..8f198f73a777a6af8d3c8e0b9b2ce48168a216dd GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5hV`H}Z`ug_v_3`oX{6FMd)+t~b6RQz~i+ha=mD=V72{QPBRx?@WGIy&a&mbT%E8IW!TtSPICuH}{{8#^`tkAa18?Ei{{8*o z++%0NA^8LV00000EC2ui01yBR000Jzz@PA!N&$|l2Vx0<{BkH=DIlQ+0->w`_Cs+v zo`Ju(0i zIDb4K9W8?qA0G<`A^`#$8+MVC77acxDm7+kX%V0WxGEYA0Wn&rsXHq)79ulC2u)2S N7!(u-2O82r06XTKt3Ch# literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/uy.gif b/sources/lib/plugins/translation/flags/more/uy.gif new file mode 100755 index 0000000000000000000000000000000000000000..12848c74131363a1a78d279e0df008422b1707fe GIT binary patch literal 373 zcmV-*0gC=dNk%w1VGsZd0M!5h@%H;fi__%fSEy~E0ryX58U@tnfv?(_I+q}t_4Qnix#T&7(5uVr_4MOio7(N|?EpEfD0jtmtKZ}4@0!2k z>gwrJmf57n=+oBR&ePWO^Pb4g)56Hk?(TV^#OU(!mFe&FgRg5)ut8It(x{3=C)|Cn^R8 zDg-qzb9Hxk1y?s44;Ky<6@`X~i5M6GED8Wh1F_g*4pwM4d#!!qcQlV_X0LQl(QglQgWX)=o~N zs#9y#)#_SWs;*me^YineLtc1zyPZ5(07n2WkS>`vQk5}H003XTz0sdUUgF~Kjw3G;uVrPhOQB1;a)vsXI@#Fj+1c!~v)2uO4Y|45_4W1q{QUIv z^Z)<=A^8LV00000EC2ui01yBR000JwK$NBv)N2g z55eGigLPuDf_n42)IJ{$$6^VMOeY0P^?M!uJv}ZA3=IGPJU%=XEr5cAhKN2OivkCM zgN28QARs;|ZgnGfc`Pghs3$)p5)=?N86^n`2(>yoC94t<5f~UW6t1wbxg-n63jxXj KKh4fRK>$0~?46DP literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/va.gif b/sources/lib/plugins/translation/flags/more/va.gif new file mode 100755 index 0000000000000000000000000000000000000000..2bd74468d6b328a625c2c3a44f46dee979ec4b97 GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5h`uh6&>2vnuTm0>e`|5i3<6-H{0{iTR`si-*^77r?-Sy;d*4Eb3)6(nbtn}eki6e!)2#sX_4N1m_xa~( z`}*d=)eem$>`1bABvjFSO z2hY#XA^8LV00000EC2ui01yBR000J#K$XGgGkA`!O2uM9IDMt)U~m|q09e3Bt~bosFgUFR4!2l23cLIxVa!9Aw3uv PA|fvk5D^hS)Ik6{@a)B^ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/vc.gif b/sources/lib/plugins/translation/flags/more/vc.gif new file mode 100755 index 0000000000000000000000000000000000000000..48213816af17a104ca3d031312588ff1ec97afc9 GIT binary patch literal 370 zcmV-&0ge7gNk%w1VGsZd0M!5h<+T9!_k92)04bs=7nv8M*+f@Y(Rq2~>hd=H{8IAs zTTHS{089Y!^dz?4HpJ#eOR_ES@J;{#v|wP=X1y~pr7`sM9q#fd=I$2!{A2t3MU~Gd z_V`Ed??(I909LnE-|so}_C)>tZ~fZiZsGOyJ7i?uJ*qu|g5K=G0Qvbm4wMe~ z_%#3k#{dA4_Rs+I@l$)qMrLQ$x7{S@@E=65LZjC@?Db3Z^kDb*E{4l1{QOLw(vPW{0^y9Kt#=06`#+-d6>;| zi3CrhSs^L|8+SHQByb!KqJuGP8#FZp1Qh}jB?crND=iQZ4Hg&#ETR%8B&RJpJsTFTEU}{}Y;GJOAtokgXrmG@ QFDlL|0MP&f)B-^OJ8QU=H2?qr literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ve.gif b/sources/lib/plugins/translation/flags/more/ve.gif new file mode 100755 index 0000000000000000000000000000000000000000..19ce6c1466f493ff8702f776364295095e8f6f2a GIT binary patch literal 364 zcmV-y0h9hmNk%w1VGsZd0M!5h=;-$J0s{U0cl`WmJUr7F7|H$S0Q4v*`BYTv008{_ zTlhvs`};-f!2lv6%=Y#wa&qIDndM4K+Vd6`{NDhECxQ3(PE}Ri`(a{T2v_<&J?Ogt znn#xPJ3I2$0Q502j53Gv^7#M&jY5_H_S*or)BybaO!@ge`1m&f0KWbGRHdcr_xCa3 z008~{QMuY_eHnPH(uwZR0O8{CgM{9$YN{kh863OF{$woXuOh6r26)05&!b4g?~2dwnYeHxV<01%`Nh0E;(* zjs*obA{jLt96386AQcrbs4yTt0T>G!9UmVD2NSjv0Us@`7zn-#z#Xx&2R{MF3CYSW K%q>69K>$0TIGSMq literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/vg.gif b/sources/lib/plugins/translation/flags/more/vg.gif new file mode 100755 index 0000000000000000000000000000000000000000..1fc0f96eed0e8e31729bd61b0dafaafd9e2c76ea GIT binary patch literal 368 zcmV-$0gwJiNk%w1VGsZd0M!5hv2~Z&tGEgRk^lftJ3OnlUwTx6Q{u$XEiI(VevkkF zGOEL%N=ve1W4!Y{Hb9*F{CK-*|gnUAlM>PJ3Ra zQc|_7tXl7(omPZrGc~4?bEzUCpn;xH001DLzMfcEx#f|R*P5w3Jg?<~fnSSWex`4n zmS&=zZ-88%gAql>zg<5+t~ffW%@r4ygT39(-^jveQ&YZDNvvFvN#bZ{VO6h+dcDrEeN++Tb~mIuCKQa OP0b3=3MA6fK>#~4#*32x literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/vi.gif b/sources/lib/plugins/translation/flags/more/vi.gif new file mode 100755 index 0000000000000000000000000000000000000000..66f9e746b6aedf561e504119ba5827873e95414b GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5hy}ix*`QYQ*DC_I%kJ8lA zu=VVWcW~0y*4KiTN%-~CE2lM>r2|&>G$uO z{QUH*s^DBk+3d~G_xJhG&(HAaYxnl?>(w6k^1$rhM)K@)=;-H*f8e~%ro6nm?(Xi+ z&MV&AUhe2I=jYAIzf$h**5u`u*46Ut<)i%ezGP6{lCw>moZY{_ZT0I`%gf91^78!r z{PFSeA^8LV00000EC2ui01yBR000J+z@JdaDzXMB6k!?pQ33(m!nfJ@D5b|^QE-Yb z3kv6y;RHk&h)c)vEi9H@YBFIIUM&c$!2l^P7#R#V9v%<^E;Sth3^Wx!J|ZIr9|sT$ zIU0)z5)vQ|7zUIFCKU+;i){u55I8e2I0ywK8a+KB13s%PDku;n2stZ4Jv=C@s~{jF WG7=RPw#7#~Vbius< literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/vu.gif b/sources/lib/plugins/translation/flags/more/vu.gif new file mode 100755 index 0000000000000000000000000000000000000000..8a8b2b065fecc2de5059d33235ffbfec290fccea GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5h?f?Ku)k)*YMEEy1Ez2$ZWo3eRM=R4S`c_r|lK|qz zHvonJ*~Cvf&^tRhH%v=O`b0!C&NCj&9_rIsD=8+DiC!5O6nR!v_9`kimNfZHOy0pN z{cv$>Xkh5lViL;|4Z{t5e0n`vI=`<^?c9IDRa7k-0NcGH0H6RuK|iOTd$6W&mU?-! zOiSd=P_uOaRjpM3Jpk3mb|N4h&A)S7bXb)D0LPU8)vEyM(@)TMcNoVRGchg`#uNPj z00000A^8LV00000EC2ui01yBR000JxKojm~^BIpmfKvHWkytv8v_M5zHGp5J;<=O% z8VF=S#$dIb%H+}#lLr_KBrBUR46a8i<>2usGbukmG#xn)1_A;Kj2jy#0xv%+BXnFaf>|z!4DyxIZ^PF(}Fj L%n1w6&p`k?=S6^; literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/wales.gif b/sources/lib/plugins/translation/flags/more/wales.gif new file mode 100755 index 0000000000000000000000000000000000000000..901d17507dfa6428fee33367dfa321144dcfcece GIT binary patch literal 372 zcmV-)0gL`eNk%w1VGsZd0M!5h>W+{~y+8f^{g1|Rx0K-U-R{uKzCkbU z_V)7G*vVT_dvPE6`1pF2JmiFbAX}WbY>sxB#C-6A(&>Vx9`KL0eoJ z0!9a7i!BnMtsrrUg&Yiss6i5?1vSA;vYJ64A1xyQ9w0j^4<`&49UXBU4+I%1DLw-V z5(Eqp5e^O;B^o9-7?uhd2N66I8xtllBPa!>mjO94HykV^8Yns_9JB*93knJ^2RJev SIUK$0m_LeLF literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/wf.gif b/sources/lib/plugins/translation/flags/more/wf.gif new file mode 100755 index 0000000000000000000000000000000000000000..eaa954b13694ab9e3aa3f77ed03e372f47abd722 GIT binary patch literal 377 zcmV-<0fzoZNk%w1VGsZd0M!5h&PhqoR8+<_HQRP}!7eW1m6hRjw5!6hZfK0Vrvjcot`l>h*P004CW0M%h( zi~s=2L`1g_56L<@oB#mVW@gMmL3{uJ+HY^zYHHJ6UC~ZX!!|aLcO;jB`)Sd~r&_Kx8K1!xK#3pNWCBR3HR1_nAiHUcgS6c#Nx zBM>Aw00#^o0t74)76dOS8W1I&p8_>05(_OaGbD|`4_aIa038Sw X5-2MK!%I#a)EOBg8rc^Y8bJU%oBE4P literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/ws.gif b/sources/lib/plugins/translation/flags/more/ws.gif new file mode 100755 index 0000000000000000000000000000000000000000..a51f939ede562216b0b37b393dcb489ed82968bb GIT binary patch literal 365 zcmV-z0h0blNk%w1VGsZd0M!5h_e)FtZEa>|qxn2NNlBFUL`1#4*76e*_bn}YdarbA zqV_5(@-8m;Qd0FLCHnvX`Bqo-ARzG#4FCW$`anSL008wqKIQ-b`(a^OS)BAbI`=Rz z`$a`eL5KDL08vMZ@&Eue^dBGiHa7S)H1io5{AOnQU0vb;0QovPoSnn_ zN=X0!Cr3Mj^D;8u008thHm$JGc6PAP(c*D&sd;gy{7+AtqssF&H9|rNfACB_)6>)b zz`*{@%=M?I_^+?*JS?uRuJrZw_IPddab@*&Y4P##wY9alxVZO(dHnqR^z`)g_4V%n z00000A^8LV00000EC2ui01yBR000JoK%dZ;DH=6M&EeqlcyuF)gl4ND5GjL$>A7Z6 zphjcGV8pf}SF3fwU`VABOrdy{Ouf&Cv)hFR0|W#GJv==V6nlMtfrEtEGj2CI139h2?+qF8yg7~KM(>I76BC%549b)tgR3cyaK+k0kXM2#Kp$PK>#~Y Covxz* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/yt.gif b/sources/lib/plugins/translation/flags/more/yt.gif new file mode 100755 index 0000000000000000000000000000000000000000..a2267c0546ff372e5c0717dc7c79518a2e6c7cce GIT binary patch literal 382 zcmV-^0fGKUNk%w1VGsZd0M!5hN=dQI%E{&B<^JgC);3%v*F7z?w%N6`wAR(t?(XjVva@bK{F;^OD$=jrF?_44w&xw`uM`}+3w z^6&5S^Yi|{zx4F<;o{-`_xIb`>SAQR@9*%~*VpLl>iGEh`uX_%`1j_muE@v7-B3cn zy}HE5;qK(*Vp_BO`S`A^t?KFN>FDP9@9**P@!CQ!^Y8Kg{{Hgv^7i)j-QC^K&(HPs z_5c6>A^8LV00000EC2ui01yBR000J?K%WqU!EqFd*XuH~2tdByZxHc#3fMxVc9QU- zxkV_HifvGv+HU9d<#Gsw#?`2QOoGoY;Z6hsHX{Io3N0BcJ|!JF2OJV4Fd`xVGc*<% z9}hMQJrfc(ECdV$GbRoW9S55l6FLekHw+9FATkiCBnvw$I|?cWz!ftNGdevG8X6WB c5*={}Iy^iS#tKbOJS7hY2LU|?J>fwBJ6lxJZ~y=R literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/za.gif b/sources/lib/plugins/translation/flags/more/za.gif new file mode 100755 index 0000000000000000000000000000000000000000..ede52589199b0360eb5d92c3aa174dd9b4eda473 GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5hF)_^b006PF<;vvPpxUzcF*1+H0QR@I0052rWoA>f zX{nC@YQJ{?X8`#~NcpCw=<04pMbkU0T}ZKL6cofkuVd!hTKQL3laW?hxOaNUkaBW! z=I!PinK(0|O8_|l0EH1asaij)VRO4@DWOa=rdQd~%iPpd$-#c2o?ddgU1ML%_`SbN zzjys_a44KW>GFq!yIRD9Dg=(mWWb=&5I7H)D?zi00;(L8Us2Jz!9{=2n`J#0yj4Z J%+1b006TO7llA}r literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/more/zm.gif b/sources/lib/plugins/translation/flags/more/zm.gif new file mode 100755 index 0000000000000000000000000000000000000000..b2851d2b405c7ffe20eadff1b0bccbb7fe8b62e3 GIT binary patch literal 358 zcmV-s0h#_sNk%w1VGsZd0M!5h12q8d85sa)0AZ|Qe7$@CSO9UhacQw>07n3Xz=QyN z09mM6ZnbVK7Z+x*X59b)mC2R!C@AMFC6309Ri;(#I5h2qJzc9^6%-K4004-?hyZf{ z?0+_7u4Cl@0C~K6QlwILxpq#XPLarw=%i(BvTfa;TRAi_=t4Y6pGlmsb?BK_fWLrh zvuo)zF7Aj!c&=#iibv>(IcTqFdAWIBu3d}7i{vC6S+r(QqEP3IKjWfbC?X(Ns8<7l z0{{R3A^8LV00000EC2ui01yBR000JqK%da3C~h`_WMPT$L7t<@#HLB8NITOC;A9a# zAp@i3z}0jzSQGLMj~$)Mf|8p76eF;h9Ir%pJTV>$6K-S!axQ;7FCH5G^(%_TIQaKBkgjm`_4Vd*NT%Co08;=cC@9!j zI{p1s{QLW%S4PJ=83BXlXiPMy_R-c=~E;drwE0IS|{@$n7s@9&mlPWSgoJ3Ku1){pJQz1QK_^1WV( z003VA0P?x1qSjyW@A1!4Hs9R<+)N^;rAxq3MCs`O@AB}RTvqYy=#=S< z9u8+f4xDa0TB@-xB)W-I0RP{6BNP%#KZtT7E1^c L%M#Ad5vH&5E`eJhySf}*>0P^zk`uh6#`1tnr z_WpW_T8hK{U28>qx;k>TDrThkJd0frAGJ zJ|Y7!3?LsJ4jT^wArKH68x{Z(4k@EDry2zX92_AYs|=l=p{@d?5V!!t7{$dF$R5fb GK>$0vUY#BQ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/no.gif b/sources/lib/plugins/translation/flags/no.gif new file mode 100755 index 0000000000000000000000000000000000000000..6202d1f3a2df4184878f5ed8bc23aa630d43c061 GIT binary patch literal 376 zcmV-;0f+uaNk%w1VGsZd0M!5h01vKZmEH98^zCF}`uh6sZENy;dei^_23FAb_xIv4 zFM6fq>gwv0xa;FBE9*^5?Ot5H007+=6wLqt>r_(O008MkL-O+Sq$r8H8S8KAKx4qwEzI+G%}a&g)Y3x25QbD!hlDJJ;%`1$$yu>b)6{{G_A^8LV00000EC2ui01yBR000J+K%cOO_*IUTgL1<384SHfuU06)29OoSwQzVEFmNnFct&>I;*X(EH(-}2Ut4`IvFn*G%YA0 W3NpY46Bhss8xhtKBqTiBK>$0|z?fYC literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/pt-br.gif b/sources/lib/plugins/translation/flags/pt-br.gif new file mode 100755 index 0000000000000000000000000000000000000000..8c8661626bae57026266d56824709a9283d8c7ff GIT binary patch literal 367 zcmV-#0g(PjNk%w1VGsZd0M!5h*yZ@7)EQ*1WcKzcVzE>JD*$C`>Gbp+sM%CSoJIWn zQhU35Q=?NucKT?rY5e?309XJTgBo9}UjRe^CWu`v2kCd}8kT1>3rugqR`S3bi zgXwK^s&kt8u;D^CmlU4TF*&3(uH8eG%5(PeNv*7*{qs>jm_YUIMD*z&EnxTj{8|8G z00000A^8LV00000EC2ui01yBR000JzK%YxI2Q|##o}-XBqc_nX~imf zicKPi(J(H}D*|_FGz=@5CIvz-2nvM?01#zd0|OKZ7Z5dh4=oKZ93dtH2L~iS5FP{% z8z>nK6&yE_F&%{?3?MWt20T0lI{^_97(WvuAPEUG12#Gb6t58)vRzpWG%#ai8o)?P NOBc>R(9u6Z06T&Vj4=QJ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/pt.gif b/sources/lib/plugins/translation/flags/pt.gif new file mode 100755 index 0000000000000000000000000000000000000000..e735f740e125ac2e522ce53d68e81615d5231547 GIT binary patch literal 369 zcmV-%0gnDhNk%w1VGsZd0M!5hwz@-Fn_BX%NAxW$?sHc3931sBGMltfYNcxEsWtgm zR{%Bu;mI|0taSAxB=tNzVtOm+tkj;Px--7*}^>iaB*p(T-NCNQ;|jW zJT~WeT<}3KL6J1>-QDecPGFy5^ED~-XH4SISMItt`%_2oxIILUMEXKP>S-$G(A3=k z002z@A^8LV00000EC2ui01yBR000J#z@Ko)DRMMOjm7f&d`6>2>T;P(6xay!GgBQl zCjo8;3K<64-zZ?S5o!WK`Ru?zevQCJR_YOQEp!DBcMTLKGBGPIH!lMY1%nU^2owhZ zE+h;LkC7Q6lL!(l04NCwJdgz$83rPhIu#W#12n1`9UTL&GXVh<6cHF04|u})Ik6{x-5+a literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/ro.gif b/sources/lib/plugins/translation/flags/ro.gif new file mode 100755 index 0000000000000000000000000000000000000000..f5d5f125b8c0234f9152e0a1481a7a0e6765673c GIT binary patch literal 363 zcmV-x0hInnNk%w1VGsZd0M!5h^8*9-_bpt5-RS@TRD9j_*#H0{$N2bo^f58_NlE!v zSM&2z^(-v&931oWJoe`(=ez&_0=V?#9Q7n5_4P}7n&kccZDfevN_5(EmgDjg68ZT% z`uaim_%%Rm**$94^*ufI;Q#;tt^4~&{QOMy^(0St+~5EJ_BS_JfZq4%F!%RFYL4J< zk>KmW0Po!Z_V!r){ZaeyVEp`L^%SwzVzog`06(D@A|mzr`ug|x_xMmy`aL~#bpGDn>h|{bm6iO`M{w)_0QW>h z^*cNB002r#{lgqh;ebFwadRwpd3${j11fPZgLry;eggw3CNVS_ z83Y73HwOnFA0#9+zy#V#mJ^0c!5^0?raiBAOsQ@Hw?3(~Ng{wV@t_^9H00~z5)<8pxux6sb zC3&I%07L!TQTx|M_RcGNu*&}3S@+N{SedzCpS}Pvbp6~^001HU*-HQ!WBl4rd9KO! z&oceN000wR_ts18p#W2swf zr~pHOA^8LV00000EC2ui01yBR000Jzz@PBvYBWry$wc+SU^>50h!qI%7K=?uN0Kq1 zp^`#$@-P4zOT}jZbaE^OuAH)^*9MNJ;|h>HDIXaF4RtgN26(1d0tj zD?NgQhLi+5EeR$IXOV0i5eEgjLrD? z`1bbp?EnCCbHrO*xc`EI{B(5u{QUZAYCAitgoVla`ug@&Rbpehnw!=D0DAxcF696K z_gGjgETMOJ#PUT&N=mXpMX`H)#`N^`Mn3S?zx3nKxuvndD=H4<1_92Nz?A0IqRO~o6>FfcsJ GK>#~&ADH3* literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/translation/flags/tr.gif b/sources/lib/plugins/translation/flags/tr.gif new file mode 100755 index 0000000000000000000000000000000000000000..e407d553d264fae94e5dead46a7f6b28a0d2b950 GIT binary patch literal 371 zcmV-(0gV1fNk%w1VGsZd0M!5h_=ku4NlE;M4#va<950ObGx_e)FmLqqyT zM*dx0{(5@(JU#Lg6ZbJO{&sf!etz;UF7zNE`B72*o}T$sRr+CJ{&8~sZf@}n4f;Sp z^(7_x00913S@`7S`8zuLadGn*8T@K${AOnQU0w7aANV&n^D;8v008zZEd1o;_x1Jn zx3~T2>G@b#`=X-vjEwX)Hu%`s^z&Z$Q(|r8}|tomt>1Gt7B0Re2K6Fw*Y-)IWQI#0Cy89EhP>g9}zJa7Aqu$J`^n` z8yPPVGc}PU4JQN~A($C15i~qIk_`C@0eNB6BFS@ zMa=*J+b=KPKtS3nE7mS9;ZRW6B_-onSmsz(_Rmq*ARy5V4c|&i>2Ge`MMc&hANt&Q z;Z9E4Iy&AuI^aS=)fpMW008J}YW2)Z + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +class helper_plugin_translation extends DokuWiki_Plugin { + var $translations = array(); + var $translationNs = ''; + var $defaultlang = ''; + var $LN = array(); // hold native names + var $opts = array(); // display options + + /** + * Initialize + */ + function __construct() { + global $conf; + require_once(DOKU_INC . 'inc/pageutils.php'); + require_once(DOKU_INC . 'inc/utf8.php'); + + // load wanted translation into array + $this->translations = strtolower(str_replace(',', ' ', $this->getConf('translations'))); + $this->translations = array_unique(array_filter(explode(' ', $this->translations))); + sort($this->translations); + + // load language names + $this->LN = confToHash(dirname(__FILE__) . '/lang/langnames.txt'); + + // display options + $this->opts = $this->getConf('display'); + $this->opts = explode(',', $this->opts); + $this->opts = array_map('trim', $this->opts); + $this->opts = array_fill_keys($this->opts, true); + + // get default translation + if(!$conf['lang_before_translation']) { + $dfl = $conf['lang']; + } else { + $dfl = $conf['lang_before_translation']; + } + if(in_array($dfl, $this->translations)) { + $this->defaultlang = $dfl; + } else { + $this->defaultlang = ''; + array_unshift($this->translations, ''); + } + + $this->translationNs = cleanID($this->getConf('translationns')); + if($this->translationNs) $this->translationNs .= ':'; + } + + /** + * Check if the given ID is a translation and return the language code. + */ + function getLangPart($id) { + list($lng) = $this->getTransParts($id); + return $lng; + } + + /** + * Check if the given ID is a translation and return the language code and + * the id part. + */ + function getTransParts($id) { + $rx = '/^' . $this->translationNs . '(' . join('|', $this->translations) . '):(.*)/'; + if(preg_match($rx, $id, $match)) { + return array($match[1], $match[2]); + } + return array('', $id); + } + + /** + * Returns the browser language if it matches with one of the configured + * languages + */ + function getBrowserLang() { + $rx = '/(^|,|:|;|-)(' . join('|', $this->translations) . ')($|,|:|;|-)/i'; + if(preg_match($rx, $_SERVER['HTTP_ACCEPT_LANGUAGE'], $match)) { + return strtolower($match[2]); + } + return false; + } + + /** + * Returns the ID and name to the wanted translation, empty + * $lng is default lang + */ + function buildTransID($lng, $idpart) { + global $conf; + if($lng) { + $link = ':' . $this->translationNs . $lng . ':' . $idpart; + $name = $lng; + } else { + $link = ':' . $this->translationNs . $idpart; + $name = $this->realLC(''); + } + return array($link, $name); + } + + /** + * Returns the real language code, even when an empty one is given + * (eg. resolves th default language) + */ + function realLC($lc) { + global $conf; + if($lc) { + return $lc; + } elseif(!$conf['lang_before_translation']) { + return $conf['lang']; + } else { + return $conf['lang_before_translation']; + } + } + + /** + * Check if current ID should be translated and any GUI + * should be shown + */ + function istranslatable($id, $checkact = true) { + global $ACT; + + if($checkact && $ACT != 'show') return false; + if($this->translationNs && strpos($id, $this->translationNs) !== 0) return false; + $skiptrans = trim($this->getConf('skiptrans')); + if($skiptrans && preg_match('/' . $skiptrans . '/ui', ':' . $id)) return false; + $meta = p_get_metadata($id); + if(!empty($meta['plugin']['translation']['notrans'])) return false; + + return true; + } + + /** + * Return the (localized) about link + */ + function showAbout() { + global $ID; + global $conf; + global $INFO; + + $curlc = $this->getLangPart($ID); + + $about = $this->getConf('about'); + if($this->getConf('localabout')) { + list($lc, $idpart) = $this->getTransParts($about); + list($about, $name) = $this->buildTransID($curlc, $idpart); + $about = cleanID($about); + } + + $out = ''; + $out .= ''; + $out .= html_wikilink($about, '?'); + $out .= ''; + + return $out; + } + + /** + * Returns a list of (lc => link) for all existing translations of a page + * + * @param $id + * @return array + */ + function getAvailableTranslations($id) { + $result = array(); + + list($lc, $idpart) = $this->getTransParts($id); + $lang = $this->realLC($lc); + + foreach($this->translations as $t) { + if($t == $lc) continue; //skip self + list($link, $name) = $this->buildTransID($t, $idpart); + if(page_exists($link)) { + $result[$name] = $link; + } + } + + return $result; + } + + /** + * Creates an UI for linking to the available and configured translations + * + * Can be called from the template or via the ~~TRANS~~ syntax component. + */ + public function showTranslations() { + global $conf; + global $INFO; + + if(!$this->istranslatable($INFO['id'])) return ''; + $this->checkage(); + + list($lc, $idpart) = $this->getTransParts($INFO['id']); + $lang = $this->realLC($lc); + + $out = '

'; + + return $out; + } + + /** + * Return the local name + * + * @param $lang + * @return string + */ + function getLocalName($lang) { + if($this->LN[$lang]) { + return $this->LN[$lang]; + } + return $lang; + } + + /** + * Create the link or option for a single translation + * + * @param $lc string The language code + * @param $idpart string The ID of the translated page + * @returns string The item + */ + function getTransItem($lc, $idpart) { + global $ID; + global $conf; + + list($link, $lang) = $this->buildTransID($lc, $idpart); + $link = cleanID($link); + + // class + if(page_exists($link, '', false)) { + $class = 'wikilink1'; + } else { + $class = 'wikilink2'; + } + + // local language name + $localname = $this->getLocalName($lang); + + $divClass = 'li'; + // current? + if($ID == $link) { + $sel = ' selected="selected"'; + $class .= ' cur'; + $divClass .= ' cur'; + } else { + $sel = ''; + } + + // flag + if(isset($this->opts['flag'])) { + $flag = DOKU_BASE . 'lib/plugins/translation/flags/' . hsc($lang) . '.gif'; + $style = ' style="background-image: url(\'' . $flag . '\')"'; + $class .= ' flag'; + } + + // what to display as name + if(isset($this->opts['name'])) { + $display = hsc($localname); + if(isset($this->opts['langcode'])) $display .= ' (' . hsc($lang) . ')'; + } elseif(isset($this->opts['langcode'])) { + $display = hsc($lang); + } else { + $display = ' '; + } + + // prepare output + $out = ''; + if($this->getConf('dropdown')) { + if($conf['useslash']) $link = str_replace(':', '/', $link); + + $out .= ''; + } else { + $out .= "
  • '; + } + + return $out; + } + + /** + * Checks if the current page is a translation of a page + * in the default language. Displays a notice when it is + * older than the original page. Tries to link to a diff + * with changes on the original since the translation + */ + function checkage() { + global $ID; + global $INFO; + if(!$this->getConf('checkage')) return; + if(!$INFO['exists']) return; + $lng = $this->getLangPart($ID); + if($lng == $this->defaultlang) return; + + $rx = '/^' . $this->translationNs . '((' . join('|', $this->translations) . '):)?/'; + $idpart = preg_replace($rx, '', $ID); + + // compare modification times + list($orig, $name) = $this->buildTransID($this->defaultlang, $idpart); + $origfn = wikiFN($orig); + if($INFO['lastmod'] >= @filemtime($origfn)) return; + + // get revision from before translation + $orev = 0; + $changelog = new PageChangelog($orig); + $revs = $changelog->getRevisions(0, 100); + foreach($revs as $rev) { + if($rev < $INFO['lastmod']) { + $orev = $rev; + break; + } + } + + // see if the found revision still exists + if($orev && !page_exists($orig, $orev)) $orev = 0; + + // build the message and display it + $orig = cleanID($orig); + $msg = sprintf($this->getLang('outdated'), wl($orig)); + + $difflink = $this->getOldDiffLink($orig, $INFO['lastmod']); + if ($difflink) { + $msg .= sprintf(' ' . $this->getLang('diff'), $difflink); + } + + echo '
    ' . $msg . '
    '; + } + + function getOldDiffLink($id, $lastmod) { + // get revision from before translation + $orev = false; + $changelog = new PageChangelog($id); + $revs = $changelog->getRevisions(0, 100); + foreach($revs as $rev) { + if($rev < $lastmod) { + $orev = $rev; + break; + } + } + if($orev && !page_exists($id, $orev)) { + return false; + } + $id = cleanID($id); + return wl($id, array('do' => 'diff', 'rev' => $orev)); + + } +} diff --git a/sources/lib/plugins/translation/lang/bn/lang.php b/sources/lib/plugins/translation/lang/bn/lang.php new file mode 100755 index 0000000..5bfc73b --- /dev/null +++ b/sources/lib/plugins/translation/lang/bn/lang.php @@ -0,0 +1,10 @@ + + */ +$lang['translations'] = 'এই পাতার অনুবাদ'; +$lang['outdated'] = 'এই অনুবাদ মূল পাতা তুলনায় পুরোনো হয় এবং পুরান হতে পারে.'; +$lang['diff'] = 'দেখুন কি পরিবর্তন হয়েছে'; diff --git a/sources/lib/plugins/translation/lang/bn/settings.php b/sources/lib/plugins/translation/lang/bn/settings.php new file mode 100755 index 0000000..d1df06b --- /dev/null +++ b/sources/lib/plugins/translation/lang/bn/settings.php @@ -0,0 +1,10 @@ + + */ +$lang['about'] = 'এখানে একটি পৃষ্ঠায় নাম লিখুন যেখানে অনুবাদের বৈশিষ্ট্যটি ব্যবহারকারীদের জন্য ব্যাখ্যা করা আছে. এটা ভাষা নির্বাচক থেকে লিঙ্ক করা হবে.'; +$lang['checkage'] = 'সম্ভবত পুরোনো অনুবাদের বিষয়ে সাবধান.'; +$lang['copytrans'] = 'একটি নতুন অনুবাদ শুরু যখন সম্পাদক মধ্যে মূল ভাষা টেক্সট কপি করুন?'; diff --git a/sources/lib/plugins/translation/lang/bn/totranslate.txt b/sources/lib/plugins/translation/lang/bn/totranslate.txt new file mode 100755 index 0000000..46e5f1c --- /dev/null +++ b/sources/lib/plugins/translation/lang/bn/totranslate.txt @@ -0,0 +1 @@ +FixMe ** এই পাতা সম্পূর্ণরূপে এখনো অনুবাদ করা হয়নি. অনুবাদ সমাপ্তির সাহায্য করুন. ** \ \ / / (অনুবাদ সমাপ্ত হয় একবার এই অনুচ্ছেদ মুছে ফেলুন) / / \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/ca/lang.php b/sources/lib/plugins/translation/lang/ca/lang.php new file mode 100644 index 0000000..c74c568 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ca/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = 'Traduccions d\'aquesta pàgina'; +$lang['outdated'] = 'Aquesta traducció és més antiga que la pàgina original i pot estar desactualitzada.'; +$lang['diff'] = 'Veure que ha canviat.'; +$lang['transloaded'] = 'Els continguts de la traducció d\'aquesta pàgina a %s han sigut pre-carregats per facilitar la traducció.
    Però pots basar la teva traducció en les següents traduccions: %s'; +$lang['menu'] = 'traduccions desactualitzades i que falten'; +$lang['missing'] = 'Falta!'; +$lang['old'] = 'desactualitzat'; +$lang['current'] = 'actualitzat'; +$lang['path'] = 'Ruta'; diff --git a/sources/lib/plugins/translation/lang/ca/settings.php b/sources/lib/plugins/translation/lang/ca/settings.php new file mode 100644 index 0000000..4a356cc --- /dev/null +++ b/sources/lib/plugins/translation/lang/ca/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = 'Llista separada per espais d\'idiomes de traducció'; +$lang['translationns'] = 'Si només vols traduccions sota un cert espai de noms, posa\'l aquí.'; +$lang['skiptrans'] = 'Quan el nom de la pàgina coincideix amb aquesta expressió regular, no mostris el menú de traducció.'; +$lang['dropdown'] = 'Utilitzar una llista desplegable per mostrar les traduccions (recomanat per a més de 5 idiomes).'; +$lang['translateui'] = 'L\'idioma de la interfície d\'usuari s\'hauria de canviar també en els espais de noms en llengües estrangeres?'; +$lang['redirectstart'] = 'La pàgina d\'inici hauria de redirigir a un espai de noms d\'idioma mitjançant la detecció d\'idioma del navegador?'; +$lang['about'] = 'Introdueix un nom de pàgina aquí, on la funció de traducció s\'explica als usuaris. Estarà connectat des del selector d\'idioma.'; +$lang['localabout'] = 'Utilitzar versions localitzades de la pàgina \'quant a\' (en lloc d\'un \'quant a\' global).'; +$lang['checkage'] = 'Advertir sobre possibles traduccions obsoletes.'; +$lang['display'] = 'Selecciona el que vulguis que es mostri al seleccionador d\'idioma. Recorda que els experts en usabilitat no recomanen fer servir banderes de país.'; +$lang['copytrans'] = 'Copiar el text en l\'idioma original en l\'editor quan s\'inicia una nova traducció?'; +$lang['show_path'] = 'Mostrar la ruta a la pàgina de traducció que falta?'; diff --git a/sources/lib/plugins/translation/lang/ca/totranslate.txt b/sources/lib/plugins/translation/lang/ca/totranslate.txt new file mode 100644 index 0000000..96820e8 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ca/totranslate.txt @@ -0,0 +1 @@ +ARREGLA'M **Aquesta pàgina encara no està totalment traduïda. Si us plau, ajuda completant la traducció.**\\//(treu aquest paràgraf en acabar la traducció)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/cs/lang.php b/sources/lib/plugins/translation/lang/cs/lang.php new file mode 100755 index 0000000..faca1ae --- /dev/null +++ b/sources/lib/plugins/translation/lang/cs/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = 'Překlady této stránky'; +$lang['outdated'] = 'Tento překlad je starší než originální stránka a nejspíše i zastaralý.'; +$lang['diff'] = 'Zobrazit změny.'; +$lang['transloaded'] = 'Text pro překlad této stránky do %s byl pro ulehčení překládání automaticky načten.
    Můžete ale použít předešlé dostupné překlady: %s.'; +$lang['menu'] = 'zastaralé a chybějící překlady'; +$lang['missing'] = 'Chybí!'; +$lang['old'] = 'zastaralý'; +$lang['current'] = 'aktuální'; +$lang['path'] = 'Cesta'; diff --git a/sources/lib/plugins/translation/lang/cs/settings.php b/sources/lib/plugins/translation/lang/cs/settings.php new file mode 100755 index 0000000..f24ab34 --- /dev/null +++ b/sources/lib/plugins/translation/lang/cs/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = 'Seznam přeložených jazyků (ISO kódů) oddělený mezerami. Nezahrnujte defaultní jazyk!'; +$lang['translationns'] = 'Chcete-li udržovat překlad jen pro konkrétní jmenný prostor, vložte jeho jméno sem.'; +$lang['skiptrans'] = 'Pokud jméno stránky obsahuje tento regulární výraz, nezobrazovat překladové menu.'; +$lang['dropdown'] = 'Použít rozbalovací seznam dostupných překladů (doporučeno pro 5 a více jazyků).'; +$lang['translateui'] = 'Mělo by se přeložit i uživatelské rozhraní při změně překladu stránky?'; +$lang['redirectstart'] = 'Má hlavní stránka automaticky přesměrovávat na dostupnou jazykovou verzi jmenného prostoru dle nastavení jazyka prohlížeče?'; +$lang['about'] = 'Vložte jméno stránky s nápovědou ohledně možnosti překládat stránky na DokuWiki s pomoci Translation pluginu. Tento odkaz bude k dispozici z výběru přeložených jazyků.'; +$lang['localabout'] = 'Použít přeložené verze stran o aplikaci (namísto té globální).'; +$lang['checkage'] = 'Upozorňovat na možné zastaralé překlady.'; +$lang['display'] = 'Vybrat co se má zobrazovat v menu pro výběr jazyka. Experti na použitelnost webu nedoporučují zobrazování obrázků vlajek zemí pro výběr jazyka.'; +$lang['copytrans'] = 'Kopírovat výchozí jazykovou verzi do editoru pro nový překlad?'; +$lang['show_path'] = 'Zobrazit cestu na chybějící stránku překladu?'; diff --git a/sources/lib/plugins/translation/lang/cs/totranslate.txt b/sources/lib/plugins/translation/lang/cs/totranslate.txt new file mode 100755 index 0000000..5cdeee6 --- /dev/null +++ b/sources/lib/plugins/translation/lang/cs/totranslate.txt @@ -0,0 +1 @@ +FIXME **Tato stránka ještě není plně přeložena. Pomozte s dokončením překladu.**\\ //(odstraňte tento odstavec, jakmile je překlad dokončen)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/cy/lang.php b/sources/lib/plugins/translation/lang/cy/lang.php new file mode 100644 index 0000000..18e12e7 --- /dev/null +++ b/sources/lib/plugins/translation/lang/cy/lang.php @@ -0,0 +1,11 @@ + + */ +$lang['translations'] = 'Cyfieithiadau\'r dudalen hon'; +$lang['outdated'] = 'Mae\'r cyfieithiad hwn yn hŷn na\'r dudalen wreiddiol a gall fod wedi dyddio.'; +$lang['diff'] = 'Gweld beth sydd wedi newid.'; +$lang['transloaded'] = 'Cafodd cynnwys y dudalen hon mewn %s ei raglwytho er mwyn hwyluso\'r cyfieithu.
    Er gallwch chi seilio\'ch cyfieithiad ar y cyfieithiadau canlynol sy\'n bodoli\'n barod: %s'; diff --git a/sources/lib/plugins/translation/lang/cy/settings.php b/sources/lib/plugins/translation/lang/cy/settings.php new file mode 100644 index 0000000..21d5315 --- /dev/null +++ b/sources/lib/plugins/translation/lang/cy/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['translations'] = 'Rhestr gwahanwyd gan goma o iaith gyfieithu (codau ISO)'; +$lang['translationns'] = 'Os ydych chi am osod y cyfieithiadau o dan namespace penodol yn unig, rhowch e yma.'; +$lang['skiptrans'] = 'Pan fydd enw\'r dudalen yn bodloni\'r mynegiad rheolaidd, paid dangos y dewislen cyfieithu.'; +$lang['dropdown'] = 'Defnyddio cwymprestr i ddangos y cyfieithiadau (awgrymir am fwy na 5 iaith).'; +$lang['translateui'] = 'A ddylai iaith rhyngwyneb y defnyddiwr gael ei newid mewn namespaces ieithoedd estron hefyd?'; +$lang['redirectstart'] = 'A ddylai\'r dudalen gychwyn ailgyfeirio yn awtomatig i mewn i namespace iaith gan ddefnyddio datgeliad iaith y porwr?'; +$lang['about'] = 'Rhowch enw tudalen yma lle caiff y nodwedd cyfieithu ei esbonio ar gyfer eich defnyddwyr. Caiff ei gysylltu o\'r dewisydd iaith.'; +$lang['localabout'] = 'Defnyddio fersiynau lleoledig o\'r dudalen \'ynghylch\' (yn hytrach nag un dudalen \'ynghylch\' gyffredinol).'; +$lang['checkage'] = 'Rhybuddio ynghylch cyfieithiadau sydd efallai wedi dyddio.'; +$lang['display'] = 'Dewiswch yr hyn hoffech chi weld yn y dewisydd iaith. \'Dyw defnyddio baneri gwlad ddim i\'w awgrymu yn ôl arbenigwyr.'; +$lang['copytrans'] = 'Copïo testun y iaith wreiddiol i\'r golygydd wrth ddechrau cyfieithiad newydd?'; diff --git a/sources/lib/plugins/translation/lang/cy/totranslate.txt b/sources/lib/plugins/translation/lang/cy/totranslate.txt new file mode 100644 index 0000000..da8bfaa --- /dev/null +++ b/sources/lib/plugins/translation/lang/cy/totranslate.txt @@ -0,0 +1 @@ +FIXME **'Dyw'r dudalen heb ei chyfieithu'n llawn eto. Cynorthwywch gan gyflawni'r cyfieithiad.**\\ //(tynnych y paragraff hwn unwaith i chi orffen y cyfieithu)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/da/lang.php b/sources/lib/plugins/translation/lang/da/lang.php new file mode 100755 index 0000000..af5f450 --- /dev/null +++ b/sources/lib/plugins/translation/lang/da/lang.php @@ -0,0 +1,12 @@ + + * @author Soren Birk + */ +$lang['translations'] = 'Oversættelser af denne side'; +$lang['outdated'] = 'Denne oversættelse er ældre end den originale side og er muligvis forældet.'; +$lang['diff'] = 'Se hvad der er ændret.'; +$lang['transloaded'] = 'Indholdet af denne sides oversættelse i %s er blevet præ-indlæst for lettere oversættelse.
    Du kan basere din oversættelse på følgende nuværende oversættelser: %s.'; diff --git a/sources/lib/plugins/translation/lang/da/settings.php b/sources/lib/plugins/translation/lang/da/settings.php new file mode 100755 index 0000000..7b43734 --- /dev/null +++ b/sources/lib/plugins/translation/lang/da/settings.php @@ -0,0 +1,20 @@ + + * @author Soren Birk + * @author Jacob Palm + */ +$lang['translations'] = 'Mellemrums-separeret liste a oversættelsessprog (ISO koder). Lad være med at inkludere standardsproget.'; +$lang['translationns'] = 'Hvis du kun vil have oversættelser under et bestemt navnerum, indsæt det her.'; +$lang['skiptrans'] = 'Hvis navnet på siden matcher dette regulære udtryk, så lad være med at vise oversættelsesmenuen.'; +$lang['dropdown'] = 'Benyt en rulleliste til at vise oversættelserne (anbefales til 5 sprog eller mere).'; +$lang['translateui'] = 'Skal brugerfladens sprog også skiftes i fremmedsprogets navnerum?'; +$lang['redirectstart'] = 'Skal startsiden automatisk henvise til et sprog-navnerum vha browserens sprog-genkendelse?'; +$lang['about'] = 'Skriv et sidenavn her hvor oversættelsesfunktionen er forklaret for dine brugere. Siden vil blive linket til fra sprogvælgeren.'; +$lang['localabout'] = 'Anvend lokaliserede versions af "Om" siden (i stedet for en global "Om" side)'; +$lang['checkage'] = 'Advar om mulige forældede oversættelser.'; +$lang['display'] = 'Angiv hvad du ønsker der skal vises menuen til valg af sprog. Bemærk venligst, at det frarådes at benytte landeflag til sprogvalg.'; +$lang['copytrans'] = 'Kopier tekst fra originalt sporg ind i editorern når en ny oversættelse påbegyndes?'; diff --git a/sources/lib/plugins/translation/lang/da/totranslate.txt b/sources/lib/plugins/translation/lang/da/totranslate.txt new file mode 100755 index 0000000..3109105 --- /dev/null +++ b/sources/lib/plugins/translation/lang/da/totranslate.txt @@ -0,0 +1 @@ +FIXME **Denne side er endnu ikke fuldt oversat. Måske kan du hjælpe med at færdiggøre oversættelsen?**\\ //(fjern dette afsnit når siden er oversat)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/de-informal/lang.php b/sources/lib/plugins/translation/lang/de-informal/lang.php new file mode 100755 index 0000000..e402a02 --- /dev/null +++ b/sources/lib/plugins/translation/lang/de-informal/lang.php @@ -0,0 +1,3 @@ + + */ +$lang['translations'] = 'Übersetzungen dieser Seite'; +$lang['outdated'] = 'Diese Übersetzung ist älter als das Original und ist eventuell veraltet.'; +$lang['diff'] = 'Änderungen zeigen.'; +$lang['transloaded'] = 'Der Inhalt dieser Seite auf %s wurde in den Editor geladen um die Übersetzung zu erleichtern.
    Sie können Ihre Arbeit auch mit einer der folgenden vorhandenen Übersetzungen beginnen: %s.'; +$lang['menu'] = "veraltete und fehlende Übersetzungen"; +$lang['missing'] = 'Fehlt!'; +$lang['old'] = 'veraltet'; +$lang['current'] = 'aktuell'; +$lang['path'] = 'Pfad'; diff --git a/sources/lib/plugins/translation/lang/de/settings.php b/sources/lib/plugins/translation/lang/de/settings.php new file mode 100755 index 0000000..ce7fbda --- /dev/null +++ b/sources/lib/plugins/translation/lang/de/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = 'Liste der Sprachen (ISO codes), mittels Leerzeichen separiert. Die Default-Sprache nicht angeben.'; +$lang['translationns'] = 'Wenn die Übersetzung nur unterhalb eines Namensraumes gelten soll, diesen hier angeben.'; +$lang['skiptrans'] = 'Wenn der Seitennamen dem regulären Ausdruck entspricht, dann den Sprachumschalter nicht anzeigen.'; +$lang['dropdown'] = 'Eine Auswahlliste benutzen, um die Übersetzungen anzuzeigen (zu bevorzugen bei mehr als fünf Sprachen).'; +$lang['translateui'] = 'Soll die Sprache der Benutzerschnittstelle auch in die jeweilige Fremdspache umgeschaltet werden?'; +$lang['redirectstart'] = 'Anhand des Browsers des Benutzers erkennen, welche Sprache angezeigt werden soll. (Startseite leitet in den passenden Namensraum um).'; +$lang['about'] = 'Geben Sie hier eine Seite an, welche den Mechanismus der Übersetzung erklärt. Sie wird vom Sprachumschalter verlinkt.'; +$lang['localabout'] = 'Sprachspezifische Versionen der oben angegebenen Seite (anstelle einer globalen) nutzen.'; +$lang['checkage'] = 'Warnungen von möglicherweise veralteten Übersetzungen anzeigen.'; +$lang['display'] = 'Geben Sie an welches/r Symbol/Text im Sprachumschalter angezeigt werden soll. (Die Nutzung von länderspezifischen Flaggen wird aus Gründen der Benutzbarkeit nicht empfohlen.)'; +$lang['copytrans'] = 'Original Sprachversion in den Editor kopieren wenn eine neue Übersetzung begonnen wird?'; +$lang['show_path'] = 'Seitenpfad in der Übersicht der fehlenden Übersetzungen anzeigen?'; diff --git a/sources/lib/plugins/translation/lang/de/totranslate.txt b/sources/lib/plugins/translation/lang/de/totranslate.txt new file mode 100755 index 0000000..37d03ae --- /dev/null +++ b/sources/lib/plugins/translation/lang/de/totranslate.txt @@ -0,0 +1 @@ +FIXME **Diese Seite wurde noch nicht vollständig übersetzt. Bitte helfen Sie bei der Übersetzung.**\\ //(diesen Absatz entfernen, wenn die Übersetzung abgeschlossen wurde)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/en/lang.php b/sources/lib/plugins/translation/lang/en/lang.php new file mode 100755 index 0000000..304d298 --- /dev/null +++ b/sources/lib/plugins/translation/lang/en/lang.php @@ -0,0 +1,11 @@ +original page and might be outdated.'; +$lang['diff'] = 'See what has changed.'; +$lang['transloaded'] = 'The contents of this page\'s translation in %s have been pre-loaded for easy translation.
    But you can base your translation on the following existing translations: %s.'; +$lang['menu'] = "outdated and missing translations"; +$lang['missing'] = 'Missing!'; +$lang['old'] = 'outdated'; +$lang['current'] = 'up-to-date'; +$lang['path'] = 'Path'; diff --git a/sources/lib/plugins/translation/lang/en/settings.php b/sources/lib/plugins/translation/lang/en/settings.php new file mode 100755 index 0000000..bda50a6 --- /dev/null +++ b/sources/lib/plugins/translation/lang/en/settings.php @@ -0,0 +1,20 @@ + + */ + +$lang['translations'] = 'Space separated list of translation languages (ISO codes).'; +$lang['translationns'] = 'If you only want translations below a certain namespace, put it here.'; +$lang['skiptrans'] = 'When the pagename matches this regular expression, don\'t show the translation menu.'; +$lang['dropdown'] = 'Use a dropdown list to display the translations (recommended for more than 5 languages).'; +$lang['translateui'] = 'Should the language of the user interface be switched in foreign language namespaces, too?'; +$lang['redirectstart'] = 'Should the start page automatically redirect into a language namespace using browser language detection?'; +$lang['about'] = 'Enter a pagename here where the translation feature is explained for your users. It will be linked from the language selector.'; +$lang['localabout'] = 'Use localized versions of about page (instead of one global about page).'; +$lang['checkage'] = 'Warn about possibly outdated translations.'; +$lang['display'] = 'Select what you\'d like to have shown in the language selector. Note that using country flags for language selection is not recommended by usability experts.'; + +$lang['copytrans'] = 'Copy original language text into the editor when starting a new translation?'; +$lang['show_path'] = 'Show path on the missing translation page?'; \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/en/totranslate.txt b/sources/lib/plugins/translation/lang/en/totranslate.txt new file mode 100755 index 0000000..ab42d5f --- /dev/null +++ b/sources/lib/plugins/translation/lang/en/totranslate.txt @@ -0,0 +1 @@ +FIXME **This page is not fully translated, yet. Please help completing the translation.**\\ //(remove this paragraph once the translation is finished)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/eo/lang.php b/sources/lib/plugins/translation/lang/eo/lang.php new file mode 100755 index 0000000..3b325da --- /dev/null +++ b/sources/lib/plugins/translation/lang/eo/lang.php @@ -0,0 +1,11 @@ + + */ +$lang['translations'] = 'Tradukoj de tiu paĝo'; +$lang['outdated'] = 'Tiu traduko estas pli malnova ol la origina paĝo kaj povus esti malaktuala.'; +$lang['diff'] = 'Vidi kio ŝanĝiĝis.'; +$lang['transloaded'] = 'La enhavo de la paĝtraduko en %s disponeblas por facila tradukado.
    Sed vi povas bazi vian tradukon sur la sekvaj tradukoj: %s.'; diff --git a/sources/lib/plugins/translation/lang/eo/settings.php b/sources/lib/plugins/translation/lang/eo/settings.php new file mode 100755 index 0000000..6edf642 --- /dev/null +++ b/sources/lib/plugins/translation/lang/eo/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['translations'] = 'Spaco-disigita listo de tradukaj lingvoj (ISO-kodoj).'; +$lang['translationns'] = 'Se vi volas traduki nur ene de certa nomspaco, indiku ĝin.'; +$lang['skiptrans'] = 'Ne montri la tradukmenuon, kiam la paĝnomo kongruas al tiu regula esprimo.'; +$lang['dropdown'] = 'Uzi falmenuon por montri la tradukojn (rekomendata por pli ol 5 lingvoj).'; +$lang['translateui'] = 'Ĉu ankaŭ ŝanĝi la lingvon de la uzanto-interfaco en alilingvaj nomspacoj?'; +$lang['redirectstart'] = 'Ĉu la startpaĝo aŭtomate redirektiĝu al lingva nomspaco laŭ foliumila rekonado?'; +$lang['about'] = 'Paĝnomo, kie klariĝas la tradukad-funkcio al uzantoj. La lingvo-selektilo ligos tien.'; +$lang['localabout'] = 'Uzi lokajn versiojn de la pri-paĝo (anstataŭ unu ĝenerala pri-paĝo).'; +$lang['checkage'] = 'Averti pri eble malaktualaj tradukoj.'; +$lang['display'] = 'Kion montri en la lingvo-selektilo. Notu ke uzeblec-fakuloj ne rekomendas uzi landajn flagetojn por lingvo-elekto.'; +$lang['copytrans'] = 'Ĉu kopii la originlingvan tekston en la redaktokampon por komenci novan tradukon?'; diff --git a/sources/lib/plugins/translation/lang/eo/totranslate.txt b/sources/lib/plugins/translation/lang/eo/totranslate.txt new file mode 100755 index 0000000..1987959 --- /dev/null +++ b/sources/lib/plugins/translation/lang/eo/totranslate.txt @@ -0,0 +1 @@ +FIXME **Tiu paĝo ankoraŭ ne plene tradukiĝis. Bv. helpi kompletigi la tradukon.**\\ //(forigu tiun alineon post fintraduko)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/es/lang.php b/sources/lib/plugins/translation/lang/es/lang.php new file mode 100755 index 0000000..c46669e --- /dev/null +++ b/sources/lib/plugins/translation/lang/es/lang.php @@ -0,0 +1,12 @@ + + * @author carlos + */ +$lang['translations'] = 'Traducciones de esta página'; +$lang['outdated'] = 'Esta traducción es más antigua que la página original y podría estar obsoleta.'; +$lang['diff'] = 'Ver lo que ha cambiado.'; +$lang['transloaded'] = 'Los contenidos de la traducción de esta página en %s han sido precargados para facilitar la traducción.
    Pero puedes basar tu traducción en las siguientes traducciones existentes: %s.'; diff --git a/sources/lib/plugins/translation/lang/es/settings.php b/sources/lib/plugins/translation/lang/es/settings.php new file mode 100755 index 0000000..2f9ee2d --- /dev/null +++ b/sources/lib/plugins/translation/lang/es/settings.php @@ -0,0 +1,20 @@ + + * @author Camilo Sampedro + * @author carlos + */ +$lang['translations'] = 'Lista de lenguajes para traducción (Códigos ISO), separados por espacios. No incluir el lenguaje por defecto.'; +$lang['translationns'] = 'Si sólo quieres traducciones en determinados espacios de nombre, indícalos aquí.'; +$lang['skiptrans'] = 'Cuando el nombre de la página concuerda con esta expresión regular, no mostrar el menú de traducción.'; +$lang['dropdown'] = 'Utiliza una lista desplegable para mostrar las traducciones (recomendado para más de 5 idiomas).'; +$lang['translateui'] = '¿También debería el lenguaje del interfaz de usuario cambiarse en los espacios de nombre foráneos?'; +$lang['redirectstart'] = '¿Debería la página principal redireccionar automáticamente a una página de un idioma según sea detectado por el navegador?'; +$lang['about'] = 'Introduce aquí un nombre de página donde se explique a tus usuarios la funcionalidad de traducción. Se enlazará desde el selector de lenguaje.'; +$lang['localabout'] = 'Utiliza versiones localizadas de la página \'acerca de\' (en lugar de una página \'acerca de\' global)'; +$lang['checkage'] = 'Alertar sobre posibles traducciones obsoletas.'; +$lang['display'] = 'Selecciona lo que quieras que sea mostrado en el selector de idioma. Ten en cuenta que el uso de parámetros de país para la selección de idioma no está recomendada por los expertos en usabilidad.'; +$lang['copytrans'] = '¿Mostrar el texto en el idioma original en el editor cuando se comienza una nueva traducción?'; diff --git a/sources/lib/plugins/translation/lang/es/totranslate.txt b/sources/lib/plugins/translation/lang/es/totranslate.txt new file mode 100755 index 0000000..6dc2803 --- /dev/null +++ b/sources/lib/plugins/translation/lang/es/totranslate.txt @@ -0,0 +1 @@ +FIXME **Esta página no está completamente traducida, aún. Por favor, contribuye a su traducción.**\\ //(Elimina este párrafo una vez la traducción esté completa)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/fa/lang.php b/sources/lib/plugins/translation/lang/fa/lang.php new file mode 100644 index 0000000..2abecd7 --- /dev/null +++ b/sources/lib/plugins/translation/lang/fa/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = 'ترجمه‌های این صفحه'; +$lang['outdated'] = 'این ترجمه از a href="%s" class="wikilink1">صفحه‌ی اصلی قدیمی‌تر است و ممکن است منسوخ شده باشد.'; +$lang['diff'] = 'ببینید چه چیزی تغییر کرده.'; +$lang['transloaded'] = 'محتویات این ترجمه‌ی صفحه در %s برای ترجمه‌ی آسان از قبل پر شده‌است.
    اما شما می‌توانید پایه‌ی ترجمه‌هایتان را در ترجمه‌های موجود زیر ببینید: %s.'; +$lang['menu'] = 'ترجمه‌های منسوخ‌ شده و پیدا نشده'; +$lang['missing'] = 'پیدا نشده!'; +$lang['old'] = 'منسوخ شده'; +$lang['current'] = 'به روز'; +$lang['path'] = 'مسیر'; diff --git a/sources/lib/plugins/translation/lang/fa/settings.php b/sources/lib/plugins/translation/lang/fa/settings.php new file mode 100644 index 0000000..2331783 --- /dev/null +++ b/sources/lib/plugins/translation/lang/fa/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = 'فضای لیست جداشده‌ی زبان‌های ترجمه شده (کدهای آی‌اس‌او)'; +$lang['translationns'] = 'اگر شما فقط می‌خواهید ترجمه‌ها زیر یک فضای‌نام خاص باشند، اینجا قرار دهید.'; +$lang['skiptrans'] = 'وقتی نام‌صفحه با عبارات منظم هم‌خوانی داشت، منوی ترجمه را نشان نده.'; +$lang['dropdown'] = 'استفاده از یک لیست کشویی برای نمایش ترجمه (توصیه شده برای بیشتر از ۵ زبان)'; +$lang['translateui'] = 'باید زبان رابط کاربر در زبان‌های خارجی فضای‌نام تغییر یابد، همچنین؟'; +$lang['redirectstart'] = 'باید صفحه‌ی آغازین به‌طور خودکار به زبانی که فضای‌نام توسط مرورگر کشف شده، تغییرمسیر کند؟'; +$lang['about'] = 'وارد کردن یک نام‌صفحه جایی که '; +$lang['localabout'] = 'استفاده از نسخه‌های متمرکز شده‌ی درباره صفحه (به جای یک جهانی درباره صفحه)'; +$lang['checkage'] = 'هشدار درمورد ترجمه‌های احتمالا منسوخ شده.'; +$lang['display'] = 'انتخاب این‌که شما چه چیزی را می‌پسندید تا در انتخابگر زبان نمایش داده شود. توجه داشته‌باشید که استفاده از پرچم کشورها برای انتخابگر زبان توسط کارشناسان توصیه نمی‌شود.'; +$lang['copytrans'] = 'کپی‌کردن زبان اصلی متن داخل ویرایشگر وقتی که یک ترجمه جدید آغار می‌شود؟'; +$lang['show_path'] = 'نمایش مسیر در ترجمه‌ی پیدانشده‌ی صفحه‌‌ها؟'; diff --git a/sources/lib/plugins/translation/lang/fa/totranslate.txt b/sources/lib/plugins/translation/lang/fa/totranslate.txt new file mode 100644 index 0000000..665eb5b --- /dev/null +++ b/sources/lib/plugins/translation/lang/fa/totranslate.txt @@ -0,0 +1 @@ +تعمیرم کن **این صفحه کامل ترجمه نشده، اکنون. لطفا برای کامل‌شدنش کمک کنید.**\\ //(بعد از پایان ترجمه این بند را از ترجمه حذف کنید)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/fr/lang.php b/sources/lib/plugins/translation/lang/fr/lang.php new file mode 100755 index 0000000..d8a8b9d --- /dev/null +++ b/sources/lib/plugins/translation/lang/fr/lang.php @@ -0,0 +1,19 @@ + + * @author NicolasFriedli + * @author Gilles-Philippe Morin + * @author Schplurtz le Déboulonné + */ +$lang['translations'] = 'Traductions de cette page'; +$lang['outdated'] = 'Cette traduction est plus ancienne que la page originale et est peut-être dépassée.'; +$lang['old'] = 'dépassée'; +$lang['diff'] = 'Voir ce qui a changé.'; +$lang['transloaded'] = 'Le contenu de cette page en %s a été pré-chargé pour faciliter la traduction.
    Mais vous pouvez baser votre traduction sur les traductions existantes: %s'; +$lang['menu'] = 'traductions dépassées et manquantes'; +$lang['missing'] = 'Manquante!'; +$lang['current'] = 'à jour'; +$lang['path'] = 'Chemin'; diff --git a/sources/lib/plugins/translation/lang/fr/settings.php b/sources/lib/plugins/translation/lang/fr/settings.php new file mode 100755 index 0000000..74869ce --- /dev/null +++ b/sources/lib/plugins/translation/lang/fr/settings.php @@ -0,0 +1,22 @@ + + * @author Vincent Feltz + * @author NicolasFriedli + * @author Schplurtz le Déboulonné + */ +$lang['translations'] = 'Liste des langues disponibles séparées par des espaces (codes ISO).'; +$lang['translationns'] = 'Si vous souhaitez ne traduire qu\'une certaine catégorie, indiquez-la ici.'; +$lang['skiptrans'] = 'Quand le nom de la page correspond à cette expression régulière, ne pas montrer le menu de traduction.'; +$lang['dropdown'] = 'Utiliser un menu déroulant pour afficher les traductions (recommandé pour plus de 5 langues).'; +$lang['translateui'] = 'Faut-il changer la langue de l\'interface utilisateur dans les catégories traduites ?'; +$lang['redirectstart'] = 'La page de départ devrait-elle rediriger vers une catégorie traduite en utilisant la détection de langue du navigateur ?'; +$lang['about'] = 'Entrez ici un nom de page où la fonctionnalité de traduction est expliquée aux utilisateurs. Elle sera accessible depuis le sélecteur de langue.'; +$lang['localabout'] = 'Utiliser des versions traduites de la page à propos (au lieu d\'une page à propos globale).'; +$lang['checkage'] = 'Avertir de la possibilité de traductions dépassées.'; +$lang['display'] = 'Sélectionnez ce que vous voudriez afficher dans le sélecteur de langue. Notez qu\'utiliser les drapeaux de pays pour la sélection de langue n\'est pas recommandé par les experts en ergonomie.'; +$lang['copytrans'] = 'Copier le texte en langue source dans l\'éditeur quand une nouvelle traduction est lancée ?'; +$lang['show_path'] = 'Montrer les chemins sur la page des traductions manquantes ?'; diff --git a/sources/lib/plugins/translation/lang/fr/totranslate.txt b/sources/lib/plugins/translation/lang/fr/totranslate.txt new file mode 100755 index 0000000..3603d4e --- /dev/null +++ b/sources/lib/plugins/translation/lang/fr/totranslate.txt @@ -0,0 +1 @@ +FIXME **Cette page n'est pas encore traduite entièrement. Merci de terminer la traduction**\\ //(supprimez ce paragraphe une fois la traduction terminée)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/hr/lang.php b/sources/lib/plugins/translation/lang/hr/lang.php new file mode 100755 index 0000000..80e9399 --- /dev/null +++ b/sources/lib/plugins/translation/lang/hr/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = 'Prijevodi ove stranice'; +$lang['outdated'] = 'Prijevod ove stranice je stariji od originalne stranice i može biti zastario.'; +$lang['diff'] = 'Pogledajte što je izmijenjeno.'; +$lang['transloaded'] = 'Sadržaj ove stranice u jeziku %s je napunjeno radi lakšeg prevođenja.
    Ali možete bazirati Vaš prijevod i prema slijedećim raspoloživim prijevodima: %s.'; +$lang['menu'] = 'zastarjeli i nedostajući prijevodi'; +$lang['missing'] = 'Nedostaje!'; +$lang['old'] = 'zastarjelo'; +$lang['current'] = 'ažuran'; +$lang['path'] = 'Staza'; diff --git a/sources/lib/plugins/translation/lang/hr/settings.php b/sources/lib/plugins/translation/lang/hr/settings.php new file mode 100755 index 0000000..d1769cc --- /dev/null +++ b/sources/lib/plugins/translation/lang/hr/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = 'Razmacima odvojena lista podržanih jezika (ISO oznake).'; +$lang['translationns'] = 'Ako želite prijevode samo ispod određenog imenskog prostora, navedite ga ovdje.'; +$lang['skiptrans'] = 'Kada ime stranice odgovara ovom regularnom izrazu, ne prikazujte meni za prijevode.'; +$lang['dropdown'] = 'Koristi padajuću listu za prikaz prijevoda (preporučeno kada ima više od 5 jezika).'; +$lang['translateui'] = 'Da li da jezik korisničkog sučelja također bude prebačen u jezik stranog imenskog prostora ?'; +$lang['redirectstart'] = 'Da li da se početna strana automatski preusmjeri na imenski prostor koristeći detektirani jezik preglednika?'; +$lang['about'] = 'Unesi naziv stranice gdje je korisnicima pojašnjene mogućnosti prevođenja. Ona će biti povezana na izbornik jezika.'; +$lang['localabout'] = 'Koristi lokaliziranu inačicu "about" stranice (umjesto jedinstvene globalne)'; +$lang['checkage'] = 'Upozori o mogućem zastarjelom prijevodu.'; +$lang['display'] = 'Odaberite što želite da bude prikazano u izborniku jezika. Budite svjesni da korištenje zastava za odabir jezika nije preporučeno od strane eksperata.'; +$lang['copytrans'] = 'Kopirati originalni tekst u editor kada otvorite novi prijevod ?'; +$lang['show_path'] = 'Prikaži stazu do nedostajuće stranice s prijevodom?'; diff --git a/sources/lib/plugins/translation/lang/hr/totranslate.txt b/sources/lib/plugins/translation/lang/hr/totranslate.txt new file mode 100755 index 0000000..b49e869 --- /dev/null +++ b/sources/lib/plugins/translation/lang/hr/totranslate.txt @@ -0,0 +1 @@ +FIXME **Ova stranica još nije prevedena u cijelosti. Molimo pomognite u njenom prijevodu.**\\ //(uklonite ovaj paragraf jednom kada je prevođenje završeno)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/hu/lang.php b/sources/lib/plugins/translation/lang/hu/lang.php new file mode 100755 index 0000000..6a576ff --- /dev/null +++ b/sources/lib/plugins/translation/lang/hu/lang.php @@ -0,0 +1,11 @@ + + */ +$lang['translations'] = 'Oldal fordításai'; +$lang['outdated'] = 'A fordítás régebbi, mint az eredeti oldal, ezért lehet, hogy már elavult.'; +$lang['diff'] = 'Módosítások megtekintése.'; +$lang['transloaded'] = 'Az oldal tartalmának %s nyelvi fordítását előre betöltöttem a könnyebb módosítás érdekében.
    Ugyanakkor a fordítást elvégezhetjük a már létező %s fordítás alapján is.'; diff --git a/sources/lib/plugins/translation/lang/hu/settings.php b/sources/lib/plugins/translation/lang/hu/settings.php new file mode 100755 index 0000000..5a27108 --- /dev/null +++ b/sources/lib/plugins/translation/lang/hu/settings.php @@ -0,0 +1,18 @@ + + */ +$lang['translations'] = 'Szóközzel elválasztott lista a nyelvi fordításokról (ISO-kódokkal).'; +$lang['translationns'] = 'Ha csak egy bizonyos névtér alatt lévő fordítást szeretnénk, tegyük ide.'; +$lang['skiptrans'] = 'Ha az oldal neve illeszkedik ehhez a reguláris kifejezéshez, ne jelenjen meg a fordítások menüje.'; +$lang['dropdown'] = 'Legördülő lista használata a fordításokhoz (5 nyelvnél több esetén javasolt).'; +$lang['translateui'] = 'Módosuljon a felhasználói felület nyelve is idegen nyelvi névterek alatt?'; +$lang['redirectstart'] = 'Átirányítsuk automatikusan a kezdőoldalt abba a nyelvi névtérbe, amely nyelv a böngészőben van beállítva?'; +$lang['about'] = 'Itt adhatjuk meg annak az oldalnak a nevét, amelyen a fordítási lehetőségeket ismertetjük a felhasználókkal. Erre fog hivatkozni a nyelvkiválasztó képernyőelem.'; +$lang['localabout'] = 'A névjegy oldal fordított változátanak használata (a globális névjegy oldal helyett).'; +$lang['checkage'] = 'Figyelmeztetés az esetlegesen elavult fordításokra.'; +$lang['display'] = 'Válasszuk ki, mi jelenjen meg a nyelvi kiválasztó képernyőelemében. Jegyezzük meg: az országzászlókat nem javasolják a használhatósági szakértők.'; +$lang['copytrans'] = 'Átmásoljuk az eredeti nyelvi szöveget a szövegszerkesztőbe új fordítás indításakor?'; diff --git a/sources/lib/plugins/translation/lang/hu/totranslate.txt b/sources/lib/plugins/translation/lang/hu/totranslate.txt new file mode 100755 index 0000000..e072d8a --- /dev/null +++ b/sources/lib/plugins/translation/lang/hu/totranslate.txt @@ -0,0 +1 @@ +JAVÍTANDÓ **Az oldal még nincs teljesen lefordítva. Kérjük, segítsen a befejezésében!**\\ //(Töröljük ezt a bekezdést a fordítás elkészültekor.)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/it/lang.php b/sources/lib/plugins/translation/lang/it/lang.php new file mode 100755 index 0000000..23d3bd6 --- /dev/null +++ b/sources/lib/plugins/translation/lang/it/lang.php @@ -0,0 +1,10 @@ + + */ +$lang['translations'] = 'Traduzioni di questa pagina'; +$lang['outdated'] = 'Questa traduzione è più vecchia di quella della pagina originale è potrebbe essere superata.'; +$lang['diff'] = 'Vedi cosa è cambiato.'; diff --git a/sources/lib/plugins/translation/lang/it/settings.php b/sources/lib/plugins/translation/lang/it/settings.php new file mode 100755 index 0000000..775fbf7 --- /dev/null +++ b/sources/lib/plugins/translation/lang/it/settings.php @@ -0,0 +1,20 @@ + + * @author Diego Pierotto + * @author Sebastiano Pistore + * @author Sebastiano Pistore + * @author OlatusRooc + */ +$lang['translations'] = 'Elenco delle lingue di traduzione separati da spazi (codici ISO). Non includere la lingua predefinita'; +$lang['translationns'] = 'Scrivi qui solo se vuoi le traduzioni all\'interno di una certa categoria.'; +$lang['skiptrans'] = 'Quando i nomi delle pagine corrispondono a questa espressione regolare non mostrare il menu di traduzione.'; +$lang['dropdown'] = 'Utilizza un menu a tendina per visualizzare le traduzioni (consigliato quando si lavora con più di cinque lingue).'; +$lang['translateui'] = 'Vuoi che anche la lingua dell\'interfaccia utente sia modificata in categorie della stessa lingua?'; +$lang['about'] = 'Inserisci qui una pagina dove la funzione di traduzione viene spiegata agli utenti. Sarà collegata al selettore lingua.'; +$lang['localabout'] = 'Mostra le versioni localizzate della pagina About.'; +$lang['checkage'] = 'Avvisa della possibile presenza di traduzioni obsolete.'; +$lang['copytrans'] = 'Copia nell\'editor il testo in lingua originale quando viene iniziata una nuova traduzione?'; diff --git a/sources/lib/plugins/translation/lang/it/totranslate.txt b/sources/lib/plugins/translation/lang/it/totranslate.txt new file mode 100644 index 0000000..e83c52a --- /dev/null +++ b/sources/lib/plugins/translation/lang/it/totranslate.txt @@ -0,0 +1 @@ +FIXME ** Questa pagina non è ancora completamente tradotta. Chi può potrebbe aiutarne il completamento. ** \\ // (Rimuovere questo paragrafo a lavoro completato) // \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/ja/lang.php b/sources/lib/plugins/translation/lang/ja/lang.php new file mode 100755 index 0000000..b438bc6 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ja/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = 'このページの翻訳'; +$lang['outdated'] = 'この翻訳は元のページよりも更新日が古く、内容が古い可能性があります。'; +$lang['diff'] = '変更点を参照して下さい。'; +$lang['transloaded'] = '翻訳し易くするために %s にあるこのページの翻訳内容を事前に読み込みました。
    以下の既存の翻訳を翻訳の基にすることができます:%s。'; +$lang['menu'] = '古い翻訳と欠落している翻訳'; +$lang['missing'] = '欠落'; +$lang['old'] = '内容が古い'; +$lang['current'] = '最新'; +$lang['path'] = 'パス'; diff --git a/sources/lib/plugins/translation/lang/ja/settings.php b/sources/lib/plugins/translation/lang/ja/settings.php new file mode 100755 index 0000000..b8c8899 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ja/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = '翻訳言語(ISOコード)のスペース区切り一覧'; +$lang['translationns'] = '特定の名前空間以下のみを翻訳したい場合、名前空間を記入する。'; +$lang['skiptrans'] = 'ページ名がこの正規表現と一致すると、翻訳メニューが表示されません。'; +$lang['dropdown'] = '翻訳を表示するためにドロップダウン一覧を使用する(5言語以上の場合推奨)。'; +$lang['translateui'] = 'ユーザーインターフェイスの言語も、名前空間の言語に切り替えるか?'; +$lang['redirectstart'] = 'ブラウザーの言語設定を利用して、スタートページを各言語の名前空間に自動的にリダイレクトするか?'; +$lang['about'] = '翻訳機能をユーザーに説明するページ名を入力して下さい。言語セレクタからリンクされます。'; +$lang['localabout'] = '(包括的な概要ページの代わりに)翻訳版の概要ページを使用する。'; +$lang['checkage'] = '古い翻訳について警告する。'; +$lang['display'] = '言語セレクタに何を表示するかを選択する。言語選択に国旗を使用することをユーザビリティ専門家は奨励しないので注意してください。'; +$lang['copytrans'] = '新しく翻訳を開始する時、エディタに元の言語の文章をコピーしますか?'; +$lang['show_path'] = '欠落している翻訳ページのパスを表示します。'; diff --git a/sources/lib/plugins/translation/lang/ja/totranslate.txt b/sources/lib/plugins/translation/lang/ja/totranslate.txt new file mode 100755 index 0000000..05ac184 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ja/totranslate.txt @@ -0,0 +1 @@ +FIXME **このページはまだ完全には、翻訳されません。翻訳の完了を支援して下さい。**\\ //(翻訳が完了したらこの段落を削除して下さい)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/ko/lang.php b/sources/lib/plugins/translation/lang/ko/lang.php new file mode 100755 index 0000000..d99d64d --- /dev/null +++ b/sources/lib/plugins/translation/lang/ko/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['translations'] = '이 문서의 번역'; +$lang['outdated'] = '이 번역은 원래 문서보다 오래되었고 오래된 번역일 수 있습니다.'; +$lang['diff'] = '무엇이 바뀌었는지 보세요.'; +$lang['transloaded'] = '%s에 있는 이 문서의 번역의 내용을 쉽게 번역하기 위해 미리 불러왔습니다.
    하지만 다음 기존 번역에 당신의 번역을 바탕으로 할 수 있습니다: %s.'; +$lang['menu'] = '오래되었고 없는 번역'; +$lang['missing'] = '없음!'; +$lang['old'] = '오래됨'; +$lang['current'] = '최신'; +$lang['path'] = '경로'; diff --git a/sources/lib/plugins/translation/lang/ko/settings.php b/sources/lib/plugins/translation/lang/ko/settings.php new file mode 100755 index 0000000..ccf6d1c --- /dev/null +++ b/sources/lib/plugins/translation/lang/ko/settings.php @@ -0,0 +1,19 @@ + + */ +$lang['translations'] = '번역 언어의 공백으로 구분한 목록 (ISO 코드).'; +$lang['translationns'] = '특정 이름공간에 따라 번역을 원하면, 여기에 넣으세요.'; +$lang['skiptrans'] = '문서 이름이 정규 표현식과 일치하면, 번역 메뉴를 보여주지 마세요.'; +$lang['dropdown'] = '번역을 표시할 드롭다운 목록을 사용합니다. (5개 이상의 언어에 권장)'; +$lang['translateui'] = '사용자 인터페이스의 언어도 외국어 이름공간으로 전환해야 합니까?'; +$lang['redirectstart'] = '시작 문서가 자동으로 브라우저 언어 감지를 사용해 언어 이름공간으로 넘겨줘야 합니까?'; +$lang['about'] = '사용자에게 설명할 번역 기능이 어디에 있는지 여기에 문서 이름을 입력하세요.'; +$lang['localabout'] = '(하나의 전역 소개 문서 대신) 소개 문서의 지역화된 버전을 사용합니다.'; +$lang['checkage'] = '가능하면 오래된 번역에 대해 경고합니다.'; +$lang['display'] = '언어 선택기에 보여주고 싶은 것을 선택하세요. 언어 선택에 국기를 사용하는 것은 사용성 전문가에게 권장하지 않음을 참고하세요.'; +$lang['copytrans'] = '새 번역을 시작할 때 편집기에 원래 언어 문장을 복사하겠습니까?'; +$lang['show_path'] = '없는 번역 문서에서의 경로를 보여줄까요?'; diff --git a/sources/lib/plugins/translation/lang/ko/totranslate.txt b/sources/lib/plugins/translation/lang/ko/totranslate.txt new file mode 100755 index 0000000..9a19833 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ko/totranslate.txt @@ -0,0 +1 @@ +FIXME **이 문서는 아직 완전히 번역되지 않았습니다. 번역을 완료하는 데 도와주세요.**\\ //(번역을 마치면 이 단락을 지우세요)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/langnames.txt b/sources/lib/plugins/translation/lang/langnames.txt new file mode 100644 index 0000000..90992ee --- /dev/null +++ b/sources/lib/plugins/translation/lang/langnames.txt @@ -0,0 +1,188 @@ +# Native language names +# extracted from http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes + +aa Afaraf +ab Аҧсуа +ae Avesta +af Afrikaans +ak Akan +am አማርኛ +an Aragonés +ar |العربية +as অসমীয়া +av Авар мацӀ +ay Aymar aru +az Azərbaycan dili +ba Башҡорт теле +be Беларуская +bg Български език +bh भोजपुरी +bi Bislama +bm Bamanankan +bn বাংলা +bo བོད་ཡིག +br Brezhoneg +bs Bosanski Jezik +ca Català +ce Нохчийн Мотт +ch Chamoru +co Corsu +cr ᓀᐦᐃᔭᐍᐏᐣ +cs Česky +cu Ѩзыкъ Словѣньскъ +cv Чӑваш Чӗлхи +cy Cymraeg +da Dansk +de Deutsch +dv ދިވެހި +dz རྫོང་ཁ +ee Eʋegbe +el Ελληνικά +en English +eo Esperanto +es Español +et Eesti +eu Euskara +fa فارسی +ff Fulfulde +fi Suomi +fj Vosa Vakaviti +fo Føroyskt +fr Français +fy Frysk +ga Gaeilge +gd Gaelic +gl Galego +gn Avañe'ẽ +gu ગુજરાતી +gv Gaelg, Gailck +ha هَوُسَ +he עברית +hi हिन्दी, हिंदी +ho Hiri Motu +hr Hrvatski +ht Kreyòl Ayisyen +hu Magyar +hy Հայերեն +hz Otjiherero +ia Interlingua +id Bahasa Indonesia +ie Interlingue +ig Igbo +ii ꆇꉙ +ik Iñupiaq +io Ido +is Íslenska +it Italiano +iu ᐃᓄᒃᑎᑐᑦ +ja 日本語 +jv Basa Jawa +ka ქართული +kg KiKongo +ki Gĩkũyũ +kj Kuanyama +kk Қазақ тілі +kl kalaallisut +km ភាសាខ្មែរ +kn ಕನ್ನಡ +ko 한국어 +kr Kanuri +ks कश्मीरी}} +ku Kurdî +kv Коми Кыв +kw Kernewek +ky Кыргыз Тили +la Latine +lb Lëtzebuergesch +lg Luganda +li Limburgs +ln Lingála +lo ພາສາລາວ +lt Lietuvių Kalba +lv Latviešu Valoda +mg Malagasy Fiteny +mh Kajin M̧ajeļ +mi Te Reo Māori +mk Македонски Јазик +ml മലയാളം +mn Монгол +mr मराठी +ms بهاس ملايو +mt Malti +my ဗမာစာ +na Ekakairũ Naoero +nb Norsk bokmål +nd isiNdebele +ne नेपाली +ng Owambo +nl Nederlands +nn Norsk nynorsk +no Norsk +nr IsiNdebele +nv Diné bizaad +ny ChiCheŵa +oc Occitan +oj ᐊᓂᔑᓈᐯᒧᐎᓐ +om Afaan Oromoo +or ଓଡ଼ିଆ +os Ирон æвзаг +pa ਪੰਜਾਬੀ, +pi पाऴि +pl Polski +ps پښتو +pt Português +pt-br Português +qu Runa Simi +rm Rumantsch Grischun +rn KiRundi +ro Română +ru Русский +rw Ikinyarwanda +sa संस्कृतम् +sc Sardu +sd सिन्धी}} +se Davvisámegiella +sg Yângâ Tî Sängö +si සිංහල +sk Slovenčina +sl Slovenščina +sm Gagana fa'a Samoa +sn ChiShona +so Soomaaliga +sq Shqip +sr Српски Језик +ss SiSwati +st Sesotho +su Basa Sunda +sv Svenska +sw Kiswahili +ta தமிழ் +te తెలుగు +tg Тоҷикӣ +th ไทย +ti ትግርኛ +tk Türkmen +tl Wikang Tagalog +tn Setswana +to Faka Tonga +tr Türkçe +ts Xitsonga +tt Татарча +tw Twi +ty Reo Mā`ohi +ug Uyƣurqə +uk Українська +ur اردو +uz O'zbek +ve Tshivenḓa +vi Tiếng Việt +vo Volapük +wa Walon +wo Wollof +xh IsiXhosa +yi ייִדיש +yo Yorùbá +za Saɯ cueŋƅ +zh 中文 +zh-tw 繁體中文 +zu IsiZulu diff --git a/sources/lib/plugins/translation/lang/lv/lang.php b/sources/lib/plugins/translation/lang/lv/lang.php new file mode 100755 index 0000000..af85894 --- /dev/null +++ b/sources/lib/plugins/translation/lang/lv/lang.php @@ -0,0 +1,11 @@ + + */ +$lang['translations'] = 'Citās valodās'; +$lang['outdated'] = 'Šis tulkojums ir vecāks par oriģinālo lapu un varbūt ir novecojis.'; +$lang['diff'] = 'Redzēt, ka ir mainījies.'; +$lang['transloaded'] = 'Vieglākai tulkošanai ir ielādēts lapas saturs no %s .
    Bet varat balstīties arī uz šādiem tulkojumiem: %s.'; diff --git a/sources/lib/plugins/translation/lang/lv/settings.php b/sources/lib/plugins/translation/lang/lv/settings.php new file mode 100755 index 0000000..1b61b46 --- /dev/null +++ b/sources/lib/plugins/translation/lang/lv/settings.php @@ -0,0 +1,19 @@ + + * @author Aivars Miška + */ +$lang['translations'] = 'Ar atstarpēm atdalīts tulkojumu valodu saraksts (ISO kodi). Izņemot noklusēto valodu.'; +$lang['translationns'] = 'Ja tulkojumus vajag tikai noteiktā nodaļā, ieraksti to šeit.'; +$lang['skiptrans'] = 'Ja lapas nosaukums atbilst regulārajai izteiksmei, tulkošanas izvēlni nerādīt.'; +$lang['dropdown'] = 'Lietot izkrītošo izvēlni tulkojumu parādīšanai (ieteikt, ja ir vairāk par 5 valodām). '; +$lang['translateui'] = 'Vai svešvalodu nodaļās jāpārslēdz arī lietotāja sakarnes valoda?'; +$lang['redirectstart'] = 'Vai sākuma lapai automātiski jāpārslēdzas atkarībā no pārlūkprogrammas noteiktās valodas?'; +$lang['about'] = 'Ieraksti šeit lapu, kurā lietotājiem izskaidrotas tulkošas iespējas. Tā tiks piesaistīta valodu izvēlei.'; +$lang['localabout'] = 'Lietot "par" lapas lokalizēto versiju, nevis globālo "par" lapu.'; +$lang['checkage'] = 'Brīdināt pa varbūt novecojušiem tulkojumiem. '; +$lang['display'] = 'Norādiet, ko lietot valodas izvēlei. Ņemiet vērā, ka valodām izmantot valstu karogus neiesaka.'; +$lang['copytrans'] = 'Sākot tulkojumu, iekopēt redaktorā oriģināltekstu?'; diff --git a/sources/lib/plugins/translation/lang/lv/totranslate.txt b/sources/lib/plugins/translation/lang/lv/totranslate.txt new file mode 100755 index 0000000..c46c14e --- /dev/null +++ b/sources/lib/plugins/translation/lang/lv/totranslate.txt @@ -0,0 +1 @@ +IZLABO **Lapa nav pilnībā pārtulkota. Lūdzu palīdzi pabeigt tulkojumu!** \\ //(Izdzēs šo rindkopu, kad tulkojums pabeigts!)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/nl/lang.php b/sources/lib/plugins/translation/lang/nl/lang.php new file mode 100755 index 0000000..1864f07 --- /dev/null +++ b/sources/lib/plugins/translation/lang/nl/lang.php @@ -0,0 +1,17 @@ + + * @author Marcel Bachus + */ +$lang['translations'] = 'Vertaling van deze pagina'; +$lang['outdated'] = 'Deze vertaling is ouder dan de originele pagina en kan verouderd zijn.'; +$lang['diff'] = 'Kijk wat er is veranderd.'; +$lang['transloaded'] = 'De inhoud van vertaling van deze pagina in %s is al geladen om vertalen makkelijker te maken.
    Maar je kunt je vertaling ook baseren op één van de volgende bestaande vertalingen: %s.'; +$lang['menu'] = 'verouderde of missende vertaling'; +$lang['missing'] = 'Niet gevonden!'; +$lang['old'] = 'verouderd'; +$lang['current'] = 'laatste stand van zaken'; +$lang['path'] = 'Pad'; diff --git a/sources/lib/plugins/translation/lang/nl/settings.php b/sources/lib/plugins/translation/lang/nl/settings.php new file mode 100755 index 0000000..88dbe98 --- /dev/null +++ b/sources/lib/plugins/translation/lang/nl/settings.php @@ -0,0 +1,21 @@ + + * @author Gerrit Uitslag + * @author Marcel Bachus + */ +$lang['translations'] = 'Spatiegescheiden lijst van vertalingen (ISO codes).'; +$lang['translationns'] = 'Als je alleen vertalingen in een bepaalde namespace wenst, plaatst die dan hier.'; +$lang['skiptrans'] = 'Wanneer een paginanaam overeenstemt met deze reguliere expressie, wordt het vertaalmenu niet getoond.'; +$lang['dropdown'] = 'Gebruik een dropdownlijst om vertalingen weer te geven (aanbevolen bij meer dan 5 talen).'; +$lang['translateui'] = 'Moet de taal van de gebruikersinterface ook veranderen naar de taal van vertaalde namespace?'; +$lang['redirectstart'] = 'Moet de startpagina automatisch doorverwijzen naar de namespace van de taal die de taaldetectie van de browser doorgeeft?'; +$lang['about'] = 'Geef een paginanaam waar de vertaalfunctie wordt uitgelegd voor je gebruikers. Het zal worden gelinkt vanuit de talenkiezer.'; +$lang['localabout'] = 'Gebruik vertaalde versies van bovengenoemde vertalingsuitlegpagina (in plaats van één globale uitlegpagina).'; +$lang['checkage'] = 'Waarschuw voor mogelijk gedateerde vertalingen.'; +$lang['display'] = 'Selecteer wat je wil zien in de talenkiezer. Let op dat het gebruik van landenvlaggen in de talenkiezer niet altijd gebruiksvriendelijkheid is.'; +$lang['copytrans'] = 'De tekst in de oorspronkelijke taal naar het bewerkvenster kopiëren als er een nieuwe vertaling wordt begonnen.'; +$lang['show_path'] = 'Toon het pad naar de missende vertalings pagina?'; diff --git a/sources/lib/plugins/translation/lang/nl/totranslate.txt b/sources/lib/plugins/translation/lang/nl/totranslate.txt new file mode 100755 index 0000000..d5f8cee --- /dev/null +++ b/sources/lib/plugins/translation/lang/nl/totranslate.txt @@ -0,0 +1 @@ +FIXME **Deze pagina is nog niet volledig vertaald. Help alsjeblieft de vertaling compleet te maken.**\\ //(verwijder deze paragraaf als de vertaling is voltooid)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/pt-br/lang.php b/sources/lib/plugins/translation/lang/pt-br/lang.php new file mode 100755 index 0000000..d65b842 --- /dev/null +++ b/sources/lib/plugins/translation/lang/pt-br/lang.php @@ -0,0 +1,15 @@ + + */ +$lang['translations'] = 'Traduções desta página'; +$lang['outdated'] = 'desatualizado'; +$lang['diff'] = 'Veja o que foi mudado.'; +$lang['transloaded'] = 'O conteúdo da tradução desta página em %s foi pré-carregado para facilitar o trabalho.< br/>Mas você pode basear sua tradução nas seguintes traduções existentes: %s.'; +$lang['menu'] = 'traduções desatualizadas e inexistentes'; +$lang['missing'] = 'Inexistente!'; +$lang['current'] = 'atualizada'; +$lang['path'] = 'Caminho'; diff --git a/sources/lib/plugins/translation/lang/pt-br/settings.php b/sources/lib/plugins/translation/lang/pt-br/settings.php new file mode 100755 index 0000000..1f378eb --- /dev/null +++ b/sources/lib/plugins/translation/lang/pt-br/settings.php @@ -0,0 +1,20 @@ + + * @author Felipe Castro + */ +$lang['translations'] = 'Lista de idiomas (códigos ISO) separada por espaços. Não inclua o idioma padrão.'; +$lang['translationns'] = 'Se você deseja traduções somente abaixo de um determinado namespace, informe-o aqui.'; +$lang['skiptrans'] = 'Quando o nome-de-página estiver de acordo com esta expressão regular, não mostre o menu de tradução.'; +$lang['dropdown'] = 'Usar listagem desdobrada para mostrar as traduções (recomendado para mais que 5 línguas).'; +$lang['translateui'] = 'A interface também deve ser alterada para o idioma selecionado pelo usuário?'; +$lang['redirectstart'] = 'A página inicial deve redirecionar automaticamente para o "namespace" da língua usando a detecção de idiomas no navegador?'; +$lang['about'] = 'Informe uma página onde a funcionalidade de tradução é explicada para o usuário. Ela pode ser conectada com o selecionador de idiomas.'; +$lang['localabout'] = 'Usar versões localizadas da página "a respeito de" (em vez de uma página global "a respeito de").'; +$lang['checkage'] = 'Avisar sobre possíveis traduções desatualizadas.'; +$lang['display'] = 'Selecionar o que você gostaria de mostrar no seletor de línguas. Note que usar bandeirinhas de países para selecionar línguas não é recomendado por especialistas em usabilidade.'; +$lang['copytrans'] = 'Copiar o texto da língua original no editor quando começar uma nova tradução?'; +$lang['show_path'] = 'Mostrar o caminho na página com tradução inexistente?'; diff --git a/sources/lib/plugins/translation/lang/pt-br/totranslate.txt b/sources/lib/plugins/translation/lang/pt-br/totranslate.txt new file mode 100644 index 0000000..5329cda --- /dev/null +++ b/sources/lib/plugins/translation/lang/pt-br/totranslate.txt @@ -0,0 +1 @@ +FIXME ** Esta página não está completamente traduzida ainda. Por favor ajude a completar sua tradução.**\\ //(remova este parágrafo assim que a tradução tenha terminado)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/pt/lang.php b/sources/lib/plugins/translation/lang/pt/lang.php new file mode 100755 index 0000000..a17ab35 --- /dev/null +++ b/sources/lib/plugins/translation/lang/pt/lang.php @@ -0,0 +1,11 @@ + + * @author Alfredo Silva + */ +$lang['translations'] = 'Traduções para esta página'; +$lang['outdated'] = 'Esta tradução é mais antiga do que a página original e poderá estar desatualizada.'; +$lang['diff'] = 'Veja o que foi alterado.'; diff --git a/sources/lib/plugins/translation/lang/pt/settings.php b/sources/lib/plugins/translation/lang/pt/settings.php new file mode 100755 index 0000000..4cdd114 --- /dev/null +++ b/sources/lib/plugins/translation/lang/pt/settings.php @@ -0,0 +1,19 @@ + + * @author Alfredo Silva + */ +$lang['translations'] = 'Lista de idiomas de tradução (códigos ISO) separada por espaço.'; +$lang['translationns'] = 'Se pretender apenas as traduções abaixo de um determinado espaço de nome, coloque-as aqui.'; +$lang['skiptrans'] = 'Quando o nome da página corresponder com esta expressão regular, não mostrar o menu de tradução.'; +$lang['dropdown'] = 'Utilizar uma lista de menu para exibir as traduções (recomendado para mais de 5 idiomas).'; +$lang['translateui'] = 'O idioma da interface do utilizador também deverá ser alterado nos espaços de nome do idioma estrangeiro?'; +$lang['redirectstart'] = 'A página inicial deve redirecionar automaticamente para um espaço de nome do idioma utilizando a deteção de idioma do navegador?'; +$lang['about'] = 'Insira aqui um nome de página onde a funcionalidade de tradução é explicada aos seus utilizadores. O seletor de língua terá uma ligação para lá.'; +$lang['localabout'] = 'Utilizar versões localizadas da página sobre (em vez de uma página global sobre).'; +$lang['checkage'] = 'Avisar sobre as possíveis traduções desatualizadas.'; +$lang['display'] = 'Selecione o que gostaria de ver mostrado no seletor de linguagem. Note que usar bandeiras de países para seleção de linguagem não é recomendado por peritos de usabilidade.'; +$lang['copytrans'] = 'Copiar o texto do idioma original no editor quando iniciar uma nova tradução?'; diff --git a/sources/lib/plugins/translation/lang/ru/lang.php b/sources/lib/plugins/translation/lang/ru/lang.php new file mode 100755 index 0000000..dc85abc --- /dev/null +++ b/sources/lib/plugins/translation/lang/ru/lang.php @@ -0,0 +1,18 @@ + + * @author Vasilyy Balyasnyy + * @author Anotheroneuser + */ +$lang['translations'] = 'Перевод этой страницы'; +$lang['outdated'] = 'Этот перевод старее, чем оригинальная страница, и может быть неактуальным.'; +$lang['diff'] = 'Смотрите, что было изменено.'; +$lang['transloaded'] = 'Содержание перевода этой страницы в %s было предварительно загружено для упрощения перевода.
    Но вы можете переводить на основе следующего существующего перевода: %s.'; +$lang['menu'] = 'Устаревшие или отсутствующие переводы'; +$lang['missing'] = 'Отсутствует! '; +$lang['old'] = 'устарело'; +$lang['current'] = 'обновить (привести в актуальное состояние)'; +$lang['path'] = 'Путь'; diff --git a/sources/lib/plugins/translation/lang/ru/settings.php b/sources/lib/plugins/translation/lang/ru/settings.php new file mode 100755 index 0000000..a974b68 --- /dev/null +++ b/sources/lib/plugins/translation/lang/ru/settings.php @@ -0,0 +1,21 @@ + + * @author Aleksandr Selivanov + * @author Anotheroneuser + */ +$lang['translations'] = 'Список поддерживаемых языков перевода (двухсимвольные коды ISO). Разделите значения пробелами.'; +$lang['translationns'] = 'Если вы хотите перевести только определённое пространство имён, тогда впишите здесь его имя.'; +$lang['skiptrans'] = 'Если имя страницы соответствует этому регулярному выражению, тогда не отображать меню перевода.'; +$lang['dropdown'] = 'Использовать выпадающий список для отображения доступных переводов (рекомендуется, если более 5 переводов)'; +$lang['translateui'] = 'Должен ли язык интерфейса пользователя также переключаться согласно языку пространства имён?'; +$lang['redirectstart'] = 'Должна ли стартовая страница автоматически перенаправляться на пространство имён языка, используя автоопределение языка браузера?'; +$lang['about'] = 'Введите здесь имя страницы, на которой будут разъяснены функции перевода для ваших пользователей. Она будет связана с выбором языка.'; +$lang['localabout'] = 'Использовать локализованную версию страницы разъяснений (вместо одной глобальной страницы разъяснений).'; +$lang['checkage'] = 'Отображать предупреждение о возможной неактуальности перевода?'; +$lang['display'] = 'Выберите, что бы вы хотели видеть в поле выбора языков. Имейте в виду, что использование изображения государственного флага в поле выбора языков не было рекомендовано экспертами в области потребительского удобства. '; +$lang['copytrans'] = 'Копировать текст оригинала в окно редактирования при создании нового перевода?'; +$lang['show_path'] = 'Показывать путь на непереведённых страницах? '; diff --git a/sources/lib/plugins/translation/lang/ru/totranslate.txt b/sources/lib/plugins/translation/lang/ru/totranslate.txt new file mode 100755 index 0000000..b34588e --- /dev/null +++ b/sources/lib/plugins/translation/lang/ru/totranslate.txt @@ -0,0 +1 @@ +FIXME **Эта страница пока что не переведена полностью. Пожалуйста, помогите завершить перевод.**\\ //(Сотрите это сообщение по окончании перевода.)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/sl/lang.php b/sources/lib/plugins/translation/lang/sl/lang.php new file mode 100755 index 0000000..be8a195 --- /dev/null +++ b/sources/lib/plugins/translation/lang/sl/lang.php @@ -0,0 +1,9 @@ +izvorne strani in je zato lahko zastarel.'; +$lang['diff'] = 'Oglejte si spremembe.'; diff --git a/sources/lib/plugins/translation/lang/sl/settings.php b/sources/lib/plugins/translation/lang/sl/settings.php new file mode 100755 index 0000000..6bdcff4 --- /dev/null +++ b/sources/lib/plugins/translation/lang/sl/settings.php @@ -0,0 +1,18 @@ + + * @author Matej Urbančič + */ +$lang['translations'] = 'Space separated list of translation languages (ISO codes).'; +$lang['translationns'] = 'If you only want translations below a certain namespace, put it here.'; +$lang['skiptrans'] = 'When the pagename matches this regular expression, don\'t show the translation menu.'; +$lang['dropdown'] = 'Use a dropdown list to display the translations (recommended for more than 5 languages).'; +$lang['translateui'] = 'Should the language of the user interface be switched in foreign language namespaces, too?'; +$lang['redirectstart'] = 'Should the start page automatically redirect into a language namespace using browser language detection?'; +$lang['about'] = 'Enter a pagename here where the translation feature is explained for your users. It will be linked from the language selector.'; +$lang['localabout'] = 'Uporabi prevedeno različico strani o vstavku (namesto splošne strani).'; +$lang['checkage'] = 'Opozori o zastarelem prevodu.'; +$lang['display'] = 'Izbor možnosti za prikaz jezika v izbirniku jezika. Izbor zastave jezika v izbiri ni priporočen.'; diff --git a/sources/lib/plugins/translation/lang/tr/lang.php b/sources/lib/plugins/translation/lang/tr/lang.php new file mode 100755 index 0000000..9f447b6 --- /dev/null +++ b/sources/lib/plugins/translation/lang/tr/lang.php @@ -0,0 +1,10 @@ + + */ +$lang['translations'] = 'Bu sayfanın çevirileri'; +$lang['outdated'] = 'Bu çeviri orjinal sayfadan daha eski tarihli. Dolayısıyla güncel olmayabilir.'; +$lang['diff'] = 'Nelerin değiştiğini görmek için tıklayın.'; diff --git a/sources/lib/plugins/translation/lang/tr/settings.php b/sources/lib/plugins/translation/lang/tr/settings.php new file mode 100755 index 0000000..368ddd4 --- /dev/null +++ b/sources/lib/plugins/translation/lang/tr/settings.php @@ -0,0 +1,15 @@ + + */ +$lang['translations'] = 'Tercüme dillerinin listesi. (boşluk ile ayrılmış, ISO kodları)'; +$lang['translationns'] = 'Eğer tercümelerin bir isim alanın (namespace) altında olmasını istiyorsanız, buraya yazın.'; +$lang['skiptrans'] = 'İsim alanı (Namespace) buradaki tanıma uyduğunda, tercüme arayüzünü gösterme.'; +$lang['dropdown'] = 'Dilleri listelemek için açılır arayüz kullan. (5\'ten fazla dil olduğunda kullanılması önerilir)'; +$lang['localabout'] = 'Bir tane genel hakkında sayfası yerine, yerelleştirilmiş hakkında sayfaları kullan. '; +$lang['checkage'] = 'Eski tarihli tercümeler hakkında uyarı göster.'; +$lang['display'] = 'Dil seçiminde görünmesini istediklerinizi seçin. Lütfen unutmayın, dil seçiminde ülke bayrağı kullanmak, erişilebilirlik uzmanları tarafından tavsiye edilmez.'; +$lang['copytrans'] = 'Yeni tercümeye başlarken orjinal dildeki metin, düzenleme ekranına kopyalansın mı?'; diff --git a/sources/lib/plugins/translation/lang/tr/totranslate.txt b/sources/lib/plugins/translation/lang/tr/totranslate.txt new file mode 100755 index 0000000..e281874 --- /dev/null +++ b/sources/lib/plugins/translation/lang/tr/totranslate.txt @@ -0,0 +1 @@ +FIXME **Bu sayfanın çevirisi henüz tamamlanmadı. Lütfen çevirinin tamamlanmasına yardımcı olun.**\\ //(Çeviri tamamlandığında bu paragrafı silin)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/lang/uk/lang.php b/sources/lib/plugins/translation/lang/uk/lang.php new file mode 100755 index 0000000..06e1938 --- /dev/null +++ b/sources/lib/plugins/translation/lang/uk/lang.php @@ -0,0 +1,5 @@ +оригінальна сторінка і може бути не актуальним.'; +$lang['diff'] = 'Дивіться що було змінено.'; diff --git a/sources/lib/plugins/translation/lang/uk/settings.php b/sources/lib/plugins/translation/lang/uk/settings.php new file mode 100755 index 0000000..11e87a0 --- /dev/null +++ b/sources/lib/plugins/translation/lang/uk/settings.php @@ -0,0 +1,18 @@ + + */ + +$lang['translations'] = 'Список підтримуваних мов перекладу (двохсимвольні коди ISO). Розділіть значення комами або пробілами.'; +$lang['translationns'] = 'Якщо ви хочете перекласти тільки визначений Простір імен, тоді впишіть тут його ім\'я.'; +$lang['skiptrans'] = 'Якщо ім\'я сторінки відповідає цьому регулярному виразу, тоді не відображувати меню перекладів.'; +$lang['dropdown'] = 'Використовувати випадаючий список для відображення доступних перекладів (рекомендується, якщо більше 5 перекладів)'; +$lang['translateui'] = 'Чи повинна мова інтерфейсу користувача також перемикатись відповідно до мови Простору імен?'; +$lang['redirectstart'] = 'Чи повинна стартова сторінка автоматично перенаправлятись на Простір імен мови, використовуючи детектекцію мови оглядача?'; +$lang['about'] = 'Введіть тут ім\'я сторінки, на якій буде роз\'яснено функції перекладу для ваших користувачів. Вона буде пов\'язана з вибором мови.'; +$lang['localabout'] = 'Використовувати локалізовану версію сторінки роз\'яснень (замість однієї глобальної сторінки роз\'яснень).'; +$lang['checkage'] = 'Відображувати попередження про можливу не актуальність перекладу сторінок?'; +$lang['display'] = 'Оберіть що б ви хотіли відображувати в перемикачі мов. Примітка: використовувати прапор країни для перемикача мов не рекомендується експертами по зручності використання інтерфейсу.'; +?> diff --git a/sources/lib/plugins/translation/lang/zh-tw/lang.php b/sources/lib/plugins/translation/lang/zh-tw/lang.php new file mode 100755 index 0000000..7b9f694 --- /dev/null +++ b/sources/lib/plugins/translation/lang/zh-tw/lang.php @@ -0,0 +1,6 @@ +原始頁面舊,可能已過時。'; +$lang['diff'] = '檢視變更。'; + diff --git a/sources/lib/plugins/translation/lang/zh-tw/settings.php b/sources/lib/plugins/translation/lang/zh-tw/settings.php new file mode 100755 index 0000000..7cc76dc --- /dev/null +++ b/sources/lib/plugins/translation/lang/zh-tw/settings.php @@ -0,0 +1,16 @@ + + * @author oott123 + */ +$lang['translations'] = '本页面的其他翻译'; +$lang['outdated'] = '翻译跟原始页面比较起来显得有些陈旧,所以可能失效。'; +$lang['diff'] = '查看更新'; +$lang['transloaded'] = '此页面的 %s 已经由 easy translation 预翻译。
    但你可以以以下现存的语言为基础翻译你的版本。%s'; diff --git a/sources/lib/plugins/translation/lang/zh/settings.php b/sources/lib/plugins/translation/lang/zh/settings.php new file mode 100755 index 0000000..229337c --- /dev/null +++ b/sources/lib/plugins/translation/lang/zh/settings.php @@ -0,0 +1,19 @@ + + * @author oott123 + */ +$lang['translations'] = '使用空格分隔的翻译语言列表(ISO 码)。请勿填入默认语言。'; +$lang['translationns'] = '如果您只希望本插件作用于某个特定的名称空间,请在这里写上其名称。'; +$lang['skiptrans'] = '当页面名称与此正则匹配时,不要显示翻译菜单。'; +$lang['dropdown'] = '使用下拉列表显示翻译语言(5+语言时建议启用)'; +$lang['translateui'] = '整个用户界面也跟随某个页面的翻译语言而改变吗?'; +$lang['redirectstart'] = '首页是否根据浏览器语言自动切换到相应语言?'; +$lang['about'] = '请在此输入向用户解释翻译功能的页面的名称空间。它的链接将出现在语言选择器上。'; +$lang['localabout'] = '使用本地化的关于页面(而不是一个全局关于页面)。'; +$lang['checkage'] = '警告:可能过时了的翻译。'; +$lang['display'] = '选择你想在选择器中显示什么。注意可用性专家并不推荐使用国旗选择语言。'; +$lang['copytrans'] = '开始新翻译的时候在编辑器中复制原始语言版本?'; diff --git a/sources/lib/plugins/translation/lang/zh/totranslate.txt b/sources/lib/plugins/translation/lang/zh/totranslate.txt new file mode 100755 index 0000000..aaa32f9 --- /dev/null +++ b/sources/lib/plugins/translation/lang/zh/totranslate.txt @@ -0,0 +1 @@ +等待修复 **此页面没有被翻译完全。请帮助翻译本页。**\\ //(当全文翻译完时请移除这个段落。)// \ No newline at end of file diff --git a/sources/lib/plugins/translation/manager.dat b/sources/lib/plugins/translation/manager.dat new file mode 100644 index 0000000..1aa9d57 --- /dev/null +++ b/sources/lib/plugins/translation/manager.dat @@ -0,0 +1,2 @@ +downloadurl=https://github.com/splitbrain/dokuwiki-plugin-translation/zipball/master +installed=Sun, 20 Nov 2016 19:29:27 +0000 diff --git a/sources/lib/plugins/translation/plugin.info.txt b/sources/lib/plugins/translation/plugin.info.txt new file mode 100755 index 0000000..3b53385 --- /dev/null +++ b/sources/lib/plugins/translation/plugin.info.txt @@ -0,0 +1,8 @@ +# General Plugin Info do not edit +base translation +author Andreas Gohr +email andi@splitbrain.org +date 2016-07-18 +name Translation Plugin +desc Supports the easy setup of a multi-language wiki. +url http://www.dokuwiki.org/plugin:translation diff --git a/sources/lib/plugins/translation/print.css b/sources/lib/plugins/translation/print.css new file mode 100755 index 0000000..c2fd328 --- /dev/null +++ b/sources/lib/plugins/translation/print.css @@ -0,0 +1 @@ +.dokuwiki div.plugin_translation { display: none } diff --git a/sources/lib/plugins/translation/script.js b/sources/lib/plugins/translation/script.js new file mode 100755 index 0000000..819b80e --- /dev/null +++ b/sources/lib/plugins/translation/script.js @@ -0,0 +1,20 @@ +/** + * Remove go button from translation dropdown + */ +jQuery(function(){ + var $frm = jQuery('#translation__dropdown'); + if(!$frm.length) return; + $frm.find('input[name=go]').hide(); + $frm.find('select[name=id]').change(function(){ + var id = jQuery(this).val(); + // this should hopefully detect rewriting good enough: + var action = $frm.attr('action'); + if(action.substr(action.length-1) == '/'){ + var link = action + id; + }else{ + var link = action + '?id=' + id; + } + + window.location.href= link; + }); +}); diff --git a/sources/lib/plugins/translation/style.css b/sources/lib/plugins/translation/style.css new file mode 100755 index 0000000..14e54eb --- /dev/null +++ b/sources/lib/plugins/translation/style.css @@ -0,0 +1,97 @@ +.dokuwiki div.plugin_translation { + float: right; + font-size: 95%; + padding-right: 0.1em; + margin : 0.0em 0 0.3em 0; + text-align: right; +} + +/* List */ + +.dokuwiki div.plugin_translation ul { + padding: 0; + margin: 0; +} +.dokuwiki div.plugin_translation ul li { + float: left; + list-style-type: none; + padding: 0; + margin: 0.2em 0 0 0; +} +.dokuwiki div.plugin_translation ul li img { + margin: -0.1em 0.2em; +} + +.dokuwiki div.plugin_translation ul li a.wikilink1:link, +.dokuwiki div.plugin_translation ul li a.wikilink1:hover, +.dokuwiki div.plugin_translation ul li a.wikilink1:active, +.dokuwiki div.plugin_translation ul li a.wikilink1:visited { + background-color: #000080; + color: #fff; + text-decoration:none; + padding: 0 0.2em; + margin: 0.1em 0.2em; + border: none !important; +} + +.dokuwiki div.plugin_translation ul li a.wikilink2:link, +.dokuwiki div.plugin_translation ul li a.wikilink2:hover, +.dokuwiki div.plugin_translation ul li a.wikilink2:active, +.dokuwiki div.plugin_translation ul li a.wikilink2:visited { + background-color: #808080; + color: #fff; + text-decoration:none; + padding: 0 0.2em; + margin: 0.1em 0.2em; + border: none !important; +} + + +/* Dropdown */ + +.dokuwiki div.plugin_translation select, +.dokuwiki div.plugin_translation input { + border: none; + background-color: #ccc; +} + +.dokuwiki div.plugin_translation option.flag { + padding-left: 18px; + background-repeat: no-repeat; + background-position: left center; +} + +.dokuwiki div.plugin_translation select.wikilink1, +.dokuwiki div.plugin_translation option.wikilink1 { + color: #000080; + text-align: center; +} + +.dokuwiki div.plugin_translation select.wikilink2, +.dokuwiki div.plugin_translation option.wikilink2 { + color: #808080; + text-align: center; +} + +/* flags for non-existing pages */ +.dokuwiki div.plugin_translation img.wikilink2, +.dokuwiki div.plugin_translation .wikilink2 img { + opacity: 0.5; +} + +table#outdated_translations td { + padding-left: 3px; + padding-right: 3px; +} + +table#outdated_translations td.missing { + background-color: #ff6666; +} + +table#outdated_translations td.outdated { + background-color: #ffff66; +} + +table#outdated_translations td.current { + background-color: #00CC00; +} diff --git a/sources/lib/plugins/translation/syntax/notrans.php b/sources/lib/plugins/translation/syntax/notrans.php new file mode 100755 index 0000000..b8cb9cd --- /dev/null +++ b/sources/lib/plugins/translation/syntax/notrans.php @@ -0,0 +1,73 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +class syntax_plugin_translation_notrans extends DokuWiki_Syntax_Plugin { + + /** + * for th helper plugin + */ + var $hlp = null; + + /** + * Constructor. Load helper plugin + */ + function __construct(){ + $this->hlp =& plugin_load('helper', 'translation'); + } + + /** + * What kind of syntax are we? + */ + function getType(){ + return 'substition'; + } + + /** + * Where to sort in? + */ + function getSort(){ + return 155; + } + + + /** + * Connect pattern to lexer + */ + function connectTo($mode) { + $this->Lexer->addSpecialPattern('~~NOTRANS~~',$mode,'plugin_translation_notrans'); + } + + + /** + * Handle the match + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + return array('notrans'); + } + + /** + * Create output + */ + function render($format, Doku_Renderer $renderer, $data) { + // store info in metadata + if($format == 'metadata'){ + $renderer->meta['plugin']['translation']['notrans'] = true; + } + return false; + } + + // for backward compatibility + function _showTranslations(){ + return $this->hlp->showTranslations(); + } + +} + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/sources/lib/plugins/translation/syntax/trans.php b/sources/lib/plugins/translation/syntax/trans.php new file mode 100755 index 0000000..bbd4645 --- /dev/null +++ b/sources/lib/plugins/translation/syntax/trans.php @@ -0,0 +1,57 @@ + + */ +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +class syntax_plugin_translation_trans extends DokuWiki_Syntax_Plugin { + /** + * What kind of syntax are we? + */ + function getType() { + return 'substition'; + } + + /** + * Where to sort in? + */ + function getSort() { + return 155; + } + + /** + * Connect pattern to lexer + */ + function connectTo($mode) { + $this->Lexer->addSpecialPattern('~~TRANS~~', $mode, 'plugin_translation_trans'); + } + + /** + * Handle the match + */ + function handle($match, $state, $pos, Doku_Handler $handler) { + return array(); + } + + /** + * Create output + */ + function render($format, Doku_Renderer $renderer, $data) { + if($format != 'xhtml') return false; + + // disable caching + $renderer->nocache(); + + /** @var helper_plugin_translation $hlp */ + $hlp = plugin_load('helper', 'translation'); + $renderer->doc .= $hlp->showTranslations(); + return true; + } + +} + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/sources/lib/plugins/upgrade/README b/sources/lib/plugins/upgrade/README new file mode 100755 index 0000000..079d627 --- /dev/null +++ b/sources/lib/plugins/upgrade/README @@ -0,0 +1,25 @@ +upgrade Plugin for DokuWiki + +All documentation for this plugin can be found at +http://www.dokuwiki.org/plugin:upgrade + +If you install this plugin manually, make sure it is installed in +lib/plugins/upgrade/ - if the folder is called different it +will not work! + +Please refer to http://www.dokuwiki.org/plugins for additional info +on how to install plugins in DokuWiki. + +---- +Copyright (C) Andreas Gohr + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See the COPYING file in your DokuWiki folder for details diff --git a/sources/lib/plugins/upgrade/VerboseTarLib.class.php b/sources/lib/plugins/upgrade/VerboseTarLib.class.php new file mode 100755 index 0000000..74103b1 --- /dev/null +++ b/sources/lib/plugins/upgrade/VerboseTarLib.class.php @@ -0,0 +1,599 @@ + + * @author Bouchon (Maxg) + * @license GPL 2 + */ +class VerboseTar { + + const COMPRESS_AUTO = 0; + const COMPRESS_NONE = 1; + const COMPRESS_GZIP = 2; + const COMPRESS_BZIP = 3; + + protected $file = ''; + protected $comptype = self::COMPRESS_AUTO; + protected $fh; + protected $memory = ''; + protected $closed = true; + protected $writeaccess = false; + + /** + * Open an existing TAR file for reading + * + * @param string $file + * @param int $comptype + * @throws VerboseTarIOException + */ + public function open($file, $comptype = self::COMPRESS_AUTO) { + // determine compression + if($comptype == self::COMPRESS_AUTO) $comptype = $this->filetype($file); + $this->compressioncheck($comptype); + + $this->comptype = $comptype; + $this->file = $file; + + if($this->comptype === self::COMPRESS_GZIP) { + $this->fh = @gzopen($this->file, 'rb'); + } elseif($this->comptype === self::COMPRESS_BZIP) { + $this->fh = @bzopen($this->file, 'r'); + } else { + $this->fh = @fopen($this->file, 'rb'); + } + + if(!$this->fh) throw new VerboseTarIOException('Could not open file for reading: '.$this->file); + $this->closed = false; + } + + /** + * Read the contents of a TAR archive + * + * This function lists the files stored in the archive, and returns an indexed array of associative + * arrays containing for each file the following information: + * + * checksum Tar Checksum of the file + * filename The full name of the stored file (up to 100 c.) + * mode UNIX permissions in DECIMAL, not octal + * uid The Owner ID + * gid The Group ID + * size Uncompressed filesize + * mtime Timestamp of last modification + * typeflag Empty for files, set for folders + * link Is it a symlink? + * uname Owner name + * gname Group name + * + * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams. + * Reopen the file with open() again if you want to do additional operations + */ + public function contents() { + if($this->closed || !$this->file) throw new VerboseTarIOException('Can not read from a closed archive'); + + $result = array(); + while($read = $this->readbytes(512)) { + $header = $this->parseHeader($read); + if(!is_array($header)) continue; + + $this->skipbytes(ceil($header['size'] / 512) * 512); + $result[] = $header; + } + + $this->close(); + return $result; + } + + /** + * Extract an existing TAR archive + * + * The $strip parameter allows you to strip a certain number of path components from the filenames + * found in the tar file, similar to the --strip-components feature of GNU tar. This is triggered when + * an integer is passed as $strip. + * Alternatively a fixed string prefix may be passed in $strip. If the filename matches this prefix, + * the prefix will be stripped. It is recommended to give prefixes with a trailing slash. + * + * By default this will extract all files found in the archive. You can restrict the output using the $include + * and $exclude parameter. Both expect a full regular expression (including delimiters and modifiers). If + * $include is set only files that match this expression will be extracted. Files that match the $exclude + * expression will never be extracted. Both parameters can be used in combination. Expressions are matched against + * stripped filenames as described above. + * + * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams. + * Reopen the file with open() again if you want to do additional operations + * + * @param string $outdir the target directory for extracting + * @param int|string $strip either the number of path components or a fixed prefix to strip + * @param string $exclude a regular expression of files to exclude + * @param string $include a regular expression of files to include + * @throws VerboseTarIOException + * @return array + */ + function extract($outdir, $strip = '', $exclude = '', $include = '') { + if($this->closed || !$this->file) throw new VerboseTarIOException('Can not read from a closed archive'); + + $outdir = rtrim($outdir, '/'); + io_mkdir_p($outdir); + $striplen = strlen($strip); + + $extracted = array(); + + while($dat = $this->readbytes(512)) { + // read the file header + $header = $this->parseHeader($dat); + if(!is_array($header)) continue; + if(!$header['filename']) continue; + + // strip prefix + $filename = $this->cleanPath($header['filename']); + if(is_int($strip)) { + // if $strip is an integer we strip this many path components + $parts = explode('/', $filename); + if(!$header['typeflag']) { + $base = array_pop($parts); // keep filename itself + } else { + $base = ''; + } + $filename = join('/', array_slice($parts, $strip)); + if($base) $filename .= "/$base"; + } else { + // ifstrip is a string, we strip a prefix here + if(substr($filename, 0, $striplen) == $strip) $filename = substr($filename, $striplen); + } + + // check if this should be extracted + $extract = true; + if(!$filename) { + $extract = false; + } else { + if($include) { + if(preg_match($include, $filename)) { + $extract = true; + } else { + $extract = false; + } + } + if($exclude && preg_match($exclude, $filename)) { + $extract = false; + } + } + + // Now do the extraction (or not) + if($extract) { + $extracted[] = $header; + + $output = "$outdir/$filename"; + $directory = ($header['typeflag']) ? $output : dirname($output); + io_mkdir_p($directory); + + // print status + admin_plugin_upgrade::_say(hsc($filename)); + + // is this a file? + if(!$header['typeflag']) { + $fp = fopen($output, "wb"); + if(!$fp) throw new VerboseTarIOException('Could not open file for writing: '.$output); + + $size = floor($header['size'] / 512); + for($i = 0; $i < $size; $i++) { + fwrite($fp, $this->readbytes(512), 512); + } + if(($header['size'] % 512) != 0) fwrite($fp, $this->readbytes(512), $header['size'] % 512); + + fclose($fp); + touch($output, $header['mtime']); + chmod($output, $header['perm']); + } else { + $this->skipbytes(ceil($header['size'] / 512) * 512); // the size is usually 0 for directories + } + } else { + $this->skipbytes(ceil($header['size'] / 512) * 512); + } + } + + $this->close(); + return $extracted; + } + + /** + * Create a new TAR file + * + * If $file is empty, the tar file will be created in memory + * + * @param string $file + * @param int $comptype + * @param int $complevel + * @throws VerboseTarIOException + * @throws VerboseTarIllegalCompressionException + */ + public function create($file = '', $comptype = self::COMPRESS_AUTO, $complevel = 9) { + // determine compression + if($comptype == self::COMPRESS_AUTO) $comptype = $this->filetype($file); + $this->compressioncheck($comptype); + + $this->comptype = $comptype; + $this->file = $file; + $this->memory = ''; + $this->fh = 0; + + if($this->file) { + if($this->comptype === self::COMPRESS_GZIP) { + $this->fh = @gzopen($this->file, 'wb'.$complevel); + } elseif($this->comptype === self::COMPRESS_BZIP) { + $this->fh = @bzopen($this->file, 'w'); + } else { + $this->fh = @fopen($this->file, 'wb'); + } + + if(!$this->fh) throw new VerboseTarIOException('Could not open file for writing: '.$this->file); + } + $this->writeaccess = true; + $this->closed = false; + } + + /** + * Add a file to the current TAR archive using an existing file in the filesystem + * + * @todo handle directory adding + * @param string $file the original file + * @param string $name the name to use for the file in the archive + * @throws VerboseTarIOException + */ + public function addFile($file, $name = '') { + if($this->closed) throw new VerboseTarIOException('Archive has been closed, files can no longer be added'); + + if(!$name) $name = $file; + $name = $this->cleanPath($name); + + $fp = fopen($file, 'rb'); + if(!$fp) throw new VerboseTarIOException('Could not open file for reading: '.$file); + + // create file header and copy all stat info from the original file + clearstatcache(false, $file); + $stat = stat($file); + $this->writeFileHeader( + $name, + $stat[4], + $stat[5], + fileperms($file), + filesize($file), + filemtime($file) + ); + + while(!feof($fp)) { + $data = fread($fp, 512); + if($data === false) break; + if($data === '') break; + $packed = pack("a512", $data); + $this->writebytes($packed); + } + fclose($fp); + } + + /** + * Add a file to the current TAR archive using the given $data as content + * + * @param string $name + * @param string $data + * @param int $uid + * @param int $gid + * @param int $perm + * @param int $mtime + * @throws VerboseTarIOException + */ + public function addData($name, $data, $uid = 0, $gid = 0, $perm = 0666, $mtime = 0) { + if($this->closed) throw new VerboseTarIOException('Archive has been closed, files can no longer be added'); + + $name = $this->cleanPath($name); + $len = strlen($data); + + $this->writeFileHeader( + $name, + $uid, + $gid, + $perm, + $len, + ($mtime) ? $mtime : time() + ); + + for($s = 0; $s < $len; $s += 512) { + $this->writebytes(pack("a512", substr($data, $s, 512))); + } + } + + /** + * Add the closing footer to the archive if in write mode, close all file handles + * + * After a call to this function no more data can be added to the archive, for + * read access no reading is allowed anymore + * + * "Physically, an archive consists of a series of file entries terminated by an end-of-archive entry, which + * consists of two 512 blocks of zero bytes" + * + * @link http://www.gnu.org/software/tar/manual/html_chapter/tar_8.html#SEC134 + */ + public function close() { + if($this->closed) return; // we did this already + + // write footer + if($this->writeaccess) { + $this->writebytes(pack("a512", "")); + $this->writebytes(pack("a512", "")); + } + + // close file handles + if($this->file) { + if($this->comptype === self::COMPRESS_GZIP) { + gzclose($this->fh); + } elseif($this->comptype === self::COMPRESS_BZIP) { + bzclose($this->fh); + } else { + fclose($this->fh); + } + + $this->file = ''; + $this->fh = 0; + } + + $this->closed = true; + } + + /** + * Returns the created in-memory archive data + * + * This implicitly calls close() on the Archive + */ + public function getArchive($comptype = self::COMPRESS_AUTO, $complevel = 9) { + $this->close(); + + if($comptype === self::COMPRESS_AUTO) $comptype = $this->comptype; + $this->compressioncheck($comptype); + + if($comptype === self::COMPRESS_GZIP) return gzcompress($this->memory, $complevel); + if($comptype === self::COMPRESS_BZIP) return bzcompress($this->memory); + return $this->memory; + } + + /** + * Save the created in-memory archive data + * + * Note: It more memory effective to specify the filename in the create() function and + * let the library work on the new file directly. + * + * @param $file + * @param int $comptype + * @param int $complevel + * @throws VerboseTarIOException + */ + public function save($file, $comptype = self::COMPRESS_AUTO, $complevel = 9) { + if($comptype === self::COMPRESS_AUTO) $comptype = $this->filetype($file); + + if(!file_put_contents($file, $this->getArchive($comptype, $complevel))) { + throw new VerboseTarIOException('Could not write to file: '.$file); + } + } + + /** + * Read from the open file pointer + * + * @param int $length bytes to read + * @return string + */ + protected function readbytes($length) { + if($this->comptype === self::COMPRESS_GZIP) { + return @gzread($this->fh, $length); + } elseif($this->comptype === self::COMPRESS_BZIP) { + return @bzread($this->fh, $length); + } else { + return @fread($this->fh, $length); + } + } + + /** + * Write to the open filepointer or memory + * + * @param string $data + * @throws VerboseTarIOException + * @return int number of bytes written + */ + protected function writebytes($data) { + if(!$this->file) { + $this->memory .= $data; + $written = strlen($data); + } elseif($this->comptype === self::COMPRESS_GZIP) { + $written = @gzwrite($this->fh, $data); + } elseif($this->comptype === self::COMPRESS_BZIP) { + $written = @bzwrite($this->fh, $data); + } else { + $written = @fwrite($this->fh, $data); + } + if($written === false) throw new VerboseTarIOException('Failed to write to archive stream'); + return $written; + } + + /** + * Skip forward in the open file pointer + * + * This is basically a wrapper around seek() (and a workaround for bzip2) + * + * @param int $bytes seek to this position + */ + function skipbytes($bytes) { + if($this->comptype === self::COMPRESS_GZIP) { + @gzseek($this->fh, $bytes, SEEK_CUR); + } elseif($this->comptype === self::COMPRESS_BZIP) { + // there is no seek in bzip2, we simply read on + @bzread($this->fh, $bytes); + } else { + @fseek($this->fh, $bytes, SEEK_CUR); + } + } + + /** + * Write a file header + * + * @param string $name + * @param int $uid + * @param int $gid + * @param int $perm + * @param int $size + * @param int $mtime + * @param string $typeflag Set to '5' for directories + */ + protected function writeFileHeader($name, $uid, $gid, $perm, $size, $mtime, $typeflag = '') { + // handle filename length restrictions + $prefix = ''; + $namelen = strlen($name); + if($namelen > 100) { + $file = basename($name); + $dir = dirname($name); + if(strlen($file) > 100 || strlen($dir) > 155) { + // we're still too large, let's use GNU longlink + $this->writeFileHeader('././@LongLink', 0, 0, 0, $namelen, 0, 'L'); + for($s = 0; $s < $namelen; $s += 512) { + $this->writebytes(pack("a512", substr($name, $s, 512))); + } + $name = substr($name, 0, 100); // cut off name + } else { + // we're fine when splitting, use POSIX ustar + $prefix = $dir; + $name = $file; + } + } + + // values are needed in octal + $uid = sprintf("%6s ", decoct($uid)); + $gid = sprintf("%6s ", decoct($gid)); + $perm = sprintf("%6s ", decoct($perm)); + $size = sprintf("%11s ", decoct($size)); + $mtime = sprintf("%11s", decoct($mtime)); + + $data_first = pack("a100a8a8a8a12A12", $name, $perm, $uid, $gid, $size, $mtime); + $data_last = pack("a1a100a6a2a32a32a8a8a155a12", $typeflag, '', 'ustar', '', '', '', '', '', $prefix, ""); + + for($i = 0, $chks = 0; $i < 148; $i++) + $chks += ord($data_first[$i]); + + for($i = 156, $chks += 256, $j = 0; $i < 512; $i++, $j++) + $chks += ord($data_last[$j]); + + $this->writebytes($data_first); + + $chks = pack("a8", sprintf("%6s ", decoct($chks))); + $this->writebytes($chks.$data_last); + } + + /** + * Decode the given tar file header + * + * @param string $block a 512 byte block containign the header data + * @return array|bool + */ + protected function parseHeader($block) { + if(!$block || strlen($block) != 512) return false; + + for($i = 0, $chks = 0; $i < 148; $i++) + $chks += ord($block[$i]); + + for($i = 156, $chks += 256; $i < 512; $i++) + $chks += ord($block[$i]); + + $header = @unpack("a100filename/a8perm/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor/a155prefix", $block); + if(!$header) return false; + + $return['checksum'] = OctDec(trim($header['checksum'])); + if($return['checksum'] != $chks) return false; + + $return['filename'] = trim($header['filename']); + $return['perm'] = OctDec(trim($header['perm'])); + $return['uid'] = OctDec(trim($header['uid'])); + $return['gid'] = OctDec(trim($header['gid'])); + $return['size'] = OctDec(trim($header['size'])); + $return['mtime'] = OctDec(trim($header['mtime'])); + $return['typeflag'] = $header['typeflag']; + $return['link'] = trim($header['link']); + $return['uname'] = trim($header['uname']); + $return['gname'] = trim($header['gname']); + + // Handle ustar Posix compliant path prefixes + if(trim($header['prefix'])) $return['filename'] = trim($header['prefix']).'/'.$return['filename']; + + // Handle Long-Link entries from GNU Tar + if($return['typeflag'] == 'L') { + // following data block(s) is the filename + $filename = trim($this->readbytes(ceil($header['size'] / 512) * 512)); + // next block is the real header + $block = $this->readbytes(512); + $return = $this->parseHeader($block); + // overwrite the filename + $return['filename'] = $filename; + } + + return $return; + } + + /** + * Cleans up a path and removes relative parts, also strips leading slashes + * + * @param string $p_dir + * @return string + */ + public function cleanPath($path) { + $path=explode('/', $path); + $newpath=array(); + foreach($path as $p) { + if ($p === '' || $p === '.') continue; + if ($p==='..') { + array_pop($newpath); + continue; + } + array_push($newpath, $p); + } + return trim(implode('/', $newpath), '/'); + } + + /** + * Checks if the given compression type is available and throws an exception if not + * + * @param $comptype + * @throws VerboseTarIllegalCompressionException + */ + protected function compressioncheck($comptype) { + if($comptype === self::COMPRESS_GZIP && !function_exists('gzopen')) { + throw new VerboseTarIllegalCompressionException('No gzip support available'); + } + + if($comptype === self::COMPRESS_BZIP && !function_exists('bzopen')) { + throw new VerboseTarIllegalCompressionException('No bzip2 support available'); + } + } + + /** + * Guesses the wanted compression from the given filename extension + * + * You don't need to call this yourself. It's used when you pass self::COMPRESS_AUTO somewhere + * + * @param string $file + * @return int + */ + public function filetype($file) { + $file = strtolower($file); + if(substr($file, -3) == '.gz' || substr($file, -4) == '.tgz') { + $comptype = self::COMPRESS_GZIP; + } elseif(substr($file, -4) == '.bz2' || substr($file, -4) == '.tbz') { + $comptype = self::COMPRESS_BZIP; + } else { + $comptype = self::COMPRESS_NONE; + } + return $comptype; + } +} + +class VerboseTarIOException extends Exception { +} + +class VerboseTarIllegalCompressionException extends Exception { +} diff --git a/sources/lib/plugins/upgrade/admin.php b/sources/lib/plugins/upgrade/admin.php new file mode 100755 index 0000000..e5681c1 --- /dev/null +++ b/sources/lib/plugins/upgrade/admin.php @@ -0,0 +1,508 @@ + + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/'); +require_once DOKU_PLUGIN.'admin.php'; +require_once DOKU_PLUGIN.'upgrade/VerboseTarLib.class.php'; + +class admin_plugin_upgrade extends DokuWiki_Admin_Plugin { + private $tgzurl; + private $tgzfile; + private $tgzdir; + private $tgzversion; + private $pluginversion; + + protected $haderrors = false; + + public function __construct() { + global $conf; + + $branch = 'stable'; + + $this->tgzurl = "https://github.com/splitbrain/dokuwiki/archive/$branch.tar.gz"; + $this->tgzfile = $conf['tmpdir'].'/dokuwiki-upgrade.tgz'; + $this->tgzdir = $conf['tmpdir'].'/dokuwiki-upgrade/'; + $this->tgzversion = "https://raw.githubusercontent.com/splitbrain/dokuwiki/$branch/VERSION"; + $this->pluginversion = "https://raw.githubusercontent.com/splitbrain/dokuwiki-plugin-upgrade/master/plugin.info.txt"; + } + + public function getMenuSort() { + return 555; + } + + public function handle() { + if($_REQUEST['step'] && !checkSecurityToken()) { + unset($_REQUEST['step']); + } + } + + public function html() { + $abrt = false; + $next = false; + + echo '

    '.$this->getLang('menu').'

    '; + + global $conf; + if($conf['safemodehack']) { + $abrt = false; + $next = false; + echo $this->locale_xhtml('safemode'); + return; + } + + $this->_say('
    '); + // enable auto scroll + ?> + + _stepit($abrt, $next); + + // disable auto scroll + ?> + + _say('
    '); + + $careful = ''; + if($this->haderrors) { + echo '
    '.$this->getLang('careful').'
    '; + $careful = 'careful'; + } + + $action = script(); + echo '
    '; + echo ''; + echo ''; + echo ''; + if($next) echo ''; + if($abrt) echo ''; + echo '
    '; + + $this->_progress($next); + } + + /** + * Display a progress bar of all steps + * + * @param string $next the next step + */ + private function _progress($next) { + $steps = array('version', 'download', 'unpack', 'check', 'upgrade'); + $active = true; + $count = 0; + + echo '
      '; + foreach($steps as $step) { + $count++; + if($step == $next) $active = false; + if($active) { + echo '
    1. '; + echo ''; + } else { + echo '
    2. '; + echo ''.$count.''; + } + + echo ''.$this->getLang('step_'.$step).''; + echo '
    3. '; + } + echo '
    '; + } + + /** + * Decides the current step and executes it + * + * @param bool $abrt + * @param bool $next + */ + private function _stepit(&$abrt, &$next) { + + if(isset($_REQUEST['step']) && is_array($_REQUEST['step'])) { + $step = array_shift(array_keys($_REQUEST['step'])); + } else { + $step = ''; + } + + if($step == 'cancel' || $step == 'done') { + # cleanup + @unlink($this->tgzfile); + $this->_rdel($this->tgzdir); + if($step == 'cancel') $step = ''; + } + + if($step) { + $abrt = true; + $next = false; + if($step == 'version') { + $this->_step_version(); + $next = 'download'; + } elseif ($step == 'done') { + $this->_step_done(); + $next = ''; + $abrt = ''; + } elseif(!file_exists($this->tgzfile)) { + if($this->_step_download()) $next = 'unpack'; + } elseif(!is_dir($this->tgzdir)) { + if($this->_step_unpack()) $next = 'check'; + } elseif($step != 'upgrade') { + if($this->_step_check()) $next = 'upgrade'; + } elseif($step == 'upgrade') { + if($this->_step_copy()) { + $next = 'done'; + $abrt = ''; + } + } else { + echo 'uhm. what happened? where am I? This should not happen'; + } + } else { + # first time run, show intro + echo $this->locale_xhtml('step0'); + $abrt = false; + $next = 'version'; + } + } + + /** + * Output the given arguments using vsprintf and flush buffers + */ + public function _say() { + $args = func_get_args(); + echo ' '; + echo vsprintf(array_shift($args)."
    \n", $args); + flush(); + ob_flush(); + } + + /** + * Print a warning using the given arguments with vsprintf and flush buffers + */ + public function _warn() { + $this->haderrors = true; + + $args = func_get_args(); + echo '! '; + echo vsprintf(array_shift($args)."
    \n", $args); + flush(); + ob_flush(); + } + + /** + * Recursive delete + * + * @author Jon Hassall + * @link http://de.php.net/manual/en/function.unlink.php#87045 + */ + private function _rdel($dir) { + if(!$dh = @opendir($dir)) { + return false; + } + while(false !== ($obj = readdir($dh))) { + if($obj == '.' || $obj == '..') continue; + + if(!@unlink($dir.'/'.$obj)) { + $this->_rdel($dir.'/'.$obj); + } + } + closedir($dh); + return @rmdir($dir); + } + + /** + * Check various versions + * + * @return bool + */ + private function _step_version() { + $ok = true; + + // we need SSL - only newer HTTPClients check that themselves + if(!in_array('ssl', stream_get_transports())) { + $this->_warn($this->getLang('vs_ssl')); + $ok = false; + } + + // get the available version + $http = new DokuHTTPClient(); + $tgzversion = $http->get($this->tgzversion); + if(!$tgzversion) { + $this->_warn($this->getLang('vs_tgzno').' '.hsc($http->error)); + $ok = false; + } + if(!preg_match('/(^| )(\d\d\d\d-\d\d-\d\d[a-z]*)( |$)/i', $tgzversion, $m)) { + $this->_warn($this->getLang('vs_tgzno')); + $ok = false; + $tgzversionnum = 0; + } else { + $tgzversionnum = $m[2]; + $this->_say($this->getLang('vs_tgz'), $tgzversion); + } + + // get the current version + $version = getVersion(); + if(!preg_match('/(^| )(\d\d\d\d-\d\d-\d\d[a-z]*)( |$)/i', $version, $m)) { + $versionnum = 0; + } else { + $versionnum = $m[2]; + } + $this->_say($this->getLang('vs_local'), $version); + + // compare versions + if(!$versionnum) { + $this->_warn($this->getLang('vs_localno')); + $ok = false; + } else if($tgzversionnum) { + if($tgzversionnum < $versionnum) { + $this->_warn($this->getLang('vs_newer')); + $ok = false; + } elseif($tgzversionnum == $versionnum) { + $this->_warn($this->getLang('vs_same')); + $ok = false; + } + } + + // check plugin version + $pluginversion = $http->get($this->pluginversion); + if($pluginversion) { + $plugininfo = linesToHash(explode("\n", $pluginversion)); + $myinfo = $this->getInfo(); + if($plugininfo['date'] > $myinfo['date']) { + $this->_warn($this->getLang('vs_plugin'), $plugininfo['date']); + $ok = false; + } + } + + // check if PHP is up to date + $minphp = '5.3.3'; + if(version_compare(phpversion(), $minphp, '<')) { + $this->_warn($this->getLang('vs_php'), $minphp, phpversion()); + $ok = false; + } + + return $ok; + } + + /** + * Redirect to the start page + */ + private function _step_done() { + echo $this->getLang('finish'); + echo ""; + } + + /** + * Download the tarball + * + * @return bool + */ + private function _step_download() { + $this->_say($this->getLang('dl_from'), $this->tgzurl); + + @set_time_limit(300); + @ignore_user_abort(); + + $http = new DokuHTTPClient(); + $http->timeout = 300; + $data = $http->get($this->tgzurl); + + if(!$data) { + $this->_warn($http->error); + $this->_warn($this->getLang('dl_fail')); + return false; + } + + if(!io_saveFile($this->tgzfile, $data)) { + $this->_warn($this->getLang('dl_fail')); + return false; + } + + $this->_say($this->getLang('dl_done'), filesize_h(strlen($data))); + + return true; + } + + /** + * Unpack the tarball + * + * @return bool + */ + private function _step_unpack() { + $this->_say(''.$this->getLang('pk_extract').''); + + @set_time_limit(300); + @ignore_user_abort(); + + try { + $tar = new VerboseTar(); + $tar->open($this->tgzfile); + $tar->extract($this->tgzdir, 1); + $tar->close(); + } catch (Exception $e) { + $this->_warn($e->getMessage()); + $this->_warn($this->getLang('pk_fail')); + return false; + } + + $this->_say($this->getLang('pk_done')); + + $this->_say( + $this->getLang('pk_version'), + hsc(file_get_contents($this->tgzdir.'/VERSION')), + getVersion() + ); + return true; + } + + /** + * Check permissions of files to change + * + * @return bool + */ + private function _step_check() { + $this->_say($this->getLang('ck_start')); + $ok = $this->_traverse('', true); + if($ok) { + $this->_say(''.$this->getLang('ck_done').''); + } else { + $this->_warn(''.$this->getLang('ck_fail').''); + } + return $ok; + } + + /** + * Copy over new files + * + * @return bool + */ + private function _step_copy() { + $this->_say($this->getLang('cp_start')); + $ok = $this->_traverse('', false); + if($ok) { + $this->_say(''.$this->getLang('cp_done').''); + $this->_rmold(); + $this->_say(''.$this->getLang('finish').''); + } else { + $this->_warn(''.$this->getLang('cp_fail').''); + } + return $ok; + } + + /** + * Delete outdated files + */ + private function _rmold() { + global $conf; + + $list = file($this->tgzdir.'data/deleted.files'); + foreach($list as $line) { + $line = trim(preg_replace('/#.*$/', '', $line)); + if(!$line) continue; + $file = DOKU_INC.$line; + if(!file_exists($file)) continue; + if((is_dir($file) && $this->_rdel($file)) || + @unlink($file) + ) { + $this->_say($this->getLang('rm_done'), hsc($line)); + } else { + $this->_warn($this->getLang('rm_fail'), hsc($line)); + } + } + // delete install + @unlink(DOKU_INC.'install.php'); + + // make sure update message will be gone + @touch(DOKU_INC.'doku.php'); + @unlink($conf['cachedir'].'/messages.txt'); + } + + /** + * Traverse over the given dir and compare it to the DokuWiki dir + * + * Checks what files need an update, tests for writability and copies + * + * @param string $dir + * @param bool $dryrun do not copy but only check permissions + * @return bool + */ + private function _traverse($dir, $dryrun) { + $base = $this->tgzdir; + $ok = true; + + $dh = @opendir($base.'/'.$dir); + if(!$dh) return false; + while(($file = readdir($dh)) !== false) { + if($file == '.' || $file == '..') continue; + $from = "$base/$dir/$file"; + $to = DOKU_INC."$dir/$file"; + + if(is_dir($from)) { + if($dryrun) { + // just check for writability + if(!is_dir($to)) { + if(is_dir(dirname($to)) && !is_writable(dirname($to))) { + $this->_warn(''.$this->getLang('tv_noperm').'', hsc("$dir/$file")); + $ok = false; + } + } + } + + // recursion + if(!$this->_traverse("$dir/$file", $dryrun)) { + $ok = false; + } + } else { + $fmd5 = md5(@file_get_contents($from)); + $tmd5 = md5(@file_get_contents($to)); + if($fmd5 != $tmd5 || !file_exists($to)) { + if($dryrun) { + // just check for writability + if((file_exists($to) && !is_writable($to)) || + (!file_exists($to) && is_dir(dirname($to)) && !is_writable(dirname($to))) + ) { + + $this->_warn(''.$this->getLang('tv_noperm').'', hsc("$dir/$file")); + $ok = false; + } else { + $this->_say($this->getLang('tv_upd'), hsc("$dir/$file")); + } + } else { + // check dir + if(io_mkdir_p(dirname($to))) { + // copy + if(!copy($from, $to)) { + $this->_warn(''.$this->getLang('tv_nocopy').'', hsc("$dir/$file")); + $ok = false; + } else { + $this->_say($this->getLang('tv_done'), hsc("$dir/$file")); + } + } else { + $this->_warn(''.$this->getLang('tv_nodir').'', hsc("$dir")); + $ok = false; + } + } + } + } + } + closedir($dh); + return $ok; + } +} + +// vim:ts=4:sw=4:et:enc=utf-8: diff --git a/sources/lib/plugins/upgrade/lang/cs/lang.php b/sources/lib/plugins/upgrade/lang/cs/lang.php new file mode 100755 index 0000000..6a27715 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cs/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'Wiki Upgrade'; +$lang['vs_php'] = 'Nová vydání DokuWiki potřebují PHP v minimální verzi %s, ale momentálně běží %s. Měli byste aktualizovat verzi PHP než budete pokračovat!'; +$lang['vs_tgzno'] = 'Nelze zjistit nejnovější verzi DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s je dostupná ke stažení.'; +$lang['vs_local'] = 'Momentálně používáte DokuWiki %s.'; +$lang['vs_localno'] = 'Není jasné jaká je vaše momentální verze, je doporučena manuální aktualizace.'; +$lang['vs_newer'] = 'Vypadá to, že běžící DokuWiki je ještě novější, než poslední dostupná stabilní verze. Aktualizace není doporučena.'; +$lang['vs_same'] = 'Vaše běžící DokuWiki je již v aktuální verzi. Není třeba aktualizovat.'; +$lang['vs_plugin'] = 'Je dostupný novější zásuvný modul pro upgrade (%s). Než budete pokračovat, tak byste ho měli aktualizovat.'; +$lang['vs_ssl'] = 'Vypadá to, že používané PHP nepodporuje SSL proudy, stahování potřebných dat nejspíš selže. Aktualizujte místo toho ručně.'; +$lang['dl_from'] = 'Stahování archivu z %s...'; +$lang['dl_fail'] = 'Stahování selhalo.'; +$lang['dl_done'] = 'Stahování dokončeno (%s).'; +$lang['pk_extract'] = 'Rozbalování archivu...'; +$lang['pk_fail'] = 'Rozbalování selhalo.'; +$lang['pk_done'] = 'Rozbalování dokončeno.'; +$lang['pk_version'] = 'DokuWiki %s je připravena k instalaci (Momentálně používáte %s).'; +$lang['ck_start'] = 'Ověřování práv souborů...'; +$lang['ck_done'] = 'Do všech souborů lze zapisovat. Je možné aktualizovat.'; +$lang['ck_fail'] = 'Do některých souborů nelze zapisovat. Automatická aktualizace není možná.'; +$lang['cp_start'] = 'Aktualizace souborů...'; +$lang['cp_done'] = 'Všechny soubory aktualizovány.'; +$lang['cp_fail'] = 'Uff. Něco se nezdařilo. Radši to ověřte ručně.'; +$lang['tv_noperm'] = '%s není zapisovatelný!'; +$lang['tv_upd'] = '%s bude aktualizován.'; +$lang['tv_nocopy'] = 'Nelze zkopírovat soubor %s!'; +$lang['tv_nodir'] = 'Nelze vytvořit adresář %s!'; +$lang['tv_done'] = 'aktualizován %s'; +$lang['rm_done'] = 'Zastaralý %s smazán.'; +$lang['rm_fail'] = 'Nelze smazat zastaralý %s. Je třeba smazat ručně!'; +$lang['finish'] = 'Aktualizace proběhla. Užijte si svou novou DokuWiki'; +$lang['btn_continue'] = 'Pokračovat'; +$lang['btn_abort'] = 'Ukončit'; +$lang['step_version'] = 'Zkontrolovat'; +$lang['step_download'] = 'Stáhnout'; +$lang['step_unpack'] = 'Rozbalit'; +$lang['step_check'] = 'Ověřit'; +$lang['step_upgrade'] = 'Instalovat'; +$lang['careful'] = 'Došlo k chybám výše! Nepokračujte!'; diff --git a/sources/lib/plugins/upgrade/lang/cs/safemode.txt b/sources/lib/plugins/upgrade/lang/cs/safemode.txt new file mode 100755 index 0000000..0a00751 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cs/safemode.txt @@ -0,0 +1 @@ +Tato wiki je nakonfigurována pro použití safemode hacku. Za těchto podmínek nelze provést bezpečnou automatickou aktualizaci. Aktualizujte prosím [[doku>install:upgrade|svou wiki ručně]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/cs/step0.txt b/sources/lib/plugins/upgrade/lang/cs/step0.txt new file mode 100755 index 0000000..cab46f8 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cs/step0.txt @@ -0,0 +1,7 @@ +Tento zásuvný modul automaticky aktualizuje vaši wiki na nejnovější dostupnou verzi DokuWiki. Než budete pokračovat, měli byste si přečíst [[doku>changes|Changelog]] a zkontrolovat, jestli jsou třeba provést nějaké dodatečné kroky před nebo po aktualizaci. + +Pro povolení automatické aktualizace je třeba zajistit PHP procesu zapisovací práva do souborů DokuWiki. Zásuvný modul ověří dostupnost potřebných oprávnění před spuštěním aktualizace. + +Tento modul nebude aktualizovat nainstalované šablony ani ostatní zásuvné moduly. + +Před spuštěním se doporučuje vytvoření zálohy vaší wiki. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/cy/lang.php b/sources/lib/plugins/upgrade/lang/cy/lang.php new file mode 100644 index 0000000..cc4e891 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cy/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'Uwchraddiad Wici'; +$lang['vs_php'] = 'Mae angen PHP %s o leiaf ar ryddhadau newydd DocuWiki, ond rydych chi\'n rhedeg %s. Dylech chi uwchraddio eich fersiwn PHP cyn ceisio uwchraddio DocuWiki.'; +$lang['vs_tgzno'] = 'Methu darganfod fersiwn diweddaraf DocuWiki.'; +$lang['vs_tgz'] = 'Mae DocuWiki %s ar gael i\'w lawrlwytho.'; +$lang['vs_local'] = 'Rydych chi\'n rhedeg DokuWiki %s yn bresennol.'; +$lang['vs_localno'] = '\'Dyw e ddim yn glir pa mor hen yw\'r fersiwn rydych chi\'n rhedeg yn bresennol - awgrwymir uwchraddio gan law.'; +$lang['vs_newer'] = 'Mae\'n debyg bod eich DokuWiki cyfredol yn fwy newydd na\'r rhyddhad sefydlog diweddaraf. Ni awgrymir uwchraddio.'; +$lang['vs_same'] = 'Mae eich DokuWiki cyfredol yn fersiwn cyfoes. \'Sdim angen uwchraddio.'; +$lang['vs_plugin'] = 'Mae ategyn uwchraddio mwy diweddar ar gael (%s) - dylech chi uwchraddio\'r ategyn cyn parhau.'; +$lang['vs_ssl'] = 'Mae\'n debyg \'dyw\'ch PHP ddim yn cynnal ffrydiau SSL, felly bydd lawrlwytho\'r data sydd ei angen yn debygol o fethu. Uwchraddiwch gan law.'; +$lang['dl_from'] = 'Yn lawrlwytho\'r archif o %s'; +$lang['dl_fail'] = 'Methodd y lawrlwythiad.'; +$lang['dl_done'] = 'Lawlwythiad yn gyflawn (%s).'; +$lang['pk_extract'] = 'Yn datbacio\'r archif...'; +$lang['pk_fail'] = 'Methodd y datbacio.'; +$lang['pk_done'] = 'Datbacio\'n gyflawn.'; +$lang['pk_version'] = 'Mae DocuWiki %s yn barod i\'w arsefydlu. (Rydych chi\'n rhedeg %s yn bresennol).'; +$lang['ck_start'] = 'Yn gwirio hawliau ffeil...'; +$lang['ck_done'] = 'Mae modd ysgrifennu i bob ffeil. Yn barod i uwchraddio.'; +$lang['ck_fail'] = '\'Sdim modd ysgrifennu i rai ffeiliau. \'Dyw uwchraddio\'n awtomatig ddim yn bosib.'; +$lang['cp_start'] = 'Yn diweddaru ffeiliau...'; +$lang['cp_done'] = 'Diweddarwyd pob ffeil.'; +$lang['cp_fail'] = 'Wps. Aeth rhywbeth o le. Gwiriwch gan law.'; +$lang['tv_noperm'] = '\'Sdim modd ysgriffenu i %s!'; +$lang['tv_upd'] = 'Caiff %s ei ddiweddaru.'; +$lang['tv_nocopy'] = 'Methu â chopïo\'r ffeil %s!'; +$lang['tv_nodir'] = 'Methu â chreu\'r ffolder %s!'; +$lang['tv_done'] = 'diweddarwyd %s'; +$lang['rm_done'] = 'Dilëwyd %s (anghymeradwy).'; +$lang['rm_fail'] = 'Methu â dileu %s (anghymeradwy). Dilëwch gan law!'; +$lang['finish'] = 'Uwchraddiad yn gyflawn. Mwynhewch eich DokuWiki newydd'; +$lang['btn_continue'] = 'Parhau'; +$lang['btn_abort'] = 'Atal'; +$lang['step_version'] = 'Gwirio'; +$lang['step_download'] = 'Lawrlwytho'; +$lang['step_unpack'] = 'Datbacio'; +$lang['step_check'] = 'Gwireddu'; +$lang['step_upgrade'] = 'Arsefydlu'; +$lang['careful'] = 'Gwallau uchod! Peidiwch â pharhau!'; diff --git a/sources/lib/plugins/upgrade/lang/cy/safemode.txt b/sources/lib/plugins/upgrade/lang/cy/safemode.txt new file mode 100644 index 0000000..0918cd0 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cy/safemode.txt @@ -0,0 +1 @@ +Mae'r wici hwn wedi'i ffurfweddu i ddefnyddio'r safemode hack. Yn anffodus, 'dyn ni ddim yn gallu uwchraddio'n awtomatig yn ddiogel o dan y amodau hyn. Bydd angen [[doku>install:upgrade|uwchraddio'ch wici gan law]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/cy/step0.txt b/sources/lib/plugins/upgrade/lang/cy/step0.txt new file mode 100644 index 0000000..8a58d98 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/cy/step0.txt @@ -0,0 +1,7 @@ +Bydd yr ategyn hwn yn uwchraddio'ch wici yn awtomatig i'r fersiwn DocuWiki diweddaraf. Cyn parhau, dylech chi ddarllen y [[doku>changes|Changelog]] i wirio os oes camau ychwanegol sydd angen i chi berfformio cyn neu ar ôl uwchraddio. + +Er mwyn galluogi uwchraddio'n awtomatig, mae proses PHP angen hawliau ysgrifennu ar gyfer ffeiliau DokuWiki. Bydd yr ategyn yn gwirio'r hawliau ffeil angenrheidiol cyn dechrau'r broses uwchraddio. + +'Dyw'r ategyn hwn ddim yn uwchraddio unrhyw ategion neu dempledau sydd wedi'u harsefydlu. + +Rydyn ni'n awgrymu eich bod chi'n creu copi wrth gefn o'ch wiki cyn parhau. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/da/lang.php b/sources/lib/plugins/upgrade/lang/da/lang.php new file mode 100755 index 0000000..1056187 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/da/lang.php @@ -0,0 +1,48 @@ + + * @author Søren Birk + * @author Jacob Palm + */ +$lang['menu'] = 'Wiki Opgradering'; +$lang['vs_php'] = 'Nye DokuWiki udgivelser kræver som minimum PHP %s, men du benytter i øjeblikket %s. Du bør opdatere din PHP-version, før du opgraderer!'; +$lang['vs_tgzno'] = 'Kunne ikke fastlægge den nyeste version af DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s er klar til download.'; +$lang['vs_local'] = 'Du benytter i øjeblikket DokuWiki %s.'; +$lang['vs_localno'] = 'Det er ikke klart, hvor gammel din nuværende version er. Manuel opgradering anbefales.'; +$lang['vs_newer'] = 'Det ser ud til at din nuværende DokuWiki er nyere end den nyeste stabile version. Opgradering anbefales ikke.'; +$lang['vs_same'] = 'Din nuværende DokuWiki er allerede ajourført. Det er ikke nødvendigt at opgradere.'; +$lang['vs_plugin'] = 'Der er et nyere opgraderingsplugin tilgængeligt (%s). Du bør opdatere dit plugin, før du fortsætter.'; +$lang['vs_ssl'] = 'Det ser ud til at dit PHP ikke supportere SSL streams - download af nødvendigt data vil højst sandsynligt fejle. Opgradér manuelt i stedet.'; +$lang['dl_from'] = 'Downloader arkiv fra %s...'; +$lang['dl_fail'] = 'Download fejlet'; +$lang['dl_done'] = 'Download færdig (%s).'; +$lang['pk_extract'] = 'Pakker arkiv ud...'; +$lang['pk_fail'] = 'Udpakning fejlet.'; +$lang['pk_done'] = 'Udpakning færdig.'; +$lang['pk_version'] = 'DokuWiki %s er klar til installation (Du benytter i øjeblikket %s).'; +$lang['ck_start'] = 'Kontrollerer filtilladelser'; +$lang['ck_done'] = 'Alle filer er skrivbare. Klar til at opgradere.'; +$lang['ck_fail'] = 'Nogle filer er ikke skrivbare. Automatisk opgradering er ikke muligt.'; +$lang['cp_start'] = 'Opdaterer filer...'; +$lang['cp_done'] = 'Alle filer opdateret.'; +$lang['cp_fail'] = 'Å-Åh. Noget gik galt. Du må hellere tjekke manuelt.'; +$lang['tv_noperm'] = '%s er ikke skrivbar!'; +$lang['tv_upd'] = '%s vil blive opdateret.'; +$lang['tv_nocopy'] = 'Kunne ikke kopiere filen %s!'; +$lang['tv_nodir'] = 'Kunne ikke oprette mappen %s!'; +$lang['tv_done'] = 'Opdaterede %s'; +$lang['rm_done'] = 'Forældet %s slettet.'; +$lang['rm_fail'] = 'Kunne ikke slette forældet %s. Slet venligst manuelt!'; +$lang['finish'] = 'Opgradering færdig. Nyd din nye DokuWiki'; +$lang['btn_continue'] = 'Fortsæt'; +$lang['btn_abort'] = 'Afbryd'; +$lang['step_version'] = 'Tjek'; +$lang['step_download'] = 'Download'; +$lang['step_unpack'] = 'Pak Ud'; +$lang['step_check'] = 'Verificér'; +$lang['step_upgrade'] = 'Installér'; +$lang['careful'] = 'Fejl i ovenstående! Du bør ikke fortsætte!'; diff --git a/sources/lib/plugins/upgrade/lang/da/safemode.txt b/sources/lib/plugins/upgrade/lang/da/safemode.txt new file mode 100755 index 0000000..8f6c1dd --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/da/safemode.txt @@ -0,0 +1 @@ +Denne wiki er konfigureret til at benytte safemode hack'et. Vi kan desværre ikke opgradere wikien automatisk under disse forhold. Venligst [[doku>install:upgrade|opgradér din wiki manuelt]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/da/step0.txt b/sources/lib/plugins/upgrade/lang/da/step0.txt new file mode 100755 index 0000000..a2745e7 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/da/step0.txt @@ -0,0 +1,7 @@ +Dette plugin vil automatisk opgradere din wiki til nyeste tilgængelige DokuWiki-version. Før du fortsætter, bør du læse [[doku>changes|Ændringsloggen]] for at kontrollere om der er yderligere punkter, som du skal udføre før eller efter opgraderingen. + +For at opgradere automatisk, skal PHP-processen have skriverettigheder til DokuWiki filerne. Plugin'et vil tjekke for nødvendige rettigheder, før opgraderingsprocessen startes. + +Dette plugin vil ikke opgradere installerede plugins eller skabeloner. + +Vi anbefaler at du opretter en backup af din wiki, før du fortsætter. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/de-informal/lang.php b/sources/lib/plugins/upgrade/lang/de-informal/lang.php new file mode 100755 index 0000000..38242ef --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/de-informal/lang.php @@ -0,0 +1,46 @@ + + * @author rnck + */ +$lang['menu'] = 'Wiki aktualisieren'; +$lang['vs_php'] = 'Neue DokuWiki Versionen benötigen mindestens PHP Version %s. Du verwendest PHP Version %s. Du solltest PHP aktualisieren bevor Du DokuWiki aktualisierst.'; +$lang['vs_tgzno'] = 'Die neueste Version von DokuWiki konnte nicht ermittelt werden.'; +$lang['vs_tgz'] = 'DokuWiki %s ist zum Download verfügbar.'; +$lang['vs_local'] = 'Du verwendest DokuWiki %s.'; +$lang['vs_localno'] = 'Es ist unklar, wie alt die von Dir verwendete DokuWiki Version ist. Ein manuell Upgrade wird empfohlen.'; +$lang['vs_newer'] = 'Es sieht so aus, als ob die von Dir verwendete DokuWiki Version neuer ist als die letzte stabile Version. Ein Upgrade wird nicht empfohlen.'; +$lang['vs_same'] = 'Deine DokuWiki Version ist aktuell. Kein Upgrade notwendig.'; +$lang['vs_plugin'] = 'Es ist eine neuere Version des Upgrade-Plugins verfügbar (%s). Du solltest das Plugin aktualisieren bevor Du fortfährst.'; +$lang['vs_ssl'] = 'Dein PHP scheint SSL nicht zu unterstützen. Der Download der benötigten Daten wird vermutlich fehlschlagen. Akstualisiere stattdessen manuell.'; +$lang['dl_from'] = 'Archiv wird von %s heruntergeladen...'; +$lang['dl_fail'] = 'Herunterladen fehlgeschlagen.'; +$lang['dl_done'] = 'Herunterladen abgeschlossen (%s).'; +$lang['pk_extract'] = 'Archiv wird entpackt...'; +$lang['pk_fail'] = 'Entpacken fehlgeschlagen.'; +$lang['pk_done'] = 'Entpacken abgeschlossen.'; +$lang['pk_version'] = 'DokuWiki %s ist zur Installation bereit (Du betreibst momentan %s).'; +$lang['ck_start'] = 'Dateirechte werden überprüft...'; +$lang['ck_done'] = 'Alle Dateien sind beschreibbar. Zur Aktualisierung bereit.'; +$lang['ck_fail'] = 'Einige Dateien sind nicht beschreibbar. Die automatische Aktualisierung ist nicht möglich.'; +$lang['cp_start'] = 'Dateien werden aktualisiert...'; +$lang['cp_done'] = 'Dateien wurden aktualisiert.'; +$lang['cp_fail'] = 'Autsch. Irgendetwas funktioniert nicht. Überprüfe es besser von Hand.'; +$lang['tv_noperm'] = '%s ist nicht beschreibbar!'; +$lang['tv_upd'] = '%s wird aktualisiert.'; +$lang['tv_nocopy'] = 'Konnte Datei %s nicht kopieren!'; +$lang['tv_nodir'] = 'Konnte Verzeichnis %s nicht erstellen!'; +$lang['tv_done'] = '%s wurde aktualisiert.'; +$lang['rm_done'] = 'Veraltete %s wurde gelöscht.'; +$lang['rm_fail'] = 'Konnte veraltete Datei %s nicht löschen. Bitte löschen Sie von Hand!'; +$lang['finish'] = 'Aktualisierung abgeschlossen. Genießen Sie Ihr neues DokuWiki!'; +$lang['btn_continue'] = 'Fortsetzen'; +$lang['btn_abort'] = 'Abbrechen'; +$lang['step_version'] = 'Prüfen'; +$lang['step_download'] = 'Herunterladen'; +$lang['step_unpack'] = 'Entpacken'; +$lang['step_check'] = 'Verifizieren'; +$lang['step_upgrade'] = 'Installieren'; diff --git a/sources/lib/plugins/upgrade/lang/de-informal/safemode.txt b/sources/lib/plugins/upgrade/lang/de-informal/safemode.txt new file mode 100755 index 0000000..8487169 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/de-informal/safemode.txt @@ -0,0 +1 @@ +Dieses Wiki ist so eingestellt, dass es den safemode hack verwendet. Leider kann so das Wiki nicht automatisch aktualisiert werden. Bitte besuche Reguläre[[doku>install:upgrade|upgrade your wiki manually]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/de/lang.php b/sources/lib/plugins/upgrade/lang/de/lang.php new file mode 100755 index 0000000..1cef2c0 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/de/lang.php @@ -0,0 +1,49 @@ + + * @author Alex Timmermann + * @author Patrick Kastner + * @author Padhie + */ +$lang['menu'] = 'Wiki aktualisieren'; +$lang['vs_php'] = 'Neue DokuWiki-Versionen benötigen mindestens PHP-Version %s. Ihre Version ist %d. Bitte aktualisieren Sie PHP bevor Sie DokuWiki aktualisieren.'; +$lang['vs_tgzno'] = 'Die neuste Version von DokuWiki konnte nicht ermittelt werden.'; +$lang['vs_tgz'] = 'DokuWiki %s steht zum Download bereit.'; +$lang['vs_local'] = 'Ihre DokuWiki-Version ist %s'; +$lang['vs_localno'] = 'Es konnte nicht festgestellt werden, wie alt die aktuell laufende Version ist. Ein manuelles Upgrade wird empfohlen.'; +$lang['vs_newer'] = 'Es sieht so aus als sie Ihre DokuWiki-Version aktueller als die letzte stabile Version. Ein Upgrade wird nicht empfohlen.'; +$lang['vs_same'] = 'Ihre DokuWiki-Version ist aktuell. Ein Upgrade ist nicht nötig.'; +$lang['vs_plugin'] = 'Es existiert ein neueres Update Plugin (%s), Sie sollten das Plugin updaten bevor Sie aktualisieren.'; +$lang['vs_ssl'] = 'Ihre php-Version scheine keine SSL-Streams zu unterstützen, das Laden Sie die benötigten Daten wird daher vermutlich nicht funktionieren. Ein manuelles Update wird daher benötigt.'; +$lang['dl_from'] = 'Archiv wird von %s heruntergeladen...'; +$lang['dl_fail'] = 'Herunterladen fehlgeschlagen.'; +$lang['dl_done'] = 'Herunterladen abgeschlossen (%s).'; +$lang['pk_extract'] = 'Archiv wird entpackt...'; +$lang['pk_fail'] = 'Entpacken fehlgeschlagen.'; +$lang['pk_done'] = 'Entpacken abgeschlossen.'; +$lang['pk_version'] = 'DokuWiki %s ist zur Installation bereit (Sie betreiben momentan %s).'; +$lang['ck_start'] = 'Dateirechte werden überprüft...'; +$lang['ck_done'] = 'Alle Dateien sind beschreibbar. Zur Aktualisierung bereit.'; +$lang['ck_fail'] = 'Einige Dateien sind nicht beschreibbar. Die automatische Aktualisierung ist nicht möglich.'; +$lang['cp_start'] = 'Dateien werden aktualisiert...'; +$lang['cp_done'] = 'Dateien wurden aktualisiert.'; +$lang['cp_fail'] = 'Irgendetwas funktioniert nicht. Überprüfen Sie von Hand.'; +$lang['tv_noperm'] = '%s ist nicht beschreibbar!'; +$lang['tv_upd'] = '%s wird aktualisiert.'; +$lang['tv_nocopy'] = 'Konnte Datei %s nicht kopieren!'; +$lang['tv_nodir'] = 'Konnte Verzeichnis %s nicht erstellen!'; +$lang['tv_done'] = '%s wurde aktualisiert.'; +$lang['rm_done'] = 'Veraltete %s wurde gelöscht.'; +$lang['rm_fail'] = 'Konnte veraltete Datei %s nicht löschen. Bitte löschen Sie von Hand!'; +$lang['finish'] = 'Aktualisierung abgeschlossen. Genießen Sie Ihr neues DokuWiki!'; +$lang['btn_continue'] = 'Fortfahren'; +$lang['btn_abort'] = 'Abbrechen'; +$lang['step_version'] = 'Überprüfen'; +$lang['step_download'] = 'Herunterladen'; +$lang['step_unpack'] = 'Entpacken'; +$lang['step_check'] = 'Verifizieren'; +$lang['step_upgrade'] = 'Installieren'; +$lang['careful'] = 'Siehe Fehler! Sie sollten nicht fortfahren!'; diff --git a/sources/lib/plugins/upgrade/lang/de/safemode.txt b/sources/lib/plugins/upgrade/lang/de/safemode.txt new file mode 100755 index 0000000..7fa6fa9 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/de/safemode.txt @@ -0,0 +1 @@ +Dieses Wiki ist so eingestellt dass es den safemode hack verwendet. Leider kann so das Wiki nicht automatisch aktualisiert werden. Bitte besuchen Sie [[doku>install:upgrade|upgrade your wiki manually]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/de/step0.txt b/sources/lib/plugins/upgrade/lang/de/step0.txt new file mode 100755 index 0000000..6d7329f --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/de/step0.txt @@ -0,0 +1,7 @@ +Dieses Plugin aktualisiert ihr Wiki automatisch auf die aktuelle DokuWiki Version. Bevor Sie fortsetzen, sollten Sie den[[doku>changes|Änderungsverlauf]] lesen und überprüfen, ob vor oder nach der Aktualisierung weitere Schritte notwendig sind. + +Damit die automatische Aktualisierung möglich ist, sollte der PHP Prozess auf die DokuWiki Dateien zugreifen können. Das Plugin überprüft die erforderlichen Dateiberechtigungen, bevor der Aktualisierungsprozess startet. + +Dieses Plugin aktualisiert keine installierten Plugins oder Vorlagen. + +Wir empfehlen eine Sicherung ihres Wikis zu erstellen, bevor Sie fortsetzen. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/en/lang.php b/sources/lib/plugins/upgrade/lang/en/lang.php new file mode 100755 index 0000000..1dde181 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/en/lang.php @@ -0,0 +1,55 @@ + + */ + +// menu entry for admin plugins +$lang['menu'] = 'Wiki Upgrade'; + +// custom language strings for the plugin +$lang['vs_php'] = 'New DokuWiki releases need at least PHP %s, but you\'re running %s. You should upgrade your PHP version before upgrading!'; +$lang['vs_tgzno'] = 'Could not determine the newest version of DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s is available for download.'; +$lang['vs_local'] = 'You\'re currently running DokuWiki %s.'; +$lang['vs_localno'] = 'It\'s not clear how old your currently running version is, manual upgrade is recommended.'; +$lang['vs_newer'] = 'It seems your current DokuWiki is even newer than the latest stable release. Upgrade not recommended.'; +$lang['vs_same'] = 'Your current DokuWiki is already up to date. No need for upgrading.'; +$lang['vs_plugin'] = 'There is a newer upgrade plugin available (%s) you should update the plugin before continuing.'; +$lang['vs_ssl'] = 'Your PHP seems not to support SSL streams, downloading the needed data will most likely fail. Upgrade manually instead.'; + +$lang['dl_from'] = 'Downloading archive from %s...'; +$lang['dl_fail'] = 'Download failed.'; +$lang['dl_done'] = 'Download completed (%s).'; +$lang['pk_extract'] = 'Unpacking archive...'; +$lang['pk_fail'] = 'Unpacking failed.'; +$lang['pk_done'] = 'Unpacking completed.'; +$lang['pk_version'] = 'DokuWiki %s is ready to install (You\'re currently running %s).'; +$lang['ck_start'] = 'Checking file permissions...'; +$lang['ck_done'] = 'All files are writable. Ready to upgrade.'; +$lang['ck_fail'] = 'Some files aren\'t writable. Automatic upgrade not possible.'; +$lang['cp_start'] = 'Updating files...'; +$lang['cp_done'] = 'All files updated.'; +$lang['cp_fail'] = 'Uh-Oh. Something went wrong. Better check manually.'; +$lang['tv_noperm'] = '%s is not writable!'; +$lang['tv_upd'] = '%s will be updated.'; +$lang['tv_nocopy'] = 'Could not copy file %s!'; +$lang['tv_nodir'] = 'Could not create directory %s!'; +$lang['tv_done'] = 'updated %s'; +$lang['rm_done'] = 'Deprecated %s deleted.'; +$lang['rm_fail'] = 'Could not delete deprecated %s. Please delete manually!'; +$lang['finish'] = 'Upgrade completed. Enjoy your new DokuWiki'; + +$lang['btn_continue'] = 'Continue'; +$lang['btn_abort'] = 'Abort'; + +$lang['step_version'] = 'Check'; +$lang['step_download'] = 'Download'; +$lang['step_unpack'] = 'Unpack'; +$lang['step_check'] = 'Verify'; +$lang['step_upgrade'] = 'Install'; + +$lang['careful'] = 'Errors above! You should not continue!'; + +//Setup VIM: ex: et ts=4 enc=utf-8 : diff --git a/sources/lib/plugins/upgrade/lang/en/safemode.txt b/sources/lib/plugins/upgrade/lang/en/safemode.txt new file mode 100755 index 0000000..bb24e05 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/en/safemode.txt @@ -0,0 +1 @@ +This wiki is configured to use the safemode hack. Unfortunately we cannot safely upgrade the wiki automatically under this conditions. Please [[doku>install:upgrade|upgrade your wiki manually]]. diff --git a/sources/lib/plugins/upgrade/lang/en/step0.txt b/sources/lib/plugins/upgrade/lang/en/step0.txt new file mode 100755 index 0000000..e25280d --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/en/step0.txt @@ -0,0 +1,7 @@ +This plugin will automatically upgrade your wiki to the newest available DokuWiki version. Before continuing, you should read the [[doku>changes|Changelog]] to check if there are any additional steps for you to perform before or after upgrading. + +To allow automatic upgrading, the PHP process requires write permissions for Dokuwiki files. The plugin will check for the necessary file permissions before starting the upgrade process. + +This plugin will not upgrade any installed plugins or templates. + +We recommend that you create a backup of your wiki before continuing. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/eo/lang.php b/sources/lib/plugins/upgrade/lang/eo/lang.php new file mode 100755 index 0000000..52f89d2 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/eo/lang.php @@ -0,0 +1,46 @@ + + * @author Robert Bogenschneider + */ +$lang['menu'] = 'Viki-Aktualigo'; +$lang['vs_php'] = 'Novaj DokuWiki-eldonoj bezonas minumime PHP-version %s, sed vi uzas %s. Vi devus aktualigi vian PHP-version antaŭ ol aktualigi la vikion!'; +$lang['vs_tgzno'] = 'Ne eblis ekkoni la plej novan DokuWiki-version.'; +$lang['vs_tgz'] = 'DokuWiki %s haveblas por elŝuto.'; +$lang['vs_local'] = 'Momente vi uzas DokuWiki %s.'; +$lang['vs_localno'] = 'Ne estas klare, kiom malnova via momenta versio estas, permana aktualigo estas rekomendata.'; +$lang['vs_newer'] = 'Aspektas, ke via momenta DokuWiki-versio estas eĉ pli nova ol la plej freŝa stabila eldono. Aktualigo estas malrekomendata.'; +$lang['vs_same'] = 'Via momenta DokuWiki estas jam ĝisdata. Neniu bezono aktualigi.'; +$lang['vs_plugin'] = 'Ekzistas pli nova kromaĵo (%s), vi devus aktualigi la kromaĵon antaŭ ol daŭrigi.'; +$lang['vs_ssl'] = 'Ŝajne via PHP ne subtenas SSL-fluojn, elŝuti la necesajn datumojn verŝajne malsukcesos. Aktualigu anstataŭe permane.'; +$lang['dl_from'] = 'Elŝutanta arkivon de %s...'; +$lang['dl_fail'] = 'La elŝuto ne funkciis.'; +$lang['dl_done'] = 'Elŝuto kompleta (%s).'; +$lang['pk_extract'] = 'Malpakanta arkivon...'; +$lang['pk_fail'] = 'Malpakado ne funkciis.'; +$lang['pk_done'] = 'Malpakado kompleta.'; +$lang['pk_version'] = 'DokuWiki %s pretas por instalado (Momente vi uzas %s).'; +$lang['ck_start'] = 'Kontrolanta dosier-permesojn...'; +$lang['ck_done'] = 'Ĉiuj dosieroj estas skribeblaj. Preta por aktualigo.'; +$lang['ck_fail'] = 'Iuj dosieroj ne estas skribeblaj. Aŭtomata aktualigo ne eblas.'; +$lang['cp_start'] = 'Aktualiganta dosierojn...'; +$lang['cp_done'] = 'Ĉiuj dosieroj aktualigitaj.'; +$lang['cp_fail'] = 'Aj, io misiris. Pli bone kontrolu permane.'; +$lang['tv_noperm'] = '%s ne estas skribebla!'; +$lang['tv_upd'] = '%s estos aktualigata.'; +$lang['tv_nocopy'] = 'Ne eblis kopii la dosieron %s!'; +$lang['tv_nodir'] = 'Ne eblis krei la dosierujon %s!'; +$lang['tv_done'] = 'aktualiĝis %s'; +$lang['rm_done'] = 'Malaktuala %s forigita.'; +$lang['rm_fail'] = 'Ne eblis forigi la malaktualan %s. Bonvolu forigi ĝin permane!'; +$lang['finish'] = 'Aktualigo kompleta. Ĝuu vian novan DokuWiki.'; +$lang['btn_continue'] = 'Daŭrigi'; +$lang['btn_abort'] = 'Ĉesi'; +$lang['step_version'] = 'Kontroli'; +$lang['step_download'] = 'Elŝuti'; +$lang['step_unpack'] = 'Malpaki'; +$lang['step_check'] = 'Certigi'; +$lang['step_upgrade'] = 'Instali'; diff --git a/sources/lib/plugins/upgrade/lang/eo/safemode.txt b/sources/lib/plugins/upgrade/lang/eo/safemode.txt new file mode 100755 index 0000000..310017b --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/eo/safemode.txt @@ -0,0 +1 @@ +Tiu-ĉi vikio laŭagorde uzas la safemode-econ. Bedaŭrinde tiel ne eblas sekure aktualigi la vikion aŭtomate. Bonvolu [[doku>install:upgrade|aktualigi vian vikion permane]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/eo/step0.txt b/sources/lib/plugins/upgrade/lang/eo/step0.txt new file mode 100755 index 0000000..d9ebf01 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/eo/step0.txt @@ -0,0 +1,7 @@ +Tiu kromaĵo aŭtomate aktualigos vian vikion al la plej freŝe havebla DokuWiki-versio. Antaŭ ol daŭrigi, legu [[doku>changes|la ŝanĝ-liston]] por kontroli, ĉu vi devus fari aldonajn paŝojn antaŭ aŭ post la aktualigo. + +Por permesi aŭtomatan aktualigon, la PHP-procezo bezonas skribpermeson por Dokuwiki-dosieroj. La kromaĵo kontrolos la necesajn dosierpermesojn antaŭ la komenco de la aktualigado. + +Tiu kromaĵo **ne aktualigos** instalitajn kromaĵojn aŭ ŝablonojn. + +Ni rekomendas, ke vi faru sekurkopion de via vikio antaŭ ol daŭrigi. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/es/lang.php b/sources/lib/plugins/upgrade/lang/es/lang.php new file mode 100755 index 0000000..f19673d --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/es/lang.php @@ -0,0 +1,46 @@ + + * @author Domingo Redal + */ +$lang['menu'] = 'Actualización de Wiki'; +$lang['vs_php'] = 'Las nuevas versiones de DokuWiki necesitan al menos PHP %s, pero tú estás ejecutando %s. ¡Deberías subir la versión de PHP antes de actualizar!'; +$lang['vs_tgzno'] = 'No se puede determinar la versión más reciente de DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s está disponible para descargar.'; +$lang['vs_local'] = 'Actualmente estás ejecutando DokuWiki %s'; +$lang['vs_localno'] = 'No está clara la antigüedad de la versión que ejecutas actualmente; se recomienda una actualización manual.'; +$lang['vs_newer'] = 'Parece que tu DokuWiki actual es incluso más nueva que la última versión estable. No se recomienda actualizarla.'; +$lang['vs_same'] = 'Tú DokuWiki actual ya está al día. No se necesita actualización.'; +$lang['vs_plugin'] = 'Hay disponible una nueva actualización del //plugin// (%s), deberías actualizar el //plugin// antes de continuar.'; +$lang['vs_ssl'] = 'Tu PHP parece no soportar canales SSL, la descarga de los datos necesarios lo más probable es que falle. Actualizalo manualmente en su lugar.'; +$lang['dl_from'] = 'Descargando el archivo desde %s...'; +$lang['dl_fail'] = 'Fallo en la descarga.'; +$lang['dl_done'] = 'Descarga completada (%s).'; +$lang['pk_extract'] = 'Desempaquetando el archivo...'; +$lang['pk_fail'] = 'Fallo en el desempaquetado.'; +$lang['pk_done'] = 'Desempaquetado completado.'; +$lang['pk_version'] = 'DokuWiki %s listo para instalar (Actualmente estás ejecutando %s).'; +$lang['ck_start'] = 'Comprobando permisos de fichero...'; +$lang['ck_done'] = 'Todos los ficheros se pueden escribir. Listo para actualizar.'; +$lang['ck_fail'] = 'Algunos ficheros no se pueden escribir. No es posible la actualización automática.'; +$lang['cp_start'] = 'Actualizando ficheros...'; +$lang['cp_done'] = 'Todos los ficheros están actualizados.'; +$lang['cp_fail'] = '¡Vaya! Algo fue mal. Mejor compruébalo manualmente.'; +$lang['tv_noperm'] = '¡%s no se puede escribir!'; +$lang['tv_upd'] = '%s se actualizará.'; +$lang['tv_nocopy'] = '¡No se puede copiar el fichero %s!'; +$lang['tv_nodir'] = '¡No se puede crear el directorio %s!'; +$lang['tv_done'] = '%s actualizado'; +$lang['rm_done'] = '%s obsoleto borrado.'; +$lang['rm_fail'] = 'No se puede borrar %s obsoleto. ¡Por favor, bórralo manualmente!'; +$lang['finish'] = 'Actualización completada. Disfruta de tu nueva DokuWiki'; +$lang['btn_continue'] = 'Continuar'; +$lang['btn_abort'] = 'Abortar'; +$lang['step_version'] = 'Comprobar'; +$lang['step_download'] = 'Descargar'; +$lang['step_unpack'] = 'Desempaquetar'; +$lang['step_check'] = 'Verificar'; +$lang['step_upgrade'] = 'Instalar'; diff --git a/sources/lib/plugins/upgrade/lang/es/safemode.txt b/sources/lib/plugins/upgrade/lang/es/safemode.txt new file mode 100755 index 0000000..5a084f3 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/es/safemode.txt @@ -0,0 +1 @@ +Este wiki está configurado para utilizar el hack modo seguro. Desafortunadamente, no podemos actualizar el wiki automáticamente con seguridad bajo estas condiciones. Por favor [[doku>install:upgrade| actualiza tu wiki manualmente]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/es/step0.txt b/sources/lib/plugins/upgrade/lang/es/step0.txt new file mode 100755 index 0000000..b042f59 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/es/step0.txt @@ -0,0 +1,7 @@ +Este plugin actualizará automáticamente tu wiki a la nueva versión disponible de DokuWiki. Antes de continuar, debe leer el [[doku>changes|Histórico de Cambios]] para comprobar si hay pasos adicionales para llevar a cabo antes o después de la actualización. + +Para permitir la actualización automática, el proceso PHP requiere permisos de escritura para los archivos de Dokuwiki. El plugin comprobará los permisos de archivo necesarios antes de iniciar el proceso de actualización. + +Este plugin no actualiza los plugins o plantillas instaladas. + +Le recomendamos que cree una copia de seguridad de su wiki antes de continuar. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/fa/lang.php b/sources/lib/plugins/upgrade/lang/fa/lang.php new file mode 100644 index 0000000..a9b863e --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fa/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'ارتقا ویکی'; +$lang['vs_php'] = 'نسخه‌های جدید دوکوویکی نیاز به %s پی‌اچ‌پی دارند، اما شما استفاده می‌کنید از %s. قبلا از این کار شما باید نسخه‌ی پی‌اچ‌پی خود را ارتقا دهید.'; +$lang['vs_tgzno'] = 'نمی‌توان نسخه‌ی جدیدتر دوکوویکی را مشخص کرد.'; +$lang['vs_tgz'] = 'دوکوویکی %s برای دانلود موجود است.'; +$lang['vs_local'] = 'شما درحال حاضر دوکوویکی %s را اجرا می‌کنید.'; +$lang['vs_localno'] = 'هنوز مشخص نیست که نسخه‌های درحال اجرا چند ساله هستند، ارتقا دستی توصیه می‌شود.'; +$lang['vs_newer'] = 'به نظر می‌رسد دوکوویکی اجرایی شما جدیدتر از نسخه‌ی پایدار است. ارتقای دستی توصیه نمی‌شود.'; +$lang['vs_same'] = 'دوکوویکی اجرایی شما بروز است. ارتقا لازم نیست.'; +$lang['vs_plugin'] = 'ارتقای جدید برای افزونه وجود دارد (%s) شما باید قبل از ادامه‌ دادن افزونه را ارتقا دهید.'; +$lang['vs_ssl'] = 'به نظر نمی‌رسد پی‌اچ‌پی شما از جریان SSL حمایت کند، دانلود داده‌های مورد نیاز با شکست مواجه خواهند شد. ارتقای دستی به جای این ارتقا.'; +$lang['dl_from'] = 'درحال دانلود آرشیو از %s...'; +$lang['dl_fail'] = 'دانلود ناموفق بود.'; +$lang['dl_done'] = 'دانلود تمام شد (%s).'; +$lang['pk_extract'] = 'بازکردن بسته‌ی آرشیو...'; +$lang['pk_fail'] = 'بازکردن بسته ناموفق بود.'; +$lang['pk_done'] = 'بازکردن بسته تمام شد.'; +$lang['pk_version'] = 'دوکوویکی %s آماده‌ی نصب است (شما درحال اجرای %s هستید).'; +$lang['ck_start'] = 'بررسی مجوز دسترسی فایل'; +$lang['ck_done'] = 'تمام فایل‌ها قابل نوشتن هستند. آماده برای بروزرسانی.'; +$lang['ck_fail'] = 'بعضی فایل‌ها قابل نوشتن نیستند. ارتقای خودکار امکان‌پذیر نیست.'; +$lang['cp_start'] = 'بروزرسانی فایل‌ها...'; +$lang['cp_done'] = 'همه‌ی فایل‌ها بروز شد.'; +$lang['cp_fail'] = 'اوه. چیزی اشتباه شد. بررسی دستی بهتر است.'; +$lang['tv_noperm'] = '%s قابل نوشتن نیست!'; +$lang['tv_upd'] = '%s بروزرسانی خواهد شد.'; +$lang['tv_nocopy'] = 'نمی‌توان %s را کپی کرد!'; +$lang['tv_nodir'] = 'نمی‌توان دایرکتوی %s ایجاد کرد!'; +$lang['tv_done'] = '%s بروزرسانی شد'; +$lang['rm_done'] = '%s منسوخ حذف شد.'; +$lang['rm_fail'] = 'توانایی حذف %s منسوخی نیست. لطفا دستی حذف کنید!'; +$lang['finish'] = 'ارتقا پایان یافت. از دوکوویکی جدید لذت ببر.'; +$lang['btn_continue'] = 'ادامه'; +$lang['btn_abort'] = 'سقط'; +$lang['step_version'] = 'بررسی'; +$lang['step_download'] = 'دانلود'; +$lang['step_unpack'] = 'بازکردن بسته'; +$lang['step_check'] = 'بازبینی'; +$lang['step_upgrade'] = 'نصب'; +$lang['careful'] = 'خطاهای بالا! شما باید نباید ادامه بدهید!'; diff --git a/sources/lib/plugins/upgrade/lang/fa/safemode.txt b/sources/lib/plugins/upgrade/lang/fa/safemode.txt new file mode 100644 index 0000000..0d67c81 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fa/safemode.txt @@ -0,0 +1 @@ +این ویکی پیکربندی شده برای حالت امن هک. متاسفانه ما نمی‌توانیم در این شرایط خودکار ارتقا دهیم. لطفا [[doku>install:upgrade|دستی ارتقا دهید.]] \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/fa/step0.txt b/sources/lib/plugins/upgrade/lang/fa/step0.txt new file mode 100644 index 0000000..135de49 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fa/step0.txt @@ -0,0 +1,7 @@ +این افزونه به طور خودکار ویکی شما را برای نسخه‌های موجود جدیدتر دوکوویکی ارتقا می‌دهد. قبل از ادامه، شما باید [[doku>changes|تغییرات]] را بخوانید که بررسی کنید که بعد و قبل ارتقا چکار کنید. + + برای فعال‌سازی ارتقای خودکار، روند پی‌اچ‌پی نیاز به مجوز ارسال برای فایل‌های دوکوویکی دارد. این افزونه مجوزهای لازم فایل را قبل از عملیات ارتقا بررسی می‌کند. + +این افزونه هیچ افزونه یا پوسته‌ای را ارتقا نمی‌دهد. + +ما توصیه می‌کنیم قبل از ادامه دادن یک نسخه‌ی پشتیبان(بک آپ) از ویکی‌تان تهیه کنید. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/fr/lang.php b/sources/lib/plugins/upgrade/lang/fr/lang.php new file mode 100755 index 0000000..6da33e5 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fr/lang.php @@ -0,0 +1,50 @@ + + * @author Nicolas Friedli + * @author Schplurtz le Déboulonné + * @author Thomas Ballarin + * @author Blacklord049 + */ +$lang['menu'] = 'Mise à jour du wiki'; +$lang['vs_php'] = 'Les nouvelles version de DokuWiki requièrent au moins la version %s de PHP, mais votre serveur propose %s. Il faut mettre PHP à jour avant DokuWiki.'; +$lang['vs_tgzno'] = 'Ne peut déterminer quelle est la plus récente version de DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s est disponible au téléchargement.'; +$lang['vs_local'] = 'Vous utilisez actuellement DokuWiki %s.'; +$lang['vs_localno'] = 'La version que vous utilisez actuellement ne peut pas être déterminée. Une mise à jour manuelle est recommandée.'; +$lang['vs_newer'] = 'Il semble que votre version actuelle de DokuWiki soit plus récente que l\'actuelle version stable. La mise à jour n\'est pas recommandée.'; +$lang['vs_same'] = 'Votre DokuWiki est le dernier en date. Pas besoin de mise à jour.'; +$lang['vs_plugin'] = 'Une nouvelle version de l\'extension de mise à jour est disponible (%s). Vous devriez la mettre à jour avant de continuer.'; +$lang['vs_ssl'] = 'Votre PHP semble ne pas prendre en charge les flux SSL; le téléchargement des données nécessaires va très probablement échouer. Faites la mise à jour manuellement.'; +$lang['dl_from'] = 'Téléchargement de l\'archive depuis %s...'; +$lang['dl_fail'] = 'Échec du téléchargement.'; +$lang['dl_done'] = 'Téléchargement achevé (%s).'; +$lang['pk_extract'] = 'Décompression de l\'archive...'; +$lang['pk_fail'] = 'Échec de la décompression.'; +$lang['pk_done'] = 'Décompression achevée.'; +$lang['pk_version'] = 'DokuWiki %s est prêt à être installé (Vous utilisez actuellement %s).'; +$lang['ck_start'] = 'Vérification des permissions des fichiers...'; +$lang['ck_done'] = 'Tous les fichiers sont autorisés en écriture. Prêt à mettre à jour.'; +$lang['ck_fail'] = 'Quelques fichiers sont interdits en écriture. La mise à jour automatique n\'est pas possible.'; +$lang['cp_start'] = 'Mise à jour des fichiers...'; +$lang['cp_done'] = 'Tous les fichiers ont été mis à jour.'; +$lang['cp_fail'] = 'Oups! Quelque chose est allé de travers. Il vaudrait mieux vérifier manuellement.'; +$lang['tv_noperm'] = '%s est interdit en écriture !'; +$lang['tv_upd'] = '%s sera mis à jour.'; +$lang['tv_nocopy'] = 'Impossible de copier le fichier %s!'; +$lang['tv_nodir'] = 'Impossible de créer le répertoire %s!'; +$lang['tv_done'] = 'Mis à jour : %s'; +$lang['rm_done'] = 'Suppression du fichier obsolète %s.'; +$lang['rm_fail'] = 'Impossible de supprimer le fichier obsolète %s. Veuillez le supprimer à la main.'; +$lang['finish'] = 'Mise à jour accomplie. Profitez de votre nouveau DokuWiki !'; +$lang['btn_continue'] = 'Continuer'; +$lang['btn_abort'] = 'Arrêter'; +$lang['step_version'] = 'Contrôler'; +$lang['step_download'] = 'Télécharger'; +$lang['step_unpack'] = 'Décompresser'; +$lang['step_check'] = 'Vérifier'; +$lang['step_upgrade'] = 'Installer'; +$lang['careful'] = 'Il y as des erreurs! Vous ne devriez pas continuer !'; diff --git a/sources/lib/plugins/upgrade/lang/fr/safemode.txt b/sources/lib/plugins/upgrade/lang/fr/safemode.txt new file mode 100755 index 0000000..6d8ab80 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fr/safemode.txt @@ -0,0 +1 @@ +Ce wiki est configuré pour utiliser le mode sans échec. Il n'est malheureusement pas possible de mettre à jour automatiquement le wiki dans ces conditions. Veuillez [[doku>install:upgrade|mettre à jour votre wiki manuellement]]. diff --git a/sources/lib/plugins/upgrade/lang/fr/step0.txt b/sources/lib/plugins/upgrade/lang/fr/step0.txt new file mode 100755 index 0000000..906367f --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/fr/step0.txt @@ -0,0 +1,7 @@ +Cette extension met votre DokuWiki à jour automatiquement, en installant la dernière version. Avant d'aller plus loin, vous devriez lire la liste des modifications apportées ([[doku>changes|Changelog]]), afin de voir s'il y a des étapes supplémentaires à faire avant ou après la mise à jour. + +Pour rendre la mise à jour automatique possible, PHP doit avoir les droits en écriture sur les fichiers de DokuWiki. Cette extension contrôle les permissions avant le début du processus de mise à jour. + +Cette extension ne met pas à jour les extensions et les thèmes. + +Nous vous recommandons d'effectuer une sauvegarde de votre wiki avant de poursuivre ! \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/hr/lang.php b/sources/lib/plugins/upgrade/lang/hr/lang.php new file mode 100644 index 0000000..94d556d --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hr/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'Wiki nadogradnja'; +$lang['vs_php'] = 'Nova inačica DokuWiki-a zahtjeva minimalno PHP %s, dok vi koristite %s. Morate nadograditi Vaš PHP prije nadogradnje!'; +$lang['vs_tgzno'] = 'Ne mogu odrediti zadnju inačicu DokuWiki-a.'; +$lang['vs_tgz'] = 'DokuWiki %s je raspoloživ za preuzimanje.'; +$lang['vs_local'] = 'Vi trenutno koristite DokuWiki %s.'; +$lang['vs_localno'] = 'Nije poznato koliko je stara vaša trenutna inačica, preporučamo ručnu nadogradnju.'; +$lang['vs_newer'] = 'Izgleda da je vaša inačica DokuWiki-a čak novija od zadnje stabilne inačice. Nadogradnja nije preporučljiva.'; +$lang['vs_same'] = 'Već koristite aktualnu inačicu DokuWiki-a. Nema potrebe za nadogradnjom.'; +$lang['vs_plugin'] = 'Na raspolaganju je novija inačica dodatka za nadogradnju (%s). Nadogradite ovaj dodatak prije nastavka.'; +$lang['vs_ssl'] = 'Vaš PHP izgleda ne podržava SSL strujanje, preuzimanje neophodnih podataka je najvjerojatnije neispravno. Stoga nadogradite ručno.'; +$lang['dl_from'] = 'Preuzimanje arhive iz %s...'; +$lang['dl_fail'] = 'Preuzimanje neuspješno.'; +$lang['dl_done'] = 'Preuzimanje završeno (%s).'; +$lang['pk_extract'] = 'Raspakiravanje arhive...'; +$lang['pk_fail'] = 'Raspakiravanje neuspješno.'; +$lang['pk_done'] = 'Raspakiravanje završeno.'; +$lang['pk_version'] = 'DokuWiki %s je spreman za postavljanje (Trenutno koristite %s).'; +$lang['ck_start'] = 'Provjera autorizacija...'; +$lang['ck_done'] = 'Sve datoteke su dostupne. Spreman za nadogradnju.'; +$lang['ck_fail'] = 'Neke datoteke nisu dostupne. Automatska nadogradnja nije moguća.'; +$lang['cp_start'] = 'Nadograđujem datoteke...'; +$lang['cp_done'] = 'Sve datoteke nadograđene.'; +$lang['cp_fail'] = 'Ups. Nešto je pošlo po krivu. Bolje da ručno provjerite.'; +$lang['tv_noperm'] = '%s nije moguće prepisati!'; +$lang['tv_upd'] = '%s će biti zamijenjen.'; +$lang['tv_nocopy'] = 'Ne mogu kopirati datoteku %s!'; +$lang['tv_nodir'] = 'Ne mogu kreirati mapu %s!'; +$lang['tv_done'] = 'nadograđen %s'; +$lang['rm_done'] = 'Suvišno %s obrisano.'; +$lang['rm_fail'] = 'Ne mogu obrisati suvišno %s. Molim da to obrišete ručno!'; +$lang['finish'] = 'Nadogradnja završena. Uživajte u novoj inačici DokuWiki-a'; +$lang['btn_continue'] = 'Nastavi'; +$lang['btn_abort'] = 'Prekini'; +$lang['step_version'] = 'Provjeri'; +$lang['step_download'] = 'Preuzmi'; +$lang['step_unpack'] = 'Raspakiraj'; +$lang['step_check'] = 'Provjeri'; +$lang['step_upgrade'] = 'Postavi'; +$lang['careful'] = 'Greške se nalaze iznad! Nemojte nastaviti!'; diff --git a/sources/lib/plugins/upgrade/lang/hr/safemode.txt b/sources/lib/plugins/upgrade/lang/hr/safemode.txt new file mode 100644 index 0000000..769883f --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hr/safemode.txt @@ -0,0 +1 @@ +Ovaj wiki je podešen da koristi "safemode hack". Nažalost ne možemo sigurno izvršiti automatsku nadogradnju pod tim uvjetima. Molim [[doku>install:upgrade|ručno nadogradite vaš wiki]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/hr/step0.txt b/sources/lib/plugins/upgrade/lang/hr/step0.txt new file mode 100644 index 0000000..6e7618a --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hr/step0.txt @@ -0,0 +1,7 @@ +Ovaj dodatak će automatski nadograditi vaš wiki na zadnju dostupnu DokuWIki inačicu. Prije nastavka, molimo da pročitate [[doku>changes|listu promjena]] da provjerite da li postoje neki dodatni koraci koje treba napraviti prije nadogradnje. + +Da bi nadogradnja bila moguća, PHP proces treba imati pravo pisanja po DokuWiki datotekama. Dodatak će provjeriti potrebna prava prije pokretanja procesa nadogradnje. + +Ovaj dodatak neće nadograditi niti jedan već postavljeni dodatak ili predložak. + +Preporučamo da napravite pričuvnu kopiju Vašeg wikija prije nastavka. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/hu/lang.php b/sources/lib/plugins/upgrade/lang/hu/lang.php new file mode 100755 index 0000000..9bacbdb --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hu/lang.php @@ -0,0 +1,47 @@ + + * @author DelD + */ +$lang['menu'] = 'Wiki-frissítő'; +$lang['vs_php'] = 'Az új DokuWiki-verzióknak legalább a PHP %s verziójára van szükség, miközben mi a %s verziót használjuk. Frissítenünk kell a PHP-t, mielőtt a wikit frissítenénk!'; +$lang['vs_tgzno'] = 'Nem tudom megállapítani a DokuWiki legújabb verzióját.'; +$lang['vs_tgz'] = 'Letölthető a DokuWiki %s.'; +$lang['vs_local'] = 'Jelenleg a DokuWiki %s változatát használjuk.'; +$lang['vs_localno'] = 'Nem tudom megállapítani, hogy milyen régi a jelenleg használt DokuWiki-verzió. Javaslom a manuális frissítést.'; +$lang['vs_newer'] = 'Úgy tűnik, a DokuWiki-nk újabb, mint a jelenleg elérhető, stabil kiadás, ezért nem ajánlott a frissítés.'; +$lang['vs_same'] = 'A DokuWiki-nk már naprakész. Nincs szükség frissítésre.'; +$lang['vs_plugin'] = 'Elérhető egy újabb bővítmény (%s\'), a folytatás előtt a frissítsük a bővítményt.'; +$lang['vs_ssl'] = 'Úgy tűnik, hogy a PHP-nk nem támogatja az SSL-adatfolyamokat, ezért a szükséges adatok letöltése nagy eséllyel hibás lesz. Frissítsünk manuálisan inkább.'; +$lang['dl_from'] = 'Archívum letöltése innen: %s...'; +$lang['dl_fail'] = 'A letöltés sikertelen.'; +$lang['dl_done'] = 'A letöltés befejeződött (%s).'; +$lang['pk_extract'] = 'Archívum kicsomagolása...'; +$lang['pk_fail'] = 'A kicsomagolás sikertelen.'; +$lang['pk_done'] = 'A kicsomagolás befejeződött.'; +$lang['pk_version'] = 'A DokuWiki %s készen áll a telepítésre. (Jelenleg telepítve: b>%s
    )'; +$lang['ck_start'] = 'Fájlok hozzáférési jogosultságainak ellenőrzése...'; +$lang['ck_done'] = 'Minden fájl írható. A frissítés készen áll a telepítésre.'; +$lang['ck_fail'] = 'Néhány fájl nem írható. Az automatikus frissítés nem lehetséges.'; +$lang['cp_start'] = 'Fájlok frissítése...'; +$lang['cp_done'] = 'Minden fájl frissítve.'; +$lang['cp_fail'] = 'Ejha. Valami nem sikerült. Jobb, ha manuálisan ellenőrizzük.'; +$lang['tv_noperm'] = 'A(z) %s nem írható!'; +$lang['tv_upd'] = 'A(z) %s frissítésre kerül!'; +$lang['tv_nocopy'] = 'Nem tudtam lemásolni a(z) %s nevű fájlt!'; +$lang['tv_nodir'] = 'Nem tudtam létrehozni a(z) %s nevű könyvtárat!'; +$lang['tv_done'] = '%s frissítve'; +$lang['rm_done'] = 'Elavult fájl törölve: %s.'; +$lang['rm_fail'] = 'Nem tudtam törölni az elavult fájlt: %s. Töröljük manuálisan!'; +$lang['finish'] = 'Frissítés kész. Élvezzük az új DokuWiki-t!'; +$lang['btn_continue'] = 'Folytatás'; +$lang['btn_abort'] = 'Megszakítás'; +$lang['step_version'] = 'Ellenőrzés'; +$lang['step_download'] = 'Letöltés'; +$lang['step_unpack'] = 'Kicsomagolás'; +$lang['step_check'] = 'Vizsgálat'; +$lang['step_upgrade'] = 'Telepítés'; +$lang['careful'] = 'Hiba! Ne folytassuk a műveletet!'; diff --git a/sources/lib/plugins/upgrade/lang/hu/safemode.txt b/sources/lib/plugins/upgrade/lang/hu/safemode.txt new file mode 100755 index 0000000..ba97e0b --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hu/safemode.txt @@ -0,0 +1 @@ +A wiki 'safemode hack' használatára van beállítva. Sajnos, ilyen körülmények mellett nem tudjuk a wikit biztonsággal frissíteni automatikusan. Próbáljuk meg a [[doku>install:upgrade|wiki manuális frissítését]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/hu/step0.txt b/sources/lib/plugins/upgrade/lang/hu/step0.txt new file mode 100755 index 0000000..5f33a3f --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/hu/step0.txt @@ -0,0 +1,7 @@ +A bővítmény automatikusan frissíti a wikit a legújabb elérhető DokuWiki-verzióra. A folytatás előtt olvassuk el a [[doku>changes|Changelog-ot (változások naplóját)]], ellenőrizendő, hogy a frissítés előtt vagy után szükséges-e bármilyen további lépés. + +Az automatikus frissítéshez a PHP-folyamatnak írási jogosultságra van szüksége a DokuWiki-fájlokhoz. A bővítmény ellenőrzi a szükséges fájljogosultságokat a frissítési folyamat megkezdése előtt. + +A bővítmény nem frissíti a már telepített bővítményeket vagy sablonokat. + +Javasoljuk, hogy a frissítés előtt készítsünk biztonsági másolatot. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/is/lang.php b/sources/lib/plugins/upgrade/lang/is/lang.php new file mode 100755 index 0000000..88d3ccf --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/is/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'Wiki uppfærsla'; +$lang['vs_php'] = 'Nýjar DokuWiki útgáfur þurfa að minnsta kosti PHP %s en þú ert að nota %s. Þú ættir að uppfæra PHP áður en þú uppfærir DokuWiki.'; +$lang['vs_tgzno'] = 'Gat ekki greint hvað er nýjasta útgáfan af DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s er fáanleg til niðurhals.'; +$lang['vs_local'] = 'Þú ert að nota DokuWiki %s núna.'; +$lang['vs_localno'] = 'Það er ekki ljóst hversu gömul núverandi útgáfa þín er. Það er mælt með handvirkri uppfærslu.'; +$lang['vs_newer'] = 'Það lítur út fyrir að núverandi útgáfa þín af DokuWiki sé jafnvel nýrri en nýjasta stöðuga útgáfan. Það er ekki mælt með því að uppfæra.'; +$lang['vs_same'] = 'Núverandi útgáfa þín af DokuWiki er þegar sú nýjasta. Engin þörf er á uppfærslu.'; +$lang['vs_plugin'] = 'Það er nýrri útgáfa til af uppfærsluviðbótinni (%s). Þú ættir að uppfæra viðbótina áður en þú heldur áfram.'; +$lang['vs_ssl'] = 'PHP virðist ekki styðja SSL strauma. Það mun líklegast mistakast að hala niður gögnin sem vantar. Uppfærðu handvirkt í staðinn.'; +$lang['dl_from'] = 'Sæki safnskrá frá %s...'; +$lang['dl_fail'] = 'Niðurhal mistókst.'; +$lang['dl_done'] = 'Niðurhali lokið (%s).'; +$lang['pk_extract'] = 'Afþjappa safnskrá...'; +$lang['pk_fail'] = 'Afþjöppun mistókst.'; +$lang['pk_done'] = 'Afþjöppun lokið.'; +$lang['pk_version'] = 'DokuWiki %s er tilbúinn til innsetningar (þú ert að nota %s eins og er.)'; +$lang['ck_start'] = 'Athuga réttindi...'; +$lang['ck_done'] = 'Allar skrár eru yfirskrifanlegar. Tilbúin til uppfærslu.'; +$lang['ck_fail'] = 'Sumar skrár eru ekki yfirskrifanlegar. Sjálfvirk uppfærsla er ekki möguleg.'; +$lang['cp_start'] = 'Uppfæri skrár...'; +$lang['cp_done'] = 'Allar skrár uppfærðar.'; +$lang['cp_fail'] = 'Æ og ó! Eitthvað fór úrskeiðis. Þú ættir að skoða þetta handvirkt.'; +$lang['tv_noperm'] = '%s er ekki yfirskrifanleg!'; +$lang['tv_upd'] = '%s verður uppfærð.'; +$lang['tv_nocopy'] = 'Gat ekki afritað skrá %s!'; +$lang['tv_nodir'] = 'Gat ekki búið til skráarsafn %s!'; +$lang['tv_done'] = 'uppfærði %s'; +$lang['rm_done'] = 'Úreldri skrá %s eytt.'; +$lang['rm_fail'] = 'Gat ekki eytt úreldri skrá %s. Vinsamlegast eyddu henni handvirkt!'; +$lang['finish'] = 'Uppfærsla tókst! Njóttu nýja DokuWikisins.'; +$lang['btn_continue'] = 'Halda áfram'; +$lang['btn_abort'] = 'Hætta við'; +$lang['step_version'] = 'Athuga'; +$lang['step_download'] = 'Sækja'; +$lang['step_unpack'] = 'Afþjappa'; +$lang['step_check'] = 'Staðfesta'; +$lang['step_upgrade'] = 'Innsetja'; +$lang['careful'] = 'Villur að ofan! Þú ættir ekki að halda áfram!'; diff --git a/sources/lib/plugins/upgrade/lang/is/safemode.txt b/sources/lib/plugins/upgrade/lang/is/safemode.txt new file mode 100755 index 0000000..0a22b41 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/is/safemode.txt @@ -0,0 +1 @@ +Þessi wiki er stilltur á að nota safemode breytinguna. Því miður getum við ekki uppfært wiki-inn örugglega undir þessum skilyrðum. Vinsamlegast [[doku>install:upgrade|uppfærðu wiki-inn handvirkt]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/is/step0.txt b/sources/lib/plugins/upgrade/lang/is/step0.txt new file mode 100755 index 0000000..c644f05 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/is/step0.txt @@ -0,0 +1,7 @@ +Þessi viðbót mun sjálfvirkt uppfæra wiki-inn þinn í nýjustu DokuWiki útgáfu. Áður en haldið er áfram ættir þú að lesa [[doku>changes|Breytingasöguna]] til að sjá hvort einhver viðbótar skref þurfi að taka fyrir eða eftir uppfærslu. + +Til að leyfa sjálfvirka uppfærslu þarf PHP forritið skriftar-réttindi á DokuWiki skrárnar. Viðbótin mun athuga hvort viðeigandi réttindi séu til staðar áður en uppfærslan hefst. + +Þessi viðbót mun ekki uppfæra neinar innsettar viðbætur eða skapalón. + +Við mælum með því að þú takir afrit af wiki-inum þínum áður en þú heldur áfram. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/it/lang.php b/sources/lib/plugins/upgrade/lang/it/lang.php new file mode 100755 index 0000000..9e2bf76 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/it/lang.php @@ -0,0 +1,48 @@ + + * @author Fabio + * @author Torpedo + */ +$lang['menu'] = 'Aggiornamento della Wiki'; +$lang['vs_php'] = 'La nuova versione DokuWiki necessita almeno di PHP %s, ma stai utilizzando %s. E\' necessario aggiornare PHP prima di aggiornare DokuWiki.'; +$lang['vs_tgzno'] = 'Impossibile determinare la nuova versione di DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s è disponibile per il download.'; +$lang['vs_local'] = 'Attualmente stai utilizzando DokuWiki %s.'; +$lang['vs_localno'] = 'Non è stato possibile determinare l\'età della versione DokuWiki in uso; si raccomanda di eseguire un aggiornamento manuale.'; +$lang['vs_newer'] = 'Sembra che la versione corrente di DokuWiki sia più recente dell\'ultima release stabile. L\'aggiornamento è sconsigliato.'; +$lang['vs_same'] = 'La versione DokuWiki che si sta usando è già aggiornata. Non è necessario alcun aggiornamento.'; +$lang['vs_plugin'] = 'C\'è un nuovo plugin di aggiornamento disponibile (%s); si consiglia di aggiornare il plugin di aggiornamento prima di continuare.'; +$lang['vs_ssl'] = 'La versione PHP in uso sembra non supportare stream SSL: il download dei dati probabilmente fallirà. Sarà necessario aggiornare manualmente.'; +$lang['dl_from'] = 'Sto scaricando l\'archivio da %s...'; +$lang['dl_fail'] = 'Download fallito.'; +$lang['dl_done'] = 'Download completato (%s).'; +$lang['pk_extract'] = 'Scompattando l\'archivio...'; +$lang['pk_fail'] = 'Scompattamento fallito.'; +$lang['pk_done'] = 'Scompattamento completo.'; +$lang['pk_version'] = 'DokuWiki %s è pronto per essere installato (attualmente stai eseguendo %s).'; +$lang['ck_start'] = 'Controllo i permessi sui file...'; +$lang['ck_done'] = 'Tutti i file sono scrivibili. Pronto per aggiornare.'; +$lang['ck_fail'] = 'Alcuni file non sono scrivibili. L\'aggiornamento automatico non è possibile.'; +$lang['cp_start'] = 'Aggiornamento file...'; +$lang['cp_done'] = 'Tutti i file sono aggiornati.'; +$lang['cp_fail'] = 'Uh-Oh! Qualcosa è andato storto. Meglio controllare a mano.'; +$lang['tv_noperm'] = '%s non è scrivibile!'; +$lang['tv_upd'] = '%s sarà aggiornato.'; +$lang['tv_nocopy'] = 'Non posso copiare il file %s!'; +$lang['tv_nodir'] = 'Non posso creare la directory %s!'; +$lang['tv_done'] = 'aggiornato %s'; +$lang['rm_done'] = '%s deprecato cancellato.'; +$lang['rm_fail'] = 'Non posso cancellare %s deprecato. Per favore cancellalo a mano!'; +$lang['finish'] = 'Aggiornamento completato. Divertiti con la tua nuova DokuWiki'; +$lang['btn_continue'] = 'Continua'; +$lang['btn_abort'] = 'Annulla'; +$lang['step_version'] = 'Controllo'; +$lang['step_download'] = 'Download'; +$lang['step_unpack'] = 'Scompattamento'; +$lang['step_check'] = 'Verifica'; +$lang['step_upgrade'] = 'Installazione'; +$lang['careful'] = 'Ci sono degli errori qua sopra! Non dovresti continuare!'; diff --git a/sources/lib/plugins/upgrade/lang/it/safemode.txt b/sources/lib/plugins/upgrade/lang/it/safemode.txt new file mode 100755 index 0000000..2296327 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/it/safemode.txt @@ -0,0 +1 @@ +Questa wiki è configurata per usare il trucco safemode. Sfortunatamente non possiamo aggiornare senza rischi la wiki automaticamente sotto queste condizioni. Per favore [[doku>install:upgrade|aggiorna la tua wiki manualmente]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/it/step0.txt b/sources/lib/plugins/upgrade/lang/it/step0.txt new file mode 100755 index 0000000..b7e1a36 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/it/step0.txt @@ -0,0 +1,7 @@ +Questo plugin aggiornerà automaticamente la wiki alla versione più recente disponibile di DokuWiki. Prima di continuare è consigliabile leggere il [[doku>changes|Changelog]] e controllare che non ci siano operazioni aggiuntive da eseguire prima o dopo l'aggiornamento. + +Per permettere l'aggiornamento automatico, il processo PHP necessita di impostare i permessi sui file DokuWiki. Il plugin controllerà i permessi necessari prima di avviare il processo di aggiornamento. + +Questo procedimento non aggiornerà nessun plugin installato e nessun template. + +Raccomandiamo di creare un backup della vostra wiki prima di continuare. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/ja/lang.php b/sources/lib/plugins/upgrade/lang/ja/lang.php new file mode 100755 index 0000000..af93ff3 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ja/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = 'Wiki のアップグレード'; +$lang['vs_php'] = '新しい DokuWiki には PHP %s 以上が必要ですが %s が稼働中です。DokuWiki のアップグレード前に PHP のアップグレードが必要です!'; +$lang['vs_tgzno'] = 'DokuWiki の最新バージョンが確認できませんでした。'; +$lang['vs_tgz'] = 'DokuWiki %s がダウンロード可能です。'; +$lang['vs_local'] = 'DokuWiki %s が稼働中です。'; +$lang['vs_localno'] = '稼働中のバージョンが明確でないので手動でのアップグレードをお勧めします。'; +$lang['vs_newer'] = '稼働中の DokuWiki は、最新の安定版リリースよりも新しいです。アップグレードはお勧めしません。'; +$lang['vs_same'] = 'この DokuWiki は既に最新です。アップグレードする必要はありません。'; +$lang['vs_plugin'] = '新しいアップグレードプラグインが利用可能です(%s) 。続行する前に、プラグインの更新が必要です。'; +$lang['vs_ssl'] = 'PHP が SSL 接続に未対応っぽいので、データのダウンロードができません。手動でアップグレードして下さい。'; +$lang['dl_from'] = '%s からアーカイブをダウンロード中...'; +$lang['dl_fail'] = 'ダウンロードが失敗しました。'; +$lang['dl_done'] = 'ダウンロードが完了しました(%s)。'; +$lang['pk_extract'] = 'アーカイブを解凍中...'; +$lang['pk_fail'] = '解凍が失敗しました。'; +$lang['pk_done'] = '解凍が完了しました。'; +$lang['pk_version'] = 'DokuWiki %s をインストールする準備ができました(現在 %s を実行中です)。'; +$lang['ck_start'] = 'ファイル権限を確認中...'; +$lang['ck_done'] = '全ファイルが書込み可能です。アップグレードする準備ができました。'; +$lang['ck_fail'] = 'いくつかのファイルが書込不可です。自動アップグレードは不可能です。'; +$lang['cp_start'] = 'ファイルの更新中...'; +$lang['cp_done'] = '全ファイルの更新完了。'; +$lang['cp_fail'] = '何かが間違っていました。手動で確認して下さい。'; +$lang['tv_noperm'] = '%s は書込み不可です!'; +$lang['tv_upd'] = '%s は更新可能です。'; +$lang['tv_nocopy'] = '%s ファイルがコピーできませんでした!'; +$lang['tv_nodir'] = '%s ディレクトリが作成できませんでした!'; +$lang['tv_done'] = '%s の更新完了。'; +$lang['rm_done'] = '廃止予定の %s の削除完了。'; +$lang['rm_fail'] = '廃止予定の %s が削除できませんでした。手動で削除して下さい!'; +$lang['finish'] = 'アップグレードが完了しました。新しい DokuWiki をお楽しみ下さい。'; +$lang['btn_continue'] = '続行'; +$lang['btn_abort'] = '中止'; +$lang['step_version'] = '確認'; +$lang['step_download'] = 'ダウンロード'; +$lang['step_unpack'] = '解凍'; +$lang['step_check'] = '検証'; +$lang['step_upgrade'] = 'インストール'; +$lang['careful'] = '重大なエラー!続行すべきではありません!'; diff --git a/sources/lib/plugins/upgrade/lang/ja/safemode.txt b/sources/lib/plugins/upgrade/lang/ja/safemode.txt new file mode 100755 index 0000000..f01e9d0 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ja/safemode.txt @@ -0,0 +1 @@ +このWikiは、セーフモードハックを使用するように設定されています。残念ながら、この設定では自動で安全に Wiki のアップグレードができません。[[doku>ja:install:upgrade|手動でWiki のアップグレード]]をしてください。 diff --git a/sources/lib/plugins/upgrade/lang/ja/step0.txt b/sources/lib/plugins/upgrade/lang/ja/step0.txt new file mode 100755 index 0000000..025b0fb --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ja/step0.txt @@ -0,0 +1,9 @@ +このプラグインは、稼働中の DokuWiki を利用可能な最新バージョンにアップグレードします。 +続行する前に、[[doku>ja:changes|更新履歴]]を読んで、アップグレードの前後に実行すべき追加の手順があるかどうかを確認してください。 + +自動アップグレードのために、DokuWikiのファイルは PHP プロセスからの書き込み権限が必要です。 +実際にアップグレードする前に、必要なファイルのアクセス権を検証します。 + +インストール済のプラグインやテンプレートはアップグレードされません。 + +処理を続行する前に wiki のバックアップの作成をお勧めします。 \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/ko/lang.php b/sources/lib/plugins/upgrade/lang/ko/lang.php new file mode 100755 index 0000000..7e2ef2b --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ko/lang.php @@ -0,0 +1,46 @@ + + */ +$lang['menu'] = '위키 업그레이드'; +$lang['vs_php'] = '새 도쿠위키 릴리스는 적어도 PHP %s이(가) 필요하지만, 현재 %s을(를) 실행하고 있습니다. 업그레이드하기 전에 PHP 버전을 업그레이드해야 합니다!'; +$lang['vs_tgzno'] = '도쿠위키의 최신 버전을 확인할 수 없습니다.'; +$lang['vs_tgz'] = '도쿠위키 %s을(를) 다운로드할 수 있습니다.'; +$lang['vs_local'] = '현재 도쿠위키 %s을(를) 실행하고 있습니다.'; +$lang['vs_localno'] = '현재 실행 중인 버전은 얼마나 오래되었는지 분명하지 않습니다, 수동 업그레이드를 권장합니다.'; +$lang['vs_newer'] = '현재 도쿠위키가 최신 안정 릴리스보다 새 릴리스인 것으로 보입니다. 업그레이드하지 않는 것이 좋습니다.'; +$lang['vs_same'] = '현재 도쿠위키가 이미 최신입니다. 업그레이드할 필요가 없습니다.'; +$lang['vs_plugin'] = '새 upgrade 플러그인을 사용할 수 있으므로 (%s) 계속하기 전에 플러그인을 업데이트해야 합니다.'; +$lang['vs_ssl'] = 'PHP가 SSL 스트림을 지원하지 않은 것으로 보이며, 필요한 데이터를 다운로드하는 것은 실패할 가능성이 높습니다. 대신 수동으로 업그레이드하세요.'; +$lang['dl_from'] = '%s에서 아카이브 다운로드 중...'; +$lang['dl_fail'] = '다운로드가 실패되었습니다.'; +$lang['dl_done'] = '다운로드가 완료되었습니다. (%s)'; +$lang['pk_extract'] = '아카이브를 압축 푸는 중...'; +$lang['pk_fail'] = '압축 풀기가 실패되었습니다.'; +$lang['pk_done'] = '압축 풀기가 완료되었습니다.'; +$lang['pk_version'] = '도쿠위키 %s은(는) 설치할 준비가 되어 있습니다. (현재 %s을(를) 실행하고 있습니다)'; +$lang['ck_start'] = '파일 권한 확인 중...'; +$lang['ck_done'] = '모든 파일을 쓸 수 있습니다. 업그레이드를 준비합니다.'; +$lang['ck_fail'] = '일부 파일을 쓸 수 없습니다. 자동으로 업그레이드는 할 수 없습니다.'; +$lang['cp_start'] = '파일을 업데이트 중...'; +$lang['cp_done'] = '모든 파일을 업데이트했습니다.'; +$lang['cp_fail'] = '어머나. 무언가가 잘못되었습니다. 수동으로 잘 확인하세요.'; +$lang['tv_noperm'] = '%s을(를) 쓸 수 없습니다!'; +$lang['tv_upd'] = '%s은(는) 업데이트됩니다.'; +$lang['tv_nocopy'] = '%s 파일을 복사할 수 없습니다!'; +$lang['tv_nodir'] = '%s 디렉터리를 만들 수 없습니다!'; +$lang['tv_done'] = '%s을(를) 업데이트했습니다'; +$lang['rm_done'] = '사용되지 않는 %s은(는) 삭제되었습니다.'; +$lang['rm_fail'] = '사용되지 않는 %s을(를) 삭제할 수 없습니다. 수동으로 삭제하세요!'; +$lang['finish'] = '업그레이드가 완료되었습니다. 새 도쿠위키를 즐기세요'; +$lang['btn_continue'] = '계속'; +$lang['btn_abort'] = '중단'; +$lang['step_version'] = '확인'; +$lang['step_download'] = '다운로드'; +$lang['step_unpack'] = '압축 풀기'; +$lang['step_check'] = '검증'; +$lang['step_upgrade'] = '설치'; +$lang['careful'] = '위에 오류가 있습니다! 계속해서는 안됩니다!'; diff --git a/sources/lib/plugins/upgrade/lang/ko/safemode.txt b/sources/lib/plugins/upgrade/lang/ko/safemode.txt new file mode 100755 index 0000000..366c3de --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ko/safemode.txt @@ -0,0 +1 @@ +이 위키는 안전 모드 해킹을 사용하도록 설정되어 있습니다. 불행히도 이 조건에서 자동으로 안전하게 위키를 업그레이드할 수 없습니다. [[doku>install:upgrade|수동으로 위키를 업그레이드]]하세요. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/ko/step0.txt b/sources/lib/plugins/upgrade/lang/ko/step0.txt new file mode 100755 index 0000000..f52bee5 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ko/step0.txt @@ -0,0 +1,7 @@ +이 플러그인은 자동으로 사용할 수 있는 최신 도쿠위키 버전으로 위키를 업그레이드합니다. 계속하기 전에, 업그레이드하기 전이나 후에 수행하기 위한 어떤 추가 단계가 있는지 확인하기 위해 [[doku>changes|바뀜기록]]을 읽어야 합니다. + +자동으로 업그레이드를 허용하려면, PHP 프로세스에는 도쿠위키 파일에 쓰기 권한이 필요합니다. 플러그인은 업그레이드 과정을 시작하기 전에 필요한 파일 권한을 확인합니다. + +이 플러그인은 어떠한 설치된 플러그인이나 템플릿도 업그레이드하지 않습니다. + +계속하기 전에 위키의 백업을 만드는 것이 좋습니다. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/nl/lang.php b/sources/lib/plugins/upgrade/lang/nl/lang.php new file mode 100755 index 0000000..d21eed8 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/nl/lang.php @@ -0,0 +1,49 @@ + + * @author Peter van Diest + * @author Toon + * @author Joachim David + */ +$lang['menu'] = 'Wiki-upgrade'; +$lang['vs_php'] = 'Nieuwe Dokuwiki releases hebben minstens PHP %s nodig, maar je gebruikt %s. Je moet eerst je PHP-versie vernieuwen voor je Dokuwiki vernieuwt!'; +$lang['vs_tgzno'] = 'Kan niet de laatste versie van Dokuwiki bepalen.'; +$lang['vs_tgz'] = 'DokuWiki %s is beschikbaar voor download.'; +$lang['vs_local'] = 'Je gebruikt nu DokuWiki %s.'; +$lang['vs_localno'] = 'Het is niet duidelijk hoe oud de versie is die je nu gebruikt, handmatige upgrade is aan te raden.'; +$lang['vs_newer'] = 'Het lijkt erop dat je huidige Dokuwiki nog nieuwer is dan de laatste stabiele release. Een upgrade is niet aan te raden.'; +$lang['vs_same'] = 'Je huidige Dokuwiki is al up-to-date. Een upgrade is niet nodig.'; +$lang['vs_plugin'] = 'Er is een nieuwere upgrade-plugin beschikbaar (%s), je kunt de plugin beter vernieuwen voor je verder gaat.'; +$lang['vs_ssl'] = 'Je PHP lijkt SSL-streams niet te ondersteunen, het downloaden van de benodigde data zal waarschijnlijk misgaan. Voer een handmatige upgrade uit.'; +$lang['dl_from'] = 'Archief wordt van %s gedownload...'; +$lang['dl_fail'] = 'Download is mislukt.'; +$lang['dl_done'] = 'Download is compleet (%s)'; +$lang['pk_extract'] = 'Archief uitpakken...'; +$lang['pk_fail'] = 'Uitpakken mislukt.'; +$lang['pk_done'] = 'Uitpakken voltooid.'; +$lang['pk_version'] = 'DokuWiki %s is klaar om geïnstalleerd te worden. (Op dit moment gebnruik je %s.)'; +$lang['ck_start'] = 'Bestandspermissies controleren...'; +$lang['ck_done'] = 'Alle bestanden zijn beschrijfbaar. Klaar om te upgraden.'; +$lang['ck_fail'] = 'Sommige bestanden zijn niet beschrijfbaar. Automatische upgrade niet mogelijk.'; +$lang['cp_start'] = 'Bestanden updaten...'; +$lang['cp_done'] = 'Alle bestanden zijn geüpdatet.'; +$lang['cp_fail'] = 'Ow-ow. Er ging iets fout. Controleer dit best handmatig.'; +$lang['tv_noperm'] = '%s is niet beschrijfbaar!'; +$lang['tv_upd'] = '%s zal worden geüpdatet.'; +$lang['tv_nocopy'] = 'Kan het bestand %s niet kopiëren!'; +$lang['tv_nodir'] = 'De map %s kan niet aangemaakt worden!'; +$lang['tv_done'] = '%s is geüpdatet.'; +$lang['rm_done'] = 'Verouderde %s verwijderd.'; +$lang['rm_fail'] = 'Verouderde %s kan niet worden verwijderd. Verwijder alsjeblieft handmatig!'; +$lang['finish'] = 'Upgrade compleet. Geniet van je nieuwe DokuWiki'; +$lang['btn_continue'] = 'Doorgaan'; +$lang['btn_abort'] = 'Afbreken'; +$lang['step_version'] = 'Controleer'; +$lang['step_download'] = 'Download'; +$lang['step_unpack'] = 'Pak uit'; +$lang['step_check'] = 'Verifiëer'; +$lang['step_upgrade'] = 'Installeer'; +$lang['careful'] = 'Fouten in het bovenstaande! Ga niet door!'; diff --git a/sources/lib/plugins/upgrade/lang/nl/safemode.txt b/sources/lib/plugins/upgrade/lang/nl/safemode.txt new file mode 100755 index 0000000..a3f440b --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/nl/safemode.txt @@ -0,0 +1 @@ +Deze wiki is geconfigureerd om de safemode hack te gebruiken. Helaas kunnen we onder die omstandigheden de wiki niet automatisch upgraden. [[doku>install:upgrade|Upgrade je wiki alsjeblieft handmatig]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/nl/step0.txt b/sources/lib/plugins/upgrade/lang/nl/step0.txt new file mode 100755 index 0000000..5d5b13a --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/nl/step0.txt @@ -0,0 +1,7 @@ +Deze plugin vernieuwt je wiki automatisch naar de nieuwste beschikbare Dokuwiki-versie. Lees voor je verder gaat de [[doku>changes|Changelog]] om te zien of je voor of na de upgrade nog extra stappen moet doen. + +Voor een automatische upgrade heeft het PHP-proces schrijfrechten op de Dokuwiki-bestanden nodig. De plugin checkt de benodigde bestandsrechten alvorens de upgrade te starten. + +De plugin vernieuwt geen geïnstalleerde plugins of templates + +We raden aan vóór je verder gaat een backup van je wiki te maken. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/no/lang.php b/sources/lib/plugins/upgrade/lang/no/lang.php new file mode 100755 index 0000000..799e418 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/no/lang.php @@ -0,0 +1,48 @@ + + * @author Arne Hanssen + */ +$lang['menu'] = 'Wiki-oppgradering'; +$lang['vs_php'] = 'Den nye DokuWiki-utgaven trenger minst PHP %s, men du kjører %s. +Du bør oppgradere PHP-versjonen din før du oppgraderer wikien!'; +$lang['vs_tgzno'] = 'Kan ikke fastslå den nyeste versjonen av DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s er tilgjengelig for nedlastning.'; +$lang['vs_local'] = 'Du kjører for øyeblikket DokuWiki %s.'; +$lang['vs_localno'] = 'Det er ikke mulig å fastslå hvor gammel din nåværende versjon er. Manuell oppgradering anbefales.'; +$lang['vs_newer'] = 'Det ser ut til at nåværende Dokuwiki er nyere enn siste stabile utgave. Oppdatering anbefales ikke.'; +$lang['vs_same'] = 'Din nåværende DokuWiki er allerede nyeste utgave. Ingen behov for oppgradering.'; +$lang['vs_plugin'] = 'Det fins en nyere oppgraderingsutvidelse (%s). Du bør oppdatere denne utvidelsen før du fortsetter.'; +$lang['vs_ssl'] = 'Din PHP synes å ikke støtte SSL-strømming. Nedlastingen vil derfor trolig feile. Oppgrader manuelt i stedet.'; +$lang['dl_from'] = 'Laster ned filarkiv fra %s...'; +$lang['dl_fail'] = 'Nedlastningen mislyktes.'; +$lang['dl_done'] = 'Nedlastningen er fullført (%s).'; +$lang['pk_extract'] = 'Pakker ut filarkivet...'; +$lang['pk_fail'] = 'Utpakkingen mislyktes.'; +$lang['pk_done'] = 'Utpakkingen er fullført.'; +$lang['pk_version'] = 'DokuWiki %s er klar til å installere (Du kjører for øyeblikket %s).'; +$lang['ck_start'] = 'Kontrollerer filtillatelser...'; +$lang['ck_done'] = 'Alle filer har skrivetillatelse. Klar til oppgradering.'; +$lang['ck_fail'] = 'Noen filer har ikke skrivetillatelse. Automatisk oppgradering er ikke mulig.'; +$lang['cp_start'] = 'Oppdaterer filer...'; +$lang['cp_done'] = 'Alle filene er oppdatert.'; +$lang['cp_fail'] = 'Huff. Noe gikk galt. Sjekk feilen manuelt.'; +$lang['tv_noperm'] = ' %s har ikke skrivetillatelse!'; +$lang['tv_upd'] = '%s vil oppdateres.'; +$lang['tv_nocopy'] = 'Kunne ikke kopiere filen %s!'; +$lang['tv_nodir'] = 'Kunne ikke opprette katalogen %s!'; +$lang['tv_done'] = 'oppdatert %s'; +$lang['rm_done'] = 'Utgått %s slettet.'; +$lang['rm_fail'] = 'Kunne ikke slette utgått %s. Vennligst slett manuelt!'; +$lang['finish'] = 'Oppgraderingen er fullført. Nyt din nye DokuWiki'; +$lang['btn_continue'] = 'Fortsett'; +$lang['btn_abort'] = 'Avbryt'; +$lang['step_version'] = 'Kontrollér'; +$lang['step_download'] = 'Last ned'; +$lang['step_unpack'] = 'Pakk ut'; +$lang['step_check'] = 'Verifisér'; +$lang['step_upgrade'] = 'Installér'; +$lang['careful'] = 'Se feil over! Du bør ikke fortsette!'; diff --git a/sources/lib/plugins/upgrade/lang/no/safemode.txt b/sources/lib/plugins/upgrade/lang/no/safemode.txt new file mode 100755 index 0000000..4d7d9ae --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/no/safemode.txt @@ -0,0 +1,2 @@ +Wikien er konfigurert for å bruke safemode hack. Uheldigvis kan vi ikke sikkert oppgradere wikien automatisk under slike forhold. +Vennligst [[doku>install:upgrade|oppgrader wikien manuelt]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/no/step0.txt b/sources/lib/plugins/upgrade/lang/no/step0.txt new file mode 100755 index 0000000..38c9ce6 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/no/step0.txt @@ -0,0 +1,7 @@ +Denne programutvidelsen vil automatisk oppgradere din wiki til den nyeste stabile versjonen av DokuWiki. Før du fortsetter bør du lese [[doku>changes|Changelog]] for å sjekke om det er noen du må gjøre i tillegg til selve oppdateringen. + +Denne automatisk oppgraderingen krever at PHP-prosessen har skrivetillatelse for DokuWiki-filer. Programutvidelsen vil selv sjekke om de nødvendige filtillatelsene er på plass før oppgraderingen starter. + +Programutvidelsen vil ikke oppgradere installerte utvidelser eller maler. + +Vi anbefaler at du tar en sikkerhetskopi av wikien før du fortsetter. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/pt-br/lang.php b/sources/lib/plugins/upgrade/lang/pt-br/lang.php new file mode 100644 index 0000000..7097fbd --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/pt-br/lang.php @@ -0,0 +1,16 @@ + + */ +$lang['menu'] = 'Atualização do wiki'; +$lang['vs_php'] = 'Para essa versão do DokuWiki é necessário, no mínimo, a versão %s do PHP, mas a sua versão atual é a %s. Por favor, atualize a versão do PHP antes de prosseguir com a atualização do DokuWiki.'; +$lang['vs_tgzno'] = 'Não foi possível determinar qual a versão mais recente do DokuWiki.'; +$lang['vs_tgz'] = 'O DokuWiki %s está disponível para download.'; +$lang['vs_local'] = 'Atualmente você está executando a versão %s do DokuWiki.'; +$lang['vs_localno'] = 'Não foi possível avaliar o quão antiga é a sua versão do DokuWiki. Recomenda-se a atualização manual.'; +$lang['vs_newer'] = 'Aparentemente a versão do seu DokuWiki é mais recente do que a última versão estável. A atualização não é recomendável.'; +$lang['vs_same'] = 'A sua versão do DokuWiki está atualizada. Não é necessária nenhuma atualização.'; +$lang['vs_plugin'] = 'Existe uma versão mais recente do plugin de atualização (%s). Você deveria atualizar o plugin antes de continuar.'; diff --git a/sources/lib/plugins/upgrade/lang/pt/lang.php b/sources/lib/plugins/upgrade/lang/pt/lang.php new file mode 100644 index 0000000..70ddb8c --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/pt/lang.php @@ -0,0 +1,47 @@ + + */ +$lang['menu'] = 'Atualização Wiki'; +$lang['vs_php'] = 'A nova versão do DokuWiki necessita ao menos PHP %s, mas você está utilizando %s. +Você deve fazer atualizar sua versão do PHP antes de continuar a atualização!'; +$lang['vs_tgzno'] = 'Não foi possível determinar a versão mais nova do DokuWiki.'; +$lang['vs_tgz'] = 'DokuWiki %s está disponível para download.'; +$lang['vs_local'] = 'Você está atualmente rodando DokuWiki %s.'; +$lang['vs_localno'] = 'Não está claro qual a sua versão, é recomendado a atualização manual.'; +$lang['vs_newer'] = 'Parece que seu DokuWiki é mais recente que a última versão estável. Atualização não recomendável.'; +$lang['vs_same'] = 'Seu DokuWiki já é a versão mais recente. Não necessita de atualização.'; +$lang['vs_plugin'] = 'Há uma nova atualização de plugin disponível (%s) você deve atualizar o plugin antes de continuar.'; +$lang['vs_ssl'] = 'Seu PHP parece não suportar SSL, download da informação necessária irá falhar. Atualize manualmente.'; +$lang['dl_from'] = 'Fazendo download de %s...'; +$lang['dl_fail'] = 'Falha de download.'; +$lang['dl_done'] = 'Download completo (%s).'; +$lang['pk_extract'] = 'Descompactando...'; +$lang['pk_fail'] = 'Falha de descompactação.'; +$lang['pk_done'] = 'Descompactação completada.'; +$lang['pk_version'] = 'DokuWiki %s já está instalado (Você está rodando a versão %s).'; +$lang['ck_start'] = 'Verificando permissões de arquivo ...'; +$lang['ck_done'] = 'Todos os arquivos são graváveis. Pronto para atualizar.'; +$lang['ck_fail'] = 'Alguns arquivos não são graváveis. Não é possível a atualização automática.'; +$lang['cp_start'] = 'Atualizando arquivos ...'; +$lang['cp_done'] = 'Todos os arquivos atualizados.'; +$lang['cp_fail'] = 'Uh-Oh. Algo deu errado. Melhor verificar manualmente.'; +$lang['tv_noperm'] = '%s não é gravável!'; +$lang['tv_upd'] = '%s será atualizado.'; +$lang['tv_nocopy'] = 'Não foi possível copiar o arquivo %s!'; +$lang['tv_nodir'] = 'Não foi possível criar o diretório %s!'; +$lang['tv_done'] = '%s atualizado!'; +$lang['rm_done'] = '%s obsoleto excluído.'; +$lang['rm_fail'] = 'Não foi possível excluir %s obsoleto. Por favor, apague manualmente! '; +$lang['finish'] = 'Atualizar concluída. Aproveite o seu novo DokuWiki'; +$lang['btn_continue'] = 'Continue'; +$lang['btn_abort'] = 'Abortar'; +$lang['step_version'] = 'Checar'; +$lang['step_download'] = 'Download'; +$lang['step_unpack'] = 'Descompactar'; +$lang['step_check'] = 'Verificar'; +$lang['step_upgrade'] = 'Instalar'; +$lang['careful'] = 'Erros acima! Você não deve continuar!'; diff --git a/sources/lib/plugins/upgrade/lang/pt/safemode.txt b/sources/lib/plugins/upgrade/lang/pt/safemode.txt new file mode 100644 index 0000000..37287d7 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/pt/safemode.txt @@ -0,0 +1 @@ +Este wiki é configurado para usar o modo seguro. Infelizmente, não podemos atualizar automaticamente com segurança o wiki sob estas condições. Por favor [[doku>install:upgrade|atualize seu wiki manualmente]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/pt/step0.txt b/sources/lib/plugins/upgrade/lang/pt/step0.txt new file mode 100644 index 0000000..6140737 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/pt/step0.txt @@ -0,0 +1,7 @@ +Este plugin irá atualizar automaticamente o seu wiki para a versão mais recente disponível do DokuWiki. Antes de continuar, você deve ler o [[doku>changes|Changelog]] para verificar se existem quaisquer passos adicionais que você deva realizar antes ou após a atualização. + +Para permitir a atualização automática, o processo PHP requer permissões de gravação para arquivos Dokuwiki. O plugin irá verificar as permissões de arquivos necessários antes de iniciar o processo de atualização. + +Este plugin não irá atualizar nenhum plugin ou modelos instalados. + +Nós recomendamos que você crie um backup do seu wiki antes de continuar. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/ru/lang.php b/sources/lib/plugins/upgrade/lang/ru/lang.php new file mode 100755 index 0000000..0fbffd4 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ru/lang.php @@ -0,0 +1,50 @@ + + * @author Aleksandr Selivanov + * @author Vladimir Rozhkov + * @author Vitaly Filatenko + * @author TyanNN + */ +$lang['menu'] = 'Обновление вики'; +$lang['vs_php'] = 'Новые версии «Докувики» требуют PHP версии не менее %s, но у вас установлена %s. Вы должны обновить PHP до новой версии перед обновлением.'; +$lang['vs_tgzno'] = 'Нет возможности определить новую версию «Докувики».'; +$lang['vs_tgz'] = '«Докувики» %s доступна для скачивания.'; +$lang['vs_local'] = 'У вас запущена «Докувики» %s.'; +$lang['vs_localno'] = 'Невозможно определить последнюю установленную версию, рекомендуется ручное обновление. '; +$lang['vs_newer'] = 'Похоже, текущая версия вашей «Докувики» новее последней стабильной сборки. Обновление не рекомендовано.'; +$lang['vs_same'] = 'Ваша «Докувики» уже обновлена до последней версии. Обновление не нужно.'; +$lang['vs_plugin'] = 'Доступна новая версия плагина обновления (%s). Вы должны переустановить плагин обновления до обновления «Докувики».'; +$lang['vs_ssl'] = 'Похоже, что ваш PHP не поддерживает SSL, процесс загрузки может завершиться неудачей. Рекомендуется ручное обновление.'; +$lang['dl_from'] = 'Загрузка архива из %s...'; +$lang['dl_fail'] = 'Ошибка загрузки.'; +$lang['dl_done'] = 'Загрузка завершена (%s).'; +$lang['pk_extract'] = 'Распаковка архива...'; +$lang['pk_fail'] = 'Ошибка распаковки.'; +$lang['pk_done'] = 'Распаковка завершена'; +$lang['pk_version'] = '«Докувики» %s уже установлена (текущая установка %s).'; +$lang['ck_start'] = 'Проверка прав доступа к файлам...'; +$lang['ck_done'] = 'Все файлы доступны для записи. Готово к обновлению.'; +$lang['ck_fail'] = 'Некоторые файлы недоступны для записи. Автообновление невозможно.'; +$lang['cp_start'] = 'Обновление файлов...'; +$lang['cp_done'] = 'Все файлы обновлены.'; +$lang['cp_fail'] = 'Ой... Что-то пошло не так. Лучше проверить вручную.'; +$lang['tv_noperm'] = 'Не могу записать %s!'; +$lang['tv_upd'] = '%s будет обновлён.'; +$lang['tv_nocopy'] = 'Невозможно скопировать файл %s!'; +$lang['tv_nodir'] = 'Невозможно создать папку %s!'; +$lang['tv_done'] = 'обновление %s'; +$lang['rm_done'] = 'Устаревший %s удалён.'; +$lang['rm_fail'] = 'Невозможно удалить устаревший %s. Пожалуйста, удалите вручную!'; +$lang['finish'] = 'Обновление завершено. Наслаждайтесь своей новой «Докувики»'; +$lang['btn_continue'] = 'Продолжить'; +$lang['btn_abort'] = 'Отменить'; +$lang['step_version'] = 'Отменить'; +$lang['step_download'] = 'Загрузить'; +$lang['step_unpack'] = 'Распаковать'; +$lang['step_check'] = 'Проверить'; +$lang['step_upgrade'] = 'Установить'; +$lang['careful'] = 'Ошибки выше! Продолжать не стоит!'; diff --git a/sources/lib/plugins/upgrade/lang/ru/safemode.txt b/sources/lib/plugins/upgrade/lang/ru/safemode.txt new file mode 100755 index 0000000..8faeb7f --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ru/safemode.txt @@ -0,0 +1 @@ +Ваша вики настроена с использованием safemode, поэтому не может быть обновлена в автоматическом режиме. Пожалуйста, ознакомьтесь с разделом [[doku>ru:install:upgrade|Обновление]]. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/ru/step0.txt b/sources/lib/plugins/upgrade/lang/ru/step0.txt new file mode 100755 index 0000000..0e81d27 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/ru/step0.txt @@ -0,0 +1,7 @@ +Плагин будет автоматически обновлять вашу вики до последней доступной версии «Докувики». Перед продолжением вы должны прочесть [[doku>changes|журнал изменений]] (англ.), чтобы узнать о дополнительных шагах, которые нужно будет выполнить до или после обновления. + +Чтобы обновления автоматически устанавливались, PHP-процессу требуются права для записи файлов «Докувики». Плагин обновления проверит налиие прав перед началом процесса обновления. + +Плагин не будет обновлять уже установленные плагины или шаблоны (темы оформления). + +Рекомендуем вам создать резервную копию вашей вики **до** обновления. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/tr/lang.php b/sources/lib/plugins/upgrade/lang/tr/lang.php new file mode 100755 index 0000000..01a6f77 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/tr/lang.php @@ -0,0 +1,45 @@ + + */ +$lang['menu'] = 'Wiki Yükseltme'; +$lang['vs_php'] = 'Yeni DokuWiki sürümü en azından PHP %s gerektirir, ancak siz %s kullanıyorsunuz. Devam etmeden önce PHP sürümünüzü yükseltmelisiniz.'; +$lang['vs_tgzno'] = 'DokuWiki\'nin en yeni sürümü tespit edilemedi.'; +$lang['vs_tgz'] = 'DokuWiki %s indirilmek için hazır.'; +$lang['vs_local'] = 'Kullanmakta olduğunuz DokuWiki %s.'; +$lang['vs_localno'] = 'Kullandığınız sürümün tarihi tespit edilemedi. Elle yükseltme yapmanız tavsiye edilir.'; +$lang['vs_newer'] = 'Görünüşe göre en güncel kararlı sürümden daha yeni bir DokuWiki kullanıyorsunuz. Yükseltme yapmanız önerilmez.'; +$lang['vs_same'] = 'DokuWiki\'niz güncel. Yükseltmeye gerek yok.'; +$lang['vs_plugin'] = 'Yükseltme eklentisinin daha güncel bir sürümü mevcut (%s) Devam etmeden önce eklentiyi güncellemelisiniz.'; +$lang['vs_ssl'] = 'Görünüşe göre PHP oturumunuz SSL yayınlarını desteklemiyor. Gerekli dosyaların indirilmesi yüksek ihtimalle başarısız olacak. Elle güncelleme yapmanız önerilir.'; +$lang['dl_from'] = 'Arşiv, %s adresinden indiriliyor...'; +$lang['dl_fail'] = 'İndirme başarısız oldu.'; +$lang['dl_done'] = 'İndirme tamamlandı (%s).'; +$lang['pk_extract'] = 'Arşiv açılıyor...'; +$lang['pk_fail'] = 'Arşivin açılması başarısız oldu.'; +$lang['pk_done'] = 'Arşivin açıklası tamamlandı.'; +$lang['pk_version'] = 'DokuWiki %s , kurulmaya hazır (Şu an kullanmakta olduğunuz sürüm %s).'; +$lang['ck_start'] = 'Dosya izinleri kontrol ediliyor...'; +$lang['ck_done'] = 'Tüm dosyalar yazılabilir. Yükseltme için hazır.'; +$lang['ck_fail'] = 'Bazı dosyalar yazılabilir değil. Otomatik yükseltme mümkün değil.'; +$lang['cp_start'] = 'Dosyalar güncelleniyor...'; +$lang['cp_done'] = 'Tüm dosyalar güncellendi.'; +$lang['cp_fail'] = 'Offf! Birşey yanlış gitti. En iyisi elle kontrol edin.'; +$lang['tv_noperm'] = '%s yazılabilir değil!'; +$lang['tv_upd'] = '%s güncellenecek.'; +$lang['tv_nocopy'] = '%s dosyası kopyalanamıyor!'; +$lang['tv_nodir'] = '%s klasörü oluşturulamıyor!'; +$lang['tv_done'] = '%s güncellendi'; +$lang['rm_done'] = 'Çakışan %s silindi.'; +$lang['rm_fail'] = 'Çakışan %s silinemiyor. Lütfen elle silin!'; +$lang['finish'] = 'Yükseltme tamamlandı. Yeni DokuWiki\'nizin keyfini çıkarın'; +$lang['btn_continue'] = 'Devam et'; +$lang['btn_abort'] = 'İptal'; +$lang['step_version'] = 'Kontrol et'; +$lang['step_download'] = 'İndir'; +$lang['step_unpack'] = 'Doayaları çıkar'; +$lang['step_check'] = 'Doğrula'; +$lang['step_upgrade'] = 'Kur'; diff --git a/sources/lib/plugins/upgrade/lang/tr/safemode.txt b/sources/lib/plugins/upgrade/lang/tr/safemode.txt new file mode 100755 index 0000000..b589751 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/tr/safemode.txt @@ -0,0 +1 @@ +Bu wiki safemod hack kullanacak şekilde yapılandırılmış. Ne yazık ki bu şartlar altında wikiyi otomatik olarak güvenli bir şekilde yükseltemeyiz. Lütfen [[doku>install:upgrade|wikinizin elle yükseltilmesi (İngilizce)]] sayfasındaki talimatları okuyun. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/tr/step0.txt b/sources/lib/plugins/upgrade/lang/tr/step0.txt new file mode 100755 index 0000000..9debf31 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/tr/step0.txt @@ -0,0 +1,7 @@ +Bu eklenti wikinizi otomatik olarak mecut olan en yeni DokuWiki sürümüne yükseltecek. Devam etmeden önce yapmanız gereken ek basamaklar olup olmadığını [[doku>changes|Changelog]] adresinden kontrol etmeniz önerilir. + +Otomatik yükseltmenin yapılabilmesi için PHP sürecinin DokuWiki dosyalarına yazma hakkı olmalıdır. Eklenti, yükseltme sürecine başlamadan önce gerekli dosya izinlerini kontrol edecektir. + +Bu eklenti, yüklü olan şablon ve eklentileri yükseltmeyecektir. + +Devam etmeden önce wikinizin bir yedeğini oluşturmanızı öneririz. \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/zh-tw/lang.php b/sources/lib/plugins/upgrade/lang/zh-tw/lang.php new file mode 100755 index 0000000..2116eaf --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh-tw/lang.php @@ -0,0 +1,45 @@ + + */ +$lang['menu'] = '升級Wiki'; +$lang['vs_php'] = '新版的DokuWiki需要至少PHP %s,但你目前運行的是 %s。你應該要在升級Wiki前先升級你的PHP。'; +$lang['vs_tgzno'] = '無法決定最新的DokuWiki版本。'; +$lang['vs_tgz'] = 'DokuWiki %s 現已可供下載。'; +$lang['vs_local'] = '你目前運行 DokuWiki %s'; +$lang['vs_localno'] = '沒辦法清楚知道你目前運行的版本有多舊,建議手動升級。'; +$lang['vs_newer'] = '看起來你目前的 DokuWiki 版本比最新穩定版本還要新。不建議升級。'; +$lang['vs_same'] = '你目前的 DokuWiki 已經是最新的。沒必要升級。'; +$lang['vs_plugin'] = '有一個新的套件升級版本 (%s) 可供使用。你應該在繼續前先升級該外掛。'; +$lang['vs_ssl'] = '你的 PHP 看起來不支援 SSL 串流加密,下載資料很有可能會失敗。請以手動升級方式替代。'; +$lang['dl_from'] = '從 %s 下載檔案中...'; +$lang['dl_fail'] = '下載失敗'; +$lang['dl_done'] = '下載完成 (%s)'; +$lang['pk_extract'] = '解開檔案中...'; +$lang['pk_fail'] = '解開檔案失敗。'; +$lang['pk_done'] = '解開檔案完成。'; +$lang['pk_version'] = 'DokuWiki版本 %s 已準備好進行安裝 (你目前運行的是 %s).'; +$lang['ck_start'] = '檢查權限'; +$lang['ck_done'] = '所有檔案皆有寫入權限。已準備好升級'; +$lang['ck_fail'] = '部分檔案沒有寫入權限。自動升級是不可能的'; +$lang['cp_start'] = '更新檔案中...'; +$lang['cp_done'] = '所有檔案已更新完成'; +$lang['cp_fail'] = '哦。有東西出錯了。最好手動檢查。'; +$lang['tv_noperm'] = '%s 沒有寫入權限'; +$lang['tv_upd'] = '%s 將進行更新'; +$lang['tv_nocopy'] = '無法複製檔案 %s!'; +$lang['tv_nodir'] = '無法建立資料夾 %s!'; +$lang['tv_done'] = '%s 已更新'; +$lang['rm_done'] = '%s不建議使用並已刪除'; +$lang['rm_fail'] = '沒辦法刪除該遺棄之 %s。請手動刪除之。'; +$lang['finish'] = '升級完成。開始享受你全新的DokuWiki。'; +$lang['btn_continue'] = '繼續'; +$lang['btn_abort'] = '中止'; +$lang['step_version'] = '檢查'; +$lang['step_download'] = '下載'; +$lang['step_unpack'] = '解開'; +$lang['step_check'] = '驗證'; +$lang['step_upgrade'] = '安裝'; diff --git a/sources/lib/plugins/upgrade/lang/zh-tw/safemode.txt b/sources/lib/plugins/upgrade/lang/zh-tw/safemode.txt new file mode 100755 index 0000000..847bdbd --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh-tw/safemode.txt @@ -0,0 +1 @@ +這個Wiki被設定成使用 safemode hack。在這個情況下,很不幸的我們沒辦法安全且自動的升級wiki。請[[doku>install:upgrade|手動升級你的wiki]]。 \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/zh-tw/step0.txt b/sources/lib/plugins/upgrade/lang/zh-tw/step0.txt new file mode 100755 index 0000000..385af37 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh-tw/step0.txt @@ -0,0 +1,7 @@ +這個套件會自動升級你的DokuWiki至最新版本。在繼續進行之前,你應該先閱讀[[doku>changes|更新紀錄]]以確認在更新之前是不是有甚麼額外的步驟要進行。 + +為了允許自動更新,PHP程序需要Dokuwiki檔案的寫入權限。該套件在升級之前會自動檢查必要的檔案權限。 + +這個套件不會升級其他已安裝的套件或模板。 + +我們建議你在你的wiki進行升級之前先備份。 \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/zh/lang.php b/sources/lib/plugins/upgrade/lang/zh/lang.php new file mode 100755 index 0000000..621e742 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh/lang.php @@ -0,0 +1,47 @@ + + * @author Mike Gao <1524747399@qq.com> + */ +$lang['menu'] = '升级Wiki'; +$lang['vs_php'] = '新的DokuWiki发行版要求PHP版本至少为 %s,但是您的PHP版本为 %s。升级本发行版之前您应当先升级PHP版本!'; +$lang['vs_tgzno'] = '无法确定DokuWiki的最新版本。'; +$lang['vs_tgz'] = 'DokuWiki %s 已可下载。'; +$lang['vs_local'] = '您正运行的是 DokuWiki %s。'; +$lang['vs_localno'] = '无法确定您所运行的版本,推荐手动升级。'; +$lang['vs_newer'] = '看起来您正运行的版本比最新稳定版更新。不建议升级。'; +$lang['vs_same'] = '您的DokuWiki已是最新版本。无需升级。'; +$lang['vs_plugin'] = '有插件需要更新(%s),您应在继续之前先更新插件。'; +$lang['vs_ssl'] = '您的PHP看起来不支持SSL流,必需数据的下载可能会失败。请手动升级。'; +$lang['dl_from'] = '从 %s 下载压缩包...'; +$lang['dl_fail'] = '下载失败。'; +$lang['dl_done'] = '下载完成 (%s)。'; +$lang['pk_extract'] = '解压中...'; +$lang['pk_fail'] = '解压失败。'; +$lang['pk_done'] = '解压完成。'; +$lang['pk_version'] = 'DokuWiki %s 可安装 (您正在运行 %s)。'; +$lang['ck_start'] = '检查文件权限...'; +$lang['ck_done'] = '所有文件可写。可升级。'; +$lang['ck_fail'] = '一些文件不可写。无法自动升级。'; +$lang['cp_start'] = '更新文件中...'; +$lang['cp_done'] = '所有文件已更新。'; +$lang['cp_fail'] = '啊哦。有些地方出了些问题。请手动检查。'; +$lang['tv_noperm'] = '%s不可写!'; +$lang['tv_upd'] = '%s 将被更新。'; +$lang['tv_nocopy'] = '无法复制%s文件!'; +$lang['tv_nodir'] = '无法创建文件夹%s!'; +$lang['tv_done'] = '更新%s'; +$lang['rm_done'] = '旧版%s已删除。'; +$lang['rm_fail'] = '无法删除旧版%s请手动删除!'; +$lang['finish'] = '升级完成。请享受新版DokuWiki!'; +$lang['btn_continue'] = '继续'; +$lang['btn_abort'] = '中止'; +$lang['step_version'] = '检查'; +$lang['step_download'] = '下载'; +$lang['step_unpack'] = '解压'; +$lang['step_check'] = '检验'; +$lang['step_upgrade'] = '安装'; +$lang['careful'] = '产生了错误!你不应该继续!'; diff --git a/sources/lib/plugins/upgrade/lang/zh/safemode.txt b/sources/lib/plugins/upgrade/lang/zh/safemode.txt new file mode 100755 index 0000000..8adf736 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh/safemode.txt @@ -0,0 +1 @@ +本Wiki被设为使用安全模式。在此状态下我们无法安全升级Wiki。请 [[doku>install:upgrade|手动升级您的Wiki]]。 \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/lang/zh/step0.txt b/sources/lib/plugins/upgrade/lang/zh/step0.txt new file mode 100755 index 0000000..f26ecf4 --- /dev/null +++ b/sources/lib/plugins/upgrade/lang/zh/step0.txt @@ -0,0 +1,7 @@ +本插件会自动升级您的Wiki到最新DokuWiki版本。在继续之前,您应当阅读[[doku>changes|更新说明]]来了解是否有额外的步骤需要您在升级前后进行。 + +为了能够自动升级,PHP进程需要某些DokuWiki文件的写入权限。插件将在开始升级之前检查必需文件的权限。 + +本插件不会升级任何已安装的插件或模板。 + +我们建议您在继续之前先备份Wiki数据。 \ No newline at end of file diff --git a/sources/lib/plugins/upgrade/manager.dat b/sources/lib/plugins/upgrade/manager.dat new file mode 100644 index 0000000..dca32b0 --- /dev/null +++ b/sources/lib/plugins/upgrade/manager.dat @@ -0,0 +1,2 @@ +downloadurl=https://github.com/splitbrain/dokuwiki-plugin-upgrade/zipball/master +installed=Sun, 20 Nov 2016 19:29:37 +0000 diff --git a/sources/lib/plugins/upgrade/plugin.info.txt b/sources/lib/plugins/upgrade/plugin.info.txt new file mode 100755 index 0000000..c62fd5f --- /dev/null +++ b/sources/lib/plugins/upgrade/plugin.info.txt @@ -0,0 +1,7 @@ +base upgrade +author Andreas Gohr +email andi@splitbrain.org +date 2016-05-24 +name DokuWiki Upgrade Plugin +desc Automatically upgrade your DokuWiki install to the most recent stable release +url http://www.dokuwiki.org/plugin:upgrade diff --git a/sources/lib/plugins/upgrade/style.css b/sources/lib/plugins/upgrade/style.css new file mode 100755 index 0000000..731b11c --- /dev/null +++ b/sources/lib/plugins/upgrade/style.css @@ -0,0 +1,97 @@ +#plugin__upgrade { + margin: 0 auto; + height: 20em; + overflow: auto; +} + +#plugin__upgrade_form { + display: block; + overflow: auto; + margin: 1em; + font-size: 120%; +} + +#plugin__upgrade_careful { + float: right; + text-align: right; + margin-right: 1em; + color: red; +} + +#plugin__upgrade_form { + clear: right; +} + +#plugin__upgrade_form button { + float: right; + margin-left: 0.5em; +} + +#plugin__upgrade_form button.careful { + opacity: 0.5; +} + +/* based on http://cssdeck.com/labs/progress-bar */ + +#plugin__upgrade_meter { + height: 20px; + position: relative; + margin: 3em 1em 1em 1em; +} + +#plugin__upgrade_meter ol { + margin: 0; + padding: 0; + display: block; + height: 100%; + border-radius: 10px; + background-color: #ddd; + position: relative; + list-style: none; +} +#plugin__upgrade_meter ol li { + float: left; + margin: 0; + padding: 0; + text-align: right; + width: 19%; + position: relative; + border-radius: 10px; +} + +#plugin__upgrade_meter ol li span{ + right:-0.5em; + display: block; + text-align: center; +} +#plugin__upgrade_meter ol li .step { + top: -0.4em; + padding: .2em 0; + border: 3px solid #ddd; + z-index: 99; + font-size: 1.25em; + color: #ddd; + width: 1.5em; + font-weight: 700; + position: absolute; + background-color: #fff; + border-radius: 50%; +} +#plugin__upgrade_meter ol li .stage { + color: #fff; + font-weight: 700; +} + +#plugin__upgrade_meter ol li.active { + height: 20px; + background: #aaa; +} + +#plugin__upgrade_meter ol li.active span.stage { + color: #000; +} + +#plugin__upgrade_meter ol li.active span.step{ + color: #000; + border: 3px solid __link__; +} diff --git a/sources/lib/plugins/vshare/README b/sources/lib/plugins/vshare/README new file mode 100755 index 0000000..8859d5b --- /dev/null +++ b/sources/lib/plugins/vshare/README @@ -0,0 +1,25 @@ +vshare Plugin for DokuWiki + +All documentation for this plugin can be found at +http://www.dokuwiki.org/plugin:vshare + +If you install this plugin manually, make sure it is installed in +lib/plugins/vshare/ - if the folder is called different it +will not work! + +Please refer to http://www.dokuwiki.org/plugins for additional info +on how to install plugins in DokuWiki. + +---- +Copyright (C) Andreas Gohr + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; version 2 of the License + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +See the COPYING file in your DokuWiki folder for details diff --git a/sources/lib/plugins/vshare/all.css b/sources/lib/plugins/vshare/all.css new file mode 100755 index 0000000..4e296d5 --- /dev/null +++ b/sources/lib/plugins/vshare/all.css @@ -0,0 +1,24 @@ +iframe.vshare__left, +div.vshare__left { + float: left; + margin-right: 1em; +} + +iframe.vshare__right, +div.vshare__right { + float: right; + margin-left: 1em; +} + +iframe.vshare__center, +div.vshare__center { + text-align: center; + margin-left: auto; + margin-right: auto; + display: block; +} + +iframe.vshare__none, +div.vshare__none { +margin: 1px 3px 1px 3px; +} diff --git a/sources/lib/plugins/vshare/button.png b/sources/lib/plugins/vshare/button.png new file mode 100755 index 0000000000000000000000000000000000000000..d050afa49b9e71999069d13d604407806e91820c GIT binary patch literal 710 zcmV;%0y+JOP)QB4!Q* zVj3FS3|(Dq|JBsAZf@MT_V|Mb_xA%89|huj*t`!AKwtwB5|YnIOUoMX-o5?zuV23} zKYH}=$gf{NFEcVSz2N5N`u*q6A66zNW;SMKMkb&KHEUKe#K$KvY~8w*K}AKG z;o!l84}n@000M{!WWc#|=hj}neEGG4f)c}zAHNtu8eYA6%b=j32sD73;pfj^44Rrc z3@={1W>8bpVEFqNtmhU;FF*jnqp`BG`UH^u|I?@M|G$6#_y6sApZC7fBu`An#}^~1qdMIXk-GJ4D=%yg8(#kz?Q(oe*gZ>0F60j5Fa3b;0FBr z2U7G8tN;d(4M2#2eElCT1`t3<2K8?blp?u$Qu{NVig^C#Zi#l*w} sjMkt3?%cU`1jGjjAVx~FGeCd=0RK80<3*ZVO#lD@07*qoM6N<$f&|h=AOHXW literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/vshare/lang/en/lang.php b/sources/lib/plugins/vshare/lang/en/lang.php new file mode 100755 index 0000000..2b968c6 --- /dev/null +++ b/sources/lib/plugins/vshare/lang/en/lang.php @@ -0,0 +1,6 @@ + + */ + +$lang['js']['button'] = 'Insère une vidéo depuis des sites de partage vidéo'; +$lang['js']['prompt'] = 'Copiez/collez le lien complet de la page contenant la vidéo ici :'; +$lang['js']['notfound'] = "Désolé, cette URL n'a pas été reconnue. Consultez la documentation sur la syntaxe pour insérer une vidéo manuellement."; \ No newline at end of file diff --git a/sources/lib/plugins/vshare/lang/ja/lang.php b/sources/lib/plugins/vshare/lang/ja/lang.php new file mode 100755 index 0000000..9c93296 --- /dev/null +++ b/sources/lib/plugins/vshare/lang/ja/lang.php @@ -0,0 +1,10 @@ + + */ + +$lang['js']['button'] = '동영상 공유 사이트에서 동영상 넣기'; +$lang['js']['prompt'] = '여기에 동영상 페이지의 전체 URL을 붙여넣으세요:'; +$lang['js']['notfound'] = "죄송하지만 이 URL을 인식할 수 없습니다.\n수동으로 올바른 문법을 넣는 방법에 대해서는 설명문서를 참조하세요."; diff --git a/sources/lib/plugins/vshare/lang/nl/lang.php b/sources/lib/plugins/vshare/lang/nl/lang.php new file mode 100755 index 0000000..d855df4 --- /dev/null +++ b/sources/lib/plugins/vshare/lang/nl/lang.php @@ -0,0 +1,10 @@ + + */ +$lang['js']['button'] = 'Voeg een video van een video-delen website in'; +$lang['js']['prompt'] = 'Plak hier de volledige URL voor de video pagina:'; +$lang['js']['notfound'] = "Sorry, deze URL werd niet herkend.\nRaadpleeg de documentatie over de juiste syntax om een URL handmatig in te voegen."; diff --git a/sources/lib/plugins/vshare/manager.dat b/sources/lib/plugins/vshare/manager.dat new file mode 100644 index 0000000..b59148c --- /dev/null +++ b/sources/lib/plugins/vshare/manager.dat @@ -0,0 +1,3 @@ +downloadurl=https://github.com/splitbrain/dokuwiki-plugin-vshare/zipball/master +installed=Sun, 20 Nov 2016 19:29:50 +0000 +updated=Sun, 20 Nov 2016 19:30:07 +0000 diff --git a/sources/lib/plugins/vshare/pdf.css b/sources/lib/plugins/vshare/pdf.css new file mode 100755 index 0000000..6238a90 --- /dev/null +++ b/sources/lib/plugins/vshare/pdf.css @@ -0,0 +1,16 @@ + +div.vshare__left, +div.vshare__right, +div.vshare__center { + border: 1px solid #ccc; + text-align: center; + padding: 2em; +} + +a.vshare { + color: #aaa; + font-size: 2em; + font-weight: bold; + text-decoration: none; +} + diff --git a/sources/lib/plugins/vshare/plugin.info.txt b/sources/lib/plugins/vshare/plugin.info.txt new file mode 100755 index 0000000..73feeb9 --- /dev/null +++ b/sources/lib/plugins/vshare/plugin.info.txt @@ -0,0 +1,8 @@ +base vshare +author Andreas Gohr +email andi@splitbrain.org +date 2016-07-02 +name Video Sharing Site Plugin +desc Easily embed videos from various Video Sharing sites. Example: {{youtube>XXXXXX}} +url https://www.dokuwiki.org/plugin:vshare + diff --git a/sources/lib/plugins/vshare/redir.php b/sources/lib/plugins/vshare/redir.php new file mode 100755 index 0000000..5c84e4b --- /dev/null +++ b/sources/lib/plugins/vshare/redir.php @@ -0,0 +1,22 @@ + + * + * Simple redirector script to avoid security warnings when embedding HTTP in SSL secured sites + * + * To avoid open redirects, a secret hash has to be provided + */ +if(!defined('DOKU_INC')) define('DOKU_INC', dirname(__FILE__) . '/../../../'); +define('NOSESSION', true); +require_once(DOKU_INC . 'inc/init.php'); +global $INPUT; + +$url = $INPUT->str('url'); +$hash = $INPUT->str('hash'); + +if(!$url) die('sorry. no url'); +if(!$hash) die('sorry. no hash'); +if($hash != md5(auth_cookiesalt() . 'vshare' . $url)) die('sorry. wrong hash'); + +send_redirect($url); \ No newline at end of file diff --git a/sources/lib/plugins/vshare/script.js b/sources/lib/plugins/vshare/script.js new file mode 100755 index 0000000..3c83426 --- /dev/null +++ b/sources/lib/plugins/vshare/script.js @@ -0,0 +1,116 @@ + +/** + * Append a toolbar button + */ +if(window.toolbar != undefined){ + toolbar[toolbar.length] = {"type": "pluginvshare", + "title": LANG['plugins']['vshare']['button'], + "icon": "../../plugins/vshare/button.png", + "key": ""}; +} + +/** + * Try to determine the video service, extract the ID and insert + * the correct syntax + */ +function tb_pluginvshare(btn, props, edid) { + PluginVShare.edid = edid; + + PluginVShare.buildSyntax(); +} + +var PluginVShare = { + edid: null, + + buildSyntax: function () { + + var text = prompt(LANG['plugins']['vshare']['prompt']); + if (!text) return; + + // This includes the site patterns: + /* DOKUWIKI:include sites.js */ + + for (var key in sites) { + + if(sites.hasOwnProperty(key)) { + var RE = new RegExp(sites[key], 'i'); + var match = text.match(RE); + if (match) { + var urlparam = ''; + var videoid = match[1]; + + switch (key) { + case 'slideshare': + //provided video url? + if(match[2]) { + + jQuery.ajax({ + url: '//www.slideshare.net/api/oembed/2', + dataType: 'jsonp', + data: { + url: match[2], + format: 'jsonp' + } + }).done(function (response, status, error) { + var videoid = response.slideshow_id; + PluginVShare.insert(key, videoid, urlparam); + }).fail(function (data, status, error) { + /* http://www.slideshare.net/developers/oembed + * If not found, an status 200 with response {error:true} is returned, + * but "Content-Type:application/javascript; charset=utf-8" is then + * wrongly changed to "Content-Type:application/json; charset=utf-8" + * so it throws a parseerror + */ + alert(LANG['plugins']['vshare']['notfound']); + }); + return; + } + break; + case 'bliptv': + //provided video url? + if(match[2]) { + + jQuery.ajax({ + url: '//blip.tv/oembed/', + dataType: 'jsonp', + data: { + url: match[2], + format: 'json' + }, + timeout: 2000 + }).done(function (response, status, error) { + var videoidmatch = response.html.match(RE); + PluginVShare.insert(key, videoidmatch[1], urlparam); + }).fail(function (data, status, error) { + /* + * If url is not found(=wrong numerical number on end), blip.tv returns a 404 + * because jsonp is not a xmlhttprequest, there is no 404 catched + * errors are detected by waiting at the timeout + */ + alert(LANG['plugins']['vshare']['notfound']); + }); + return; + } + break; + case 'twitchtv': + if (match[2]) { + urlparam = '&chapter_id=' + match[2]; + } + break; + } + + PluginVShare.insert(key, videoid, urlparam); + return; + } + } + } + + alert(LANG['plugins']['vshare']['notfound']); + }, + + insert: function(key, videoid, urlparam, edid) { + var code = '{{' + key + '>' + videoid + '?medium' + urlparam + '}}'; + insertAtCarret(PluginVShare.edid, code); + } +}; + diff --git a/sources/lib/plugins/vshare/sites.conf b/sources/lib/plugins/vshare/sites.conf new file mode 100755 index 0000000..a28c7d6 --- /dev/null +++ b/sources/lib/plugins/vshare/sites.conf @@ -0,0 +1,27 @@ +# configure video site flash or iframe URLs here, @VIDEO@ is the ID placeholder + +vimeo iframe //player.vimeo.com/video/@VIDEO@ +ustream iframe http://www.ustream.tv/embed/recorded/@VIDEO@ +youtube iframe //www.youtube.com/embed/@VIDEO@ +viddler iframe //www.viddler.com/embed/@VIDEO@/?f=1&autoplay=0&player=mini&hideablecontrolbar=1&smooth=0&disablebranding=0&loop=0&nologo=0&hd=0 +slideshare iframe //www.slideshare.net/slideshow/embed_code/@VIDEO@ +dailymotion iframe //www.dailymotion.com/embed/video/@VIDEO@ +bambuser iframe http://embed.bambuser.com/broadcast/@VIDEO@ +metacafe iframe http://www.metacafe.com/embed/@VIDEO@/ +bliptv iframe //blip.tv/play/@VIDEO@.x?p=1 +break iframe //www.break.com/embed/@VIDEO@?embed=1 +msoffice iframe http://hub.video.msn.com/embed/@VIDEO@/ +archiveorg iframe //archive.org/embed/@VIDEO@ +niconico iframe http://embed.nicovideo.jp/watch/@VIDEO@ + +5min flash http://www.5min.com/Embeded/@VIDEO@/ +clipfish flash //www.clipfish.de/cfng/flash/clipfish_player_3.swf?as=0&vid=@VIDEO@&r=1&angebot=extern& +gtrailers flash http://www.gametrailers.com/remote_wrap.php?mid=@VIDEO@ +myspacetv flash http://lads.myspace.com/videos/vplayer.swf?m=@VIDEO@&v=2&type=video +rcmovie flash http://www.rcmovie.de/embed/@VIDEO@ +scivee flash //www.scivee.tv/flash/embedPlayer.swf?id=@VIDEO@&type=3 +twitchtv flash http://www.twitch.tv/widgets/live_embed_player.swf?channel=@VIDEO@&auto_play=false&start_volume=25 +veoh flash //www.veoh.com/videodetails2.swf?player=videodetailsembedded&type=v&permalinkId=@VIDEO@&id=anonymous +youku flash http://player.youku.com/player.php/sid/@VIDEO@/v.swf +tudou flash http://www.tudou.com/v/@VIDEO@/&resourceId=0_05_05_99&bid=05/v.swf +bilibili flash http://static.hdslb.com/miniloader.swf?aid=@VIDEO@&&page=1 diff --git a/sources/lib/plugins/vshare/sites.js b/sources/lib/plugins/vshare/sites.js new file mode 100755 index 0000000..50abac6 --- /dev/null +++ b/sources/lib/plugins/vshare/sites.js @@ -0,0 +1,36 @@ +/** + * video URL recognition patterns + * + * The first match group is used as video ID + * + * You need to touch conf/local.php to refresh the cache after changing + * this file + */ + +var sites = { + 'youtube': 'youtube\\.com/.*[&?]v=([a-z0-9_\\-]+)', + 'vimeo': 'vimeo\\.com\\/(\\d+)', + 'ustream': 'ustream\\.tv\\/recorded\\/(\\d+)\\/', + '5min': '5min\\.com\\/Video/.*-([0-9]+)([&?]|$)', + 'clipfish': 'clipfishi\\.de\\/.*\\/video\\/([0-9])+\\/', + 'dailymotion': 'dailymotion\\.com\\/video\\/([a-z0-9]+)_', + 'gtrailers': 'gametrailers\\.com\\/.*\\/(\\d+)', + 'metacafe': 'metacafe\\.com\\/watch\\/(\\d+)\\/', + 'myspacetv': 'vids\\.myspace\\.com\\/.*videoid=(\\d+)', + 'rcmovie': 'rcmovie\\.de\\/video\\/([a-f0-9]+)\\/', + 'scivee': 'scivee\\.tv\\/node\\/(\\d+)', + 'twitchtv': 'twitch\\.tv\\/([a-z0-9_\\-]+)(?:\\/c\\/(\\d+))?', + 'veoh': 'veoh\\.com\\/.*watch[^v]*(v[a-z0-9]+)', + 'bambuser': 'bambuser\\.com\\/v\\/(\\d+)', + 'bliptv': '(?:blip\\.tv\\/play\\/([a-zA-Z0-9]+\\.(?:html|x))\\?p=1|(http?\\:\\/\\/blip\\.tv\\/(?!play)(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))', + 'break': 'break\\.com\\/video\\/(?:(?:[a-z]+)\\/)?(?:[a-z\\-]+)-([0-9]+)', + 'viddler': 'viddler\\.com\\/(?:embed|v)\\/([a-z0-9]{8})', + 'msoffice': '(?:office\\.com.*[&?]videoid=([a-z0-9\\-]+))', + 'slideshare': '(?:(?:slideshare\\.net\\/slideshow\\/embed_code\\/|id=)([0-9]+)|(https?\\:\\/\\/www\\.slideshare\\.net\\/(?:[a-zA-Z0-9_\\-]+)\\/(?:[a-zA-Z0-9_\\-]+)))', + 'archiveorg': 'archive\\.org\\/embed\\/([a-zA-Z0-9_\\-]+)', + 'niconico': 'nicovideo\\.jp/watch/(sm[0-9]+)', + 'youku': 'v\\.youku\\.com/v_show/id_([[0-9A-Za-z]]+)\\.html', + 'tudou': 'tudou\\.com/programs/view/([0-9A-Za-z]+)', + 'bilibili': 'bilibili\\.com/video/av([0-9])+/' +}; + diff --git a/sources/lib/plugins/vshare/syntax.php b/sources/lib/plugins/vshare/syntax.php new file mode 100755 index 0000000..826846f --- /dev/null +++ b/sources/lib/plugins/vshare/syntax.php @@ -0,0 +1,209 @@ + + */ + +if(!defined('DOKU_INC')) die(); +require_once(DOKU_PLUGIN.'syntax.php'); + +class syntax_plugin_vshare extends DokuWiki_Syntax_Plugin { + var $sites; + + /** + * Constructor. + * Intitalizes the supported video sites + */ + function syntax_plugin_vshare(){ + $this->sites = confToHash(dirname(__FILE__).'/sites.conf'); + } + + function getType(){ + return 'substition'; + } + + function getPType(){ + return 'block'; + } + + function getSort(){ + return 159; + } + + + /** + * Connect to the parser + */ + function connectTo($mode) { + $pattern = join('|',array_keys($this->sites)); + $this->Lexer->addSpecialPattern('\{\{\s?(?:'.$pattern.')>[^}]*\}\}',$mode,'plugin_vshare'); + } + + /** + * Parse the parameters + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + $command = substr($match,2,-2); + + // title + list($command,$title) = explode('|',$command); + $title = trim($title); + + // alignment + $align = 0; + if(substr($command,0,1) == ' ') $align += 1; + if(substr($command,-1) == ' ') $align += 2; + $command = trim($command); + + // get site and video + list($site,$vid) = explode('>',$command); + if(!$this->sites[$site]) return null; // unknown site + if(!$vid) return null; // no video!? + + // what size? + list($vid,$param) = explode('?',$vid,2); + if(preg_match('/(\d+)x(\d+)/i',$param,$m)){ // custom + $width = $m[1]; + $height = $m[2]; + }elseif(strpos($param,'small') !== false){ // small + $width = 255; + $height = 210; + }elseif(strpos($param,'large') !== false){ // large + $width = 520; + $height = 406; + }else{ // medium + $width = 425; + $height = 350; + } + + $paramm = array(); + parse_str($param, $paramm); + $urlparam = array(); + foreach($paramm as $key => $value) { + switch($key) { + case 'rel': + case 'autoplay': + case 'ap': + if($paramm[$key] === '1' || $paramm[$key] === '0') { + $urlparam[] = $key . '=' . $paramm[$key]; + } + break; + case 'start': + case 'end': + case 'chapter_id': //for twitch.tv + case 'initial_time': + case 'offsetTime': + case 'startSlide': + $number = (int) $paramm[$key]; + if($number > 0) { + $urlparam[] = $key . '=' . $number; + } + break; + case 'auto_start': + if($paramm[$key] === 'true' || $paramm[$key] === 'false') { + $urlparam[] = $key . '=' . $paramm[$key]; + } + break; + } + } + + list($type, $url) = explode(' ', $this->sites[$site], 2); + $url = trim($url); + $type = trim($type); + $url = str_replace('@VIDEO@',rawurlencode($vid),$url); + $url = str_replace('@WIDTH@',$width,$url); + $url = str_replace('@HEIGHT@',$height,$url); + if(count($urlparam)) { + if(strpos($url, '?') !== false) { + $sepchar = '&'; + } else { + $sepchar = '?'; + } + $url .= $sepchar . implode('&', $urlparam); + } + + list(,$vars) = explode('?',$url,2); + $varr = array(); + parse_str($vars,$varr); + + return array( + 'site' => $site, + 'video' => $vid, + 'url' => $url, + 'vars' => $varr, + 'align' => $align, + 'width' => $width, + 'height' => $height, + 'title' => $title, + 'type' => $type + ); + } + + /** + * Render the flash player + */ + function render($mode, Doku_Renderer $R, $data){ + if($mode != 'xhtml') return false; + if(is_null($data)) return false; + + if($data['align'] == 0) $align = 'none'; + if($data['align'] == 1) $align = 'right'; + if($data['align'] == 2) $align = 'left'; + if($data['align'] == 3) $align = 'center'; + if($data['title']) $title = ' title="'.hsc($data['title']).'"'; + + if(is_a($R,'renderer_plugin_dw2pdf')){ + // Output for PDF renderer + $R->doc .= '
    '; + + $R->doc .= ''; + $R->doc .= ''; + $R->doc .= ''; + + $R->doc .= '
    '; + + $R->doc .= ''; + $R->doc .= ($data['title'] ? hsc($data['title']) : 'Video'); + $R->doc .= ''; + + $R->doc .= '
    '; + }else{ + // use redirector for HTTP embeds on SSL sites + if(is_ssl() && substr($data['url'], 0, 7) == 'http://') { + $data['url'] = DOKU_BASE.'lib/plugins/vshare/redir.php'. + '?url='.rawurlencode($data['url']). + '&hash='.md5(auth_cookiesalt().'vshare'.$data['url']); + } + + // Normal output + if($data['type'] == 'flash') { + // embed flash + $R->doc .= '
    '; + $R->doc .= html_flashobject( + $data['url'], + $data['width'], + $data['height'], + $data['vars'], + $data['vars']); + $R->doc .= '
    '; + }else{ + // embed iframe + $R->doc .= ''; + } + } + } +} diff --git a/sources/lib/plugins/vshare/video.png b/sources/lib/plugins/vshare/video.png new file mode 100755 index 0000000000000000000000000000000000000000..8bb325e6c88464792858e8d23e6c9ff2e4e0ed82 GIT binary patch literal 6682 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 U8TnuacyR-$C}_x6$eM-!5AD7T7ytkO literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/.travis.yml b/sources/lib/plugins/wrap/.travis.yml new file mode 100755 index 0000000..ed124b2 --- /dev/null +++ b/sources/lib/plugins/wrap/.travis.yml @@ -0,0 +1,13 @@ +language: php +php: + - "5.6" + - "5.5" + - "5.4" + - "5.3" +env: + - DOKUWIKI=master + - DOKUWIKI=stable + - DOKUWIKI=old-stable +before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh +install: sh travis.sh +script: cd _test && phpunit --stderr --group plugin_wrap diff --git a/sources/lib/plugins/wrap/COPYING b/sources/lib/plugins/wrap/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/sources/lib/plugins/wrap/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/sources/lib/plugins/wrap/README b/sources/lib/plugins/wrap/README new file mode 100755 index 0000000..c0a1118 --- /dev/null +++ b/sources/lib/plugins/wrap/README @@ -0,0 +1 @@ +see plugin.info.txt \ No newline at end of file diff --git a/sources/lib/plugins/wrap/_test/wrap_syntax.test.php b/sources/lib/plugins/wrap/_test/wrap_syntax.test.php new file mode 100644 index 0000000..768c130 --- /dev/null +++ b/sources/lib/plugins/wrap/_test/wrap_syntax.test.php @@ -0,0 +1,243 @@ +pluginsEnabled[] = 'wrap'; + parent::setUp(); + } + + public function test_nestedheading() { + $instructions = p_get_instructions("\n==== Heading ====\n\nSome text\n"); + $expected = + array( + array( + 'document_start', + array(), + 0 + ), + array( + 'plugin', + array( + 'wrap_divwrap', + array( + DOKU_LEXER_ENTER, + '' + ), + 1 + ), + array( + 'header', + array( + 'Heading', + 3, + 8 + ), + 8 + ), + array( + 'plugin', + array( + 'wrap_closesection', + array(), + DOKU_LEXER_SPECIAL, + false + ), + 8 + ), + array( + 'p_open', + array(), + 8 + ), + array( + 'cdata', + array( + 'Some text' + ), + 27 + ), + array( + 'p_close', + array(), + 37 + ), + array( + 'plugin', + array( + 'wrap_divwrap', + array( + DOKU_LEXER_EXIT, + '' + ), + DOKU_LEXER_EXIT, + '' + ), + 37 + ), + array( + 'document_end', + array(), + 37 + ) + ); + $this->assertEquals($expected, $instructions); + } + + public function test_blocknesting() { + $instructions = p_get_instructions("\nFoo\n\n Bar\n"); + $expected = + array( + array( + 'document_start', + array(), + 0 + ), + array( + 'plugin', + array( + 'wrap_divwrap', + array( + DOKU_LEXER_ENTER, + '' + ), + 1 + ), + array( + 'p_open', + array( + ), + 1 + ), + array( + 'cdata', + array( + 'Foo' + ), + 8 + ), + array( + 'p_close', + array(), + 11 + ), + array( + 'p_open', + array( + ), + 11 + ), + array( + 'cdata', + array( + ' Bar' + ), + 13 + ), + array( + 'p_close', + array(), + 33 + ), + array( + 'plugin', + array( + 'wrap_divwrap', + array( + DOKU_LEXER_EXIT, + '' + ), + DOKU_LEXER_EXIT, + '' + ), + 33 + ), + array( + 'document_end', + array(), + 33 + ) + ); + $this->assertEquals($expected, $instructions); + } + + public function test_inlinenesting() { + $instructions = p_get_instructions("Foo Bar"); + $expected = + array( + array( + 'document_start', + array(), + 0 + ), + array( + 'p_open', + array( + ), + 0 + ), + array( + 'plugin', + array( + 'wrap_spanwrap', + array( + DOKU_LEXER_ENTER, + '' + ), + 1 + ), + array( + 'cdata', + array( + 'Foo Bar' + ), + 7 + ), + array( + 'plugin', + array( + 'wrap_spanwrap', + array( + DOKU_LEXER_EXIT, + '' + ), + DOKU_LEXER_EXIT, + '' + ), + 32 + ), + array( + 'cdata', + array( + '' + ), + 39 + ), + array( + 'p_close', + array(), + 39 + ), + array( + 'document_end', + array(), + 39 + ) + ); + $this->assertEquals($expected, $instructions); + } + +} \ No newline at end of file diff --git a/sources/lib/plugins/wrap/action.php b/sources/lib/plugins/wrap/action.php new file mode 100755 index 0000000..2a47fca --- /dev/null +++ b/sources/lib/plugins/wrap/action.php @@ -0,0 +1,152 @@ + + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'action.php'); + +class action_plugin_wrap extends DokuWiki_Action_Plugin { + + /** + * register the eventhandlers + * + * @author Andreas Gohr + */ + function register(Doku_Event_Handler $controller){ + $controller->register_hook('TOOLBAR_DEFINE', 'AFTER', $this, 'handle_toolbar', array ()); + $controller->register_hook('HTML_SECEDIT_BUTTON', 'BEFORE', $this, 'handle_secedit_button'); + } + + function handle_toolbar(Doku_Event $event, $param) { + $syntaxDiv = $this->getConf('syntaxDiv'); + $syntaxSpan = $this->getConf('syntaxSpan'); + + $event->data[] = array ( + 'type' => 'picker', + 'title' => $this->getLang('picker'), + 'icon' => '../../plugins/wrap/images/toolbar/picker.png', + 'list' => array( + array( + 'type' => 'format', + 'title' => $this->getLang('column'), + 'icon' => '../../plugins/wrap/images/toolbar/column.png', + 'open' => '<'.$syntaxDiv.' group>\n<'.$syntaxDiv.' half column>\n', + 'close' => '\n\n\n<'.$syntaxDiv.' half column>\n\n\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('box'), + 'icon' => '../../plugins/wrap/images/toolbar/box.png', + 'open' => '<'.$syntaxDiv.' center round box 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('info'), + 'icon' => '../../plugins/wrap/images/note/16/info.png', + 'open' => '<'.$syntaxDiv.' center round info 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('tip'), + 'icon' => '../../plugins/wrap/images/note/16/tip.png', + 'open' => '<'.$syntaxDiv.' center round tip 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('important'), + 'icon' => '../../plugins/wrap/images/note/16/important.png', + 'open' => '<'.$syntaxDiv.' center round important 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('alert'), + 'icon' => '../../plugins/wrap/images/note/16/alert.png', + 'open' => '<'.$syntaxDiv.' center round alert 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('help'), + 'icon' => '../../plugins/wrap/images/note/16/help.png', + 'open' => '<'.$syntaxDiv.' center round help 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('download'), + 'icon' => '../../plugins/wrap/images/note/16/download.png', + 'open' => '<'.$syntaxDiv.' center round download 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('todo'), + 'icon' => '../../plugins/wrap/images/note/16/todo.png', + 'open' => '<'.$syntaxDiv.' center round todo 60%>\n', + 'close' => '\n\n', + ), + array( + 'type' => 'insert', + 'title' => $this->getLang('clear'), + 'icon' => '../../plugins/wrap/images/toolbar/clear.png', + 'insert' => '<'.$syntaxDiv.' clear/>\n', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('em'), + 'icon' => '../../plugins/wrap/images/toolbar/em.png', + 'open' => '<'.$syntaxSpan.' em>', + 'close' => '', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('hi'), + 'icon' => '../../plugins/wrap/images/toolbar/hi.png', + 'open' => '<'.$syntaxSpan.' hi>', + 'close' => '', + ), + array( + 'type' => 'format', + 'title' => $this->getLang('lo'), + 'icon' => '../../plugins/wrap/images/toolbar/lo.png', + 'open' => '<'.$syntaxSpan.' lo>', + 'close' => '', + ), + ) + ); + } + + /** + * Handle section edit buttons, prevents section buttons inside the wrap plugin from being rendered + * + * @param Doku_Event $event The event object + * @param array $param Parameters for the event + */ + public function handle_secedit_button(Doku_Event $event, $param) { + // counter of the number of currently opened wraps + static $wraps = 0; + $data = $event->data; + + if ($data['target'] == 'plugin_wrap_start') { + ++$wraps; + } elseif ($data['target'] == 'plugin_wrap_end') { + --$wraps; + } elseif ($wraps > 0 && $data['target'] == 'section') { + $event->preventDefault(); + $event->stopPropagation(); + $event->result = ''; + } + } +} + diff --git a/sources/lib/plugins/wrap/all.css b/sources/lib/plugins/wrap/all.css new file mode 100755 index 0000000..b987c40 --- /dev/null +++ b/sources/lib/plugins/wrap/all.css @@ -0,0 +1,321 @@ +/******************************************************************** +Screen and Print Styles for the Wrap Plugin +********************************************************************/ + +/* resetting the box model to something more sane makes life a whole lot easier */ +.dokuwiki .plugin_wrap { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +/* tables in columns and boxes should span the whole width */ +.dokuwiki .plugin_wrap table { + width: 100%; +} +/* emulate a headline */ +.dokuwiki .plugin_wrap em strong { + font-size: 130%; + font-weight: bold; + font-style: normal; + display: block; +} +/* emulate a bigger headline with a bottom border */ +.dokuwiki .plugin_wrap em strong em.u { + font-size: 115%; + border-bottom: 1px solid __border__; + font-style: normal; + text-decoration: none; + display: block; +} +/* different bigger headline for safety notes */ +.dokuwiki .wrap_danger em strong em.u, +.dokuwiki .wrap_warning em strong em.u, +.dokuwiki .wrap_caution em strong em.u, +.dokuwiki .wrap_notice em strong em.u, +.dokuwiki .wrap_safety em strong em.u { + text-transform: uppercase; + border-bottom-width: 0; +} +/* change border colour of emulated headlines inside boxes to something more neutral + (to match all the different background colours) */ +.dokuwiki .wrap_box em strong em.u, +.dokuwiki .wrap_info em strong em.u, +.dokuwiki .wrap_important em strong em.u, +.dokuwiki .wrap_alert em strong em.u, +.dokuwiki .wrap_tip em strong em.u, +.dokuwiki .wrap_help em strong em.u, +.dokuwiki .wrap_todo em strong em.u, +.dokuwiki .wrap_download em strong em.u { + border-bottom-color: #999; +} + +/* real headlines should not be indented inside a wrap */ +.dokuwiki .plugin_wrap h1, +.dokuwiki .plugin_wrap h2, +.dokuwiki .plugin_wrap h3, +.dokuwiki .plugin_wrap h4, +.dokuwiki .plugin_wrap h5 { + margin-left: 0; + margin-right: 0; +} + +/* columns +********************************************************************/ + +.dokuwiki .wrap_left, +.dokuwiki .wrap_column { + float: left; + margin-right: 1.5em; +} +[dir=rtl] .dokuwiki .wrap_column { + float: right; + margin-left: 1.5em; + margin-right: 0; +} +.dokuwiki .wrap_right { + float: right; + margin-left: 1.5em; +} +.dokuwiki .wrap_center { + display: block; + margin-left: auto; + margin-right: auto; +} + +/*____________ CSS3 columns ____________*/ + +.dokuwiki .wrap_col2, .dokuwiki .wrap_col3, .dokuwiki .wrap_col4, .dokuwiki .wrap_col5 { + -moz-column-gap: 1.5em; + -webkit-column-gap: 1.5em; + column-gap: 1.5em; + -moz-column-rule: 1px dotted #666; + -webkit-column-rule: 1px dotted #666; + column-rule: 1px dotted #666; +} +.dokuwiki .wrap_col2 { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; +} +.dokuwiki .wrap_col3 { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} +.dokuwiki .wrap_col4 { + -moz-column-count: 4; + -webkit-column-count: 4; + column-count: 4; +} +.dokuwiki .wrap_col5 { + -moz-column-count: 5; + -webkit-column-count: 5; + column-count: 5; +} + + +/* widths +********************************************************************/ + +.dokuwiki .wrap_half { + width: 48%; + margin-right: 4%; +} + +.dokuwiki .wrap_third { + width: 30%; + margin-right: 5%; +} + +.dokuwiki .wrap_quarter { + width: 22%; + margin-right: 4%; +} + +[dir=rtl] .dokuwiki .wrap_half, +[dir=rtl] .dokuwiki .wrap_third, +[dir=rtl] .dokuwiki .wrap_quarter { + margin-right: 0; + margin-left: 4%; +} +[dir=rtl] .dokuwiki .wrap_third { + margin-left: 5%; +} + +.dokuwiki .wrap_half:nth-of-type(2n), +.dokuwiki .wrap_third:nth-of-type(3n), +.dokuwiki .wrap_quarter:nth-of-type(4n) { + margin-right: 0; +} +[dir=rtl] .dokuwiki .wrap_half:nth-of-type(2n), +[dir=rtl] .dokuwiki .wrap_third:nth-of-type(3n), +[dir=rtl] .dokuwiki .wrap_quarter:nth-of-type(4n) { + margin-left: 0; +} + +.dokuwiki .wrap_half:nth-of-type(2n+1), +.dokuwiki .wrap_third:nth-of-type(3n+1), +.dokuwiki .wrap_quarter:nth-of-type(4n+1) { + clear: left; +} +[dir=rtl] .dokuwiki .wrap_half:nth-of-type(2n+1), +[dir=rtl] .dokuwiki .wrap_third:nth-of-type(3n+1), +[dir=rtl] .dokuwiki .wrap_quarter:nth-of-type(4n+1) { + clear: right; +} + +/* show 2 instead 4 columns on medium sized screens (mobile, etc) */ +@media only screen and (max-width: 950px) { + +.dokuwiki .wrap_quarter { + width: 48%; +} +.dokuwiki .wrap_quarter:nth-of-type(2n) { + margin-right: 0; +} +[dir=rtl] .dokuwiki .wrap_quarter:nth-of-type(2n) { + margin-left: 0; +} +.dokuwiki .wrap_quarter:nth-of-type(2n+1) { + clear: left; +} +[dir=rtl] .dokuwiki .wrap_quarter:nth-of-type(2n) { + clear: right; +} + +} /* /@media */ + +/* show full width on smaller screens (mobile, etc) */ +@media only screen and (max-width: 600px) { + +.dokuwiki .wrap_half, +.dokuwiki .wrap_third, +.dokuwiki .wrap_quarter { + width: auto; + margin-right: 0; + margin-left: 0; + float: none; +} + +} /* /@media */ + + +/* alignments +********************************************************************/ + +.dokuwiki .wrap_leftalign { + text-align: left; +} +.dokuwiki .wrap_centeralign { + text-align: center; +} +.dokuwiki .wrap_rightalign { + text-align: right; +} +.dokuwiki .wrap_justify { + text-align: justify; +} + + +/* box +********************************************************************/ + +/* see styles for boxes and notes with icons in style.css */ + +/*____________ rounded corners ____________*/ +/* (only for modern browsers) */ + +.dokuwiki div.wrap_round { + border-radius: 1.4em; +} +.dokuwiki span.wrap_round { + border-radius: .14em; +} + + +/* mark +********************************************************************/ + +.dokuwiki .wrap_lo { + color: __text_neu__; + font-size: 85%; +} +.dokuwiki .wrap_em { + color: #c00; + font-weight: bold; +} +.dokuwiki .wrap__dark.wrap_em { + color: #f66; +} + +/* see styles for highlighted text in style.css */ + + +/* miscellaneous +********************************************************************/ + +/*____________ indent ____________*/ + +.dokuwiki .wrap_indent { + padding-left: 1.5em; +} +[dir=rtl] .dokuwiki .wrap_indent { + padding-right: 1.5em; + padding-left: 0; +} + + +/*____________ outdent ____________*/ + +.dokuwiki .wrap_outdent { + margin-left: -1.5em; +} +[dir=rtl] .dokuwiki .wrap_outdent { + margin-right: -1.5em; + margin-left: 0; +} + +/*____________ word wrapping in pre ____________*/ + +.dokuwiki div.wrap_prewrap pre { + white-space: pre-wrap; + word-wrap: break-word;/* for IE < 8 */ +} + +/*____________ spoiler ____________*/ + +.dokuwiki div.wrap_spoiler { + margin-bottom: 1.5em; +} +/* see rest of spoiler styles in style.css */ + +/*____________ clear float ____________*/ + +.dokuwiki .wrap_clear { + clear: both; + line-height: 0; + height: 0; + font-size: 1px; + visibility: hidden; + overflow: hidden; +} + +/*____________ hide ____________*/ + +.dokuwiki .wrap_hide { + display: none; +} + + +/*____________ button-style link ____________*/ + +.dokuwiki .wrap_button a:link, +.dokuwiki .wrap_button a:visited { + background-image: none; + border: 1px solid __border__; + border-radius: .3em; + padding: .5em .7em; + text-decoration: none; +} +/* see rest of button link styles in style.css */ diff --git a/sources/lib/plugins/wrap/conf/default.php b/sources/lib/plugins/wrap/conf/default.php new file mode 100755 index 0000000..9a622dd --- /dev/null +++ b/sources/lib/plugins/wrap/conf/default.php @@ -0,0 +1,12 @@ + array(0,1)); +$meta['syntaxDiv'] = array('multichoice','_choices' => array('WRAP','block', 'div')); +$meta['syntaxSpan'] = array('multichoice','_choices' => array('wrap', 'inline', 'span')); +$meta['darkTpl'] = array('onoff'); diff --git a/sources/lib/plugins/wrap/example.txt b/sources/lib/plugins/wrap/example.txt new file mode 100755 index 0000000..5914d3f --- /dev/null +++ b/sources/lib/plugins/wrap/example.txt @@ -0,0 +1,437 @@ +====== Examples for the Wrap Plugin ====== + +===== Basic syntax ===== + +An uppercase **%%%%** (or alternatively **%%%%** or **%%
    %%**) creates a **''div''** and should be used for **"big"** containers, **surrounding** paragraphs, lists, tables, etc. + + + +"big" content + + +or + +"big" content + + +or +
    +"big" content +
    +
    + +A lowercase **%%%%** (or alternatively **%%%%** or **%%%%**) creates a **''span''** and should be used for **"small"** containers, **inside** paragraphs, lists, tables, etc. + + +"small" content + +or +"small" content + +or +"small" content + + +:!: Please note, some things **won't work with lowercase spans**: + * **alignments** (including alignments generated by changing the text direction) + * **multi-columns** + * and **widths** +if the according wrap isn't floated as well. + +A shorthand of uppercase **%%%%** and lowercase **%%%%** are available if the container is empty or unnecessary. + + + +or + +or +
    + + +and + + +or + +or + + + +===== Classes and Styles ===== + + +==== Columns and Floats ==== + +You can have columns easily by adding the class ''column'' and a width, e.g. + ...content... + +The example below uses the following structure: + + + + +...content... +...content... +...content... + + + + + + + +=== Floating Options === + +Normally you would only need the class ''column'', but for more sophisticated uses (not only for columns, but for any other classes, like [[#boxes and notes]] as well) you can have several kinds of "floats": + + * **''column''** is the same as ''left'' in LTR languages and the same as ''right'' in RTL languages + * **''left''** will let you float your wrap on the left + * **''right''** will let the wrap float right + * **''center''** will position the wrap in the horizontal center of the page + +A **table** inside a column or box will always be **100% wide**. This makes positioning and sizing tables possible. + + + + +=== Widths === + +You can set any valid widths (but only on divs): ''%, px, em, ex, pt, pc, cm, mm, in'', but most of the time you'd only want either + +^type^e.g.^note^ +^''%''|''30%''|makes sense in most cases| +^''px''|''420px''|makes sense if your container contains images with a certain width| +^''em''|''20em''|makes sense if you like your wrap container to grow and shrink with the font size| + + + +=== Width Keywords === + +With certain width keywords you can fit your columns automatically to fill the available horizontal space. Those columns will also react to the screen size, so will be responsive and wrap underneath each other on mobile devices. + +There are three width keywords. These should not be combined with any other width. + + * **''half''** fits two columns in a row + * **''third''** fits three columns in a row + * **''quarter''** fits four columns in a row + +:!: Attention: In order to work properly, wraps with width keywords need an **additional ''%%%%'' around a set** of them. + + + + + +You can use the same options with spans (as each element that floats is automatically a block level element), but it probably doesn't make too much sense. :!: Widths on spans normally do not work (by design), but can make sense, when it is floating. + +:!: Attention: What is the difference between widths and width keywords and when is it best to use which? **Widths** can cause problems and will never fully add up, therefore will break the layout under some circumstances. (See [[http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug|box model]] for a technical explanation.) So, getting widths right will need some fiddling around and testing in various browsers. **Width keywords** on the other hand fit automatically and work better on mobile devices. But the drawback is that they need an extra wrap around them and don't work properly in older browsers (IE8 and under). + +All of those options will also work in the [[#boxes and notes]] wraps (see below). + +=== Old Emulated Headlines === + +Every ''%%//**__text like this__**//%%'' or ''%%//**like that**//%%'' will create an "emulated headline" when used within a box or a column. Now that headlines within wraps are supported, they are not needed anymore, but are still supported for backwards-compatibility. + +If you need text that is bold and italic, simply use it the other way around: ''%%**//No Headline//**%%'' + + +=== Multi-columns === + + +For modern browsers (Firefox, Chrome and Safari, IE10+) you can use multi-columns. Just use **''%%col2%%''** for 2 columns, **''%%col3%%''** for 3 columns, **''%%col4%%''** for 4 columns and **''%%col5%%''** for 5 columns. + +:!: Note: Multi-columns don't make sense for spans. + + +Don't use this for bigger columns containing more than just text. Use the [[#columns and floats]] mentioned above instead. + + +==== Alignments ==== + +You can use these different text alignments: + + * ''leftalign'' + * ''rightalign'' + * ''centeralign'' + * ''justify'' + + +Center aligned text ... + + + +... and right aligned. + + + + +Center aligned text ... + + + +... and right aligned. + + + +:!: You cannot add alignments to spans. + + +==== Boxes and Notes ==== + + +=== round box 500px center === + + * ''box'' creates a box around the container and uses the colours from the template's ''style.ini'' as default colours (''%%__background_alt__%%'' and ''%%__text__%%'') + * any of the classes ''info'', ''tip'', ''important'', ''alert'', ''help'', ''download'', ''todo'' will add a special note container with a corresponding icon + * the classes ''danger'', ''warning'', ''caution'', ''notice'', ''safety'' use safety colours (and no icons) + * ''round'' can be added to anything with a background colour or a border and will only work in modern browsers (no IE8 and under) + + + + +=== Info === + + + + + +=== Tip === + + + + + +=== Important === + + + + + +=== Alert === + + + + + +=== Help === + + + + + +=== Download === + + + + + +=== Todo === + + + + + + + +**Safety Notes:** + + +=== Danger === + + + + +=== Warning === + + + + +=== Caution === + + + + +=== Notice === + + + + +=== Safety === + + + + + + +You can use notes and boxes also inside text with spans like this: +info, help, alert, important, tip, download, todo and round box and danger, warning, caution, notice, safety. + info, help, ... + +==== Marks ==== + +You can mark text as highlighted, less significant and especially emphasised. + + You can mark text as highlighted, less significant and especially emphasised. + +:!: This might look ugly in some templates and should be adjusted accordingly. + +==== Tabs ==== + +You can create a row of tabs by simply wrapping a list of links in ''%%%%''. + + + * [[Some page]] + * [[example|This page]] + * [[Another page]] + + + + * [[Some page]] + * [[example|This page]] + * [[Another page]] + + +:!: Please note, the styling of these tabs depend on the template you are using and not on the wrap plugin. If you only see a list of links and no tabs, please make sure to add "tabs" to the ''noPrefix'' config option and that your template supports at least the 2012-01-25 "Angua" DokuWiki release. + +==== Miscellaneous ==== + +=== Clear float === + +After using any of the float classes, you might come across following text protruding into the space where only the floating containers should be. To prevent that, you should simply add this after your last column: + + + +=== Indent === + +This text will appear indented. + + This text will appear indented. + +=== Outdent === + +This text will appear "outdented". + + This text will appear "outdented". + +=== Prewrap === + + + +Inside this code block the words will wrap to a new line although they are all in one line. + + + + + + Inside this code block the words will wrap to a new line although they are all in one line. + + + +=== Spoiler === + +Here follows a spoiler: Darth Vader is Luke's father. + + Here follows a spoiler: Darth Vader is Luke's father. + +Just select the text in the spoiler box to be able to read its content. + +=== Button links === + +A link that looks like a button: [[wiki:Syntax]] + + A link that looks like a button: [[wiki:Syntax]] + +=== Hide === + +The following text is hidden: John, please revise that sentence. + + The following text is hidden: John, please revise that sentence. + +:!: Warning: The text will still appear in the source code, in non-modern browsers and is searchable. Do not hide any security risky secrets with it! + +=== Pagebreak === + +The following will add a pagebreak: + + The following will add a pagebreak: + +This has no effect on the browser screen. A [[http://reference.sitepoint.com/css/page-break-after|pagebreak]] will force a new page in printouts. + +=== Nopagebreak === + +The following will try to avoid a pagebreak: much content, belonging together (like a long table) + + The following will try to avoid a pagebreak: much content, belonging together (like a long table) + +This also has no effect on the browser screen. It will try to [[http://reference.sitepoint.com/css/page-break-inside|avoid a page break]] in printouts. + +=== Noprint === + +This text appears on the screen, but not in print. + + This text appears on the screen, but not in print. + +=== Onlyprint === + +This text does not appear on the screen, but only in print. + + This text does not appear on the screen, but only in print. + + +==== Combining and Nesting ==== + +You can combine and nest all classes and types of boxes, e.g. + + +===Outer box floats right === + + +Inner nested box floats left and is partly __em__phasized and __hi__ghlighted with a nested __notice__ inside. + + +Text inside outer right box, but beneath inner left box. + + + + +Round tip box underneath, after a ''clear''. + + + + + + + +=== Outer box floats right === + + +Inner nested box floats left and is partly __em__phasized and __hi__ghlighted with a nested __notice__ inside. + + +Text inside outer right box, but beneath inner left box. + + + + +Round tip box underneath, after a ''clear''. + + + + + + +===== Language and Text Direction ===== + +You can change the language and the reading direction of a wrap container by simply adding a colon followed by the language code, like this: + + + +זה עברית. ((This means "This is Hebrew.", at least according to [[http://translate.google.com/|Google Translate]].)) + + + + +זה עברית. ((This means "This is Hebrew.", at least according to [[http://translate.google.com/|Google Translate]].)) + + +The text direction (''rtl'', right to left or ''ltr'', left to right) will get inserted automatically and is solely dependent on the language. The list of currently supported languages is taken from: http://meta.wikimedia.org/wiki/Template:List_of_language_names_ordered_by_code +(If you specify a language not listed there, it simply won't do anything.) diff --git a/sources/lib/plugins/wrap/helper.php b/sources/lib/plugins/wrap/helper.php new file mode 100755 index 0000000..85a81b0 --- /dev/null +++ b/sources/lib/plugins/wrap/helper.php @@ -0,0 +1,489 @@ + + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +class helper_plugin_wrap extends DokuWiki_Plugin { + static protected $boxes = array ('wrap_box', 'wrap_danger', 'wrap_warning', 'wrap_caution', 'wrap_notice', 'wrap_safety', + 'wrap_info', 'wrap_important', 'wrap_alert', 'wrap_tip', 'wrap_help', 'wrap_todo', + 'wrap_download', 'wrap_hi', 'wrap_spoiler'); + static protected $paragraphs = array ('wrap_leftalign', 'wrap_rightalign', 'wrap_centeralign', 'wrap_justify'); + static protected $column_count = 0; + + /** + * get attributes (pull apart the string between '') + * and identify classes, width, lang and dir + * + * @author Anika Henke + * @author Christopher Smith + * (parts taken from http://www.dokuwiki.org/plugin:box) + */ + function getAttributes($data) { + + $attr = array(); + $tokens = preg_split('/\s+/', $data, 9); + $noPrefix = array_map('trim', explode(',', $this->getConf('noPrefix'))); + $restrictedClasses = $this->getConf('restrictedClasses'); + if ($restrictedClasses) { + $restrictedClasses = array_map('trim', explode(',', $this->getConf('restrictedClasses'))); + } + $restrictionType = $this->getConf('restrictionType'); + + foreach ($tokens as $token) { + + //get width + if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|pc|cm|mm|in)$/', $token)) { + $attr['width'] = $token; + continue; + } + + //get lang + if (preg_match('/\:([a-z\-]+)/', $token)) { + $attr['lang'] = trim($token,':'); + continue; + } + + //get id + if (preg_match('/#([A-Za-z0-9_-]+)/', $token)) { + $attr['id'] = trim($token,'#'); + continue; + } + + //get classes + //restrict token (class names) characters to prevent any malicious data + if (preg_match('/[^A-Za-z0-9_-]/',$token)) continue; + if ($restrictedClasses) { + $classIsInList = in_array(trim($token), $restrictedClasses); + // either allow only certain classes + if ($restrictionType) { + if (!$classIsInList) continue; + // or disallow certain classes + } else { + if ($classIsInList) continue; + } + } + $prefix = in_array($token, $noPrefix) ? '' : 'wrap_'; + $attr['class'] = (isset($attr['class']) ? $attr['class'].' ' : '').$prefix.$token; + } + if ($this->getConf('darkTpl')) { + $attr['class'] = (isset($attr['class']) ? $attr['class'].' ' : '').'wrap__dark'; + } + + //get dir + if($attr['lang']) { + $lang2dirFile = dirname(__FILE__).'/conf/lang2dir.conf'; + if (@file_exists($lang2dirFile)) { + $lang2dir = confToHash($lang2dirFile); + $attr['dir'] = strtr($attr['lang'],$lang2dir); + } + } + + return $attr; + } + + /** + * build attributes (write out classes, width, lang and dir) + */ + function buildAttributes($data, $addClass='', $mode='xhtml') { + + $attr = $this->getAttributes($data); + $out = ''; + + if ($mode=='xhtml') { + if($attr['class']) $out .= ' class="'.hsc($attr['class']).' '.$addClass.'"'; + // if used in other plugins, they might want to add their own class(es) + elseif($addClass) $out .= ' class="'.$addClass.'"'; + if($attr['id']) $out .= ' id="'.hsc($attr['id']).'"'; + // width on spans normally doesn't make much sense, but in the case of floating elements it could be used + if($attr['width']) { + if (strpos($attr['width'],'%') !== false) { + $out .= ' style="width: '.hsc($attr['width']).';"'; + } else { + // anything but % should be 100% when the screen gets smaller + $out .= ' style="width: '.hsc($attr['width']).'; max-width: 100%;"'; + } + } + // only write lang if it's a language in lang2dir.conf + if($attr['dir']) $out .= ' lang="'.$attr['lang'].'" xml:lang="'.$attr['lang'].'" dir="'.$attr['dir'].'"'; + } + + return $out; + } + + /** + * render ODT element, Open + * (get Attributes, select ODT element that fits, render it, return element name) + */ + function renderODTElementOpen($renderer, $HTMLelement, $data) { + + $attr = $this->getAttributes($data); + $classes = explode (' ', $attr['class']); + + // Get language + $language = $attr['lang']; + + $is_indent = in_array ('wrap_indent', $classes); + $is_outdent = in_array ('wrap_outdent', $classes); + $is_column = in_array ('wrap_column', $classes); + $is_group = in_array ('group', $classes); + $is_pagebreak = in_array ('wrap_pagebreak', $classes); + + // Check for multicolumns + $columns = 0; + preg_match ('/wrap_col\d/', $attr ['class'], $matches); + if ( empty ($matches [0]) === false ) { + $columns = $matches [0] [strlen($matches [0])-1]; + } + + // Check for boxes + $is_box = false; + foreach (self::$boxes as $box) { + if ( strpos ($attr ['class'], $box) !== false ) { + $is_box = true; + break; + } + } + + // Check for paragraphs + $is_paragraph = false; + if ( empty($language) === false ) { + $is_paragraph = true; + } else { + foreach (self::$paragraphs as $paragraph) { + if ( strpos ($attr ['class'], $paragraph) !== false ) { + $is_paragraph = true; + break; + } + } + } + + $style = NULL; + if ( empty($attr['width']) === false ) { + $style = 'width: '.$attr['width'].';'; + } + $attr ['class'] = 'dokuwiki '.$attr ['class']; + + // Call corresponding functions for current wrap class + if ( $HTMLelement == 'span' ) { + if ( $is_indent === false && $is_outdent === false ) { + $this->renderODTOpenSpan ($renderer, $attr ['class'], $style, $language); + return 'span'; + } else { + $this->renderODTOpenParagraph ($renderer, $attr ['class'], $style, $language, $is_indent, $is_outdent, true); + return 'paragraph'; + } + } else if ( $HTMLelement == 'div' ) { + if ( $is_box === true ) { + $this->renderODTOpenBox ($renderer, $attr ['class'], $style); + return 'box'; + } else if ( $columns > 0 ) { + $this->renderODTOpenColumns ($renderer, $attr ['class'], $style); + return 'multicolumn'; + } else if ( $is_paragraph === true || $is_indent === true || $is_outdent === true ) { + $this->renderODTOpenParagraph ($renderer, $attr ['class'], $style, $language, $is_indent, $is_outdent, false); + return 'paragraph'; + } else if ( $is_pagebreak === true ) { + $renderer->pagebreak (); + // Pagebreak hasn't got a closing stack so we return/push 'other' on the stack + return 'other'; + } else if ( $is_column === true ) { + $this->renderODTOpenColumn ($renderer, $attr ['class'], $style); + return 'column'; + } else if ( $is_group === true ) { + $this->renderODTOpenGroup ($renderer, $attr ['class'], $style); + return 'group'; + } + } + return 'other'; + } + + /** + * render ODT element, Close + */ + function renderODTElementClose($renderer, $element) { + switch ($element) { + case 'box': + $this->renderODTCloseBox ($renderer); + break; + case 'multicolumn': + $this->renderODTCloseColumns($renderer); + break; + case 'paragraph': + $this->renderODTCloseParagraph($renderer); + break; + case 'column': + $this->renderODTCloseColumn($renderer); + break; + case 'group': + $this->renderODTCloseGroup($renderer); + break; + case 'span': + $this->renderODTCloseSpan($renderer); + break; + // No default by intention. + } + } + + function renderODTOpenBox ($renderer, $class, $style) { + $properties = array (); + + if ( method_exists ($renderer, 'getODTProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + // Get CSS properties for ODT export. + $renderer->getODTProperties ($properties, 'div', $class, $style); + + if ( empty($properties ['background-image']) === false ) { + $properties ['background-image'] = + $renderer->replaceURLPrefix ($properties ['background-image'], DOKU_INC); + } + + if ( empty($properties ['float']) === true ) { + // If the float property is not set, set it to 'left' becuase the ODT plugin + // would default to 'center' which is diffeent to the XHTML behaviour. + if ( strpos ($class, 'wrap_center') === false ) { + $properties ['float'] = 'left'; + } else { + $properties ['float'] = 'center'; + } + } + + // The display property has differing usage in CSS. So we better overwrite it. + $properties ['display'] = 'always'; + if ( stripos ($class, 'wrap_noprint') !== false ) { + $properties ['display'] = 'screen'; + } + if ( stripos ($class, 'wrap_onlyprint') !== false ) { + $properties ['display'] = 'printer'; + } + + $renderer->_odtDivOpenAsFrameUseProperties ($properties); + } + + function renderODTCloseBox ($renderer) { + if ( method_exists ($renderer, '_odtDivCloseAsFrame') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + $renderer->_odtDivCloseAsFrame (); + } + + function renderODTOpenColumns ($renderer, $class, $style) { + $properties = array (); + + if ( method_exists ($renderer, 'getODTProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + // Get CSS properties for ODT export. + $renderer->getODTProperties ($properties, 'div', $class, $style); + + $renderer->_odtOpenMultiColumnFrame($properties); + } + + function renderODTCloseColumns ($renderer) { + if ( method_exists ($renderer, '_odtCloseMultiColumnFrame') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + $renderer->_odtCloseMultiColumnFrame(); + } + + function renderODTOpenParagraph ($renderer, $class, $style, $language, $is_indent, $is_outdent, $indent_first) { + $properties = array (); + + if ( method_exists ($renderer, 'getODTProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + // Get CSS properties for ODT export. + $renderer->getODTProperties ($properties, 'p', $class, $style); + + if ( empty($properties ['background-image']) === false ) { + $properties ['background-image'] = + $renderer->replaceURLPrefix ($properties ['background-image'], DOKU_INC); + } + + if ( empty($language) === false ) { + $properties ['lang'] = $language; + } + + if ( $indent_first === true ) { + // Eventually indent or outdent first line only... + if ( $is_indent === true ) { + // FIXME: Has to be adjusted if test direction will be supported. + // See all.css + $properties ['text-indent'] = $properties ['padding-left']; + $properties ['padding-left'] = 0; + } + if ( $is_outdent === true ) { + // FIXME: Has to be adjusted if text (RTL, LTR) direction will be supported. + // See all.css + $properties ['text-indent'] = $properties ['margin-left']; + $properties ['margin-left'] = 0; + } + } else { + // Eventually indent or outdent the whole paragraph... + if ( $is_indent === true ) { + // FIXME: Has to be adjusted if test direction will be supported. + // See all.css + $properties ['margin-left'] = $properties ['padding-left']; + $properties ['padding-left'] = 0; + } + if ( $is_outdent === true ) { + // Nothing to change: keep left margin property. + // FIXME: Has to be adjusted if text (RTL, LTR) direction will be supported. + // See all.css + } + } + + $renderer->p_close(); + $renderer->_odtParagraphOpenUseProperties($properties); + } + + function renderODTCloseParagraph ($renderer) { + if ( method_exists ($renderer, 'p_close') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + $renderer->p_close(); + } + + function renderODTOpenColumn ($renderer, $class, $style) { + $properties = array (); + + if ( method_exists ($renderer, 'getODTProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + // Get CSS properties for ODT export. + $renderer->getODTProperties ($properties, NULL, $class, $style); + + + // Frames/Textboxes still have some issues with formatting (at least in LibreOffice) + // So as a workaround we implement columns as a table. + // This is why we now use the margin of the div as the padding for the ODT table. + $properties ['padding-left'] = $properties ['margin-left']; + $properties ['padding-right'] = $properties ['margin-right']; + $properties ['padding-top'] = $properties ['margin-top']; + $properties ['padding-bottom'] = $properties ['margin-bottom']; + $properties ['margin-left'] = NULL; + $properties ['margin-right'] = NULL; + $properties ['margin-top'] = NULL; + $properties ['margin-bottom'] = NULL; + + // Percentage values are not supported for the padding. Convert to absolute values. + $length = strlen ($properties ['padding-left']); + if ( $length > 0 && $properties ['padding-left'] [$length-1] == '%' ) { + $properties ['padding-left'] = trim ($properties ['padding-left'], '%'); + $properties ['padding-left'] = $renderer->_getAbsWidthMindMargins ($properties ['padding-left']).'cm'; + } + $length = strlen ($properties ['padding-right']); + if ( $length > 0 && $properties ['padding-right'] [$length-1] == '%' ) { + $properties ['padding-right'] = trim ($properties ['padding-right'], '%'); + $properties ['padding-right'] = $renderer->_getAbsWidthMindMargins ($properties ['padding-right']).'cm'; + } + $length = strlen ($properties ['padding-top']); + if ( $length > 0 && $properties ['padding-top'] [$length-1] == '%' ) { + $properties ['padding-top'] = trim ($properties ['padding-top'], '%'); + $properties ['padding-top'] = $renderer->_getAbsWidthMindMargins ($properties ['padding-top']).'cm'; + } + $length = strlen ($properties ['padding-bottom']); + if ( $length > 0 && $properties ['padding-bottom'] [$length-1] == '%' ) { + $properties ['padding-bottom'] = trim ($properties ['padding-bottom'], '%'); + $properties ['padding-bottom'] = $renderer->_getAbsWidthMindMargins ($properties ['padding-bottom']).'cm'; + } + + $this->column_count++; + if ( $this->column_count == 1 ) { + // If this is the first column opened since the group was opened + // then we have to open the table and a (single) row first. + $column_width = $properties ['width']; + $properties ['width'] = '100%'; + $renderer->_odtTableOpenUseProperties($properties); + $renderer->_odtTableRowOpenUseProperties($properties); + $properties ['width'] = $column_width; + } + + // Convert rel-width to absolute width. + // The width in percentage works strange in LibreOffice, this is a workaround. + $length = strlen ($properties ['width']); + if ( $length > 0 && $properties ['width'] [$length-1] == '%' ) { + $properties ['width'] = trim ($properties ['width'], '%'); + $properties ['width'] = $renderer->_getAbsWidthMindMargins ($properties ['width']).'cm'; + } + + // We did not specify any max column value when we opened the table. + // So we have to tell the renderer to add a column just now. + $renderer->_odtTableAddColumnUseProperties($properties); + + // Open the cell. + $renderer->_odtTableCellOpenUseProperties($properties); + } + + function renderODTCloseColumn ($renderer) { + if ( method_exists ($renderer, '_odtTableAddColumnUseProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + $renderer->tablecell_close(); + } + + function renderODTOpenGroup ($renderer, $class, $style) { + // Nothing to do for now. + } + + function renderODTCloseGroup ($renderer) { + // If a table has been opened in the group we close it now. + if ( $this->column_count > 0 ) { + // At last we need to close the row and the table! + $renderer->tablerow_close(); + //$renderer->table_close(); + $renderer->_odtTableClose(); + } + $this->column_count = 0; + } + + function renderODTOpenSpan ($renderer, $class, $style, $language) { + $properties = array (); + + if ( method_exists ($renderer, 'getODTProperties') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + + // Get CSS properties for ODT export. + $renderer->getODTProperties ($properties, 'span', $class, $style); + + if ( empty($properties ['background-image']) === false ) { + $properties ['background-image'] = + $renderer->replaceURLPrefix ($properties ['background-image'], DOKU_INC); + } + + if ( empty($language) === false ) { + $properties ['lang'] = $language; + } + + $renderer->_odtSpanOpenUseProperties($properties); + } + + function renderODTCloseSpan ($renderer) { + if ( method_exists ($renderer, '_odtSpanClose') === false ) { + // Function is not supported by installed ODT plugin version, return. + return; + } + $renderer->_odtSpanClose(); + } +} diff --git a/sources/lib/plugins/wrap/images/README b/sources/lib/plugins/wrap/images/README new file mode 100755 index 0000000..a44a9f4 --- /dev/null +++ b/sources/lib/plugins/wrap/images/README @@ -0,0 +1,18 @@ +_NOTE_ + +Icon set: Human-O2 +Designer: Oliver Scholtz (and others) [~schollidesign] +License: GPL (http://www.gnu.org/copyleft/gpl.html) +URL: http://schollidesign.deviantart.com/art/Human-O2-Iconset-105344123 + +_TOOLBAR_ + +Icon set: Silk +Designer: Mark James +License: Creative Commons Attribution 2.5 License (http://creativecommons.org/licenses/by/2.5/) +URL: http://www.famfamfam.com/lab/icons/silk/ + +Icon set: Silk Companion +Designer: Damien Guard +License: Creative Commons Attribution 2.5 License (http://creativecommons.org/licenses/by/2.5/) +URL: http://www.damieng.com/icons/silkcompanion diff --git a/sources/lib/plugins/wrap/images/note/16/alert.png b/sources/lib/plugins/wrap/images/note/16/alert.png new file mode 100755 index 0000000000000000000000000000000000000000..f051b1d903f25665c5c53df2ec4a8ce46132a7b4 GIT binary patch literal 883 zcmV-(1C0EMP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RT36F9>5ac0f8+?G7ccU2p+KZuMgdQ@Zzp~ADplJixN(E-YE@4}qx;SN{-W5MN=>D! zm7ORByLaXf^% zKqZ$Wb@(t{kqB?h&LZ1wdg5`Ul>9M2Pk8wf~l8jS{ayG^22BLtQ=ZIZvm9Y9(16FWn4I(d zNpp1c{9HcYvGUT=68Bv9r`1U0?qDpoudme-0uZ{6(6o(Mv2FQr5KO*$=+OBOFI@Qd zZv=RI$Ib(9ndU@a%O|Dl7@9^yN~(szf)JmlCnj=}M~`mk{{(uQWs={T^CbWP002ov JPDHLkV1j8So3np3KFnF8b=gs=mvC`t-b*ldH?8Thhy1g|Qi^bYTS96z^UoB-30)UjW z^Yz!2*-_v3^XuzBpYQEYe+ICs&G#QXqS;N1C6n8xUDv(UCVH~@RfD%_Fcm{*q9^M( z&JEXfZ^vx?bb98oXaE%bGD@nP*0xYeA+S(!fr^8Q3qT;HL`n;#WxMAEEe$Iup%Qk? z-Zk&du;S10Ggv}9L=eGR{tHtt$LLJ-uqQb{Sn*T9ubP97_Ed+~b`oIX-3agJKA_?P z9S0qULh2)v^CJYlM;Hbqlg;f7E7-P9YprCDeUKCB>o_S{v#;WUU{i8@_Z2c7IRN1} zO|6Xpt$h?>>T7F_f~=TDLdcKnOCvR|E`|O2C1{ zFe~l?vxPhClcyNWoW-&fmXrwJN6B(W4RCY(F23(&3I#){T%wTAQ!JI}FP)^anIzkC zlurwbxCs}xxdp8(LKC*u02j}n;qujM1CtZu%v1fYsGyX^i!7Xy|kfj4&V~fWROkkg%jOp0yD+SuJK|`TG+95kV4BI6w^0QN9{h zR9gYcKoR%>d{a@f6cvO(PzR7v9>CNA3cv;sR6nb-q9$24Rn#?C2Za1D{Q>Y++j()F R+eZKZ002ovPDHLkV1f+NHGKd8 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/16/help.png b/sources/lib/plugins/wrap/images/note/16/help.png new file mode 100755 index 0000000000000000000000000000000000000000..2e923a291918d5ebefbfa4f40f1a2bef92fef664 GIT binary patch literal 929 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4(FKV9xM#aSW-Lla#OkB*pOmf6@`9 zW9JSWP&fm`#||7gz%2Uv(18OVx*8iF>M}DQ_D?wqRp*l2{mJ|FEU%Y4b{BMO%-r~y zBhvr~{`~p$?$~wn?|!zsHx-{hzI?jBv4O#!w1k8o=Ygid^j^|YTl!j3Vc}D$wJVn7 zXsaDKci{ZlV;^3Bk8cZ?-)Fq%@0ad}PdB@_$H&~>`{m}-x6%vre(^)x*C=)1r25KC z)pbv0RVmF8%SPpLFb#P!{IPkgGMPvWO6?JX$=h@f-R{A6`Exlyq zRHO2aiK)$O*_|s>e`~H=F7f>C7P)C}S!&JKu9n@ZR=*)=& zAHE*XXLEC7Yx9qy2xE{_1{s`g=Uj!*#cKP8l`v@JV({%-j197^OgP~n!D(=?4k~{pBJzrwpzF$1z$*HNSKmI+unasx4 z_8w>{4@6s15->`S15?JM$D3E1OU#InnBdsdZ|9shLo-V&IX(Tyk2kM)fm+0YI{w4l z`QgjauX~Tz)$XY8ZEkL66o2sGLBfx(5C3fyzy4h=IU%6}=#LN3cy9UC-rd;f818XU z#mVdZ@wvVMo{yiOpU<hr|7AFry0&dqllT|R_B}87Mo{bAPYQQ{an^LB{Ts5>inm8 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/16/important.png b/sources/lib/plugins/wrap/images/note/16/important.png new file mode 100755 index 0000000000000000000000000000000000000000..0d7f1f0772495fed95bf1e4b6b13e7d8b4bd757f GIT binary patch literal 574 zcmV-E0>S->P)O zrz-su^iaX0c)Gs-Ky8kVxgd&SeWzD1+)?+U}0k{L<cD=ownVsMK|5@Daafh#Y z#e3h+e*Hd}NII2`J_uF&Ez%1?r8Dzdt!#Ui@IO({9a@60-vrfa_RH z!YI7ykI%gK(qk6~eXjtJ0BKfm?5)pFc&+wEX=*Khq6u}zYS&@Va|m^YKhfl+YI&{p z`ti5Fcrnj&b^y=OSbJx=*XgVyYjzl?L^>nS3tl)nxbk5h; z-d)|^L8nWjQ9m_U?t4L;?Jg(8@a2y;5x^)&=57I4J-F0yoAuX1UVc-uEM&jyJ*(4- zNM}SkBaBmyJ-k9$fzB$Dtk|tZI%7J^8T7l)@PLwvM$Hvc4nn;%T?i@!rGe)kACi|9 zmwxyQomEhkfI$j@Qr0SNV?hBTNlSt_MMw*jjj$9KzrD@zNAE=lh)YRo1W8&Dh7qH! zh_OEw7$X$AnE8{)AC-5zw$ns8F3N$HV-bWQ09XB#agGnD=>hmz*L4by3BN3O2W?|i8si?2&)EG4TR+NCwtUv zi<*+0exeIPvRhAsm?YZ3zqIqpS2us>k=ti*d+Rhkg=JGphx1pqEnqod*a{ZJ4 awf+b8-%+pLwB=X;00005LnaSW-Llaz9RNzea^*suSe zxBuHdzg|>QLPEmgW~7|a#?5oCpWXk9FIE?*>Hq(vBNy(hU-<>Z+HDS zf`IG6;~mA{J2`tbTK?@WaATIfAkcSaZNh)Y2DRP0xAA+6Zf(A!&2q!|LS^N{c_(!o z4sdS(Yj4{9K%e=v`LqA~_wTLv+&#bX<9YwK`{s6k|L=bN{C~Z5z44#DAE!S2KmEP_ z{XdUV|9$`bJDzP?zCkU-_9p3s3H2XW8<-zH*_UppB(?0@h{+K{nNG++MCvmYP*9%z3y zKiaMnKUMxujrPBHfB*j0Nn(1V{gqp9zvDG#h^9_AHXuk7dv@8##=cC}vf%dQZucqA z&(F8#v9GiHb@2GF*A~Xww>3+?LTowY(a8e@r?r#*fByIX(1NUoXFfc;>D=btA8!Bx zE@e8$0-$kt=mIaJu$}QI0}ZWHh8icl4FIy*g9vD^yub=h0 h0^KCPL6Zq=Ix~Z70?WKA1Lcn()t;_?F6*2UngD|~n4kav literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/16/todo.png b/sources/lib/plugins/wrap/images/note/16/todo.png new file mode 100755 index 0000000000000000000000000000000000000000..ebaf17a01d7c3d7b52865b546da6e4ba0621a19d GIT binary patch literal 692 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/48/important.png b/sources/lib/plugins/wrap/images/note/48/important.png new file mode 100755 index 0000000000000000000000000000000000000000..6910ef64ca28e9df6857daf659bbff8fc44faf87 GIT binary patch literal 3029 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/48/info.png b/sources/lib/plugins/wrap/images/note/48/info.png new file mode 100755 index 0000000000000000000000000000000000000000..ccb25e87215a80786cd662dcc550cf070be55fdb GIT binary patch literal 3315 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 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/note/48/tip.png b/sources/lib/plugins/wrap/images/note/48/tip.png new file mode 100755 index 0000000000000000000000000000000000000000..7bd89519d23c122ba436d7fd019307d53f2b4574 GIT binary patch literal 4232 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 O0000@H!pQI5+Ti_L0YJ|=5)wx zkF=1qGlSNkDr^3|$ws8mau%VAs!N}G7ur`j3{a)&lwiJCaRceu$939gbwXgD!G7W+ z`tnW&{YVf#zprcNBv=w4wLNbW#_u=%`)~XMSM_D9ZJ#Vp00000NkvXXu0mjfl(La4 literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/toolbar/clear.png b/sources/lib/plugins/wrap/images/toolbar/clear.png new file mode 100755 index 0000000000000000000000000000000000000000..1cdcb488da1254e40c39cc99fa1cb6e0a480ce8d GIT binary patch literal 797 zcmV+&1LFLNP)ngf1_J^|Gp7DU(Z`P&Lcrat`vasg%WsqVcveJqFtnL#qW z1|k5>%^n=AuSPXpCpN+TR~bBcm)(T$WuhZKc_ajm1?qMH%DN59wBhAMc<6f3rrzi{ z+ZS^8mmyqQ=y5+To`~Yv$5nW}J~WBI{4!9Gb+osN@KN`Q26(DAoOSH3$KyA%cr-H$ zuJiagTu5|aQQ;sd7P5;ay3vP5KaX0$MuX4E5f5kPI6$Y7*n~l##)A*D`HdqqHq;{Z zLvv0En*p**MW{+16Ek02kAp{pNOZShZ0Hv08@$BmIzu&e?i%Y%JXZzPpknHVqkzUb zc2n%w!`B&%-x((1a2S*KhDdt;Cs?j(3*eX|woC%uu)#2uwNErHkZ>r3SS*GEk#?k? zj}XhUwg85yJHgXI5b%59uNB>}-RiV1yW(gxin+PD-;gjK3|}L(t{XX6T3N%PJpqWK zfSolC5IEe~2L1bc5)6hAi9}E+6u|R5^7%aC@i=5z#^Q?!;sS2d4!e7~ACdt`C0a6- zJ~{D*9X%(uft#5Xs(@6b2A>`I*(@@B|PH18+niCV2MPSl1b1XsI zE&-XZS+|iYIow4i1cES+umYV03g8)6>&ixAAY+d0*+RZ5kTmL|~dG%5SHHk|deM bVp01AsKi;DWRF+x00000NkvXXu0mjfFXUt| literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/toolbar/column.png b/sources/lib/plugins/wrap/images/toolbar/column.png new file mode 100755 index 0000000000000000000000000000000000000000..97b2e03534fde13a13e7d84768e47f9b4e9b049f GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-&X@N{tu(Kw&{=X`^_fnmU^23D6T z|NkHVz|OPW*vP=;@BgD8WzABvu@M{$HPs!^U|F=gR-} z&AETiZeUz-oG szv_+eu)PvwoyEX;-Tuf72ZK!v%2xjJ(h^EWKsPaXy85}Sb4q9e0Nid~c>n+a literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/toolbar/em.png b/sources/lib/plugins/wrap/images/toolbar/em.png new file mode 100755 index 0000000000000000000000000000000000000000..894013136a754879117fc293c30fb1ef988a2d9e GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE(~cP$iB-f7bwD6;1OBO zz`!jG!i)^F=12eq*-JcqUDEaktaVt4Nf>ngsP2w>R^Wl1l+br!CK749vhYlP# z(cvq&N%6*$35>#`Ki5R#Fq;O^-g@IFN~52!HR)5S5Q;?~jNle`BMc#4(665P^Gb;Ta~yCsNaNz1e vGhT2Xw>}}R(cQ}(|8lKS{a@zrr#5#!#w(pXR_1*bXeEQEtDnm{r-UW|u)0-~ literal 0 HcmV?d00001 diff --git a/sources/lib/plugins/wrap/images/toolbar/lo.png b/sources/lib/plugins/wrap/images/toolbar/lo.png new file mode 100755 index 0000000000000000000000000000000000000000..cb64e86071884fe8fc18cdee91694ee3b5ed3c53 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmPy7q=J#BlnN#n}I^IC9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3LzP(3hti10q;{(^MDG?JzX3_D&{07NU%2ZELpnrufMnVZ~u*oOID;ST?<&m x>lWT|=6D)Mpxyy?4KoI9hwsLrN$DS$7_5VH>C0%IF_B-EibI!3; zmECmrm)8an`9ejrD)RBb>G9d!eAa&f^W&#_RP+NCd4KPL(_N-r0Si}0Y*l?rMLx;yA3oSS@Hz=GG|SW2PLfJ#f`@A}%PMkFMZO<8_j~&>VE*dJ zFrpWn?xB;tN6+AP9|8@Dw-&fJF-G6hCrETWNzkgYS(>3yotsi)#*V);b;Y_ne(DEA z&OLE()N=FB;x}q+SLZNclc-h3u>$t>9|3=hWM@AKH%q-d&t_=`Z)^F-lp1;S@XMF2 zs8OR?onpT=F&~vr_P{8S}7F)0jxB3?hv+<#ji{w%?frB zEbnhfDB;F68uf?7nJ!2>XcVI&q|^wHaxkC)r1s$U93xI=aQz3!#&2v#4Pv(w<75#p zgjkU1%e`EUN^07fRa$ZH=IPlWjR=cvq{kcDh+iO3o=-7)FO0xjPVo`Tp wzi#Q*>R07*qoM6N<$f + */ +$lang['column'] = 'عمود'; +$lang['box'] = 'مربع متوسط بسيط'; +$lang['info'] = 'مربع معلومات'; +$lang['tip'] = 'مربع تلميح'; +$lang['important'] = 'مربع هام'; +$lang['alert'] = 'مربع التنبيه'; +$lang['help'] = 'مربع تعليمات'; +$lang['download'] = 'مربع التحميل'; +$lang['lo'] = 'أقل أهمية'; diff --git a/sources/lib/plugins/wrap/lang/ar/settings.php b/sources/lib/plugins/wrap/lang/ar/settings.php new file mode 100755 index 0000000..808b843 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ar/settings.php @@ -0,0 +1,11 @@ + + */ +$lang['restrictedClasses'] = 'تقييد استخدام البرنامج المساعد لهذه الفئات (مفصولة بفاصلة)'; +$lang['restrictionType'] = 'تعين نوع القيد، إذا كانت الفئات المذكورة أعلاه يجب تضمينها أو استبعادها'; +$lang['restrictionType_o_0'] = 'السماح لجميع الفئات باستثناء تلك المذكورة أعلاه'; +$lang['restrictionType_o_1'] = 'تقييد للفئات المذكورة أعلاه فقط وليس غيرها'; diff --git a/sources/lib/plugins/wrap/lang/bn/lang.php b/sources/lib/plugins/wrap/lang/bn/lang.php new file mode 100755 index 0000000..301d270 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/bn/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'মোড়ানো প্লাগইন'; +$lang['column'] = 'স্তম্ভ'; +$lang['box'] = 'সহজ কেন্দ্রিক বাক্স'; +$lang['info'] = 'তথ্য বাক্স'; +$lang['tip'] = 'টিপ বাক্স'; +$lang['important'] = 'গুরুত্বপূর্ণ বাক্স'; +$lang['alert'] = 'সতর্কতা বাক্স'; +$lang['help'] = 'সাহায্য বাক্স'; +$lang['download'] = 'ডাউনলোডের বাক্স'; +$lang['todo'] = 'করণীয় বাক্স'; +$lang['clear'] = 'স্পষ্ট floats'; +$lang['em'] = 'বিশেষ করে জোর'; +$lang['hi'] = 'হাইলাইট'; +$lang['lo'] = 'কম গুরুত্বপূর্ণ'; diff --git a/sources/lib/plugins/wrap/lang/bn/settings.php b/sources/lib/plugins/wrap/lang/bn/settings.php new file mode 100755 index 0000000..baeca82 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/bn/settings.php @@ -0,0 +1,14 @@ + + */ +$lang['noPrefix'] = 'যা (কমা দিয়ে পৃথক) শ্রেণীর নাম "wrap_" সঙ্গে অগ্রে যুক্ত হওয়া থেকে বাদ দেওয়া হবে?'; +$lang['restrictedClasses'] = 'এইসব করতে প্লাগিন ব্যবহার সীমিত (কমা দিয়ে পৃথক করা) ক্লাস'; +$lang['restrictionType'] = 'ক্লাস উপরে অন্তর্ভুক্ত বা বাদ দেওয়া হইবে যদি সীমাবদ্ধতা ধরন, নির্দিষ্ট করে'; +$lang['restrictionType_o_0'] = 'উপরোক্ত জনকে ছাড়া সব শ্রেণীর অনুমতি'; +$lang['restrictionType_o_1'] = 'শুধুমাত্র উপরোক্ত শ্রেণীর এবং কোন অন্যদের সীমিত'; +$lang['syntaxDiv'] = 'কোন বাক্য গঠন ব্লক গোপন জন্য টুলবার জুতো ব্যবহার করা উচিত?'; +$lang['syntaxSpan'] = 'কোন বাক্য গঠন ইনলাইন গোপন জন্য টুলবার জুতো ব্যবহার করা উচিত?'; diff --git a/sources/lib/plugins/wrap/lang/cs/lang.php b/sources/lib/plugins/wrap/lang/cs/lang.php new file mode 100755 index 0000000..7c3d7dc --- /dev/null +++ b/sources/lib/plugins/wrap/lang/cs/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Zásuvný modul Wrap'; +$lang['column'] = 'sloupce'; +$lang['box'] = 'jednoduchý vystředěný rámeček'; +$lang['info'] = 'informační rámeček'; +$lang['tip'] = 'rámeček s radou'; +$lang['important'] = 'důležitý rámeček'; +$lang['alert'] = 'výstražný rámeček'; +$lang['help'] = 'pomocný rámeček'; +$lang['download'] = 'rámeček s odkazem ke stažení'; +$lang['todo'] = 'rámeček úkolu'; +$lang['clear'] = 'clear floats'; +$lang['em'] = 'zvláštně zdůrazněné'; +$lang['hi'] = 'zvýrazněné'; +$lang['lo'] = 'méně důležité'; diff --git a/sources/lib/plugins/wrap/lang/cs/settings.php b/sources/lib/plugins/wrap/lang/cs/settings.php new file mode 100755 index 0000000..e8d133c --- /dev/null +++ b/sources/lib/plugins/wrap/lang/cs/settings.php @@ -0,0 +1,14 @@ + + */ +$lang['noPrefix'] = 'Která (čárkou oddělená) jména tříd nemají být označována předponou "wrap_"?'; +$lang['restrictedClasses'] = 'omezit použití zásuvného modulu na tyto (čárkou oddělené) třídy'; +$lang['restrictionType'] = 'typ omezení, rozhoduje jestli mají být výše uvedené třídy zahrnuty nebo vyřazeny'; +$lang['restrictionType_o_0'] = 'povolit všechny třídy kromě těch výše'; +$lang['restrictionType_o_1'] = 'omezit pouze na třídy výše a žádné jiné'; +$lang['syntaxDiv'] = 'Jaká syntax má být použita ve výběru pro zarovnání bloku? '; +$lang['syntaxSpan'] = 'Jaká syntax má být použita ve výběru pro zarovnání v řádku? '; diff --git a/sources/lib/plugins/wrap/lang/da/lang.php b/sources/lib/plugins/wrap/lang/da/lang.php new file mode 100755 index 0000000..d300095 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/da/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap Plugin'; +$lang['column'] = 'række'; +$lang['box'] = 'simpel centreret boks'; +$lang['info'] = 'info boks'; +$lang['tip'] = 'tip boks'; +$lang['important'] = 'vigtig boks'; +$lang['alert'] = 'alarm boks'; +$lang['help'] = 'hjælp boks'; +$lang['download'] = 'download boks'; +$lang['todo'] = 'todo boks'; +$lang['clear'] = 'ryd flydere'; +$lang['em'] = 'specielt fremhævet'; +$lang['hi'] = 'fremhævet'; +$lang['lo'] = 'mindre vigtigt'; diff --git a/sources/lib/plugins/wrap/lang/da/settings.php b/sources/lib/plugins/wrap/lang/da/settings.php new file mode 100755 index 0000000..25b0962 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/da/settings.php @@ -0,0 +1,12 @@ + + */ +$lang['noPrefix'] = 'Hvilke (kommaseparerede) klassenavne skal udelukkes fra at få præfikset "wrap_"?'; +$lang['restrictedClasses'] = 'begræns brugen af plugin til følgende (kommaseparerede) klasser'; +$lang['restrictionType'] = 'begrænsningstype, specificerer om ovenstående klasser skal inkluderes eller ekskluderes'; +$lang['restrictionType_o_0'] = 'tillad alle klasser på nær de ovenstående'; +$lang['restrictionType_o_1'] = 'begræns til ovenstående klasser og ingen andre'; diff --git a/sources/lib/plugins/wrap/lang/de-informal/lang.php b/sources/lib/plugins/wrap/lang/de-informal/lang.php new file mode 100755 index 0000000..0e83e08 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/de-informal/lang.php @@ -0,0 +1,19 @@ + + */ +$lang['picker'] = 'Wrap-kromaĵo'; +$lang['column'] = 'kolumnoj'; +$lang['box'] = 'simpla centrita skatolo'; +$lang['info'] = 'inform-skatolo'; +$lang['tip'] = 'konsil-skatolo'; +$lang['important'] = 'grava skatolo'; +$lang['alert'] = 'avert-skatolo'; +$lang['help'] = 'help-skatolo'; +$lang['download'] = 'elŝut-skatolo'; +$lang['todo'] = 'farendaĵ-skatolo'; +$lang['clear'] = 'liberigi la randojn'; +$lang['em'] = 'aparte emfazita'; +$lang['hi'] = 'markita'; +$lang['lo'] = 'malpli grava'; diff --git a/sources/lib/plugins/wrap/lang/eo/settings.php b/sources/lib/plugins/wrap/lang/eo/settings.php new file mode 100755 index 0000000..89d037a --- /dev/null +++ b/sources/lib/plugins/wrap/lang/eo/settings.php @@ -0,0 +1,14 @@ + + */ +$lang['noPrefix'] = 'Kiuj (komo-disigitaj) klasnomoj estu ekskludataj de la prefikso "wrap_"?'; +$lang['restrictedClasses'] = 'limigi la uzon de la kromaĵo al tiuj klasoj (komo-disigitaj)'; +$lang['restrictionType'] = 'tipo de limigo (ĉu la supre menciitaj klasoj estu inkludataj aŭ ekskludataj?)'; +$lang['restrictionType_o_0'] = 'permesi ĉiujn klasojn krom la menciitaj'; +$lang['restrictionType_o_1'] = 'limigi al nur tiuj grupoj, neniuj aliaj'; +$lang['syntaxDiv'] = 'Kiun sintakson uzi por blok-volvoj en la ilaro-elektilo?'; +$lang['syntaxSpan'] = 'Kiun sintakson uzi por enliniaj volvoj en la ilaro-elektilo?'; diff --git a/sources/lib/plugins/wrap/lang/es/lang.php b/sources/lib/plugins/wrap/lang/es/lang.php new file mode 100755 index 0000000..432cd05 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/es/lang.php @@ -0,0 +1,20 @@ + + * @author Óscar M. Lage + */ +$lang['noPrefix'] = '¿Qué nombres de clase (separados por comas) no deberían ser precedidos de "wrap_"?'; +$lang['restrictedClasses'] = 'restringir el uso de este plugin a estas clases (separadas por comas)'; +$lang['restrictionType'] = 'tipo de restricción, especifica si las clases anteriores serán incluidas o ecluidas'; +$lang['restrictionType_o_0'] = 'permitir todas las clases excepto las anteriores'; +$lang['restrictionType_o_1'] = 'restringir a sólo las clases anteriores y no otras'; +$lang['syntaxDiv'] = '¿Qué sintaxis debería ser usada en el selector de la barra de herramientas para los bloques "wrap"?'; +$lang['syntaxSpan'] = '¿Qué sintaxis debería ser usada en el selector de la barra de herramientas para los "wrap" en linea?'; diff --git a/sources/lib/plugins/wrap/lang/fa/lang.php b/sources/lib/plugins/wrap/lang/fa/lang.php new file mode 100755 index 0000000..14d04e7 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/fa/lang.php @@ -0,0 +1,20 @@ + + */ +$lang['column'] = 'ستون'; +$lang['box'] = 'کادر ساده'; +$lang['info'] = 'کادر اطلاعات'; +$lang['tip'] = 'کادر نکته'; +$lang['important'] = 'کادر مهم'; +$lang['alert'] = 'کادر هشدار'; +$lang['help'] = 'کادر کمک'; +$lang['download'] = 'کادر دانلود'; +$lang['todo'] = 'کادر کاربردی'; +$lang['clear'] = 'کادر شناور فعال'; +$lang['em'] = 'تاکید'; +$lang['hi'] = 'هایلایت'; +$lang['lo'] = 'کم اهمیت'; diff --git a/sources/lib/plugins/wrap/lang/fr/lang.php b/sources/lib/plugins/wrap/lang/fr/lang.php new file mode 100755 index 0000000..0a94a1b --- /dev/null +++ b/sources/lib/plugins/wrap/lang/fr/lang.php @@ -0,0 +1,23 @@ + + * @author schplurtz + * @author Schplurtz le Déboulonné + */ +$lang['picker'] = 'Extension Wrap'; +$lang['column'] = 'colonnes'; +$lang['box'] = 'bloc simple'; +$lang['info'] = 'bloc information'; +$lang['tip'] = 'bloc astuce'; +$lang['important'] = 'bloc important'; +$lang['alert'] = 'bloc alerte'; +$lang['help'] = 'bloc aide'; +$lang['download'] = 'bloc téléchargement'; +$lang['todo'] = 'bloc à faire'; +$lang['clear'] = 'rétablir le flux après un élément flottant'; +$lang['em'] = 'particulièrement important'; +$lang['hi'] = 'important'; +$lang['lo'] = 'peu important'; diff --git a/sources/lib/plugins/wrap/lang/fr/settings.php b/sources/lib/plugins/wrap/lang/fr/settings.php new file mode 100755 index 0000000..91c520b --- /dev/null +++ b/sources/lib/plugins/wrap/lang/fr/settings.php @@ -0,0 +1,18 @@ + + * @author schplurtz + * @author Schplurtz le Déboulonné + * @author Pietroni + */ +$lang['noPrefix'] = 'Quelles classes (séparées par une virgule) ne devraient pas être préfixées d\'un "wrap_" ?'; +$lang['restrictedClasses'] = 'Restreindre l\'utilisation de cette extension à ces classes. (liste séparée par des virgules)'; +$lang['restrictionType'] = 'Type de restriction. Indique s\'il faut inclure ou exclure les classes ci-dessus.'; +$lang['restrictionType_o_0'] = 'Autoriser toutes les classes sauf celles ci-dessus.'; +$lang['restrictionType_o_1'] = 'N\'autoriser que les classes ci dessus.'; +$lang['syntaxDiv'] = 'Quelle syntaxe les boutons de la barre d\'outil doivent-ils générer pour les éléments blocs ?'; +$lang['syntaxSpan'] = 'Quelle syntaxe les boutons de la barre d\'outil doivent-ils générer pour les éléments en ligne ?'; +$lang['darkTpl'] = 'Optimiser les couleurs pour les thèmes sombres?'; diff --git a/sources/lib/plugins/wrap/lang/hr/lang.php b/sources/lib/plugins/wrap/lang/hr/lang.php new file mode 100755 index 0000000..3923ceb --- /dev/null +++ b/sources/lib/plugins/wrap/lang/hr/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap dodatak'; +$lang['column'] = 'kolone'; +$lang['box'] = 'običan centrirani okvir'; +$lang['info'] = 'info okvir'; +$lang['tip'] = 'okvir savjet'; +$lang['important'] = 'okvir važno'; +$lang['alert'] = 'okvir upozorenja'; +$lang['help'] = 'okvir pomoći'; +$lang['download'] = 'okvir učitavanja'; +$lang['todo'] = 'okvir preostalo'; +$lang['clear'] = 'prazan okvir'; +$lang['em'] = 'posebno naglašeni'; +$lang['hi'] = 'istaknuti'; +$lang['lo'] = 'manje bitan'; diff --git a/sources/lib/plugins/wrap/lang/hr/settings.php b/sources/lib/plugins/wrap/lang/hr/settings.php new file mode 100755 index 0000000..46f6f0a --- /dev/null +++ b/sources/lib/plugins/wrap/lang/hr/settings.php @@ -0,0 +1,15 @@ + + */ +$lang['noPrefix'] = 'Koja (zarezom odvojene) imena klasa trebaju ne trebaju biti s prefiksom "wrap_"? '; +$lang['restrictedClasses'] = 'ograniči korištenje ovog dodatka na ove klase (zarezom odvojena lista)'; +$lang['restrictionType'] = 'vrsta ograničenja, određuje da li gore navedene klase trebaju biti uključene ili isključene'; +$lang['restrictionType_o_0'] = 'dozvoli sve klase osim gore navedenih'; +$lang['restrictionType_o_1'] = 'dozvoli samo gore navedene klase'; +$lang['syntaxDiv'] = 'Koja sintaksa treba biti korištena u alatnoj traci za omeđivanje bloka?'; +$lang['syntaxSpan'] = 'Koja sintaksa treba biti korištena u alatnoj traci za omeđivanje teksta u liniji?'; +$lang['darkTpl'] = 'Prilagoditi boje za tamne predloške?'; diff --git a/sources/lib/plugins/wrap/lang/hu/lang.php b/sources/lib/plugins/wrap/lang/hu/lang.php new file mode 100755 index 0000000..4dbfc99 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/hu/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap-csatoló'; +$lang['column'] = 'oszlopok'; +$lang['box'] = 'egyszerű, középre igazított doboz'; +$lang['info'] = 'információs doboz'; +$lang['tip'] = 'tippdoboz'; +$lang['important'] = 'fontos doboz'; +$lang['alert'] = 'figyelmeztető doboz'; +$lang['help'] = 'súgódoboz'; +$lang['download'] = 'letöltéshez doboz'; +$lang['todo'] = 'teendőhöz doboz'; +$lang['clear'] = 'float tiltása'; +$lang['em'] = 'különösen hangsúlyos'; +$lang['hi'] = 'kiemelt'; +$lang['lo'] = 'kevésbé fontos'; diff --git a/sources/lib/plugins/wrap/lang/hu/settings.php b/sources/lib/plugins/wrap/lang/hu/settings.php new file mode 100755 index 0000000..6f3c9da --- /dev/null +++ b/sources/lib/plugins/wrap/lang/hu/settings.php @@ -0,0 +1,16 @@ + + * @author DelD + */ +$lang['noPrefix'] = 'Mely (vesszővel elválasztott) osztályneveknek ne legyen "wrap_" előtagja?'; +$lang['restrictedClasses'] = 'csatoló korlátozása ezekre a (vesszővel elválasztott) osztályokra'; +$lang['restrictionType'] = 'korlátozás típusa, megadja, hogy a fenti osztályokat figyelembe vegye vagy se a csatoló'; +$lang['restrictionType_o_0'] = 'minden osztály engedélyezése, kivéve a fentieket'; +$lang['restrictionType_o_1'] = 'csak a fenti osztályok engedélyezése'; +$lang['syntaxDiv'] = 'Milyen szintaxist használjunk a blokktípusú dobozokhoz az eszközsorban?'; +$lang['syntaxSpan'] = 'Milyen szintaxist használjunk a soron belüli (inline) dobozokhoz az eszközsorban?'; +$lang['darkTpl'] = 'Optimalizáljam a színeket sötét sablonokhoz?'; diff --git a/sources/lib/plugins/wrap/lang/it/lang.php b/sources/lib/plugins/wrap/lang/it/lang.php new file mode 100755 index 0000000..a77be6a --- /dev/null +++ b/sources/lib/plugins/wrap/lang/it/lang.php @@ -0,0 +1,12 @@ + + * @author Giovanni + */ +$lang['column'] = 'colonne'; +$lang['em'] = 'enfatizzato speciale'; +$lang['hi'] = 'evidenziato'; +$lang['lo'] = 'meno importante'; diff --git a/sources/lib/plugins/wrap/lang/it/settings.php b/sources/lib/plugins/wrap/lang/it/settings.php new file mode 100755 index 0000000..84ad4d1 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/it/settings.php @@ -0,0 +1,12 @@ + + */ +$lang['noPrefix'] = 'quali nomi di classi (elenco separato da virgole) non devono avere il prefisso "wrap_"?'; +$lang['restrictedClasses'] = 'restringi l\'uso del plugin a queste classi (elenco separato da virgole)'; +$lang['restrictionType'] = 'tipo di restrizione, specifica se le classi sopra devono essere incluse o escluse'; +$lang['restrictionType_o_0'] = 'permetti tutte le classi tranne quelle sopra'; +$lang['restrictionType_o_1'] = 'restringi solo alle classi sopra e a nessun\'altra'; diff --git a/sources/lib/plugins/wrap/lang/ja/lang.php b/sources/lib/plugins/wrap/lang/ja/lang.php new file mode 100755 index 0000000..598b481 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ja/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap プラグイン'; +$lang['column'] = '多段組み'; +$lang['box'] = '中央配置枠'; +$lang['info'] = '情報枠'; +$lang['tip'] = 'ヒント枠'; +$lang['important'] = '重要枠'; +$lang['alert'] = '警告枠'; +$lang['help'] = 'ヘルプ枠'; +$lang['download'] = 'ダウンロード枠'; +$lang['todo'] = 'TODO枠'; +$lang['clear'] = '回り込み解除'; +$lang['em'] = '特に強調'; +$lang['hi'] = 'ハイライト表示'; +$lang['lo'] = '非強調(薄色表示)'; diff --git a/sources/lib/plugins/wrap/lang/ja/settings.php b/sources/lib/plugins/wrap/lang/ja/settings.php new file mode 100755 index 0000000..ec880ac --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ja/settings.php @@ -0,0 +1,16 @@ + + * @author Hideaki SAWADA + */ +$lang['noPrefix'] = 'プレフィックス"wrap_" なしのCSSセレクタを例外的に適用するクラス名(カンマ区切り)'; +$lang['restrictedClasses'] = '有効性をチェックするクラス名(カンマ区切り)'; +$lang['restrictionType'] = '指定したクラスの扱い方'; +$lang['restrictionType_o_0'] = '指定クラスを無効とし、他は有効とする'; +$lang['restrictionType_o_1'] = '指定クラスのみを有効とする'; +$lang['syntaxDiv'] = 'ツールバー使用時:ブロック型構文に使用するタグ名'; +$lang['syntaxSpan'] = 'ツールバー使用時:インライン型構文に使用するタグ名'; +$lang['darkTpl'] = '色の濃いテンプレート用に最適化しますか?'; diff --git a/sources/lib/plugins/wrap/lang/ko/lang.php b/sources/lib/plugins/wrap/lang/ko/lang.php new file mode 100755 index 0000000..6dce54e --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ko/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap 플러그인'; +$lang['column'] = '단'; +$lang['box'] = '간단한 가운데 상자'; +$lang['info'] = '정보 상자'; +$lang['tip'] = '팁 상자'; +$lang['important'] = '중요 상자'; +$lang['alert'] = '경고 상자'; +$lang['help'] = '도움말 상자'; +$lang['download'] = '다운로드 상자'; +$lang['todo'] = '할 일 상자'; +$lang['clear'] = '플로트 지우기'; +$lang['em'] = '특히 강조'; +$lang['hi'] = '강조'; +$lang['lo'] = '덜 중요함'; diff --git a/sources/lib/plugins/wrap/lang/ko/settings.php b/sources/lib/plugins/wrap/lang/ko/settings.php new file mode 100755 index 0000000..9cba912 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ko/settings.php @@ -0,0 +1,15 @@ + + */ +$lang['noPrefix'] = '어떤 (쉼표로 구분된) 클래스 이름이 "wrap_" 접두어가 필요가 없습니까?'; +$lang['restrictedClasses'] = '다음 (쉼표로 구분된) 클래스에 플러그인의 사용을 제한'; +$lang['restrictionType'] = '제한 유형은 위의 클래스가 포함되거나 제외되어야 하는지 지정'; +$lang['restrictionType_o_0'] = '위의 클래스를 제외하고 모든 클래스를 허용'; +$lang['restrictionType_o_1'] = '위의 클래스만 허용하고 다른 클래스를 제한'; +$lang['syntaxDiv'] = '어떤 문법이 블록 포장을 위해 도구 모음 선택기에서 사용되어야 합니까?'; +$lang['syntaxSpan'] = '어떤 문법이 인라인 포장을 위해 도구 모음 선택기에서 사용되어야 합니까?'; +$lang['darkTpl'] = '어두은 템플릿을 위해 색을 최적화하겠습니까?'; diff --git a/sources/lib/plugins/wrap/lang/nl/lang.php b/sources/lib/plugins/wrap/lang/nl/lang.php new file mode 100755 index 0000000..f771b9d --- /dev/null +++ b/sources/lib/plugins/wrap/lang/nl/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Wrap Plugin'; +$lang['column'] = 'kolommen'; +$lang['box'] = 'simpele gecentreerde blok'; +$lang['info'] = 'informatie blok'; +$lang['tip'] = 'tip blok'; +$lang['important'] = 'belangrijk blok'; +$lang['alert'] = 'waarschuwingsblok'; +$lang['help'] = 'helpblok'; +$lang['download'] = 'downloadblok'; +$lang['todo'] = 'tedoen blok'; +$lang['clear'] = 'reset drijvende blokken (clear floats)'; +$lang['em'] = 'bijzonder benadrukken'; +$lang['hi'] = 'gemarkeerd'; +$lang['lo'] = 'minder belangrijk'; diff --git a/sources/lib/plugins/wrap/lang/nl/settings.php b/sources/lib/plugins/wrap/lang/nl/settings.php new file mode 100755 index 0000000..8fb33ae --- /dev/null +++ b/sources/lib/plugins/wrap/lang/nl/settings.php @@ -0,0 +1,16 @@ + + * @author Johan Wijnker + */ +$lang['noPrefix'] = 'Welke (komma gescheiden) klassennamen moeten niet het voorvoegsel "wrap_" krijgen?'; +$lang['restrictedClasses'] = 'Beperk het gebruik van de plugin tot deze (komma gescheiden) klassen'; +$lang['restrictionType'] = 'beperkingstype, specificeer of de klassen hierboven wel of niet gebruikt mogen worden'; +$lang['restrictionType_o_0'] = 'alle klassen zijn toegestaan, behalve de bovenstaande'; +$lang['restrictionType_o_1'] = 'beperk de toegestane klassen tot de bovenstaande, en geen anderen'; +$lang['syntaxDiv'] = 'Welke syntax moet worden gebruikt in het werkbalk-keuzemenu voor blok-wraps?'; +$lang['syntaxSpan'] = 'Welke syntax moet worden gebruikt in het werkbalk-keuzemenu voor inline-wraps?'; +$lang['darkTpl'] = 'Optimaliseer de kleuren voor donkere templates?'; diff --git a/sources/lib/plugins/wrap/lang/no/lang.php b/sources/lib/plugins/wrap/lang/no/lang.php new file mode 100755 index 0000000..a1734b8 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/no/lang.php @@ -0,0 +1,24 @@ + + */ +$lang['picker'] = 'Omhylningsplugin +Omkransningsplugin'; +$lang['column'] = 'kolonner'; +$lang['box'] = 'enkel sentrert boks'; +$lang['info'] = 'infoboks'; +$lang['tip'] = 'tipsboks'; +$lang['important'] = 'viktig boks'; +$lang['alert'] = 'alarmboks'; +$lang['help'] = 'hjelpeboks'; +$lang['download'] = 'nedlastningsboks'; +$lang['todo'] = 'gjøremålsboks'; +$lang['clear'] = 'tøm floats'; +$lang['em'] = 'spesielt fremhevet (singular) +spesielt fremhevede (plural)'; +$lang['hi'] = 'markert (singular) +markerte (plural)'; +$lang['lo'] = 'mindre viktig'; diff --git a/sources/lib/plugins/wrap/lang/no/settings.php b/sources/lib/plugins/wrap/lang/no/settings.php new file mode 100755 index 0000000..1bdc762 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/no/settings.php @@ -0,0 +1,15 @@ + + */ +$lang['noPrefix'] = 'Hvilke klasser (adskilt med komma) bør eksluderes fra å ha prefiks "wrap_"?'; +$lang['restrictedClasses'] = 'begrens bruk av plugin til klasser adskilt med komma'; +$lang['restrictionType'] = 'restriksjonstype, spesifiserer om de ovenforstående klassene skal inkluderes eller ekskluderes'; +$lang['restrictionType_o_0'] = 'vis alle klasser bortsett fra de ovenforstående'; +$lang['restrictionType_o_1'] = 'begrens til kun ovenforstående klasser og ingen fler'; +$lang['syntaxDiv'] = 'Hvilken syntaks bør brukes i verktøylinjen valg for blokkomkransning?'; +$lang['syntaxSpan'] = 'Hvilken syntaks bør brukes i verktøylinjen valg for omkransning på en linje?'; +$lang['darkTpl'] = 'Optimer farger for mørke maler?'; diff --git a/sources/lib/plugins/wrap/lang/pt-br/lang.php b/sources/lib/plugins/wrap/lang/pt-br/lang.php new file mode 100755 index 0000000..d1d20f5 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/pt-br/lang.php @@ -0,0 +1,21 @@ + + */ +$lang['picker'] = 'Plugin Wrap'; +$lang['column'] = 'coluna'; +$lang['box'] = 'caixa centralizada simples'; +$lang['info'] = 'caixa de informação'; +$lang['tip'] = 'caixa de sugestão'; +$lang['important'] = 'caixa importante'; +$lang['alert'] = 'caixa de alerta'; +$lang['help'] = 'caixa de ajuda'; +$lang['download'] = 'caixa de download'; +$lang['todo'] = 'caixa de tarefas a fazer'; +$lang['clear'] = 'limpar'; +$lang['em'] = 'especialmente enfatizado'; +$lang['hi'] = 'enfatizado'; +$lang['lo'] = 'menos significativo'; diff --git a/sources/lib/plugins/wrap/lang/pt-br/settings.php b/sources/lib/plugins/wrap/lang/pt-br/settings.php new file mode 100755 index 0000000..261029b --- /dev/null +++ b/sources/lib/plugins/wrap/lang/pt-br/settings.php @@ -0,0 +1,13 @@ + + * @author Juliano Marconi Lanigra + */ +$lang['noPrefix'] = 'Quais classes (separadas por vírgula) deverão ser excluídas de receber o prefixo "wrap_"?'; +$lang['restrictedClasses'] = 'uso restrito do plugin para essas classes (separadas por vírgula)'; +$lang['restrictionType'] = 'tipo de restrição, especifica se as classes acima deveriam ser incluídas ou excluídas'; +$lang['restrictionType_o_0'] = 'permite todas as classes exceto as acima'; +$lang['restrictionType_o_1'] = 'restrita somente às classes acima e nenhuma outra'; diff --git a/sources/lib/plugins/wrap/lang/ru/lang.php b/sources/lib/plugins/wrap/lang/ru/lang.php new file mode 100755 index 0000000..c02c886 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ru/lang.php @@ -0,0 +1,23 @@ + + * @author Ilya Rozhkov + * @author Aleksandr Selivanov + */ +$lang['picker'] = 'Wrap'; +$lang['column'] = 'колонки'; +$lang['box'] = 'простой центрированный блок'; +$lang['info'] = 'блок «Информация»'; +$lang['tip'] = 'блок «Подсказка»'; +$lang['important'] = 'блок «Важно»'; +$lang['alert'] = 'блок «Тревога»'; +$lang['help'] = 'блок «Справка»'; +$lang['download'] = 'блок «Скачивание»'; +$lang['todo'] = 'блок «Список задач»'; +$lang['clear'] = 'очистить float\'ы'; +$lang['em'] = 'пометить важным'; +$lang['hi'] = 'маркер'; +$lang['lo'] = 'пометить неважным'; diff --git a/sources/lib/plugins/wrap/lang/ru/settings.php b/sources/lib/plugins/wrap/lang/ru/settings.php new file mode 100755 index 0000000..f53143e --- /dev/null +++ b/sources/lib/plugins/wrap/lang/ru/settings.php @@ -0,0 +1,16 @@ + + * @author Aleksandr Selivanov + * @author Rouslan + */ +$lang['noPrefix'] = 'К каким (разделенным запятыми) именам классов не должен быть приписан префикс "wrap_" ?'; +$lang['restrictedClasses'] = 'Классы плагина, которые нельзя использовать (перечислите через запятую)'; +$lang['restrictionType'] = 'Тип ограничения, указывающий, должны ли быть включены или исключены классы выше'; +$lang['restrictionType_o_0'] = 'разрешить все, за исключением классов, указанных выше'; +$lang['restrictionType_o_1'] = 'ограничить только классами, указанными выше'; +$lang['syntaxDiv'] = 'Какой синтаксис использовать для создания блоков и примечаний?'; +$lang['syntaxSpan'] = 'Какой синтаксис использовать для создания блоков выделения внутри текста?'; diff --git a/sources/lib/plugins/wrap/lang/sk/lang.php b/sources/lib/plugins/wrap/lang/sk/lang.php new file mode 100755 index 0000000..af572f7 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/sk/lang.php @@ -0,0 +1,12 @@ + + */ +$lang['picker'] = 'Wrap Plugin'; +$lang['column'] = 'stĺpec'; +$lang['em'] = 'zvlášť zdôraznený'; +$lang['hi'] = 'zvýraznený'; +$lang['lo'] = 'menej významný'; diff --git a/sources/lib/plugins/wrap/lang/sk/settings.php b/sources/lib/plugins/wrap/lang/sk/settings.php new file mode 100755 index 0000000..4e79e94 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/sk/settings.php @@ -0,0 +1,12 @@ + + */ +$lang['noPrefix'] = 'Ktoré (čiarkou oddelené) mená tried by mali byť vynechané pri použití predpony "wrap_"?'; +$lang['restrictedClasses'] = 'Obmedzenie použitia pluginu na tieto (čiarkou oddelené) triedy'; +$lang['restrictionType'] = 'Typ obmedzenia, špecifikuje, či triedy uvedené vyššie maju byť zahrnuté alebo vynechané'; +$lang['restrictionType_o_0'] = 'povolenie pre všetky triedy okrem uvedených vyššie'; +$lang['restrictionType_o_1'] = 'obmedzenie len na triedy uvedené vyššie a žiadne iné'; diff --git a/sources/lib/plugins/wrap/lang/tr/lang.php b/sources/lib/plugins/wrap/lang/tr/lang.php new file mode 100755 index 0000000..ba55922 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/tr/lang.php @@ -0,0 +1,22 @@ + + * @author İlker R. Kapaç + */ +$lang['picker'] = 'Paket Eklentisi'; +$lang['column'] = 'sütunlar'; +$lang['box'] = 'ortalanmış basit kutu'; +$lang['info'] = 'bilgi kutusu'; +$lang['tip'] = 'ipucu kutusu'; +$lang['important'] = 'önemli kutusu'; +$lang['alert'] = 'ikaz kutusu'; +$lang['help'] = 'yardım kutusu'; +$lang['download'] = 'indirme kutusu'; +$lang['todo'] = 'yapılacaklar kutusu'; +$lang['clear'] = 'boşlukları temizle'; +$lang['em'] = 'özellikle vurgulanmış'; +$lang['hi'] = 'vurgulanmış'; +$lang['lo'] = 'daha az önemli'; diff --git a/sources/lib/plugins/wrap/lang/tr/settings.php b/sources/lib/plugins/wrap/lang/tr/settings.php new file mode 100755 index 0000000..a4f7cd5 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/tr/settings.php @@ -0,0 +1,15 @@ + + */ +$lang['noPrefix'] = 'Hangi sınıf isimleri, (virgülle ayrılmış) önüne "wrap_" öneki almaktan hariç tutulsun?'; +$lang['restrictedClasses'] = 'eklentinin kullanımını bu sınıflarla (virgülle ayrılmış) sınırla'; +$lang['restrictionType'] = 'kısıtlama tipi, üstteki sınıfların dalil mi edileceklerini yoksa hariç mi tutulacaklarını belirler.'; +$lang['restrictionType_o_0'] = 'üsttekiler hariç tüm sınıflara izin ver'; +$lang['restrictionType_o_1'] = 'sadece üstteki sınıflarla sınırla, başkasına izin verme'; +$lang['syntaxDiv'] = 'Blok paketi için araç çubuğunda hangi sözdizimi kullanılsın?'; +$lang['syntaxSpan'] = 'Satır içi paketi için araç çubuğunda hangi sözdizimi kullanılsın?'; +$lang['darkTpl'] = 'Karanlık şablonlar için renkler iyileştirilsin mi?'; diff --git a/sources/lib/plugins/wrap/lang/zh-tw/lang.php b/sources/lib/plugins/wrap/lang/zh-tw/lang.php new file mode 100755 index 0000000..fe60272 --- /dev/null +++ b/sources/lib/plugins/wrap/lang/zh-tw/lang.php @@ -0,0 +1,19 @@ + + * @author maie + */ +$lang['noPrefix'] = '哪些CSS类不需要加上“wrap_"前缀?(逗号分隔)'; +$lang['restrictedClasses'] = '将插件的使用限制应用到这些类(逗号分隔)'; +$lang['restrictionType'] = '限制类型,指定上述类应该被包含或排除'; +$lang['restrictionType_o_0'] = '允许除上述类之外的所有类'; +$lang['restrictionType_o_1'] = '仅允许上述类'; +$lang['syntaxDiv'] = '在编辑工具栏的选择器中应对块级元素使用何种语法?'; +$lang['syntaxSpan'] = '在编辑工具栏的选择器中应对行内元素使用何种语法?'; +$lang['darkTpl'] = '优化黑模板的颜色?'; diff --git a/sources/lib/plugins/wrap/manager.dat b/sources/lib/plugins/wrap/manager.dat new file mode 100644 index 0000000..cae041b --- /dev/null +++ b/sources/lib/plugins/wrap/manager.dat @@ -0,0 +1,2 @@ +downloadurl=https://github.com/selfthinker/dokuwiki_plugin_wrap/archive/stable.zip +installed=Sun, 20 Nov 2016 19:30:00 +0000 diff --git a/sources/lib/plugins/wrap/plugin.info.txt b/sources/lib/plugins/wrap/plugin.info.txt new file mode 100755 index 0000000..a8553eb --- /dev/null +++ b/sources/lib/plugins/wrap/plugin.info.txt @@ -0,0 +1,8 @@ +base wrap +author Anika Henke +email anika@selfthinker.org +date 2015-07-19 +name Wrap Plugin +desc Universal plugin which combines functionalities of many other plugins. Wrap wiki text inside containers (divs or spans) and give them a class (choose from a variety of preset classes), a width and/or a language with its associated text direction. +url https://www.dokuwiki.org/plugin:wrap +#syntax See example.txt diff --git a/sources/lib/plugins/wrap/print.css b/sources/lib/plugins/wrap/print.css new file mode 100755 index 0000000..bae4705 --- /dev/null +++ b/sources/lib/plugins/wrap/print.css @@ -0,0 +1,57 @@ +/******************************************************************** +Print Styles for the Wrap Plugin (additional to all.css) +********************************************************************/ + +/* boxes and notes with icons +********************************************************************/ + +.dokuwiki div.wrap_box, +.dokuwiki div.wrap_danger, .dokuwiki div.wrap_warning, .dokuwiki div.wrap_caution, .dokuwiki div.wrap_notice, .dokuwiki div.wrap_safety, +.dokuwiki div.wrap_info, .dokuwiki div.wrap_important, .dokuwiki div.wrap_alert, .dokuwiki div.wrap_tip, .dokuwiki div.wrap_help, .dokuwiki div.wrap_todo, .dokuwiki div.wrap_download { + border: 2px solid #999; + padding: 1em 1em .5em; + margin-bottom: 1.5em; +} +.dokuwiki span.wrap_box, +.dokuwiki span.wrap_danger, .dokuwiki span.wrap_warning, .dokuwiki span.wrap_caution, .dokuwiki span.wrap_notice, .dokuwiki span.wrap_safety, +.dokuwiki span.wrap_info, .dokuwiki span.wrap_important, .dokuwiki span.wrap_alert, .dokuwiki span.wrap_tip, .dokuwiki span.wrap_help, .dokuwiki span.wrap_todo, .dokuwiki span.wrap_download { + border: 1px solid #999; + padding: 0 .3em; +} + + +/* mark +********************************************************************/ + +.dokuwiki .wrap_hi { + border: 1px solid #999; +} + + +/* miscellaneous +********************************************************************/ + +/*____________ spoiler ____________*/ + +.dokuwiki .wrap_spoiler { + visibility: hidden; +} + +/*____________ pagebreak ____________*/ + +.dokuwiki .wrap_pagebreak { + page-break-after: always; +} + +/*____________ avoid page break ____________*/ +/* not yet supported by most browsers */ + +.dokuwiki .wrap_nopagebreak { + page-break-inside: avoid; +} + +/*____________ no print ____________*/ + +.dokuwiki .wrap_noprint { + display: none; +} diff --git a/sources/lib/plugins/wrap/style.css b/sources/lib/plugins/wrap/style.css new file mode 100755 index 0000000..fa6bc16 --- /dev/null +++ b/sources/lib/plugins/wrap/style.css @@ -0,0 +1,203 @@ +/******************************************************************** +Screen Styles for the Wrap Plugin (additional to all.css) +********************************************************************/ + +/* box +********************************************************************/ + +.dokuwiki .wrap_box { + background: __background_alt__; + color: __text__; +} +.dokuwiki div.wrap_box, +.dokuwiki div.wrap_danger, +.dokuwiki div.wrap_warning, +.dokuwiki div.wrap_caution, +.dokuwiki div.wrap_notice, +.dokuwiki div.wrap_safety { + padding: 1em 1em .5em; + margin-bottom: 1.5em; + overflow: hidden; +} +.dokuwiki span.wrap_box, +.dokuwiki span.wrap_danger, +.dokuwiki span.wrap_warning, +.dokuwiki span.wrap_caution, +.dokuwiki span.wrap_notice, +.dokuwiki span.wrap_safety { + padding: 0 .3em; +} + +/*____________ notes with icons ____________*/ + +/* general styles for all note divs */ +.dokuwiki div.wrap_info, +.dokuwiki div.wrap_important, +.dokuwiki div.wrap_alert, +.dokuwiki div.wrap_tip, +.dokuwiki div.wrap_help, +.dokuwiki div.wrap_todo, +.dokuwiki div.wrap_download { + padding: 1em 1em .5em 70px; + margin-bottom: 1.5em; + min-height: 68px; + background-position: 10px 50%; + background-repeat: no-repeat; + color: inherit; + overflow: hidden; +} +/* general styles for all note spans */ +.dokuwiki span.wrap_info, +.dokuwiki span.wrap_important, +.dokuwiki span.wrap_alert, +.dokuwiki span.wrap_tip, +.dokuwiki span.wrap_help, +.dokuwiki span.wrap_todo, +.dokuwiki span.wrap_download { + padding: 0 2px 0 20px; + min-height: 20px; + background-position: 2px 50%; + background-repeat: no-repeat; + color: inherit; +} + +/* sorry for icons glued to the right side, but there is currently no way + to make this look good without adjusting the images themselves */ +[dir=rtl] .dokuwiki div.wrap_info, +[dir=rtl] .dokuwiki div.wrap_important, +[dir=rtl] .dokuwiki div.wrap_alert, +[dir=rtl] .dokuwiki div.wrap_tip, +[dir=rtl] .dokuwiki div.wrap_help, +[dir=rtl] .dokuwiki div.wrap_todo, +[dir=rtl] .dokuwiki div.wrap_download { + padding: 1em 60px .5em 1em; + background-position: right 50%; +} +[dir=rtl] .dokuwiki span.wrap_info, +[dir=rtl] .dokuwiki span.wrap_important, +[dir=rtl] .dokuwiki span.wrap_alert, +[dir=rtl] .dokuwiki span.wrap_tip, +[dir=rtl] .dokuwiki span.wrap_help, +[dir=rtl] .dokuwiki span.wrap_todo, +[dir=rtl] .dokuwiki span.wrap_download { + padding: 0 18px 0 2px; + background-position: right 50%; +} + +/*____________ info ____________*/ +.dokuwiki .wrap_info { background-color: #d1d7df; } +.dokuwiki .wrap__dark.wrap_info { background-color: #343e4a; } +.dokuwiki div.wrap_info { background-image: url(images/note/48/info.png); } +.dokuwiki span.wrap_info { background-image: url(images/note/16/info.png); } + +/*____________ important ____________*/ +.dokuwiki .wrap_important { background-color: #ffd39f; } +.dokuwiki .wrap__dark.wrap_important { background-color: #6c3b00; } +.dokuwiki div.wrap_important { background-image: url(images/note/48/important.png); } +.dokuwiki span.wrap_important { background-image: url(images/note/16/important.png); } + +/*____________ alert ____________*/ +.dokuwiki .wrap_alert { background-color: #ffbcaf; } +.dokuwiki .wrap__dark.wrap_alert { background-color: #6b1100; } +.dokuwiki div.wrap_alert { background-image: url(images/note/48/alert.png); } +.dokuwiki span.wrap_alert { background-image: url(images/note/16/alert.png); } + +/*____________ tip ____________*/ +.dokuwiki .wrap_tip { background-color: #fff79f; } +.dokuwiki .wrap__dark.wrap_tip { background-color: #4a4400; } +.dokuwiki div.wrap_tip { background-image: url(images/note/48/tip.png); } +.dokuwiki span.wrap_tip { background-image: url(images/note/16/tip.png); } + +/*____________ help ____________*/ +.dokuwiki .wrap_help { background-color: #dcc2ef; } +.dokuwiki .wrap__dark.wrap_help { background-color: #3c1757; } +.dokuwiki div.wrap_help { background-image: url(images/note/48/help.png); } +.dokuwiki span.wrap_help { background-image: url(images/note/16/help.png); } + +/*____________ todo ____________*/ +.dokuwiki .wrap_todo { background-color: #c2efdd; } +.dokuwiki .wrap__dark.wrap_todo { background-color: #17573e; } +.dokuwiki div.wrap_todo { background-image: url(images/note/48/todo.png); } +.dokuwiki span.wrap_todo { background-image: url(images/note/16/todo.png); } + +/*____________ download ____________*/ +.dokuwiki .wrap_download { background-color: #d6efc2; } +.dokuwiki .wrap__dark.wrap_download { background-color: #345717; } +.dokuwiki div.wrap_download { background-image: url(images/note/48/download.png); } +.dokuwiki span.wrap_download { background-image: url(images/note/16/download.png); } + + +/*____________ safety notes ____________*/ + +.dokuwiki .wrap_danger { + background-color: #c00; + color: #fff; +} +.dokuwiki .wrap_warning { + background-color: #f60; + color: #000; +} +.dokuwiki .wrap_caution { + background-color: #ff0; + color: #000; +} +.dokuwiki .wrap_notice { + background-color: #06f; + color: #fff; +} +.dokuwiki .wrap_safety { + background-color: #090; + color: #fff; +} + + +/* mark +********************************************************************/ + +.dokuwiki .wrap_hi { + background-color: #ff9; + overflow: hidden; +} +.dokuwiki .wrap__dark.wrap_hi { + background-color: #4e4e0d; +} + + +/* miscellaneous +********************************************************************/ + +/*____________ spoiler ____________*/ + +.dokuwiki .wrap_spoiler { + background-color: __background__ !important; + color: __background__ !important; + border: 1px dotted red; +} + +/*____________ only print ____________*/ + +.dokuwiki .wrap_onlyprint { + display: none; +} + +/*____________ tabs ____________*/ +/* in addition to template styles */ + +.dokuwiki .plugin_wrap.tabs { + margin-bottom: 1.4em; +} + +/*____________ button-style link ____________*/ + +.dokuwiki .wrap_button a:link, +.dokuwiki .wrap_button a:visited { + background-color: __background_alt__; +} +.dokuwiki .wrap_button a:link:hover, +.dokuwiki .wrap_button a:visited:hover, +.dokuwiki .wrap_button a:link:focus, +.dokuwiki .wrap_button a:visited:focus, +.dokuwiki .wrap_button a:link:active, +.dokuwiki .wrap_button a:visited:active { + background-color: __background_neu__; +} diff --git a/sources/lib/plugins/wrap/syntax/closesection.php b/sources/lib/plugins/wrap/syntax/closesection.php new file mode 100755 index 0000000..4bb4837 --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/closesection.php @@ -0,0 +1,40 @@ + + */ + +if(!defined('DOKU_INC')) die(); + +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +class syntax_plugin_wrap_closesection extends DokuWiki_Syntax_Plugin { + + function getType(){ return 'substition';} + function getPType(){ return 'block';} + function getSort(){ return 195; } + + /** + * Dummy handler, this syntax part has no syntax but is directly added to the instructions by the div syntax + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + } + + /** + * Create output + */ + function render($mode, Doku_Renderer $renderer, $indata) { + if($mode == 'xhtml'){ + /** @var Doku_Renderer_xhtml $renderer */ + $renderer->finishSectionEdit(); + return true; + } + return false; + } + + +} + diff --git a/sources/lib/plugins/wrap/syntax/div.php b/sources/lib/plugins/wrap/syntax/div.php new file mode 100755 index 0000000..2e84c2b --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/div.php @@ -0,0 +1,132 @@ + + */ + +if(!defined('DOKU_INC')) die(); + +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +class syntax_plugin_wrap_div extends DokuWiki_Syntax_Plugin { + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?
    )'; + protected $exit_pattern = '
    '; + + function getType(){ return 'formatting';} + function getAllowedTypes() { return array('container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs'); } + function getPType(){ return 'stack';} + function getSort(){ return 195; } + // override default accepts() method to allow nesting - ie, to get the plugin accepts its own entry syntax + function accepts($mode) { + if ($mode == substr(get_class($this), 7)) return true; + return parent::accepts($mode); + } + + /** + * Connect pattern to lexer + */ + function connectTo($mode) { + $this->Lexer->addSpecialPattern($this->special_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); + $this->Lexer->addEntryPattern($this->entry_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); + } + + function postConnect() { + $this->Lexer->addExitPattern($this->exit_pattern, 'plugin_wrap_'.$this->getPluginComponent()); + $this->Lexer->addPattern('[ \t]*={2,}[^\n]+={2,}[ \t]*(?=\n)', 'plugin_wrap_'.$this->getPluginComponent()); + } + + /** + * Handle the match + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + global $conf; + switch ($state) { + case DOKU_LEXER_ENTER: + case DOKU_LEXER_SPECIAL: + $data = strtolower(trim(substr($match,strpos($match,' '),-1)," \t\n/")); + return array($state, $data); + + case DOKU_LEXER_UNMATCHED: + $handler->_addCall('cdata', array($match), $pos); + break; + + case DOKU_LEXER_MATCHED: + // we have a == header ==, use the core header() renderer + // (copied from core header() in inc/parser/handler.php) + $title = trim($match); + $level = 7 - strspn($title,'='); + if($level < 1) $level = 1; + $title = trim($title,'='); + $title = trim($title); + + $handler->_addCall('header',array($title,$level,$pos), $pos); + // close the section edit the header could open + if ($title && $level <= $conf['maxseclevel']) { + $handler->addPluginCall('wrap_closesection', array(), DOKU_LEXER_SPECIAL, $pos, ''); + } + break; + + case DOKU_LEXER_EXIT: + return array($state, ''); + } + return false; + } + + /** + * Create output + */ + function render($mode, Doku_Renderer $renderer, $indata) { + static $type_stack = array (); + + if (empty($indata)) return false; + list($state, $data) = $indata; + + if($mode == 'xhtml'){ + /** @var Doku_Renderer_xhtml $renderer */ + switch ($state) { + case DOKU_LEXER_ENTER: + // add a section edit right at the beginning of the wrap output + $renderer->startSectionEdit(0, 'plugin_wrap_start'); + $renderer->finishSectionEdit(); + // add a section edit for the end of the wrap output. This prevents the renderer + // from closing the last section edit so the next section button after the wrap syntax will + // include the whole wrap syntax + $renderer->startSectionEdit(0, 'plugin_wrap_end'); + + case DOKU_LEXER_SPECIAL: + $wrap = $this->loadHelper('wrap'); + $attr = $wrap->buildAttributes($data, 'plugin_wrap'); + + $renderer->doc .= ''; + if ($state == DOKU_LEXER_SPECIAL) $renderer->doc .= ''; + break; + + case DOKU_LEXER_EXIT: + $renderer->doc .= ''; + $renderer->finishSectionEdit(); + break; + } + return true; + } + if($mode == 'odt'){ + switch ($state) { + case DOKU_LEXER_ENTER: + $wrap = plugin_load('helper', 'wrap'); + array_push ($type_stack, $wrap->renderODTElementOpen($renderer, 'div', $data)); + break; + + case DOKU_LEXER_EXIT: + $element = array_pop ($type_stack); + $wrap = plugin_load('helper', 'wrap'); + $wrap->renderODTElementClose ($renderer, $element); + break; + } + return true; + } + return false; + } +} diff --git a/sources/lib/plugins/wrap/syntax/divblock.php b/sources/lib/plugins/wrap/syntax/divblock.php new file mode 100755 index 0000000..9bac053 --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/divblock.php @@ -0,0 +1,21 @@ + ...
    syntax + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Anika Henke + */ + +require_once(dirname(__FILE__).'/div.php'); + +class syntax_plugin_wrap_divblock extends syntax_plugin_wrap_div { + + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?)'; + protected $exit_pattern = ''; + + +} + diff --git a/sources/lib/plugins/wrap/syntax/divwrap.php b/sources/lib/plugins/wrap/syntax/divwrap.php new file mode 100755 index 0000000..386c5ff --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/divwrap.php @@ -0,0 +1,20 @@ + ...
    syntax + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Anika Henke + */ + +require_once(dirname(__FILE__).'/div.php'); + +class syntax_plugin_wrap_divwrap extends syntax_plugin_wrap_div { + + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?)'; + protected $exit_pattern = ''; + +} + diff --git a/sources/lib/plugins/wrap/syntax/span.php b/sources/lib/plugins/wrap/syntax/span.php new file mode 100755 index 0000000..2611c5a --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/span.php @@ -0,0 +1,105 @@ + + */ + +if(!defined('DOKU_INC')) die(); + +if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +require_once(DOKU_PLUGIN.'syntax.php'); + +class syntax_plugin_wrap_span extends DokuWiki_Syntax_Plugin { + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?)'; + protected $exit_pattern = ''; + + function getType(){ return 'formatting';} + function getAllowedTypes() { return array('formatting', 'substition', 'disabled'); } + function getPType(){ return 'normal';} + function getSort(){ return 195; } + // override default accepts() method to allow nesting - ie, to get the plugin accepts its own entry syntax + function accepts($mode) { + if ($mode == substr(get_class($this), 7)) return true; + return parent::accepts($mode); + } + + /** + * Connect pattern to lexer + */ + function connectTo($mode) { + $this->Lexer->addSpecialPattern($this->special_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); + $this->Lexer->addEntryPattern($this->entry_pattern,$mode,'plugin_wrap_'.$this->getPluginComponent()); + } + + function postConnect() { + $this->Lexer->addExitPattern($this->exit_pattern, 'plugin_wrap_'.$this->getPluginComponent()); + } + + /** + * Handle the match + */ + function handle($match, $state, $pos, Doku_Handler $handler){ + switch ($state) { + case DOKU_LEXER_ENTER: + case DOKU_LEXER_SPECIAL: + $data = strtolower(trim(substr($match,strpos($match,' '),-1)," \t\n/")); + return array($state, $data); + + case DOKU_LEXER_UNMATCHED : + $handler->_addCall('cdata', array($match), $pos); + return false; + + case DOKU_LEXER_EXIT : + return array($state, ''); + + } + return false; + } + + /** + * Create output + */ + function render($mode, Doku_Renderer $renderer, $indata) { + static $type_stack = array (); + + if (empty($indata)) return false; + list($state, $data) = $indata; + + if($mode == 'xhtml'){ + switch ($state) { + case DOKU_LEXER_ENTER: + case DOKU_LEXER_SPECIAL: + $wrap = $this->loadHelper('wrap'); + $attr = $wrap->buildAttributes($data); + + $renderer->doc .= ''; + if ($state == DOKU_LEXER_SPECIAL) $renderer->doc .= ''; + break; + + case DOKU_LEXER_EXIT: + $renderer->doc .= ''; + break; + } + return true; + } + if($mode == 'odt'){ + switch ($state) { + case DOKU_LEXER_ENTER: + $wrap = plugin_load('helper', 'wrap'); + array_push ($type_stack, $wrap->renderODTElementOpen($renderer, 'span', $data)); + break; + + case DOKU_LEXER_EXIT: + $element = array_pop ($type_stack); + $wrap = plugin_load('helper', 'wrap'); + $wrap->renderODTElementClose ($renderer, $element); + break; + } + return true; + } + return false; + } +} diff --git a/sources/lib/plugins/wrap/syntax/spaninline.php b/sources/lib/plugins/wrap/syntax/spaninline.php new file mode 100755 index 0000000..cc7a669 --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/spaninline.php @@ -0,0 +1,20 @@ + ... syntax + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Anika Henke + */ + +require_once(dirname(__FILE__).'/span.php'); + +class syntax_plugin_wrap_spaninline extends syntax_plugin_wrap_span { + + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?)'; + protected $exit_pattern = ''; + +} + diff --git a/sources/lib/plugins/wrap/syntax/spanwrap.php b/sources/lib/plugins/wrap/syntax/spanwrap.php new file mode 100755 index 0000000..9c3d921 --- /dev/null +++ b/sources/lib/plugins/wrap/syntax/spanwrap.php @@ -0,0 +1,21 @@ + ... syntax + * + * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) + * @author Anika Henke + */ + +require_once(dirname(__FILE__).'/span.php'); + +class syntax_plugin_wrap_spanwrap extends syntax_plugin_wrap_span { + + protected $special_pattern = '\r\n]*?/>'; + protected $entry_pattern = '(?=.*?)'; + protected $exit_pattern = ''; + + +} +