{"_id":"@tilde-nlp/web-translate-widget","_rev":"111-064cc48ca25d20badb82610672073acc","name":"@tilde-nlp/web-translate-widget","dist-tags":{"beta":"6.1.12","latest":"6.1.23"},"versions":{"1.8.1":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.1","author":{"url":"https://tilde.com","name":"Tilde, SIA"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.1","maintainers":[{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"942fe54d347fcf5238ba2540c9b6c85a1ae5cec4","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.1.tgz","fileCount":17,"integrity":"sha512-G8Ixf9FntJDV7RsjCJxbhPW0MzyuxSURLYQFQZVsDGbzrQE991xg0iNE0a5WcbMZ8MCeqEb/1HAT9z8ON3wN9A==","signatures":[{"sig":"MEQCIH5WGisFy55zoJsTDPeuZ+mwo5wMfJu2tdWOqsfpRJFMAiBOAaakoMBBZUMV9Kr2VN7J6d6PNK5BGMxDQvyIELGruw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":388301,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4Jo3CRA9TVsSAnZWagAA5vsP/RK9oF5x1oh+bdV8dcRU\nveSNY2IddHnGHnATJWfCxRFdXhc5kg5uoHjQMGzUdmx7S2egb2mXs70IKloa\nmpvSElIXqALp1m/pb0NeiqF0pdLb565mur/5vg6nyizQeN5qZGv/8cZJJ+aE\nNiyGw9+0z0MD/3aIgO6PEs1obF18jo9nTp/9insLN7SewBjtCiCbmFKbbas1\neSYwMtUJQbu7/iX1Iocomoiww+QMdcP+5NWQCGN7IRUpX0HQBPRiG+0EGElD\nrF/40gz84vIRDMEodWR1Jtz0xuldaO2Y4QxtuKPaUWW1JVaIE1OFfIPE0NfM\nhfnRXSKk/f1q9/kIpAlGTkbznqe8lleRLxOuMR/PzErhxx3g8pTCuyB9JUFR\nPsZjTraftdvWCjTcQxs4dSPB9S79CVEPaazk5UE/CM72r1O14JKV3GQJ/sw9\nDx8kDWhtgfw8Bt/kKiYM/Aw8wQ9QKxDnlYBexzXhS5Bt7gwX8/VximDQdtpZ\nEc7474UTrqj1ip4JFId6E7bbDA7Kp/x7Il6OqJsY2W/MXSrhW+aVvVHCAWRM\nLY0WIxd34G8UUoXGKx6l7jZK6wvAFnYDXZt3qg8CzcibmmceqQ698sGKDb73\npFEefpBFoi4qUgyYwQ/ZR/3e0OvJLr2BDy/X+Fcw/8bntfte2IXpFJvm8tNl\nxmax\r\n=XBgO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"55354a56de5b362cc2a7b0ed4ba91e50cf2a2be8","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.9.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.1_1608555063112_0.12167134600291796","host":"s3://npm-registry-packages"}},"1.8.2":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"Tilde, SIA"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.2","maintainers":[{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c18ad5290b94bca8636cc210b7cb854daecf640f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.2.tgz","fileCount":17,"integrity":"sha512-m1m0emE1PfObHgcouQ0vaXln3yaFb6KOp/dD7URhs+5/Aw+Z2DFoULhlA+7zNj3+qHgkVXsb6UgFfZ6gEetqXg==","signatures":[{"sig":"MEYCIQCadcmtaZydLniqL2Kq0pl7QUzHl8EEiBK/f/N1PTJkggIhAJhbeS2Kco7nYSlwm76/nojUcQd2ILEl37wgXKVdu9SB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":388363,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4K/4CRA9TVsSAnZWagAAIysQAJl4nXAjJIeNGDkG/gOU\nJe9QbnhwmnJCPAI0ejh4yeuu9LlxaiMIn5LGB77QsyGH+b3jHRyrzjPxxnmZ\nyrT95KbKAmo+/T0qtGSL1jakKvRRGP6O6QRyUAFeChWfWEH2bF9mwMDzYfhy\nfI5BzkHb7oCUefQyANGxrSFTuGax1SJ4w/kLMV2OH+Cg5OJC58aarTPhzK6J\nUvb3NiBQvVoqNUcuX2s1XTtoGM0R825mCb+lFROSilTgkQyeFaZk2ToObo6q\niiZrFDPLnTVY/puADsp8IqxuROIySPgMq4gaaNAvZo/Gi6ueI3vS3zoCoPrt\nmCLYRT9PSnR4XA5VeSojygsRRxEcSJjbNBA+ufzaEFgFMC0eyZb+4CmuVTwp\n34HRKYUHoTAXAsBUF9fcn8aQhH2aRiIuugWqRh2/yArM2M+PUrSnd6L3KbHO\nG8HzYz/A4wJKSFTnEfOtPCzS4pT03OXYDi7NfmqjqiBOoKR+SedbybZSEukW\nVxbLh0O5mhfFo8prea6csV3TIz9qEUdgr6r2NiwKxhxe0sPNFXLRP/lw5htl\n4uB5HCY0Q4E9dRwGehWkYbKT/irLiPEvGNeZC2IqSKisRzOwiqlUYRUKFZcQ\nktA9mJ1hKH8SkeJ1igVeRdqo/Bl4AnHg4GzDaSVSXuWv7n/tuYEOMZCTFaF9\nVcj6\r\n=gjBY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"724458e0cf9f392d629a8533b431651d8eaddcee","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.9.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.2_1608560631821_0.011321617494300718","host":"s3://npm-registry-packages"}},"1.8.18":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.18","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"Tilde, SIA"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.18","maintainers":[{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ac56653de209ee7d3ad67a85c522e3746d71d6e0","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.18.tgz","fileCount":17,"integrity":"sha512-9n5USD0S1sgNsJ0suW/Zzj8XShra1PhQxAHJuv/YW8RQs6i9FozEcp7GJ4PoSmhQYq9KVCnH9KyfTvpO+X+CQg==","signatures":[{"sig":"MEUCIQCNSe4CmpGApxFTCuI0IKUZNqTVjOn08Su1bGgRJgXp/AIgY4pG/VPR9uiktntQBQV3OWYZ1hm0vEcxk14rjeyMN+k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":388277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4LjkCRA9TVsSAnZWagAAo00P/0UFzvJKZFccokMiL4na\nFJYisXu242ymFOVP6RjXrAUxQnyUqM7C9f4glskuJzAEiN5QO02uuN2Wzj+4\nVMw0qO7HtQ8FEQFCOcr+igzi3gyKgiRe0+6hqqvZD8tlyk55ZS1R5RHABwFG\no/OOlb+p9Ke2TeJjlbaTHRv2K0bZFIZ5tcWFRQcaMWoSmiwuiC2jIOAvDFbx\n7DZJ09bMiR+vFa1LrV8n7QMgAkJ3+smUGE6P1SYoJ8MzzvibXetOT0rkz1rj\nBBHdNPHKpxw3qoXNpEvjEXtceAru6QKDDhu6edPJFcd4L12JxaITVhLjTx9B\njISVpS18WaYT7VjHC4Q68v6ZuOjAAxOHMSPzE5EVn7+Rpe+DUHrrSBKt/Tvs\nzg+VMd4Z3/RUzJqet/OcdHiua+GP13Ev1uB3rp15nTIiQtWr+/OdHEam4y6L\npp/u5/20FaQX1BtkpzFmeJ6nxlDAo2yYGPofJ9DMc8fFVqtCsOes+N9NFmYU\nsRl5SjpK0n+NB2nu+udxNzg+WAi9rLizGd6jqdaQqBlOmD029CA4E1kCf3Lq\nRgcF/NVe5wXNba+hofbiX9rwl5rLuA2CIXTzUnQIe5G7/PBHxCG9pWAb7q42\nLdaXCdv4tKxyqwbT4WubLHeK7Hw3kJ+KDfX6grt2lQwTnOik9egB/DmWiBEi\nof35\r\n=R+nJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"724458e0cf9f392d629a8533b431651d8eaddcee","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1"},"_npmUser":{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.9.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.18_1608562915926_0.7308852175865734","host":"s3://npm-registry-packages"}},"1.8.27":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.27","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.27","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"6395b1d462a5f09dc70ec93321e5e65fb8a435d2","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.27.tgz","fileCount":14,"integrity":"sha512-e0p+SWSZqUCR2EOC6z3m4KAgXCKHOIydr8QJjjMocKmi+bysKsZouU9ICbLGN/Csp8ctXiT4Y/9SCL6By7jlLA==","signatures":[{"sig":"MEQCIBgfi462K1m5wJVB6FbpujsbK8hMz+t8NZSYOA736lfhAiBpf4ZjKSRTWxogOqW+egsbXXX75NAftFOwQQ6jY0DkWQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/bjjCRA9TVsSAnZWagAAINUP/jVRDtzBuAwp+7rNL5/g\n63Ay4apSCLq96Vkaxme+gxyJih2KOprf3elCZQsPNVHNFioOAr7byd5Qvp3x\nVjZIqkRMB9/ejT7VcqLjRWMdeBty39T5LWVDp8j9fdit5PYEEUdY4jgblkRN\nWuON9tFelR47QxuzGiq+N63kUQcBUZ6G8gcTHnbXveGLEXBv546fqsk0WTJl\njub4EgzkC1FnuFHd7KNl6iVH83bjUZFfVlOggellVwP9MVFBz1xobiTDSC6p\nk5hco8yjhQwnIHP6c970XnGcd6tq3Fd7/uviuQzrazmXGyrV0uuqGMgY8+OB\nbFb5cYv7+RvP/jELRUO5RzRTCImbl9FI5gRHmHP82Ed5Wg+Ji3/mAdgpvW1J\nICi6RBbyTjoXVD7RR6kTHJ2G4QRJp1Rl432K1OY+ugjlxSZUjI32grSosd6p\nW7p7wEZv4oIX/PxJk8WjUseTWBYqUinxsyxS655TtOVLD5yoMbB9cHKUQM83\nZwiHGSam5/iE40MHvVh9+bQDRdJbkapwWW+eK6u2S8hzxusYCq7GXGyY+0aA\npmuQdsog7nfxczp2j1GqOcdsF9rg0TGW8KgeyZnW1VziXWiVvuweTc92CAtu\numMJsLVaIpQdeo2/s5s7A7J5S0kV4fIleHsHPkRfY7iZwnlfFILN1nVzzj1m\nKi6M\r\n=Dkh9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"49f932d59da0d62ce284cdb80cec4cf7405a1046","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.27_1610463459297_0.8139745031751218","host":"s3://npm-registry-packages"}},"1.8.31":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.31","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.31","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"1157e0ac5558c9f3fd0d63263464e891baa28ecb","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.31.tgz","fileCount":14,"integrity":"sha512-ECj8jYRCOxTNNX91WUow65p6JBzB44dANI1zvKRohL5yJeeLXr5gDbgxILMqs7901ejV9hbwwTdhbAVe9Ky9qA==","signatures":[{"sig":"MEUCIQDqmVkgLIKF1ZFy1zVjC0PoF0EgGddIyV0qNIzJoIvIbQIgdd1oygq+3C1U0JGc2Md1630uZUY62oBazUYw87x7010=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/b9TCRA9TVsSAnZWagAAg00P/jXHWmeNSXrlh4akbn4Y\ngWxlo1LTZHatHGChpjMGA/CQA/DmIHTnuS7vEOi24YUp9SGFyqP4s7oWNVmk\naqhjH04c44pYVXjwiKEAvDihpgOBx8bYom59c3ApyKhv1d2i4TOAkFPQB7ki\nQH1OfxIUrB8JnYcN9Tax6HLAJC4zmIeiskk6bbfT7W0GmOf2VcVnT7wKjK06\n/sHivFscwN38lTG/PUe5CY00lLKu6EeZfudVWhTIL07gLsREFLZBSvhLZ6Ef\nMB1fhdq+NW8xcU+5SQv++yhGcFbXnWFFwOfYE1TGQpl7goOJ0KycHdQwhB8w\nzYugC6oV2hgjz/Xt4kO8qzoGftfdto/KvQJtLHD9Hqgxd9Rr+r1cMHZ8N3Ma\nd3t2NEY0rBN3H0xA8GMudS/JAzEgs4gNXHhe6vZlNGmKNN4TG0okAQvtcDfi\nuhttFbckjfbQHZ3oj+IBm6VxyAuJrNpmuL4zKXVuaQDLQdRLPxArxNYNLiLf\nk5ViLWNEbqAED2UFpZRQKZpwDJgsbpWRM5H7OqRHZR+ScPjxvEYQvHvGdnmD\nnuVa0tZicSm05m2gUOZDMqOc7adAZ2GYiVtJM2vzOIgbLWLWtcMff/UVqHQX\nuA4mMgeLsQnxbvCDK9y+K2eyeT3y04amMs4LiMaNZViaNxXV36IXujVuVSLN\n1HJy\r\n=YOOe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"406d9f88ffa1e59e24109c8b72d48a7c14c1fce0","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.31_1610465107182_0.7925679993131696","host":"s3://npm-registry-packages"}},"1.8.32":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.32","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.32","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2b5fe776638cbe29ac4bf5f6fbd04fd0f6bc2647","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.32.tgz","fileCount":14,"integrity":"sha512-grUXjf+OOM3zmrEcSebE4TbUrD40BcmNJ+QfhSfpi7EKyx5zgldVWSmS+v3i7fQNcyIj9fUP76shg7OfdFWPpw==","signatures":[{"sig":"MEYCIQCjNXXkG5Xay93r+WeV8cU4eC9bk84gfyvKUkkqVFgqogIhAKgF9chpDNVEppUZYEZjVj3XpKJ/vAtfjkC5lpbsTU+x","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/cBCCRA9TVsSAnZWagAAVHoP/jBbeVyekNWIOUEHgU5r\nK1F9IZBXI3aMSfaa14sZh0Tb2gbkReh/yPLUwsSHDiV6b8FubSBQQbrsG6WL\nARxYtp37ZmBw5bgDhJrkVediuG76A0f12Uk6W8EUFwgSsPbRPd3Ex4R+kgCw\n4eKmcZ5tnGB60PjRLPU2L3SAiuL2GPZLJNHT4ulEmY/Mxo813u4lagjkqd3x\nWgVQXHLWWyU4ALsPxv/WD5xccio5S5pixTje0cz5n0PwrwHsiI+iPyWJgNeN\n1w7oMiQDVtqWy34Fra4XLmQJ6WHvvIaBpUlYbT/pWbRJqCoMr/3eAGgqBBZh\nF9API2qu3DTPytYkNF8rekQmFLP0YyQ2t2KMaayAFKg6eACMP5q6xQrNOusa\nGKTasOxCcBtO2B+OY17CAJ/V4zOwr9SW2R6YF2r+Q+NKvw8yfYQaTcn+5jFk\nDle4/uVsiovlK7m4xBVOMEFoE/GhsEL7nlLNhkCE8eUYOMlLFQDJ06i5ZLHI\nd2h2frS2ZV5EUNe8TIrbL8KGDYb1YRLYcndgoDOHHnEx4QI/uAusAnlLCDV3\n5ksOuAnsBPRQCaawd++0J7ooV/m6CRYXiHfFs5RfOzx2DQgtTDFmUJLYcnkh\nLq0e5TkyDvueTBwysEMvThOaeEOrzUmRzih2nfVkx2V49sLCzJ9cLOsiq0tZ\nRi0b\r\n=TrQ2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"17d697866e535705c6e97fa509c2e0cf87bb0565","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.32_1610465346427_0.5318313118173987","host":"s3://npm-registry-packages"}},"1.8.34":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.34","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.34","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3b7bde4954cd0152a738dcb3f537a567b19a96e3","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.34.tgz","fileCount":14,"integrity":"sha512-Ev41fnemHoQLFxH9Jtf4OfCi0ivOwAxg3D/omT56TVGoBZm2e7+1wePQiGl/v/+pp8HnPtzfnXy02NyUdGpIXg==","signatures":[{"sig":"MEQCIFMdW6+68VCDnEECq/a90eOD02gd/0kKONreWB3qkfGSAiBSb84LOOXBEDonOHTEKYerzX0JiCtnlYzpC9r64rFaPw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/cbOCRA9TVsSAnZWagAAuRQP/iF56T/0GAXUY8CETKMl\nnMxZ33O2fUR2TFxVvs/AKkPSyqQh3PqUIyEi2kXCaDGQvb4ASKHfAymgrLK+\nsvhoYT4eU6RkVYFTZBKVys4W8dUPz9b/svw1hWw4bAQydyfh182tBOSEes7s\nERQxnVkOgUN/XNVAqhHK3w0pr21tPMTeX0P1wUw3k02EnI4RAW+MGJFjlU0C\nSt0iQJu1/xR+SmPJli16wDeOH0lIqO14iFoRkv0opDVTU2EYHrBLoC3PaafA\nX5h4K17lq79AHxN6PHJx5o9iW+wyI6z0DiByV1ZH7NYRLKDGjEjpWKLsECAe\nFC7Xo7uVGKjwrmgDymLL8MZmNuZgMjmc/PJ6sKH9WxoZcKuQoevTeaswcAbw\nmtl8QVU+QXBVuutE7Gs73jZ/cG2SttOkLco/z7OjdBa2uJ8W80kZBKnd4Ovl\nwSMjejN1y8Byy6Gc1fLOiv49KwuzSzdabtXJncgA0OCnmKO3Xj/CSHLcEwDd\nwY8LyxgOPFmFiefVkjC3G8hFNiOcYtOveumjBHpDw2++ntquj2s3e0F2cWRp\n8HvbK1K8VfwV1kbxpavRD7yLE5GllK3XYEODKmYPZXeX685l3j6HeOXYWG04\nNuArYTJzC01EGTpKUBrI0RbbDo8QiO/Advy8dSdc4/wRMBGlU1N8Il006Pnm\nich1\r\n=g0yi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"04c1f6af7e580fe10736743a318d102bd88b0517","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.19.2","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.34_1610467021581_0.13159226787100997","host":"s3://npm-registry-packages"}},"1.8.38":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.38","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.38","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2ea1656ec952c64607f3d609449712db5ef9d826","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.38.tgz","fileCount":14,"integrity":"sha512-vp8L61W3yuF3L1xq8t53UNjgcG+wfmszdFsJjdKiqWKSKDIvkr5wP4Qh66TUNwmETnXYtOtatzfT1ryZV/6h+g==","signatures":[{"sig":"MEUCIDk52h8qnCikotduova7D3c9yUS0uM8Zr57w4+yo3HYQAiEAitGanvUJyJUGVF44XGRgPb7C5m7xdGJNx+aMeSEnpSQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/qyQCRA9TVsSAnZWagAAHqcQAKFRy+p/6sGqUVrIdcdP\nea0zdu6VeSnL7FvJLaVFLbDbsbbl+Py+QX/AOzglffPVcp615mRWagtXMSeG\n0EwhOELWrZDHGrp1bD6gJFFtCvJg2e4/nEEpfhgEAa7gx+piWwltYX8VoV/M\norRNV/NOqn3EUmmBTzJbsZSGfvGyoGElchTIfuotRuKfjynhjmzJn7xaKjTN\nO2mZCGD5hZKl95gZF3c0bNZ4nWd2fhb0oIrTTc4YLV9hPyAyLK/HHTOMqHDQ\nX20vOWvM0jcBcnyZEc2iaScxuNbz+67RosjK5HZrWZiUmpAQDcCsWtBJCzYO\nD/Ui5e8PtdxTV4EVZsY6nEviX8CWpcufxEpcs4Wljl4UfQECMRzNdqPKBAYM\nycGUWykKdXE9D0x3r/MJ8wgZlt71P7WfxPNlNWtUk2Ha85qN2pQjyhLjZc6X\nhBOe3mhXDcwegcWovPmM7DobSMzeookPlhE2LEeHNhOsMyW4EYXgrQnQ9Ps7\nvpiTx61EunZL7zFOI791V7MRc1v80gwW1vCswwxMNkE3wQC+mY3XoOnw4FME\nz+XohZbABp/93UKwJKph5hlJhUcVd3vBdwwcp1iiYedRlLGJIvHSWq6fDjrL\nDHd3vsj17gRlksms4bTw7YZEFN2xYjx1KH/kT91Y97IyBW18DkW0ZR/ikBEz\n6FiM\r\n=Guup\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"7629afc79cf71a9c9ad04e5a6df51d717c7e555c","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.38_1610525839968_0.8152596155088259","host":"s3://npm-registry-packages"}},"1.8.39":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.39","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.39","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"e32099a8b87b7abd376dd48f53241e86e1c10f50","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.39.tgz","fileCount":14,"integrity":"sha512-3WXI8H6aPZjIMX1ca8fWllnLbQhKVeENVD9KLfdn9Bea2Enat2/qELt94xiZ/U6iMECCyl79Wi645x+85Bh93Q==","signatures":[{"sig":"MEQCIDqU05VUZYrtT4T76zfzbK5o7Ro/3g8IpXf4rGXI27rAAiAeRUWrFIh+Ge8k0/2D0PIEfqYumkWoqWHPimOajGAfKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/r6CCRA9TVsSAnZWagAAnlkP/0p14F7V1oFv/SrcX5kt\nViHbOVFSX03sBSDX15Tz8lhc9tAx/J0uPTqn0CkLRxI/oMcHk2Y4fibT3HqH\n/0RKt1c4be/qpf+jbJ3BjyUmVl9AVjluUdGalnuN7QR/Uvm5J7fjVB0WgXbt\niFlNdKQoZNPxYGYcv9m8sSeE6x9lqElhxtslYyW3J4+Ha7b0JSWsGYx7HYVM\niBefG6tzfAiviySzcyDGgaKoHlxaFCM75HWdfRbcVY2u35Goj0SlcLLO2A1n\nYSX41jZ4HVPh3m24Cpw851cCx8BAv/wJPEe4bElJr2c3/CFDJgoUs+YsHHQr\nmAZmsJU00KXtlBThbpWcHMsev9ezG2LBdW0kEgAh4O5bRe++iS27w9Z9j55f\n9FKFb5jDaCdaXx4tDCx4akL4gHme0CNXP3vTystuBT/ZmzmI1DHISSW21RTc\nj0+tsJ/zXSjEXQKtmjQ1a7APPbJtrtLxT/wVA1ZzwFV6wQVJCXdXyDjxLEgg\nOfoYcglCNQl54WpgeqDu2qsPcV7HMcBu398VKA96FqOBcar7m1MN2o2/XWQK\nJ4sQ8OF/gxktixvJ0WueugRL/FNQJUW3tcP9a71e1o5PDHdjUnin4ZAOjr9H\nJj79LMFvXHum5lu1qgaxGzAASJcX4yo2m4FYrNoa4Rzb+5xGyVgSIcxIKMAx\nbBiF\r\n=bSgx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"ac2bfc37bc5538cef8426b7cbb91fd85c4100360","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.39_1610530433620_0.5804724550074034","host":"s3://npm-registry-packages"}},"1.8.40":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.40","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.40","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"cc2cdb0d405c7d7b5055074e31d3e020d741c72d","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.40.tgz","fileCount":14,"integrity":"sha512-NX+vWA85Eqblw4KdpfQpxr9NGPCsrjYecgekDppowhaj8waYfp40o76e/j//BNUlBfV8ihViIBk0xx7dqS9UkQ==","signatures":[{"sig":"MEUCIQDDBWXSnPbGMn1myFbmDRMksy4CRa/S767Q1z+6gMQeGwIgQvdAJz1+zqqBr/azotEESlNon628akvDlmnc15Ohe+o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":370685,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/r8+CRA9TVsSAnZWagAAIU4P/3KvI0lVKaa1JIbqlXiX\nBh51XAvdB1cvYljuEhk/1zwlAzULoI6DUPUJ1Jbvw2lnq/ucfERI3ZYYA/K8\nTUwZQPf/Rp4y9w7mzOGxmynOySpkr0tZYcQygB6asy7Dx7StKwayunSvX4+n\nXyohJCZ+6qc3zjHZTBtbdIx4dla7WhN/bhmEj8tVk4M/tJgrWXdN1SSYqtNu\nxZdDu/uj+mr9CkAqRUKFx2I5pMDUuAoJSNPFvM2jN2ajf9+moJjyeOqpK7YW\nMQsK7tLDQCaF1zneyA+dQuLk6PSQxNdG8IZoR5p6rpqnapG/doEDbkR2otvm\n4E3TYr7jRUEUJOzqJR14yf3uJ8qgq1VIDIQQZsYqqhak42nwx0WJ3QSSRG95\npWhLstV1WMH1yMp5KKWjMFTPK1e9h2eeudUZg72Bajb4whBw4qeJQrVo3qq9\nsd/aMlQq2K9pQi30xZsgx8C3vHX2MnoyoKoAvmx6/yDK3MXGIFB0Y0J1IE+S\nl1dUyL+VI54uZaAbTXveuF5tUNJZZ/I4jsSjpkeVikbbuxFEXUIAYkYw6+QP\nn7ao40Kaj9vzJE92gMCWajgdYGrwZQQxqpKQmreLB7JxgNXGD66kLPYKdGGV\nfsw8eWaJOyEDzGJT/vRuiWK20gzjsk1qmlLwUsTmGjF14o5OUhkYXkMp2Z/M\nN29W\r\n=Zqw0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"de64f91ca9ede2e56a1495c1bce5ca53e86c7ef5","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.40_1610530621699_0.6064250324242237","host":"s3://npm-registry-packages"}},"1.8.41":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.41","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.41","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"1e20356d302fec771c43a9ed8d2a84a5ca29e9e9","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.41.tgz","fileCount":15,"integrity":"sha512-wAoTEw0dj8zfaDZZk367RqnqqTnUAtBxjEkA/V4gAwpeGdjQbpJlI6u4OkkId+h0zWpPWKDmSfN6N4jm0fk7Xw==","signatures":[{"sig":"MEQCIHN0c/1I4wxmiVNzY2rcLK4KK9w6HoGhjkGeVsbMpIzcAiBOWeswB5If3PYj9t76FXjfaWboAKQXaLM39pP0z9nFZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":383001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/xFBCRA9TVsSAnZWagAAWlUP/R5LAY9StPQdu1pdbZHs\n5BFV2sT2Lw+xzBlYv3o59xs236cRP7wlWPqY+qakypHqDulfgf1PFyovNhwK\nj707A/mjipgNvX59jw1/8+7WZZ3lJL83yLCkXLg6cxeFZhCfkONz7xViJYVm\nsAkbI9ptkBcon2f/Pbj+vrqVZ2R41YpZMP/+FMFkRouaY+pt4zOMHN+/Syiu\n2ZDzNDcCixfU7OrQSpdEKvnu9QOIctwjJHA2J/ztSPC0H0SBjRrQac4ZkDqz\nyVYXAW4Fm3Vi5qXtn5efV9CQ7q0aYX9KGK7t9zJnDOv9kvoFiX8VL949QFR3\n++RmgUTomjK/Rs77vqTaOP6qXOONxCnKl+iTT4Td0N25yVsjBwn8uJzmB9Py\ngcsLI24BEEjlReboKbGX1zCAJ3yq/9orXgPvxWzaP7MXBcD9bPCH2n0QDVqL\ncxk/HLmwTYIjJ7E/YaE1VjexY1RSlsrhdVF8h/5A8yyf8pjEJQwopcr53CqN\nbQJS0aCw0ocqxvkwT2OoGR064nvo8qvWc/l0f33YJVVTgtX+D9RhYrIax5dd\nBp8bwZKZUueNB2483OM8x+FjzHiBoEizSEd4xjHNm7By8CBDn5f8ojg4+Qxk\nWu24OCUbgnnRdfn+yfgsFdmJDIEwBNn/QYSWm/Ok+TT3DTf1HST9ZqrhBKjn\nEjG0\r\n=+lD+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"ade15a3d975358884b4278a00334b7a2b54de224","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.41_1610551617458_0.008708720495796962","host":"s3://npm-registry-packages"}},"1.8.42":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.42","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.42","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"8b866109cbdd4bdb9d02605f45aa61b03c2ed35b","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.42.tgz","fileCount":15,"integrity":"sha512-X8orVy9PvgNbtv/UxhiXcaZPyJcL2flongwFDNg+yltohbo5R7WPKgYm7HR9+6pzeRMloeRlw6Ws1AYHtw9/mw==","signatures":[{"sig":"MEYCIQD0A7+A5dR4VaQykZD2A77k3j40rA4y7ioZRvezwJ1LjQIhALXOhGHqHd2RGKcOeGZ3pvCP8GpjbNbtuJvMN+gmoepU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":383001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/xPmCRA9TVsSAnZWagAAabUP/0UZttiRIlJZUVUbi5dQ\nTv4Iqvegpuo8XWI52BD1J02g1elpZUOiO0+HYw3eWN3K4Q0iNK0dYfeVB2Td\nO3mrVA5Gw16dEbflRP+0E8adBQX/SreSFIs+mRk/nzysHJ9LiXGeosSWVpsE\nppdlI4lTMYOFThY8Jv0a9//WCAC8kkbGahbwWjgJcvkAVwbAGQXgZt3yonxM\nXKcQ+jl9y8kiZJdopLZYVvjTDFDo5VLBrLUU8wfJjJ9HNSswUCR4KVKWENRX\nLSUoF7Mej9NH7AgPh1MM2C1lL3iAnNRmjHh802O6e3I01FLyU+NP9PD5yl07\ng5lFREqkVqEF6dXv2dJpWxfCHNWfH6eAqZHWdawZ9ALo5or4gFxlEZeuhwGy\nn/7yUE/hAkEiGprYKKGe5ja7jC6e5oMymfdvK6w7wxyZcpCxG8N2Sj/ClHq9\n/RF7gfYfEm2cI+eRBR9hRB9vSmCrbHKaqgxzBMJV00L/aKK3pdnxFgqjXGp6\nOOETABoUKr4x0dsK3upmuvLRReKFe/SqlDdQcxpl6fkS9YxVlcxT1gPFqVjm\nSUJbZWq+HiW/VZh1wM1a7h3PC2eX1gwqpJH4yr8+b6xXBEENp8JwHYG2pqPO\n+kGkW/8rNErikvBTNShV0w6vPPFaUTBlFXyflFyoSwAsZ9OOWY/ZcfIUangU\nXguF\r\n=k4KO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"3d24c1fc9663d26d1b7921dbe11a7ec6a3183a3d","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.42_1610552294471_0.5464004406213416","host":"s3://npm-registry-packages"}},"1.8.43":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.43","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.43","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"aa3142f419b7a416c44abc4ba35bbfd226474a98","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.43.tgz","fileCount":17,"integrity":"sha512-Z68CFGQjTovUT8M5WmkXOVC8p3WN/GjulwPHhWZRvTlzMKTYCPExsicrjZE2jyl/nzTs4SAosyTf781hy6yzGw==","signatures":[{"sig":"MEYCIQD4wzX1qoEq9H7pL2/W7TfxZN0BXYIrFVSBY2dBuIgARQIhANp2H5hMi2AMbMr8SpdLFPHp+NUbVUZRg61yfUB0JbTc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":388889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgABCCCRA9TVsSAnZWagAAZGkQAJH2vv3NqS/vBHKmwsqC\nk6wmMCBsRcRMsq84P4xaMmS4CNoO17Kag73qUndlv6L2dmZEeEoBSw9d2qtW\n9s15M9KiY5Slcr8RfvThk1f7fJaaS5PcYVM0KfyB1Q0R6QwgTLOd94YDYLU1\naRAxedPVJZL4zLDccnvmTg397Wj0NtidApEhPyXX2FajjLESstIPzgBLUy3s\nWymdl+aKsNL2eUsiQv0Z/Q2u9PVSeC/gbpkKorARIspvsJjAvTPCmRmGZ7XC\n2hhgIdKdPx8WUSfkuH8d1iXmF3TsipE0s5vwUZNB+jPfZVFXYCYlsx4tiCfQ\nGeKU1kCEh3jMU/yDFp6AYF7sDvyIaMUahJGusjqp/T7yCFmy2mXf1SVH57ZJ\n5Rw6g5Ygk99Q/0waRQ4+5wtuziusufCRi+uYNnuKJdKMXeaWOvg9C0uiSHG8\ndmJyRArFw7LaTiYhgMcjbbsao5x8Uuk4Q+0Fv7JhcR2snVPg/K9CT0EaT+Gh\nXU9AQPniMDMYJZrI8VxG0Hg2XhQGwMh9mFkjDl5fgqWMEshLTkkmq3cndXGu\n2jdeSeo1gxAERGremlrJM5KtUUgkymt4dp57BXfWVxcl5GmYra8CzttEIa8c\n39h2yZDqZ2EjGYMwjMxdkjmzOmEE5JdVxMAe0ZX4bW8F4Ru6Bsyp5Xkab0cO\nTrK8\r\n=NNHY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"f182797fd8347a5250d5d63aa347ffbc68ac0ae8","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.43_1610616961759_0.5770758912464768","host":"s3://npm-registry-packages"}},"1.8.44":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.44","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.44","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"5b61a9b0831f64ccaf616d3d71c45f2c432d197b","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.44.tgz","fileCount":17,"integrity":"sha512-3ntjZLG/18B/Aa0sathUHOkJ+ke3AZ5+OlraENeW8V+M7hvOnQ3tRbIWxqmvNIdeGrULuWbAQgm0i5iOzcocSw==","signatures":[{"sig":"MEUCIBZrvQrobCkVf7wS/GtoBxXDGaAsBtqaOu6WzRujr5I0AiEAjVC8cL8ME/M4CNibT4ZQANa9ewSwegYlT+uSzoCUsVU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":388894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgAbbDCRA9TVsSAnZWagAARSwP/0FLyF6lhtasEri1EWP7\nn1lYuYXmu6qDxS279du+1hlYJOqEK6BJuFpWsXr8uouGm3NvA4276vTNCx+E\naib7kbMeGKD4YYMt2Fn5Un4XO97v1EGJlAkLrbiiBezE8N+xOL7KLRplkmPv\n0129YJ/t0gJrxEvV5pTSyWyk7cTi529bojM6L/hPa/9tYrTct0SgDiIUVInO\nXsT2wXczzxO1z6FsrB75ae1C+P3xrR4UBH7TQ4S+iwFdlttrEG7tgkyy3sBm\nQLAd2Alh++VFyZlf9wzgmCWI+akrOLDKUQNZjDrGeZnLHV1VKysET564ocIH\nnXQiWT5stFSbjSS9zsQGmFh4CqUutePVt1rpJCOyj5FSB2Dl/uDk7UJUHGUV\n+k7PnqcBg5adWbFdI7onFmkdcdX/gzSQM5eysWte+af3JW45jNNWcn5ZUsva\nh48JXm10+ESRBGRhtjwyPSNPkZHXHHkQmfDGytN1lh4Bbn39K1meaa+ep2su\nBkjXtjJUfmYVHwO8jmTzdtzeb/kPhMINui1xAwxaCGmoQMfn/vhsFTGeLiEe\n6Twq4zmksKTFkvPL10LX5WS9cdKgIFhmSIkjc6CdwQHldC1PMKyrXjEx6huC\nHl67B8XBLR00Edcrq6WMedoEL3qNegNbHam5WOiOy5aQphENEryFH59f29sg\naDvO\r\n=XUFd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"3595d45d82ebf1b5c73d018e28fc1d8225c428b4","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.44_1610725059490_0.10506776126795692","host":"s3://npm-registry-packages"}},"1.8.45":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.45","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.45","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"5c5807987f7fb333eb9db2095d2a18ce4fc0379e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.45.tgz","fileCount":17,"integrity":"sha512-XvK6gJ9C8iJAM+lF6qFkKCohqVy02APiivzy/LcI1hRn/Mrk+vFxUKe2xgG7hpsYCM/f55QziRHSL9GyFyU/NA==","signatures":[{"sig":"MEUCIGrHGOn/lWR+yueKplLPGpX/8/LsT8rIqKi/l4UnOE8KAiEAqGBPtEh3FdOT9X2X2V+ROXcNmi/ePv/+FIL3rHMEc1s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":389871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBT/ZCRA9TVsSAnZWagAAU94P/iZ1KNhGqn18kOm9aywc\nc0jGb/aujsVNe2DPxuQZz/kovnm6y8jN45/8PIZKP1dsBqX8x/VqEJ2Qha9T\ntWUu2fEn+jC1Ok8ZFY5vTuGZXAhRMhd8HD+UJoMMhhZNLvK/qOvPumgmOyG7\n7L3DvjWGOxXkA6nnm5u95sblWJkHhevKcL456DZU05RNu4yQMMW+zo5Zqt4n\nFcMgBbMQpU5cKAQU+dK5t0Z8cW+RgIpA9RDaa3PMwBquCOugwoC9BFfYJDLU\nzPen7lkE8Yulb7QrXDIDVTEiTJBBB2xLz4pLbZo2JAmUvgHyNy1nuPxaNdbQ\n3peeCSrj5pubshoD5QYeJEJPE67shxFoMmJFxGkvJhn0UkHTay6IV+awYTDl\nYTxKk27yZwskObsvq0CnbL1lRznb+RRSjAyflm3sGh3cf1fR9aF5xUP/RoP0\nZKX8goEC1QRh5Baoi4ClWeDIsXJU7FqxWW36QwxCkxpmErpJs5xfojhufhBY\n6Hj1dG+WKA5qFSa/yiUjJD9fsr4KRer/lcA4y5icaDTwVodzjim0iTiigYXk\nNeb9MULfTr7ocnMmzNl8O7cp7DH01HpkZaT2F13O3zSsNlo0f/+5Z5vppnuA\nYNmuUeJMVDY73Umob/3nrxelkzxGluaDZqMkNvSe3kIWUbkFjNoW1N+HjZfv\nrt4r\r\n=4XbN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"479f7ed4231dfdd84f63c72804466dd0c914d7f7","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.45_1610956760940_0.02206822648828055","host":"s3://npm-registry-packages"}},"1.8.46":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.46","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.46","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"69020f39d4844f8f340df9a69f9b53ebe391d86a","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.46.tgz","fileCount":17,"integrity":"sha512-k/z/7m5g1tWseA8ot7Li8vxmMskeq8C7y53/8B/TmJc96jaeoba2yWqv5VHkTNhPsKnBFN/uss9XVWyd5hy9+Q==","signatures":[{"sig":"MEQCIEIky6SUU9zATlJCDKhrIWxAmLtpxcwWPuPsboFAQ0IyAiARhxKrfg9CiHTWH0X8U0hHDznhIX6l6x5XJt5qRXCsRw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":390230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJBrlCRA9TVsSAnZWagAAD68P/3aLSKzX3+cv00WiC0OQ\nHevhaXlc6I3Pmwv4am5s2OKs9IzQTZE3VWuciKB/GBVnz8zcrJMJ6BRk8yRm\nuT3ok2U+NHLEzm7eTgCAk2RgFuro9/X/WuRtBvJvmEPVASjBtbbewuKy/73N\nwiEcDKXIssnHS+OI3QuatiPe38NKXRdeRJzMjgYUK6MeKxutErezhS5rNTJ4\nU3eGUdcNO2D9P2aya4jHfKGYzgcX2z91lxsVANmz5fNBzotDD+IFTlf9Amjx\nDHyB8YtlsVJoDxz+85BrBwXvIg+Y9nPSgbt6S8dJvTiOuTOXeVGiNJj+nBGK\nPM2i17kMVe3/nDMU+RXrqrs8w52QdbJUa9wejP5mxMYmZcDZAZtjROldnytK\nuJ8uNcpyUVMxnnaHst59zsW31kxMqxzzFQ/nXJlaLvaWpu8P6ue4j5aW2Xp+\nNkRT+D+CVUVKViiXZagloSkfsaQ16rNmLPnbbJ0HhYMYmEunrrzrwqfadWJi\nLGEcCeyTajX5w0RWv+wCFhtnox9pkjJbnZlkcjK3NVuG5deCex84WViEW4OH\nl7qTFiPGGooYyz7Psadz/RObUDUYGDxkl6OEnwnWXVcXo9BoAH1TiTbWejy6\n320PE/E18MSIZzcrm6q8XllXzBKBfGV9eD4xbi6TtPWwdKRoDmyvjbj61AyK\nzdwh\r\n=WHuK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"392ecabe293283a94653528487c7d6851c16ce55","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.46_1612978916707_0.3349808659766442","host":"s3://npm-registry-packages"}},"1.8.47":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.47","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.47","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ff23166cc8592af3ed59aea3b7b76ffb408e6bfd","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.47.tgz","fileCount":17,"integrity":"sha512-kNz2VF4oCr07DDya7s6ZoL14z1yMWwW3pVfit2/UOuNAZX46MSsV55sGK/FzO7+QtXWIhBJl32/+EepY9f19QQ==","signatures":[{"sig":"MEUCIQCv6GIF5EQfEia2HbRrr6+bpMOWyPESl/sUyBtwOkqm7QIgD2QbOsIH5U8ORGRvMD6VtB1BJjuZnqyIUuJa3V5NbGg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":390389,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJCzlCRA9TVsSAnZWagAAffIP/AkCYMZ4/eb3TelmI0Pe\nnkf/sxpnlgfqv3nk0OoMoerfJrQE8no+i08uQ2qbfS0z2FMuFw1oT6ikAQPg\nq6nk5ZUvDiDF3lvnxnlY15uKoUQwsowPRpCXoo4scQOEmpjazKqRN6j+r+kX\nHWccEA1bst0r2IellE2fDdOqOdLwfleTyucVXFYiXQUBC+ygOMgiW5zX95Tz\nZFQhxmZj4ON/rvY1aGnt3HhHE92mLPGGSDY2XeCnWRnRdz3dls4r5V7tHKia\nZgwv6qdbkz4qElG1gHpaK/5BOtOIoMuPAjCodxKYxENkXjSZIVy5+wVeBACl\nIPnP9tRc6E9e7WGBH9t9sQ5sUWBjzthHovT21lBoe3x76bZASyD+j2HWgx9L\nXE4Np+fmW3oJKLvnkcLAmIFetpaIDtVd09XZF+qNkiKRaxv7JIpNFoPVDtMe\nZDt3LxjotMb7cmniyYXKTnHizdVB+4kuiIPefAYcbnAYkvCr1jC6jpdWnRPb\nUW3m+4g/DAOugLL6i5Ei+UsTOuI/GUHWOzi52+MXhieMVCfQIc6QXpz+/nf3\ndfB4t3Vjws1f+p9RCIAfdXxMTu09rbj4FJF+K+UY/Tf9xje2Zw2YZPKEkB+e\ncD9bysWuv66L/oMXeDTh7fY1Q5upL1nU9+IzRXQMZJQ+6MR6mS3/UbXg6xSG\ng9fv\r\n=NrLp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"d9a7e7e229ed0e2f038b4c14f99c4fb723f9c950","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.47_1612983524638_0.23803180179926375","host":"s3://npm-registry-packages"}},"1.8.48":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.48","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.48","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3b1de42893ba0f626bdc169d9d6580f4a3c26f27","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.48.tgz","fileCount":17,"integrity":"sha512-JRJ5miDP+9NfGsoLM77POR+mmkQfxFUZn0JfmVAzsH4pcq6oHNxPzKlvxu+hRrepBlxb+APgFfDb9okn1na3rw==","signatures":[{"sig":"MEQCIC6pufPs0Hf2D7EGXy8am0tzURZ57YYz9jb6teQ8y1pBAiAa+eEtrdM+U5FBNbBU77mzCFoygkRt490wiU4B3HsqqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":390448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgNio9CRA9TVsSAnZWagAAVvkP/3c3mUBhjVRR6V8GTLlE\n45PF8l4xT5ZD4w+cjymFN5ksMBb1r5tUsHun64pqqOcnJLsTJ0FLp6UTQRox\ncb2+bmecGYRJp3QcygxGjIr/+XFO0yCOrqN/lxMaxr8OKB+2lLWVq70DBYOV\nwzSBPUlPHeldpzgbeKQRYRWWk+3vPNCVDBfsiaiEwSwAa+/wJjh/mAaalS7Q\nKIvbpI9lmta2g+SPmFkz+2+NLzBpK9Ox7FbeNYofKdJSCpYE4PjpIvrw4K67\nXvLia58L84N3kcT9sJ2OTBFZlZAlzpO3QSz43I8dG+uony4OqXcRK5f7vcNG\n7q9xnviPBGuq74ww3l5PdnBT3MqFpSk2C5S1+ZaKVnmNWNzyWnJ7/pRY9F7J\n4enyuJB/XJ2HTMYsCKEWYq58J/esz7ZRM8CCGlIdKkKEKK9U/rDDEg9AkgqU\nJxDKJ0/+YHfj1XvHJBq4J1yLMWDwjfTvpBNVmWoaOWnfCOmDUCsXBJHWdb6b\ntBbZhSBoDCaaRCOZ1qfy1BsOicZZAsf+6Vjw4l4po7b+rXsir3kGy7qDHLWd\nFmgPQrKX3wLZEijY8pd/m5BpKCR2wmf2SSRyXv4TOjTnahGFdqyv2gNmnSko\nA+xOEXGtZulhbpEm5W41Z6UEFfe+/FdhK8bgid5n21psVN0N1L6nP/pIplva\nkujQ\r\n=HTXV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"5bd7cf32bdb9c15d1d4b15db3e6424591fd1d061","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.48_1614162492759_0.9404926198773711","host":"s3://npm-registry-packages"}},"1.8.49":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.49","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.49","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c73acebfe005a07642d813b34693084378dc1d43","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.49.tgz","fileCount":17,"integrity":"sha512-ssnMNCEKMMddWgSOb2M1nl4Oxiw8H2PE6iKlfoEc8bMem1/pVToyn83x8mbANku9DxxWu+IthW0k9dGd4fscsQ==","signatures":[{"sig":"MEUCIQDyVDTh9tjk1jBKBaZPFmSJsR/1OsBtBtkdnqOmayHjIQIgVjNrjKS6VB48l1Coq91RCDBIYdh5tsglhjNuq+x3VJY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":391041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPJrUCRA9TVsSAnZWagAAKQ8QAI74YthX5c+g8kKp8Wo/\nG0pH8ttbIU3++b13SM5GIDNh2ki4epo0UwtH4ox2cDv9hLIoZoVPxJ3I+Acy\nZr2g03OZW/QoIExveMLffqK6z7xbtri8pOiJ/XzxUfk0yBgaS70eatba4qTi\nst3lSbrvhQct0bnBp5EqmINEISDx/chWAjKkAAwRE3I644VWtQJv8OcOO5xd\ncO9d5R/NELIHiKzSC5/l6oqcBpDDM2ZRPJ5WnJlFi5BQnRLVJ8JmXZbcV/pZ\nshSl4V82NHBkUwTqCi7lVY68tEMuL8bTxM18O4FN9004NBD2NtfSjpmTijFN\nrMUDtSSGotsBZZiZdQZ7U/19hQBE9ruxgoVZ93fxTNfHWGZRryO3VEi5Tbb1\nygW3qkMaRyzq1dtkLR/k788YwfoXrER33dCAU7pASXY7eGZmEy3vCFRZ7KiP\nk26LeVSLNJEWQrpUeFGmN7gSu+l6ehsfd5zd6NYdDacrUfiNYT8hWpyio43k\nbrCj2UJy/bTQpxsovn7OuTskE8YMqwitEPqrmJwowYFyfzSXDMfJJTTqFobP\nM6SKWmAfFWgElJ65GxTtBgf6z/hoxCq8WpqFNpJ4bHE1831f4EIE/CPtRadD\nxwv4kTan9TvaTNyU00KLd2Ig8PwL34rKta/smJ//5NdSmVNGAf8TP9+mGBuK\nHWxf\r\n=dGg9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"73097070477216a5cd455eafd72737b3d0b7adbe","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.49_1614584531539_0.01320768498508329","host":"s3://npm-registry-packages"}},"1.8.50":{"name":"@tilde-nlp/web-translate-widget","version":"1.8.50","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@1.8.50","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"386e0954925bd381d8b1dc2e1b049f8807c8985e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-1.8.50.tgz","fileCount":17,"integrity":"sha512-iqVzE+fKgqKmfcDGaqWqnpUUJ2KfjhEJQ2v4uBUs0oKWaDcPicaP4OBJ94ahUh988saea3rVqP6wVSU/zjQWFg==","signatures":[{"sig":"MEUCIB75GRel9WPdPOe+XdMz3PxClO9JJY7r0W21Dt290jSjAiEA3HSpnrbisnosXnXTUu2H8NZ35H2qpmB2WPoJbVsP8nM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":391064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgT31DCRA9TVsSAnZWagAA660QAJ78tqPbypeWG9U6wegh\nagfqkaBsepe5rPN03I2BlfATZYdZzvLzHvxTh3llk2gAfskLlEpxh8gjfuNJ\nUkF+nIUZFJakva1FYmOzaRPr2ygcQ6sn5iO17oz/1Fucj0WFbEHsQAzDHjTg\nrir/IZwTHg2TjLDqSQWcDjwhrjwmcasHbeRQTc0lvWJ19I1QvVGLBjgj5yq2\nljMZOnbIpHYWJ9A2banYWgnC+Rc31k5Hp5Mt7soaBTvo5iITHzn74IXCWwcj\n+isGA9V8u9dBVOseL+olkXMz521WG2RkAXcKZtC3bYFInsNhaYOG7WDDoIvu\n2cqnrTWgXIwZuNfcuzIqCd+fbK7+6+4fS6EP8HoeqJ4cF77F5ePgkeo3i4M0\nineDp8ELlTKJX1VSBDMuk7CapedfGqmh3WDXGd4aAschPGezB93uR2dVIjxV\nfAwkM4RZ3xUh2MwcFL8KNbvpLTWwf3+PyKXmvfKs/ihUv+98Z7uD5FLA6J0F\n75JtT29nNpPHYRRWEleT0j/6Pqho/eMIPqMSs7ngQiQATqrL1X9tzuMYaXTh\ngQh91Ga87a0pHds+0nlIuD51kRsUoK2JJtV33R3TEy0WInRgx4rktU1CADgQ\nFz0CIPFIER7/MUrIrfN57gZXzxMRI8viJ4oVLXzTVyiQtNgczLg62i6Yt0CL\nFQ83\r\n=56yR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"db7d019e4af2a38a2598d25c8c499765060defe6","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_1.8.50_1615822146709_0.6720937266108964","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.0","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"56c140d01f0647b765e1f482da16a97e5a278a57","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.0.tgz","fileCount":19,"integrity":"sha512-nlF7t/U/yIT4FwzyXtT9Mlw4E2UmcnsK9VqjTW7xBqZc8fOidfOX3aTRYPVKE1pzF57cLHu6mWPvRZ+6WLtR0Q==","signatures":[{"sig":"MEUCIDvQukGUqJSK7yCA4T/DTWDVn9mcjy+88qmEZ8FI/SIcAiEA2jZxMk9CdcEjdxgbMJOOSZzMxk3MuCNDz0FVvOSCZpE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392107,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWvbKCRA9TVsSAnZWagAAHJMP/3Pabw1dfnrr79w5QmJV\nzD+SOGdkJwednuQjMrPDseRj4SdAP8ts2/J543cBszZpih9wSBgaXiXgNL6e\nex5eEESkkgExXa+IvVGf01v6jtAE6IaQG4qg0yMWtcCZrOubPvbf1ts8Yl4S\n5GCdCkhyaBAE0U+K0o1lcJvQwf2krDfAHYNTMY8p20idrELpSkI/nsFSkuvd\n08ae72m45ZEyN/Qiffkjn/KDPzdWmvrbTKHiyKNShhv3N5BhHHXpiIVVWEK+\niN1F19SB4UzNWEuay1RoS+RK8AAY8mNF7VAS1LY1QBgFahWVG+mgx+YvvuKK\n+XcasL+QuUbu+uH9L7+DUzI7y5kwu+tDhdmPwnHTS8bOPINWpdILyOpc00hg\nBZinOCg+qVo4xWakyx9rOxzCpBQuLmI6fbVotOFCMouefncApoOSdLGHnXmz\nNVY6h0EXHeLZ8RxsWdc4nBtabRtFHuIZV+dI2f9Fg1iv5pySaFnuG1PuJ8qb\nE7WcprTz3xDysvhyql1rdUZuvcTw9oyoOCarVRcXvVjiy8oKj1HsIi5hS8ft\nJcr1HM5FBn/YIGxn0mVTTCr52j3CyJoDnISwVxxK3AIXj9/I61TMvu+LiV2o\nM28iH34mBI6nHb/qqZdoCwurwId0dktjJIs0uTXulGVNriJZZOnBw8cAFLAS\nVt+w\r\n=yjro\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"af28f2797c5b2dd7b8ed0b9f59e609f15da83aa5","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.0_1616574154220_0.6933183550325686","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.1","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ceedbfeb68697a6da88aa7babbba3657091b6068","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.1.tgz","fileCount":19,"integrity":"sha512-dlLW76SFEf8x5hgVL6lSnJYOIhBbJ9Deo1U7GzHuIjZZTnbA96eIZtM8ck1rY0m6PnAnoHENDKS9ZxAYbLDPVQ==","signatures":[{"sig":"MEUCIBu5KAnVfSkFg3XMBfX0oClCEeGVXkOnY+7bX6p3Gp8DAiEA23TNCNQK1cXIw/qvydpp2uBWZsW5X1KqEgs+vR1j1iM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392096,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXD7uCRA9TVsSAnZWagAACfQP/3fCrVtyjNY5KGwgqnrX\nN6I1LYlaWX+IGrxUKAKyjBqNt+EHSyRUySy8DB4FbYPA0u7j08stpZnFkEjk\nwcJbDt2VvAlMEDS7hPX7lqWpi3JDquDnCjqCrkRAtUdHyy0EV6WGVrFjSbSn\n4iHtYYb76eSkwsKEiYn2Av+9MEGhYXdU4/+PPdrE4Mkgx6/nq8GuaBC3C3C8\nfvsBI5zkWI6pE6PATjgt7cUmZppfVSEvDOpyDVdEuj5R99rc5XiOHoaPKD0M\ndr6JkXDg7qcwbTo9E/Y8JNIzWSX3gzN/1VBR2q3EEp6bDHX3wVw7XOvUIZ6M\n0lNK3wnslBxh7xReWG4003+ssV5E9cC23GZFpfOaXRW8Z/ZAnY/T8YAVdxwM\njip7uzH3Y4nCF6yParPSdKRm6dCe11RurOkF4BV/wCi1T6DbL/AZQd6EW6A3\nWLetpsHGk99kOSspRDkISPbGFtDykWMNplKe51K4XGe6LmZtbRTC1ZRYkul0\nfIdWwQIL5LZVIHNc4nFDrNV/bUDSEViK++YX8NX1WPz0YEUZoreeWdD8J5gT\nr2gyP8ozG32xBGldU7Op4VJJnOwjvYfSyfmML7BdyOUTMQrXdtiW8t3phpJs\nlXEJBBfKp13NN5zb20C5pFi9wyYkmDFrmL1VxjqN6kOb9C0BqyV8WQfXoAK6\nZd5t\r\n=/BuB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"8a8d53ea0bae279f5035327db1e7eff500afe022","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.8","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.15.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.1_1616658158308_0.09086279542572506","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.2","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"919df55afddbb12deb1d391a66a0556218e95e69","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.2.tgz","fileCount":19,"integrity":"sha512-LX4aTPuh2XmcFJt19ioT6dB6N0gG1omb+8A8MLtfILwksnjRTKZ+GXXVGkV2zvaTA6Lz5U34rujcgu5D1YG+9Q==","signatures":[{"sig":"MEUCIHe6ZbxEfw+5BSp0rTPFlFsb69UPC7vcicpaAUF26wucAiEAoDlhmboD0VFLkYqYDjfrE0AK678xnsdB8ssZR1qew2I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbWQYCRA9TVsSAnZWagAAL+UP/1lbpQaHby1RQwAbr5O0\nMHZo2Nzjt7VVHTVu6WBUUCxkHvL3she/sCTc0MAeC23cqvqzoMm07HZzrfkY\nuTmNOPs/KHFGawQlPN3iEgDLhP0U2QGrEBdWCJ2B6tnNdJDgvqeNPDbo7lCS\nro36OrjG7vVQ/ZNklhYlwdYIwzDFXycltCg0LxHf08Kdndn08hIconA13QX5\nL9bJNDomko/kM12kvkwlmGrajikGIYLjMi9DRITi3IAqaeSRQPAvvfLxjF3H\n4wkSmCJi5u3YhkMAq0tnf+ASvJMKqzJFdZH99s7rZCaTQFDsA8tb1uGRyy4d\nBh/QnfE7cy7OuutRJZWKtB6in7p8IJyiMu/QpfS47kgeknJNV0rxzwmn21JL\neJV5owuLNnmmUFRIOYYRCBH6LKwLd139GXkBWGFsMbk81qPPf0t36SM4p38c\nPqXz0i0cMoOTsKy16+MhdqhayVxUOYyIh7xF8E2BeFFzRo8e1s7yfGbeBGxA\nglLhbaG267PLFIObODW65s7CXJ4ISzu+gmwm1QPtgDRe9rRPmZbW0pt+7BqK\ng3lj2J9XTQBDf8pesSZ/VcApXzNxA/S3I6PuSYATAghMt9TZiqGPFppdH87I\nsFRHTcMukwtGXGEbN7VwStBK75ZpzSL175LEfGtZguoZ9R4QBZs/LUCdyXO/\nI+Rl\r\n=jdQd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"8b82447c57deb01de1e7fd2ff434ac961a11371c","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.2_1617781783777_0.6567090282019015","host":"s3://npm-registry-packages"}},"2.0.5":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.5","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.5","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"9020bdad9412eda5f69d87ada37a668fb836d041","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.5.tgz","fileCount":19,"integrity":"sha512-QaTrUc4tDVNgWpeW6aSiF0DfY7Dd9NBUV3to/4dWniYpSPqKqKZ6S4U+2cmrhqoOuTHy9UtJLqp+a/EdRPe8Bg==","signatures":[{"sig":"MEYCIQCnFT7ftw7ysveUavyLOvpOhA69DEIUDNvFcjlxirMxEQIhAJZMt6/xml3dnklN0xcRshJoXB/wjVXAiQVASqt+0qwN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcDb7CRA9TVsSAnZWagAAFxkP/AznncgzvWndm5auz1A7\n/2k1dofH4V8v6fUMj66mdGv8MaknQFokFxNO+JzK/1KA9mAJcj3tU3SmVCOz\nUENkDxCdCZmff7mf1ulD8GXQsHlP9mYEFwjVxBctSnqGIlKp3v1RmPQxZv8Q\nK4KQ1P2CNAWUiv+rFaXJFbfPsW2EogMgqp+nc6E7n+apuq2u1NdXQyQGD0Ul\n35d2XxeQSoOAgK9QCCXP9RpNr2q+kTZQCfIXsVYfonol2ma8ohVB8HVSQSdR\nKncQGmnbr68XSi6JsAZyfQ8u6Lv8sZla7qXlQtwjkeQO6dOr0oFA2pOKi/UL\ns81tXSVQOmVHAUFr0ZqHWYuls8o2MR9VsRJxCDx3rOF07KT+dl5r0jDMiC0K\nRmPr0oyV8d8hTCDKQ6YKV103jzV4YraqB3r00LPDXurLCQZ7bg+I1s/hUlYZ\nn1xjqwVtPgyyFulxqT73Skzto2uXDVA2p6GJiM2xEf5nNpRSpCiaGmreEUru\nDWlF+co7k2DZwAq7jgVyaixQlOKwAo9wI2fIbcJQ1JfC6V6On5FSjAUzTxJK\n7WWrrWM6ofHmqcljEglNJDNe6nrtYW+2PdR9Pkoxtv+zkFhkChCp+QTzzTP1\n24vwYvyQ15+6/3ZtNkQ4PpHmTOicnL/50FVAY5oKSjww/lgDvT4Nu2nJwS35\n8UTG\r\n=P+b/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cd6b94503c44eb146d2af5f53ab278fa4548e8a6","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.5_1617966842538_0.40091132345971414","host":"s3://npm-registry-packages"}},"2.0.6":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.6","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.6","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ffd86a64cb3761b4e665e105274ecff3294ab87f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.6.tgz","fileCount":19,"integrity":"sha512-HwYT7V0z3omS5nn/pbz2b3VCAj7HYYMFuQBw3nc9ePlEgfzMYh5lh0OJ20/TveTzLwveoGfeODt48ByYccbC5Q==","signatures":[{"sig":"MEUCIQCBLds8+SoC9cf1P4m0RjiVEXrQjyCXdjqZeJRmOKPP7QIgE84q9/Up2a5g7fvMgpKMuQyGsMZ/0UdFvCIqnuGtA0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEAdCRA9TVsSAnZWagAAf7IP/1TzhxTU2izwZnIp0P3G\nu5q1IoBRIbNyC8nBYdpPa0vC8e3cuJvnVGfL6pPF4oJZ2uBOLNAqxGwF1oIi\nUdXcE0Nu2hBV4StlELV+Ua3tW+/6OtZHrgjAW+mQWLowHsrBUjYArY4J6f0C\noJq3fU5+kNrb8UNzv8JnxUp0lL6TOuaxgxm28e9ZISQH5kbvPxWJInU3nsSd\nd18s3vs8ftOF8k6Npm6fuF7p4L5txppPvWCyIu6OPmrrIOHAr5CvyJFzc2H1\niEhCDwUnj31Y9XBeTfnjCwui2NovRsl08gP8ZJZPSj8vPkCDUJ0T12Lw9d8/\nM2Yg47tfwHYc2CI1hoUgPWeM2VxVOC7lQxm5cUWjwSywsLCAuu1fczYO7ncR\nlIGCwe1E6XyiIo4sBkGKSKH1A4baoK+tYdV3MkXm2pdeMHfPcjNC/ODPs3cE\nFGbknUJofU4sFkPpWUBpD3zz6r0xmJMhfIq8yD/MyvMop4By93lCK8rSlSLr\n8w+Pc+dpK67lqupPRbQe+/+cW4yxa+NPbdIwzSZZGeIZiukZHv7B/JT3Kz1p\n9xvNYJJNf3BmjfskX8YYwrvlH7KxW4G1hwG/TdfZ9pqjMAdJJdDIu22YQvMk\n9AdbDUsrS3BNvRy1HMd7XZ9t576vpMn1j1okGlzK8NHTVOZRUSEYEYwsPInm\n4Wpc\r\n=KeZI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cd6b94503c44eb146d2af5f53ab278fa4548e8a6","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.6_1617969181242_0.4273282148111863","host":"s3://npm-registry-packages"}},"2.0.7":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.7","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.7","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"de45962ff06b7b63716f1ebda75ec8c54b46acaf","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.7.tgz","fileCount":19,"integrity":"sha512-tRkF4TQ+C5s2qsrbQlshWo7pCsVQ7eM3ulJhbj4c/uGgm/0Jb51XidUenIeRruyrj3qMKyhn73MO0FbeplAnkg==","signatures":[{"sig":"MEUCIC6UvzVqZZFyPvbqkRjvy+aC+qgJ7QnobFs9slJehPZyAiEA4lZYifmSkcAgZQCVACI5p9X2htTdbCFhCoQOSSe2Mao=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEO9CRA9TVsSAnZWagAAXd8P/iyn3UHlM3lcnv+9S9Rn\nOmWfelItJBLBFjzrB6NOrdRTlxAzsRsTdMVwGDO0nb5nRepC8YQjWIe/+YcE\nWVHfLrlOYjf6KqVPNBkgwOg3UavSbp04MV7Q/mkffQsQdiGaDExVDR1b1wRv\n/Xcn15YqRHdo0ODFChwgBoB9Ms9+NS2KD8QiR+LxlqAnpBgEaupdHwiom3bz\nO71NmJfxKoW9w6gGGqjgFW3WiKUpES6Fn5mzGi2Id3apJ2Nm6ZPWdvQccwDA\nJQYYxYOC/1VehceLz4aj19Oo/gBNrhYcocfDKtwcfiNT9icp7HCwhfqUp60l\n4pAkoWJQoYQBYyai573AXYqXpIOPSaefIFpak9ls1xrFbCAMIHcsKvPjq+aC\nA2M8CwBBucCl2P7beGuZgZksk5IDE9WwWT77uBsC40715R6ruIt/4PdveFnm\nC4l8Fj5HzYU6JDm/wHCWjWd8xyJ+NW0Lah3Bmn57zDdp7SW9+/W4VfxKwwDh\nUUcW73h/sjyoGi8hod4Ih9EFKvAsM5Ahvf3KaTxT1KRDVTr1bHQeDkgxldHN\nXNJxYQgAw04X8rSGb4kOArFjNpRiIEkpONgJn/EqimFTiiF7pscGi5P9ha28\ns4YuNIAGSw2P3RjtF1RT8RXwq+oi6r7quam7ZNH4xPwhFXOsulE+STyLADEV\nQs+z\r\n=ru0k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"6bc6526664e46e6c1ca3f202ea7f4cdebf146d80","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.7_1617970109076_0.6193242081465946","host":"s3://npm-registry-packages"}},"2.0.8":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.8","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.8","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"36c4b1b09a2178eb36576227627c1e7091042b9f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.8.tgz","fileCount":19,"integrity":"sha512-5KnxXZctXTtsc1RrappvC3l31Cm5EZKiCNDSn/B7tdl5XR4NJrguYShYZCo1Y2NkcTeC/qhYXm/3nbs+82pLwA==","signatures":[{"sig":"MEQCIE0dMM/FsOuK9g87Cnyf4vocdQZvnlrCFZ9OQs5w5y+kAiAHPnMiWSToX55yyTRsqhW88A//ZIyjTCxykljzalHrUQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEW3CRA9TVsSAnZWagAAUV4P/1Tl58aKrFYuGrL3gGk5\nfpR4W7rO/tLTKK2tCgmMp2F/Eolpk7n1lJG1EeN8nykbGlNe80exXM2iHojI\nCVCcG2R/MNvUJki14SKI9N4SfbF2AxPPYlLzaSvJe/avKFgUqAwk16hx3c8N\nyhj9pjHsJNKblWc4OoynFBD5k6jc9YyE6ZJxLYEOPBeY8sN7SdjP/YtutpKd\n1VFZScDg7+5Xh4hYtVOkimF2F0+T4lcaG7BJPvOtGs0W5i88TemxmMc3eEqi\ntLPuo0PVQSHQpByTMFr55j5lsgsz1kOoQIEP/cKHj00qxoOPOeaiY9SzT3p9\nRtSzWy/rkqkHBf7iI7GXuKiVKNydHnJ9eAk5WLdZjCMUcih33uCihlm2Qh//\nb/XC4mPy81SEcF5Ky74xFWbL1re1QtVbuesrQJR25Vwvbe1Fk4VBEKksc901\nGhAtjGXeMMmHkO4BFTk9cO1HJ28marM4au1GjzX+YEF/sjcfshoezDbuRE5S\nhfMiVLI7TZrWoq5yT8ml1mQTYMaG0b2N7lxJChm04Td6c3RPQ8oZE2F3a6AB\nWYPe3ST5zV+mkuNaUpZGgbmaiWaLpcAMyRJwMKzXYJhitjgYp2eJPGvGRooO\nw0eFPd3I2COcRbDJqnMlUdP5yj8SKpNpS6dLcD1MsZ8dGlGcl5EjNDU2OqoW\nDu6Y\r\n=vWvb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"6bc6526664e46e6c1ca3f202ea7f4cdebf146d80","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.8_1617970614944_0.054413983740138505","host":"s3://npm-registry-packages"}},"2.0.10":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.10","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.10","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"115840153b9824095e39bb1d7ebae4f3acaae07f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.10.tgz","fileCount":19,"integrity":"sha512-sID/14QOWa3jrWlZ/mW6ZZsabuxOhw7IGFp+9zEqaUuQCSojnZTpOADUQFWJEwECgV/6aFsQGBNTGhjNudNi8Q==","signatures":[{"sig":"MEUCIDYzm8b4wNdJLxQlHaD6VmWBikvQHrRAiwzL9xUqJ2/6AiEA1DSa4tZc6WPsBbCD9HyAigL/xL8XjSUn38CjZ+PRymY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgcEdNCRA9TVsSAnZWagAAZuwP/iW0TNtl1MaRYCIbCUQv\nET3h1Va4n0m5jjT7t845gLH/t6bpGF6+XoQNLbewdMVg9b+neEHWhh3HYjpR\nSuYvszYT+wxCe7HHwwQGJCv+XqKiPKI/cWpXnFSEOyuon/NkHrSm32VqGCmv\nEPCNWPpDP4LVbZvWOiXMHtE3kFslkRC2jX8Wqez6rK0p/koULkPDg38fv9Dq\ntjPXPQwPGA+yNz82Vc8hpgEqOzs58x8sxPG4rEeowaFGxdneBuKktRPstJB8\npikh8zFL3JmZ0zQ9BMk5R5/3Qkvxk0TJ+fbpWJAVxxdxFSOF26IPN8iqwziT\nAFKyMHO8Lx9qgOZ1r7RcJMbcLrSMyiu7mkcZ4Qhz8Bhd9oXztMheHPT2g9R1\nddDvV0QFTpyYdfiF7ZR0t1sAlnjGy2pTQYUu23LUgpJoxnR3jtuul8833y9P\n7KzEWIh3JsftxHoU2s2qTmekKB6q7vJSaUhuzMqRBcWFvaOat2oTgwyLSFnn\nQqDzrLJuE5q9slpcntjcJjo/uEFx1S0CUYDpIXj4jpF5InUcfnOk0rHLSsWl\numkwTYhRmDx0BMfg3/IGzC/w1J6IAf4xd5F12E194WpJAFRhmNU1tHFlM4L0\nou5OmnNPxN77hQyE4kAyUlMy9tYAwpQEMFXnndON7RxisDGU6rUJ4B+Hl5Rc\nnXxH\r\n=bmcv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cd6b94503c44eb146d2af5f53ab278fa4548e8a6","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.10_1617971021373_0.9825932477179453","host":"s3://npm-registry-packages"}},"2.0.11":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.11","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.11","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"eafadd9739dabdedf1e56e5db7ec855eaf7e181a","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.11.tgz","fileCount":19,"integrity":"sha512-ofd6c7CXevPiXf+UHFtAp+v4bH7amnyqntUgA6H2bJ8EnH70Z7V3ngSdU/8bLFrXp9R2ECMG0c9akki9lPpkig==","signatures":[{"sig":"MEUCIQDmMk3HJOL5eva1D1mlXsZb3mc1uPmy8G6jm+sGW3D/3AIgJ/FhJSLREkzCwxktpRE65sYcj+7WqTMU1uDvCVTYG70=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdpNbCRA9TVsSAnZWagAAr2kP/0EPO6sIoQQ3/VZ+6cZb\n/IB/OjoloIcEFbKtNFPKHZgyrLs8ZIUFHRMjboMc7E7osGnihzrTFeps8WCS\nvF1z6j1sCVJa866tHe837oIjJi2E2gpD8t7f+XiZ5tbJ/CEM3t5w7ilS5Wm1\nBlr7wWjC797eb8Cg6XLfSca/4s1yszJvoCm39BobN0K0fei+JS8I49M+VxpA\nwp56s1OM1SsAJLXTHqNjUsZwfSL37M6Ke/oZzUM3sqGjsq4vHQhqjlh0nMae\nH9haIYtvU8LlfNcjBSdl+xVXn+XQIffHx5HtR+1YUYRISOvPXNer9xkKWdUB\nR6/mKyRs9s2nSJ1EvZ5PYIo3WX2UFwLJ+/c7xBi8fD69sAxyL+c5FkcQ7Oij\n69uuT7Kwd4aQ1mN5WVQwIF7FagyBfDPr1OxttoV1UkKzcwfzSP++5abfTJu6\niem+X99pQIEOv4K6i/lHwdUGY9q4SjUwwycoyQoJyzOqaWZ7EJJHVba3Q5/p\nv1QjpLf/VCxRFFA/hnQCPItNIXTisa/qSV0WWaORjrxtDqMReNPOuHpNX2N/\nndrqrWlW9ce9kD0JWf8XQtdP6Rgbw3zZ1eoEOeJ+7QpfARP17wEGJW3L1UOU\nTXkIBp1DSzc5og3bFJxKdNDTHub1iT3tjZUWfWSITeT9AdBeQtfOVMDm6vkF\n6rxr\r\n=JbcS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"60218b535e47fc83edaa9d0829f325244a9f696b","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.11_1618383706578_0.39643377204456653","host":"s3://npm-registry-packages"}},"2.0.12":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.12","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.12","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"0c686e778cb5c050c0dac81fba91f6c28aab72e2","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.12.tgz","fileCount":19,"integrity":"sha512-o14PX0Gf6K57SoTpdX1rr9tSIApaJjpEVr63u/mJ7bJYZVWAm++bOAVuDbnE+/jXykcU4ymMjIpwDfZaIcAHEQ==","signatures":[{"sig":"MEUCIQCH+PmRyN3YoCH97JsMXxa/jtV97fE8OqBCWj4rMBD0GQIgFwts4Yj5yde0qDBFYE1cD/Zn5QGD700HxEWE9HSwqaA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":392397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdpO1CRA9TVsSAnZWagAAXg0P/3FYm3qajniiP2pD3rLR\nd2U/IVEHtKnZF/QqAWStdjd+7dWZBK7TfSFzX5DVCqdWe2l0GdaQDtcP6XPY\n0UiHLJY3rz2CoZSIbtzHeQImz1SZL/yPYcIpHA7fGQ8weFWt17LvSUGZ8ofF\nsHCGVhc5uy7fDLr3P5lwsxPVHv/QWRNmVKom4HlOLxiIr/HeFjE6xMrxWArI\nMvJ5gbsxQVC/Kz2hshuJYSnqrTsEcASjAKCLo/e3TG7PBRHmNr/PI0tBhrto\n9KY75Ucil4u41HgUK5qIuh/9Y15CdDjTmPeKdNnO4ca7m6lJ+WMlgV8uZkil\n5aD5Srzjx1reGrsSfyj+DL1qlSOAvIyxqc5Whc+zGLjgKPfbcw0BTGCNGc5v\n68b7fmAM8b0UVd4gFwISg9jWrL3J61lafytr8afVXTkrXSr7Kf/RuU7LpAbV\nCcGm+oUCLI5x4VzoMJcR+e7VBf9Rh3Hb3/RiUoilaiNovSDaZxI4PtcAHOE9\n5c1m09DAsj/H9BBHgvllA2iIPasAyC0CT+IBN+E0qcMuXizAsWTyibFvbBCi\nB6CVm+5ZmJ16RNOM0wAmE6T6k9QsOJGdxBXsmYSzXH0rCsJOmmLkF5uVC8LZ\nrGJnOTd5bDX5t11ItT56c+rJqs+zIxcBNa8mGG1lX//EuqQTunLrQnQnM8Db\nFw3C\r\n=wg0G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"3f8701c75c4b5d9dbe1f5913714c902cb64d5700","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","uuid":"^7.0.2","axios":"^0.21.1","core-js":"^3.6.5","js-cookie":"^2.2.1","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.12_1618383797381_0.656063280302396","host":"s3://npm-registry-packages"}},"2.0.13":{"name":"@tilde-nlp/web-translate-widget","version":"2.0.13","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.0.13","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"af1de4a28c9ce0a3de1423bec8d1195cc3090b52","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.0.13.tgz","fileCount":20,"integrity":"sha512-5winvLJsxWk0mcnNTUlFneNj6cQeb//XHLsD2MyZ1nt2N/W61KCSW9mt6UuZx/JrvGZ5t6HoucPmHZaR9R54Cg==","signatures":[{"sig":"MEQCICBqPE+EfKUBfClAqA5dptv4IQyIN8qyfffBovJGoE9hAiACRpy9y/EwcONHyDm5L6skZiHUdpU+H980VpcjS8CT5w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdu5HCRA9TVsSAnZWagAA4LUP/i+eyTcd3T/HuzljVent\nOSWUJsAejHh+SWpACoYdgiI/Rd06w6TE9yogDbfXnYhG5kNsF4hj1I6H3NPY\nP3xoYc/HacVAO0VyR4EBIbYZGOSws2spmnKK7CwkvrvpqYmXXzY0T2NWiYRP\nC1/zatgRrkejl9M4nYNXP8isR7H+mDvbUSMnpW8vkRp9i3m/qpcyrT87wd0g\nimzUXtsarzFoCKyAnWqYxcRPX9morZeb/DB8FbzsGvTqmUk1YZGLVacxpmmd\nfk99tjTwqlvylEzrLDAZBJNEbKogHZfOff3JWqRKckJpC3B6H/ss26fvH9Ic\naowIRWdA21oEe8by/o86AoLq6FVV4XskmZa6TFrlFK+Lg92jsVY0o9ZDNFnT\no8rxx80hnjWj2kMHJEesV63GQmyvHk6OLnIbkWryN4V2+c534bBq9J47Mv/I\nReXzZgHRD5rGa/PUljTiU7IlJYp168ibIVxRNxXJ/7b2BP3pEgGsmb9rQS5j\n5VO2QTTMqAts0BXi03TMkiIu8russjQebQnLyzMkqybOA19CPnKiQZNCgfY7\nq/aoGCnoKfIqKdePDuXE7pBh1Y2sZotmoRLLPxySc4X7SKXzresbqZ39moKS\nrfDjEa85vH0hCeDr7yIjU785GgDcXMDBPVsK9zIyz2LCpHovbtzpxDfDoTNr\nzo71\r\n=Djjh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"7e955945739777773f00d46478c8c16678b0d5e8","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.0.13_1618406983310_0.07279577640515966","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.0","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ac3e9d8b0df8167a31ec07ebc15e6422fbb1f45b","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.0.tgz","fileCount":20,"integrity":"sha512-UwDh11pD0E/wRC/Eq9UjPXOOgIHYN8J6tPIIbIkJzn6MR8uaeaOQez8ZFaEBL7ZF0TPQR+T6IRnBVWdS96VD8w==","signatures":[{"sig":"MEYCIQDZMm7snAhWQbk8agL+/PSkXdv2k0aagAnnZL6DY82TtAIhAKRaVzgRjfNsb6VTpFpb8uvO0FzBP7yWGEJi2UtV8n6I","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdvENCRA9TVsSAnZWagAAFLoP/jE2dGH0gCoMpsB4ejra\nbJCXPAZPA08DBTDnAltD245yF6Ueov0vzzb1gwQxdtaOl8KKVWHizPp7BWBK\nQFPVaiPw3Lo0Ud6Fek79KIzwnUsfGlk78ObYz0VOvtT3As6yTs4/o37ZyBxY\nq3b92kJB1p+VC07yhQUOMGmUJAFu54H78SuRJf16T8XCm+jMmVPV7pm3wU0q\nezPYL1/ENJBtDJM2fSWOhGuJynoa4CfzIWxn8X0GgSZ6f5fAg9H2sWUf5VZS\nJKRDiWK6uR7A11/HP/EclO0JrEZBiqpsMg3Q0uO2ptwOXj3Glixv4NE5Nt1o\n9wr70G0N3znAP6B62GeFjUzHuF0N/9+67MuLTFuW5zw585d2xM+tps+WGcAj\n219pgcBoLkKJVz1ZoyQ4w5/YMC32ULgkFUmDhZ0/EyqZA1Um5sP+SaqsO2uC\nyEBP/86uK1aaawHKRM7EU3arop6eXxvbcOcMMC4M3YoQzzDRn0wQLbeyWJ6+\nSHi+xIn28u/ai6sIDK2d/W8gIEKjH0vNBTZaARTOzgyOzWTpwLuSDN5VLbFM\nHHdKOBbJC3HfdIlW3EcUjSbkW2QTmVV64v66HOBHKQXI7fcvP8BIUrmkOTOX\nS107rFucLNzf/PQZcGEoQg+MULzWDjMnSDmQd/hxE7aN282LUy/unaa3k5J4\n8oIP\r\n=Fo1k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"4320b874155018c4a57ef74913f0757181a3d9d9","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.0_1618407692706_0.7416336323633039","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.1","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ee7f0f1b4821e51fdc38ae2d616918c978000e62","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.1.tgz","fileCount":20,"integrity":"sha512-AoYOpJFvKUUc5pCQbuNHlSHsLcBfGu/9f1k8ObkHLn8XYdRYNu//IRwxIhcn7oAEOR5AgMrNYlOHWbpYLKSUBQ==","signatures":[{"sig":"MEUCIQDsQGc7jxO6IWln8daAM0vOS7mQ82yfewoOKmcKyH7dfgIgfKIjhjaYmTX9VYQzIHp2A5bphq097742nV5YZa+O+Vs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426942,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeYUjCRA9TVsSAnZWagAADKYP/i1FRdgMqyN2rdFfnPwv\nBdTc/2CFkVo3tWwasuzupMlHsqUwPmv06iZFJBe4syTrRWquAd8pj1qAYuQG\n18jO+lBDi8MIC5gaobEG71Yogee95jQQIeF4vkP2fBT0T/0sP0yNQ506zejY\np8BVXJAKL1VhJXq90pfLW+95PQG7VlgZAPpsoZ6jCIuKkmqLkI7BLk0hmS1k\nYIgGCwSFSNB0CQ+2MriyqkZQ84OvT8QBSiZLfjZIIShYgIo5UPS3naFctWl+\noZnhHgVI6zQ66yCeROGUnRQhhw4BVapM1GVsy4iO1Fn9gJVQsRskrKTP6Nn3\nS2hLCZ6tup6Kll6uWrEM8laAEfGru2p0Sj3V0pcNjNyroeqwQGPLk9Ug+OPe\nsQ600tgWE7dRSd12OT6P1kSQ4/t+scVcikiMNPJ6s5pJN6gydbQ8K9d+KmXi\naLTW+DjR5XFQ8WWh5yA7k1SpqhRJOfE2p8JJC6wAzkYc6kH7gNAqaHaKNEFi\nYxXDRwLc8o69FaxC8FRiTFDhhfyxHZ2N/f76u9g07dWI7jhAw/AlTp0LCqoe\n+YLT56r5pkDHxaHNu8azGN5JAUdcHavQZVXP+pEEy8JtmsO9708BSAr88/AD\nXr8Dhc9jpCujnV3nKpMODqlKguomIhbrqwDbk+LB/UAQzPpIswDWFmUCYkpL\n71HL\r\n=GfPL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"ad3e1d84ffd3690a923b78db994889e8b739be0b","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.1_1618576675266_0.6960053480754065","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.2","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"19f465ab9fb4989503efa509a32968007a1401a4","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.2.tgz","fileCount":20,"integrity":"sha512-QjYBiPLsqz4lgaK6zCnXOOnT4VZgMSjJkyVBkmaHe6QheiGrc+IVnwfrZa15SjIc4B1feNBHVmkFmOnTytwp4Q==","signatures":[{"sig":"MEQCID2tUsiJuLyTGG0FOmj5PWElNBbA4ca6ZLXz0T1rVN9QAiAQXfsYETNXHO4Rwu4dLXmm8c2rwdl09j1ydm2ItgsmxQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfTziCRA9TVsSAnZWagAAnKYP/iYUMd4vxK15zEtEMXz2\ncAH3kFSAFDyqE6R1bLZpXo7yq8iopmFFF3egqSI9BHjStr3aM1WUd0zUDulG\nA9qM4eR3klNpImDrrljfW99Fy0CAOCqJPJ+c20Udi6yOd+GS9B9aUT4dC6m1\n+V+rKp7Qe6gKR+fOAA3cbpG7bOAP0GO6q4HWwyJQ3Sf8HDS8YNJxVuU1PuEu\nCBBe6Zgoo97UzxroyJ/r/4ehDpGoqJgr0Vxzm1PfzhZb6qpww/+Zt3Jd9nOg\n3HtrRXkx50ZGNYno1NlYjR/FVJc8XTjZHPaLtRvA65gGJHkZA/gvMljbl4lV\nTYGTHvGFyraHeCOyS4lMrcNXor5IR4CfGLXoeaTSRNKVUhB8s5YHBJt8RZQQ\nEFfDyvO2YYjFo8+qaGb5n5WxatXRvKl/75NwsFrPavUib0m9FUKHjo6pOwJ4\n78qLnrposlBWxqbjp6L9RX5PonsQyiFWjmu92LRJzmNAOcKqLTii2URS8+Kl\nPkQevbpEaEiqRjaWXY/DLqFkctC06e7HCC/G5JR7DybR4xJ1o5ZxbplhONO9\npS8dbH5KZgVjh6aTrYfLOzjLViOVuGaVIWkyt9dV4N7awChv+dBcAQB4VFJg\nOhMJGXDDBSydb9EuPqGXNyPQqMYfOTd9T859r1MCtrV+Upyz1bEc7R5mDqjp\n27o/\r\n=RFZA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"8cf35b4ad6faca721487799f3c10de359fb141e7","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.2_1618820321930_0.2865293380280818","host":"s3://npm-registry-packages"}},"2.1.3":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.3","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.3","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c9bdde81406690939d711ddd6e84117822fb0325","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.3.tgz","fileCount":20,"integrity":"sha512-JbgUhmH22hk1jJg5TLHhTzElOPFo1lapTlV6xWpfhP4d6zr8duz11cfz5Ynad/zJ79L9A29Smh27ijxGmXm72Q==","signatures":[{"sig":"MEQCIFyu//WrvbiVvdX1DQweIqX+b54xMqgxuvZ7xi9xu2XAAiBQFVSGIDI4D/Cnsu6lBOyzyCNNxjrjxbJSJZoIv1N5+A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431632,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfZUXCRA9TVsSAnZWagAA7FAP+wdVAIdlQVXRdGZZcoX2\nBTMLTwL8Et1MXpN/YB2omD/oZ/qcAcM5ce9ghCZCzH/es20aHXROJFYWuu3F\nWtpcUqLtQbqxa8LAWF7OjTU4YahM+7yxeU7oono33kFtWzib4l2P29BF1j6x\n9XJzEOy+OcBNGN6jM0PvHZ+sLtzyN8Z5HtlKjj/ioJTJ0sjXR5knjEjxOf9m\nt9udq3+XPLvPnX4wSM1lsN/CqILwds8kXiTscgBq7DMMLcGzJrNatVO0V4k3\n3KK5AixrbZrhA6qg2yWf8qN4VoNGaAM/8dqLngg1GIQTnEFRa17I3JHidY4L\nlhEy0RSeBo86534ALntJfFYfXdJWo2UnznXNisCw8uRIYyh3AbW7b/oXmcX/\nkOflfumarQWSHtw4UJ5OVJhXOF9gHivtdF6L56/6S28FkJQLqOcnZGAG/aic\nIapyftHVSRMTAN8ypG4hMl70FhOfIDkbdilXwYhqt07ZW48PkSxROHfA5FAj\nIojRN8Hvlfyk9k8Hol/Dy8XrQLH8THapGGm4W2SYYCphssEUL8eAhy+7lq77\n/0Dk/DbYpCJC2pLu93mtryi7N7HIhg740g40bCCg4F5tEeHLwl/7D4RODd87\nXUtzWLOkJtZ3ofjGTuKQcLhfS1dch7Cchbhp68PVlstizDEcSygy0eVXx4wJ\n9Q+Y\r\n=MeRU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"163a0ba5c79d189f0c7d8d26c178f7e77b21b99b","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.3_1618842902397_0.28718345782043553","host":"s3://npm-registry-packages"}},"2.1.4":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.4","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.4","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"d2dfe1f721f83dec54f8b4387209b9ae899e416d","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.4.tgz","fileCount":20,"integrity":"sha512-a0im/o4zUXphuXBeXC/Ap3dwRCCDXrZhuvB83jPsQ1pR1oPYW2U8SGaoOaYPYJE9BUo4edh6lix650PuprWTIA==","signatures":[{"sig":"MEUCIGeFV6uxVrehU0nqxGt9EuetBdRUDWPrBIO/RgUx8As/AiEAk/uxommFcfmSzZ6FSXpfelLrCcTPaQA2uEv7ev6jT9I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431747,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh9vxCRA9TVsSAnZWagAAGlMQAIoReoU+xqDJ5YugUH9O\nB/QznITGpznZXXKjgsx43Z6o5ejV7Q45j32f+JnSCBqFyi3JgzX00fm8acYM\np9dMt/OicItCCfIrGwzYxdZGgpDf0H4oH58UCtbDycjdlNfDzKbfwuWeq5CE\nsgL3GUNUuerTpWoCgwLFQYPvRhrYWjQxt6Srd4KIUvgZWMmUc89c1ufkNzQ/\nekGZUkln8xD1ZiBYsRFAqfwhjj5DfP9PPW20YIxY3vQof0CDLSEhN8AQODfU\n2ZFI/87AERscThAW++gLfAwrvf/QCpTr/KecYUsnFvfRhFnuUwiIAYfzoOmU\n/ulEcaOJmwHok2NlyhYxtkXkTLqrNnwNm6+JS3b8HtG/lUh+AWSTE8r3PiM6\n4uBxj2gcByUXXRpIp1qxcdgGKl7w9fwCyk6aVYJGeoyU3RvZ1RbnMMkmcH6d\nLsbOaDTdMChHSqZYiY+tHVS/aRY9M29MDd8Bbx/Sd0rhTXO1DkMcuplIk2K+\nokT3dk+eXAaxixoS+uAVb/T20razw+4uvg6EzidTPinrNVWt8RvXYSA3XEwP\nt5ORTvG0lytvw0w18wUXdVu3JTL6agd+WSqassqiiYwyCFyzWPQUjEed3nvQ\ns2ARQFjol4uVMbb+xZhbI/TSQpVaAhhozwyzjrCT+VPFD2vQrRUf7QQltEqA\nnVJj\r\n=B9B3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"7c23a9bc91c6b94273584ebde2b8b7abe87d10b7","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.4_1619516401272_0.9943244392420172","host":"s3://npm-registry-packages"}},"2.1.5":{"name":"@tilde-nlp/web-translate-widget","version":"2.1.5","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@2.1.5","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"0d61aa7b187495c9a387b806c9728e4f852a002e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-2.1.5.tgz","fileCount":20,"integrity":"sha512-maWMFLMQJ1m3NqAkAX1JrEE235kcO0si+1WqMTJQVaSlcYB+HRGQD1irINfqVrAp0bVtpb4j6GcGdstJU347YA==","signatures":[{"sig":"MEUCIBKGSPuKCyEitnZQhbJ0iiDybcNLFPEdSGzc9nxE1x3lAiEAnyrRUfdqqoHnVqxe9Ch17JQF+GOfZXWo5P2oCw2S6GE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431812,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi7nrCRA9TVsSAnZWagAAViQP/20LHNNmxmXtIoKvCxU8\nhBSbxnAwnEqaS+yHwpsRzbxivdMjiemWrPV1opmcB3cnCWXdBsF9xLhPFhCA\n066ZcajV43tmdmwDR5Awfi4cu8BiVS96zlHizMk5sNh0bwKQ6nYhXXwScnay\nq2InFrnMe13XQk4IJQIZHPBfcYkn/dI4pRR/IyHFssUEw6bKcxzU0ItptYDC\nSH00dtz7UF4DMqwsk278z8VGKRxSWDK3PVXfoMffLUMu9/h0zLhuTujQhR2J\nludusej+dKHMq+Kd71K50CRz+QmRs6NoMYYYO6apV7bpQXKYJNI0H+BYeCLn\ngUQsxcVbJWRxvKFghaWL0MJDfPGlaFRPS8lH6dbQsPwN9n8c8uHERi/njz3y\nCAG5rkaliXLZtExRc0M1zZ+8/Iw9esUdRxtdbwP9E2CcV/4Sgw/rMIoaKZMh\nhgicTCDON58ZOA/c4uFvm9wZ58ZBD0dXG5HaMF4wMe/bKzlV884qBEnIprqJ\nuOgVKl8tJJks0sdMxCBWEoEvfiR0axx2XIMNd+m1zvqzFD/0rrBX8F+sX+FJ\nFkK94fs2SMzOrwvopgZx1APcoR3WEfnOiwwkMVNUJvd2pXAq3wsGYtbHXcd/\nSSAMEvz6ycuVMUaHU6lhuJ1p9VG9PNZhYvS2xiqsUVy/ckZClz7MqbbT/dfH\nWUAP\r\n=IoA0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"b05be7d2e0a849863c9c34459ee14b470b32ad8f","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","scss-config-webpack-plugin":"^2.0.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_2.1.5_1619769835038_0.9893088773748802","host":"s3://npm-registry-packages"}},"3.2.8":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.8","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.8","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"9431c0be2d71094156d7c905959d4392217815cb","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.8.tgz","fileCount":20,"integrity":"sha512-0C8UyCgyAPvPuaEYSPpWcq8iBZ/UuHHZLWkkOlqrp7vvYolRvKAhT5DK5mRcHwFWikHONHBTL/6JCXthrLPLkQ==","signatures":[{"sig":"MEQCIEqJ9QjxOBYgKbDDYYgOltC2fV8wuQaTFXwicTbBCb/lAiAoASWRQbc3u5Bc4VL8zKodc29lvZEkNn5Vzbu7jHPbSQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":465120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm/ADCRA9TVsSAnZWagAAJWUP/1rXjfMbGy9QXymlfGNz\neeGZAUf8xyTiNstvHDHwilH5qp4ij1oGZPHjK+qLGre0moZr3Lv51vPNq4LA\nB0SAjb7LJPKyieQTF+sdEGDFwEHKbpx3NGYXYdK0KZXh2ZtLNWKIO7DYj7Gt\nj0V8SxSjGzy3jCY1S1YskxHfq9tx+2JvT5CNqYun6Yge4zLpKWkm7DZ9KvLh\n2w9bLP9uyB6PRSMtVOY6SSZqwx5ZECvsOEgxcoYY7O62/HXlcOKUPI6af2yr\nnfz+mAMWv1YIH2i+a37itWSSsqlkmihQMYtl7obEsta8gqEYKQ0RctfkzNzv\nqz2eztSCQ/t03PxoRV8I2pwp7Q43vSds3rhqS+Hjc/cuhnTl/sFn7rHVIwzC\nw024D71gtW+0cCQHMM94szZ49+ufwjA7xdQUnjrxXbfdnS/mFekJTPvugCxs\nKrBo8Bg1j4w6iBelDjLdpxDydRB3jaaiEYuuPHr6hrIeEU4vt1c4bBaBpFCj\nIz/C2unUmu6Pe15ufbEq/6bSpD4Pi5gNd2UcT2g/qVxkJKhBHn3LOs3Z1L/1\nkE32MwWS/Yo2C9TNOkTkW2jFykcocc7lJS4OsZdOn99PYigRRHSCgUUZ3iDF\n/7n0Df8jmx79fjJh4ZeFlGibxf6U2+soULn36hKJqEQa6uUludRYC7FIDpuS\n0zpG\r\n=wtLs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language menu, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it. Initialize should be issued only once, further calls will take no effect.\r\n\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showOriginalControl\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show control in translation toolbar which controls whether translation popup appears\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"f809d535af8faf579c4dac34bd4bd3c653c70a03","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.8_1620832258830_0.9561595018117068","host":"s3://npm-registry-packages"}},"3.2.11":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.11","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.11","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3d76cc5f0b3ce814cd430a80f00113816a348c25","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.11.tgz","fileCount":19,"integrity":"sha512-l3BxgXjq+rVxuNsnCY2KgIboyyj0+B4JFqyeGCATHSFiUwcZeo0Z2+VKw4MP39kf9+PY5QK2QI14c/O1tfmAiA==","signatures":[{"sig":"MEUCIHJx+JKTbliFi4YDc3j1XsMoYo7IMXxGlfuFuZVaOwzmAiEAikGKSEsEDhthGB3KyT7RDr4Hf7b0uGfcBO2ZUIwe/vE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":444690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguOrpCRA9TVsSAnZWagAAf90QAJUBrkiv4yUwkAHAuxrq\ngBHvKZbxOYcnUSWsDquG6c9uJJaowYYUvUocf3ysa5yG+eG+Qqfl91mZYg9b\nvwoMuA23chEBNffR9GraXO+wW5Nqg1Yfs8muttK9j0ylv2Q3L1Iu4tN93oE0\nNV6bc7X3OcpS6ovEsgdEV4cInsXM+AuAfuukTNO1Bx9YEecslSQQn7T0Hb9M\nHkVKfsTwcHqH2I+9AmWXRtWQWIXPJL77lLMnCsW8h54SMs3wboyVs9UQiXCM\nFdg8A5TEU8xFgvW3m+2w6BMhPgTufv7ZmgMg68Ba/vexZr6D+g+Ou6xGisSK\nzqfdRA9T18cE6itFSXhLXcFeU6poDXrEqBlx/pDwQSXTHI0VWqiZ14A9B+qn\nFYcg9lNNWFFQwe8glfbrPUmLU5SFsmPy5o2yAVc1phLfLhY72YgCOlBcdQ2F\n+3VcG75Af0iCNxWlkC24SdaWoE4EuLJkzH6OxLty7RYeD8IN8NBWWwtLF6pW\nYxbPgkSp9JqI4l1nFI98DlUnN/dW8HBQ1i08kOfL2AVOK1psKSLvOhoihmWv\ncczVYOUf/k9uLk2fMjtAB5QPsMYcWHmp4ntmtfxY98+tPcTe97SMZBz9lGq6\nhTW0p8jAsN/2VImImF8PccgJKyhvzoy4ypeVVJYjfEeNW2iwb8xlB+cxRiro\nMmFQ\r\n=dFNV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language menu, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it. Initialize should be issued only once, further calls will take no effect.\r\n\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showOriginalControl\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show control in translation toolbar which controls whether translation popup appears\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"15d35d87cfe0fc73a8bde8704e2403f56b48e66a","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.11_1622731497160_0.4547755941049303","host":"s3://npm-registry-packages"}},"3.2.13":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.13","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.13","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"b5d2af9c3efac486cf0921fce8794d6101b1d2fd","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.13.tgz","fileCount":20,"integrity":"sha512-kb8JOfXJAuzqsDRbiAF4Z52kjiOet5pa+/hXNQY7udy5JD3wwiTjE88j9uH9P6cnBFURP5iSI4p/LPDcEFwzpQ==","signatures":[{"sig":"MEUCIAWyDbF6bpd3wGCvIN+alzNtLgHJ935RoEDgSbor+LX6AiEAxqBIGphCsb7HN3Oz5vP9BZQbCFSPjyj5YvnNobqeZEU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":465742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgugxkCRA9TVsSAnZWagAAvH8QAJS34jrSe071z3NqE0SJ\n/mJzCGELqaNXQCDMTGPqW3amseinB/VHaUWiNQYoe7SOFXa0InC0ORbtd05m\nYlQecsVQyiMIW/Y5gtrXKlJnvKYSJ+h63K1I1K6fak2sfrSCUGYOtgRlHrg5\nR+8dbWc51YJa3hdp3hdbjuJoxN1R42Gj4eCwMztfJ2HVre3nBwqW8Beu5vFG\nY5bL0S0ZlshpzCWKaRgPeiRSSa6cTeaDZftpqMSu/WE24iQh/vp8GyjU0yzj\nKcmyQInpCosR5uVXM75hIrVKFZNmPiqHMTu0zUbtBPAYXqSmIf/zXkn2qRET\n4iCH31aPG+/vm6tEuFyTCJGu4vPcoLVv0/yzwMgDkzd946w0BGHwtSlcA+D7\nMW7FkK3O7rs2yBMshAjv+xwm0gjNn3teGtPp+2tIRBCYtOCdrqFkXSC187B5\nL6S4YTwU4iE5o9Cri5lMi61mOuSgwC2tpqqwixnIY/5ogiCxYznTPO0rAwPG\n2oK+5PfFw6BrlRo+fnqEr/oD/fpAhnn9DLYyq01ZTLiXzH+wmuyaMzxssxjo\n+k01wRID4kWuul7j4QeTBZEZSAiiQUBsDoai2KLe7QFIbcaYj+VtEwsIhxEG\ndTGJQ+nucBC9XQDNDBSitNVg5Yv4Jdz8V86NZ7ILhmPblnxM2cPlJlsuLamj\nGPsz\r\n=ZQo7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language menu, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it. Initialize should be issued only once, further calls will take no effect.\r\n\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showOriginalControl\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show control in translation toolbar which controls whether translation popup appears\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"f42e326014ab89f83a63de613e5e0cb3a92f77be","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.13_1622805603876_0.0991837063722405","host":"s3://npm-registry-packages"}},"3.2.14":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.14","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.14","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"1c46e8d771763a8dcef03e3d4f82ef57fab9eeee","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.14.tgz","fileCount":19,"integrity":"sha512-dEtxa9iUE4IwCNZnBRV4vN1uHIr8CenhQ5qWznyUp7xBFOcgdQ0uHFqnjqVdunxeLUyO6GCzO/OyfU5qdz7KPA==","signatures":[{"sig":"MEQCIDR2gdTnck/6iTjGRlROPGkkDTpUFsWqx/foZ8WpncDdAiBero9xMmsGLoI4uQBqQm9mrOQXdKDU6mjL5cFBToWIvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":442448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvjHxCRA9TVsSAnZWagAA664P/RqBE8w4q9Q6Vo62++qW\naceo2K7GfuQFOFg8VyaMPMvNW7XjcuEmtbotoZrXPbw+/5MRJrXfkPqpo9gw\nE3GGDXcwuZ0WPyNDHZiTXEsO3hMWYiVX9V98TyW1MQ2yZY5WT513kIeZnpIf\nxu7L3WmlDDUvQz93m/vQBYdGNfzFID+72QcPl8eLaSo9YJ+Rym1XLe1Llrwy\n2f0/qFJsM0IIR0tNBc2wVhcbUdWRNpz0mRMBTakUOHWJ+/z55P9kppYJfrZM\n8oLzjQo+uOCUHCkvLM1hvhdnEocCZ0KSzgV00qoBI6S+Dv/rf1P/hJcg3CJg\nCkFq0VSPXlz+qoTKApitinViqb0omvXsgz5tSPVGzVR6lEdoF0jM+MiD0BD2\nnd4TY5pXYL5p+IhGsudyNUvw5MX0miemOcvAgnsghfzPe1hGZxQbPIQ/tqCW\nqn56wrfyDmsj8r2el2G2BIjJ5rMa0qynxDBpRn4CPzEj97ZcPexpWkmc4u9z\nZCNE4wfTV5nZf5+NGf/1ABt5ioFx9ISuWouVCIM0nJsjwOCySJ9te9WYMQmk\n/FbJDLxsmO8hUNQwTvrBtpt8z1HN07q7uzPT0Jo+pJkBP4ykgEE4u3cQ4D7K\nBLUx1aliUmDiQ9L/CmauZu4eW/mgJraU9iX4lRmLaPkcT9fFPXlcz0BtT+zY\nP1kJ\r\n=bLPl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"7d1c2baa94431ffa82cdfd9e6aec8bc1e85e5975","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.14_1623077361525_0.5560700896499775","host":"s3://npm-registry-packages"}},"3.2.15":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.15","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.15","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"0537e0af1d09dcb7add9889ec44c7db929322c9f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.15.tgz","fileCount":19,"integrity":"sha512-FY7Z+9DWza8Qbmw6daHNwKr4WiLIpE3gMtuz/cl5KHEb588AYvg0SJjS9pRhqN0cCGfjCmzY0+y4leJku2bL1g==","signatures":[{"sig":"MEQCIALN0QiEe78It5hauXI+ci8nM7vP2pz0NqK5ZVjRycwYAiBf5E8t/eQ1skPhKicz42OtDUEWEJyk3S01OOCgQIP2zw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":443498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgv1BaCRA9TVsSAnZWagAAQ9QQAIt8r7gKOreHN0Fk0IXv\nAorLy6jMDRxTxdMQnEkkPFAH9UznmUcBuiiYrHJgvOS2CBDXbI8jkclWbXKP\nMQw0vn1V6mqw7tlvgmBQf3aDXHcxfRYPtaukDzfYOYlm6y37RTLiVnUmYYWN\nnVCV1kR6Yy5nRQ/eMsl1/9iePVhbWMwznK2VMKYPmjMywbSO112V12C2038F\nBkRXrcD7dlvLHmT/hCCYYyvLPMRvbd7U/wa1UlCm7HOforMyQbNG9chg7vjD\n9FjylpMcAKHE0EmzLf+rpAZdonNSg6aSqhqosaT+qZI8asJaJ46ZCeHc922/\nhaOhGH+4LaH0AvJ7joM+IcdMFbPN9Sf27IrT7785pbuYJHdpNRzKw5XZO6V8\no0Ch8yeEOhwv3T2nz6ltCweUGQ7NZt/h4p1VU2ha6XSUZzxLhCMXG7+3isue\nbIt9WCjarQrQTmtv5cA+XnPd+v5fp3e2XieT+ubkoUKuDvoS3bo17CPM7MGs\nTnyPaHAq3L+7X8lEJPKA4XYVBE+7hCBcaZ548xD8MYwSWg/otZA64dYOVWDZ\nP15GCdiBKFtFv29PU5YrgIb7Q07AW6MRcTe2o6wtq6oEC8OBcifmcFg7FYjN\nqWBcAr+DfFbrMk+nUqDrEM5Zlvz0ItbqZlJ01HBBHVL0h6KNK1atwFJPe+mP\nmLx/\r\n=wjgI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"5392b1c4a09a341639428325797109985fa67f47","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.15_1623150682384_0.2700487735672714","host":"s3://npm-registry-packages"}},"3.2.16":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.16","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.16","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"bb7ff57c9f8fbd55b4374277a6a69090b22f8e19","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.16.tgz","fileCount":20,"integrity":"sha512-sIKGAFXQbZYs76NNnNEVipqCxxhG5SQyRXkkNC70jrlkhqoXWp79v2nZi5anS58lwZu+pXMISJKC2uPir1NS6w==","signatures":[{"sig":"MEUCIQC2uR+uvt/tQ755sM0KpyKLweE2vAryCh1xxyOtV8swhwIgCITQvrMx1RsSNgbcFGZTjym+gKNT9/xnc05n0w2e4F8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":464193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwg+pCRA9TVsSAnZWagAAYbMP/RCwkgvITKg7yVTrM5Fo\nBT5E0tcY+FRwKGiEmGjMGtCKz31YiTeqGpn3U3Hc8/GlCvtziM54kNfShZzV\nyA2xbIvnXbg43qHujwVtnaF4sbGQvhU4iQC3YobRlEnFIhq7Q3kEGaGeT1c1\nzz+FBOQYrY/oMm0TrwgHNnQ0fM8TYBV7vz0Jq+/lqVujQuAbflXIz+uo6jwg\nhRQ0Jrrolyg7viNWWFESvdsJBIMjINRidQ7bGeKiWEDxu9KX1AKcAwbNH1Il\n2goLvqa21Km1e3LxhMZJLuJrGfIUXvvRKvFm1TbK9h+Xs0JpEIL+BiJ7YKmy\nDHZXpYCukKOLMdpq+/BAPeC7ui3PQ8ZiqBoLJFjUwWaE4vu22i1N3GV5tir7\nNuHz6JAiQk+F++JaYf73khyga/tZpzxTeAksWpKIzrnr8goreBgXCdlXF1oL\nUnj2ibTx8t3IuFn7s4it3SwPiBIAh6hQ3uFrwAXhVuZhyYsTA47mBp6cCPQm\nWwG1wkyN5thWHFZsno8webks5/2uaEJMhlXBL7nTyttwiCRASeKMRr/GeDOi\nYZ9jTz837DtZ4+7fR0MDKKKnDzXmY0H8roS2ROnztQ8N05TW0FcBQiZlyVmT\nHDn6kSj3Bh5GP4bOwXzweFG3La0Hl+E5GFhJgWgL0dLTSU9uuFz1oWxHaCVL\nKjnc\r\n=ohIY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"a0b36113f2ffab11fa50042366a537586d6b5a3d","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.16_1623330729654_0.9575882523164043","host":"s3://npm-registry-packages"}},"3.2.17":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.17","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.17","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"55064ce4f395d306f886fdf195e12c0c61b54de1","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.17.tgz","fileCount":20,"integrity":"sha512-Apo2SIUiZNkHcGhzzl20HNhYRYYRHcfGOlzmxTALTm1mDcKlw43bylpTZg4PjeNNOj5/JySZqZ90F5m7zScU6g==","signatures":[{"sig":"MEQCIFU1TbuXQhr+5bSNK4GWUUPSMimY4Qvq8HgnX+ipGA6bAiAJEUKcSKuIIqyEj7RL2CnUOGhXyvEsnnAPcLDmQmWgWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":464162,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwhUcCRA9TVsSAnZWagAAiZUP/1NP23jHa9Vb1mHPuRg8\n3ijAjQbdzXqYZeMEQ2xm2vvu+TKMjMV7+Jg7X6rug8STihyqwk40CNxbHrLX\nnjvhhT8hqx4p/nZnocN1dgJleHjowlsfkt2KEp//0MiNbiDaecVe5RfAy3r/\nN2iQBoI2jbElDqf7wGlAYPPbBY26QZl7Xbn2b4HGtXARpgPlkXReGN47gUGg\n9yiB2h8uo/rroZ4z5mElpcmDq/myqBwtJwDjzih9huwWgdD8pY0Qt8tSVhdc\nXpzF5o/BiCx3eCN31Odq6mS3937L7Ta8SllYjKWnXVe3SX0E2ylhWPykrjQZ\nFwODAVTyii3nHkEWKio2KMfkmDpm3OHaIn3eJihfQID8SRzx0dYiCA53rHO4\nIpBCHcau6O6BWcZKqdDzMhAJg7GiKFMb2+ussb4EFIc1qigvL9DC4t76h6GI\nchH0pg7svY/KroT4PScmxoMEauB3+nhGZag9y6uCxhgNYkKYcPcxeo0R8YWc\n2GXROPhPJvSvS12eyH9DyjY5J2PsOfSjOC2A56kXHaFyRRSlpj1DDE3EzBmq\n0EPfOD9Q4bq9grmn+CiD2hyp/2KN1WZ5HlTeLq1XHtj00A3Tx59YgnH378eU\nxPzwuS5jXOgjeR9XYxqhK3Pgf8q5uES9B7m+rdpHOa55Gbg0kcQs6zQrC17q\netJn\r\n=HtWh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cf3995756e0243cb9ae4d5e1b03140e9179675da","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.17_1623332124064_0.5630611696590555","host":"s3://npm-registry-packages"}},"3.2.18":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.18","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.18","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"5bf1e3cbd3f4267957f68ad50c0146d9ea832e66","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.18.tgz","fileCount":19,"integrity":"sha512-iIwCuLkboDwA0qgORZwq8iPgLoBxqiKIWICHXBcOxdI+kju4jchcX642utRvMJ7VsC0kXXc9d+ic41M/PM/3Kw==","signatures":[{"sig":"MEUCIQDdfXTjTtzJEaGtl6xiMGMp1ZjW9BSeQhE+DLekHQnrVgIgUFm4WnSyW1m9wrEzfUjeu8c4q13CcNboToZv6azeUGU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":443518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwhaWCRA9TVsSAnZWagAAjswP/28LHh/IxKJLva+eeSnd\nir4qpXXjx9jWbuOoRjgkYLLnmbNO8yMoBgCAVEYjHkpJ6gVkl7IWZ0XGsR5Q\nm+zxOWNGEe8/F7A8XrS63SsOFjaK+sB7Qk1bshnjein7GvcmC9GqIKYz+pvL\n4yoTyVlU6kbZ2IW1ERRdlvgi96YD6CUm/aLYtaFqpjXlOmmV9T/QB2Bt88f6\nm0Aa5B5QKMV33/pYguqh8n4sjg+9R4B4IoIpHG/QBWEnX4phSL9ijWjf5X4K\nVo6R5DkaVWUOEtEfv7upHp35UtaemAOY6kFNl/LWTUHoNFtBUL8DfM0Q4Ye3\noQx396bPIVDg6tVvCfVCgncXmMXpn/JG79dW/AvIHaIw34OH9LSyj6X8Op+K\n8sieL0BfIKk79KGMXtjwDKEFpvnIDerHRrAA1G8gWAl7493uvhvgbpptYsJU\nTtlVJLpdQ9OFxkde81izzXsvHQxsDBO9pihWplSyLcwTRqh+Uccgs9/ZqU07\nMqKQVSX3nx0Fqz5d3fnkHGw8k3jPsWWbgtwI3sIdcTAf2dyHuvEYwuOnWP4Y\nqYVS29liHcXId4/dNoRuuHwSds7zmPr9fUBP/JZw+RbVffYQ0HHLE87qHUZY\n07WIepUuDg2GXPKEtE+rNanFVitOduZ+1WEAyZ6a/tAA5KsvpghcWFq3VGDs\nQrvi\r\n=Ihnj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cf3995756e0243cb9ae4d5e1b03140e9179675da","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.18_1623332502034_0.4691959495501088","host":"s3://npm-registry-packages"}},"3.2.20":{"name":"@tilde-nlp/web-translate-widget","version":"3.2.20","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@3.2.20","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"6fb84d93eaf27110025b4254b46d313967b23afb","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-3.2.20.tgz","fileCount":19,"integrity":"sha512-yg9Dg1e2MD7uO3/xzzFNokQVohZRsgFll2UcXlxqgoVG3HTx8mc+QU86n2RvoLUwHpMa9BxmkXLdUUOz1aSADQ==","signatures":[{"sig":"MEUCIQD9xSVlZceMgIFFaIIST5gZVNe/uFpAwVurA3UhyweInwIgZJZOUCucZ3n02lXMaYr39PNESv2g8fEF3twGKpin1Kg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":443518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgwiGTCRA9TVsSAnZWagAA6CoQAI0WeGVNew/TZmrEJj9N\nUxV5AUCRqchXB8Ruvi6PfJhaSuOgAQLecgR4u1YVvg7TWU2xrXwvF+CMycxT\nL4j2pUi+8LhopclZ1vkVNtc/0yyM4CxAxhuSAF8UciAekLBEbxbAI6nGa68B\n853vnoT4a30Pb3/1WFN5IejZAWJig48KeVAvoSdTkp7xktTi4+Px4VIX/pBo\n6HMt45Y82mU5GNnxe3tl6TMXMegBmuSqsxDGaWV4Elk/Mw4WZZW0K5X5Nn/k\nARFdIgtuQvvFUh7E8nsPLtujyyJnYIsJZRHreWO5GyHJ5L1bloLsZMkdf2ps\n6pqHcDg3whOFJrwSJ4dJOnTgDq0Ig3NjMasyO1jBiu96XDyJZwSDwb+rkJ7n\nWiAdZgWmNjaOeHeUcp5BSKQ2O5kcXIgk39W1DKtKk4fy5b5bmg7+xH6GuMNZ\nDipBhkxoEs/TKn83WegeiU87jA788q8tVGUyjGvPb/KqNvquI+WMskn83uL+\n3+nWZlA2yjeZxM5h0S/rYX/BtNEfsnW7v0H0XTQBGOkttTnz8WsiFdefVYU6\nd5Tik6dFH3JkseuQjGd9rwOlA1yOxUTQf+0uC0QJPdrP0uz4KZDiU2far3tL\nvGgsy/77B2UjewM1nHBY5FppKbCa1qy/2S1TRE2O6Keuf57569Gsgw3dG8s8\n3Rwp\r\n=YM08\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"90a9db69e2622573f07cd3a056c5e960166a6e7e","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_3.2.20_1623335315649_0.9436062925150603","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"@tilde-nlp/web-translate-widget","version":"4.0.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.0.0","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"d75a6815648b9b0ac40cf0f1df44d12419e21a70","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.0.0.tgz","fileCount":19,"integrity":"sha512-j4n1I16UeVWxHO8a11LDC926w6m2qLe5YS7YWcAWzKpyYEmizR62u3HjmVkRA68GblWHjpwkxpAoGHtFvlS9vg==","signatures":[{"sig":"MEQCICHdwgcCsyPRqVV9pnzRacqbCUzPTLoMG9+1FQcKELymAiBdCS8XicYrkaJ8Nsp5BhrGDBNu7Wwc9l1d0dI0RgQ7ug==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":444008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgzIsECRA9TVsSAnZWagAApqgP/jrVvp2LzefLWiYKY8mn\nnC+6PeNPylHAWGQiy9iZkjTOYP29o6Aoi8LOwTHIa/eG332KKAH4ZUUB4RUr\n8HWV02KInWFRPBeL5NBibGiVNCkD1uT+1CpIFH9758UWCj1fusYYYPkMEs0U\nk8enTlTJ7yTKMv+Uew+nNr98CAHntCLFayH7u+WAgB/nw7CDQ16c75kdBTaK\njbD4i2GtMaPCj7xfMglWTzjSdrZbf660/NdLAsGJuul8WenENPF791KRdnnd\n3FYzswtpszRjWx60HT1lRZuz5LkTig33xERBLz9kCrt7yp07sqX5ypIUxf1D\nkWdpwE5LPtV+PUz3xRc7jKQ9Bxp+wkRLOgzwyrEW0NsRIr84n+srfSh1knsd\n78Jrut0OyNNpEJtk1k1EcMewBUomr7ZLfznus0GFsVIVKu1TzlIVP9EJ42Mq\n5uAIhaBi05IYGOk3zj/fEhY5Isx5gw1SNtsv9IHleD89CPgy1R69USceztOC\n72pEp8eOyBab7DEra+7A8LmstCTTbCiY1DYfCkpuvO6lPbdjDlj3XyEzD5Jb\nU+hv3UdToMl3+b5qtl6wNSy/TmE3JrUwlF3qFiS97lxlzjr4evMBlWB86o68\nZFTuo8N7l/beaJFuX0ZcHkJ6DUGNr04nVsf2okZ/kgpSvMOjDxU1kpuTHDVJ\njluk\r\n=uudk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"4c1531b27ba37b5b89bb3975cb85d38f7b30d7b7","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.0.0_1624017668427_0.5939976792110317","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"@tilde-nlp/web-translate-widget","version":"4.1.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.1.0","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"8255deb4afa34f8fef70789d7c98c2b57f195289","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.1.0.tgz","fileCount":19,"integrity":"sha512-Xs0jAAqxGjGTGJAp2K2g0xNYVjggc3wALraJ200GHJTr3NBikGvv4Yd+0rK4TtTxYUCle2dryZKdLOVumvkckg==","signatures":[{"sig":"MEUCIBtuOsjj/0Cf9uFk1Z/DBWIRB7caAcYSTWXydm3uYp7bAiEAwnBIh2W8xZe8sMI3YiDoWjXgjzX47kKdE5XXdRnuljk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":445183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3GB5CRA9TVsSAnZWagAAA2MP/2htW8zUi4UNZTrjyPqb\nMnzms9BbHIMiqS/X6KDAX9YFyFAE5PmU6avCISa35osTN8xonoWkbnkjS1oX\nY1eOWpfra8mdU9iEjtZ0icuplLQzE0JKiferHbGmGjQbb8gUgCbIYVB12Qcw\nCw27oKrjVZI1KJ2aqFo8DtfnUHe8l7r/AMDIxUA577hDAI0xi0VLoW3gvjUd\nCsPbOR4X6rB3KxbXiZ2JxZFoT+2X8YhXCMPUWUOBScPw7wMINqe2qetEn4KS\nhCkIthghbNI50lJ2PSGr7aLzOi2XwqA9Jr4lkQWWfxTfF3/Z6NwSODja7Afj\nJZpqeJO+UQNYtb7SJeb/ecG3Awp2pD/CsMaO5ViRdesdfRgPv244ZcpFOzWd\nHstydNhmjHSoGQLgUULUf63J0M+Acb2PJsJYTTZxUz8FYDVIe4If/RSzfjzE\nGHsnAfvHeHVmj/r85EGUnfBsNSPC7czdZZ4V3+VpMVpcbWHIitPIzjlDiFuw\n7smq4vx5U30zPBxoc9j1nwAy9njoEDeeI4c9iloOUJSBO+cNFoj0HH9sHWu+\nrRWTxKmEfZRYoFH4vNU/PihCmHVAjyjbooIcyk/VmT3TbxKnSt0/1cch25ui\n6ln+hZS4CJBSS+F430FEL6jrx9AeVSzly1OPdtACoCFU3H9LcNxW+9XzmSVd\njp0v\r\n=M8w+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"4bcdf9c3196f5f725e8146b69d2ea83824bfa03c","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.1.0_1625055352760_0.3651645859207877","host":"s3://npm-registry-packages"}},"4.1.1":{"name":"@tilde-nlp/web-translate-widget","version":"4.1.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.1.1","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c5963f9c2b22b737bc1e69accef3f4c67aac09d5","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.1.1.tgz","fileCount":19,"integrity":"sha512-0K/ykR/0VRvzROqeld9R5WWTKZ86o4/Io/iqVYLnhKTYK1n6U8kI8+Il3Mux1VAPGfpZxwABvPvjRwJpjXc+rA==","signatures":[{"sig":"MEQCIH2Rf6mgb13RvCGuuv3BGRL6KiR69rxhNHYJ97USKxbdAiAbXfMnAgxCvAV3z2glafOsDUYELmy2Zrl+nRIe29HqBg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":445146,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3ahcCRA9TVsSAnZWagAAxDkP/ju5a7gYcxSH9dxL+blA\nFE17U3CV/1BJ6AxNQILVUAgeKSDVbU8dBM+QCLoFfoTQtxKPRIk/SAV6QhpJ\ncryjhszmPBTe+j64Scicrhxsr1Fe3wgL296TOhm3flFwMcRI6926B1NlUGEN\njV6NiKQEZZuB/alfqGnVzF50BZkfgjj1KEraX34f9ZPc3abNAY0rrYIpNLjo\nNX4O+8uY7yMBAtCvNrSFNxR4AZ7Aa9wcqm07ZcYRGRJfEprpeBZsGCXSNjm0\ndRW+UVJGNp+v3RrlGgvspNGjY/OybDsnzFRdIlLgMrXVBGRA/jG37nayYYr0\nqbIuAPptkHyublRRfXuOOqA14hmvuMutGzjjFKQr/7rfsgp08708ekGKRLub\npASC37+0WFChKhtImm2MPtN6gOg+rai/cI39zM0Corc/Druvd3BJXyqkc1sl\nODpIJEUsZfY1qfC8AF9sy2Bg29pelY6NyEHcX+1Ew5+Fj5JcIHJMsCByXW9H\nmZsMO87xGKVYjLs9B0JSmAeRYi7gDT0V/7qIx62dMyJsQXhMC46LX5KFOIkz\nDI399WjkQwiT6y30obj35MJwuSBJ4c0/bg6210WGzV5PmEqIrEJaYGs2v1QI\ndZXi9ax0yKTXdwUjhG1eVbbZfEJTOZ2hQFfkV81Mp6snl1X4DOdcLEJhU83d\n4bF4\r\n=WWOx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"f930871b18337fcf2db33fe2c08e8d75935f8a4a","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.1.1_1625139292116_0.08478443921316714","host":"s3://npm-registry-packages"}},"4.1.2":{"name":"@tilde-nlp/web-translate-widget","version":"4.1.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.1.2","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"125fc2ef1326ed29861399ce26a4104abb011583","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.1.2.tgz","fileCount":19,"integrity":"sha512-nTP4FsPYHHw413LHVKqrW57wW7vmdS8Vw7Zdrl8NE6p0rjE0H6oPhGW+kLjr4aGxpMrk/QngsbR5HKrPJLpOEw==","signatures":[{"sig":"MEYCIQCejx7Vzl+wBsULJx1lCssNyWksl8hy4iJBo9vXsP37+AIhAKUyWnQetiqHN62on7KrpOgoV3z2aEEAiECwmy9OJWGB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":445204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3bHNCRA9TVsSAnZWagAAJg4P/0s6BcXWd5OWX489+bgQ\nb1NGJDqkJLt042gsIhDbb0XfI8uDekre4qF9sHSfeOLgfEUtubQk+lHtg5er\n39DPvy3lahRIbo8D52x+fycgiY1ExnU2L+zmpi5U8Lc6CDJAv2lz2+KzCGLT\nNzIdTdl6v4RlJUfAxgmD2z4XzFqo0fDDNzSN/TEFobfsjJeK9vXk+P2JTRVz\nRTB5CQTh4/ioSr3PaylLe6pW0agd+37MWrfkCUqW6PCBMnQXOthoo4TD/kT+\nBc1TEf4xt3JV/q6DA7ao3BmaQRPPMirsXlnWe23Cg/ewv75+8I56kzLftz0y\nKmYNF4PIdo0c+oPWDNEViokPdV2H8WUR2wIGRzyu5nDAur+J6VJiFkX9g4o4\nqhIwgaKakJI+zXJhQbwQFiAy/60ZVE5xTvqyRRK0+6dE7gohsucZc9y0FWEG\nine/OPGrO4VbSaB54mdWkBOfhLAt1smLghw0CDXuqkZycvFtQCuhiugLH24u\nQKL1c/YD8m9Wb8kKB4qr9mjGN5j0R6J/pnuSd7pFpiHo3B4GH8fN0QeEuL8l\n8OeO8zuHzQqsyPoE2QKzV6qJM5Fi51bIbE3IM8bGrmeUTXL93OITC6a6ThUT\nOSlmhHwt8hJWTUOgF21csxDyq8SJt/pRA1GSki7BSl2bAsNCS4f4wxbxcka6\njZaX\r\n=11Zo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index translated pages and you will be able to be found organically in your customer's native language.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nYou can define elements that are non-translatable with `translate` attribute\r\nby default all elements if not specified otherwise are translatable. The same applies to language attributes. Only elements with source language specified in plugin options will be translated.\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n## Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n### Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems. If last target language was translated with MT, then automatically start translation to it.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'\r\n\r\n// Source language that will be used to generate Machine Translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in url query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be usefull, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n## Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"74787ffd70757582b32df9457919390d43f619e1","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.1.2_1625141708777_0.3587524060508738","host":"s3://npm-registry-packages"}},"4.1.3":{"name":"@tilde-nlp/web-translate-widget","version":"4.1.3","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.1.3","maintainers":[{"name":"tilde-bot","email":"tilde-bot@tilde.com"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"576a439a6391e9633af2de770aea934781bb27f7","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.1.3.tgz","fileCount":19,"integrity":"sha512-hZLfQPCU/+yDTK5gl0SI877fbIPXID8RFYggTxQJ5h6GPrskiRDj572V8WA1ZR9eZNjGQ0z1ktDZdyF3giBCUg==","signatures":[{"sig":"MEUCIAIOFICUKwwDmx5+0AF2HHUvwg1U4ulSEZMYCvTTh91eAiEAlXSMBdpsRV8TeBLTf7ZtdBHNg2pxlJcGzHg8ooF0SIU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":445204,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3c8wCRA9TVsSAnZWagAANBcQAIa8kDCezE3c5HHC8ehu\nRDAxV8UoSDH4Z09HCHWrj01nQAcnWBlj/sCkGKmCPZxvbQcTp5ldEc7khtu4\nr/O7dvqFf/W9VYluWhpG07sLhpGJ6KGXbDWbQyEdqT7Xx1YDG/oKexhzhKeH\nWqWeaxwDdnuWcR9YQsYvdHe71iRkgZW1TWG7klBCSYapdBx3DcOsyfhFV/y9\nDmO3WSHmc/oIFtiYkP6Revap+HNEjU3Hr1TGK1PzN3GPr2f8jxENN6ASZ/rp\n1xGBZGFQuxYtD4HZYpHufw2Hvn2Ogz8rMbLo6IgW14teoHhofGD+Vkc19xlv\n8ME2mBY6Tlyb/b5CqilDK13z67KgxuZkARZeIfOCk4suGnehdDbsA0jN5F6x\nTLI1anA7Ih8yewZ5xXeW9G1O6dPS4y0t8zSec6mkS6aPZaAyEEg1kSKriVA0\nAhGHW11Xyiv3620TsXc3/3c4C3YMVcgWdnF4hFGLJT/kUEMNv6NZyqWUlk0s\nxUJ5OReLdwywBY/nrfpQfxP9t8b3yVR9QwAMGDQquf0jrrw5bcEpUMhfVWmj\nRJ6S9AetN5k9JBq6F33ZnmdU+RYFjUD5E23suwSp+lTgNHXnz3XtlQVkRV2e\nm+sJ5KPv3XlFO9fEOYnziXSv0GpDKNaVlMFGjO18eGnrBNy1PycD58UlmKVo\ntlEb\r\n=+wox\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"0bc7ba08caf34e976673ec131939b364b199049b","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.1.3_1625149232038_0.42224407083507964","host":"s3://npm-registry-packages"}},"4.1.4":{"name":"@tilde-nlp/web-translate-widget","version":"4.1.4","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.1.4","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"a6daf826e8c4b5b7210fa602b0f93c104748fd4e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.1.4.tgz","fileCount":19,"integrity":"sha512-UD2yeGpZ5UDinyjrtb2QGn+WidvAgYcTZAerld/6Qb1zgIKVUK06MjNGP5OK7nsF1MGSYsMunrKHyasc7gUtlw==","signatures":[{"sig":"MEUCIHuaeKwUTxiN7D4JjFW511f71X5FVe1maBsIbScvx1KdAiEAkp5TxrnLUbLsvgCuBEK119+exrY7HBhmptqerLJ0ELY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":447887,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhH6fLCRA9TVsSAnZWagAAfx8P/3gsgyEt7NLXjnUHr9nk\nm0Cui9M61mRhOFvmt6+oWVBeLC8PzuwvZTCT6Jnii1i4m8ks2mlT820ZwC76\nn+6paXNwKIFO+a16zYVHHW77zfO4s7HUMfc1PteJ8OcLNgEcJES9AoMkCgLB\nd5zHDvtQ6zlOt6y7b77lS5g1WxGSBH971mAKgVGqsj0jk7RjqLS5YZZuKRM+\nHZbShk4SrjDFf7MwIrpRVle4MAFu5jdSWimR1xUyNZxWr/YckZ3O+slamywD\nlMWvRMJ7r9X4QwQryd0Ady7fsqlQPPD7kjWqfeby2mqzTrI58nGn1Unx3pVc\nDbLPQ4ZgRWAa5cNzyFwrNUGOdoOrj7bRIpDXCYQ1YUTwXmpCBecs5t4O9I+c\nfPWJjbQX0ViI4+uPIVAuFdSE5F1uvw0by+LYYrIwT+PGPdND5PSN9eru5hO+\nihkvm9CTz1x8cx7Ovr6ja9261PSZ9TWtTjoGzGBq/+ypKNUBCw0FjYm3bdQn\n9pnYRx02Kc/PjUCfI5kC3IDYhhldY7HpF6vgWKGsNhvtTjiam3/haolbdWfn\nChZBFzSX0oqA3d6b1eqMOIhpAV/7ORqg67ziKU4SdjbXibIqrXCviWD1wFXv\n6tJLlkDFt26qBcu+aNLHnWQWRhPtBW1RvnYHni1cEUDJXs5g0VoZOG6N0Lxg\nruLJ\r\n=1krf\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"8bd9d048418cd95c3bea8ae3d7749838f686c738","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.1.4_1629464523564_0.40249654885504116","host":"s3://npm-registry-packages"}},"4.2.0":{"name":"@tilde-nlp/web-translate-widget","version":"4.2.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.2.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"bfbca9a8c2f8c9a2bb50a67f8b6c8300dc79b9f7","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.2.0.tgz","fileCount":19,"integrity":"sha512-54zIXFmEjWm96bbuT0uoZmHzN9NP2pLLYlSyawQs3aPrOYx94uekO5uSS/A2w5AJJU4FbldET2kFQrxE1JggUA==","signatures":[{"sig":"MEUCIBSX0D+xSjNQQTPoAVw00897AMcsrkzS9DyrQvOwRFfFAiEAl5TXomREK0pSWw4EYDEjOKom2GGu06coUDtYauf0/Es=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":448701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhQaYfCRA9TVsSAnZWagAAh8EP+wQsV7hJwouCb/oNbteN\nKi/MhUsNb1dENVKiaCKxNQNWlskVP5ZoNCbB1s2hxNbwPY2dRFSL0CBeOr0q\nRtUw2/XmtQOeZVXkV9MM5PQXYVOQX0sQ1DzAIgeUvepguctomaSH/dv46a0H\n07brnDKP30tS7P8PxmTdd50OQbzP4nnvPYIWMOVQwS4F6NORj9YeCyfxqnhX\nxKfQLRi5h/YxcHrtz2sjB+ZwRpW2mWWo3eUlAqB7Z8Rjy2J0XB5jcM2HMSsk\nV0Ct4vHPeLISm2ZSANiRBVP9T8tuSnzLaZWvAu7PcchUrr8rGSjYzSuDBsDQ\n/eXzQb8p0WnqgZzVswOQLZXSZIP3yYia5d9/g08z/i/jQxp0TcRzJAE/QeQJ\n6OhMo1ypjQhAl/6+woe9lXkJKUVB6o9Ao5FF27TSCyfZhveEXn4ovNBZpkVF\ng+TrmnTefIiADNUK4dihIcJ8DHz/VY50Gl3iDuVWOAnSuwfMZ6HiSkC2gHik\noWxV0RowvzO1PHahGkHLyJvaM3e1fiqz/C6nnT/C37sP4I64rOpbfjpjXtzd\nF/3eb1IP4NiwiiujpVCuzJT+Rjo1kEwmyA7JlMKbnRi7jdFlR/X845U1LsqD\nYueOqnOsBaU1w3WqA+bMvBkt7Pbd1UgKnQ8h6WZlLatoEdR5Fv4oH5QhliRD\n74TB\r\n=qiKg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"fdc01318adecf3cc2615409bb525740c3e37230c","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.2.0_1631692319361_0.9300931995398594","host":"s3://npm-registry-packages"}},"4.2.1":{"name":"@tilde-nlp/web-translate-widget","version":"4.2.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.2.1","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"b5162bad3a1651148ffa70e4a73bffc997b15f05","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.2.1.tgz","fileCount":19,"integrity":"sha512-opAwwpWE/2hk2k4VMs5ha1WvHMfTS4AUhqxjweEKnWBlQH5ZH6X7D55PoZdgz26cJf8UBAeT4+JdZcFLENHZig==","signatures":[{"sig":"MEQCIHPTP3kNmo3YP9/EOG0SAItCjiHgQrVcTIB/OEeSfRw4AiAj2c14lq8Qg8x6YOqsFz/ng2aTZilx/mV6GaitNKXDIw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":448818,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhREHSCRA9TVsSAnZWagAAJlgP/0/awBqUtHch5hc23C+w\niqzEcaKr7KSYz6oT5sydIgwDml0uZTRVApetQL0L0a3gArkuRbhjQexMoKZe\nc+FquiYJ8Vl//Oxb50SuwCS6J2TZ1azepsxvoeY8Kcefo5S6agfxrN6j/BTL\nEazkowlmDfIrMr9F+vaQNsoTZj+hyZ0n1ECZNcmFLXZKPT8l/kx4DyI2pe0e\n6b8uTYGCZbYx+hyMk4UEBEhlFmMBzja6ql+Xkwg8aVuUiMMA+wQHCg2aIHcb\nFI7q1oV5jjNTTURdcQDy7fI636BKMP0PRcO1RpDE9w6LpcHpwJEtIfc0q8iI\nUJ35wXhkwdJVYG+tMquY9JSBDhtTMJs21ll+gTOX641pCc5+TsPl76mCcUal\n51z4UtpWq5txCjlGRJ6WrqdfivUw9D9AJK9jrVtbrg0XceMbaRxBXcjQtLKI\nZWJszzZnjtFa8lsqg6SBXNLDOSI6Y7oVMXfsjF4SB6zUzWvwxh0hUvdToN5r\nQ4liuynWAA/nOYPrkIZlmRUm9vXxtRXW7Gsq3L6uMk+9xlo86AICqH2eWHGS\n/CTmH+1uPKuh28qJUxFfgAEYTCVR20WL6V78AUBtiYE35me4r24X1hzOlaac\nFwlTU1mRu9MLtFCmsoWIPh5O1/QXr6LP/+36RWY1nmjB4nsGObz+5RQziZCW\n22qP\r\n=VxG+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"0448cbb1bcac936cfaae1b0eef40215c2243bf7e","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.2.1_1631863250642_0.8550817598073117","host":"s3://npm-registry-packages"}},"4.2.2":{"name":"@tilde-nlp/web-translate-widget","version":"4.2.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.2.2","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"bb265af7a5fe2f0a5a88ec566c8f6c8661fabfd4","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.2.2.tgz","fileCount":18,"integrity":"sha512-RpyB9FklhWDsMQFOIcw8zZdsXWW7KJPnzebBJpO5PD+1LMOXq/I56ETO/9fLrG6sobW7aPEfTLsVMKAUSL/vDA==","signatures":[{"sig":"MEQCIEJiwZV4asBCf9Aqc5yv2aQh2sINpR5ulUCD6/2aT+AQAiBwsFZKx3lGK71wHQNdnWobF2t/K0YE6cu/+hKySUK8xg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":452647},"main":"dist/widget.js","gitHead":"4f4fcc1a0aeb292437be7b5bfb91082cb5c0b7df","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.2.2_1635360373717_0.7269096495847105","host":"s3://npm-registry-packages"}},"4.2.3":{"name":"@tilde-nlp/web-translate-widget","version":"4.2.3","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.2.3","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"47def8a4f5088833d47d589b1f8d03f491ad69b6","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.2.3.tgz","fileCount":18,"integrity":"sha512-WFZgkh4+D0VgiWs1evAGKcLFPr2KVmoDyXkpySG4UHDKL3azBpfZ+5KsduFL2/e289Z49yc1lZaJV4VUpGldvQ==","signatures":[{"sig":"MEUCIQCfX/6zg7oIdtl2Df5tDvMtJXtH79uZS7jKUou9QJRj8AIgKVhk9Qo+f1DjuREcLfNUWLmBdb1Xq9o5Fgb/mt7C0LI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":454143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1bylCRA9TVsSAnZWagAAUbIQAInxMPBY/MW+k3NieoAg\nZWIkEf+nqt7nzEI3HybCgX88LfIEoYGmn/ifEXFEPVcV51i5Vlsr8DTFXd/H\nunq6j3a2nO1LZRjRqxPN+5zXoU1ezG3U1yREnSS3xzfkgtRJX6k0CqOjZB7p\nXy4+dIIwuHDwfhKxFnGZ0alPtklj6NaUjgaur2lae3HfDVZfgXLzCofzT2AI\nmn/xaVZZsKIowLrA+cg36lKItUMvTvZ8yepIKDl7iQYXFJGke5gN2tSAycsY\nWCuxV1sgCuQyRClN0dT/O6Lj8Z+7cUj0REa1WR23iIRyAniG575Ny4Q8v7N+\n0GpY0cjm6diQ00W5kY4hDk+bFCuIqHh/8+mYR9n6DwqMIZwJNBSEy2T4mvWR\n5wCGSvMxLy2nIuO8rorCwo4tSeuHHuLshAsQl+9j737NLHPaWXin+t1hWEA+\nIgmg8Z5STaF7Y3qhVQPc+N4w6ONvvr+jin/7frrQLdvF/w9759jxTidR2IZX\nAzVYffc9HI7dnc8dgoYYzfUqyNdkPex/keuNHHQnZuZXJKU82pIskYpoh7+P\n5fQwCFNDaW4lszkfcLnGA4x7eipeDE9vhJ4U8Hc4FmZOYWs3hJg5axk8alL5\n1eF0pIrkedP53M+W3oDVIKIKSI4QsoY9YpDtXEE+5tOHuezN0Ey6wlh8bjka\nH0ZG\r\n=igwN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"0948585420c915c55dd3eb6e6524af265458d302","scripts":{"dev":"webpack-dev-server --hot --mode development","devs":"webpack-dev-server --hot --mode development --https --key ./certs/server.key --cert ./certs/server.crt --cacert ./certs/ca.crt","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.2.3_1641397413460_0.6896902849943254","host":"s3://npm-registry-packages"}},"4.3.0":{"name":"@tilde-nlp/web-translate-widget","version":"4.3.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.3.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"6f6ee47ff67c89c9609b2101b475ec09edf67435","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.3.0.tgz","fileCount":18,"integrity":"sha512-jZcUT8tL0OfLPZSnAhHKq8xBNTGTR4OwpL7B8ef7UQepBr6mXBMDnpoL/LIrD6hTm8qPxcyzyeR/52ovbnQMOA==","signatures":[{"sig":"MEYCIQDF/QYeLiRDjFyq4fvGeaJx3+7nL15g0oVPk7ZfQq/FgAIhAL53vIUQiIHOT3rHP2khQ02us6CpfKF7U100mIweM/Yb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":457593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1b+mCRA9TVsSAnZWagAADh4QAJThL40D7j9sdhHBQhLy\nqMdAFC52z3vYU3Jl349i3RxLp8vY6cAtTzir+1bRbvCsj/zsHhR7cEdNuhDN\ntW1r252oz8JLdvcyNG1XzOlFkG6uYxDNO+mqdDWoZ7B0Z3k5OAkUxrr+x+LW\nP+8sjIAzGPJ0BUJ6gvsSazsjgV74MV4Un3KaBKMza5aXoRYRPfrbgCBcpBzb\nGgIVNV2ZzCEbfUegh4ga53fbdx2ZFJCdQrv3xodxCvqAuUuEs37fgkZtj7z+\nK0Gbk4bdoL5TCEMCcSiJeQJd7QKaMM+Ik70vkVxGtaw64/r1Fpl77Nlg3Uva\nohi0Xf++kbl/H2enl48k4xHJlxaT73WtmwE/UKJfY64dzffJXdldND/k1C7F\nfiC06DYzntVwLN5VHeLocTj6BlJ23HwYCx7xzcuDFmczyZBHNTYQxXuhtyCt\nz2QMCaaOTN9PoJSOG4x+z8/CXg7glR+NhcbNh0eYZ6rYm6SvTKA3p4plAyYP\nIYlFjwkrx5Bk5HQvq+yC6SgsCJ4NTU25+PUiP5yvJEYw2chKzbMnvEbSL7l0\nNenLCKN+TcWOLEgu3s4CHJw1weyLFgACTdkSNeX9Nx78jsoHE3RJgd2EMiSw\nX8BFE0XNR0ubnfu0wMOFQfZIf1mjefQzKXLyS3/SPCzyQhVwJhdWmDaXCe0V\nb1dg\r\n=aW+b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"34dd10cf81d7e0f048a141fb4039c2cc11f6dcc7","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.3.0_1641398182414_0.5422568507202752","host":"s3://npm-registry-packages"}},"4.3.1":{"name":"@tilde-nlp/web-translate-widget","version":"4.3.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.3.1","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"f1811d49c215638650cf19449d18754f0b16cb49","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.3.1.tgz","fileCount":18,"integrity":"sha512-q7U6AIX0eM/7k9dqbrwK7+Qn7QRcCqGulFbsFmntURy/tMp6KldAjbfg2ZbveFeYA4qHegEl4TlkPS+fiTjjMg==","signatures":[{"sig":"MEUCIQDENpLxB9QnkNuj1PYQZ0B/aChk1EE2Kp1YYYq8/VtQUQIgHAmQ3N/KBbj9leGBr0eOzi61phsZIRUcQxdqt8f99Ko=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":458126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3AkcCRA9TVsSAnZWagAAFKIP+wYDTkpQdkHOMejSWAqq\nukjsDBiYOFv+NSu3v4fVXMoHN2+Wt65lPO0ZabZH/sJ5IpJu2zGvu5tG8Vvj\nkepKONY4ZgpiTKpoKzOgWqNxK2FXNROUe75Z/H0ByJxke2gl6FDS0WznrgDf\n80DN+xbcqRzILqE457q+0704zVR/qHN7jKXzolI701M2hmV85XkFSSCULupv\nKN9vs4s0lBSQFYKYvXg75Bu5CZZWBkoubNOLtlfsj1z4HbOSn+d+HFkZV8yt\nepRxo57aTQ0n48gbVgpcsVONi1DnzYPDm8YVlLQxXaUO+FgG8ed3ebkD/Xf2\nktsdL06rx4rY15wqFOqir2chudxNBkgJEFEnfuOomb5iFPF1/qefOY8EqKDz\nkuYtAdn++srrMtGaBIutli9xKUDo0EwsB6uw7kSL+uTZHJXnKFEB19DNNCvA\nyxjnx1hTQyqrWng8/BOm7TF25/4wLNFZNLtPrY+4uxgIv0RU7Qh8BMb5zXeA\nPGhqpo3WtlQv1zfw0LPeeyafPjKLLrKuWETSvey8ho2wWJeDE4cg+S9xcC9T\nskk29KYVd6VMnEifGD3A6FL1hTFVFFQcO6yGk89oG4tOr8vffPxlL93Kh0hQ\norsr0DL+1s+PZEYYCB0JEv1e34D1ey8YArmiPc9w2UdIzJ7wJvjCqyXGyfAn\n/cu8\r\n=JHSj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"d746c66328dcff8d7a1e25f910b0ff21b3da0084","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.3.1_1641810203923_0.0864985333522934","host":"s3://npm-registry-packages"}},"4.3.2":{"name":"@tilde-nlp/web-translate-widget","version":"4.3.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@4.3.2","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"47f7db811dd01bb08bd25dc05175d947da6ab24e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-4.3.2.tgz","fileCount":18,"integrity":"sha512-QlGL6lAg8EJIbTgaL+UqjZYoaIyZKigJaIIRM+QeumfAKJU1735kYQwI+ai1WUvTZ/Efgg2RM6SZv7/9tgoOvw==","signatures":[{"sig":"MEUCIB2mvkTYxCp9vE6PBLSJR/enSUKsO0yKJ7LsWn2dhusoAiEA0F5KZBGDmN5Jc4NOLdsF1gyesdGsDXhPc6f6Dj1ml5I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":458126,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh3DdKCRA9TVsSAnZWagAAclsP/07LP5zzCH291H3yH3Tm\no7HSV1Gs22RUDVqS7wcwt4fgVHULlsCpokT79Ma6X4waXkU+lAXwZUi1KUl/\nu+0qnF3LCogEazaQIWVN6XJIGLDGS4+PKGcs7vRDRKDDXRRpiVbWSHQ02xin\noUNMIGSi9DVZ5vQQOz+J0iAja4XpM5FnCm+gJ6fdjHIIFGkj2jKlDh+vuyP2\ncZjroytYvzPiov8VYjwxmxg26X+aYNjsI8VXW3GkbjGh+x0/9LO4CNbCM3rs\nyYvZ/md0PERboyK5zUjDhHPPT8w6oSejn6az9Rijph6Y8BqfBNpvZhAJf7fQ\n+LjzsDJb84YTVdMpJkU9pxChmUlZ0ZLlRpPJIl14FgSmfuSrFj0KKf/b3HJk\nPC/yQJyHUEwq0+i8yWARREd1gnP95KYYqVzvymRTZIchfsOxbfEfGB1z7iv0\n1wGXDpOOf6T+oCIAutUvvNlCqVgCOJAVR8tjeg9x+MzeEBJ9tlTBuVFCsaVt\n3sw8uZBgABUDMWgpgv4ViPGhYsdOwCCGSqx5eU+j4nSKvq3FVLqmP71vHvPt\nwyZ/qUqodPxQaxv1SKkICfL/lU9u472ciacwvzAE0g+ZqmATvHHC3MMvQ+X+\nWNIrvta+JJ/MuLbJfEvfBU9fhcG2s23XzKNNn/oiHTMIaqvljhm3nPnW0rdW\nBRPZ\r\n=0svX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"2e47848a5492491889e9dfd87f74df5ea792f2ad","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"diff":"^4.0.2","rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_4.3.2_1641822026579_0.7758480735348736","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.0","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"b5333778684904a38af8d530f72f9d9b313d255c","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.0.tgz","fileCount":19,"integrity":"sha512-OdNBlWpvISMyBmGmCyiH5upVaWx6A+rPL3zuX2DlhucdMj+qdurMl/HMTqku6aITrfVs6K3KkbVkoQs+rPhm4w==","signatures":[{"sig":"MEQCIE7AwQwX4NS45zpU/a53b8WexfffoVm4v6PAMWux9hYxAiBdIh6r+s3vTqsZU8xVSrhq8b+FECGlx/is1ZQq0knk3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":451067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6VMkCRA9TVsSAnZWagAApSkP/1iL4Xf6rxBz1+AMIGeU\ncUW1/N51BUHp3fDJtuDbrrqGijgDmoWPpHIPFRR4c9We56dALkMzHChLCw6G\nfMS6IV6tPUnYFj/szUqAdxL8AnJ7VTvZeZt0nWNDVXxtpn0czskrs36MOX3B\nZDciWrUqajtH/q7TWl1LEf2/+hel3cplawMfqK9/7sY4bGy7HpjPt0t48kdE\naNKNeuvft4Jup9nai9MOBgFL6fXohK64TVZK4QuiyHzitn5sRtED8CFMjt4D\ntLpZshsFD1h8KL/wU2/s3kd5vPnDtt6Y0Cy3shS150YLeYo34h6EKLV/h6NW\nFlaRYvYkJrNq+83ejkeRXPhYjGpwlvst1yAGfLeT/njLYWpOFOU1V7Nv1oKx\nejSVGAiIFiH4tj1KmmG23hEwP/7kDmPJozopMU7yxdrKwFS4slQKgqPg8ddw\neb6f9YVTKYB9xrw8+axSoTbOODzh23yh1j5OzQlBIvDRKCiqq+ZehO1Dlesh\nvPFpN+4I+RuWkZqie7xylBD/fMNktDSQUZjoP/qqftz0LMamsiHtuTesBcCy\n/T30ThNMNSSx6BEyv4hEsFKhEITOqLHrAp4hybeSUGGuUAO6vhPqxbBgNwcW\n0buHzPSax2brUpX7eVuh9eKpYwb9Ojs0B0s0FzRJ9HO5CCXrCwioRi9dNbRR\n/s3A\r\n=BcLW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"543133097496625cc32ac7fb33810ec9551d243d","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.0_1642681123751_0.6452611590208719","host":"s3://npm-registry-packages"}},"5.0.1":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.1","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.1","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"0d020d71a3448aa32a6aae94c15351fcb476b3e7","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.1.tgz","fileCount":19,"integrity":"sha512-g74elU+aJfVm0FUMzhUBG0naTaloiAnrQjxo4wxBhqQGq4VNbSS+NXXVhyn2aODRTwhSxYgK9lvyRqJAHvHceg==","signatures":[{"sig":"MEUCIDDbcdp1VS0BBwmn0khjUci93xgB3LkgkmeYKD14fyEUAiEAhaWZLkdGP3EAXRiuQnx4UHTN3sUZRlMdjyRyynM/Kkk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":451067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6VU9CRA9TVsSAnZWagAAPywP/1Gy1k6vznsPB++IwhBf\nHRL5+l4dvmE0/+queGBprH5zLJFx6y9zRNC5/CV1Y/BtQs2G8glLEV1QPxCv\nbgMAvOR+Uf+oI9NdbJoFsK5KhuS0GgjHTQWfIPCqwz/Fw3eGnT158ENq9+aU\nZ7v1bUM7GPIUnK0oB5JAXSgbHxA8MArLSIIFWyvAk+OQZcko9joQQtVibIcK\npDt8Xa+yx2+VMm7aJ6zhCyvwGOuezDzCWqzY9SEz8rB5yoJ8VZCj5EetI+Q+\nHoC7AGt28/0mhIjGbAoZlQnUSw64SC5F/ZURQQ9tGQ0gR3ei0SMAG13jyyzQ\ngxy8pon6H72kg7aBbf/fQHGYugF+oGQsTNw+yddDoFVSu9lbG3StePewcjig\nGcsKH3W6ssAgi3n8vCSA0lZLddAMbcnalFS1B8kR1rR75jtawjE7JV0B88uZ\n30dEl9IMuj/ScccMuu35ePiG++rhTZPLm24KPxofwgsGtZpfdzQOKAonF+MK\nrl+YxZczu55K2aC8DslUVSw9i9dDxTbV8OaExJK9gDggfrlJikXM6gvX4LwF\nsIMZBjKmINkjte7FsxnRgmO4/vwJLT1H+XEhF+vbex+ujzjOVwO05U09DKlF\nFOUDz8TWGP4kYnNx44rr4VkeA/C8aN2KfYzxB+1QuaKDxZoHdsPSwgz2Ff0H\nYIlK\r\n=mzo0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"c460a813f188289021e548fbc250e704b10ff773","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.1_1642681661448_0.9167768429927989","host":"s3://npm-registry-packages"}},"5.0.2":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.2","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.2","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3b67777522b34e4da899fba17284eaca6b3f832f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.2.tgz","fileCount":19,"integrity":"sha512-3tF/yu0woFOvkTcxUj6HDbk2TeXMVObll+hNGh3FSrV4O+YifQtPMqr7INhZ+DHTyuKqjp5lbmEr0D87BncvgQ==","signatures":[{"sig":"MEUCIQCd5z7J0gO92tX8EZjdbUWE1RksP2iL4VeesaU+bRAgvgIgPUR8vJPcCTF5bZRv45jpqFKZsCJceT3lmR+dXSlGsKQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":454771,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8+NpCRA9TVsSAnZWagAA8koP/R6VOV5xqYG2GManbeJi\nXl0UioRS6xFxqTZ6WwxDCp1Hd/Pmg6w0tPPG9K3vu/lwdddh3gidAy4befs2\nw5zx4EVAlQ5TtdCeLzYbJ4gyINLmRW6fqeQDcEns7Vx508AUfxrr5cO5Lb0Z\nKH7zMKH9/yLW7/VJS/6X4NE71hf2UZhbDQjGEWEbGA4b8aA5nJUKaYYRy0qj\nOLyf19XonOsxTTEQZZd4HC0U6+JwaGvjspT9LctKVDUgczlisEYlpyrdGCMR\nE38lZMIbCrHW2ZeLPluUrfh5TYtMYh4o0kb8KeQcz2iOmh6Ty00NHSJSnIwQ\nxynEMB2io4C9tRYz3/jpz1q4jCFuWEMr9YFnUyMiQGiPslXNjG3185zc+0w8\nTuvHB9A6H+b4ocaobvuFwRQs1ORb+jGa+ucFJF75q5WvD0pGk1kFMC4v7xIR\nLP1dfuDn5L49wNAjdshR5lV5mci2pnGZV4Zcwa3IRXBEExoy80MZ+0lW8hsj\nynliJaYrWoAEhabyUWy4gBjZBaBMwaiXzdvy3icV2/rJu8gaqCci5OuVXmKS\nbHbx8NqWew2C+muI2Ms0l2zIlMp3v18PVPWMcSUOP4XOloz08mOkDLCLK+Iz\nBsY5Qnur2rTcEOlnBohI4bMzyFYzHgbmfr6PEEW3PvNvH9GRwBAw5Y1NbK1w\ni6+K\r\n=M67Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"2d43edebd195bbcd4ee4adeb228d4fdc9a642af9","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","DOMParser":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.2_1643373417522_0.8254485247637542","host":"s3://npm-registry-packages"}},"5.0.3":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.3","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.3","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c60781bbcd6b21d7b1aacdb1aa4fd68168573821","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.3.tgz","fileCount":19,"integrity":"sha512-4YenlQX+t22q2q+RIoPxeVvLgG2/m6OhiH02LugmxVjxSEot0ZY2FgI1Elklk3Ea02RCvpsh72yNAFCHgEg9Rg==","signatures":[{"sig":"MEUCIGBCVO1Zi2PQfx2zARNIDcgVfo8xjraYUrDCxeiy5zV7AiEAlUT9a0pmZTn8EPMl+pbBdAePHaBV1bsTlzFc3JXbqSw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":455143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9+Z9CRA9TVsSAnZWagAAhKsP/RQVN83YsIgSjFahYXAE\n0USvmspNxRDyZo2nkJA1GW4S4SpA6rfKdS41PzoK6fsVA3jkbhkQ/PauUa3k\nPlouyGhseHOlMWeJpiPmMWJr4F8qbfR34ZDXrhkqeq+D8c9F6PifJLXNQWOD\nwK5ydySUUhHAe8bRBC2J6sk53FjACyVFSt7eS/NRLCYGKX8P5Q4gb9GJgvBK\nZq5s4QMuMSP33A5ajqe1FYSGn1rUAo1GmVbsOjmszcRKrdmq7GoOSkmaj5DN\nm3BnOhzR1FkMtPdigv/r8yrxLOZntSSRymwdQK7+CRNw2UbjEco6Zxx/FR0b\nZIuSlsx52+aUo0Ce1ZJDjYoGexHaG6YIRpVLO8b879U7h73vDB6aw0ik3jJ/\nVk2IXHNGYP5EWjjVJG37xbhwRZkCbwq0BzkmFGi/bx3fDCtsyI9CdC+nz0Mh\n5c5XNCj9MTrEeTwC/s0B4mLCdlrarXFuNZYLCF4coxaM/VZIsiyeXCD7aq76\nAJ5BAyXfNGqWgNqio9AgyTBvPOixyxyuz9T2rZwr9He16LL0WN5CpahsF+pd\n3Rk+veXbcmLtcwwmXbXasxqRYRep+UiSJzPoPMbpmm0CMiOXBM4QWY2D9QTh\nEmYEYusaAkeNmdfZZF3Qhk9XdW0V0ZEZB6lLNxkRiDkm/+E4vLtGaICk8dM+\nsEcm\r\n=xJTB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"4dd880c25997dbdd91c81eda2ffc23eff71bada1","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","DOMParser":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.3_1643636349017_0.5444852068504593","host":"s3://npm-registry-packages"}},"5.0.4":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.4","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.4","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"57170bf992314538337dbe1bd69e6a234ac77fec","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.4.tgz","fileCount":19,"integrity":"sha512-wWHuIcOXdjXK7EUDxYPNVc1prQ2MOKx+S/bEbdrIfvFh3X5oPr2PPqGf+GtBbmwH1XXJmeS0BvuL4I8LyHShHQ==","signatures":[{"sig":"MEUCIQDa/tQImRkTuXkHWBvT0X2wDri0rFspe0Go48Gz2HccBwIgHNVj7Fw9D/uOV1WCFX155NsK2w6bgngE3z1HNet4DFc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":455460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+Pf9CRA9TVsSAnZWagAAWbAP/08JWJR2/S7c68UHfy6E\ndIGR7dCheZcDfInHYWXFc7AD0QafRba1+fUmLAs/QyrildlAwNKGl7SzVXfJ\nAGvoXvQ0vfFegZ4WqjSiqO+cJYGVqPy5byqaTiOTXKw6qZWth44eS32QSxO5\np5xyU8Vec6jCsBYP9eRbg7/B2Q3Xv2me07c/7gEPweVE2vxzRdfdPN0WvSbW\nofo8F7dGbN0vbIDQe5N8X2KqlG0SYxGkwjA6cwoaGFq8B/ghpXLnKMaAprap\nRWa8gSZPrv/4xJS41XQaT3UEl9B6iF0HgRAXsbKmZQ6k9hmy8g363x7Na+2C\nzoHPD05QanpAfAxd9oBXrTYpq9hCkNz2reazemcI3lYsYLW1S8NMoqBjtq6p\ngvDsf9YV3FhesELNbxlU59qG1sfIMeAt0xR0z1VcP+03+9ewO+yMXRDzplFf\n13dR4x7Flwl3LWuLy9DxuCkPDv+URNUaVON9kUHlMom332r3THCKQLs7yDsq\njFyQc6uTxAVLFa/hGg6pVNkcdSMw01R0CwkqPDH3/nWnVxfju8+xU5sOMtya\nb1M2f7+NappZMVt0U/4RFLDheXpI8qAfrB7CC/15y77CaJcNQihONMpp6KuR\n3siR5LC8Gpo1iH4jQ8zBCXmscCm7X0ujeL2/2NIvf6KKttwabDcaaunQBwOy\nttGq\r\n=rRGA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"01f88d0243ab17c5b7758b558e07bd3a5d73b057","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","DOMParser":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.4_1643706365461_0.8914110070067702","host":"s3://npm-registry-packages"}},"5.0.5":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.5","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.5","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"764a983d32f7133663c18d2ed4afaebaa5bcd334","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.5.tgz","fileCount":19,"integrity":"sha512-mmQtTOhbBOEYgj0O3JSK1e7VEO9P04bxeZ7DOiHRN5d9QYekKwxf/oWchUZmrypqB9DQK1jujzRuNOZRT7+o+Q==","signatures":[{"sig":"MEUCIQDrQ9yTs9AJRHy3Q0J8wK5/t2eLAaE0dJoPg6QEv2cKAAIgNvEKawQ87QmNEjGVINGpKfd23td5twjefEJvHuWvelo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":457549,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+ngVCRA9TVsSAnZWagAAziwP/R/V65irAy5NRden/Zm5\nshRtOZ3zlxTmL4Kbm87ztxgQ0hOHNSQ2AyTEvoJJ1DiUg85vGy6ceSVbppex\noOrRSQi+DPaIxbMC8yW4EhIr6t/wHSItyxo6AQnu26hiTZa7Nwsq0mbvOqIK\n9NyS09OdCRps/y8oOPhKeuyMjJKmevWilc13ghucnG2lBrzRApyBYzcODJIF\nlPq9J653AHb1l2dU+QzjLHcyfevNODX6AHkeSys423rdArREVJ+J5+WrPfVp\n4e637w3/dEwWXY4oSXZ9BaBSOo3tHkQ+kg+/Ek40ZCA64crvuGXrKbe5yrSk\nqNeg9BwuTI1MmYJqNaxwSSq7SJ5lgn/Zzu2Pr467ftjbu/Yh64dx9i4tgrhY\nng25zt2XdnnLOmwx3biW+hvkhKn8NYJ8Nf/EThWpsnpxzUTF1HmQSxqpMetE\nTczyJn60bgQB8kWli4FITD2uIMXT2eZWQs+nTjlDCyJv6GqWv+6o0ZjyxRJA\nBbNBl08FsGOU5fMAMxarf25a93S94aBqHHado1LAQ27mM80+vbvpg6J9wfNZ\n+Nf4h8Q71YRWrgTq2ShxMvhiDHeYIEwZlipxyyv5/ktMhcM6VoX2thV4Cz/5\n8k8wEtQVU5QhEHFhUl87iCsiayDZ6Fc6gbG5urtTjaskPeRPzaOwukjlSex4\nM3Xf\r\n=MlGs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"16a72641d4f4bb49badabead67896cb62605479b","scripts":{"dev":"webpack-dev-server --hot --mode development","dist":"webpack --mode production","lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","packDev":"webpack --mode development","prodtest":"npm run dist && webpack-dev-server --mode production","autoVersionUpdate":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^6.6.0","axios":"^0.21.1","core-js":"^3.6.5","@babel/polyfill":"^7.10.4"},"eslintConfig":{"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"Node":"readonly","Element":"readonly","DOMParser":"readonly","localStorage":"readonly","XMLHttpRequest":"readonly","sessionStorage":"readonly","MutationObserver":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^4.32.2","node-sass":"^4.13.1","standardx":"^5.0.0","ts-loader":"^7.0.5","css-loader":"^3.6.0","typescript":"^3.9.6","url-loader":"^4.1.0","sass-loader":"^7.1.0","webpack-cli":"^3.3.12","ifdef-loader":"^2.1.5","style-loader":"^0.23.1","webpack-dev-server":"^3.11.0","@typescript-eslint/parser":"^3.5.0","@typescript-eslint/eslint-plugin":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.5_1643804692833_0.03857421855129872","host":"s3://npm-registry-packages"}},"5.0.6":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.6","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.6","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2ad44fc8858d1d2bed884cf121364fcd0702ab0e","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.6.tgz","fileCount":19,"integrity":"sha512-FlH48WzDnuClvNYA+OQgmkRJKfl58w4ytb17u6V8qebXMlLOGdBI0wo0qZulMHVYvkduQRyJAZqG97wfR6rh0Q==","signatures":[{"sig":"MEYCIQCeM+2XKU/3vh+bzerdybjbuNhIhGHiEfzaWFEbmx2BRwIhAN1o0mbVkrpg5n1gDXv5i+vntMzyJY8vzuh3MTJaSCGA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":502648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiAmwLCRA9TVsSAnZWagAA3SsP/20TBAMg+ykibGO2wuK0\nZgV1L908mS98BIS2u9OoLXGQSEImapZfmRytkdysE4uOWIyx2qnNxzAMMwY2\nJfjqYVXzAE/Cqn+xbTT9EwIKlqlnTB+umpTrThdlpRSDQuDYFnhHIMDVrU3l\nyR7jaQJqOduiCm3Ll0moasn9bse3hfypdEPkFew0tJkVdokOl15CT0eqj0k/\nWkcCrExC/YVCBU+miUiVsF4qT5KpJXMwXn/w57bh3S4oASL3nWFv7nlKDtwx\n6GXsPxfWFjQpw1bjjH6S/9HWkJu84oLq7mmhvtXCMOv7nylSDobyIgkXV8on\n5+DbtQ+E59AkzUEofqRYSziTbTvyC6Ty9qe6I/ur/SbvtILb3ekhMYTHjzZ6\nySqWri4LYkt+2oIquKcNOCEXfl/oI7qUjFORE92XpGu6eLdJeWXWQ2DfFNue\ntE/vvKXcLUe32YFhObtYMjbtQHg95C/Cp702/UcfJhBSXXCaDCI/uPsBt2p8\nV5We0SvSkksreGaTBMIsrUaK2zmGDdDt9nIXc+q7WSp8qYteG1luVEDnZeJD\nBbvJQKrqvxwpw+rtukQQeEH07+/9+qKvtnysBQeIk4MYUscCtMUqa6PyNRmE\n7j3UacP2PWTJxDihj4CTSsJ1V2RXelFhSPH7mbJKXbZSAQj+6N/aBVYu7S+T\n6UZ7\r\n=xwCB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"056d71672422c15e3e65627e0ca4bb2629c50ab0","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^7.5.2","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.4"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.6_1644325898947_0.3534825754309654","host":"s3://npm-registry-packages"}},"5.0.7":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.7","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.7","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"f52963c13e2ae2c3f7f9b0ed470e25849b8b493b","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.7.tgz","fileCount":19,"integrity":"sha512-G/o0NiRquTNxX7SyLvZHlMSzmJLZ8Sf2CPoxmpMXgP6gna/XpNTnu98+HwHxpG7csKH1UNNlHzsGexO2+7Ef+A==","signatures":[{"sig":"MEQCICYzn1o+8Z6LSDPwwSW5e1uMNF/r9u51h8FM8JaFuIYhAiBamKwshttOiIB5i4VKfwloTHHkG6IWZjzMIop/jKC0pQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":502695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBTIvCRA9TVsSAnZWagAAps0P+gPJvVag0JO8/KIygXPU\nP6YJuiJCjP0G7VHleIkxAgej5MaKTg+vEFgyPF1Aa8EFipqVKFPUXoM7tEth\nPRXDaC04URlAh3h7sBUOhaMTjzPhCYRTjwAMHsvzW+ysg+PCP2NgV54ef2NR\nxPruGd3SY+78bwAeHij64JvdIqjLq7AAvGggIa4kRr2kTmQSAh5vmg5KZ/BS\n9AjxRGicjd0FI5erNspn3RDRVnsyYXeciu5ZMyUxSj+pVUhI+gJUeEgIhV5J\nPPrOsUl3/628N7piiquNIbJ1vUcQWFeuWF2Dq0AllwBHDmPYy+SJC9jHE3jY\naNb8m+8fSdDnRRTSN5Ijys+SyJiYDIoPO4UWoeNq8/pDVISIbDfDcYtQDCA2\noflh+u1baykbnts0SviyKILXAC3h3r1pHTqNrUZWWTwPayQNkU6OkYThON9c\nLpkWXQgZVXeHJ3ggBTtM20yconiGHORxUKONpFucHI7O8wknP3bRzUw98Ikl\np62Dz7uLESeQ8S6E6XqwrUK9nk9z6Lpc0QjcFOwPncFv4mvAmVWMFS3+THF6\nkNkGoJm4am+WyyBk9/sv+SXFBWYqiQgSxBt3eOTyZNUgCv4jzTqPOKlkhifY\nlJTID70sIZ1By8VL176s+dYHD6mucKeTuX60bc9fEaQodM58NLDtFKCCxmpq\nWlIo\r\n=X9UN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"9adfa312a7cc85bf99bcf85ad74c29cdc11bc0de","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.7_1644507695302_0.7926531995502204","host":"s3://npm-registry-packages"}},"5.0.8":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.8","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.8","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"e022ca322fcbf7fd0b295dd8b67a758d6766ac6a","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.8.tgz","fileCount":19,"integrity":"sha512-FB/ZHGrLxwwcJiiFQQbKldwgFG4386DNfcQnYrRYZvBD2Euq8q+0RlTOYS8np89/sp9AU3Cxm6NNb6S38u9KXQ==","signatures":[{"sig":"MEYCIQC8J//ZcfpHPxu0ko1Y08dx+KhFIGJGEuO3a64eSWxJYAIhANztMPeDa/6wfoYGQV/90hm5NvaxMgAajEs3khnRfcZQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":502976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBiz/CRA9TVsSAnZWagAACDMP/0HZmG0P1GnelMvA/FF1\nSHNaQQ4hHbttZdnlkFP03vXDGKNRYP3C0Sfp92ovcmaEhmzMkkGqLurckWLB\nB/plZr1m9X6VcIzOr4bRvBWdn9aXd4tHkWlFAvVLS6CW8GokjMzDnOj4Z/e2\n11jAJ4Xjs8hYe0BIc0VzLB6+p/REMeRfq9p5/tXhR5qiJPbqXrNNwNOlsrxn\nCXpnidF33eymMn9u1OuFIOlYLI5YYkHu4zIXFqnXOqHc/2kyKDl/zlDzOwFG\nVwUlTVYjy1PAelSidhCf/EQGseimfR3aBU3r5aHYBAfWRzyha/4lBt3qrLMp\nwMNRWNElC4r+OpJ5vGHLDjbuVG0pgcpEiGGfLOTuOxUL6gm9z2t1VA/bYHNE\nCZPJ4Wf0XA3qWUf39Q8y1lSbsqHE9QeVIXcb7WWz3h+DLt/RiqZd+Ph2lvai\n6+J9iJDTFhi6GuwxAQnj5JqaejihqtL+a8l2ANEmpH1QJ2jgAF0bejQeD1ig\n6zv4wODYSdz5dsM5oqEVntW4fi98TbDyITcJpc+kjqmcQbr1kEHfN7pOFw7t\nD6PI7k2ulRrPBthmpvE4FnQPZ97ELuPdu+czI5CkhyQmIn4HcF9BoHo7D571\nEvyW7VieUp6D7JWo5eWMYvMrGbniBePm8I5MLPugtLSfm1FmNfM3wubiueB3\nbSgz\r\n=heZ1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"32bbaa6df5537478a35c9ff8d7b0f20899adbe28","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"6.14.11","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"14.16.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.8_1644571903296_0.8842064074444458","host":"s3://npm-registry-packages"}},"5.0.9":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.9","keywords":["translate","HTML","Tilde","Webpage","API"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.9","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2adff13699c6e7a8c5ec4307d0683227a7947222","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.9.tgz","fileCount":19,"integrity":"sha512-cI+BFZ484NT3S72BLMvRFwVRVjwHND64RjPN3fjLtwWnU2IPg0W5/K7gUE+B5fJUdVr9IMZvaH21AQie8nstEg==","signatures":[{"sig":"MEQCIBS/rvhAKoWS1auyauwKowlOh48hcCFxfViHbgIBir/6AiA/f7GTOLtJTFK8PTi7D9OJFY6rMt9+ybik8uJ38af/3g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":503014,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFjTzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqsqQ//RV4QBLz9zwTbITQtRLBsEjfHlu9rn+26f0MSekeVW8DgprPm\r\na+8S8O+/5mYOxdIAiOEFF4/G2Ie1o131klvXh0KJ54weF6XNxrwkV2jBAKBI\r\nfHFBJ2QI3J62MmTNW7H9g3n5j4SY2f/laGWpaMoARaBbcSpYlqIQ7h0X+1+u\r\n9Fpa+auiORY6tgU+0WgqObGl8JjlPlpyfY5HCL7GmZyKJMmAvg2oAuoO6/hL\r\ngyGc2BvMb5+hPNIQ9hTQYeXelW3S/mGM/3jOys+iI4/rD+lqB89HuzbdWLu/\r\nsyuABkhsliUfKLIjZ6IuUAPIlSbMbwP2R5OXLQuM9uokrh4sgQ053SQ9DkMv\r\nmI1SLquV3KSMEuJTRrVxAgvPkeYDbBwwI2Gt0TjnAtr2ae185U341Q1yDwyv\r\nj6LCwzGa49/vFwZwxDZF8oRjsj3jPNYIkCw+sc20uBMeGExag/StcQNP5nFi\r\nslNWSXbfM2tLdwcqo9jlInU0kzkovdTnbm+yRg9kpROp1X5uK6I9S7Kxeq3R\r\nxJwvwKsvE9BP2a5F4xdtXqmmCkwdLKOX/wIMCRnwYPzgPFUh+5PYSZoS9k6L\r\nMNJrMPsBlvZmsbSMvyZ2+VT1gilebdhkRR4x+dbs23uKkKhLrWCcMyZFF7bP\r\nteYEvZ9KIWyerESIw5lYWPKPr4iDf2V7GIw=\r\n=RFLQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Webpage translation widget\r\n\r\nReach a global audience for your website with just a few clicks!\r\n\r\nWith the website translation widget, you can make your site multilingual without any coding, manual translating, and duplication of pages.\r\n\r\nAI technology-based translation widget can be integrated into any website or e-commerce platform, which instantly translates all its content. The user can switch between multiple languages and get a precise and fast understanding of what you’re offering.\r\n\r\n## Feature\r\n\r\n* **Visual Editor** A visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the metadata information to make your content attractive to search engines.\r\n* **Usage Statistics** You can see your translation traffic and the number of translations on your translation platform dashboard.\r\n* **Integrations** Tilde Website widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n### Translatable text\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` atribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n\r\n# Usage\r\n\r\nInclude reference to translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\n\r\n## Language selection\r\n_**[Optional]**_ If you want to use built-in language selection, add element to your page. This will be container where language select will be placed.\r\n```HTML\r\n<div class=\"tildemt-widget\"></div>\r\n```\r\n\r\n## Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n## Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n## Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n## Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n## Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n## Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\nHere are instructions on how to broaden language coverage with machine translation for already multilingual\r\nwebsite that have content in two or more languages.\r\n\r\n**Step #1**: Additionally to initial configuration with `clientId` you still have to decide which one is going\r\nto be the source language `sourceLanguage`. The source language version of the page is going be used to generate\r\nmachine translation in additional languages. This decision can be made according to available machine translation\r\nlanguage directions that are available to your subscription.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify languages of your webpage that has translation already embedded and machine translation should\r\nnot be carried out. Configure `thirdPartyTranslationLanguages` option assuming that we have German and French version\r\nof English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement JavaScript action to perform on user changes language to one of embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborated example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `target`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n## Example\r\n\r\nFull examples of code can be viewed in npm package `./examples/`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n- Readme default option for `ui.translate`\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"359d94fe7f89c7fcc8fea994fc226a9d123fd848","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.9_1645622514884_0.9916506561493275","host":"s3://npm-registry-packages"}},"5.0.10":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.10","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.10","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2b3e5b3fd8dd69431fdc2fb4e697a3d57c1580c4","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.10.tgz","fileCount":19,"integrity":"sha512-mEKW3xYtGOwGCq0+DA2+wcwaSbtAZvdaYg5K9608TvKDBkRkmp7s6o6VbGHydJxXO0+COb7yjcDDtfhCmSwwFA==","signatures":[{"sig":"MEYCIQDzNuoVj+2k/YfLFx7dqa1uNeH7Tw7rFYXITLbRBdq5wwIhAIr78ouWP2oTh/6kWREJ/Uan+hKmhOSlPqcv/lxtn7Qr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":506690,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIJXKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmouVRAAmWUoWGb6QKOr/BoCdHtvOO8AhAhe11OkODys5Z947y3CL19m\r\n2vfKxxYy5NUltNVXV5PWbUlNoUazKg+7FSBC3ca20+HE8K6f1k6PmAW1KnOt\r\nXV8DKo5kzYWZHaEfjEw8oqlRauRYPPZOKqUlqC+d5t0ZU+Q6Vb3FaK/2NdW5\r\n9x7OFmWkQHU3505DIlC1Pq9mXiLz80U2pjhGhtst2zi0Kn55v/Q+a4WibBgk\r\nhg1F9dNmu4qo4ag19A1kJ2VzaMO/GCsf4z3PmtHuXNkNR2dOrOQ09bkqtFOG\r\ngK5pTHhDbLTZw60EEvddRm4fGFGwyiUWesy21uO6TvgcH7rPoBdf35aohzvm\r\nH637LY2w7v69c/jaGMhBjMtFfT6qhQ6oJ0ZDFNQp+ftPRtJjbS+HjXj43cKV\r\nsNWDoGUSxn3MKaRF3ENJwFF6lPW3G6iQGSpWR4hooEYdYCD2vClmKziQ8/FQ\r\nc89ylSU2hqtWmJ9/+wLojBymap3q3jbH3UeEQannO+H4zSKERoG0reMjUFkp\r\nBGhX374hyy3jSG8ZyAKc2+YIcPCb1leOplMexQw9Sw+qLmtHGdPu8V07TXs2\r\nE9OE5owqfFLZLchmlBsbIhI7QqV1rNLULV1IO7I/M8A+qoZ7q4iUoRimXdTC\r\nWBAxINdmUSSMFRo9gYMpVhNHyqO0KwzSBIo=\r\n=/lX1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](#https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n<script src=\"/dist/widget.js\"></script>   <!-- Enter the correct path with plugin source code -->\r\n</head>\r\n<body>\r\n<div class=\"tildemt-widget\"></div>\r\n<p>This will be translated</p> <!-- This will be translated  -->\r\n<p translate=\"no\">This will not be translated</p> <!-- This will not be translated  -->\r\n<p lang='ja'>これを訳して</p> <!-- This will not be translated  -->\r\n</body>\r\n<footer>\r\n    <script>\r\n    // Configure plugin\r\n    TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\"; //Change XXXXXXXXXXX to your Client-ID\r\n     TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n    //display the language selector as a dropdown menu - \"menu\", or list of buttons - \"list\"\r\n    TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n    //Set the plugin's UI language the administrator will see, by default it will be displayed in the language you are translating into\r\n    TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n    //Display the plugin's UI in the language your visitors are translating into - \"target\", or the original language - \"source\"\r\n    TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n    //Allow your visitors to suggest translations - \"true\", or disallow - \"false\"\r\n    TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\t//Set the source language\r\n\tTildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n    TildeMTTranslationPlugin.Initialize()\r\n    </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"6d5e3b1cee9484b3034ffce77d9f41257b77f9dc","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.10_1646302666653_0.1423391633592901","host":"s3://npm-registry-packages"}},"5.0.11":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.11","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.11","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"4e3644d00f037a4fb435e1f8b3c84b4e97205f4f","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.11.tgz","fileCount":19,"integrity":"sha512-yZ9WmDePwyWXRkLrAocp0wseosD5JoNSZojmVVKUK+KVhmCDmqhuAXTDS4CdN98rJ7s83G17MOBSGuZrILCgQw==","signatures":[{"sig":"MEUCIEW7wgDYHWoFuAq3NK6+UbBCKq2rmjWtpFcih2Jq1MUiAiEA2xmsfEN/upHZZqcNt7ZvdK+AdDq4J2awJLDWuNS3DdU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":506689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiINJXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp5vhAAotphQPYJLaG2y2vDrAKW5jCAXeLSPX8Bzhc6MhPZY4yNFRwR\r\nXNByZEWgd45ePxnmXhc/hQJTklxHd32mkvbq39ukWok09FO+dVoJjFTalZvv\r\nPreimClvTtD74G8vHe7mLwcreBPmWgShTlJdEf3uJIF9j391XWtlXiR0iv60\r\nvPu5Bm8Ta2pc9nlt5shEjAi8xZh/nSI+bOOork1tAHiGFUo+AL/QuwXJ8+FT\r\nizFpTGGvxB3DvL9pJkRwWyQpA2UAKrSRI4lJJ6vkaCY1Q8/3juo/Lmw+1atX\r\nSP+AIeYiWONXEtrIUYOc8Z4PU4sBL61CstCkGwWTWdyqO5nqBvTmXopZFHWZ\r\nDqSwSt2IOZt61GJipMIQQKB++pCxSim7jcxPa2xgr11dfjrm13UxFBJHazqg\r\nDVUOUqJIFRjBPxl6xjv8dE9JxP3NZhAEWKW6AZT/eBSn6R/v0MkOST1L4/zp\r\nZ7x3Fu7sNw5ybbS/8+xBEBagbDBAQXeve1ifQCnzgqgkrNjzb2aLOcgjJXTR\r\nxwO8xFixejQ1nw9PbrZGlHfvBDfuaKMHHoYE9brk756qyRU5M3VOYzH3lCAo\r\ntrgVBca7gGsTa4+Ru0pylTwWTTMAvIch0YwBM1L3lYQZ3X1fzK2JcX/FUz8y\r\nSnEmZqwbns5j/L8lelR4IvsRDLtE2FrxOqY=\r\n=cmja\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n<script src=\"/dist/widget.js\"></script>   <!-- Enter the correct path with plugin source code -->\r\n</head>\r\n<body>\r\n<div class=\"tildemt-widget\"></div>\r\n<p>This will be translated</p> <!-- This will be translated  -->\r\n<p translate=\"no\">This will not be translated</p> <!-- This will not be translated  -->\r\n<p lang='ja'>これを訳して</p> <!-- This will not be translated  -->\r\n</body>\r\n<footer>\r\n    <script>\r\n    // Configure plugin\r\n    TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\"; //Change XXXXXXXXXXX to your Client-ID\r\n     TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n    //display the language selector as a dropdown menu - \"menu\", or list of buttons - \"list\"\r\n    TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n    //Set the plugin's UI language the administrator will see, by default it will be displayed in the language you are translating into\r\n    TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n    //Display the plugin's UI in the language your visitors are translating into - \"target\", or the original language - \"source\"\r\n    TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n    //Allow your visitors to suggest translations - \"true\", or disallow - \"false\"\r\n    TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\t//Set the source language\r\n\tTildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n    TildeMTTranslationPlugin.Initialize()\r\n    </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"060c93ae581a7adb95a359ea5c3a0f11144190cb","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.11_1646318167160_0.4815399540653855","host":"s3://npm-registry-packages"}},"5.0.12":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.12","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.12","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c3ee5456f198012064920db2d427fa26b0c835e1","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.12.tgz","fileCount":19,"integrity":"sha512-3D1giHklxFTVEaljY9kdNh/o1lmLCkCJXcy2ZRsZ58mI7pe5NFev5JlrpOwtSMFZw6LjggEivoS1O7sSd9BeUg==","signatures":[{"sig":"MEUCIQDEom/l6Xfic6gDwyT67vjOdihpp3HFss693J0VHG/+mAIgLJOFF3ALliIaknhlClZUb6rI6Y6VkJJHDTml12hx/v8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":506884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKGQEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrT8A//eTOG08+LKbyjbQHa6ndrGBJwHEmOpw1r9RcE/nYdXioSBaxs\r\nqZEmTcGufZeTXYydUntuLZQAK7NQptY7F9EL8qskscFHfXXcVPgpIWZsh2S1\r\nCl0RDptP5pSOXQOcCVbDmMPEtjF+E4QRYvwOVM9D/c66gvLXAaDGoqu7BStB\r\ngcdxTdk2MayEhf3uEOmOC9ciwb9iNDDZ/kfd9JztuulWX/6UZuQ0p9iBIKOF\r\nK5PAkF5Qxi4ddBqq1X2K7pm6e+YioDI6byLZu+ZG8aQZLkiY9LIAUaup0UpU\r\nkQsx0cF7rdZSCoR/SiXaicygZtr8BnVzbL4YWdcdT0YGF+7KMmPnt/h/iQ43\r\n8OF1fTNxchAiniMumjLBcatU3UyPFxQzFG1dXU0fzlJinIpovMTqdHw7WpAK\r\nNNZ+gxYj8lW1dr2mb+F5gfIoO3LDXDxJfLmjIaMoEctC/oM0hfwgyTfD9rdF\r\n1TEWleAEAUih66GedywUuOGw65HjaRSvQBoKYXYadmSG1H+2mTYqvM4yBayP\r\n++Y3XlxxQ6csKT7v1iu1+FYrjYqVxw8q/1HeUNNcY3LIxgiIHRap1QT1Vzz+\r\nox7Naq8IIFv8bQ8zOEs/Om+qGEhrTZ4/9aCM1/SvyU5HoQUrAcMLXotOtL0p\r\n9IFjTUM8Nu6vBSE6exFbDzuztPk6TsqQEKU=\r\n=1jFr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct path with plugin source code -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure plugin\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set the plugin's UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display the plugin's UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"d4ae3d5df680ac6831083cf3f780d07f2b6638d0","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1","suggestion-editor":"^1.0.9"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.12_1646814212488_0.7374310229426138","host":"s3://npm-registry-packages"}},"5.0.13":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.13","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.13","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"39858b4e20e624eec388846effdbd6fa456febb3","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.13.tgz","fileCount":19,"integrity":"sha512-oXRaKEHz9NkkuhSgAas1uP1ofz8L+gHoRpWC7Qo17YoQkUVKDUr286DMl7li0fqTdt08G2ziXynN+rl1nVmMfg==","signatures":[{"sig":"MEUCID65aQIXYGqOuBFQwVwmTSyOZbV93hH1ZjQkDX9JXdebAiEAotFfIn/FnaVo6XVDQsQEWJgUISK7871SbynlHd9fKXA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":506884,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKaSAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqu4Q//VskKKtpaPBZrqUTND7taqikKghyWgfOmsoYpmEZF36RSoqvx\r\nLTnFijKzIUEKaB8ovyUtOA9p+yId4eH0WrOd8h7CEFJAXGW/zS4JlJZnNSZk\r\nINnqXnu09bTedsOtEQlOS4vOytko5sP6tZx4dlxedsmX4+da/wBV4+WQu+WT\r\n0SxRP2S8IYJnnlUqbG35dn5vpnETKvBNFkLWXzlpbadQPx55NNLdoU7OG+sf\r\niuGa6aJM6x2phprQNfecO6jVLsi4th0aPkn2+CNNGfpdqSJAerfK2gU5BJzK\r\nvC2OLvGlpaAf0LqxDMduLnw3R2wPUbm3UFTb0rGdl0F99lS6D0YoZP1HsToZ\r\nQzWRQlcBc495UA/+zRcJpvH315ulUx+r7znaFlc7sw34MwjTKYKU94pWjqfU\r\nPqkddYuHfrlB385xrV1ho0s73xkZ5v+sJoXJtLLtFVlJ0rG4ZshAD7MuAO9m\r\nRCWWGzw5xz8G5O4VM6vlPeWI3L9LU/K2YGwwpVdfp1erfvzUY3BcAE28Q1dv\r\nufO/kXI1GSwhaHgEnYcNzI7HjeE2WbPUVnPh5DeCJHPSTNlFzqCJWrl4b7HP\r\nVPM08brcOxfB8lz32DdTrLJjwhHwZIP5A9mV4PjGcEcK6Y8yqZkkLMnLvmNh\r\ngzumSOsgkdw+1PcMaPTJ2e71Qek5IwDsqos=\r\n=dwB/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct path with plugin source code -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure plugin\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set the plugin's UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display the plugin's UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"5a21750ee64892aa1f271b6057add0a10eeca9b3","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^1.0.9","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.13_1646896256128_0.07763011624277683","host":"s3://npm-registry-packages"}},"5.0.14":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.14","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.14","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"26ed5baa1affcb3bb1516b47f7ba76e9ebd7b264","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.14.tgz","fileCount":23,"integrity":"sha512-W+5STz0WMgcbGm2STBYeXyYmbAUvJhAF8vZaKJ3FkxsDeNNFoGFPNKZZQ/Fen6QQqEk5m2kFHXvFRMSbvjWGkw==","signatures":[{"sig":"MEQCIGW2K9PnNdL0iOAI9G5FuXYAG0EzYC3B4EbQHm1jH3krAiBCAddWnhnVL+6S9uWrcy7dGq0KnVmsoH/h5RWDmvnFXA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":510369,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKaq1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrTBQ//TLT849Cao/2s96gPP0VgMSQSwC8gizIEsHgsiXX4HPzFb5WV\r\nHBsDJPeNFHzyCLsdF6kEtp9eLO7H3I0d2TJCZYVo5hWxaq/QaSw8MC3LfhcQ\r\n6IHGrpQs/BD9gUb4KgTp6ntWAAzxs16vtNraX33dm7BC/mtKwfyuYTteBR5c\r\nYcqqZ93qo8flUoiVGuceYqfA0GNvFiQNw6dsPNBuzptPbd/Bzl0un0lt27wn\r\nMlDLo+RwaN5YJAKSvYU34v4cx5y/baU9dSNYun6Bej9Z0P9HS5bDsFQDx19O\r\n18dd+WaMd0ZcYelEDJJpVLO6Nu9/J/Q4+1aYIv/WPO4omAWvfehuR5fC14wF\r\niRuRimZrd2rMLqnQzIdl8YwCuCDxATqsjBk3wdtrqMpvyfG3zi7m09qRNvmj\r\nWyb8e0YRPBVy7Ge7N243qyonKGneYNm7+KUCB0J7/6/7fT/FQNSi43rTE03d\r\nnL/LCF0wFHBJUhBhVXoOdomYKBLdHXG1InnIdyPW5j7U1OZg3C0T5YrAVf5c\r\nHybmtAtbTUWJO8FrKmngXNUAs34g8NnqyEC3w8kjLMT0Pd3fy/XBBduVFIWe\r\nFbenDEvC18FQAqbE9uX+PO6va8Mr0bKNk1TbcGWU9hQbDgWmfzAFqRBeE1Mg\r\n4k54iZIl+VZeDWc6Smp3gC7q5dBMVbJxThY=\r\n=l1r3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct path with plugin source code -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure plugin\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set the plugin's UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display the plugin's UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"6168dc3ceb5f88ffbf960acdd974eff935524aae","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^1.0.9","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.14_1646897845313_0.8178533050244272","host":"s3://npm-registry-packages"}},"5.0.15":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.15","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.15","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"698afba78edd8cca7c6b3ebd5843e3f5a6448ef9","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.15.tgz","fileCount":23,"integrity":"sha512-q8b5Af6w/vEUXknuljlGLChwYr3jV+/xZ5yx25KmV/T5CBxcnk9NFGvTy4WfgpmLdq5aQb8A+WVPRSuCscIKIA==","signatures":[{"sig":"MEQCIHoah5Zxx8/M7Ce6j+aT49EI2ferCoXchq3hS3KwjH5NAiB7oHNI+uhCLcBjRUTPa3xyXp7HokiCWXGrnlOKxclLqg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":510379,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKb2cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHwxAAi2kOHs4TQintFr+A8H4+C3ZVd8/2o1nG1K7W3DesImigL5Cl\r\n083TLCL4g/G/7/7qKwhcbvsPZECvTahjg4KT6Cug5KKByumlthR5FR/YpZVc\r\nGFYFlJG8eiuwI+TjKLZryTO0l+VzY4t23emcs5c7gdOJ1kLdxNhMNANGGFcG\r\nX8MR7Ip4VQ1B5tn6ccFcfVOj0tkYtykdFJjOVlm4jI3+NKKqELB6L/x7Evmd\r\n4YQKdsx7POVCb4T2xX51QqBZxNb9zeQsIU4jnTg2+b5MOHpDdNSdRw3WkJxx\r\nFQakVJGjZsVS0BQgYO1cKr0PZhIKD8yPlGPr1iy+smtViTLCeK9Y95sBSbLy\r\n0u3FIKDCA5R7pWOpDsGoN0Ns55ehpcaAEdAXQl3mXxYDltCe/ueABY4SXapv\r\nDH8rdGE0pspUBYajifkhw+BQsuRPLsvQ8HMzEBUD/nQBDBggm33QYMjVoONE\r\nq3lvA8eoouK+At5yIIgCStohjVN4HueAoLa1GOGmyEpwoXRufdD96kAjiK47\r\nkbcSl4bG76Shwgu3AZYVXlVAeJ+7MeNAW7iy+oEigfC0e1bS4wbBreN/Y5wp\r\nvSsNVQUoCtcO+HoNlG4rRht7rNG/9JMq+O2xGqko838/ndI/mgHkssS+ZC7r\r\nfc4wZT/UCI1piiOffBP7pTfy8Xcr3CIy5h0=\r\n=2dTc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages in the translation plugin, and Tilde’s Web Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website translation widget is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website translator you will need:\r\n1.  an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic plugin code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the plugin's options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the translation plugin\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nThe plugin can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct path with plugin source code -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure plugin\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set the plugin's UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display the plugin's UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes plugin to be ready translate page - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when widget was used, then widget will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure plugin with your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize plugin\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nPlugin translation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to widget source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nPlugin determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nPlugin supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then plugin checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, plugin will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows plugin to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, plugin will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with this Translation plugin, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate plugin UI, values can be:\r\n   * **source** - Show plugin UI in source language\r\n   * **target** - Show plugin UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on Translation Plugin UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.branding.url\r\n\r\n* Type: `String`\r\n* Default: `https://translate.tilde.com/`\r\n\r\n   MT branding link\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure plugin in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"d904f1938c92399af88fdce2b35a7ff2656e49d8","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^1.0.9","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.15_1646902683788_0.321813475707146","host":"s3://npm-registry-packages"}},"5.0.16":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.16","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.16","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"6980d28f7bee91e8d6e34fa5d2f2e598bf742503","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.16.tgz","fileCount":23,"integrity":"sha512-emcjJbyRwJmyz+tQjJ/xGgFJ4qg+IX1Uey8gGnSoJ9rMljFbq5iZwJb+STTPjiRgE63C9C62vCtT6TgC9Gv1ig==","signatures":[{"sig":"MEYCIQDmu2NVnrMZ8gTMBy4MMSOWbG59ymjbCCGYP0EGl/MOxwIhAKDQ10Qs0vudQGiP4lplCToUL/kb6Y1hTHuL04dzYgw9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":510269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKdpmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmraDhAAldfsbG1YPeEYZ2xkymKPohCzLDqg30NxfKg8SvbAB0S2Zt+y\r\nCywXBhPuaAIUS/YR5lbTMoP+mpFv1peboTIlhpej+xulKrElzJm1Jnop1lZ+\r\nKm2/B/eEfTpUZrwqgQEbSyjZ5S/w7kojlcaSQLczbVohET0M6WEueYH/auKF\r\nbGFuIIzkpRTE6evblNGXLoSkK6CbVH+0GsgKHKgShPVHLcpQqiIG8a3Umwdd\r\nTIp1n33SKgDyf/oZMbSgdsIYrtu1EljbB6Wsu6uIFafMUVs9HHOwNw7oT7kQ\r\ncGXFOmprK3Hep0aB9ZBRciCy2hwVqIVeVMlk/M9UW/rHQxW+O7yY5PKHHl/A\r\nByLrQLnPZV4DGATXk6l/h7m4zeXE9J4vdWfRWDc6thoJ92Ex/9rsTSrmIeRC\r\n1+40ltpOJdaxTxzgtBAzJSkpjHxBrDNIidjCafeuLK03BDH1iSgP4vcB7MFv\r\nSS2Tj6xIqfbJepw3jB7ngQ24ZDH6CNaD363X59pUzwIflmbH1x8JYKdpKPzp\r\n63EiVhWd37gYRzv9fdvjX0OV7Q9TedibH0JUSNC7O2FpdAjsn4H9N+8L1j52\r\nqCYQ07OCWbea88LvGfM6tRxtKbcQ1jY6hcR14ClQQI3QXK2FDzYqumfvbZLi\r\nwC+lHFKiPAvNZc3s9GpBm+P/eqZ9KR+lTxg=\r\n=nvy0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"cf90dd29511ffd6ff6f1df67342e838c25ac5d59","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.3","axios":"^0.25.0","core-js":"^3.21.0","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.68.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.6","css-loader":"^6.6.0","typescript":"^4.5.5","url-loader":"^4.1.1","sass-loader":"^12.4.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^1.0.9","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.11.0","@typescript-eslint/eslint-plugin":"^5.11.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.16_1646910054154_0.1535737924070899","host":"s3://npm-registry-packages"}},"5.0.17":{"name":"@tilde-nlp/web-translate-widget","version":"5.0.17","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.0.17","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"bb0c4f7f708a5646143474ca58f93aab39bc3105","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.0.17.tgz","fileCount":23,"integrity":"sha512-TXZ0z14/BQazWjI1Nr4MbBwX+FV3r8gN56VFqx4Y7uPrzZdNJzA/pSng/bzpZTtEZ54qtV9tHt2TXB21Y/aItA==","signatures":[{"sig":"MEQCIHc3rsefMe/KFHt9/IgFtbs2wn2gTBcoN7g+P3yywnfeAiBabO0vhLzw56WGy5KWkKSVLnL3lyrACzAxRG5wkKSb7w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":511827,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMakMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoscA//f98M4WBg+A3FiFeCwKuABTX9OPdgUEbbnHyZSVh7SOINXHyT\r\nFaXwD/vMbqkrBEol5bFmlv/j1x9MzfRy9ZhY3hQ+3WDUls9rzm27H9lCG2oM\r\nUXIcVItup1ahCSqKWVSQZiSa7lOx0sec/es/s2EBHjd97k9VYUBXMBdtFGc4\r\naQgP9VtSu0ptUQDXVB692qGgzRBuYCXxstZIr84mU+pTLpYaZp8pHFhJQ5L6\r\nvC80LSlQgw9w1t4GBApMO2j0+QIGmZoQZZRo7IY36k2YB/vlwjMutyTTBiy1\r\nniXTM9SMucYCbnKGN2D/TaPieps8N+N60aSGZ34YLmnS2ZxhnkdfeHzN5AyP\r\nWOKNTSBH5ShbODCkXNdiyAnH0Lgijrg6Jg4POp7Al7VE+zSQJeyo8C8XqtnV\r\nklpBrxiF3NHhLCFfprsgJJ0ME/Q+6ToaBximbdbd9x5HfhH2Wl//pXAIFXe2\r\nis77QG3l2+myR+5uu6qORLyBTMdaGFXTUeNRh+CGHOWofH/ix2oY6fRL/uaB\r\n0cLN9cFqgePWzwduNO0ibQjV+BFFVteQACgvjCdNZCqgabMnuZd6uHC6fwag\r\ndXZFwjWxBGeWw2MN4NJjms+cTiNVTeTzTQmfOk6m6ymAT5NxWkj59POPXuEs\r\n/z/RRmSppu4WiOaKz7rTO7F7E4eRW6HL788=\r\n=ear+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"b8f7a52f59f2c34cd891366402b6bb8ca30f750d","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.0.17_1647421708216_0.9047052825269295","host":"s3://npm-registry-packages"}},"5.1.2":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.2","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.2","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ba71a70159b7414ef2063b7c21f14b52118d8149","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.2.tgz","fileCount":23,"integrity":"sha512-amj7A/ij0uljWeGMF+ngQxDLoPKs50zOGrqGP/Y11+Kc83toC4Qs0PP33W7dPV3LB735WRw61FPNFmLxBEt7zg==","signatures":[{"sig":"MEUCIHlPmQn/LyMEj6wV+Cx4BgRlfTbs/iDEI+INTXHeVY8wAiEA2v+hUByZbdB3RTasFiUuPf6IqFsiIzMwR84jGvi9JSA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514044,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiOsuoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgoA/8ConThlQ1sVbUnJ2H2SBsFLSQZgVhykJpUnF4AoiUClNeij1l\r\n07qJVlsDdjByrVM8TxEePGE8JjHc/jXp3/1Q2ly4fmN9aeXqezJU7QjG+Q28\r\n1Nc9OLzuEypSmoIcuvqDWjoMk7VHaWu3vvoyUmiQlXP5l8j+kLNL48l/WWhM\r\nr+V5KMKCOg7DHke1GWjH445HJnPauBSr2Us6jFuN6uea/sxj5ByNZPaXcHgE\r\nKVR6cvhFJ/1WESY92YffLwcWnkPRZGKy2t2CPmmQ8ooY0pC8CPm7tIW3eeEm\r\naskbxvMwYeUeCwjOVB+xeR8GTpvJJIWcpzzU1mAimWnZLWuAqzclToC36I8m\r\nEJ1ZdHFjVDXYJv2yliBbiNQGyuCqUqUiTUUNniIIguTuxo6Y3S6ag5Bk5y+4\r\n8b7HN5Zl+Uw1e5B9wDfkZPG6Q14IEw86xoqbZLMJJ55hJ8SVSyFGzfD6qODH\r\ny2tpfZ2TrOaxwzao94M3+I7usxiVzkVzkWgOD2ZZaiOkJcsTk5NNoiBG8PP9\r\nRFKPpQhtKTGMmUutJESzDIj5jMQCXyCefXb81mdxwu/nTDZz2857OoRqWFnS\r\n0BeoXElz4wzPOiMBx1ycSA5l1YldBuPiwvfeHJgEp5hIJl4MrEZpgX7bVeo2\r\n2fAdRdMTkruKEGEIqSZW41lVe05etnlpP6I=\r\n=9bAh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"50120da72ebe10613ab845d4b2a7daa07008c3aa","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.2_1648020391854_0.7616086324833553","host":"s3://npm-registry-packages"}},"5.1.7":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.7","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.7","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3d8dc10fb6856b2075576140cb814054607e2f5a","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.7.tgz","fileCount":23,"integrity":"sha512-Vta5svZ3JlhgPFu7HOK/3TWAKd1syRy4lwwD/88ZbmjYO/C/1MXDlqfgTRln0Ia7G7YBNkt4C0vaI06WjcrcfA==","signatures":[{"sig":"MEUCIQDlJcR+naKf9R3ouYMiRIzs+vJOPWQ0Gnng60SmoYCv9gIgBAPM8aWfGfaDW4UFHSmAa7F7NTe4rsCmCBNSFtFCz3U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiRafpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpPbw//UO/pg7My/tAER5yHfHymee+iN5wt8Sj/LD0KwD/C/S7aC3SJ\r\nAdK6iE1DhqqLg1VAx8Ta/S6JfoC77ewj50/RUQDPvW0RqsghJsW6zi6KBUgT\r\n5+54D6s2Mz7FprEOKFBqwvL/QSBAWg4cbnEjx/dNHjc1yMhuqRBizbQdsNy6\r\nxBMRIpt/Ui5DI25MQuIkZ6ASIFUrcFD2Vqr151enVZntMxZO+aScdxNmthwo\r\nUPBu/izCd0CLFdhvq0nQ/VmMiVsK9MhG6URGeBn+JMLJSBkdoV6gxB0QhhO2\r\nxPIGcFP5xZHzs6lJ/B52RWtTzL4BiEfFIjX8b4CepMsdT1DF9AVWOZwHQ3hG\r\njW4/niyx28flnmL57wphhUICZ3yWGuVG1tHhWENVJqzyQLuzKBSnFnKCX1//\r\nwB367ets6lrH0tEdndBFRvAnSwfc2We5JaAMKzDRIvddkRvPFMuw8RwcpLbp\r\n9FJbBU+1CxJUsdemh4nne2Q75FfZhey0G3it3kFYdQgASSPaOhLcX+XluTLb\r\nhmYp+TraO4j4EGO5GWDqo1PdkLqRAUNUTajSurfpHI8tU8CLg78xYyJNUVjq\r\nkxnHPq8vrsuWHAZmY0lPKDdmjHapI0MhNHvsw/x3mesnp3kbDT2o/+k3QIK7\r\nBVCi6EEh1C/PdvtQ/5olXwjxQWbqqt2grSU=\r\n=+bf5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"0db298b7f1f90f68e7173d8d18a9fb99a534888f","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.7_1648732136905_0.05574565691505651","host":"s3://npm-registry-packages"}},"5.1.9":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.9","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.9","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"9c6f20af7d431f5b4441813b82e77b5809fee5df","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.9.tgz","fileCount":23,"integrity":"sha512-m5qIQ/4g5fAqgtnAiC/+C1b5Bjx5bj1RaHu2+Vf0+9akuwwZiw2tw84NTtAH0BdDghrjpvFd9eA8DTVWr6kVAw==","signatures":[{"sig":"MEUCIAfqniGQJZ82ieDTnocUbdINNoIeJLS9wbzi9ylPGwySAiEAplDElwWlZItQu6zho1aukGCEJ4WDXmUeTkSLMEJaIXE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTvHHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoxDRAAjHwe1azBHYjyC8pPMZn6cLVcCZCEBMHm5kurVwtHiw0M7PJo\r\nZrQ01mbN3h/xraDknyhhUegbM1XO9vBWZsTR2YxSTbaVymbd1LOaXLcJ4yDK\r\nHrIbBmp2OYDaJJTQDXiB4tzphrYgdMZOtu+4xhDpGG99abYy4SovV/OAxQUo\r\nbBVTQVRyOQlGgvT/PEaXxzRTWOXAcDG/mIX/hrKJaQF0k68sAOQONzqClXVi\r\nSNUrStDbCEvQr4Ew+bl8/Wfs/OmHJKh0Djy9H2bL4f4Z2R4bXg+hybGCbpkU\r\n3X1/9OGCs9Z/XD/fxfcMXp8zi77N8PusSV4A7KGVtNgzRgReIi4J7tR7hddd\r\n3OFu2aysD9BKs/7MP7vszgsgHuZy1ND03Yahoj6b86mK2NwkeF4nn7UQTdmQ\r\nYgRMcGqQSpKDsm4ztyegp+o+6SFy6NjaMKeoSGzDEqWh+J7paJvp2XwmB23s\r\nnDdBBQWHHm3rhgQPajYCxUG0/5NOSViKzmZxInF9Rkhv6qDrnRwVSnfcMblz\r\n6+IsN7gVqqyiDB3UARAKZ37vPbHIKEQAQtzoNmN0DmnTPwjsUEPXGwNcFQnF\r\ngUB5Uhv65Z7P6M5AS2S50I1NB6iMcDC6+X/K+cZyXHVpTg2yE7Xp2hWXsCnK\r\nAsTFOFohWAeFE7UfcqlMDgLXQO9DfCe1Q+0=\r\n=p1Vu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"4ec96b250545c23d030241eb5a2f1bf281d41dc1","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.9_1649340870894_0.08909262184807787","host":"s3://npm-registry-packages"}},"5.2.0":{"name":"@tilde-nlp/web-translate-widget","version":"5.2.0","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.2.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"80d1cec5dbde9df3f4ec36d1a035faa03c6fd6a2","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.2.0.tgz","fileCount":23,"integrity":"sha512-5wrZiriUREMBL6PjlzfJrUKGkdOmyTWsFgsTc9CQplTOrEH2JS61yX/8Z+wSwx2oDa9sFWrw/gX/nD528IxZ3w==","signatures":[{"sig":"MEUCIQC3WXddWVsNN86uIK1ltwao9OBWtwtRhG12hHY/6azkpAIgFIXdZLHIrBqHD0pRuCDodDbVrKUiiAi4g/cG2sfQ+m4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijKYBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrnjQ/+K9GpR/Art9/TtFqlnSNDSn1SJt1tOFVoFPXLL78fP+vFsRHt\r\nbZWgNNHOgWcx+z5Af32UNHwZwYVKzNSKFI8kVxXKbTBhLt2L8Hyw8r/Zguyl\r\nJrsOmM9By7lQSF4MHGPeyA+UXOGWh1lqNJSZ+YfEVCbuUZqmEA2bwEXaOkcu\r\nCMSR4cwaQAiojo0qcVchJcclLACRUsEAcHB8SKpsk6J8M94Dw0JPyNmDkxtT\r\nR7yU0WG9jMFzfTLCyh0E3KczapkJqEyoBaF1Rd8FsAKdSitikWC5cM55l1Uo\r\nloJO/YKTuVOVf1nY2akQItOEHtWQ7b2c3Htqh2q+iC9DaUuB2tKrCIq2b8Qq\r\nZDJRnWCRqwUmsuom8vFhLnsYn+KVqF3rVwLPA3dlXPbs9BotyRqFXdtoH1TG\r\n1b0YCaUlfujPCbdj5eiQWJ+/pV15jOmUGReXvcADWYe79TSlDjdVOjEjoJPi\r\nSKu+O8d02lG0H3VB/cl/djknkYzwRiDWTWLJ3sMC6VgoUrFjYL4Vwg38D6PY\r\nM5acJm091Q3Tf3ZFsslSfxVkPEKIo8iyCzkaKQvgoRqN/wFFsJuiORXcs7eh\r\nWOcCZY8RaMqKKLe3/AR6MWj3GVOnJBnxcZkUEAQZH2Gj18M6nrMdFeKlDsOp\r\ntpfCfuN8vJJUTUx2lM+bjwP4UkXdLXGTFg0=\r\n=Y5Gl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n\r\n\r\n## Current\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n\r\n## v5.1.9 - 2022-04-09\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"b9701505988d87fc1931738083627aa66afaaa34","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.2.0_1653384704898_0.9351980950081371","host":"s3://npm-registry-packages"}},"5.1.10":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.10","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.10","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"48f2152aa236472fe5d36085d6ef8ed4ef14a702","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.10.tgz","fileCount":23,"integrity":"sha512-JPKpGi7J9vnP+XUIegMfI5jbmi0dX7qEfusQFa9y7p0x+2MsrLBtPoIj4XtJX9/U1hPJH1FQjewEhq/TRGNhsw==","signatures":[{"sig":"MEUCIBUWsA0jeo0p9lw0EZ9+7kDl4iCeMJp5w2GkMKPvbNaoAiEA0tPgekGOKZAP6LuBvyQYRlyRh4Dbi3YiXqfm8J6IO8Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJisW0cACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmogfA/9HIzActQsD/015axMCmFzjEBAWa7+A0Zi45w61PwQAYX4BtoN\r\n8IdfMW2/uIb1WRRiH/quWVhJjd7uoQWSkDGpZdI/JqJJd08IeBsQHQPXNdbZ\r\n/2OxooDwsv7pVteXyBKz0RPBa9SmmMcYmD1whU6mIro+vQfPcReXaBrZBijd\r\nAXHPUXp9jHjHcB368KYOh0oZ9T9NTpl5+1HXznjEiW9H+Ek3AAVI1k30x4/p\r\nRd4TzXJOmVB+G7GY3EKslveygFSuJNmZ06dbWATgAm781NeIgjzXJdEXD5pv\r\nvHqPVb5KlurgxB1BZWECP5AG/X3CjC0reuRyKvJ2uUUd9jO45drhqPhvm+Mv\r\nOQaau5gX1p7i+adVd7gkaz2TgAf4+QGhwcg52J4mdlMASjzdfoB/MwUsLHVp\r\nS2QWjdEPYyfYxlAFXBbqha0LY1T8+MoyMUmWf+CN0hFp6FHMSx5FxYaB7Z2D\r\nsXi03K/4QXoempinbzXZNsTz1AlUkSJTqkaI1dL4pJ5XabSUjGXdSggIK/LT\r\nkZvj7HHKSHbsGJTruliOo1AyS/GVJFBKKKd1hlEL/QFTeMpypsYnE38ummJn\r\ns21ZwsXrS7amZ4DPC2N3DiTPZBoysPUHkFKCQFdwP4x0yJSUcHaLaw5qpBEP\r\n0f79ZVi+nF5KP243ANA/pef2uOe/EgeXjNc=\r\n=vPhX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"a01fd5672ae08ee19511c49897e793c542aa8194","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.10_1655794972553_0.4403799783581259","host":"s3://npm-registry-packages"}},"5.1.11":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.11","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.11","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"715d20feb700e5d6ca70a4abafe00513d0835e96","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.11.tgz","fileCount":23,"integrity":"sha512-16+W9P4way6IRv3oQWzdSqlRFlEufr/FOydlwHtVgU8Ah/+94CJ4dTd2Dg8y6LAbPZ4y3xjcL4DNDRxbQOwq+g==","signatures":[{"sig":"MEYCIQDibtKNtl9vzI9C4wzgxIEY0EprzB02dTqHrnxll7O50wIhALW7af3VT8FzbbUMQKrvKW9OwCoAIt7FsyTKiVabqbWs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514474,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJist1nACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsVxAAmOUxLwz7MIXxXnMexuQydRBtRq1ms66zb7WvvYkkIrAf/daB\r\nwsEPUwJwkQHSYCqxbiL7Ey0Hd+Isw6QLq6JK6fxT1ixHjmhr0HC2ZVF7p8Lj\r\nboj+c62+hEGppp8/4adDwDS8I+MjNqgJV/b3Gh1HVTjUwo6VunFxKmJu2tBP\r\n6sNrBMz5lIejnvhkUVI00XVPCshfbFH/OxiTpfn30T+q7bZxaouRJgY+purx\r\nf4vl+OuxTkL+Uzx8SPfv1NZwSPAyr4uyNm5OptPl9MdY1VNrvF3FRxDDYCyx\r\nyhiRJGyRK2MZF1BQ9TjW5RIvtLhTRVbr94i210x97j0rOqOFLBwPQVxv9X0t\r\n3D2NqpDJmNIssasvsAD42CVO1nfhs0OtuPHEMSJ3dYvj4ZUwsPUwmE34Osra\r\nYcX8y0OUsMPDSpdhj/xDXYyCI9xVq6AHJUERR3ESqSwGxmc7rqAE+jS5WgoJ\r\nTdx+FxCcmY4wfFsRocpd7xiT+4ovHAGQwNvadC0KruNSsMRC9Zk+rjE/tXX0\r\n1t/Q2KGSoI2mMIzniBJhA/9aGLfmXiIsTekiq1VFUnQEyLPoW6hlW/CSGWXh\r\nwCEd1+zPO7PYm3PJVBFRdJSQ2pie5WHh2uFTnIBBnqrvL+mhJWBzdp7RZgpX\r\nnch7saE6+1pPU41ME7r6swAkDkX4ibW4hL0=\r\n=TpiK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"d8a76089414f4757cf97084107c403b2882dc88d","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.11_1655889255746_0.39618132383114224","host":"s3://npm-registry-packages"}},"5.1.13":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.13","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.13","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"69253157e54e335ff3f58e2e548c8c9a26d467e9","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.13.tgz","fileCount":23,"integrity":"sha512-6BxUK0BTjj7j3OFc8iSp/wumi5ES5Eow94W/1NskCo8iOCr2M+havSyjSst+sooJFjK2XikEIZsEvarKIO5J5w==","signatures":[{"sig":"MEYCIQDjcccgBtFlcCSG0EZtZrTwR4J4jAgryrP42Mr1m/HUAQIhANWav42zrIXjWzdYphn513CikWCP0IEgXBRS7FvRs+0r","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":514843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0VXtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo6/g//V5ccnt5eBsnQ/pwDs81lvNaJT4thdrWVZhJCkhmxU6Qn4M+Z\r\nc86CMgCmHELEVpbePXBlyOJ5XAbDHWDPYNN9UlpyIF4997ISckG8OdUOf/M4\r\nav0HVyuD2PEyXTlsFfbwzhwyWE0lR0x4ACZFO9TeNRFaER4zNrEitsGnxLEn\r\nU3x9qozSoeFn4tg+H+8p5uGEw0m6+pKMOvsLd4JVgeAQl2yVmbIaYk8L3I9r\r\nncDaDovkoCIA/KCPKv3zStO7fZ5OwKXJd7sh9fjTJWZh2srU6HtjVaxE2SeS\r\nTJ85lRzyBD8jFe7w6zsfuVGzXbtQFLKP3aMex8Z7B9ApHql/7jV0DXps1YzQ\r\n9J+p5jAWn7EJ2U/dqo/SCDy3sWJ21g95rK+Y0mK//hh4VPnGM2FacUWIpSAF\r\nqHUw7Z7Uo2KzB5EWkBu4RWLJvt2SOoC3SrC8KEdIN+utcHBp//gi0QfX/w2W\r\nmoQOMlq2zvTVECSX5+EODoIjY7UbPXGTjnnSN6Q9u1SwUMf89JFc/eW3K+j2\r\nVAouC+JtCR5yrbg/yOVuFl5H0QMLmN5MY9fSmpjI83CJGmERbxcwZNsreSjA\r\nDhsHFa68oFP16J7F0EPla713ws6QkEsvZkTsEboICPceh+ZzIil1gyZH2jUg\r\nN7jLlu0ma/ICpNH5sEE8dW19HJtZzd06smk=\r\n=so0G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"2ef7801326a1630b1c7e3ac3b58bee1b9ae89683","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.13_1657886189528_0.7090133698346857","host":"s3://npm-registry-packages"}},"5.1.15":{"name":"@tilde-nlp/web-translate-widget","version":"5.1.15","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.1.15","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"e44efba03e1b488dda4c459f9d719f917135c7d0","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.1.15.tgz","fileCount":23,"integrity":"sha512-JPE51NYjAdpZQ4t6c9r0rdAsOLnL+V+O3CvLxSB4NKCLJLu3BXW1b4U9m3bC95GDTZV7UTLzrvVcbWEsLuIgsw==","signatures":[{"sig":"MEQCICT14iLx0bz4lB9qnpW4NduXnrl0cWTY0rztAAsfYl/2AiAkVIp1AKW24BH+cfteUeMSqDk+A3BtruS3TJZ5XWWvWQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":515013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1UIxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYLg/+IoW41qefpfG/RJUe7s7jAkZy7GIa/FrAAm1Jqw/Z754Sp7lc\r\nrbDCpsJCqhwNM+UCxA6pYC8EJoRgcZqjTmVU5fw4FYZfR8nuqlT4sYW37LbH\r\nXtNWod+Zr7AO6vdF7qsYudCTtpU5/xH0d/zhwAG/SfSvG91Y2aAcEYEP647m\r\nq1ZYdqX2ZWbvh4zoXLYIrVaZMDNHn9HyuMn/DD5PYAcYKQF/j45Das5qaBtV\r\nr5qCHT/qRJG/SYxI4xg1+84RMkUDUkPELkXieqhlG5ZZOx3fcvrnIpBnkPkh\r\nk6Trmg8vfmxO/kKzlh8S3t+2A81o8lrxT1o1Gk5QFwXNB4WKVl9vn5tkYSKv\r\nMVIqxtl9qwNMaTo/6jmEKHLqjUPVje+Wbx8fQbgQYu/a4n0WGyLC6v9mYU0q\r\naXQH5dX2aJF678RuiQV9Y6dd8YXPoFO40lW3QiD+lL4upMFYzsghL0urOvDl\r\n/KqtDKd7tSTPDEX8Y4OMqzqeT1/FvbAzDPYOJ960uq+7CTgRe6bkRSBeuVYT\r\ncWQ+nX8eW1k/Humv+bXRAih0R95eg9ErMIgIgolfFHBeBwwUApzxtuocvfG2\r\nyOxMXPx3j1fixtnT+5LoQxwV+jQhY8WaEHy10CXI7Dq/n8MHWHK/84l7kos7\r\nswp5K63ibJwYXdh2c8UCoQ6hGBx9H7O1lJA=\r\n=uWOx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"07668b78647d8af57d060a539b53278e55bac1d4","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.3","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.1.15_1658143281241_0.586620773610552","host":"s3://npm-registry-packages"}},"5.3.0":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.0","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"23e5c5f41ba827a7324b99dc32af428f65de6ee5","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.0.tgz","fileCount":23,"integrity":"sha512-vuVwTKkcvS1+ABLQ9CIp1Chht7F/ZWUecPopYOciliaGmBgadmWtadrrjjjbVhaATuHeusUhgImCf6QYcnm+7g==","signatures":[{"sig":"MEYCIQCD4C3Ft1NY6vNt8dbEf+t7QrXHmUSyGbyBIY31vmx3RwIhAJrGaWRFRd1fAU0+pg3XRWquwD17My23knsxPwEUjfc9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":515019,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi56DgACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr83A/+JUlhv+JWhrkp/OtW++DLQKpoSk4xQRUPV5XzHBmWVnTJbXBq\r\nq7K20pj/xI1PwwJU3JwKSKgH0b28s5i3b5eBofWoZCmt+GUd+nOjhsCyrMKs\r\nn3vGdkAOE8MpOsyazVmk4br5wwTmObiQ0B/8JnpV1EKihL9MNonjMZdhfxtt\r\n7f4lKmlxKUH5oVoo5RsEMuZFabnlgllp3J6x/PtlDbiaaojviCDyvetCIUiY\r\nuCcb0e+YggFW/Rhb1w3XhtVpXMSKTwo4CiZEv6m5ltIMBd3HNCLU89nZDlAS\r\nauEcFisA38m1a6tRxuxuxRYJ3eiUziynYmpxaknT03sQdpHk6c6hcsriwVnu\r\n3FInZOtjH9/uXUksuKTHgiUi91Y+Mo0J+dDYPwzaHWAg8kYlDAUnGYj2xZXw\r\n3ATzyaNSgQh1iP9ZbU5xmZWRCURoFZaeiuZOjDUCOKi5qu8vcxhC8l789tmn\r\ngrJoRExgoTjgbBtH3ksGFt/4/R+GgPpSeIgeAuP9Q6KpBlZ6Pq7UaBEes1wF\r\nQPIAz4GPQoCcFbmHGGASwD3KzaxNf4CMUISVW2OffbxR623tjltdtNODSAhd\r\nFTlZ/LLo9jk7Hou877s6chvNsfXhLq0livj60QAYr01eAaFYJRXD9Ee0lmtz\r\nbHj/ZDRckj8u3ZltByT1irTtcTaLDCCdZMY=\r\n=zIkJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"e8219fa3772db913fab58c84cb5305aed07244d5","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.0_1659347167919_0.17354101967842706","host":"s3://npm-registry-packages"}},"5.3.1":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.1","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.1","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"fb58a6682c64882f46bb1e80ac36cef443ac276a","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.1.tgz","fileCount":23,"integrity":"sha512-d8Rq6m4BYZXkw+QqeQNZR1kP2c2l42GrYWeYxFRWTOkBV3pGoJaWLJ2htN0KXs/9B59+ie9fSqBSi5RD+6so3g==","signatures":[{"sig":"MEYCIQDobtQ/D7RSuY2fGwJGquqzEQyBmzTxGiqK0VK7QtXkYwIhAKJ1aoEpeltDd/jOOVuZXd1pqDgJu5ci2ow7KxXOZTos","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":515554,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi56LOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFGA//b+7uvYdhuQn/pqkEhM7VBKkz1uR8mBthZysyrxKdgXNIRf4o\r\n/FjFMxXgKDjuO/9J/OG+qYLfK8ij3bhEwddND8hOXrMfT8k0vTazONVmbt34\r\n0Fy0arG5ehrWOvOUT68Saf95P5JVli5O38HJaEGdeCJP7VqyculOlzAN7X42\r\nVrhU6ep9weYiiPOj4y0mTQYCzeMxQypB6ILqSt8GKgYknk4/oqn9X1ErlEUU\r\nIoaS3OW2q+r8XdSU7MTLwbcef95FHn0T9ULCf+Fzyfs6x65dUELO7vwojCSa\r\n2c7b0yUqojG8Tz/MmO94sWpI1MqGuyqBu2WrAZD221wv7tLUSQQ7AQ3ly+ev\r\nVzif9S6OLm1dMSwTq2Jpqv4xNlfF0ErgieclOprFjKTub8b71AfkjAEq+HJ/\r\nxJEsBiAn1lX5LOBBXW96a1ZLMKtzCv+R0gtHt7auoESP1RoKk3ISTJeYnkRc\r\nQV0fy2mPwWyqnQ8CF+64ph5gdCSEnrFUr48f38sXbi8NZACJDhuePlxQyQsK\r\nCHMOc+GLJ15b5vezQXhqsbrvKmCi56MYnZ4iQvvuYaxypSXbcioGbF6h9plZ\r\n/X2zSF0FM45an7v2Pxx7+mKZDr3V6ayYiBN/5d52XarzAUofOOpUrkSYJ8y6\r\nKIXep8a22z6ZnynbN36eChbBfdW0zu5LaOc=\r\n=JM5O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"0a29d0bae6543562950e64559f206d8e7760be5b","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.1_1659347662578_0.09790968943516942","host":"s3://npm-registry-packages"}},"5.3.3":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.3","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.3","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"7c8b2e7d15dcea92b5eae47d485d7cafeafd9d36","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.3.tgz","fileCount":25,"integrity":"sha512-dlo2gcoGSq4RVz9VSkgQC+XTTdWPwZXWPsMb6/oqHIMTNMMcDjgcLZY0ue4oGpmu62F62snzJvK/u8dzipcUww==","signatures":[{"sig":"MEUCIHKaB1nzUUaTOQeiyKzYZmaBGWGnKoHOCPs7ZMDBERI1AiEA6VyMA4tVtgUabfjG779IHGZGXW1/xvdPmzL06IvnhHY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":515723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7OmmACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrAJg//cQPybOgMKJ7kz4dkaIqlGNgIQOzQnzbjyKrACNYb6pnfR6E7\r\nStEJM37FOV4OjnnCD7cPF3ctzRE4Ue7cVZtk6kZFp0a9ZS4ov7yl8GMNolGJ\r\nR1k6AKXbkl9uNC1UYuXyVu1JvkDJPcMbk7jh1qHhvEICT6udg3ilOHRirNvI\r\n1Ujpbg9nsBvVEdUsjG8URla2StMk7rNXQL1tkzXl2RxmtWK0mgXRnvoRWYQZ\r\nDLiFMDEeDQ1WG5JpzWx4p5FuVX5guxN2+vs7FJSu/AzfqfmiQeo0VWe7RTWj\r\n7Rducz4SN64wjoT+k7hsPwIj/4Ne6dhv5omB1TFCt+n0ESM8MBT9MoZKuzE9\r\nY8XLsZ6NbS8yyc/PhrCkKIvE+RbH8LJfcikRHDkGhI/mwNoZ3v3D2OrsztUs\r\nGdraa8ok60MbYF0dFK9VeaOPQbgi6RQDM80xL+508wihF3AratYgGEVoKwS7\r\nR6IsXQgGSQVzUUeiJiM7eShalP+KsyqnvfoMCnzjd+YorSHH6Iak2AZ/FjfC\r\n1qLqXE8VqI2LxWjhO7wioBzPeXLDPeuosk7Y1f69dTHiSNhFPdnx8/pjcMyl\r\nr5PLvkxhDHP0t1I5+3ttu+BH0bGiRwca09qbKIRZcUIbiG0Ns1HBvQCPAL4D\r\nduLjazuavBQLkLReMVXkzNPe4qxdTSRIeVk=\r\n=XKNd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"9bde17c833f51e01969b859320a8666475dbd985","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.3_1659693478104_0.863927051714126","host":"s3://npm-registry-packages"}},"5.3.4":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.4","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.4","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"5b68334699f6f47cb3c700f1a8441897e23f6f0c","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.4.tgz","fileCount":25,"integrity":"sha512-SPL4lcwXeXXxT3u3N63ZVUPAZG6D/yEQbQq8ovnlLujBkOXTCvm3XA8IZ8B2bqNoTTPFk6uwWU3IRIh5m8t+vQ==","signatures":[{"sig":"MEYCIQCN8mOp0Ln5caXwLINZ5NUlWsj+O92YBcLcmoFqPWAJcQIhAM0tKyeajeopt/O0vb6z83B8exCpnGy3CBEiGEAi4/Xk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":515798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/fwxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoqnA/9FpvEl6+01xvby0UU6GNywGDsfj3sfQwEOUNRKJ1q91V0Tmrf\r\novx5pxFXP8hCi34NLKMaMOU8o54oag57yGMhMnL9SvJu8O2cMaVj24r4PZLi\r\nfhZBiR6xcW2Gis7oZirWeI/Z79WOfd8qWGWStz7cdu5lUXCZN0uPPuFcYYqA\r\nyLPonp/gK9/lGaaZbGoWqNPJCiW3lqOOVveY5qLRi064Ud3IPyUVS4xY8jXn\r\n/as/8LzJKz8Mf6T1fvXQ2wkHcZY8I9tlKtEAAxtNhZ2mweszm7pJZr9cyyps\r\nPgbAMcrcwb6mC1IAydKguMmjcfLO6pLx1j8W+LHdMnqrNyjhTAhdpnqRWUKJ\r\nzvZLnjVZYunV6aCYboTshmHKHllEN5cz/8Lb9VkKoUqPNv19gT+GuMRqwSKI\r\nvwcsSYw+vblG9F3odLonOq81T7kyFhjPhlqUbCmmrgtYOfC7QMTWAG858w45\r\nY25tcX6g8a01/4O8pWTLsV9imcJM0N0s+bQZG6ckbzuEUJmXW33wRnc3rR6o\r\nkl7wB7xdVOBOwBBi8vx2xhKEHZjhAN4BkCCTdceIz87Sf0jWW4UBN7uCG38a\r\niXbzzzMjgB/1zImy+7EhPjNidrH4mtW1c6uV3XVpNbQgGtrPDqHNcPu4ZMjo\r\n0ZJajC1H3NuOvE97ISiORD4lBlr2FiYjxxQ=\r\n=vahe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"4de654461a91bd8d14440b49fb90b377b75e3015","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.4_1660812337324_0.9423821433434325","host":"s3://npm-registry-packages"}},"5.3.8":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.8","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.8","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"a08df73551b69385f312c4703003b9385e503f5c","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.8.tgz","fileCount":27,"integrity":"sha512-/9X16vFnfjL2lpIk/7OdbZsAnPxLbNHBbYu1nQp+XKvjDc85P2SOlQIOFncJLnOhVp5vJA3Okk1kwzHw1dgMCA==","signatures":[{"sig":"MEUCIFceF35QGlauU7GWIxToE6Uy7+Xt4Oe1ZwYPhnCP3A87AiEAh4BIrMlQjW0LlC79JiD93okSctxsmGFUKc+zQ0yDBHA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517402,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSBhJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozHBAAl7Dt3fni7Fp5umlkbYCI17mgN2kawQdEpH5wVviYguBSCR6e\r\nP1Iwa/du4oDeTyDpiJSNrxAvOHXsXSB4YwV3F3RKgoyVgImmnlzQqn9JDx75\r\nhjDZPzORlftPi0KxHFDCooDxPPTwppGVH2wi5fP3qLog2ETxwwobplpHfsiq\r\ni/kw3LbZBuoVmuRWuPz8FIUG/upEQXWdakpzDwwHNADX4u7xwRULJNp9z40I\r\nh+1osxNCBBZedrLYGrcIIEJnK1TTLyHhnJer4IqjLYA8WZXKmOrSOudn8QYi\r\ntuDV2cpPIsG9RQ9K/TmK16QO+hHI8Arn47z+Q73LTfnNg0GPY7JSuxosYZYf\r\nRUb8T1ai2PQgTi49N8NvtVx6rQvXPglEu3I4NEBhKWCPGbo5ha9urXLDio9c\r\n0D2aE0fThzggmSp3lNzfnNxp+wvxaCBAW1prQX70BF8hbzRPYcCr379CyWMc\r\nfLigmrOdfmRWRPfUVozKTnKMqPd226wQPlPYE96TkAdOR9/2Jykjloa7isJA\r\nKgpmcEtBGM+K3lKIXwxNzE7177vraOfeFt6KAFcIqC26WG1qXPscaxNqfAky\r\nBhsAd+6ICGO7nv5w+YPP32wRG7XTAFI5/9cVFajdgUJwP4fvI+UQ8Ml3zifl\r\niV17wjYXInxI7T+VQPUmoqgFuBwtb+bfVw0=\r\n=1+bp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"c19f5f73581cc48a92c05d69fd06786691403ab0","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.8_1665669193453_0.4972316127307701","host":"s3://npm-registry-packages"}},"5.3.9":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.9","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.9","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c6e82b9c3dbc12f9b1823cd2773cc5bbb7a483cd","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.9.tgz","fileCount":27,"integrity":"sha512-ILDBazhekrmfP0cahrKnvD8rrBUhGZo5f3LYUkJ9BddqSpt2+9EusTAUxIx4whsX3PZ7JNvhVnUXIyKfCsW2DQ==","signatures":[{"sig":"MEUCIQCjA5Jdjm7Rn2SDVpmHNoHCa2gGVvhctaGIuhah8DIWjQIgWtzjxSrL5qdMJXMZGPlW0ibUyvJrFOHKAG9CGpVlCSM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517314,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjX/GDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr7LQ/9GGxgYdnHCnKs7j2PlM+ws5XzU8183NaFXlz6EWIc7vzgZtK/\r\n/knjjmFjv01qdqGb9j37ZTImscKulomaSF0OLopBEjQj8CENziapPoT47dS0\r\npYC6Hq4V7JJphZz2nNjGOr35SvN26X2SXwai6uUen0tBVXw+CBYtlA/s8MRZ\r\nQFuPC5f45IQbOxyOiIwp+BV5jnxmhI3VYitFOFqS2X6rHwz/pw3d0ajReIyE\r\nzd1aY0xK9aPxABy5i4G02hbFyYc7hYYBKVNFaOMZBONuqGX9RLjHG6ywildJ\r\ndl1LU+ZIlzh4C5Dn/0JpiDcq2wpJBQpxjVSsTNdi3HQhrMvIQsjyzEEEKdNu\r\nKd7zEiWEqSOkqecqmFHWVKlfqvqedzNjK1egIa1VWnNv3IBF+APGdUp7c/ws\r\nW85C/7U0VgvdY35TbEqeBdo3zfakILDOqS5UeQ+/1pjUjh/MZ0fv80tdpZZm\r\nVEEM/F0WXg3XKoqLYIl1BIa0OgXBlE135ECsInYKvEoDunDuhhbFiCGPSFhB\r\nZoOPcGQuLRj5wlVGR1N5vUIBTw6GXu9N8y+6S0qpVUxVbHDboclEjoBapDMV\r\nGL5vG1FK2RWpDFXzaiyEsHXNZfhqcVVmOhkYcvh//j8pzhWYFojqnTVmReE1\r\narqxAlp6czxJ1T7ol+7qmxzvnWSKIzQiiWk=\r\n=D/OF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"c19f5f73581cc48a92c05d69fd06786691403ab0","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.9_1667232131080_0.3967360989612898","host":"s3://npm-registry-packages"}},"5.3.10":{"name":"@tilde-nlp/web-translate-widget","version":"5.3.10","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.3.10","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"220272389c38a0b82f2a2f1576a860fa8caf8d1c","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.3.10.tgz","fileCount":27,"integrity":"sha512-7lMZvCEyPmIZIrmP1lJ0Vvk78UfIyHQgxyWWpxKVc9I4W+sSvY/MZsrjpMXx/ZjIUOxJrbVHN2WAtZpC3EaP6A==","signatures":[{"sig":"MEUCIQClwAaZTqIAcYjEcRNWCweK3MRclFHTY076ZKqIKLXmqQIgaE8koadbCKtudfKxHomvJJFh9FLRtQZe+gO7lX66QJM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYOXAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrbKA//SPreqgLbmE0Audx7TGRZYOzlS8fzuhD5wluJktgZ/KCqMeL4\r\nPpWm6/1K3zcu0lqGUcnf/l364uOtoCLrs2opDyo9g2uWhwCGHbpGAFpj4l4M\r\nkzpco4I/ETBCJEcZl+oS6ylcHLoUFLD3yNKy8zgMrsc94ngIiJEXxNkQRo8R\r\ndIT/LSOYyR8uqjuGEyfpEBv75vVLiZTeehbq5AG73d6cQ6XzIRgcZ+pT8Q7l\r\nyyW9yOGdBmCeRAvG8eJv41+2D0OdfboV/zzdxT/l6ypisndwnfI0Lf9nXEZy\r\nvYUUhqTQyS/dUn1tymTjZ6aD7No4Hrhd4evayZJqjH8K5Z59uaDFtb48TjRP\r\npcFpk1GbF/344bHNr+UvVxWdAR6XSpYT9E5ra3osLv4qVGO9f7XC+9XcuC0I\r\nFVAbNjuRzV9U+sPOTlWeCs60Ctiw7nJ23R6lxWDs3OE//XYEgXuiTu6UMBzU\r\nJeiY5VsXeFO41OadGaVLB612uA8XYF9yXjjpbybwmOBbgK6JDkImX1fB0IjS\r\nyHOda4bmyq5eKWNokyb9ixEgtDbP7MJ4utQLyNKLgYz/uS179JOzThyUgJDr\r\nEglIcsJ7DqIXNz/KISw8x0nIVEbx0SEGREUYwQGlAIvY7Gwc06JINjD7Fgkq\r\nSW+49LchnoNF4mP7I6CrIsAhj+KWYpXV0/A=\r\n=nWcI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"55da1d4256b19b2fbf95bd6fbd0951dc58fe9caa","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.3.10_1667294656275_0.9670455245250633","host":"s3://npm-registry-packages"}},"5.4.0":{"name":"@tilde-nlp/web-translate-widget","version":"5.4.0","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.4.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"2f8119fd7a21060d34a414c55a2c8888ca3d2dd2","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.4.0.tgz","fileCount":27,"integrity":"sha512-EV4WEAfwiUGqx34P9p1BBSA+df4iFWQc290U1WjtyGUjKmssfa/R5OEOGQiYaiE1hD3nfhF3HkZxPTC2vYaqig==","signatures":[{"sig":"MEQCIEfF4X91uKrHdGd86DZL9EaBo3YiYTZl8JTmLjdTDjswAiB6QG7f2Kh55iCzwGJLQScYANm7oChSEuWnf52/qfhVfw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":517927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjhHFoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrxDA/+M9Y0CTCCLU1XPQEHiqyzVQ+f/n3KMAVaMTAfVMWk4PFMO1je\r\n3TAe2fblIeuCXKwbRpV4/kaRdCLy65+ObtVQPzm8tBYdavOZ+Ff3kSWvJh+Q\r\nLo3CxTvlNun2ux+5G1FC02ZgT9UnvZCd8wbyU8kvSj3x7whbVZkOCle8jE4t\r\nSoebP+Mv41ugeCZ+90q8rEvDPCjBx3Kj2yghglJstvE4sQo3YtNEWoTjZUV5\r\ncIpZ6gy/L+8VrnWKr2YA2d2pRPQYh/9ptgMdQDihHqDBQb6+fl6q2oOCpkCX\r\nKhTXSp0ZHyeKfkE6q2LmPQphredkXscCuPW6SE8vBxFSJzIcRDjqpoNC4Icn\r\nMHGxh/JTHZERpBeK65NfET1/b9mVjiuNJIfsRd0crKXwRhCiUrxZ8AomQ3ME\r\nI2F7adq+N5I1bg6Mr3KAX31dwK+5/PxWZvGN3Vo6e1ERuyl9vna50dsqYq1k\r\n1e6C0lvEv6sbyJ8wafPLqUh8Pzm340kRS0GDNM4CBKgZ6q7p1cZnqycuQxmx\r\nEm1N9W/90MWJeYOQA6qQgxhVYfN1/+KT+byVt26RZBUxS3PIxTY+deIKGsfL\r\ngmoksGEaRWo+nwq5zv+neD29zLD3EE2gZE+yE3LmeCAlK6qmNNyTScMfsd51\r\nqzfUc/K07RBhoWfMl5ocWsBjc6IN0+nmbWU=\r\n=BI8n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"ed77d2a43627c7720199c7e36f06d83beda61e39","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.4.0_1669624167824_0.7524638249253035","host":"s3://npm-registry-packages"}},"5.7.0":{"name":"@tilde-nlp/web-translate-widget","version":"5.7.0","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@5.7.0","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"f46ad6f7b68b3e2432d960c7f6c1048ded45ca08","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-5.7.0.tgz","fileCount":27,"integrity":"sha512-DdIVFx+bvQzvV+GFUNS6uceE+h+IemoBC7YSmEEp4tY8yHPBslsMVsOGpbVIkTzrGVgEHigVi2x9mZ9TnnCOwg==","signatures":[{"sig":"MEYCIQD9VPZ+3vplNdlLUHycQ7e1V1tdiqdwSo5sthLC42MssAIhAJoI/nn0OGHQdi8LkDZD3PZLbbEOb39QQwOMKgOvKKCa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":521266,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjklyGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpHow//aKN59LPoGZc9UppLZwCTBMxAFpMv3dgZfQXBW/hMMt1kULCQ\r\nfzz8yOeDyPBJ7JdF7wIw2FbNmzWgDssCDjjtv58yPf42AK9oh4bwj9/WVyOs\r\nYWIp8n/6481+GGIqcbycoVqZaDwr3lDQBQd2KtVlLIg2KjuvYDhzzxS3eB+E\r\nwvNIXGjEmgyW++XzySqPnWCWvP4L+Xx7QgEXUvc9JnmdMs3pE1vSzFEs3qvT\r\nLikxdXrUpTIc6MZFWKAh5Ek+cjRQHpF/ClFE+BlkSC7Rztj3F6EbBAhkUV7G\r\n+sMlrWNl+T0/Xm1zOrhoo6gFFAR0RucnBg7ChRDYBBW+X+6cWwk+RdwkG27M\r\nYXttGjlGadip6fp3ZP5mlNHCYk7y0pf86nrQ8A6BPu/rnhcU9LMUjEiQwbg5\r\nXrLZsrwKG1TTfQTtER1a2GdRjb+5539IPt1UC0WCoXKLIhaHhiyVld2JS/7j\r\nBu/YLX6Axqvr/tsp6vtxZz6GB3zWfVKdhDksVsQBGrhPYSjGlSZsmrG20zMd\r\nO7O/5kcjzXzYbAJtB1xRpo9MVBaQTyQrhFmjGtqhYpoq05LQVZm1Sd5XfDam\r\nHYhPmPY3ua7fgu/kjTmh87cczVVBKW9GiAs0gVZduyPuUUi6VI9Wj//AKy8K\r\n1QOrYqq8EjCwuXh/NyJn5rIT7vgqF39LnYo=\r\n=RxeH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"f6df018d63c5afb1b6d2e84e7a3012cf098e9ae7","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_5.7.0_1670536326539_0.4374450252883284","host":"s3://npm-registry-packages"}},"6.1.8":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.8","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.8","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"378d8b1d7c46c08d226da7813a907eff6320f340","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.8.tgz","fileCount":27,"integrity":"sha512-jJJYvec18LKgvW0uz9N6xSsgFELrSEaesu7JB+dE8hDW0GlCncQVv4nhg1HQBl2S/8+PtuBZHqK0hhzkXSzzPg==","signatures":[{"sig":"MEUCIQDZygEEDsxUq1NUgPvcXeuFlStKuXuu8w5f9XGFfBNEQwIgPTyymeD4MhNmfQkiR9WtbZN+pL7joat0tXU9TmhVpMU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":518928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjkl4hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpOfg//bUmdvA3IF9CYqbe3DfUQ9A88K4TKf1QwDhuX4QXHRDZYePsw\r\n/jdp8Db+1KVeJr4Ugtfo1Qce+wNf8OBO6pwHTlo+TYT8yi8Ty7obHxY4c8wV\r\ngutpyC4hnm+2bqPOQbp+a+yN8NIYW8m5mC8LeMyQYR55jm8aTfBIAInuNje2\r\ndq5/DIvpGCUTv9gkbR3QOhRnRwkTmOR/OcTVywrRy6iis2GOP+KzRZZrvm/4\r\npwwH+l0tkdyEc3I79KzrZ3YCt+jxef45qzP2AJujgCuZAO28UAzqKNkrjqdq\r\nD73mpYsiW8NNm6ghuF0jlqzRBjTYR03PW4Re1oBRu4aUQbFlQkmO9kUX+F5x\r\n8/vMEbcKNlUj9jM6pluuJkQOiLbcbf+X+Zrrg+ots+QAi0x/SAR7Cbuf4UTV\r\nyitv4KIPa8vaSTGBS+xYbZGpZlb3RYqBjMPs5Za6lXTydftfe+1Tl9Aa+tGC\r\nMZ6IaQnBdVuiVdbGCd1P8yxcOylQqz/1jKe6M71gxyEtoJrT+26uN2wPa+Xk\r\npeY74lgxU9BGLnJ3EFYfe7nEYJICTn1YUblxg6DExBVLXhPw9m1Yz1tCTf6V\r\n1OZ463QT2wnZsRmbwPiknaN1mTzu1NTyG4Z6xbC70TdiApRMLt70Ehiqs0f4\r\n0y3HeHiDjoUPZ5ahBc+ra2GnVjS9ytN2P9Q=\r\n=SNIF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"40101460050d88babf1f2a01f1ecb9c9e114ea4c","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.8_1670536737670_0.39906722336106726","host":"s3://npm-registry-packages"}},"6.1.9":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.9","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.9","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"c15fc1e4677cfa3c0787b8865458bc081e253a94","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.9.tgz","fileCount":27,"integrity":"sha512-8voDHHhrugLeYhV5Ssh1Bmm+K/aW1r28Znrwaf6UkZm/1jVUMNkmX+pWtsDOTuPQ5g8deOdWURkhMWF4IiwVWg==","signatures":[{"sig":"MEUCIBDv/DwuDXbJDaMmcjxVvC23X3cLiWtWEc7dDIT1nIC1AiEAjJuUeGpJC7ehB6ARTsbGxltktPqqzRfvo0rQToyORFs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":518972,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmF/VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9EQ/+JecvrRqwl89BdXHOG8HlX8YO1qW1qVQTOWa8Uo3hW3ee/YK7\r\nzhi3PaDkW7Tj+H8DU4R2ls8CRT14U5aiaywm8ZzEC9xnLLUGLYib+v3WgkOb\r\nleoFFpbHsOdJwMcpCnxp4SGtxZ+SZOpK5D5ojAUiri/XKv0VnpxFp0hsK6CG\r\nGm6qfs0zYxUkx0hejmsuAijrNo+CNtMciIwmrN5Y/mmRufki3oG7YLc7Z84l\r\njPtfsKp6RrG4ciepxO7wUHDJH84lN/+6kxPWf+mWyEzOHW2hJLZU5Es7YzaK\r\n7LIzhPQ2MlJdP1HSMs9vMBbDApgTLswFYSZWqWhXOmp/7JnOvIWWZxVAM80n\r\nfRZXXOR870gN4ho9ZqufjiztJ3+BjpJ6sqYY6wB1UfCCcipUCgJaLqNxJ0SI\r\nmML9mSYYfZkve0CWy/um2NdchiRwHku1v+ue88UX51ZPp+0J0MFAkNgXwRlL\r\njG6VBYFrJpIL7C1I+eMaI0kfVodjOlCrpZ3t2L1ixcRM4fpNx6zDiF4dXu88\r\nfnzagh1OJ0WqjF+/qxW2cJJ8KC/mws8KSbmGghhnlre3m9axE/JTjC5lErAH\r\n5n3IizIhDeZRecZLyAZvJzEmJVnkrKtPHSdJ22P1/Qjhzqb4KvPcbcCD5ysf\r\nfufNGYL6O0L4GfeUT5mq6aORB3amTDhmjDg=\r\n=QMQ4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"a2aadcd9bc2bc0a4ccc1772fa0c90ba1f8aef35b","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.9_1670930389276_0.01946568678660765","host":"s3://npm-registry-packages"}},"6.1.10":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.10","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.10","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"e32d36ef9d815dafb492fb79769f5428a9e90449","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.10.tgz","fileCount":27,"integrity":"sha512-2MPmHFltjDRk4JFgyK6C3hOBYOdRhwIkdkhaD3R7sIfP7VAy+8k0Xoa3KilhsNpLO7AlA99xxfTHUzoEUfjtmg==","signatures":[{"sig":"MEYCIQCK8pPvs+8g0xhKpQWRblMwNQfAM486h5TIBeND23MCGwIhAOizWKdIw9LHbrK7ZrmiGcJsoJJjdgQB67CXXQvz7Ecf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":521246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmI5pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmosqxAAlsVYxqjzQQlEfKFkGvycZgjWb+kiDB0sZU3LaOnN09yPdmmF\r\nhMf1fsVT+pHhJcbqXcgEO1bD+EKpNGLXngRwLT2/9wmLrPB1yN+uduzzZjeG\r\nPaNrZz4gDBMmniZBJ6TqULoN9KDhmjYZoS376r1d3hZQTxm4KO2GonQfAFk3\r\nJcVnuOBP/zp4qbSxQKOwFTeAldpcUrvj/h1EJlnC/AnUSNzNAnkIMdHsZ6YD\r\nH7MensHw2i9jXZT/oZDwqBMPtr6kRbL1hMlqG1h/d/nTHhD//58dOFmw06LT\r\nGKUqSVhgxS1ybwc6294VDfxkQnpjc+WOO6Ywgayzl9TZ9cPHvN0ay5K/5Fum\r\nyuw6d2fT72xLXAu3r8VQpoPYDqQ0OUACvgvhbaPCDUx8cf47bHv0v2tURRML\r\nbk27cYXfrYNbvIl2c1wMxksDsmsJ/yhHw+vtw9e4w3NULiL3qHCAuZg4d6LK\r\n+aBb6Hk+ZLj1B9bkC2a8N9xydFkDpjZxDiur9Z/lozRA2A2mmVu35YleKL7+\r\nvpuBjoeGyfxdTN+AYDyBaIpUsSz950LsYzpuy4ANtYhtASLltWre4Ij/hRfD\r\na4GH41cS04HqiOyOSBzW8JZgRSpV6d0Y7MX5SfDyTcDutXclPezcM4XHeCWC\r\nNquG49ogx5xl9ClIhXcVx5biCLUUyORj+fQ=\r\n=+ehH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.7.0 - 2022-12-8\r\n\r\n## Changed\r\n- Localisation improovements of Ukrainian language\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"78ee3a3015be218b677531cbf1f54e5ba36ed6a2","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.10_1670942313623_0.33553027317964634","host":"s3://npm-registry-packages"}},"6.1.11":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.11","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.11","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"3cbead19656e48488591ed5766c6771bd0b30570","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.11.tgz","fileCount":27,"integrity":"sha512-B3R/189FhDfH1/F5o7JUYQLuu7rLtYm4ZZMJrflrONL5cJEvLAYPfVpNWAYrsu/pfzCMP2uySUuqWH9LcSmr0Q==","signatures":[{"sig":"MEUCIAPPMNYKXTJyz8GiQ7AaDMgMYuLdHAjiNeZfGyfdPE+pAiEA8FtRJAhNdtgJf/Ya21BTKV1JcEUgca3jzyW5UFBlJJs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":521249,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmce7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqL/BAAg1azxrcnJJL8oRZL29AQGWJoC7+2T2T9wBPIwsuQyQx0kPGJ\r\nnWQWoGVQQ0/7NlUaKiHaSmuNoitQguf5Zd7JOHFjpovrVHadZdIlX7jDGZ87\r\nKOEgIzFEpjT0X7EJMhmkl3doWXAbiNhb5tnjf/3sxV5EVoDTfAn0NKSPJeO0\r\n8uc6+yMVlZpcngyCCYU4FXY1Hl4+2RLX7keubZYtffNCnlKCK1HAWip30Y2p\r\npRcjLXSn6750deq1uR7RdoLCvKsm/g/+n1CmnOlj/EXBlo/jK4K3faGjRf67\r\nEyR3ZXsDp23BhdFvRJsOb52PmyL174kjTpoLFnIKYw/6dp3nE2afrqx4efGX\r\n/IvR9GMNvuiDsT16OqgSibXXcgvlJYt2KmVBAElXFPZ/UUBjUzJXaxXhwaW+\r\nfvXg3fSj4yr/uz5HV+dgXA727Xs3MzL7exabW3tL0ZAE6raMUDatmI8wWmiA\r\nqgm4NgID8YJkeRelv9qDB32i/NtVy9MAHOKXa9hhVKhos1Da0/gZOlj6L/BH\r\nNuvCGbP3Fh+nijRHTPNLyzGBv55/OBtSKU9/y+rXS9gShhwfSRRQAq+mM5jV\r\nxvD81aNqZUjgnO4fe8Lqi/Fq739fta/m6MRqtSmcOmqfojihjgnLgY+qTwIv\r\nOb+g5qiIoi6/z0kAsBdTkF1fA0Hj3o6Owk0=\r\n=KKuC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.7.0 - 2022-12-8\r\n\r\n## Changed\r\n- Localisation improovements of Ukrainian language\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"2095826f79c2f9317c395ce7f19530038cb7592d","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.11_1671022523620_0.3073645754771068","host":"s3://npm-registry-packages"}},"6.1.12":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.12","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.12","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"4a265a20121bbb8a2fa09dc10159b515f6129713","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.12.tgz","fileCount":27,"integrity":"sha512-fAyAoPoy97OgkOXmtwt8+TklQaSNodNVYf1RSXIi6LgHD2M5sgGo9fXo84xnNx2ZuCUl2t3ItCw4MNtEVp4y5g==","signatures":[{"sig":"MEYCIQDZsekWRiMIyCBnoZfdxigMJ/FXx/dQo4Hj8QoSi44y0wIhALEMq5zsIH/i1ilQblkGozBIMGQDrlVNeg9YDbh3RGH/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":522980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjmfbEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoFpw//WkOpFxr8x2LMfNvzBNLAVYecpRHi4ZqwwvELDl2NsDNPOHSk\r\nqBw2rU6vERBtGNRHOQ8qqgDtTNPvWWFTaEAxBrNnC3K6ODdyGOGGebZ2XOkU\r\nB1LHrK8oooQl9aRdCPlrfz849oIFYYN10f3Hq+ddSWuNwe1AIZOIawmARPvn\r\nm5oGtFD7Kh+gb1ZrvYc+SbR7kokL9KoVP/dgiBt+ecdCE6s2ICIir7rpxGED\r\noQwGAMuS8Bn6Ul4uHJ0zSWlqthwR9iegv4bVbcv9jZhIuS05FIC9xbQOy3In\r\nxgf3ehkyuOFw0uygGaX5OFTfwnFtOJ9QIEFfb89CEMeYTWGP4rw0pwG1IXb8\r\nfUUjdCzzwODHkmQ/1x91AhmRm53ecMdKZoyJaRjHiX5N+fXd4ElwMcUScy1w\r\nK8b56iH51EV+DrRtJayzw/lTD6TR5G2RBtCmnMI6iBSwePeJhoeN1WMNRrpK\r\nan/JdeNAzsNS7kulHzDeZyzZqzy60kF57q7s1E8N5845vP7y3ZvW2kRQzU9p\r\n4dvS65Mx8S948+8TN9+tDSTMC0voTEHj1fRknd1z+URu1WhML9UG2tK87raT\r\nbuAKVxWRNW2c789axalhwzYwJSh3lHySsAXfEvVmZdFBEd2CE41wN1On8h1q\r\np7Bd+zzJLVPC8/RTM2KXsb48/LgISs4BIbo=\r\n=RlOp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.7.0 - 2022-12-8\r\n\r\n## Changed\r\n- Localisation improovements of Ukrainian language\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","gitHead":"772507f1c8da440f317a906f4d1fff357dc5f029","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.12_1671034564069_0.8282348269828275","host":"s3://npm-registry-packages"}},"6.1.15":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.15","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.15","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"66c2155ab78431443071c7b91c85785d0630dc01","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.15.tgz","fileCount":27,"integrity":"sha512-uHbEkdE3cx+2/RP9Un+c/9/BXPVkrH2tgnCtqlCJqBTz6vbFQ2rPG+e1us9WUR/NeDdRSOw7I6+FHAgxXNDYDw==","signatures":[{"sig":"MEYCIQD047qmPDQ5uxAZQPkgYrLYphi150DybNQdDqL4VyYXLAIhANbvHU2CWQlfrkT94+UnIq6MXPbpub6mF9vExxlHVQV2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":523001,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjtBtBACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrYRA//aSam5FyyX85NMB+DLw98YCDVBvJJcb87v7IQwuMpfI0Fcf+3\r\nL5v2RSqaSr1QMHIVqpLCT1lA7oKdaKL/Y6oPY4c3R8L61r7qzz7WuxYAK+/0\r\nkzu7ksHm+lyviQO67jZ4tqblDrUVv6LoFv5PvEtpLXgeo4OE14nFSg2+8qP1\r\nMpE619SjIhJEC7jVahpb6u5PYQkCv8F8rWXnCTYaCxQ+/rovOKV8wHIxQpQC\r\n+sRSlog9MAbo7IP4Xk+9ZQNObJA4m3Sh7dWUpNEADxKBHWNNl0FTWqBqINQ3\r\nwgzUwnTCh1EdGtSGsplieBhwMqwGZfIMTx7nq0b+dlQkJDPIZ6XB7s3xp9WZ\r\n80YYA5qNyaivEQ50IafpO9q+Yn5IxRS06wxmk+kAczO9Omu1AtauCktA+aGO\r\nwBSw5yS5/nvOgVeOi1ZcpWtW54DGDoh7OYQXg3NgU/CACGt7te6bkyZNqIlr\r\njQGxYAwoseQ9xeCq0T7TRxHcOpUdvQ0luOXGVVawGONT9RWy+ig2GB/pgmrQ\r\nd7dBc3wn+35FJJ7esFgPvLvytjCHQA+bNyJyrZ+f2/rs2oSXixIwZFiejmUN\r\nNwopGruz0r+MSVsXHwSzcOanux1QsPPr9Q1+g/6VP9HDQoL2WhW8ZB1C6qF2\r\nXf8aFod2CzR4TpCQg/YihLOSiixFNkTST6w=\r\n=L5px\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"3c6b51d541e44551a30e375d4871b0db8b9a1651","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.15_1672747841422_0.7438843239587252","host":"s3://npm-registry-packages"}},"6.1.18":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.18","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.18","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"d87cdecb75546014bedd46e903e215f9a480fe77","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.18.tgz","fileCount":27,"integrity":"sha512-Owz+UsuandkoD7qCCioabts39cp/l0tUt21j+zRIGTSZo8O6iMW/SvMn9t/f7ff5BnErQywPVDoGnz0Qwst29Q==","signatures":[{"sig":"MEYCIQDp81nhHe+DnUxbBglF6NBRUO1sitKWfv5T/uTUrbnvMAIhANuj1zuxS9pTXT4J25hCvgpw1EgJogFg9cRty0AFkf2A","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":523324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj139GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKFxAAhndZthoM/F8hDGRI45G9RZCmBpt42FC37+smr5ssW8g2T0yO\r\nBRsyiGTks3sr2NA8tkAKOdkExfF+HQNfwp2LEHXJb0+N6uQTIqw9LwNgy8ru\r\nUWlv9/5+qkR2e56E0u39r/M2BrALLskU7pu7+VC+o3Pp6/PdQEyCkLGcEy+X\r\nSG+iKO148AvblsMwKO7rnBoHrPvihxzbuKXmh3g91q2rxwHY9BpczbrebJO7\r\nBHIYNfRgmfYcCjplqD++Ekj6V0YXc/U0VP7J9fw14YVhx/dohMZvglABbgki\r\nVNOda1Sd2cTkKtRNppM15UjZk157DN5iq8JWL5PMFaVfDFfilNMA91v1BqBj\r\nyLH/xb8LpeEFqtHCs5KPzoe6vDc7VyLD08jDOIcz8lTxHWdTmHSqNZ8qskGp\r\nk2KCerkNwT5jSQHAGYOlgv/jRhRwtNUL2vtKSiw3jsDoXJavj6K1mdq6we05\r\nImCTk+6djMqqdcirOSYlDejiDJ5vlj8LdytnCuUTXB5alXVjzPBi0v1DG9NI\r\n+0vP+mV+CXJ4BzruodU/P1/7eFRwqS4fUnr1C40fmfFQrqBNnMgI+kHk++Di\r\nM/QuJZhM5lfcijs74D63i+3UWyAs6eihBeeyvEf07/S3tinXglNF4ewPQdIu\r\nE0Wm2F7Ec8LeEsLjIFxdtNDgUwaYKMm2Y5M=\r\n=VRSv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"af090766fcd1da61eefa9333b98cff5888cd0ed8","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.18_1675067206168_0.4340281790426519","host":"s3://npm-registry-packages"}},"6.1.20":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.20","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.20","maintainers":[{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"f3898fea1d981dfcab98dacbb7df0c14d1100803","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.20.tgz","fileCount":27,"integrity":"sha512-pMf7m/VETpPlXEOFpQdy/UU60EoJUz7R6JlJUsN1v8lbL7Rc9JdzMa93rjXS5fNIkR5/NI+6gCapsP/NEeTsYA==","signatures":[{"sig":"MEUCIQC/E3b+gWjpXBmW62iFYWvSiLLbublAiYejJ+7Fm4US0gIgMQVbqOjZsQKVJDbHRRVUx0KVZvL6o2UXFItAhpwwJJk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":524322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkGqn0ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKGw//ZnqsugxfzOtWv5KzMslCnyhvl26/u3uexI62ve6S1u1XQhj7\r\nnYN7ynm7/GD1pEx5hgAr+NL+YprV1vDG+a42mVVmBcuRJ6i9LbhG1BfHdPK3\r\nPaqC5peCbQ22JXVpiioZupNBgi2GYCVPP87QJkK3HT7up6Ejth45KPy/gex9\r\ne2h16IqwIG9tr/OVEpSuT95NazvIZTl8VuJaaFQEoHapA6oiSeO1JJD6lxn7\r\nQylVUxudQb/8Yefqy2s0FfxnYVnKagmH1VPwQsvNohuHTXbdu1NCjUzZ0rBb\r\nTNMx0dMR9Vq5JiVzvNkdEHK/ATVQDqmXqAwD/ye726ZHakaHUcAvb1wMA5SO\r\nJvrc4+rWW23I6Z8jY2mrRDvEY1PjW1OdtNRDJYtzY64MNH5SVpFHpUVmQEZs\r\nACZzzFOxG5CsCnNg9kn9u3Q4RDZkZKPhuKYNrwi5Qex/FZ0rpRtrMpXiTmD4\r\nRRh3S5gVGz+Bm15/Lws6MfBYA1UhYXPCCSD6nCNi66IP8BKtR3wlgwrTZCdk\r\n9qP7+bCjCyx8W65P7buA6kVpur7gqEiGw7d9NaaRZFgPgsxum01RI9IfHeT1\r\nfigDOfRA+v6re7UVfA3+WufshO1GisKem5BBy4TkVxpA9shwzFt0B/ky7l8o\r\n6CWyw+DA/2MpSzC1l8unp7zlCE5aH3E94bA=\r\n=h881\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/widget.js","gitHead":"1693ab15cfd2f62283e0b4d2f4fdbf586202851e","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.20_1679469044449_0.45812105175410056","host":"s3://npm-registry-packages"}},"6.1.21":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.21","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.21","maintainers":[{"name":"tendijs","email":"endijs.titomers@tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"45018d8832d5babe1d31f53c164565bdbd279fbe","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.21.tgz","fileCount":27,"integrity":"sha512-CsSJ9KlhsQsOOTuleAkvqLGlcH1Td8GADjdvU2gwZ4zs+E8Q5FM0Eq1j6+A1caUy0QFD0IeBKanD3uq9nLg5Pw==","signatures":[{"sig":"MEUCIQD5V3GfhOtNqJoyz0EBeO5BZLDWIZB7PCwQgfL//dLtdQIgWXy/GacBq+7ECcpJ6FlzKSRL0G4dAy8JOVpkkVmO3I4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":524464},"main":"dist/widget.js","gitHead":"240db46e0931cbdf73f626d33a7b28a70310fb56","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.21_1689746579797_0.27975721869521175","host":"s3://npm-registry-packages"}},"6.1.23":{"name":"@tilde-nlp/web-translate-widget","version":"6.1.23","keywords":["translate","translator","html","tilde","webpage","website"],"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","_id":"@tilde-nlp/web-translate-widget@6.1.23","maintainers":[{"name":"tendijs","email":"endijs.titomers@tilde.lv"},{"name":"hostmaster_tilde","email":"hostmaster@tilde.lv"},{"name":"gupu.tilde","email":"guntars.puzulis@Tilde.lv"},{"name":"valters","email":"valters.sics@tilde.lv"},{"name":"tilde-bot","email":"tilde-bot@tilde.com"}],"homepage":"https://translate.tilde.com","bugs":{"email":"mt@tilde.com"},"dist":{"shasum":"ea6492b761faad5b14361718653a31b82930e8cc","tarball":"https://registry.npmjs.org/@tilde-nlp/web-translate-widget/-/web-translate-widget-6.1.23.tgz","fileCount":27,"integrity":"sha512-4nsGAjCtMsprVhntrhbVIO66F2xLGB7m/+uudcK7hd/fS2bJbWYh5bxuBSrp+fadbkSDkzUJqwbTc0IfH9liZA==","signatures":[{"sig":"MEQCICV9x1/eL9Q51UGQ++d+UZtLAFywGb/C626AF0bWHp6CAiASLNcfASoxJqFcsp2KEjK6p45lW2v/WyBJ5ANf1RB+WQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":524730},"main":"dist/widget.js","gitHead":"3be5106939fda36ff1cf6e4d7045a1e2e4ec0f1a","scripts":{"lint":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts","start":"webpack serve --progress --mode development","lint:fix":"standardx --parser @typescript-eslint/parser --plugin @typescript-eslint/eslint-plugin **/*.ts --fix","build:dev":"webpack --mode development","build:prod":"webpack --mode production","patch-version":"@powershell -NoProfile -Command ./auto_version_patch.ps1","publish-public-latest":"@powershell -NoProfile -Command ./publish_public_npm.ps1"},"_npmUser":{"name":"tilde-bot","email":"tilde-bot@tilde.com"},"standardx":{"parser":"@typescript-eslint/parser","plugins":["@typescript-eslint/eslint-plugin"]},"_npmVersion":"8.3.1","description":"Widget to integrate in to another website to translate it","directories":{"doc":"docs","lib":"dist","example":"example"},"_nodeVersion":"16.14.0","dependencies":{"rxjs":"^7.5.5","axios":"^0.25.0","core-js":"^3.21.1","@babel/polyfill":"^7.12.1"},"eslintConfig":{"env":{"node":true,"browser":true},"rules":{"no-var":"error","no-console":"error","brace-style":["error","stroustrup"],"no-unused-vars":"off","object-property-newline":["error",{"allowAllPropertiesOnSameLine":false}],"@typescript-eslint/no-unused-vars":"warn"},"globals":{"MutationObserverInit":"readonly","EventListenerOrEventListenerObject":"readonly"}},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.70.0","node-sass":"^7.0.1","standardx":"^7.0.0","ts-loader":"^9.2.8","css-loader":"^6.7.1","typescript":"^4.6.2","url-loader":"^4.1.1","sass-loader":"^12.6.0","webpack-cli":"^4.9.2","ifdef-loader":"^2.3.2","style-loader":"^3.3.1","suggestion-editor":"^2.0.5","webpack-dev-server":"^4.7.4","@typescript-eslint/parser":"^5.14.0","@typescript-eslint/eslint-plugin":"^5.14.0"},"_npmOperationalInternal":{"tmp":"tmp/web-translate-widget_6.1.23_1700730429493_0.2856564505333261","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-12-21T12:51:02.873Z","modified":"2026-02-10T08:43:05.204Z","1.8.0":"2020-12-21T12:35:40.992Z","1.8.1":"2020-12-21T12:51:03.259Z","1.8.2":"2020-12-21T14:23:52.081Z","1.8.18":"2020-12-21T15:01:56.195Z","1.8.27":"2021-01-12T14:57:39.440Z","1.8.31":"2021-01-12T15:25:07.376Z","1.8.32":"2021-01-12T15:29:06.636Z","1.8.34":"2021-01-12T15:57:01.729Z","1.8.38":"2021-01-13T08:17:20.078Z","1.8.39":"2021-01-13T09:33:53.750Z","1.8.40":"2021-01-13T09:37:01.903Z","1.8.41":"2021-01-13T15:26:57.592Z","1.8.42":"2021-01-13T15:38:14.637Z","1.8.43":"2021-01-14T09:36:01.950Z","1.8.44":"2021-01-15T15:37:39.628Z","1.8.45":"2021-01-18T07:59:21.103Z","1.8.46":"2021-02-10T17:41:56.848Z","1.8.47":"2021-02-10T18:58:44.771Z","1.8.48":"2021-02-24T10:28:12.905Z","1.8.49":"2021-03-01T07:42:11.837Z","1.8.50":"2021-03-15T15:29:06.852Z","2.0.0":"2021-03-24T08:22:34.375Z","2.0.1":"2021-03-25T07:42:38.444Z","2.0.2":"2021-04-07T07:49:43.922Z","2.0.5":"2021-04-09T11:14:02.754Z","2.0.6":"2021-04-09T11:53:01.411Z","2.0.7":"2021-04-09T12:08:29.224Z","2.0.8":"2021-04-09T12:16:55.115Z","2.0.10":"2021-04-09T12:23:41.529Z","2.0.11":"2021-04-14T07:01:46.767Z","2.0.12":"2021-04-14T07:03:17.524Z","2.0.13":"2021-04-14T13:29:43.440Z","2.1.0":"2021-04-14T13:41:32.845Z","2.1.1":"2021-04-16T12:37:55.396Z","2.1.2":"2021-04-19T08:18:42.104Z","2.1.3":"2021-04-19T14:35:02.602Z","2.1.4":"2021-04-27T09:40:01.442Z","2.1.5":"2021-04-30T08:03:55.182Z","3.2.8":"2021-05-12T15:10:58.962Z","3.2.11":"2021-06-03T14:44:57.300Z","3.2.13":"2021-06-04T11:20:04.075Z","3.2.14":"2021-06-07T14:49:21.656Z","3.2.15":"2021-06-08T11:11:22.543Z","3.2.16":"2021-06-10T13:12:09.801Z","3.2.17":"2021-06-10T13:35:24.236Z","3.2.18":"2021-06-10T13:41:42.161Z","3.2.20":"2021-06-10T14:28:35.822Z","4.0.0":"2021-06-18T12:01:08.587Z","4.1.0":"2021-06-30T12:15:52.988Z","4.1.1":"2021-07-01T11:34:52.292Z","4.1.2":"2021-07-01T12:15:08.920Z","4.1.3":"2021-07-01T14:20:32.160Z","4.1.4":"2021-08-20T13:02:03.754Z","4.2.0":"2021-09-15T07:51:59.513Z","4.2.1":"2021-09-17T07:20:50.775Z","4.2.2":"2021-10-27T18:46:13.902Z","4.2.3":"2022-01-05T15:43:33.639Z","4.3.0":"2022-01-05T15:56:22.566Z","4.3.1":"2022-01-10T10:23:24.093Z","4.3.2":"2022-01-10T13:40:26.713Z","5.0.0":"2022-01-20T12:18:44.200Z","5.0.1":"2022-01-20T12:27:41.696Z","5.0.2":"2022-01-28T12:36:57.684Z","5.0.3":"2022-01-31T13:39:09.138Z","5.0.4":"2022-02-01T09:06:05.594Z","5.0.5":"2022-02-02T12:24:53.215Z","5.0.6":"2022-02-08T13:11:39.249Z","5.0.7":"2022-02-10T15:41:35.458Z","5.0.8":"2022-02-11T09:31:43.520Z","5.0.9":"2022-02-23T13:21:55.118Z","5.0.10":"2022-03-03T10:17:46.907Z","5.0.11":"2022-03-03T14:36:07.293Z","5.0.12":"2022-03-09T08:23:32.655Z","5.0.13":"2022-03-10T07:10:56.441Z","5.0.14":"2022-03-10T07:37:25.545Z","5.0.15":"2022-03-10T08:58:04.017Z","5.0.16":"2022-03-10T11:00:54.339Z","5.0.17":"2022-03-16T09:08:28.432Z","5.1.2":"2022-03-23T07:26:32.097Z","5.1.7":"2022-03-31T13:08:57.113Z","5.1.9":"2022-04-07T14:14:31.051Z","5.2.0":"2022-05-24T09:31:45.127Z","5.1.10":"2022-06-21T07:02:52.743Z","5.1.11":"2022-06-22T09:14:15.931Z","5.1.13":"2022-07-15T11:56:29.851Z","5.1.15":"2022-07-18T11:21:21.430Z","5.3.0":"2022-08-01T09:46:08.169Z","5.3.1":"2022-08-01T09:54:22.833Z","5.3.3":"2022-08-05T09:57:58.360Z","5.3.4":"2022-08-18T08:45:37.581Z","5.3.8":"2022-10-13T13:53:13.654Z","5.3.9":"2022-10-31T16:02:11.300Z","5.3.10":"2022-11-01T09:24:16.508Z","5.4.0":"2022-11-28T08:29:28.091Z","5.7.0":"2022-12-08T21:52:06.735Z","6.1.8":"2022-12-08T21:58:57.890Z","6.1.9":"2022-12-13T11:19:49.541Z","6.1.10":"2022-12-13T14:38:33.817Z","6.1.11":"2022-12-14T12:55:23.836Z","6.1.12":"2022-12-14T16:16:04.315Z","6.1.15":"2023-01-03T12:10:41.654Z","6.1.18":"2023-01-30T08:26:46.397Z","6.1.20":"2023-03-22T07:10:44.701Z","6.1.21":"2023-07-19T06:03:00.035Z","6.1.23":"2023-11-23T09:07:09.759Z"},"bugs":{"email":"mt@tilde.com"},"author":{"url":"https://tilde.com","name":"@tilde-nlp/web-translate-widget"},"license":"SEE LICENSE IN LICENCE","homepage":"https://translate.tilde.com","keywords":["translate","translator","html","tilde","webpage","website"],"description":"Widget to integrate in to another website to translate it","maintainers":[{"email":"hostmaster@tilde.lv","name":"hostmaster_tilde"},{"email":"tilde-bot@tilde.com","name":"tilde-bot"},{"email":"endijs.titomers@tilde.lv","name":"tendijs"}],"readme":"<div align=\"center\">\r\n  <a href=\"https://translate.tilde.com/\">\r\n    <img width=\"200\" height=\"200\" src=\"https://tilde.com/themes/custom/drupal8_zymphonies_theme/logo.svg\">\r\n  </a>\r\n</div>\r\n\r\n<br/>\r\n\r\n# Tilde Website Translator\r\n\r\nQuickly scale up from one language to a dozen!\r\nNo coding, manual translation, or duplicated webpages! Simply select the target languages and Tilde’s Website Translator will instantly translate the content. For quality control, you can review and edit translations with a visual editor.\r\n\r\n\r\n## Features\r\n\r\n* **Text Editor** Manage your translations with text editor which will allow you to quickly post-edit machine translations in real-time.\r\n* **Visual Editor** The visual editor gives you complete quality control and allows you to edit and manage your translations effortlessly directly inside your website's design and structure!\r\n* **SEO indexing** Search engines will index machine translated pages and your customers will be able to find them in their native language.\r\nThis includes canonical URL metatag update of the page together with references to all available machine translated versions of the same page.\r\n* **SEO editing** Some keywords and headlines may need extra special attention and adaptation for each market. With the SEO text editor, you will be able to easily edit all the translated metadata information to make your content attractive to search engines.\r\n* **Integrations** Tilde Website Translator is compatible with any kind of website including WordPress, Shopify, Drupal, JavaScript, Joomla, HTML.\r\n\r\n## Table of contents:\r\n\r\n* [Quickstart](#quickstart)\r\n  * [Before you begin](#before-you-begin)\r\n  * [Installing the client library](#installing-the-client-library)\r\n  * [Translatable and untranslatable content](#translatable-and-untranslatable-content)\r\n  * [Examples](#examples)\r\n* [Usage](#usage)\r\n  * [Integrate using the default language selector](#integrate-using-the-default-language-selector)\r\n  * [Custom integration](#custom-integration)\r\n    * [Initialization](#initialization)\r\n    * [Start translation and wait until finished](#start-translation-and-wait-until-finished)\r\n    * [Cancel translation](#cancel-translation)\r\n    * [Translate with given language](#translate-with-given-language)\r\n    * [Get current language](#get-current-language)\r\n  * [Adding MT to already multilingual website](#adding-mt-to-already-multilingual-website)\r\n* [Options](#options)\r\n\r\n## Quickstart\r\n### Before you begin\r\nTo use the Tilde Website Translator you will need:\r\n1. an active TildeMT subscription. You can request a free [trial](http://tilde.com/products-and-services/machine-translation/pricing/Tilde-Website-Translator).\r\n1. a Client-ID for authentication. You can generate the Client-ID and the basic configuration code on the [TildeMT Platform](https://translate.tilde.com/dashboard/widget).\r\n\r\n### Installing the client library\r\n\r\n```bash\r\nnpm i @tilde-nlp/web-translate-widget\r\n```\r\n\r\n### Translatable and untranslatable content\r\n\r\nAll elements are translatable by default, but you may set elements as non-translatable by setting the value of `translate` attribute to `no`.\r\nThe same applies to language attributes. All elements are translatable unless the value of `lang` attribute is not equal to source language configuration in the options (`TildeMTTranslationPlugin.Options.sourceLanguage`).\r\nTranslate attribute affects localization and translation of element's attributes (href, title, label, etc.)\r\n\r\n```HTML\r\n<div translate=\"yes\">\r\n   You can define elements to translate with translate attribute\r\n   <div translate=\"no\">\r\n      Excluded elements can be child of translatable elements\r\n      <div translate=\"yes\">\r\n            Multiple levels of translate attribute can be processed\r\n            <div translate=\"no\">\r\n               This element will not be translated because of translate\r\n               attribute\r\n            </div>\r\n      </div>\r\n   </div>\r\n</div>\r\n```\r\n### Examples\r\nFull code examples can be found in the npm package's './examples' folder.\r\n\r\n- **examples/Multi pretranslated lang example** - Full example of pretranslated website integration\r\n\r\n   - **page_de.html** - Page in German\r\n   - **page_en.html** - Page in English. Used to translate page in other languages.\r\n   - **page_fr.html** - Page in French. This is configured to be already pretranslated page.\r\n\r\n- **examples/example1.html** - Example of custom language switching through translator API\r\n- **examples/example2.html** - Example of minimal pretranslated website integration\r\n\r\n# Usage\r\n\r\nInclude a reference to the Tilde Website Translator\r\n\r\n```HTML\r\n<script src=\"/dist/widget.js\"></script>\r\n```\r\nTilde Website Translator can be integrated using the default language selector or a custom solution. Both options support adding third party languages. Try the default selector for out-of-the-box solution.\r\nCheck [Options](#TildeMTTranslationPlugin.Options) for a full list of options.\r\nCheck the npm package's /examples folder for more implementation examples.\r\n\r\n## Integrate using the default language selector\r\nDefault language selector can be displayed as a dropdown or a list of buttons that can be styled by css to further match your style.  It will load the available languages automatically and start translation on making a selection.\r\n\r\n```HTML\r\n<html lang=\"en\">\r\n<head>\r\n   <!-- Enter the correct source code path -->\r\n   <script src=\"/dist/widget.js\"></script>\r\n</head>\r\n<body>\r\n   <div class=\"tildemt-widget\"></div>\r\n   <!-- This will be translated  -->\r\n   <p>This will be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p translate=\"no\">This will not be translated</p>\r\n\r\n   <!-- This will not be translated  -->\r\n   <p lang='ja'>これを訳して</p>\r\n</body>\r\n<footer>\r\n   <script>\r\n      // Configure\r\n\r\n      // Change XXXXXXXXXXX to your Client-ID\r\n      TildeMTTranslationPlugin.Options.api.clientId = \"XXXXXXXXXXX\";\r\n\r\n      TildeMTTranslationPlugin.Options.ui.toolbarPosition = \"top\";\r\n\r\n      // Display the language selector as a dropdown:\r\n      //    menu - \"menu\"\r\n      //    list of buttons - \"list\"\r\n      TildeMTTranslationPlugin.Options.ui.layout = \"menu\";\r\n\r\n      // Set UI language the administrator will see,\r\n      // by default it will be displayed in the language you are translating into\r\n      TildeMTTranslationPlugin.Options.ui.translation.adminLanguage=\"en\";\r\n\r\n      // Display UI in the language your visitors are translating into:\r\n      //    target language - \"target\",\r\n      //    the original language - \"source\"\r\n      TildeMTTranslationPlugin.Options.ui.translate = \"target\";\r\n\r\n      // Allow your visitors to suggest translations:\r\n      //    allow - \"true\"\r\n      //    disallow - \"false\"\r\n      TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest=false;\r\n\r\n      // Set the source language\r\n      TildeMTTranslationPlugin.Options.sourceLanguage = \"en\";\r\n\r\n      TildeMTTranslationPlugin.Initialize()\r\n   </script>\r\n</footer>\r\n</html>\r\n```\r\n# Custom integration\r\n### Initialization\r\n\r\nInitializes Tilde Website Translator - language select, fetches available MT systems.\r\nIf there is `lang` parameter in URL, it will translate to language that is provided in parameter value.\r\nIf there is no `lang` parameter and current source language is the same as last time when Tilde Website Translator was used, then it will translate to last translated target language.\r\n\r\nNormally Initialize should be issued only once, but further calls will reinitialize language select.\r\nConsider this when your page changes DOM including language menu.\r\n```JavaScript\r\n// Configure your personal API key\r\nTildeMTTranslationPlugin.Options.api.clientId = 'x-xxxxxxxx-xxxx-xx'\r\n\r\n// Source language that will be used to generate machine translation\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n\r\n// Initialize\r\nawait TildeMTTranslationPlugin.Initialize()\r\n```\r\n\r\nTranslation can be started or canceled through JS. This is especially needed if default language selection is not used.\r\n\r\n### Start translation and wait until finished\r\n\r\nTranslate page to specific language. If you call Translate even if previous translation is not finished, it will cancel current translation, restore web page in original language and start new translation in specified language - same as to issue Cancel and restore translation and start new translation with Translate\r\n\r\n```JavaScript\r\n// You can call next translation even when previous is not finished\r\nTildeMTTranslationPlugin.Translate(\"lt\").then(function(translationFinish){\r\n   // You can wait when page is translated\r\n   Promise.all(translationFinish).then(function(){\r\n      console.log(\"Translation is complete\")\r\n   })\r\n})\r\n```\r\n\r\nWhen page is translated, web page url `lang` parameter is changed to translated language or added if it does not exist\r\n\r\nFor example: https://example.com/ -> https://example.com/?lang=lt\r\nIf page translation is restored, then `lang` parameter is set to source language.\r\n\r\n### Cancel translation\r\n\r\nRestores page in Source language\r\n```JavaScript\r\nTildeMTTranslationPlugin.CancelAndRestore()\r\n```\r\n\r\n### Translate with given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\")\r\n```\r\n\r\n### Translate with specific system for given language\r\n```JavaScript\r\nTildeMTTranslationPlugin.Translate(\"lv\", \"smt-xxxxxxxx-xxxx-xx\")\r\n```\r\n\r\n### Get current language\r\n\r\nReturns language code for web page. Value can be also [SourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage).\r\nThis can be used to programmatically read web page language.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.CurrentLanguage\r\n```\r\n\r\n### Get available languages and machine translation systems\r\n\r\nReturns available languages and systems. Can be used to create custom language menu or language selection using JavaScript translation API.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.GetTargetLanguages()\r\n```\r\n\r\n## Adding MT to already multilingual website\r\n\r\n\r\nBroaden the language coverage with machine translation for an already multilingual\r\nwebsite that has content in two or more languages.\r\n\r\n**Step #1**: Additionally, to the initial configuration you have to decide which of the pre-existing language versions of the website will be the source for the translation. It is going be used to generate the machine translation in additional languages.\r\nSet the `sourceLanguage` option to the selected language.\r\nCheck what language directions your subscription offers to make the decision.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options.sourceLanguage = \"en\"\r\n```\r\n\r\n**Step #2**: Specify the languages of your webpage that already have the translation embedded and machine translation should\r\nnot be carried out. Configure the `thirdPartyTranslationLanguages` option if we have German and French versions\r\nof the English pages, for example.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .translation.thirdPartyTranslationLanguages = ['de', 'fr']\r\n```\r\n\r\n**Step #3**: Set the language of the webpage that is currently rendered (English, German, or French in this example).\r\nUse your own logic to detect this.\r\n\r\n```JavaScript\r\nTildeMTTranslationPlugin.Options\r\n  .currentLanguage = document.documentElement.getAttribute('lang')\r\nconsole.log('Current lang: ' + TildeMTTranslationPlugin.Options.currentLanguage)\r\n```\r\n\r\n**Step #4**: Implement a JavaScript action to perform when the user changes language to one of the embedded languages (German or\r\nFrench in this example) instead of machine translation.\r\n\r\n```JavaScript\r\nfunction onLanguageSelectedHandler(language) {\r\n  console.info('Language selected: ' + language)\r\n  return new Promise(function (resolve) {\r\n    var translationHandled = false\r\n\r\n    // Check if custom action must be perform to open a page with embedded\r\n    // translation bypassing MT process\r\n    if (TildeMTTranslationPlugin.Options\r\n          .translation.thirdPartyTranslationLanguages.includes(language)) {\r\n      translationHandled = true\r\n\r\n      if (TildeMTTranslationPlugin.Options.currentLanguage !== language) {\r\n        console.info('Redirecting to embedded language version of the page')\r\n        // Add your own logic on how to transform URL of current language to URL\r\n        // of selected target language or other necessary actions.\r\n        // Note. This transform https://example.com/en/news to\r\n        // https://example.com/de/news and vice versa.\r\n        window.location.href =\r\n          window.location.href.replace(/\\.com\\/\\w+/, \"/.com/\" + language)\r\n      }\r\n    }\r\n\r\n    resolve(translationHandled)\r\n  })\r\n}\r\n\r\nTildeMTTranslationPlugin.Initialize()\r\nTildeMTTranslationPlugin.Options.\r\n  translation.onLanguageSelected = onLanguageSelectedHandler;\r\n```\r\n\r\nMore elaborate example is available in npm package `./examples/Multi pretranslated lang example/` directory.\r\n\r\n# Options\r\n\r\nTilde Website Translator determines automatically target language if webpage uses `lang` parameter in URL query.\r\n\r\nTilde Website Translator supports `ISO 639-1` language codes with optional `ISO 3166-1 alpha-2` country codes. If language is not found with specified country code, then Tilde Website Translator checks if language without country code is available.\r\n\r\n### TildeMTTranslationPlugin.Options.sourceLanguage\r\n\r\n* Type: `String`\r\n* Default: `en`\r\n\r\n   Source language for machine translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.currentLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Current web page language (if the web page is already pre-translated).\r\n   The language in which the website has been translated.\r\n   When [currentLanguage](#TildeMTTranslationPlugin.Options.currentLanguage) is not equal to [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage), selecting language to translate, Tilde Website Translator will try to get page in [sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage) by calling translation.onLanguageSelected([sourceLanguage](#TildeMTTranslationPlugin.Options.sourceLanguage))\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.debug\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Enable verbose logging in console\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation API options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.clientId\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n\r\n   Authorization key which allows Tilde Website Translator to access translation API\r\n   **Required**\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Translation\r\n\r\n* Type: `String`\r\n* Default: `https://letsmt.eu/ws/Service.svc/json`\r\n\r\n   Translation service Uri\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.api.services.Authentication\r\n\r\n* Type: `String`\r\n* Default: `https://readymt.tilde.com/Account/Token`\r\n\r\n   Authentication service Uri\r\n\r\n<br/>\r\n<br/>\r\n\r\n## Translation options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.autoTranslate\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Save last translation `target language` and on next page load, automatically translate to it.\r\n\r\n   if browser url contains `lang` parameter in url, Tilde Website Translator will use it for translation.\r\n   Otherwise if `lang` parameter is not available, saved language will be used.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.systems\r\n\r\n* Type: `Object`\r\n* Default: `null`\r\n\r\n   Limit translation systems by defining systems and their target languages as object\r\n   Default will show all available systems.\r\n   Limiting systems can be useful, because there may be multiple systems with different domains for single language code.\r\n\r\n   ```JSON\r\n   {\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"lv\",\r\n      \"smt-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\": \"ru\"\r\n   }\r\n   ```\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateOnlyAllowedTags\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Translate only tags and their children which have `translate=\"yes\"` attribute\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.translateAttributes\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Translate HTML attributes\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.onLanguageSelected\r\n\r\n* Type: `Function`\r\n* Default: `() => Promise.resolve(false)`\r\n\r\n   Custom actions on selecting languages.\r\n   This function if implemented should return `Boolean` -> `true` when Language must be Translated with Tilde Website Translator, `false` otherwise\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.translation.thirdPartyTranslationLanguages\r\n\r\n* Type: `Array<string>`\r\n* Default: `[]`\r\n\r\n   Define languages which are supposed to be translated with third party\r\n\r\n### TildeMTTranslationPlugin.Options.translation.filterSystemsByAppID\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Filter systems by app id to show only systems\r\n\r\n<br/>\r\n<br/>\r\n\r\n## UI options\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.headless\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Hide MT toolbar with translation progress.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translation.adminLanguage\r\n\r\n* Type: `String`\r\n* Default: `null`\r\n* Example: `en`\r\n\r\n   Language code in which plugin interface is shown when user is signed in WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.allowAnyoneToSuggest\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show option to suggest translation for unauthorized users\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.suggestions.automaticPreview\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Automatically preview suggestion changes in web page when suggestion is added.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.tooltipShowDelay\r\n\r\n* Type: `Number`\r\n* Default: `500`\r\n\r\n   How much time to wait after user is started to hover translation to show suggestion popup (in ms)\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.toolbarPosition\r\n\r\n* Type: `String`\r\n* Default: `bottom`\r\n\r\n   Where toolbar is positioned. Values can be:\r\n   * **\"top\"** - Show translation toolbar at the top of the page\r\n   * **\"bottom\"** - Show translation toolbar at the bottom of the page\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.mainContentElement\r\n\r\n* Type: `HTMLElement`\r\n* Default: `null`\r\n\r\n   Main container `HTMLElement` for web page that contains all scrollable content\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.alwaysShowOriginalTextInPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show original text even if public suggestions are set to false\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopupTranslationProvider\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show notification about what service is providing translation\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showPopup\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide translation popup\r\n   Also when disabled, highlight for translated sentences won't be visible.\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showLanguagesInNativeLanguage\r\n\r\n* Type: `Boolean`\r\n* Default: `false`\r\n\r\n   Show languages in native language for example in Language Menu\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showSignInLink\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show sign in link for WTW\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.translate\r\n\r\n* Type: `String`\r\n* Default: `source`\r\n\r\n   Translate UI, values can be:\r\n   * **source** - Show UI in source language\r\n   * **target** - Show UI in target language\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.showTranslationControls\r\n\r\n* Type: `Boolean`\r\n* Default: `true`\r\n\r\n   Show or hide \"restore\" and \"cancel\" translation buttons on UI\r\n\r\n<br/>\r\n\r\n### TildeMTTranslationPlugin.Options.ui.layout\r\n\r\n* Type: `String`\r\n* Default: `menu`\r\n\r\n   Change display mode of the language selection in UI, values can be:\r\n     * **\"menu\"** - Show available languages in select\r\n     * **\"list\"** - Show available languages as list items\r\n     * **null** - Hide language menu\r\n   If you wish to add more functionality, please consider use your own language menu?\r\n\r\n<br/>\r\n\r\nYou can find all development options in npm package `./src/js/interfaces/IPluginOptions.ts`\r\n\r\n# Browser support\r\n\r\n<!--\r\nBrowser support comes from [tsconfig.json] -> target (ES6)\r\nhttps://www.w3schools.com/js/js_versions.asp\r\n-->\r\n\r\n| <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"Edge\" width=\"24px\" height=\"24px\" /></br>Edge | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" /></br>Firefox | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" /></br>Chrome | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" /></br>Safari | <img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png\" alt=\"Opera\" width=\"24px\" height=\"24px\" /></br>Opera |\r\n| --------- | --------- | --- | --- | --- |\r\n| 14+ | 52+ | 51+ | 10+ | 38+ |\r\n\r\nEdge Legacy and Internet Explorer browsers are not supported.\r\n\r\n# Changelog\r\n\r\nAll notable changes to this project will be documented in this file.\r\n\r\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\r\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\r\n\r\n<!--\r\n\r\n`Added` for new features.\r\n\r\n`Changed` for changes in existing functionality.\r\n\r\n`Deprecated` for soon-to-be removed features.\r\n\r\n`Removed` for now removed features.\r\n\r\n`Fixed` for any bug fixes.\r\n\r\n`Security` in case of vulnerabilities.\r\n\r\n-->\r\n## Current\r\n\r\n## Fixed\r\n- Native language name for Norwegian Bokmål\r\n\r\n## v6.1.20 - 2023-03-22\r\n## Fixed\r\n- Url localization fixes\r\n## Changed\r\n- Implemented translation of area-* attributes\r\n\r\n## v6.1.18 - 2023-1-30\r\n\r\n## Changed\r\n- Added api error retry timeout and request timeouts \r\n- SEO: Fixed canonical URL processing if canonical url already exists\r\n\r\n## v6.1.15 - 2023-1-3\r\n## Changed\r\n- Changed way that page is translated and added feature to translate only visible elements to speed up translation. \r\n- Optimized caching even more \r\n- Localized Ukrainian menu languages\r\n\r\n## v5.7.0 - 2022-12-8\r\n\r\n## Changed\r\n- Localisation improovements of Ukrainian language\r\n\r\n## v5.4.0 - 2022-11-28\r\n\r\n## Changed\r\n- Added translation caching inside Website translator for faster translations in same page\r\n\r\n## v5.3.10 - 2022-11-1\r\n\r\n## Changed\r\n- Changed package.json encoding from UTF-8 with BOM to UTF-8\r\n\r\n## v5.3.8 - 2022-10-13\r\n\r\n## Changed\r\n- Improoved dynamic translation for textual elements\r\n- Fixed translation display of page title\r\n\r\n## Added \r\n- Examples of how to asynchronous initialize website translator \r\n\r\n## v5.2.0 - 2022-08-1\r\n\r\n## Changed\r\n- Improved serialization of HTML text content to better support XML translation API. \r\nSome suggestions may be not used due to serialization changes. \r\nThis affects texts where named HTML entities or other non-XML suitable symbols are used. \r\n- Dynamic translation improved to better process DOM elements that disapear from DOM.\r\n\r\n## v5.1.11 - 2022-06-22\r\n\r\n## Changed\r\n- Enabled ui popups for authenticated users \r\n\r\n## v5.1.10 - 2022-06-21\r\n\r\n## Changed\r\n- Fixed built-in language menu when used inside html forms \r\n\r\n## v5.1.9 - 2022-04-7\r\n\r\n## Changed\r\n- Fixed internal intialization of language menus\r\n\r\n## v5.1.7 - 2022-03-31\r\n\r\n## Changed\r\n- Fixed dynamic translation boundaries using translate attribute\r\n- Readme improovements\r\n- Fixed broken GetTargetLanguages api\r\n- Add info in readme about GetTargetLanguages API\r\n\r\n## v5.1.2 - 2022-03-23\r\n\r\n## Changed\r\n- Fixed language localization in list layout. Now Language buttons are localized the same as in menu layout.\r\n\r\n## v5.0.17 - 2022-03-16\r\n### Changed\r\n- Updated dependencies\r\n\r\n## v5.0.16 - 2022-03-10\r\n### Changed\r\n- Translation suggestions tag editing support to increase customization of suggested text placement around HTML tags.\r\n### Fixed\r\n- When page does not contain language attributes, assume its correct one when watching dynamic content of page.\r\n\r\n## v4.3.2 - 2022-01-10\r\n### Added\r\n- Information about supported browsers\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n- Added info about url language parameter\r\n- Added to ability to detect new HTML elements when they are added to DOM and translate them.\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n- Localized de, fi lt, pl, sv languages\r\n\r\n## v4.2.2 - 2021-10-27\r\n### Added\r\n- Instructions about integration in multilingual site \"Adding MT to already multilingual website\"\r\n### Changed\r\n- Update description about SEO and non-translatable elements\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Localized more languages\r\n\r\n## v4.2.1 - 2021-09-17\r\n### Changed\r\n- Fixed iframe translation due to element reordering.\r\n\r\n## v4.2.0 - 2021-09-15\r\n### Added\r\n- Add option to configure in headless mode\r\n- Add more info about autotranslation and lang parameter\r\n\r\n## v4.1.4 - 2021-08-20\r\n### Added\r\n- Add changelog to readme\r\n\r\n## v4.1.3 - 2021-07-1\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.2 - 2021-07-1\r\n### Fixed\r\n- Fix deescaped html processing in text\r\n\r\n\r\n## v4.1.1 - 2021-07-1\r\n### Fixed\r\n- Fix canceling translation on source language.\r\n\r\n\r\n## v4.1.0 - 2021-06-30\r\n### Added\r\n- Add support for translation tag element reordering. Now inline elements will be reordered the same as translation API is transformed.\r\n- Add to readme about SEO functionality\r\n### Changed\r\n- Cleanup wtw custom element ids when restoring.\r\n\r\n\r\n## v4.0.0 - 2021-06-18\r\n### Fixed\r\n- Apply translatable attribute functionality for SEO url localization.\r\n\r\n\r\n## v3.2.20, v3.2.19 - 2021-06-10\r\n### Changed\r\n- Webpack: in dev env run with hot reload\r\n\r\n\r\n## v3.2.18, v3.2.17 - 2021-06-10\r\n### Fixed\r\n- Keep links without lang codes if it is source language and wtw is in init stage\r\n\r\n\r\n## v3.2.16 - 2021-06-10\r\n### Fixed\r\n- When initializing, apply SEO, so search engines instantly sees related pages in different languages.\r\n\r\n\r\n## v3.2.15 - 2021-06-08\r\n### Added\r\n- Allow to reinitialize language menu\r\n\r\n\r\n## v3.2.14 - 2021-06-7\r\n### Added\r\n- Allow to reinitialize language menu\r\n### Fixed\r\n- SEO restore should restore links to original state. SEO should be applied to iframes too\r\n- Remove suggestion windows after sign-out.\r\n\r\n\r\n## v3.2.13 - 2021-06-04\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n\r\n\r\n## v3.2.12 - 2021-06-04\r\n### Fixed\r\n- Autotranslate should not translate source language.\r\n\r\n\r\n## v3.2.11 - 2021-06-03\r\n### Fixed\r\n- Make or localize canonical urls for SEO improvements.\r\n- Ignore zombie text fragments.\r\n### Changed\r\n- Fix readme for wtw init\r\n### Removed\r\n- Remove deprecated allowpublic option\r\n- Remove widget.css from examples\r\n- Remove obsolete options because of new design\r\n\r\n\r\n## v2.0.9 - 2021-05-12\r\n### Fixed\r\n- Continue gracefully when system is gone and metadata cannot be read\r\n\r\n\r\n\r\n# Licence\r\n\r\nCopyright (C) 2020 by Tilde SIA. All rights reserved.\r\n\r\nProprietary software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.","readmeFilename":"README.md"}