6caa6ab7ba
LibreOffice Online/loleaflet-ui (Finnish) Currently translated at 100.0% (288 of 288 strings) Change-Id: If57a91eb54a078857ffd3418adb28db81c5cd6e8 update translations LibreOffice Online/loleaflet-ui (Finnish) Currently translated at 100.0% (288 of 288 strings) Change-Id: I8577890c535e49f6b07d58c9d01cff02fd3d739c update translations LibreOffice Online/android-app (Ukrainian) Currently translated at 100.0% (99 of 99 strings) Change-Id: I8b98f6a52d2d456ad69b0ce5ad8487b01fa9878b update translations LibreOffice Online/android-app (Ukrainian) Currently translated at 71.7% (71 of 99 strings) Change-Id: Ieca33d499f44bf777d17aebcfe4c53935d707f57 update translations LibreOffice Online/android-app (Ukrainian) Currently translated at 68.7% (68 of 99 strings) Change-Id: Ia8f3de3a2bb2f2fa7fef270bd953ba83e79778b3 update translations LibreOffice Online/android-app (Ukrainian) Currently translated at 66.7% (66 of 99 strings) Change-Id: If6ace740b28b4684eb1608c3a6af05f3b2fc3008 update translations LibreOffice Online/loleaflet-help (Croatian) Currently translated at 63.7% (265 of 416 strings) Change-Id: I560d03be7e77ad5c31b91cfe30262980e53506f5 update translations LibreOffice Online/loleaflet-ui (Lao) Currently translated at 67.7% (195 of 288 strings) Change-Id: Ic2b68543e67a7ef65880f6963b52bf12121a9d8b update translations LibreOffice Online/loleaflet-ui (Lao) Currently translated at 63.9% (184 of 288 strings) Change-Id: I3198618a09b5dc6f2596fedf9516c19e6860d0ac update translations LibreOffice Online/android-app (Croatian) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ia3a730199bb988896670daff6df30fc39dc99674 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 100.0% (416 of 416 strings) Change-Id: Ie6535eff3b2e80e429863838aea0d98c4fdecfb8 update translations LibreOffice Online/loleaflet-ui (Lao) Currently translated at 41.3% (119 of 288 strings) Change-Id: Iabaa7b0fd5845cf2f287c02643ce9d740b241cfb update translations LibreOffice Online/loleaflet-ui (Croatian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I93921c47c99de2846318b68625c6469995bf66af update translations LibreOffice Online/loleaflet-help (Croatian) Currently translated at 62.3% (259 of 416 strings) Change-Id: I08c9843389a8f53ca6e520efad5964b66bbd3c64 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 91.1% (379 of 416 strings) Change-Id: Ie14fc630867acb34aff0bed2c0d4d6a9ad00d963 update translations LibreOffice Online/android-lib (Croatian) Currently translated at 100.0% (8 of 8 strings) Change-Id: I585a82d4db0294f97dc901015a2867684524613c update translations LibreOffice Online/loleaflet-help (Catalan) Currently translated at 71.9% (299 of 416 strings) Change-Id: Ie086e28a50e544d5db53a85977e7afb61820c3e3 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 90.9% (378 of 416 strings) Change-Id: Ia31337605c40b10086c987ec9139dc526eca0bc1 update translations LibreOffice Online/loleaflet-ui (Croatian) Currently translated at 79.5% (229 of 288 strings) Change-Id: I31c01812311c7ae26f181e6a38aa6b88b9ceecee update translations LibreOffice Online/android-app (Aragonese) Currently translated at 9.1% (9 of 99 strings) Change-Id: Ib22a413b55e0c4a109cb208b652eefd1963c6394 update translations LibreOffice Online/loleaflet-ui (Aragonese) Currently translated at 1.4% (4 of 288 strings) Change-Id: I5bc681a8028d166d71236fa5893962c4c94658af update translations LibreOffice Online/android-app (Aragonese) Currently translated at 8.1% (8 of 99 strings) Change-Id: Ieb5720fda9d01c59c1bce7f4a5fb0761d4e71b4e update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 78.4% (326 of 416 strings) Change-Id: If34333b865321a6f5eaa98006977bb2f5ce0d70c update translations LibreOffice Online/loleaflet-ui (Aragonese) Currently translated at 1.0% (3 of 288 strings) Change-Id: I012650c8b702c1fca7c082bbd0cbcd8661feeb61 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 72.6% (302 of 416 strings) Change-Id: I4e18dccf7ddd558dd85a604fd53e6552728ef12f update translations LibreOffice Online/loleaflet-help (Czech) Currently translated at 100.0% (416 of 416 strings) Change-Id: I68b3470c0697558c9c878bc4159a33c1fa7e546e update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 72.4% (301 of 416 strings) Change-Id: I074b9176f774aecf103132de2f92ee6d7bf93edb update translations LibreOffice Online/android-app (English (United Kingdom)) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ia6ecca86c204206e412c0b6358f633f07153efef update translations LibreOffice Online/android-app (Korean) Currently translated at 4.0% (4 of 99 strings) Change-Id: I22ada69379bdb5a4dbe88d7696ccf15fd097b284 update translations LibreOffice Online/android-app (Spanish) Currently translated at 100.0% (99 of 99 strings) Change-Id: Id984d24b42d11775bdb80e35ca20e19426856b4f update translations LibreOffice Online/loleaflet-help (Portuguese) Currently translated at 55.0% (229 of 416 strings) Change-Id: Iccd408f6bcd91c81bb49c7cb2538b63549572095 update translations LibreOffice Online/loleaflet-help (Catalan) Currently translated at 71.4% (297 of 416 strings) Change-Id: I2a98f223b66b3013fd1ac7c400db4802f0504d2a update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 70.4% (293 of 416 strings) Change-Id: I341b40437b05101f0d8f8d440827ce7c8412c6ae update translations LibreOffice Online/loleaflet-ui (Korean) Currently translated at 98.3% (283 of 288 strings) Change-Id: I3976f40c8b7464b9d4fe2257c05e77c78b92af44 update translations LibreOffice Online/android-app (Asturian) Currently translated at 72.7% (72 of 99 strings) Change-Id: I3c3cac6e7086e48ae5b1019efec86b69695f1d01 update translations LibreOffice Online/android-app (Asturian) Currently translated at 72.7% (72 of 99 strings) Change-Id: I20bfcc659448b7b11dfc8c0690563ef6e705c5b7 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 69.7% (290 of 416 strings) Change-Id: I5ba5ea15587eff03c874f9ea9ea47777dfba9a6a update translations LibreOffice Online/loleaflet-ui (Lao) Currently translated at 12.2% (35 of 288 strings) Change-Id: Ia42ac2ebc9eea728de5a709997748d7ccac0c693 update translations LibreOffice Online/loleaflet-help (Ukrainian) Currently translated at 55.5% (231 of 416 strings) Change-Id: I8b0d65823f5f9e1a1cda2f7357bc279098679d3b update translations LibreOffice Online/android-app (Italian) Currently translated at 100.0% (99 of 99 strings) Change-Id: I3c3b0e69e3fe560197f7e39cf57dd9ce2e7eaf52 update translations LibreOffice Online/loleaflet-ui (Finnish) Currently translated at 56.9% (164 of 288 strings) Change-Id: I1a90c92be5bbbbe727830ab5abd11299d4b3afd9 update translations LibreOffice Online/android-app (Russian) Currently translated at 99.0% (98 of 99 strings) Change-Id: Ie31f47f408a92817b1ff2e1a0ec7ec5d18b2df82 update translations LibreOffice Online/android-lib (Russian) Currently translated at 100.0% (8 of 8 strings) Change-Id: I5a0ae198d7a5c321234538212ea372eb84e9ab6e update translations LibreOffice Online/loleaflet-help (Polish) Currently translated at 55.0% (229 of 416 strings) Change-Id: I2a08052da49d3e9fd266b399933278015c5d27e5 update translations LibreOffice Online/loleaflet-help (Catalan) Currently translated at 71.2% (296 of 416 strings) Change-Id: I141b8b37eaa825eecb786e09967cc2cfa0b46fa5 update translations LibreOffice Online/android-lib (Russian) Currently translated at 12.5% (1 of 8 strings) Change-Id: I0d464192cd9afcfa10b38677fea1b485a8c71c27 update translations LibreOffice Online/loleaflet-help (Spanish) Currently translated at 100.0% (416 of 416 strings) Change-Id: I0bd4d354504da69adcc6e91be5cc184c48aab179 update translations LibreOffice Online/loleaflet-help (Catalan) Currently translated at 70.9% (295 of 416 strings) Change-Id: Icae3026226844b22a9900ce3c74f0f4965302e77 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 68.8% (286 of 416 strings) Change-Id: Ib8508e0a95eda3efabf75c6f33a9535771341424 update translations LibreOffice Online/loleaflet-help (Polish) Currently translated at 54.8% (228 of 416 strings) Change-Id: I7112e8eeded67a73d9d1ad4355bab9cbd3361e93 update translations LibreOffice Online/android-app (Aragonese) Currently translated at 8.1% (8 of 99 strings) Change-Id: Ief3f2f48a9d58fd20c1a7ab6d0d8f06fdff25790 update translations LibreOffice Online/ios (Aragonese) Currently translated at 25.0% (1 of 4 strings) Change-Id: I829ca36163822dadaec01a84fc99eeb09b349ac3 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 68.3% (284 of 416 strings) Change-Id: Icc5ce574fc815e1c509bb3c4e08f39b711a50d8d update translations LibreOffice Online/loleaflet-ui (Aragonese) Currently translated at 0.7% (2 of 288 strings) Change-Id: Ide79b915dd6ededa32f01aa044f601287118458f update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 68.0% (283 of 416 strings) Change-Id: Idf82dfe6bc259e3ef2180b4cd914e74ecd979fc6 update translations LibreOffice Online/android-app (Galician) Currently translated at 100.0% (99 of 99 strings) Change-Id: I4ff52dfea1d7c57ac087f2e4a0b711e5633fbc96 update translations LibreOffice Online/android-app (Polish) Currently translated at 100.0% (99 of 99 strings) Change-Id: I292a35c8fb565a009f60db0d9576cd3228706622 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 67.1% (279 of 416 strings) Change-Id: Iac125c722d46d681c1603ce3504c32cfcec627d8 update translations LibreOffice Online/loleaflet-ui (Swedish) Currently translated at 99.0% (285 of 288 strings) Change-Id: Ifc5b1db75e7f2563082103a793f33f448a5d2963 update translations LibreOffice Online/android-lib (Slovenian) Currently translated at 100.0% (8 of 8 strings) Change-Id: Icdee8e8fa2b8cb02220a13e8b62895cd488de7db update translations LibreOffice Online/android-app (Slovenian) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ief08e971dfd8564753060208a0c02139854394fa update translations LibreOffice Online/android-app (Amharic) Currently translated at 6.1% (6 of 99 strings) Change-Id: Iaa5e2f55697ffb20e228e5c788d00960c2b5f03e update translations LibreOffice Online/android-app (Welsh) Currently translated at 100.0% (99 of 99 strings) Change-Id: I5c786f7aa619dd14a5c2eae9c857b911268b6a60 update translations LibreOffice Online/android-app (Japanese) Currently translated at 20.2% (20 of 99 strings) Change-Id: I9a533490bfd5073f80f6fe31127c7bf7ac2c249d update translations LibreOffice Online/android-app (Japanese) Currently translated at 20.2% (20 of 99 strings) Change-Id: Id1a965a231c629af306b5b28c1363bfcb0bbf2ae update translations LibreOffice Online/android-app (Ukrainian) Currently translated at 26.3% (26 of 99 strings) Change-Id: I7e22e6742888871b6e808fb777bfabaa20392d65 update translations LibreOffice Online/android-app (Portuguese (Brazil)) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ie7db566edfaac394573952ca5ae55b5589b42ebe update translations LibreOffice Online/loleaflet-help (Ukrainian) Currently translated at 54.3% (226 of 416 strings) Change-Id: I5c8d8a66f89949c1f504788163dfefe4a1dc87f4 update translations LibreOffice Online/loleaflet-help (Slovak) Currently translated at 100.0% (416 of 416 strings) Change-Id: I092635ddcb05a409a5c16a4da76f2de3d1ba5048 update translations LibreOffice Online/loleaflet-help (Bulgarian) Currently translated at 66.8% (278 of 416 strings) Change-Id: I424ed0d83cf03fc91c882b83cdb3455a96c8a16f update translations LibreOffice Online/android-app (Japanese) Currently translated at 19.2% (19 of 99 strings) Change-Id: Ia75b4ad08bf72271929b1029a48fab5a045943f1 update translations LibreOffice Online/android-app (Japanese) Currently translated at 18.2% (18 of 99 strings) Change-Id: I0bf74a662e942b12d7ae890222b390757171a227 update translations LibreOffice Online/android-app (Japanese) Currently translated at 17.2% (17 of 99 strings) Change-Id: I108ce92dc95e556af286fb57b95fbf8cae607e00 update translations LibreOffice Online/android-lib (Japanese) Currently translated at 37.5% (3 of 8 strings) Change-Id: I8b947a5531801573aba1fcd50885807ffdca3d64 update translations LibreOffice Online/android-app (Bulgarian) Currently translated at 100.0% (99 of 99 strings) Change-Id: I9b7a43cdc3f302292dff9c041b0e7c7993e356f0 update translations LibreOffice Online/android-app (Esperanto) Currently translated at 20.2% (20 of 99 strings) Change-Id: If9ecb38ecc38a437047451aa27b63b4efeb893b5 update translations LibreOffice Online/android-app (French) Currently translated at 100.0% (99 of 99 strings) Change-Id: I94fb65418a8d81ee109c1fae89ecc94e0bb0b84f update translations LibreOffice Online/android-app (Japanese) Currently translated at 16.2% (16 of 99 strings) Change-Id: I64df73011909f30e73cc7ea0d91c437b9e3a2bbe update translations LibreOffice Online/android-app (Dutch) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ib4c0a6182643f17a789a150fa7b79b75a4323694 update translations LibreOffice Online/android-app (Slovak) Currently translated at 100.0% (99 of 99 strings) Change-Id: I669caf15b540a5b067eaf48b52e1ed510afcee4a update translations LibreOffice Online/android-app (Asturian) Currently translated at 39.4% (39 of 99 strings) Change-Id: I2a75b75144dab589a5770db216900e54dbf089c2 update translations LibreOffice Online/android-lib (Asturian) Currently translated at 50.0% (4 of 8 strings) Change-Id: I9da690cc6079638fc64566e1619e48d9ab0c1529 update translations LibreOffice Online/android-app (Catalan) Currently translated at 100.0% (99 of 99 strings) Change-Id: If5066e2fca8dad666b4a5188e7b153ed821d7542 update translations LibreOffice Online/android-app (Spanish) Currently translated at 100.0% (99 of 99 strings) Change-Id: I74dfd27a7a9bf4335c2660f34beb95e9facff15d update translations LibreOffice Online/ios (Slovak) Currently translated at 100.0% (4 of 4 strings) Change-Id: Ieac45245547bea0d56756a839d0b8e5b1481cab7 update translations LibreOffice Online/loleaflet-help (Ukrainian) Currently translated at 52.9% (220 of 416 strings) Change-Id: I1709fa29cd80c5e5489569ea7c25571857c3c49b update translations LibreOffice Online/loleaflet-help (Slovak) Currently translated at 53.8% (224 of 416 strings) Change-Id: Ibafac511cb75185f5e05b82aa49fb5b2aa55423b update translations LibreOffice Online/loleaflet-help (Upper Sorbian) Currently translated at 64.2% (267 of 416 strings) Change-Id: Ifd6870972c0e03a5dd07b03ba089f222b7d164af update translations LibreOffice Online/loleaflet-ui (Slovak) Currently translated at 100.0% (288 of 288 strings) Change-Id: I6870f9d7d6252ce69c3892aef98f0c8a16235c6a update translations LibreOffice Online/loleaflet-ui (Japanese) Currently translated at 58.0% (167 of 288 strings) Change-Id: I69316da9ade40c3695cc3456e61b954d09d7c582 update translations LibreOffice Online/loleaflet-ui (Japanese) Currently translated at 58.0% (167 of 288 strings) Change-Id: I16c3cbd8dd2da38905e5637819f9d5aa9c3ada63 update translations LibreOffice Online/loleaflet-ui (Esperanto) Currently translated at 65.3% (188 of 288 strings) Change-Id: Idb2f1343557860571406b7839136c323ddc7e256 update translations LibreOffice Online/loleaflet-ui (Asturian) Currently translated at 36.5% (105 of 288 strings) Change-Id: I2994e5e1c599cc66b419a11a023f3b208b2db914 update translations LibreOffice Online/android-lib (Japanese) Currently translated at 37.5% (3 of 8 strings) Change-Id: I0397abd7a3503cd1bae805e5c87bb5f75c57e4ff update translations LibreOffice Online/android-app (Czech) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ic104628d67d59f73041eb106ac50d50848cbde6e update translations LibreOffice Online/android-app (Lower Sorbian) Currently translated at 100.0% (99 of 99 strings) Change-Id: I143fa07f1cbfeb73d3b1833f16dc26550db7e43e update translations LibreOffice Online/android-app (Basque) Currently translated at 100.0% (99 of 99 strings) Change-Id: I1887ef80e1f1cd243ab870e44adb174b15a88368 update translations LibreOffice Online/android-app (Upper Sorbian) Currently translated at 100.0% (99 of 99 strings) Change-Id: Idaeda0a44b3143cf10459b80225bd2d49b888f40 update translations LibreOffice Online/android-app (Portuguese) Currently translated at 100.0% (99 of 99 strings) Change-Id: I1468acbb78f393081eba42fc385732f4c31712f6 update translations LibreOffice Online/android-app (Hungarian) Currently translated at 100.0% (99 of 99 strings) Change-Id: Ida536ad1b0a194eb37bddaae056f335f3d7e8a65 update translations LibreOffice Online/android-lib (Hungarian) Currently translated at 100.0% (8 of 8 strings) Change-Id: I2bc806914e12e3fce7cfb5840448b544bc70c315 update translations LibreOffice Online/loleaflet-ui (Chinese (Traditional)) Currently translated at 100.0% (288 of 288 strings) Change-Id: I2c396e85bfbac4ebc48d75738082f9522a40b487 update translations LibreOffice Online/loleaflet-ui (Ukrainian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I705356ab54afae9aaee238e078ea432c3410bbcd update translations LibreOffice Online/loleaflet-ui (Turkish) Currently translated at 97.2% (280 of 288 strings) Change-Id: Ida18a8145a8e2bb718f7ca87e35427b21a74f11c update translations LibreOffice Online/loleaflet-ui (Slovenian) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ib583b1efe8aefe154eb286e5cfda350c0438654e update translations LibreOffice Online/loleaflet-ui (Russian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I9f1b78c644f3f15a25e218b84eefb0f0e3ce4548 update translations LibreOffice Online/loleaflet-ui (Portuguese (Brazil)) Currently translated at 100.0% (288 of 288 strings) Change-Id: I7e8026c4fb0c0a24186681f5ea3ebf19a7edcebe update translations LibreOffice Online/loleaflet-ui (Portuguese) Currently translated at 100.0% (288 of 288 strings) Change-Id: I7034f98bddbd0d6839907d68d2852feb7cd6852f update translations LibreOffice Online/loleaflet-ui (Polish) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ic6b8e91bc6857b2135fa8fee7e6b5a576f39a5f9 update translations LibreOffice Online/loleaflet-ui (Dutch) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ie74c18a72f44c778be4e02ca4b9a42f76efc7e38 update translations LibreOffice Online/loleaflet-ui (Italian) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ibc5496109cccb4c004de4f2590edb85faeef2318 update translations LibreOffice Online/loleaflet-ui (Icelandic) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ieb4fe8939e8289540d085c6e2ebabde79ca20b04 update translations LibreOffice Online/loleaflet-ui (Hungarian) Currently translated at 100.0% (288 of 288 strings) Change-Id: If0bdc8119f683ea4141048dc51c33cdf314a8cb7 update translations LibreOffice Online/loleaflet-ui (Upper Sorbian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I48723bfd30552592327a352c1f3e8ceb12a9d54f update translations LibreOffice Online/loleaflet-ui (Galician) Currently translated at 100.0% (288 of 288 strings) Change-Id: I613b95666c292573016ad03b0d1c83681cb2fa63 update translations LibreOffice Online/loleaflet-ui (French) Currently translated at 100.0% (288 of 288 strings) Change-Id: I6cff25e2bc5518ad1f0db7443a3d8b7a55658947 update translations LibreOffice Online/loleaflet-ui (Basque) Currently translated at 100.0% (288 of 288 strings) Change-Id: I797ed20d4bf8c8171db1c513a3b89614248eb26a update translations LibreOffice Online/loleaflet-ui (Spanish) Currently translated at 100.0% (288 of 288 strings) Change-Id: Iff004d986a01a23a5cc697f6ccfa8a4c76920d64 update translations LibreOffice Online/loleaflet-ui (English (United Kingdom)) Currently translated at 100.0% (288 of 288 strings) Change-Id: I9db41be6c2bb1f6199c10f97c9ddf06cc1f08a03 update translations LibreOffice Online/loleaflet-ui (Greek) Currently translated at 100.0% (288 of 288 strings) Change-Id: I9268cfde7471fbcce2cbfbb537002d8510946c9e update translations LibreOffice Online/loleaflet-ui (Lower Sorbian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I1344fee7081904e557e8d0c0ad74f02f4d31f351 update translations LibreOffice Online/loleaflet-ui (German) Currently translated at 92.4% (266 of 288 strings) Change-Id: I86358814a0cfe996770c26f9a38f0c99cc77045e update translations LibreOffice Online/loleaflet-ui (Welsh) Currently translated at 100.0% (288 of 288 strings) Change-Id: I09fbc1a9426da78b16cc12eea4dddc67d29dc4a7 update translations LibreOffice Online/loleaflet-ui (Czech) Currently translated at 100.0% (288 of 288 strings) Change-Id: Ia7a0a3e3f33db47a41b40e1113caaf8870ed28ba update translations LibreOffice Online/loleaflet-ui (Catalan) Currently translated at 100.0% (288 of 288 strings) Change-Id: Iff5450e53315781614b73545cc6f6386b98f8b08 update translations LibreOffice Online/loleaflet-ui (Bulgarian) Currently translated at 100.0% (288 of 288 strings) Change-Id: I4196eb780fa8be4ac9ce23c8210074897bd18b6d Reviewed-on: https://gerrit.libreoffice.org/c/online/+/89847 Tested-by: Andras Timar <andras.timar@collabora.com> Reviewed-by: Andras Timar <andras.timar@collabora.com> |
||
---|---|---|
.. | ||
admin | ||
archived-packages | ||
css | ||
docs | ||
html | ||
images | ||
js | ||
l10n | ||
po | ||
spec | ||
src | ||
test | ||
util | ||
.eslintignore | ||
.eslintrc | ||
.gitattributes | ||
.gitignore | ||
.npmignore | ||
.travis.yml | ||
bundle.js.m4 | ||
LICENSE | ||
loleaflet-src.js.m4 | ||
Makefile.am | ||
npm-shrinkwrap.json.in | ||
package.json | ||
README | ||
reference.html |
Leaflet platform for LibreOffice Online ======================================== This is the client part of LibreOffice Online. For the server part, see the ../wsd/README, and install it first. Build dependencies ------------------ npm is provided by the nodejs package. npm should be at least 2.14, if not 3.x. Use `npm -v` to find the current version. Upgrade npm (as root): npm install -g npm Another way is to use npm as a user, but set its prefix to a directory where you have write access. If you want that, you need to have an ~/.npmrc with the line e.g. prefix=/opt/npm All of the dependency tree is locked in the repository, so there is no need to fetch data from npm registry at all. An npm install will use the tarballs in node_shrinkwrap/ directory, so build process can move forward even without an internet connection. To update any of the dependency, process often goes like this: 1.) Change version of the dependency in package.json 2.) Do an `npm update <package_name>', which fetches the new module from npm registry. Make sure that only the module that you want to update is updated. 3.) `npm shrinkwrap --dev` to update npm-shrinkwrap.json with newer information. You might see that this tool updates path convention of tarballs inside node_shrinkwrap/ also, but this should get corrected in next step. 4.) Do `shrinkpack', which should remove the old tarball, add new one, and make appropriate changes to npm-shrinkwrap.json (removing path convention changes by step 3). If you have not installed `shrinkpack' globally using `npm install -g shrinkpack@next', it should be in node_modules/.bin/shrinkpack, so you can use the binary from there. If you need to get the sources: make libs To bundle the file sanitize-url.js browserify braintree-sanitize-url/index.js --standalone sanitizeUrl > sanitize-url.js Building -------- Just do: make Above step would create a non-minified bundle.js and admin-bundle.js without source-maps in dist/ for main loleaflet and admin console respectively. To build with debug-info, i.e with sourcemaps: make DEBUG=true Above will produce source-map files, bundle.js.map and admin-bundle.js.map, for bundle.js and admin-bundle.js respectively. It will also link existing bundle.js and admin-bundle.js to their map files by adding a sourceMappingURL to them. While debugging, these .map files will be fetched from the server if present in dist/, otherwise there is no way to debug while browsing without these source-map files. To minify our bundle.js and admin-bundle.js passing a MINIFY=true flag to 'make' will minify it. This can be helpful in production environments. make MINIFY=true 'make dist' forces minifying. Running ------- To see an example: * run loolwsd, like: ./loolwsd --o:sys_template_path=${SYSTEMPLATE} --o:child_root_path=${ROOTFORJAILS} Note that this will, by default, set the loolwsd's file server's root to the parent directory of loolwsd, which means you can access all the files in loleaflet using /loleaflet/ path. It is advised to set file_server_root_path manually for more control. See wsd/README for more information. * open dist/loleaflet.html through loolwsd's fileserver https://localhost:9980/loleaflet/dist/loleaflet.html?file_path=file:///PATH/TO_DOC&host=wss://localhost:9980 and you should see the document in the browser. Note that accessing local storage is disabled by default for security reasons. You need to explicitly enable it with the --o:storage.filesystem[@allow]=true option of loolwsd. In case anything goes wrong, check the loolwsd console for the debugging output. You might be asked to confirm the certificate if you are using self-signed certificate for loolwsd. Development ----------- For faster development you might want to install browser-sync which can reload app in your browsers automatically after you edit and save the source code (so for .css only): npm install -g browser-sync Remember to add '--enable-browsersync' argument for './configure' script and delete `dist` directory. Run server and start browser-sync: LOOL_SERVE_FROM_FS=1 make run and in the second terminal: make sync-[writer|calc|impress] Your browser will open example document and now you can edit .css files and see the result without server restart. To run another document use: browser-sync start --config browsersync-config.js --startPath "loleaflet/96c23f663/loleaflet.html?file_path=file:///path/to/the/file.ods" Admin Panel ----------- You can do live monitoring of all the user sessions running on loolwsd instance. To access the admin console you need to ask for admin.html file from loolwsd which resides in dist/admin/admin.html. For example: https://localhost:9980/loleaflet/dist/admin/admin.html It will ask for username and password which is set by the admin_console options of loolwsd. For example you can pass --o:admin_console.username=admin --o:admin_console.password=admin in command line, or set these values in loolwsd.xml. After entering the correct password you should be able to monitor the live documents opened, total users, memory consumption, document URLs with number of users viewing that document etc. You can also kill the documents directly from the panel which would result in closing the socket connection to the respective document. Testing ------- - to run the unit tests + open spec/loleaflet.html in the browser - to simulate an editing session and to get the tile loading times + open spec/tilebench.html in the browser - to simulate a client opening several documents in the browser + open spec/loadtest.html in the browser - to simulate a client opening several documents in the console + run: node_modules/.bin/mocha spec/headlessLoadTest.js - to simulate multiple clients opening several documents in the console + run: make load-test The structure of the unit tests: Loleaflet unit tests are located under spec/loleaflet. Following Leaflet's testing style, each test's path should mirror the source's path, so spec/loleaflet/control/ToolbarSpec.js tests the features from src/control/Toolbar.js . Any new test file needs also to be added in spec/leaflet.html API & events ------------ ####################################################################### # See /loleaflet/reference.html for a better formatted documentation. # # See /wsd/reference.md for the HTTP API documentation. # ####################################################################### Search: - API: map.search(text, [backward]) map.higlightAll(text) - events: map.on('search', function (e) {}) (currently only fired when no search result is found) where: + e.originalPhrase = the phrase that has been searched for + e.count = number of results + e.results = [SearchResult], where SearchResult = {part: part, rectangles: [Bounds]} Zoom: - API: map.zoomIn(amount) map.zoomOut(amount) map.getMinZoom() map.getMaxZoom() - events: map.on('zoomend zoomlevelschange', function) Edit, view, readOnly: - API: map.setPermission('edit' | 'view' | 'readonly') - events: map.on('updatepermission', function (e) {}) where: + e.perm == 'edit' | 'view' | 'readonly' Buttons like Bold, Italic, Strike through etc. - API: map.toggleCommandState('.uno:' + 'Bold' | 'Italic' | 'Underline' | 'Strikeout' | 'LeftPara' | 'CenterPara' | 'RightPara' | 'JustifyPara' | 'IncrementIndent' | 'DecrementIndent' - events: map.on('commandstatechanged', function (e) {}) where: + e.commandName == '.uno:' + 'Bold' | 'Italic' | 'StyleApply' | 'CharFontName' | 'FontHeight' etc. + e.state = 'true' | 'false' + e.state = fontName | fontSize | styleName map.on('commandresult', function (e) {}) where: + e.commandName == '.uno:' + 'Bold' | 'Italic' | 'StyleApply' | 'CharFontName' | 'FontHeight' etc. + e.success = true | false | undefined Parts (like slides in presentation, or sheets in spreadsheets): - API: map.setPart('next' | 'prev' | partNumber) map.getNumberOfParts() map.getCurrentPartNumber() map.getPreview(id, index, maxWidth, maxHeight, [options], forAllClients) + id = the ID of the request so that the response can be identified + index = the part / page 's number + maxWidth / maxHeight = max dimensions so that the ratio is preserved + options = {autoUpdate: <boolean>, broadcast: <boolean>} - + autoUpdate - boolean, automatically updates the previews + broadcast - boolean, whether the response (a preview of a slide) should be sent to all clients viewing the same presentation map.getCustomPreview(id, part, width, height, tilePosX, tilePosY, tileWidth, tileHeight, [options]) + id = the ID of the request so that the response can be identified + part = the part containing the desired preview + width / height = the preview's size in pixels + tilePosX / tilePosY = the rectangles's starting position in twips + tileWidth / tileHeight = the rectangle's dimension in twips + options = {autoUpdate: true} - automatically updates the previews map.removePreviewUpdate(id) + id = the preview's id - events: map.on('updateparts', function (e) {}) where: + e.selectedPart is the current part + e.parts == the number of parts that the document has + e.docType == 'text' | 'spreadsheet' | 'presentation' | 'drawing' | 'other' + [e.partNames] if present, part names (e.g. sheet names) map.on('tilepreview', function (e) {}) where: + e.tile - the preview image + e.id - the preview id + e.width - width of the image + e.height - height of the image + [e.part] - if the preview is for a part + e.docType Statusindicator (when the document is loading): - events map.on('statusindicator', function (e) {}) where: + e.statusType = 'start' | 'setvalue' | 'finish' | 'loleafletloaded' | 'alltilesloaded' + e.value == a value from 0 to 100 indicating the status if the statusType is 'setvalue + 'loleafletloaded' is fired when the JS code is initialized and the document load request is sent and we're waiting for the tiles + 'alltilesloaded' is fired when all newly requested (empty tiles) have been loaded it is not fired during pre-fetching and during editing Save: - API: map.saveAs(url, [format, options]) map.downloadAs(name, [format, options]) Scroll (the following are measured in pixels): - API: + options = An object with members: update (type: Boolean, default: false) like {update: true} map.scroll(x,y, options) + scroll right by 'x' and down by 'y' (or left and up if negative) map.scrollDown(y, options) + scroll down by 'y' (or up if negative) map.scrollRight(x, options) + scroll right by 'x' (or left if negative) map.scrollTop(y, options) + scroll to 'y' offset relative to the beginning of the document map.scrollLeft(x, options) + scroll to 'x' offset relative to the beginning of the document map.scrollOffset() + returns the scroll offset relative to the beginning of the document map.getDocSize() + returns the document's size in pixels map.getDocType() + returns 'text' | 'spreadsheet' | 'presentation' | 'drawing' | 'other' - events map.on('docsize', function (e) {}) where: + e.x = document width + e.y = document height map.on('updatescrolloffset', function (e) {}) where: + e.x = difference between document's left and current view's left (how much has the document been scrolled right) + e.y = difference between document's top and current view's top (how much has the document been scrolled down) - this event is fired when zooming and the current view is maintained but the document shrinks or grow OR when the document is panned OR when the container is resized map.on('scrollto', function (e) {}) where: + e.x = view's left position (so that the cursor/search result is in the center) + e.y = view's top position (so that the cursor/search result is in the center) map.on('scrollby', function (e) {}) where: + e.x = the amount scrolled to the right (or left if negative) + e.y = the amount scrolled to the bottom (or top if negative) Writer pages: - API: map.goToPage(page) map.getNumberOfPages() map.getCurrentPageNumber() map.getPreview(id, index, maxWidth, maxHeight, [options]) + id = the ID of the request so that the response can be identified + index = the part / page 's number + maxWidth / maxHeight = max dimensions so that the ratio is preserved + options = {autoUpdate: true} - automatically updates the previews map.getCustomPreview(id, part, width, height, tilePosX, tilePosY, tileWidth, tileHeight, [options]) + id = the ID of the request so that the response can be identified + part = the part containing the desired preview + width / height = the preview's size in pixels + tilePosX / tilePosY = the rectangles's starting position in twips + tileWidth / tileHeight = the rectangle's dimension in twips + options = {autoUpdate: true} - automatically updates the previews map.removePreviewUpdate(id) + id = the preview's id map.getPageSizes() + returns {twips: [Bounds], pixels: [Bounds]} - events map.on('pagenumberchanged', function (e) {}) where: + e.currentPage = the page on which the cursor lies + e.pages = number of pages + e.docType = document type, should be 'text' Error: - events map.on('error', function (e) {}) where + [e.msg] = a message describing the error + [e.cmd] = the command that caused the error + [e.kind] = the kind of error Infobars: - events map.on('infobar', function (e) {}) where + [e.msg] = a message + [e.actionlabel] = Label for the action button + [e.action] = A link (starting with http). Please extend to allow other actions when needed. CommandValues: - api: map.getToolbarCommandValues(command) + returns a JSON mapping of all possible values for the command map.applyFont(fontName) map.applyFontSize(fontSize) map.applyStyle(style, styleFamily) - events map.on('updatetoolbarcommandvalues', function (e) {}) where + e.commandName = '.uno:StyleApply', etc + e.commandValues = a JSON mapping of all possible values for the command Print: - events map.on('print', function (e) {}) where + e.url = file download url Contributing ------------ Code conventions: * files should have unix line terminators (LF) * tools to convert files: dos2unix or fromdos Implementation details ---------------------- Loading a document: The map should have the following options: - server address - doc - path to the document that will be loaded - edit = the initial permission - readOnly - whether the document is read only - [timestamp] - optionally provided for remote documents How zooming works: The zoom level goes from 1 to 20 (those limits can be changed) and the initial level is 10, which represents the 100% zoom level. The zoom factor is 1.2 Controls are added above the map in a div called "controls" is intended to be used as a toolbar. There is no leaflet method of adding them in a separate div, so for now this is done in the html document after the map initialization. To enable scrollbars the map is placed above a div that contains a bigger div of the document's size (a mock document). So the div under the map gets scrollbars which are independent of the map's div, thus enabling us to link them to the map as needed. When the user scrolls, the map is panned by the same amount as it would've been scrolled. Also, some custom jquery scrollbars are used, to trigger the same scroll events across browsers. Z-index values: ------------------------------------------- leaflet ------------------------------------------- 10 map 11 ruler ------------------------------------------- under menu ------------------------------------------- 990 sidebar 999 toolbar-up ------------------------------------------- menu items ------------------------------------------- 1000 main-menu(desktop-only), toolbar-down 1050 closebuttonwrapper (not being used currently) ------------------------------------------- on the top ------------------------------------------- 1105 dialogs 1001 mobile-edit-button 1500 mobile-wizard (with class=menuwizard) 1501 toolbar-hamburger (with class=menuwizard-opened) 2000 vex-overlay 2001 vex dialog (vex-content) -------------------------------------------