Compare commits
1010 Commits
v99.99.99.
...
v8.2.2.24
| Author | SHA1 | Date | |
|---|---|---|---|
| 44ad9ad1ee | |||
| e97c8a8393 | |||
| 78fe9e02ce | |||
| 8e260dec56 | |||
| 3010db6bec | |||
| 9f922ccdbe | |||
| cb8b4d1681 | |||
| decb722cf9 | |||
| d7d31bd6b7 | |||
| e4f5f0bca7 | |||
| 8714cc3d69 | |||
| f1c5be0401 | |||
| d68860f025 | |||
| fdd90fd851 | |||
| abb7f6e893 | |||
| 89c60280ba | |||
| 8522e08670 | |||
| 52b792f3a2 | |||
| 05f7fa2b84 | |||
| 06c3dc1446 | |||
| b751d44a51 | |||
| 35cf2fb0b0 | |||
| 25ec76084f | |||
| c72218d3ae | |||
| 17458ec5b3 | |||
| c4d80f6b5e | |||
| 50bbd86cf5 | |||
| 2b0b902f9c | |||
| b36bfdec4d | |||
| 97b70cceb5 | |||
| 596d445439 | |||
| 4943adc21a | |||
| db3ccd7482 | |||
| 4c7ea51207 | |||
| 4f8f7399bb | |||
| 581f2aaef6 | |||
| 62f98954b4 | |||
| 819faf84f1 | |||
| 66cf2aca8c | |||
| 73b727ff9f | |||
| 4c8fb6b3be | |||
| dcc5a8f56d | |||
| 14df5fcfa0 | |||
| e2e8087800 | |||
| 4c6e6dc235 | |||
| cd4ff5e045 | |||
| b9b4aeffac | |||
| e25b10d618 | |||
| f00abbc9e7 | |||
| 09344f6bbb | |||
| c23e9b6a0f | |||
| 814ed51134 | |||
| 63237f52ca | |||
| 8cf285c51b | |||
| 4ae4687d29 | |||
| f55beaa8ac | |||
| 4be1abca19 | |||
| 7eac06aa57 | |||
| 763512afc4 | |||
| 1b0867af69 | |||
| aa42745a3a | |||
| 194ad60648 | |||
| 1e6465aef7 | |||
| 6b6fa50e49 | |||
| c01bcf1807 | |||
| 7201ec4f9e | |||
| c46b4e16d5 | |||
| 8d7767e4a7 | |||
| 6d4484cbe5 | |||
| 4f6a0d554c | |||
| a3430f7aec | |||
| aaea7e4cb8 | |||
| 5fd90b295f | |||
| 9fda921107 | |||
| b55c19f886 | |||
| d0b1cc9900 | |||
| 16580f4a00 | |||
| 2f4b28343c | |||
| 0d37b7ef7c | |||
| 597b3dfac7 | |||
| 1936274a13 | |||
| b7837f8dcb | |||
| e088efe744 | |||
| f3a56acae9 | |||
| b937d304d7 | |||
| 4fb7062b95 | |||
| b36388124d | |||
| 2c6c5e3a1f | |||
| ed3aa3485e | |||
| 6f12493e59 | |||
| 22f98fda0f | |||
| b91772e7d4 | |||
| 052f73e47f | |||
| 55b062d64a | |||
| b06c872a4c | |||
| ce846f489b | |||
| 7a5fdc9821 | |||
| fe50a6f1ab | |||
| 8268b633c7 | |||
| 5974a62fd2 | |||
| 56540846f1 | |||
| 54210428ef | |||
| 458920771c | |||
| dd189175a1 | |||
| 93c723eb47 | |||
| d564e78b2c | |||
| 27c01046af | |||
| aa7b6aae8b | |||
| be58fa39b2 | |||
| 6c827aa8bc | |||
| da1111a867 | |||
| 8cc0580310 | |||
| d4b82453d2 | |||
| 3420b20c2f | |||
| cfe6db3fd4 | |||
| 8c44f4a653 | |||
| 0561a1068c | |||
| d6309505ff | |||
| 2308abaf80 | |||
| 95e7aff092 | |||
| 8207aec7a5 | |||
| a5fa0096e8 | |||
| 0c886264ba | |||
| 871b08018f | |||
| 88220ddf7c | |||
| cfd010cc99 | |||
| e933e918dd | |||
| 3d11876f59 | |||
| 259c121707 | |||
| 083de6993c | |||
| b162076378 | |||
| a37fee7192 | |||
| 96bc425eb5 | |||
| 9054e4919d | |||
| e573bb4cc4 | |||
| f568f7ae18 | |||
| 4238de80cc | |||
| 146d26c868 | |||
| ecb520e4cb | |||
| efac5b9d70 | |||
| 9f20706205 | |||
| f48734b235 | |||
| 3b4b1b3684 | |||
| 0280503110 | |||
| 057d15e00d | |||
| 9a22cd66d9 | |||
| 67137ad6e1 | |||
| 1d3ae82f1c | |||
| a512a0ed26 | |||
| 27a9817f46 | |||
| 354b500077 | |||
| 7852934047 | |||
| 06482fa72c | |||
| 9efc5237aa | |||
| 4fa2bb8459 | |||
| 38581960f3 | |||
| 43bdef50a1 | |||
| 4c71114177 | |||
| 5eb6171954 | |||
| 26782137e7 | |||
| 8680ed5970 | |||
| af39abbf00 | |||
| dec31c2f59 | |||
| 9ae6252e53 | |||
| 3c84ab6633 | |||
| 7cffe4cee9 | |||
| 107459cf19 | |||
| a9b63ef903 | |||
| e863fd60f4 | |||
| 172a501247 | |||
| e487a89203 | |||
| aeb2394b39 | |||
| 5c804c1e1e | |||
| 6b319f1dc1 | |||
| 4a029f8f40 | |||
| 26673ec668 | |||
| 030cf91c65 | |||
| c60d2236d5 | |||
| 0a181bd04e | |||
| 3fc658b0f8 | |||
| 403c2e2d8c | |||
| beb831173d | |||
| 06a8668107 | |||
| a722b142bb | |||
| 39a61835ea | |||
| df3e018e3c | |||
| 0f32feb1b9 | |||
| d61ebb27ae | |||
| e86118a56f | |||
| 096edcfa66 | |||
| c5c1196a6f | |||
| 844e723387 | |||
| 57087f0465 | |||
| 86339c8ea6 | |||
| 528cc5538e | |||
| 2880604546 | |||
| 61d7a8003f | |||
| 9e52d6d8b1 | |||
| 6565fd2178 | |||
| f12fc29a57 | |||
| cd465a633e | |||
| 5fc22799e1 | |||
| 59057a5905 | |||
| 8be3cfd66a | |||
| b1167516d4 | |||
| 2f2ef0e65f | |||
| 33aba9a404 | |||
| 82003763fa | |||
| ea41130297 | |||
| f909c31250 | |||
| 352b4c0ded | |||
| 7ec588280b | |||
| d43e4a98df | |||
| 461122a052 | |||
| d1a1127b63 | |||
| 4263175871 | |||
| 98b93b3bc5 | |||
| e32438218f | |||
| 613d5e30a9 | |||
| ccaf607cef | |||
| 837e63f372 | |||
| a2a4c2b32f | |||
| fa303e9bf2 | |||
| e89eee7e28 | |||
| 6a4b79fb54 | |||
| b1dd965590 | |||
| 208bf086d8 | |||
| ebb1179190 | |||
| 3375315cc0 | |||
| 2bed0f0bb7 | |||
| 3570f189a0 | |||
| afd5a88b1d | |||
| a070b6e82b | |||
| 43d260cd7a | |||
| 14bb9fc8a4 | |||
| 57ca15153f | |||
| bbde4dc87b | |||
| a0ce620f84 | |||
| 5b46195f72 | |||
| 81c94c9fbd | |||
| cc3c640868 | |||
| e3c82eed09 | |||
| 1df3c046ee | |||
| 1f2623dc07 | |||
| 317018df5b | |||
| 729065fed0 | |||
| 248595472d | |||
| ead7e8de06 | |||
| 20e6664a6b | |||
| 61af52a534 | |||
| 6236f90a50 | |||
| 5118352714 | |||
| aa5a660001 | |||
| bf1f987333 | |||
| f1f834fb0c | |||
| 53c3e97b5c | |||
| eda1876f59 | |||
| 64eab6c4a2 | |||
| acb9a0e4c9 | |||
| 909f638a92 | |||
| c55142bd73 | |||
| 6c03b145e2 | |||
| 15e09fece2 | |||
| abf382a03b | |||
| 6d28e3f8d8 | |||
| 1b8f60d5dd | |||
| 0414319893 | |||
| 12ad0d9e7e | |||
| f3b35a878c | |||
| c712f596e1 | |||
| ad39fb7c19 | |||
| 7d2eb086ce | |||
| 0a61708f67 | |||
| 389198aec6 | |||
| 0d302ee8f6 | |||
| d3a548bf3f | |||
| fadae60e89 | |||
| 426b15b8f1 | |||
| 601146c847 | |||
| c4980c19e7 | |||
| 0bfb036be6 | |||
| 88b36049d2 | |||
| f1a1ec15ad | |||
| 495ba9814f | |||
| 558365325c | |||
| 683f1d33c4 | |||
| e8c98ba12a | |||
| e389cf41b8 | |||
| 80291baa40 | |||
| b9113f93f6 | |||
| af778a8636 | |||
| 47f4f022aa | |||
| b2202111ac | |||
| 1da215b1eb | |||
| 8c8d14b48c | |||
| 5217a64e83 | |||
| 456789191d | |||
| e1e9efa305 | |||
| a3016f3f96 | |||
| 333981cdad | |||
| cee60a340a | |||
| 6c09b3f62a | |||
| 4b7ba35f83 | |||
| abab30176f | |||
| 1abcf78b85 | |||
| a952858ab8 | |||
| 65ff78fba7 | |||
| 717996af87 | |||
| 66389fe69c | |||
| a63d8d4284 | |||
| ed39928d1f | |||
| 5bc7ffde73 | |||
| 5258fd0674 | |||
| ca274bc465 | |||
| b1d66e16a5 | |||
| 359cda0f67 | |||
| 24a3441b1e | |||
| c6eff10be1 | |||
| a7fca1a53b | |||
| 5b6a2ba318 | |||
| bb4aed6efb | |||
| 01d8c0acde | |||
| 8fdbdb926b | |||
| 31cf6ca486 | |||
| fbe24234d2 | |||
| ac894171fb | |||
| 0174d2a465 | |||
| 0f000c1457 | |||
| 97b0cdd042 | |||
| 143c0a095f | |||
| 04c004acdb | |||
| 1699dc22b5 | |||
| cc62ff8a61 | |||
| fd21292dbd | |||
| d43294bd8a | |||
| 81f5bdd528 | |||
| c1da8e14c3 | |||
| 767b5588ab | |||
| 8858c3c256 | |||
| 89f1c18d06 | |||
| 81ad7f7a64 | |||
| 23ba4ff5b3 | |||
| 423233e93f | |||
| 5f3eaa05f9 | |||
| 283d93667e | |||
| 158ac4161c | |||
| bf3df5c89d | |||
| d8251f3280 | |||
| e4db31fbd5 | |||
| b633f5ff19 | |||
| 0c8110d2aa | |||
| f9f8dada69 | |||
| 36535f89bb | |||
| 09031033aa | |||
| f657e5ab4a | |||
| e42f7fd271 | |||
| 0f0549c535 | |||
| e896f03acc | |||
| a74d6b8676 | |||
| 672aae3791 | |||
| 999e147539 | |||
| e57ad73d4f | |||
| 690ab5471b | |||
| f9fa10e70a | |||
| 2460f2c7ac | |||
| e3342a030c | |||
| 47b07a5c8b | |||
| e7630f516d | |||
| 3e6bee4cc1 | |||
| 2b1f7b0548 | |||
| ba195952b2 | |||
| 4ac8d9ee16 | |||
| c46292c595 | |||
| 19a38df423 | |||
| b771b70ced | |||
| 67a21fbe35 | |||
| 08dc8ae6a7 | |||
| dcf2fb43e0 | |||
| dca6f4173e | |||
| c91d765296 | |||
| 9615f5a93a | |||
| a9f0068600 | |||
| 9f2a72aafa | |||
| a71e7b1896 | |||
| d8cb434ad2 | |||
| 96af86846b | |||
| a83c22e537 | |||
| fa5fb2f182 | |||
| 4be1eaf917 | |||
| f9bd8db640 | |||
| 0ba4facdb7 | |||
| 03625022ca | |||
| f154ffc981 | |||
| be7ca0006a | |||
| 39a6581292 | |||
| 90142299e5 | |||
| 0f288d539e | |||
| d00237226b | |||
| 2ead6e1f7e | |||
| 98d48f373a | |||
| 92e7294f81 | |||
| ea9ac4bb42 | |||
| 5775f44f27 | |||
| 4ce10d82a1 | |||
| 3e9e4281c5 | |||
| 3eac4912e1 | |||
| 283139450c | |||
| e8df1c2821 | |||
| da3224de7b | |||
| 819aa2b03f | |||
| f1aafa5fd6 | |||
| ff2bcd0ef6 | |||
| a17c349fb8 | |||
| 2268bd1cf4 | |||
| 605c21c0be | |||
| 941c00c476 | |||
| 3f0495321c | |||
| 18fd30700f | |||
| 9721187083 | |||
| bce5e3760a | |||
| e4d43eda2a | |||
| ac6632d25b | |||
| b3d3b81274 | |||
| dab4841c1d | |||
| 0ec909346d | |||
| a7cf7ae378 | |||
| 0bcd7088e6 | |||
| d256b63263 | |||
| 89132ae29a | |||
| c15438a0d7 | |||
| 319a689fe2 | |||
| e85cb5137b | |||
| 163daa37c9 | |||
| 541a1e55b4 | |||
| d692abda4b | |||
| f0d7892526 | |||
| 79a2b7e8eb | |||
| 3a2f30bfcd | |||
| 9f75edf22a | |||
| 179766cc49 | |||
| bc4c1dd87c | |||
| 766adeeb51 | |||
| 7423edd7d9 | |||
| 03cc008de8 | |||
| 5e76f08c83 | |||
| 4ca824f1d7 | |||
| b17b9fed56 | |||
| a2c8499622 | |||
| ec268cacf7 | |||
| c683d17bda | |||
| 7918671725 | |||
| 408d80fff6 | |||
| 1b0e8df99f | |||
| 50104f1122 | |||
| b90f333fdd | |||
| 9e2aae1658 | |||
| 0168355600 | |||
| 480b8af172 | |||
| f5d767e59d | |||
| 62ad307327 | |||
| b3b605230f | |||
| ae2425f7e4 | |||
| 5849c9bb69 | |||
| 8ba1d5e8d7 | |||
| 91f3bda0b4 | |||
| 185605a1eb | |||
| 6563a26d2d | |||
| d9061c57a3 | |||
| b9c2c2e770 | |||
| a55d7b2d9d | |||
| e0489a6922 | |||
| dc14a9aa90 | |||
| 92206ed637 | |||
| a763e2b9fe | |||
| 841a4cd47e | |||
| a5cd051303 | |||
| 381c9d74aa | |||
| 154dbb63e9 | |||
| 09f6ba00b2 | |||
| 43f1555c68 | |||
| 83535632bb | |||
| f1d41a4bf2 | |||
| f43e7414bb | |||
| 4455521e00 | |||
| 7b91694107 | |||
| 8edb65692a | |||
| a36f270829 | |||
| f726ae534c | |||
| 69b266489f | |||
| 7c18d08bc6 | |||
| 11614ca5be | |||
| 23caedfeff | |||
| 3c10bdd9c6 | |||
| 56f4cb2208 | |||
| bb2b9de205 | |||
| 6431ee33a8 | |||
| 9750b37f97 | |||
| 6dc02a3f43 | |||
| 3bb39f4fb0 | |||
| 5a9933f002 | |||
| 5829794052 | |||
| 870e14af73 | |||
| e6f6e0572b | |||
| f4165d7715 | |||
| bea8fd534e | |||
| 2a59733e61 | |||
| ce937a58bb | |||
| 5955137575 | |||
| 91182b1967 | |||
| 931f2db9d1 | |||
| bcf6ba1428 | |||
| 32d914c78c | |||
| e324cb333b | |||
| 88e80de4fc | |||
| b16e35275b | |||
| 5519ac4afc | |||
| 32a66f4495 | |||
| 682265078c | |||
| 6717612fc1 | |||
| 8db11243fd | |||
| 45b6bfa443 | |||
| ad43b9298f | |||
| 5577f5388f | |||
| f504b2be6e | |||
| 776a34a5a0 | |||
| 6fcc535468 | |||
| ced855d6ac | |||
| 3725020468 | |||
| e230d8ea9b | |||
| a10366bae9 | |||
| a7fc3d38e4 | |||
| 11ead2e57f | |||
| 59a2b1b439 | |||
| 1bedfa0cf2 | |||
| b9137b1d86 | |||
| 892d390fff | |||
| 2e55bf1cfc | |||
| 9fe8701718 | |||
| c2c14dd2f4 | |||
| d1a67fa322 | |||
| 7f678c9ed8 | |||
| ee951fbfbc | |||
| 91f32c1387 | |||
| 7051437928 | |||
| 0967c1c3ac | |||
| cf097501c6 | |||
| 0b0e0dad8c | |||
| d97291719a | |||
| 75ca703f8a | |||
| 01618fee17 | |||
| 78a8b56b48 | |||
| 3b9bad4a26 | |||
| 435b8013f6 | |||
| a9063af6e1 | |||
| bde236075c | |||
| f74f34504f | |||
| 3243a04a1b | |||
| 6598aa585a | |||
| e02744e56b | |||
| ec596753c6 | |||
| 685a62bb9c | |||
| 2603acae16 | |||
| 11489ac8ba | |||
| e65f6f27be | |||
| a0a1b036e3 | |||
| f846197396 | |||
| 97f95fb850 | |||
| 7d8a1a8b6d | |||
| 23389056e8 | |||
| 457e38c35a | |||
| 11075304a5 | |||
| 7af14e75e8 | |||
| c8ccb3b502 | |||
| 449ad0759b | |||
| 32e4cb6d64 | |||
| 83b1dc07e1 | |||
| b61e05d203 | |||
| 9cf058078c | |||
| d72834687e | |||
| af1dc6d9b5 | |||
| e5560b25d7 | |||
| d894663a4a | |||
| b262a34540 | |||
| 3d0ae07de4 | |||
| efb4616ca6 | |||
| 037c5682f8 | |||
| 7c1939e8c9 | |||
| 6312833dd3 | |||
| ce58acbca9 | |||
| d40f932863 | |||
| d6d1981296 | |||
| b9fc1304d9 | |||
| dac1cdcdc1 | |||
| 248beed471 | |||
| 9d5feaaf99 | |||
| d397db61cd | |||
| 969240ad53 | |||
| 8fd9113c47 | |||
| 068687ba91 | |||
| 495d97bd3a | |||
| 160c0bef3c | |||
| 0b5b0d9c27 | |||
| b903bfc0cb | |||
| 580f8f3e89 | |||
| b19abbcb36 | |||
| 4de6f4d828 | |||
| ad4b2d136c | |||
| 6578d414ea | |||
| 5ac60bace6 | |||
| c06b734045 | |||
| f32f90282c | |||
| 7ca8a2122f | |||
| 293bc9b5b0 | |||
| a4cedb5725 | |||
| 8a2fc218d4 | |||
| 23d8315c37 | |||
| 38aae731ba | |||
| 4d49e54129 | |||
| c1d1af6fae | |||
| c2466ddebe | |||
| 7ecbc6d458 | |||
| 2e69ba0d3f | |||
| bf72a43605 | |||
| 86c2842198 | |||
| 9389607aaf | |||
| 3d63728344 | |||
| 40d1c0c03b | |||
| 0c2a271357 | |||
| e94d81e228 | |||
| 4c9c79ae8e | |||
| d51dab82c5 | |||
| 1e66124a8a | |||
| 5fd2878c3d | |||
| 63ec4db0b3 | |||
| 0d3ed49adf | |||
| 7197a216f8 | |||
| 716d4dc694 | |||
| d744bc2e23 | |||
| a69f7f343a | |||
| 10b40423ad | |||
| 4ea23d1677 | |||
| e0ed22d1f5 | |||
| 5148fd2601 | |||
| 97420e18cf | |||
| 10e1848beb | |||
| d4b2bf95bc | |||
| d613a02068 | |||
| 4ff7b6e543 | |||
| 066de3359d | |||
| 4577861f8b | |||
| 94df21fe21 | |||
| af38a4ba61 | |||
| 7e9356df5e | |||
| 5f68d09e2f | |||
| 18aa9487b3 | |||
| f00f212662 | |||
| 743176bb5c | |||
| 58eec51312 | |||
| 1f5c23a2d1 | |||
| 992dbe18af | |||
| ae738e1be2 | |||
| 9796abf846 | |||
| 9471891a89 | |||
| 9b64957189 | |||
| 6f5a854cd2 | |||
| f441ab1650 | |||
| fd5a2b7b0e | |||
| f2504ab740 | |||
| 7710c6d6e8 | |||
| 5b99e3d17a | |||
| 955b35f382 | |||
| 8580ea8a57 | |||
| cba2eac65d | |||
| f5ccc21f69 | |||
| 03a585685e | |||
| 40c520e8fd | |||
| 940b4bfc80 | |||
| 7fe7753c88 | |||
| 8fa40ab439 | |||
| 8f4de5ce0d | |||
| 94d22003b5 | |||
| f8d62ab8db | |||
| f955096fc0 | |||
| 9b0d3e1a20 | |||
| dafc66d5d8 | |||
| 902ad1341c | |||
| 1cd457c5c6 | |||
| 4536f83d10 | |||
| acdb60dd3b | |||
| c5315de84f | |||
| c639ba4287 | |||
| ea15f12551 | |||
| c0135c52c5 | |||
| f87fc045d3 | |||
| 684fa89c13 | |||
| f4d838710c | |||
| 0728a71f01 | |||
| 9cbb946c8f | |||
| 24ff9ce804 | |||
| 498268a7a3 | |||
| 2477fb21c5 | |||
| a809af8eca | |||
| 5f053de539 | |||
| f47f9bf897 | |||
| 7d09d87891 | |||
| 83843342d4 | |||
| a407b2b9c7 | |||
| b29b0c3fa5 | |||
| 821df5c700 | |||
| 56e96eeac1 | |||
| 6525c29107 | |||
| 3197702d7b | |||
| 286fb47fb8 | |||
| 44445de6e7 | |||
| 986eeefb4d | |||
| 12aba3d66d | |||
| 4c92c1c750 | |||
| 4e685d9eab | |||
| bb4e2b3b46 | |||
| d1b972fb18 | |||
| a17819efb2 | |||
| 79b98bed53 | |||
| 27267e2d5b | |||
| de5fc508f2 | |||
| dccc970fa1 | |||
| 5259cc19fa | |||
| 8527ac602f | |||
| 6ff7b4fa8f | |||
| 9747867935 | |||
| 42c2c93e81 | |||
| c0d8e0e339 | |||
| 8ebbfa59be | |||
| d06bb98a61 | |||
| dd3b7ab077 | |||
| 7d6933803f | |||
| 26fc316cee | |||
| bd922d202e | |||
| c350dd022f | |||
| f3cfdc353e | |||
| 9b010f8315 | |||
| 5171624adc | |||
| 3247a75318 | |||
| 81a43656b2 | |||
| 3df552b4b2 | |||
| e9b4fce50b | |||
| 1989c5f44d | |||
| 23193739f7 | |||
| 21d75418c2 | |||
| b630764daf | |||
| f9375a7414 | |||
| 52d72371d5 | |||
| 519f6d6f32 | |||
| eb6861059e | |||
| f5801a7f8c | |||
| 15b905613c | |||
| 5255f0e462 | |||
| 5e29215a11 | |||
| de32be3945 | |||
| 63c04c85b0 | |||
| 2d3fc72283 | |||
| b6e71e42c1 | |||
| dcf78b13f2 | |||
| d8b0bd55cf | |||
| 8ddbb6ba18 | |||
| 831e59b390 | |||
| 95de0fc2c7 | |||
| b48efac604 | |||
| c0eb1c8a85 | |||
| 118779aac1 | |||
| 276f5c1e20 | |||
| 64f66d4fa3 | |||
| ac3e0faba8 | |||
| fde6a09f75 | |||
| f12fb576d8 | |||
| b5585cf3db | |||
| f1a69218ae | |||
| dbce9946e0 | |||
| 3b66092a45 | |||
| 1b91592a9a | |||
| e9e6586d6d | |||
| 266e249b12 | |||
| ce9d62ad7d | |||
| a1db88e057 | |||
| 9ea7e14c37 | |||
| 9369b124da | |||
| 5581cc1ad2 | |||
| ccf6fb4098 | |||
| b26bd01f28 | |||
| 1fda76552f | |||
| b6b001d7ef | |||
| 6207d03984 | |||
| 888957c967 | |||
| febce17e86 | |||
| 63b2202f82 | |||
| 9f70cca92c | |||
| d2a6ebeb74 | |||
| 6c6dd7a954 | |||
| 778121f2af | |||
| 21e61a31af | |||
| 99c046e498 | |||
| c2d190e811 | |||
| 88b8af6004 | |||
| 9487a87b65 | |||
| 1d65ec61ea | |||
| 9e351e4190 | |||
| 9b9049a2fc | |||
| e5e84cdd67 | |||
| 6350e33c64 | |||
| 15d2f6fa79 | |||
| 0057b81adc | |||
| 28c8410e7d | |||
| c91fbf6320 | |||
| 030985bbeb | |||
| 7c57b0f575 | |||
| d75a4c529d | |||
| 2ee051e9fc | |||
| f7386df050 | |||
| d3185253a8 | |||
| e18d36f18d | |||
| 794e578a37 | |||
| c86c6bf17e | |||
| 0494d24e29 | |||
| 34e60cd33f | |||
| 089819cdc4 | |||
| 146f6224f2 | |||
| 65b9bfec01 | |||
| f620da3b98 | |||
| 62e2f7426c | |||
| 672a351402 | |||
| dfe61c5013 | |||
| 13c93ce2de | |||
| 3820f76d27 | |||
| b175ebc761 | |||
| 20aea45ac7 | |||
| a220cdd627 | |||
| 20ca2d0cbd | |||
| e1d8418055 | |||
| 6e6e5c472e | |||
| 9d3d5243b2 | |||
| 440b51c7ff | |||
| 1d747b834d | |||
| a5a1df45b1 | |||
| 43fc58f6c7 | |||
| 84824d1ed4 | |||
| 1620e8277d | |||
| 09c1b9e45c | |||
| c7409e3f35 | |||
| 5c09e1cb53 | |||
| 03ffae8115 | |||
| 6a059bb498 | |||
| 2459863430 | |||
| c78814ced4 | |||
| e444fd02e5 | |||
| 0a76dba089 | |||
| 7666394f1d | |||
| b8c6f72e74 | |||
| f501612067 | |||
| 3cf0c1a6a5 | |||
| 52c11fa3a1 | |||
| 86d2fc1399 | |||
| d2f77d857d | |||
| 5b7fe48354 | |||
| 6311aa0a6f | |||
| 043fb2c0cf | |||
| c2bb7985de | |||
| eaf0245216 | |||
| ace724bc21 | |||
| 4f0e00b597 | |||
| 1ab93ccb28 | |||
| 1f6a4b5d52 | |||
| 36463aae8c | |||
| 6aa57e3dfb | |||
| 880423545f | |||
| af0c7f343a | |||
| 8b5a2aceb0 | |||
| 31a436047c | |||
| 73c60fba7d | |||
| dd4021a95b | |||
| 67000fd0ed | |||
| 4387282949 | |||
| 4bce33e3c2 | |||
| e913cb3d27 | |||
| 2f87f3b7c9 | |||
| 4e3f87f692 | |||
| 8d94e42421 | |||
| 5b17ba41c3 | |||
| 7ecec4219a | |||
| 5ab7261d31 | |||
| 8696f26555 | |||
| cd0647e0f7 | |||
| 038b2ffc57 | |||
| 6990bc40d2 | |||
| bbeaea6d2e | |||
| b093666d90 | |||
| 7825d0ae48 | |||
| c6d3c8d684 | |||
| 0d3cda32fa | |||
| e5d4be0d61 | |||
| 5f2c5cea58 | |||
| 4ec7e46736 | |||
| 1353df7977 | |||
| 0a3785a3a4 | |||
| bcc49a4f41 | |||
| fdf55a0da2 | |||
| c23a8ac47d | |||
| b7212b035a | |||
| 39f39b0316 | |||
| c3b2785c3f | |||
| 6bd081c44d | |||
| 28211493bc | |||
| 687b811eef | |||
| eaa06d1919 | |||
| ac24eb73f7 | |||
| 9c26b4e563 | |||
| f897ffaede | |||
| ef067c9497 | |||
| 3658988225 | |||
| b5251b0e92 | |||
| 14025def10 | |||
| de4414fbb1 | |||
| b49341f64e | |||
| 8fd0cfcd47 | |||
| feaa30bf2d | |||
| 304995c3e1 | |||
| f096fd4d93 | |||
| d3a08acec3 | |||
| 71215e342f | |||
| 3c54bed7be | |||
| 8c433b2867 | |||
| fa50ffbc28 | |||
| a39256af77 | |||
| 7257b0098e | |||
| 8ea98a421d | |||
| f3fe76387b | |||
| 11c9af2f80 | |||
| c3d7106072 | |||
| cf01b7f426 | |||
| 8ce5c2d8d1 | |||
| 51a28a7889 | |||
| c3074066f3 | |||
| 8704be3daf | |||
| 88ec714801 | |||
| 75d6e79e6d | |||
| e3a7399125 | |||
| ddbfdf83bb | |||
| 2fd48b9a37 | |||
| 4b185e418c | |||
| 3d5d20da13 | |||
| 93541a2702 | |||
| 88f058f7b6 | |||
| f1670c38df | |||
| 11fedb58bd | |||
| 650b514d82 | |||
| 5363a794b7 | |||
| 359c732b8a | |||
| 952bd2b2f1 | |||
| 5ab8c4466a | |||
| d8a7eeb1a0 | |||
| 226689611e | |||
| 0eb8c85f6f | |||
| 1c6312ed46 | |||
| 0e5e2b125d | |||
| 4b822dafe9 | |||
| cf64a80daa | |||
| d29805a5ed | |||
| 2a75ea80b8 | |||
| 964aedf57b | |||
| 38988ab5fd | |||
| 1b1f276354 | |||
| 3e9a98f0d8 | |||
| 05b1b98204 | |||
| b01553af60 | |||
| 81a75db351 | |||
| ed0386e483 | |||
| 49d220d673 | |||
| c3922de50c | |||
| f697a08e96 | |||
| c3b2f70cec | |||
| 38e07e094a | |||
| 73acfe8721 | |||
| 29f7beff3c | |||
| 0a8df9cb5d | |||
| 39820cec0a | |||
| 56ccbf4c32 | |||
| b19482b676 | |||
| fe49436ca9 | |||
| 5bc2b1ed2a | |||
| e9893c7c51 | |||
| fe352ebad1 | |||
| 18cf21efe4 | |||
| 825aafda25 | |||
| 7293ddfbb6 | |||
| 8d52ba9f79 | |||
| 2fe1619389 | |||
| 80028ead64 | |||
| f57b430744 | |||
| 75ab636a66 | |||
| 7b275b15b7 | |||
| 641cd912bb | |||
| 583e162520 | |||
| 376ed20a6d | |||
| 6eb54c5386 | |||
| 1871e0ae4a | |||
| a6c805791e | |||
| bf20f7b263 | |||
| cb6aedcab1 | |||
| d0a702e7e7 | |||
| d06fd45119 | |||
| 53e780579b | |||
| 170105efd3 |
10
.github/workflows/artifact-csharp-mvc.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Csharp MVC
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/csharp-mvc/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/csharp-mvc/**']
|
||||
|
||||
jobs:
|
||||
@ -21,11 +21,9 @@ jobs:
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/csharp-mvc
|
||||
mkdir -p ./deploy/'DotNet (Csharp MVN) Example'
|
||||
mkdir -p ./deploy/'DotNet (Csharp MVC) Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'DotNet (Csharp MVC) Example'
|
||||
cd ./deploy/'DotNet (Csharp MVC) Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'DotNet (Csharp MVC) Example'/assets/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
9
.github/workflows/artifact-csharp.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Csharp
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/csharp/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/csharp/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,11 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/csharp
|
||||
mkdir -p ./deploy/'DotNet (Csharp) Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'DotNet (Csharp) Example'
|
||||
cd ./deploy/'DotNet (Csharp) Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'DotNet (Csharp) Example'/assets/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
32
.github/workflows/artifact-go.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
name: Artifact Golang
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/go/**']
|
||||
pull_request:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/go/**']
|
||||
|
||||
jobs:
|
||||
artifact:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/go
|
||||
mkdir -p ./deploy/'Go Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Go Example'
|
||||
rm -rf ./deploy/'Go Example'/static/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Go Example'/static/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: Go.Example
|
||||
path: ${{ github.workspace }}/web/documentserver-example/go/deploy
|
||||
10
.github/workflows/artifact-java.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Java
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,12 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/java
|
||||
mkdir -p ./deploy/'Java Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Java Example'
|
||||
cd ./deploy/'Java Example'/src/main/resources/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'Java Example'/src/main/resources/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Java Example'/src/main/resources/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
10
.github/workflows/artifact-node.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Nodejs
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/nodejs/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/nodejs/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,12 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/nodejs
|
||||
mkdir -p ./deploy/'Node.js Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Node.js Example'
|
||||
cd ./deploy/'Node.js Example'/public/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'Node.js Example'/public/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Node.js Example'/public/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
31
.github/workflows/artifact-php-laravel.yml
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
name: Artifact PHP Laravel
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php-laravel/**']
|
||||
pull_request:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php-laravel/**']
|
||||
|
||||
jobs:
|
||||
artifact:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/php-laravel
|
||||
mkdir -p ./deploy/'PHP Laravel Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'PHP Laravel Example'
|
||||
rm -rf ./deploy/'PHP Laravel Example'/public/assets/document-formats/.git
|
||||
rm -rf ./deploy/'PHP Laravel Example'/public/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: PHP-Laravel.Example
|
||||
path: ${{ github.workspace }}/web/documentserver-example/php-laravel/deploy
|
||||
10
.github/workflows/artifact-php.yml
vendored
@ -3,10 +3,10 @@ name: Artifact PHP
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,12 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/php
|
||||
mkdir -p ./deploy/'PHP Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'PHP Example'
|
||||
cd ./deploy/'PHP Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'PHP Example'/assets/document-formats/.git
|
||||
rm -rf ./deploy/'PHP Example'/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
10
.github/workflows/artifact-python.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Python
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/python/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/python/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,12 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/python
|
||||
mkdir -p ./deploy/'Python Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Python Example'
|
||||
cd ./deploy/'Python Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'Python Example'/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Python Example'/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
10
.github/workflows/artifact-ruby.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Ruby
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/ruby/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/ruby/**']
|
||||
|
||||
jobs:
|
||||
@ -18,14 +18,12 @@ jobs:
|
||||
- name: Build Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/ruby
|
||||
mkdir -p ./deploy/'Ruby Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Ruby Example'
|
||||
cd ./deploy/'Ruby Example'/public/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'Ruby Example'/public/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Ruby Example'/public/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
9
.github/workflows/artifact-spring.yml
vendored
@ -3,10 +3,10 @@ name: Artifact Java Spring
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java-spring/**']
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java-spring/**']
|
||||
|
||||
jobs:
|
||||
@ -23,9 +23,8 @@ jobs:
|
||||
cd ./web/documentserver-example/java-spring
|
||||
mkdir -p ./deploy/'Java Spring Example'
|
||||
rsync -av --exclude='deploy' ./ ./deploy/'Java Spring Example'
|
||||
cd ./deploy/'Java Spring Example'/src/main/resources/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./deploy/'Java Spring Example'/src/main/resources/assets/document-formats/.git
|
||||
rm -rf ./deploy/'Java Spring Example'/src/main/resources/assets/document-templates/.git
|
||||
- name: Upload Artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
29
.github/workflows/lint-go.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
name: Golangci
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/go/**']
|
||||
pull_request:
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/go/**']
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./web/documentserver-example/go
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.21'
|
||||
|
||||
- name: Lint Golangci
|
||||
run: |
|
||||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||||
golangci-lint run
|
||||
4
.github/workflows/lint-java.yml
vendored
@ -3,10 +3,10 @@ name: Lint Java
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/java/**']
|
||||
|
||||
jobs:
|
||||
|
||||
4
.github/workflows/lint-nodejs.yml
vendored
@ -3,10 +3,10 @@ name: ESLint
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/nodejs/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/nodejs/**']
|
||||
|
||||
env:
|
||||
|
||||
37
.github/workflows/lint-php-laravel.yml
vendored
Normal file
@ -0,0 +1,37 @@
|
||||
name: Laravel Pint
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php-laravel/**']
|
||||
pull_request:
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/php-laravel/**']
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: true
|
||||
matrix:
|
||||
php: [8.2]
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./web/documentserver-example/php-laravel
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
extensions: json, dom, curl, libxml, mbstring
|
||||
coverage: none
|
||||
|
||||
- name: Install Pint
|
||||
run: composer global require laravel/pint
|
||||
|
||||
- name: Run Pint
|
||||
run: pint --test
|
||||
4
.github/workflows/lint-php.yml
vendored
@ -3,10 +3,10 @@ name: PHPCs
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/php/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/php/**']
|
||||
|
||||
jobs:
|
||||
|
||||
23
.github/workflows/lint-python.yml
vendored
@ -3,10 +3,10 @@ name: PyLint
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/python/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/python/**']
|
||||
|
||||
jobs:
|
||||
@ -21,20 +21,17 @@ jobs:
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install flake8
|
||||
pip install pylint
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
make dev
|
||||
|
||||
- name: Lint Flake8
|
||||
run: |
|
||||
flake8 ./**/*.py --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||
flake8 ./**/*.py --count --max-complexity=10 --max-line-length=79 --statistics
|
||||
|
||||
- name: Lint Pylint
|
||||
run: |
|
||||
pylint ./**/*.py
|
||||
make lint
|
||||
|
||||
# TODO: Configure mypy
|
||||
# - name: Types mypy
|
||||
# run: |
|
||||
# make types
|
||||
|
||||
36
.github/workflows/lint-ruby.yml
vendored
@ -3,10 +3,10 @@ name: Rubocop
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/ruby/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/ruby/**']
|
||||
|
||||
jobs:
|
||||
@ -16,16 +16,22 @@ jobs:
|
||||
run:
|
||||
working-directory: ./web/documentserver-example/ruby
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
- uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.0'
|
||||
bundler-cache: true
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
bundle install
|
||||
- name: Rubocop
|
||||
run: |
|
||||
gem install rubocop
|
||||
rubocop
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Ruby
|
||||
uses: ruby/setup-ruby@v1
|
||||
with:
|
||||
ruby-version: '3.2.2'
|
||||
|
||||
- name: Update Submodules
|
||||
run: |
|
||||
git submodule update --init --recursive
|
||||
|
||||
- name: Install Dependencies
|
||||
run: |
|
||||
bundle install
|
||||
|
||||
- name: Rubocop
|
||||
run: |
|
||||
bundle exec rubocop
|
||||
|
||||
4
.github/workflows/lint-spring.yml
vendored
@ -3,10 +3,10 @@ name: Lint Spring
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches: [master, main]
|
||||
branches: [master]
|
||||
paths: ['web/documentserver-example/java-spring/**']
|
||||
pull_request:
|
||||
branches: [master, main, develop]
|
||||
branches: [master, develop]
|
||||
paths: ['web/documentserver-example/java-spring/**']
|
||||
|
||||
jobs:
|
||||
|
||||
61
.github/workflows/release.yml
vendored
@ -2,7 +2,7 @@ name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master,main]
|
||||
branches: [master]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@ -13,8 +13,10 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v3
|
||||
- name: Install Zip
|
||||
run: sudo apt-get install zip
|
||||
- name: Clone Submodules
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
git submodule update --init --recursive
|
||||
- name: Get Info
|
||||
run: |
|
||||
echo "version=$(grep -Eo '[0-9]+(\.[0-9]+)+' CHANGELOG.md | head -n 1)" >> $GITHUB_OUTPUT
|
||||
@ -25,91 +27,66 @@ jobs:
|
||||
- name: Build Csharp MVC Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/csharp-mvc
|
||||
mkdir -p ./'DotNet (Csharp MVC) Example'
|
||||
rsync -av --exclude='DotNet (Csharp MVC) Example' ./ ./'DotNet (Csharp MVC) Example'
|
||||
cd ./'DotNet (Csharp MVC) Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf .git
|
||||
- name: Build Csharp Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/csharp
|
||||
mkdir -p ./'DotNet (Csharp) Example'
|
||||
rsync -av --exclude='DotNet (Csharp) Example' ./ ./'DotNet (Csharp) Example'
|
||||
cd ./'DotNet (Csharp) Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'DotNet (Csharp) Example'/assets/.git
|
||||
- name: Build Java Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/java
|
||||
mkdir -p ./'Java Example'
|
||||
rsync -av --exclude='Java Example' ./ ./'Java Example'
|
||||
cd ./'Java Example'/src/main/resources/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'Java Example'/src/main/resources/assets/document-formats/.git
|
||||
rm -rf ./'Java Example'/src/main/resources/assets/document-templates/.git
|
||||
- name: Build Nodejs Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/nodejs
|
||||
mkdir -p ./'Node.js Example'
|
||||
rsync -av --exclude='Node.js Example' ./ ./'Node.js Example'
|
||||
cd ./'Node.js Example'/public/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'Node.js Example'/public/assets/document-formats/.git
|
||||
rm -rf ./'Node.js Example'/public/assets/document-templates/.git
|
||||
- name: Build PHP Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/php
|
||||
mkdir -p ./'PHP Example'
|
||||
rsync -av --exclude='PHP Example' ./ ./'PHP Example'
|
||||
cd ./'PHP Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'PHP Example'/assets/document-formats/.git
|
||||
rm -rf ./'PHP Example'/assets/document-templates/.git
|
||||
- name: Build Python Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/python
|
||||
mkdir -p ./'Python Example'
|
||||
rsync -av --exclude='Python Example' ./ ./'Python Example'
|
||||
cd ./'Python Example'/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'Python Example'/assets/document-formats/.git
|
||||
rm -rf ./'Python Example'/assets/document-templates/.git
|
||||
- name: Build Ruby Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/ruby
|
||||
mkdir -p ./'Ruby Example'
|
||||
rsync -av --exclude='Ruby Example' ./ ./'Ruby Example'
|
||||
cd ./'Ruby Example'/public/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'Ruby Example'/public/assets/document-formats/.git
|
||||
rm -rf ./'Ruby Example'/public/assets/document-templates/.git
|
||||
- name: Build Spring Artifact
|
||||
run: |
|
||||
cd ${{ github.workspace }}
|
||||
cwd=$(pwd)
|
||||
git submodule update --init --recursive
|
||||
cd ./web/documentserver-example/java-spring
|
||||
mkdir -p ./'Java Spring Example'
|
||||
rsync -av --exclude='Java Spring Example' ./ ./'Java Spring Example'
|
||||
cd ./'Java Spring Example'/src/main/resources/assets
|
||||
rm -rf ./.git/
|
||||
rm .git
|
||||
rm -rf ./'Java Spring Example'/src/main/resources/assets/document-formats/.git
|
||||
rm -rf ./'Java Spring Example'/src/main/resources/assets/document-templates/.git
|
||||
- name: Pack Artifacts
|
||||
run: |
|
||||
cd ${{ github.workspace }}/web/documentserver-example/csharp-mvc
|
||||
|
||||
37
.gitmodules
vendored
@ -1,23 +1,21 @@
|
||||
[submodule "web/documentserver-example/csharp-mvc/assets"]
|
||||
path = web/documentserver-example/csharp-mvc/assets
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
[submodule "web/documentserver-example/csharp/assets"]
|
||||
path = web/documentserver-example/csharp/assets
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
[submodule "web/documentserver-example/nodejs/public/assets/document-templates"]
|
||||
path = web/documentserver-example/nodejs/public/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/nodejs/public/assets/document-formats"]
|
||||
path = web/documentserver-example/nodejs/public/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
branch = master
|
||||
[submodule "web/documentserver-example/csharp-mvc/assets/document-templates"]
|
||||
path = web/documentserver-example/csharp-mvc/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/csharp-mvc/assets/document-formats"]
|
||||
path = web/documentserver-example/csharp-mvc/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
[submodule "web/documentserver-example/php/assets/document-templates"]
|
||||
path = web/documentserver-example/php/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/php/assets/document-formats"]
|
||||
path = web/documentserver-example/php/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
@ -25,19 +23,19 @@
|
||||
[submodule "web/documentserver-example/python/assets/document-templates"]
|
||||
path = web/documentserver-example/python/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/java/src/main/resources/assets/document-templates"]
|
||||
path = web/documentserver-example/java/src/main/resources/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/ruby/assets/document-templates"]
|
||||
path = web/documentserver-example/ruby/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/java-spring/src/main/resources/assets/document-templates"]
|
||||
path = web/documentserver-example/java-spring/src/main/resources/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/en
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/python/assets/document-formats"]
|
||||
path = web/documentserver-example/python/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
@ -50,7 +48,10 @@
|
||||
path = web/documentserver-example/java/src/main/resources/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
branch = master
|
||||
[submodule "web/documentserver-example/java-spring/src/main/resources/assets/document-formats"]
|
||||
path = web/documentserver-example/java-spring/src/main/resources/assets/document-formats
|
||||
[submodule "web/documentserver-example/csharp/assets/document-templates"]
|
||||
path = web/documentserver-example/csharp/assets/document-templates
|
||||
url = https://github.com/ONLYOFFICE/document-templates
|
||||
branch = main/default
|
||||
[submodule "web/documentserver-example/csharp/assets/document-formats"]
|
||||
path = web/documentserver-example/csharp/assets/document-formats
|
||||
url = https://github.com/ONLYOFFICE/document-formats
|
||||
branch = master
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
Document Server integration example uses code from the following 3rd party projects.
|
||||
|
||||
|
||||
web/documentserver-example/csharp
|
||||
|
||||
jQuery.BlockUI - The jQuery BlockUI Plugin lets you simulate synchronous behavior when using AJAX, without locking the browser. (https://github.com/malsup/blockui/)
|
||||
@ -132,6 +131,10 @@ Jackson Databind - General-purpose data-binding functionality and tree-model for
|
||||
License: Apache 2.0
|
||||
License File: jackson-databind.license
|
||||
|
||||
Jackson Dataformat Properties - Support for reading and writing content of "Java Properties" style configuration files as if there was implied nesting structure (by default using dots as separators). (https://github.com/FasterXML/jackson-dataformats-text/blob/master/LICENSE)
|
||||
License: Apache 2.0
|
||||
License File: jackson-dataformat-properties.license
|
||||
|
||||
jQuery.BlockUI - The jQuery BlockUI Plugin lets you simulate synchronous behavior when using AJAX, without locking the browser. (https://github.com/malsup/blockui/)
|
||||
License: MIT, GPL
|
||||
License File: jQuery.BlockUI.license
|
||||
@ -156,6 +159,10 @@ jQuery.UI - jQuery UI is an open source library of interface components —
|
||||
License: MIT
|
||||
License File: jQuery.UI.license
|
||||
|
||||
JSON - JSON is a light-weight, language independent, data interchange format. (https://github.com/stleary/JSON-java/blob/master/LICENSE)
|
||||
License Public Domain
|
||||
License File: json.license
|
||||
|
||||
JSON.simple - JSON.simple is a simple Java toolkit for JSON. You can use JSON.simple to encode or decode JSON text. (https://github.com/fangyidong/json-simple/blob/master/LICENSE.txt)
|
||||
License: Apache 2.0
|
||||
License File: JSON.simple.license
|
||||
@ -168,14 +175,14 @@ ModelMapper - ModelMapper is an intelligent object mapping library that automa
|
||||
License: Apache 2.0
|
||||
License File modelmapper.license
|
||||
|
||||
Prime JWT - is intended to be fast and easy to use. Prime JWT has a single external dependency on Jackson. (https://github.com/ws-apps/prime-jwt/blob/master/LICENSE)
|
||||
License: Apache 2.0
|
||||
License File: prime-jwt.license
|
||||
|
||||
Spring Boot - Helps create Spring-powered, production-grade applications and services. Has external dependencies on Spring Framework. (https://github.com/spring-projects/spring-boot/blob/main/LICENSE.txt)
|
||||
License: Apache 2.0
|
||||
License File: spring-boot.license
|
||||
|
||||
Spring Boot Web - Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container. (https://github.com/spring-projects/spring-boot/blob/main/LICENSE.txt)
|
||||
License: Apache 2.0
|
||||
License File: spring-boot.license
|
||||
|
||||
Spring Boot Devtools - Provides fast application restarts, LiveReload, and configurations for enhanced development experience. (https://github.com/spring-projects/spring-boot/blob/main/LICENSE.txt)
|
||||
License: Apache 2.0
|
||||
License File: spring-boot.license
|
||||
@ -271,6 +278,9 @@ urllib - Request HTTP URLs in a complex world — basic and digest authen
|
||||
License: MIT
|
||||
License File: urllib.license
|
||||
|
||||
utf7 - Encodes and decodes JavaScript (Unicode/UCS-2) strings to UTF-7 ASCII strings. (https://github.com/kkaefer/utf7/blob/master/LICENSE)
|
||||
License: MIT
|
||||
License File: utf7.license
|
||||
|
||||
|
||||
web/documentserver-example/php
|
||||
|
||||
63
CHANGELOG.md
@ -1,29 +1,72 @@
|
||||
# Change Log
|
||||
|
||||
## 1.11.0
|
||||
- he-IL skin language
|
||||
- ConvertService.ashx address replaced with converter
|
||||
- coauthoring/CommandService.ashx address replaced with command
|
||||
- without submitForm in viewer
|
||||
|
||||
## 1.10.0
|
||||
- nodejs: converting function on index page
|
||||
- java-spring: using java docs-integration-sdk
|
||||
- tabs menu
|
||||
- creating and editing pdf instead docxf
|
||||
- filling by default
|
||||
- forgotten files
|
||||
- delete all files
|
||||
- save as for pdf
|
||||
- handling conversion -9 error
|
||||
- change inserted image
|
||||
- different goback for users
|
||||
|
||||
## 1.9.0
|
||||
- nodejs: filling by default
|
||||
- nodejs: docxf, oform as pdf documentType
|
||||
- nodejs: creating and editing pdf instead docxf
|
||||
- nodejs: wopi formsubmit icon
|
||||
- nodejs: close editor
|
||||
- en-GB, sr-Cyrl-RS skin languages
|
||||
- switching from filling to editing
|
||||
- fill permission in embedded mode
|
||||
|
||||
## 1.8.0
|
||||
- nodejs: pdf, djvu, xps, oxps as pdf documentType
|
||||
- nodejs: filling pdf
|
||||
- version number to page meta
|
||||
- ar skin languages
|
||||
- sr-Latn-RS skin languages
|
||||
- getting history via api
|
||||
- using a repo with a list of formats
|
||||
- convert after uploading only tagged formats
|
||||
- link in referenceData
|
||||
- setUsers for region protection
|
||||
- onRequestOpen method
|
||||
- user avatar
|
||||
- trimming long name of uploading file
|
||||
- onRequestSelectDocument method
|
||||
- onRequestSelectSpreadsheet method
|
||||
- key in referenceData
|
||||
- nodejs: link in referenceData
|
||||
- restore from history
|
||||
|
||||
## 1.7.0
|
||||
- nodejs: onRequestSelectDocument method
|
||||
- nodejs: onRequestSelectSpreadsheet method
|
||||
- nodejs: onRequestOpen
|
||||
- nodejs: submitForm
|
||||
- nodejs: key in referenceData
|
||||
- nodejs: change reference source
|
||||
- java-spring: using a repo with a list of formats
|
||||
- java: using a repo with a list of formats
|
||||
- php: using a repo with a list of formats
|
||||
- nodejs: using a repo with a list of formats
|
||||
- java: using a repo with a list of formats
|
||||
- python: using a repo with a list of formats
|
||||
- ruby: using a repo with a list of formats
|
||||
- nodejs: delete file without reloading the page
|
||||
- nodejs: getting history by a separate request
|
||||
- nodejs: restore from history
|
||||
- php: using a repo with a list of formats
|
||||
- php: restore from history
|
||||
- python: restore from history
|
||||
- ruby: restore from history
|
||||
- csharp-mvc: getting history by a separate request
|
||||
- csharp-mvc: restore from history
|
||||
- csharp: getting history by a separate request
|
||||
- java: getting history by a separate request
|
||||
- java-spring: getting history by a separate request
|
||||
- restore from history
|
||||
- csharp: restore from history
|
||||
|
||||
## 1.6.0
|
||||
- nodejs: setUsers for region protection
|
||||
|
||||
10
Readme.md
@ -1,11 +1,11 @@
|
||||
## Integration examples
|
||||
|
||||
Test examples are simple document management systems that can be built into your application for testing.
|
||||
These test examples are simple document management systems that can be built into your application for testing.
|
||||
Do NOT use these integration examples on your own server without proper code modifications!
|
||||
In case you enabled any of the test examples, disable it before going for production.
|
||||
|
||||
These examples show the way to integrate [ONLYOFFICE Docs][2] into your own website or application using one of the programming languages.
|
||||
The package contains examples written in .Net (C# MVC), .Net (C#), Java, Node.js, PHP and Ruby.
|
||||
The package contains examples written in .Net (C# MVC), .Net (C#), Java, Java Spring, Node.js, PHP, Python and Ruby.
|
||||
|
||||
You should change `http://documentserver` to your server address in these files:
|
||||
* [.Net (C# MVC)](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/csharp-mvc) - `web/documentserver-example/csharp-mvc/web.appsettings.config`
|
||||
@ -13,9 +13,9 @@ You should change `http://documentserver` to your server address in these files:
|
||||
* [Java](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/java) - `web/documentserver-example/java/src/main/resources/settings.properties`
|
||||
* [Java Spring](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/java-spring) - `web/documentserver-example/java-spring/src/main/resources/application.properties`
|
||||
* [Node.js](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/nodejs) - `web/documentserver-example/nodejs/config/default.json`
|
||||
* [PHP](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php) - `web/documentserver-example/php/config.json`
|
||||
* [Python](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/python) - `web/documentserver-example/python/config.py`
|
||||
* [Ruby](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/ruby) - `web/documentserver-example/ruby/config/application.rb`
|
||||
* [PHP](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/php) - `web/documentserver-example/php/src/configuration/ConfigurationManager.php`
|
||||
* [Python](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/python) - `web/documentserver-example/python/src/configuration/configuration.py`
|
||||
* [Ruby](https://github.com/ONLYOFFICE/document-server-integration/tree/master/web/documentserver-example/ruby) - `web/documentserver-example/ruby/app/configuration/configuration.rb`
|
||||
|
||||
More information on how to use these examples can be found here: [http://api.onlyoffice.com/editors/demopreview](http://api.onlyoffice.com/editors/demopreview "http://api.onlyoffice.com/editors/demopreview")
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -38,9 +38,15 @@ namespace OnlineEditorsExampleMVC
|
||||
|
||||
// create the main script bundle
|
||||
bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
|
||||
"~/Scripts/formats.js",
|
||||
"~/Scripts/jscript.js"
|
||||
));
|
||||
|
||||
// create the forgotten page script bundle
|
||||
bundles.Add(new ScriptBundle("~/bundles/forgotten").Include(
|
||||
"~/Scripts/forgotten.js"
|
||||
));
|
||||
|
||||
// create a style bundle
|
||||
bundles.Add(new StyleBundle("~/Content/css").Include(
|
||||
"~/Content/stylesheet.css",
|
||||
@ -52,6 +58,11 @@ namespace OnlineEditorsExampleMVC
|
||||
bundles.Add(new StyleBundle("~/Content/editor").Include(
|
||||
"~/Content/editor.css"
|
||||
));
|
||||
|
||||
// create the forgotten page style bundle
|
||||
bundles.Add(new StyleBundle("~/Content/forgotten").Include(
|
||||
"~/Content/forgotten.css"
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
161
web/documentserver-example/csharp-mvc/Content/forgotten.css
Normal file
@ -0,0 +1,161 @@
|
||||
.center {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
width: 256px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 832px;
|
||||
margin: 0 32px;
|
||||
padding: 48px 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #E2E2E2;
|
||||
}
|
||||
|
||||
.tableRow td:first-child {
|
||||
width: 70%;
|
||||
flex-grow: 0;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.tableHeader td:first-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 10%;
|
||||
text-align: center;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.tableHeader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stored-edit {
|
||||
display: block;
|
||||
padding-top: 0;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
menu.links {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.scroll-table-body table {
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 12px;
|
||||
line-height: normal;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.stored-list {
|
||||
height: calc(100% - 58px);
|
||||
}
|
||||
|
||||
header {
|
||||
min-width:auto;
|
||||
}
|
||||
|
||||
header a {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
width: 1152px;
|
||||
}
|
||||
|
||||
@media (max-width: 1279px) and (min-width: 1024px) {
|
||||
.left-panel {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 688px;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: 928px;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) and (min-width: 593px) {
|
||||
.center {
|
||||
max-width: 768px;
|
||||
width: calc(100% - 80px);
|
||||
}
|
||||
|
||||
.table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: calc(100% - 32px);
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: 768px;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin-left: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 592px) and (min-width: 320px) {
|
||||
.center, .table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 28px 16px;
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
top: 40px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
padding: 8px 0;
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 3c0-1.65685 1.34315-3 3-3h20l7 7v30c0 1.6569-1.3431 3-3 3H3c-1.65685 0-3-1.3431-3-3V3z" fill="#27ABA3"/><path d="M23 0l7 7h-4c-1.6569 0-3-1.34315-3-3V0z" fill="#008078"/><path fill-rule="evenodd" clip-rule="evenodd" d="M24 14H6v7h18v-7zm-.8182 5.9978H6.81818V15H23.1818v4.9978zM24 23H6v7h18v-7zm-.8182 5.9978H6.81818V24H23.1818v4.9978z" fill="#fff"/></svg>
|
||||
|
Before Width: | Height: | Size: 463 B |
@ -0,0 +1,5 @@
|
||||
<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 3C0 1.34315 1.34315 0 3 0H23L30 7V37C30 38.6569 28.6569 40 27 40H3C1.34315 40 0 38.6569 0 37V3Z" fill="#9E1919"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0062 15V16.0065H24V15H17.0062ZM17.0062 19V20.0163H24V19H17.0062ZM24 23H17.0062V24.0261H24V23ZM6 28V27.0293H24V28H6ZM7 16H14V23H7V16ZM6 15H7H14H15V16V23V24H14H7H6V23V16V15Z" fill="white"/>
|
||||
<path d="M23 0L30 7H26C24.3431 7 23 5.65685 23 4V0Z" fill="black" fill-opacity="0.25"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 558 B |
@ -0,0 +1,3 @@
|
||||
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 17V11H12V17H17V9H20L10 0L0 9H3V17H8Z" fill="#444444"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 173 B |
@ -0,0 +1 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 1h8l4 4v10H2V1z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14 5l-4-4H2v14h12V5zm-4-5l5 5v11H1V0h9z" fill="#BFBFBF"/><path fill="#9E1919" d="M3 10h10v4H3z"/><path d="M7 7V2H3v5h4zM8 3V2h2v1H8zM8 5V4h5v1H8zM13 6H8v1h5V6zM13 8H3v1h10V8z" fill="#BFBFBF"/><path opacity=".3" d="M9 1h1v3h4l1 1H9V1z" fill="#333"/></svg>
|
||||
|
After Width: | Height: | Size: 441 B |
|
Before Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="24" height="23" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5332 22.2243L0.632544 17.5921C-0.210848 17.1877 -0.210848 16.5627 0.632544 16.1951L4.07945 14.5775L10.4966 17.5921C11.34 17.9965 12.6967 17.9965 13.5034 17.5921L19.9206 14.5775L23.3675 16.1951C24.2108 16.5995 24.2108 17.2245 23.3675 17.5921L13.4668 22.2243C12.6967 22.592 11.34 22.592 10.5332 22.2243Z" fill="#FF6F3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5011 16.4922L0.630617 11.8546C-0.210206 11.4497 -0.210206 10.824 0.630617 10.456L3.99391 8.87329L10.5011 11.9282C11.342 12.3331 12.6946 12.3331 13.4989 11.9282L20.0061 8.87329L23.3694 10.456C24.2102 10.8608 24.2102 11.4865 23.3694 11.8546L13.4989 16.4922C12.658 16.897 11.3054 16.897 10.5011 16.4922Z" fill="#95C038"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5011 10.8195L0.630617 6.24863C-0.210206 5.84959 -0.210206 5.23289 0.630617 4.87013L10.5011 0.299281C11.342 -0.0997605 12.6946 -0.0997605 13.4989 0.299281L23.3694 4.87013C24.2102 5.26917 24.2102 5.88587 23.3694 6.24863L13.4989 10.8195C12.658 11.1822 11.3054 11.1822 10.5011 10.8195Z" fill="#5DC0E8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="20" height="14" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="20" height="2" rx="1" fill="white"/>
|
||||
<rect y="6" width="20" height="2" rx="1" fill="white"/>
|
||||
<rect y="12" width="20" height="2" rx="1" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 278 B |
@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 17C13 17.5523 12.5523 18 12 18C11.4477 18 11 17.5523 11 17V13H7C6.44772 13 6 12.5523 6 12C6 11.4477 6.44772 11 7 11H11V7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7V11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H13V17Z" fill="#444444"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 416 B |
BIN
web/documentserver-example/csharp-mvc/Content/images/uid-1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
web/documentserver-example/csharp-mvc/Content/images/uid-2.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -79,7 +79,8 @@
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
@ -119,7 +120,8 @@
|
||||
.contentCells-icon{
|
||||
width: 5%;
|
||||
}
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
@ -175,7 +177,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 715px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
@ -263,7 +266,8 @@
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
@ -293,7 +297,8 @@
|
||||
width: 580px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
@ -407,7 +412,8 @@
|
||||
padding: 16px 0 6px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
@ -502,6 +508,17 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.buttonsMobile.indent {
|
||||
margin-bottom: 0;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
.button.file-type:hover,
|
||||
.button.file-type {
|
||||
height: 28px;
|
||||
width: 100px;
|
||||
margin-bottom: 10px !important;
|
||||
font-size: 9px;
|
||||
}
|
||||
.button.gray{
|
||||
margin: 0;
|
||||
}
|
||||
@ -527,7 +544,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 510px) and (min-width: 470px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
@ -553,7 +571,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 470px) and (min-width: 420px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 30%;
|
||||
}
|
||||
.tableRow td:first-child{
|
||||
@ -588,7 +607,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 420px) and (min-width: 320px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
@ -638,7 +658,8 @@
|
||||
}
|
||||
}
|
||||
@media (max-width: 769px) and (min-width: 715px){
|
||||
.tableRow{
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
@ -687,3 +708,216 @@
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 592px) and (min-width: 320px) {
|
||||
body.menu-open {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
header {
|
||||
min-width: auto;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
header a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header, footer {
|
||||
position: -webkit-sticky; /* Safari */
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.center {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
background-color: rgba(186, 186, 186, 0.6);
|
||||
display: none;
|
||||
flex-direction: row;
|
||||
align-items: start;
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
height: calc(100% - 124px);
|
||||
z-index:99;
|
||||
}
|
||||
|
||||
.left-panel.active {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.help-block {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
background-color: #F5F5F5;
|
||||
width: 248px;
|
||||
padding-left: 16px;
|
||||
padding-top: 33px;
|
||||
padding-bottom: 33px;
|
||||
padding-right: 40px;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mobile-close-btn {
|
||||
display: block;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
background-color: #E2E2E2;
|
||||
border-radius: 2px;
|
||||
border-color: #E2E2E2;
|
||||
color: #808080;
|
||||
cursor: pointer;
|
||||
outline: inherit;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 100%;
|
||||
left: 0;
|
||||
padding: 28px 16px;
|
||||
}
|
||||
|
||||
#portal-info {
|
||||
width: 100%;
|
||||
max-width: fit-content;
|
||||
}
|
||||
|
||||
menu.links {
|
||||
width: 100%;
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
span.portal-name {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
span.portal-descr:first-child {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
span.portal-descr {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.user-descr {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
min-width: auto;
|
||||
border-bottom: 1px solid #E5E5E5;
|
||||
padding: 12px 0;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.user-descr ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.user-descr ul.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.user-descr b {
|
||||
font-size: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
column-gap: 8px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.user-descr b::before {
|
||||
content: url("images/plus.svg");
|
||||
display: inline-block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.storedHeader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.storedHeaderClearAll {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
top: 36px;
|
||||
}
|
||||
|
||||
.scroll-table-body tr:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
padding: 16px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tableRow td:first-child {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.header-list {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.firstContentCellViewers {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.firstContentCellViewers ~ td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.downloadContentCellShift:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.responsive-nav {
|
||||
height: 44px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 0;
|
||||
align-items: center;
|
||||
column-gap: 16px;
|
||||
padding: 10px 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.main {
|
||||
height: calc(100% - 124px);
|
||||
}
|
||||
|
||||
.user-block-table {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -65,6 +65,14 @@ header img {
|
||||
margin: 10px 0 22px 32px;
|
||||
}
|
||||
|
||||
.responsive-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mobile-close-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.center {
|
||||
position:relative;
|
||||
margin: 0 auto 0;
|
||||
@ -164,7 +172,7 @@ label .checkbox {
|
||||
}
|
||||
|
||||
.try-editor.form {
|
||||
background-image: url("images/file_docxf.svg");
|
||||
background-image: url("images/file_pdf.svg");
|
||||
}
|
||||
|
||||
.side-option {
|
||||
@ -230,6 +238,33 @@ label .checkbox {
|
||||
color: #FF6F3D;
|
||||
}
|
||||
|
||||
.button.file-type {
|
||||
font-size: 11px;
|
||||
color: #FFFFFF;
|
||||
padding: 8px 8px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.button.file-type.disable {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.button.file-type.pale {
|
||||
opacity: 30%;
|
||||
}
|
||||
|
||||
.button.file-type.document {
|
||||
background: #446995;
|
||||
}
|
||||
|
||||
.button.file-type.spreadsheet {
|
||||
background: #40865C;
|
||||
}
|
||||
|
||||
.button.file-type.presentation {
|
||||
background: #AA5252;
|
||||
}
|
||||
|
||||
.upload-panel {
|
||||
float: left;
|
||||
padding: 24px 0;
|
||||
@ -271,6 +306,43 @@ label .checkbox {
|
||||
border-bottom: 1px solid #D0D5DA;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
padding: 0;
|
||||
column-gap: 30px;
|
||||
align-items: center;
|
||||
list-style: none;
|
||||
border-bottom: 1px solid #E2E2E2;
|
||||
margin: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.links li {
|
||||
padding: 4px;
|
||||
border-bottom: 2px solid transparent;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.links li.active {
|
||||
border-bottom: 2px solid #FF6F3D;
|
||||
}
|
||||
|
||||
.links li.active a {
|
||||
color: #FF6F3D;
|
||||
}
|
||||
|
||||
.links li.active a img {
|
||||
filter: invert(55%) sepia(67%) saturate(2727%) hue-rotate(335deg) brightness(104%) contrast(101%);
|
||||
}
|
||||
|
||||
.links a {
|
||||
display: inline-block;
|
||||
padding: 2px 0;
|
||||
line-height: 20px;
|
||||
font-size: 13px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#mainProgress {
|
||||
color: #333333;
|
||||
display: none;
|
||||
@ -464,6 +536,11 @@ footer table tr td:first-child {
|
||||
background-image: url("images/icon_pptx.svg");
|
||||
}
|
||||
|
||||
.stored-edit.pdf,
|
||||
.uploadFileName.pdf {
|
||||
background-image: url("images/icon_pdf.svg");
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
@ -592,6 +669,29 @@ footer table tr td:first-child {
|
||||
width: 4%;
|
||||
}
|
||||
|
||||
.storedHeader {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.storedHeaderClearAll {
|
||||
padding-right: 52px;
|
||||
}
|
||||
|
||||
.clear-all {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
padding: 2px;
|
||||
outline: 1px solid #E5E5E5;
|
||||
text-align: center;
|
||||
cursor:pointer;
|
||||
text-transform: uppercase;
|
||||
background-color: #F5F5F5;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.select-user {
|
||||
color: #444444;
|
||||
font-family: Open Sans;
|
||||
@ -741,6 +841,16 @@ html {
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
||||
.buttonsMobile.indent{
|
||||
padding-left: 35px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.invisible {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
background: #FFFFFF;
|
||||
border-radius: 5px;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -17,10 +17,13 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Web.Mvc;
|
||||
using OnlineEditorsExampleMVC.Helpers;
|
||||
using OnlineEditorsExampleMVC.Models;
|
||||
using System.Web.Configuration;
|
||||
|
||||
namespace OnlineEditorsExampleMVC.Controllers
|
||||
{
|
||||
@ -31,6 +34,46 @@ namespace OnlineEditorsExampleMVC.Controllers
|
||||
return View();
|
||||
}
|
||||
|
||||
public ActionResult Forgotten()
|
||||
{
|
||||
if (!bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"]))
|
||||
{
|
||||
ViewData["Message"] = "The forgotten page is disabled";
|
||||
return View("~/Views/Shared/Error.aspx");
|
||||
}
|
||||
|
||||
var files = new List<Dictionary<string, string>>();
|
||||
|
||||
try
|
||||
{
|
||||
var response = TrackManager.commandRequest("getForgottenList", null);
|
||||
ArrayList keys = (ArrayList)response["keys"];
|
||||
|
||||
// fetch all the forgotten files from the document server
|
||||
foreach (string key in keys)
|
||||
{
|
||||
var file = new Dictionary<string, string>();
|
||||
var fileResult = TrackManager.commandRequest("getForgotten", key);
|
||||
file.Add("key", fileResult["key"].ToString());
|
||||
file.Add("url", fileResult["url"].ToString());
|
||||
file.Add(
|
||||
"type",
|
||||
FileUtility.GetFileType(fileResult["url"].ToString())
|
||||
.ToString()
|
||||
.ToLower()
|
||||
);
|
||||
|
||||
files.Add(file);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
return View("Forgotten", new ForgottenFilesModel(files));
|
||||
}
|
||||
|
||||
// viewing file in the editor
|
||||
public ActionResult Editor(string fileName, string editorsMode, string editorsType, string directUrl)
|
||||
{
|
||||
@ -52,7 +95,7 @@ namespace OnlineEditorsExampleMVC.Controllers
|
||||
var id = Request.Cookies.GetOrDefault("uid", null);
|
||||
var user = Users.getUser(id);
|
||||
DocManagerHelper.CreateMeta(fileName, user.id, user.name); // create meta information for the sample document
|
||||
Response.Redirect(Url.Action("Editor", "Home", new { fileName = fileName }));
|
||||
Response.Redirect(Url.Action("Editor", "Home", new { fileName = fileName, editorsMode="edit" }));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -31,6 +31,12 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
{
|
||||
public class DocManagerHelper
|
||||
{
|
||||
//get server version
|
||||
public static string GetVersion()
|
||||
{
|
||||
return WebConfigurationManager.AppSettings["version"];
|
||||
}
|
||||
|
||||
// get max file size
|
||||
public static long MaxFileSize
|
||||
{
|
||||
@ -51,24 +57,24 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
// get file extensions that can be viewed
|
||||
public static List<string> ViewedExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.viewed-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.ViewableExtensions(); }
|
||||
}
|
||||
|
||||
public static List<string> FillFormExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.fillform-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.FillableExtensions(); }
|
||||
}
|
||||
|
||||
// get file extensions that can be edited
|
||||
public static List<string> EditedExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.edited-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.EditableExtensions(); }
|
||||
}
|
||||
|
||||
// get file extensions that can be converted
|
||||
public static List<string> ConvertExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.convert-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.ConvertibleExtensions(); }
|
||||
}
|
||||
|
||||
// get current user host address
|
||||
@ -177,7 +183,12 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
// get a file name with an index if the file with such a name already exists
|
||||
public static string GetCorrectName(string fileName, string userAddress = null)
|
||||
{
|
||||
int maxName;
|
||||
int.TryParse(WebConfigurationManager.AppSettings["filename-max"], out maxName);
|
||||
var baseName = Path.GetFileNameWithoutExtension(fileName);
|
||||
if (baseName.Length > maxName){
|
||||
baseName = baseName.Substring(0, maxName) + "[...]";
|
||||
}
|
||||
var ext = Path.GetExtension(fileName).ToLower();
|
||||
var name = baseName + ext;
|
||||
|
||||
@ -215,7 +226,7 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
public static string CreateDemo(string fileExt, bool withContent)
|
||||
{
|
||||
var demoName = (withContent ? "sample." : "new.") + fileExt; // create sample or new template file with the necessary extension
|
||||
var demoPath = "assets\\" + (withContent ? "sample\\" : "new\\"); // get the path to the sample document
|
||||
var demoPath = "assets\\document-templates\\" + (withContent ? "sample\\" : "new\\"); // get the path to the sample document
|
||||
|
||||
var fileName = GetCorrectName(demoName); // get a file name with an index if the file with such a name already exists
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -225,10 +225,14 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
private static void ProcessResponseError(int errorCode)
|
||||
{
|
||||
var errorMessage = string.Empty;
|
||||
const string errorMessageTemplate = "Error occurred in the ConvertService.ashx: {0}";
|
||||
const string errorMessageTemplate = "Error occurred in the ConvertService: {0}";
|
||||
|
||||
switch (errorCode)
|
||||
{
|
||||
case -9:
|
||||
// public const int c_nErrorConversionOutputFormatError = -9;
|
||||
errorMessage = String.Format(errorMessageTemplate, "Error conversion output format");
|
||||
break;
|
||||
case -8:
|
||||
// public const int c_nErrorFileVKey = -8;
|
||||
errorMessage = String.Format(errorMessageTemplate, "Error document VKey");
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -256,6 +256,22 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
|
||||
var user = action["userid"].ToString(); // get the user id
|
||||
DocManagerHelper.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
|
||||
|
||||
string formsDataUrl = fileData["formsdataurl"].ToString();
|
||||
|
||||
if (!string.IsNullOrEmpty(formsDataUrl))
|
||||
{
|
||||
string formsName = DocManagerHelper.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + ".txt", userAddress);
|
||||
string formsPath = DocManagerHelper.StoragePath(formsName, userAddress);
|
||||
|
||||
var bytesForms = DownloadFile(formsDataUrl);
|
||||
|
||||
SaveFile(bytesForms, formsPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Document editing service did not return formsDataUrl");
|
||||
}
|
||||
}
|
||||
} catch (Exception)
|
||||
{
|
||||
@ -266,7 +282,7 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
}
|
||||
|
||||
// create a command request
|
||||
public static void commandRequest(string method, string key, object meta = null)
|
||||
public static Dictionary<string, object> commandRequest(string method, string key, object meta = null)
|
||||
{
|
||||
DocManagerHelper.VerifySSL();
|
||||
|
||||
@ -329,6 +345,7 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
{
|
||||
throw new Exception(dataResponse);
|
||||
}
|
||||
return responseObj;
|
||||
}
|
||||
|
||||
// save file
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -31,7 +31,9 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
"Can perform all actions with comments",
|
||||
"The file favorite state is undefined",
|
||||
"Can create files from templates using data from the editor",
|
||||
"Can see the information about all users"
|
||||
"Can see the information about all users",
|
||||
"Has an avatar",
|
||||
"Can submit forms"
|
||||
};
|
||||
|
||||
static List<string> descr_user_2 = new List<string>()
|
||||
@ -41,7 +43,9 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
|
||||
"This file is marked as favorite",
|
||||
"Can create new files from the editor",
|
||||
"Can see the information about users from Group2 and users who don’t belong to any group"
|
||||
"Can see the information about users from Group2 and users who don’t belong to any group",
|
||||
"Has an avatar",
|
||||
"Can’t submit forms"
|
||||
};
|
||||
|
||||
static List<string> descr_user_3 = new List<string>()
|
||||
@ -54,7 +58,10 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
"Can’t download the file",
|
||||
"Can’t print the file",
|
||||
"Can create new files from the editor",
|
||||
"Can see the information about Group2 users"
|
||||
"Can see the information about Group2 users",
|
||||
"Can’t submit forms",
|
||||
"Can't close history",
|
||||
"Can't restore the file version"
|
||||
};
|
||||
|
||||
static List<string> descr_user_0 = new List<string>()
|
||||
@ -71,6 +78,7 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
"Can't view chat",
|
||||
"Can't protect file",
|
||||
"View file without collaboration",
|
||||
"Can’t submit forms"
|
||||
};
|
||||
|
||||
private static List<User> users = new List<User>() {
|
||||
@ -85,7 +93,9 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
null,
|
||||
new List<string>(),
|
||||
descr_user_1,
|
||||
true
|
||||
true,
|
||||
true,
|
||||
new Goback(null, false)
|
||||
),
|
||||
new User(
|
||||
"uid-2",
|
||||
@ -103,12 +113,14 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
true,
|
||||
new List<string>(),
|
||||
descr_user_2,
|
||||
false
|
||||
false,
|
||||
true,
|
||||
new Goback("Go to Documents", null)
|
||||
),
|
||||
new User(
|
||||
"uid-3",
|
||||
"Hamish Mitchell",
|
||||
"mitchell@example.com",
|
||||
null,
|
||||
"group-3",
|
||||
new List<string>() { "group-2" },
|
||||
new Dictionary<string,object>()
|
||||
@ -121,7 +133,9 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
false,
|
||||
new List<string>() { "copy", "download", "print" },
|
||||
descr_user_3,
|
||||
false
|
||||
false,
|
||||
false,
|
||||
null
|
||||
),
|
||||
new User(
|
||||
"uid-0",
|
||||
@ -134,7 +148,9 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
null,
|
||||
new List<string>() { "protect" },
|
||||
descr_user_0,
|
||||
false
|
||||
false,
|
||||
false,
|
||||
null
|
||||
)
|
||||
};
|
||||
|
||||
@ -171,6 +187,43 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
|
||||
public static List<Dictionary<string, object>> getUsersInfo(string id)
|
||||
{
|
||||
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
|
||||
if (id != "uid-0") {
|
||||
foreach (User user in users)
|
||||
{
|
||||
usersData.Add(new Dictionary<string, object>()
|
||||
{
|
||||
{"id", user.id},
|
||||
{"name", user.name },
|
||||
{"email", user.email },
|
||||
{"image", user.avatar ? DocManagerHelper.GetServerUrl(false) + "/Content/images/" + user.id + ".png" : null}
|
||||
});
|
||||
}
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
|
||||
// get a list of users with their names and emails for protect
|
||||
public static List<Dictionary<string, object>> getUsersForProtect(string id)
|
||||
{
|
||||
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
|
||||
foreach (User user in users)
|
||||
{
|
||||
if (!user.id.Equals(id) && user.name != null)
|
||||
{
|
||||
usersData.Add(new Dictionary<string, object>()
|
||||
{
|
||||
{"name", user.name },
|
||||
{"email", user.email },
|
||||
{"id", user.id}
|
||||
});
|
||||
}
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
}
|
||||
|
||||
public class User
|
||||
@ -186,8 +239,11 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
public List<string> descriptions;
|
||||
public bool templates;
|
||||
public List<string> userInfoGroups;
|
||||
public bool avatar;
|
||||
|
||||
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates)
|
||||
public Goback goback;
|
||||
|
||||
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback)
|
||||
{
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
@ -200,6 +256,22 @@ namespace OnlineEditorsExampleMVC.Helpers
|
||||
this.descriptions = descriptions;
|
||||
this.templates = templates;
|
||||
this.userInfoGroups = userInfoGroups;
|
||||
this.avatar = avatar;
|
||||
this.goback = goback;
|
||||
}
|
||||
}
|
||||
|
||||
public class Goback
|
||||
{
|
||||
public string text;
|
||||
public bool? blank;
|
||||
|
||||
public Goback(){}
|
||||
|
||||
public Goback(string text, bool? blank)
|
||||
{
|
||||
this.text = text;
|
||||
this.blank = blank;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -77,18 +77,19 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
var jss = new JavaScriptSerializer();
|
||||
|
||||
var ext = Path.GetExtension(FileName).ToLower(); // get file extension
|
||||
var editorsMode = Mode ?? "edit"; // get editor mode
|
||||
var canFill = DocManagerHelper.FillFormExts.Contains(ext);
|
||||
var editorsMode = Mode ?? (canFill ? "fillForms" : "edit"); // get editor mode
|
||||
|
||||
var canEdit = DocManagerHelper.EditedExts.Contains(ext); // check if the file with such an extension can be edited
|
||||
|
||||
var id = request.Cookies.GetOrDefault("uid", null);
|
||||
var user = Users.getUser(id); // get the user
|
||||
|
||||
if ((!canEdit && editorsMode.Equals("edit") || editorsMode.Equals("fillForms")) && DocManagerHelper.FillFormExts.Contains(ext)) {
|
||||
if ((!canEdit && editorsMode.Equals("edit") || editorsMode.Equals("fillForms")) && canFill) {
|
||||
editorsMode = "fillForms";
|
||||
canEdit = true;
|
||||
}
|
||||
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1") && false; // check if the Submit form button is displayed or not
|
||||
var submitForm = !editorsMode.Equals("view") && user.id.Equals("uid-1"); // check if the Submit form button is displayed or not
|
||||
var mode = canEdit && editorsMode != "view" ? "edit" : "view"; // set the mode parameter: change it to view if the document can't be edited
|
||||
|
||||
// favorite icon state
|
||||
@ -157,7 +158,7 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{ "download", !user.deniedPermissions.Contains("download") },
|
||||
{ "edit", canEdit && (editorsMode == "edit" || editorsMode == "view" || editorsMode == "filter" || editorsMode == "blockcontent") },
|
||||
{ "print", !user.deniedPermissions.Contains("print") },
|
||||
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "embedded" && editorsMode != "blockcontent" },
|
||||
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "blockcontent" },
|
||||
{ "modifyFilter", editorsMode != "filter" },
|
||||
{ "modifyContentControl", editorsMode != "blockcontent" },
|
||||
{ "review", canEdit && (editorsMode == "edit" || editorsMode == "review") },
|
||||
@ -190,7 +191,8 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
{ "id", !user.id.Equals("uid-0") ? user.id : null },
|
||||
{ "name", user.name },
|
||||
{ "group", user.group }
|
||||
{ "group", user.group },
|
||||
{ "image", user.avatar ? DocManagerHelper.GetServerUrl(false) + "/Content/images/" + user.id + ".png" : null}
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -213,10 +215,12 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{ "forcesave", false }, // adds the request for the forced file saving to the callback handler
|
||||
{ "submitForm", submitForm }, // if the Submit form button is displayed or not
|
||||
{
|
||||
"goback", new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
|
||||
"goback", user.goback != null ? new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
|
||||
{
|
||||
{ "url", DocManagerHelper.GetServerUrl(false) } // the absolute URL to the website address which will be opened when clicking the Open file location menu button
|
||||
}
|
||||
{ "url", DocManagerHelper.GetServerUrl(false) }, // the absolute URL to the website address which will be opened when clicking the Open file location menu button
|
||||
{ "text", user.goback.text },
|
||||
{ "blank", user.goback.blank }
|
||||
} : new Dictionary<string, object>{}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -288,20 +292,20 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
Path = HttpRuntime.AppDomainAppVirtualPath
|
||||
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
|
||||
+ "Content\\images\\logo.png"
|
||||
+ "Content\\images\\logo.svg"
|
||||
};
|
||||
|
||||
var directMailMergeUrl = new UriBuilder(DocManagerHelper.GetServerUrl(false))
|
||||
{
|
||||
Path = HttpRuntime.AppDomainAppVirtualPath
|
||||
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
|
||||
+ "Content\\images\\logo.png"
|
||||
+ "Content\\images\\logo.svg"
|
||||
};
|
||||
|
||||
// create a logo config
|
||||
var logoConfig = new Dictionary<string, object>
|
||||
{
|
||||
{ "fileType", "png"},
|
||||
{ "fileType", "svg"},
|
||||
{ "url", mailMergeUrl.ToString()}
|
||||
};
|
||||
|
||||
@ -372,5 +376,22 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
var user = Users.getUser(id);
|
||||
usersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForMentions(user.id)) : null;
|
||||
}
|
||||
|
||||
public void GetUsersInfo(HttpRequest request, out string usersInfo)
|
||||
{
|
||||
var jss = new JavaScriptSerializer();
|
||||
var id = request.Cookies.GetOrDefault("uid", null);
|
||||
var user = Users.getUser(id);
|
||||
usersInfo = jss.Serialize(Users.getUsersInfo(user.id));
|
||||
}
|
||||
|
||||
//get a users for protect
|
||||
public void GetUsersProtect(HttpRequest request, out string usersForProtect)
|
||||
{
|
||||
var jss = new JavaScriptSerializer();
|
||||
var id = request.Cookies.GetOrDefault("uid", null);
|
||||
var user = Users.getUser(id);
|
||||
usersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(Users.getUsersForProtect(user.id)) : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -16,8 +16,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using static OnlineEditorsExampleMVC.Models.FileUtility;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
@ -27,7 +33,8 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
Word,
|
||||
Cell,
|
||||
Slide
|
||||
Slide,
|
||||
Pdf
|
||||
}
|
||||
|
||||
// get file type
|
||||
@ -35,38 +42,203 @@ namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
var ext = Path.GetExtension(fileName).ToLower();
|
||||
|
||||
if (ExtsDocument.Contains(ext)) return FileType.Word; // word type for document extensions
|
||||
if (ExtsSpreadsheet.Contains(ext)) return FileType.Cell; // cell type for spreadsheet extensions
|
||||
if (ExtsPresentation.Contains(ext)) return FileType.Slide; // slide type for presentation extensions
|
||||
if (FormatManager.PdfExtensions().Contains(ext)) return FileType.Pdf; // pdf type for document extensions
|
||||
if (FormatManager.DocumentExtensions().Contains(ext)) return FileType.Word; // word type for document extensions
|
||||
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return FileType.Cell; // cell type for spreadsheet extensions
|
||||
if (FormatManager.PresentationExtensions().Contains(ext)) return FileType.Slide; // slide type for presentation extensions
|
||||
|
||||
return FileType.Word; // the default type is word
|
||||
}
|
||||
}
|
||||
|
||||
// document extensions
|
||||
public static readonly List<string> ExtsDocument = new List<string>
|
||||
{
|
||||
".doc", ".docx", ".docm",
|
||||
".dot", ".dotx", ".dotm",
|
||||
".odt", ".fodt", ".ott", ".rtf", ".txt",
|
||||
".html", ".htm", ".mht", ".xml",
|
||||
".pdf", ".djvu", ".fb2", ".epub", ".xps", ".oxps", ".oform"
|
||||
};
|
||||
public class EmptyTolerantStringEnumConverter : StringEnumConverter
|
||||
{
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
if (reader.TokenType == JsonToken.String && string.IsNullOrWhiteSpace(reader.Value.ToString()))
|
||||
return Activator.CreateInstance(objectType);
|
||||
|
||||
// spreadsheet extensions
|
||||
public static readonly List<string> ExtsSpreadsheet = new List<string>
|
||||
{
|
||||
".xls", ".xlsx", ".xlsm", ".xlsb",
|
||||
".xlt", ".xltx", ".xltm",
|
||||
".ods", ".fods", ".ots", ".csv"
|
||||
};
|
||||
return base.ReadJson(reader, objectType, existingValue, serializer);
|
||||
}
|
||||
}
|
||||
|
||||
// presentation extensions
|
||||
public static readonly List<string> ExtsPresentation = new List<string>
|
||||
public class Format
|
||||
{
|
||||
public string Name { get; }
|
||||
[JsonConverter(typeof(EmptyTolerantStringEnumConverter))]
|
||||
public FileType Type { get; }
|
||||
public List<string> Actions { get; }
|
||||
public List<string> Convert { get; }
|
||||
public List<string> Mime { get; }
|
||||
|
||||
public Format(string name, FileType type, List<string> actions, List<string> convert, List<string> mime)
|
||||
{
|
||||
Name = name;
|
||||
Type = type;
|
||||
Actions = actions;
|
||||
Convert = convert;
|
||||
Mime = mime;
|
||||
}
|
||||
|
||||
public string Extension()
|
||||
{
|
||||
return "." + Name;
|
||||
}
|
||||
}
|
||||
|
||||
public static class FormatManager
|
||||
{
|
||||
private static List<Format> cachedFormats;
|
||||
public static List<string> FillableExtensions()
|
||||
{
|
||||
return Fillable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Fillable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("fill"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> ViewableExtensions()
|
||||
{
|
||||
return Viewable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Viewable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("view"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> EditableExtensions()
|
||||
{
|
||||
return Editable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Editable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("edit") || format.Actions.Contains("lossy-edit"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> ConvertibleExtensions()
|
||||
{
|
||||
return Convertible()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Convertible()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("auto-convert"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> SpreadsheetExtensions()
|
||||
{
|
||||
return Spreadsheets()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Spreadsheets()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == FileType.Cell)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> PresentationExtensions()
|
||||
{
|
||||
return Presentations()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Presentations()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == FileType.Slide)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> DocumentExtensions()
|
||||
{
|
||||
return Documents()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Documents()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == FileType.Word)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> PdfExtensions()
|
||||
{
|
||||
return Pdfs()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Pdfs()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == FileType.Pdf)
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> AllExtensions()
|
||||
{
|
||||
return All()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> All()
|
||||
{
|
||||
if (cachedFormats == null)
|
||||
{
|
||||
".pps", ".ppsx", ".ppsm",
|
||||
".ppt", ".pptx", ".pptm",
|
||||
".pot", ".potx", ".potm",
|
||||
".odp", ".fodp", ".otp"
|
||||
};
|
||||
var path = GetPath();
|
||||
var lines = File.ReadLines(path, Encoding.UTF8);
|
||||
var contents = string.Join(Environment.NewLine, lines);
|
||||
var formats = JsonConvert.DeserializeObject<Format[]>(contents);
|
||||
cachedFormats = formats.ToList();
|
||||
}
|
||||
|
||||
return cachedFormats;
|
||||
}
|
||||
|
||||
private static string GetPath()
|
||||
{
|
||||
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");
|
||||
if (File.Exists(path))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new FileNotFoundException("The JSON file does not exist.");
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetDirectory()
|
||||
{
|
||||
string directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets", "document-formats");
|
||||
return Path.GetFullPath(directory);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -16,9 +16,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
package com.onlyoffice.integration.documentserver.models;
|
||||
using System.Collections.Generic;
|
||||
|
||||
import java.io.Serializable;
|
||||
namespace OnlineEditorsExampleMVC.Models
|
||||
{
|
||||
// create file model
|
||||
public class ForgottenFilesModel
|
||||
{
|
||||
public List<Dictionary<string, string>> files { get; set; }
|
||||
|
||||
public abstract class AbstractModel implements Serializable {
|
||||
}
|
||||
public ForgottenFilesModel(List<Dictionary<string, string>> files) { this.files = files; }
|
||||
}
|
||||
}
|
||||
@ -116,6 +116,7 @@
|
||||
<Compile Include="Helpers\Utils.cs" />
|
||||
<Compile Include="Models\FileModel.cs" />
|
||||
<Compile Include="Models\FileUtility.cs" />
|
||||
<Compile Include="Models\ForgottenFilesModel.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="WebEditor.ashx.cs">
|
||||
<DependentUpon>WebEditor.ashx</DependentUpon>
|
||||
@ -123,6 +124,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Content\editor.css" />
|
||||
<Content Include="Content\forgotten.css" />
|
||||
<Content Include="Content\images\block-content.svg" />
|
||||
<Content Include="Content\images\cell.ico" />
|
||||
<Content Include="Content\images\close.svg" />
|
||||
@ -140,18 +142,20 @@
|
||||
<Content Include="Content\images\file_xlsx.svg" />
|
||||
<Content Include="Content\images\fill-forms.svg" />
|
||||
<Content Include="Content\images\filter.svg" />
|
||||
<Content Include="Content\images\home.svg" />
|
||||
<Content Include="Content\images\icon_docx.svg" />
|
||||
<Content Include="Content\images\icon_pptx.svg" />
|
||||
<Content Include="Content\images\icon_xlsx.svg" />
|
||||
<Content Include="Content\images\info.svg" />
|
||||
<Content Include="Content\images\loader16.gif" />
|
||||
<Content Include="Content\images\logo.png" />
|
||||
<Content Include="Content\images\logo.svg" />
|
||||
<Content Include="Content\images\mobile-fill-forms.svg" />
|
||||
<Content Include="Content\images\mobile.svg" />
|
||||
<Content Include="Content\images\notdone.svg" />
|
||||
<Content Include="Content\images\review.svg" />
|
||||
<Content Include="Content\images\slide.ico" />
|
||||
<Content Include="Content\images\uid-1.png" />
|
||||
<Content Include="Content\images\uid-2.png" />
|
||||
<Content Include="Content\images\word.ico" />
|
||||
<Content Include="Content\jquery-ui.css" />
|
||||
<Content Include="Content\media.css" />
|
||||
@ -159,7 +163,10 @@
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="Global.asax" />
|
||||
<Content Include="LICENSE" />
|
||||
<Content Include="Scripts\jquery-1.8.2.js" />
|
||||
<Content Include="Scripts\forgotten.js" />
|
||||
<Content Include="Scripts\formats.js" />
|
||||
<Content Include="Scripts\jquery-3.6.4.js" />
|
||||
<Content Include="Scripts\jquery-migrate-3.4.1.js" />
|
||||
<Content Include="Scripts\jquery-ui.js" />
|
||||
<Content Include="Scripts\jquery.blockUI.js" />
|
||||
<Content Include="Scripts\jquery.dropdownToggle.js" />
|
||||
@ -167,32 +174,34 @@
|
||||
<Content Include="Scripts\jquery.iframe-transport.js" />
|
||||
<Content Include="Scripts\jscript.js" />
|
||||
<Content Include="Views\Home\Editor.aspx" />
|
||||
<Content Include="Views\Home\Forgotten.aspx" />
|
||||
<Content Include="Views\Home\Index.aspx" />
|
||||
<Content Include="Web.config">
|
||||
<SubType>Designer</SubType>
|
||||
</Content>
|
||||
<Content Include="Views\Web.config" />
|
||||
<Content Include="Views\Shared\Error.aspx" />
|
||||
<Content Include="licenses\EntityFramework.license" />
|
||||
<Content Include="licenses\Microsoft.Web.Infrastructure.license" />
|
||||
<Content Include="licenses\Newtonsoft.Json.license" />
|
||||
<Content Include="licenses\jquery.license" />
|
||||
<Content Include="licenses\WebGrease.license" />
|
||||
<Content Include="web.appsettings.config" />
|
||||
<Content Include="WebEditor.ashx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="assets\AUTHORS.md" />
|
||||
<Content Include="assets\LICENSE" />
|
||||
<Content Include="assets\new\new.docx" />
|
||||
<Content Include="assets\new\new.docxf" />
|
||||
<Content Include="assets\new\new.pptx" />
|
||||
<Content Include="assets\new\new.xlsx" />
|
||||
<Content Include="assets\sample\csv.csv" />
|
||||
<Content Include="assets\sample\sample.docx" />
|
||||
<Content Include="assets\sample\sample.docxf" />
|
||||
<Content Include="assets\sample\sample.pptx" />
|
||||
<Content Include="assets\sample\sample.xlsx" />
|
||||
<Content Include="assets\document-templates\AUTHORS.md" />
|
||||
<Content Include="assets\document-templates\LICENSE" />
|
||||
<Content Include="assets\document-templates\new\new.docx" />
|
||||
<Content Include="assets\document-templates\new\new.docxf" />
|
||||
<Content Include="assets\document-templates\new\new.pptx" />
|
||||
<Content Include="assets\document-templates\new\new.xlsx" />
|
||||
<Content Include="assets\document-templates\README.md" />
|
||||
<Content Include="assets\document-templates\sample\csv.csv" />
|
||||
<Content Include="assets\document-templates\sample\sample.docx" />
|
||||
<Content Include="assets\document-templates\sample\sample.docxf" />
|
||||
<Content Include="assets\document-templates\sample\sample.pptx" />
|
||||
<Content Include="assets\document-templates\sample\sample.xlsx" />
|
||||
<Content Include="assets\document-formats\AUTHORS.md" />
|
||||
<Content Include="assets\document-formats\CHANGELOG.md" />
|
||||
<Content Include="assets\document-formats\LICENSE" />
|
||||
<Content Include="assets\document-formats\onlyoffice-docs-formats.json" />
|
||||
<Content Include="assets\document-formats\README.md" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
|
||||
@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Ascensio System SIA")]
|
||||
[assembly: AssemblyProduct("OnlineEditorsExampleMVC")]
|
||||
[assembly: AssemblyCopyright("Ascensio System SIA 2023")]
|
||||
[assembly: AssemblyCopyright("Ascensio System SIA 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
||||
19
web/documentserver-example/csharp-mvc/Scripts/forgotten.js
Executable file
@ -0,0 +1,19 @@
|
||||
function deleteFile(event) {
|
||||
let filename = event.currentTarget.getAttribute("data");
|
||||
filename = encodeURIComponent(filename);
|
||||
let url = `webeditor.ashx?type=removeforgotten&filename=${filename}`;
|
||||
|
||||
fetch(url, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
}).then(result => {
|
||||
if(result.status == 204) {
|
||||
document.location.reload(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('.delete-file').forEach(el => {
|
||||
el.addEventListener('click', deleteFile);
|
||||
});
|
||||
66
web/documentserver-example/csharp-mvc/Scripts/formats.js
Normal file
@ -0,0 +1,66 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
class Format {
|
||||
constructor(name, type, actions, convert, mime) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.actions = actions;
|
||||
this.convert = convert;
|
||||
this.mime = mime;
|
||||
}
|
||||
|
||||
isAutoConvertible() {
|
||||
return this.actions.includes('auto-convert');
|
||||
}
|
||||
|
||||
isEditable() {
|
||||
return this.actions.includes('edit') || this.actions.includes('lossy-edit');
|
||||
}
|
||||
|
||||
isFillable() {
|
||||
return this.actions.includes('fill');
|
||||
}
|
||||
}
|
||||
|
||||
class FormatManager {
|
||||
formats = [];
|
||||
|
||||
constructor(formats) {
|
||||
if(Array.isArray(formats)) this.formats = formats;
|
||||
}
|
||||
|
||||
findByExtension(extension) {
|
||||
return this.formats.find(format => format.name == extension);
|
||||
}
|
||||
|
||||
isAutoConvertible(extension) {
|
||||
let format = this.findByExtension(extension);
|
||||
return format !== undefined && format.isAutoConvertible();
|
||||
}
|
||||
|
||||
isEditable(extension) {
|
||||
let format = this.findByExtension(extension);
|
||||
return format !== undefined && format.isEditable();
|
||||
}
|
||||
|
||||
isFillable(extension) {
|
||||
let format = this.findByExtension(extension);
|
||||
return format !== undefined && format.isFillable();
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -17,6 +17,27 @@
|
||||
*/
|
||||
|
||||
var directUrl;
|
||||
var formatManager;
|
||||
|
||||
window.onload = function () {
|
||||
fetch("webeditor.ashx?type=formats")
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
if (data.formats) {
|
||||
let formats = [];
|
||||
data.formats.forEach(format => {
|
||||
formats.push(new Format(
|
||||
format.Name,
|
||||
format.Type,
|
||||
format.Actions,
|
||||
format.Convert,
|
||||
format.Mime
|
||||
));
|
||||
});
|
||||
formatManager = new FormatManager(formats);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (typeof jQuery != "undefined") {
|
||||
jq = jQuery.noConflict();
|
||||
@ -87,8 +108,8 @@ if (typeof jQuery != "undefined") {
|
||||
});
|
||||
|
||||
var timer = null;
|
||||
var checkConvert = function (filePass) {
|
||||
filePass = filePass ? filePass : null;
|
||||
var checkConvert = function (filePass, fileType) {
|
||||
filePass = filePass ? filePass : null;
|
||||
if (timer != null) {
|
||||
clearTimeout(timer);
|
||||
}
|
||||
@ -100,10 +121,10 @@ if (typeof jQuery != "undefined") {
|
||||
jq("#filePass").val("");
|
||||
|
||||
var fileName = jq("#hiddenFileName").val();
|
||||
var posExt = fileName.lastIndexOf('.');
|
||||
var posExt = fileName.lastIndexOf('.') + 1;
|
||||
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
|
||||
|
||||
if (ConverExtList.indexOf(posExt) == -1) {
|
||||
if (!formatManager.isAutoConvertible(posExt)) {
|
||||
jq("#step2").addClass("done").removeClass("current");
|
||||
loadScripts();
|
||||
return;
|
||||
@ -116,7 +137,7 @@ if (typeof jQuery != "undefined") {
|
||||
contentType: "text/xml",
|
||||
type: "post",
|
||||
dataType: "json",
|
||||
data: JSON.stringify({ filename: fileName, filePass: filePass }),
|
||||
data: JSON.stringify({ filename: fileName, filePass: filePass, fileExt: fileType }),
|
||||
url: UrlConverter,
|
||||
complete: function (data) {
|
||||
var responseText = data.responseText;
|
||||
@ -132,6 +153,12 @@ if (typeof jQuery != "undefined") {
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
if (response.error.includes("Error conversion output format")) {
|
||||
jq("#select-file-type").removeClass("invisible");
|
||||
jq("#step2").removeClass("current");
|
||||
jq("#hiddenFileName").attr("placeholder", filePass);
|
||||
return;
|
||||
}
|
||||
jq(".current").removeClass("current");
|
||||
jq(".step:not(.done)").addClass("error");
|
||||
jq("#mainProgress .error-message").show().find("span").text(response.error);
|
||||
@ -143,7 +170,7 @@ if (typeof jQuery != "undefined") {
|
||||
jq("#hiddenFileName").val(response.filename);
|
||||
|
||||
if (response.step && response.step < 100) {
|
||||
checkConvert(filePass);
|
||||
checkConvert(filePass, fileType);
|
||||
} else {
|
||||
jq("#step2").addClass("done").removeClass("current");
|
||||
loadScripts();
|
||||
@ -178,10 +205,10 @@ if (typeof jQuery != "undefined") {
|
||||
jq("#beginView, #beginEmbedded").removeClass("disable");
|
||||
|
||||
var fileName = jq("#hiddenFileName").val();
|
||||
var posExt = fileName.lastIndexOf('.');
|
||||
var posExt = fileName.lastIndexOf('.') + 1;
|
||||
posExt = 0 <= posExt ? fileName.substring(posExt).trim().toLowerCase() : '';
|
||||
|
||||
if (EditedExtList.indexOf(posExt) != -1 || FillExtList.indexOf(posExt) != -1) {
|
||||
if (formatManager.isEditable(posExt) || formatManager.isFillable(posExt)) {
|
||||
jq("#beginEdit").removeClass("disable");
|
||||
}
|
||||
};
|
||||
@ -213,6 +240,15 @@ if (typeof jQuery != "undefined") {
|
||||
});
|
||||
};
|
||||
|
||||
jq(document).on("click", ".file-type:not(.disable)", function () {
|
||||
const currentElement = jq(this);
|
||||
var fileType = currentElement.attr("data");
|
||||
var filePass = jq("#hiddenFileName").attr("placeholder");
|
||||
jq('.file-type').addClass(["disable", "pale"]);
|
||||
currentElement.removeClass("pale");
|
||||
checkConvert(filePass, fileType);
|
||||
});
|
||||
|
||||
jq(document).on("click", "#enterPass", function () {
|
||||
var filePass = jq("#filePass").val();
|
||||
if (filePass) {
|
||||
@ -294,6 +330,23 @@ if (typeof jQuery != "undefined") {
|
||||
});
|
||||
});
|
||||
|
||||
jq(document).on("click", ".clear-all", function () {
|
||||
if (confirm("Delete all the files?")) {
|
||||
var requestAddress = "webeditor.ashx"
|
||||
+ "?type=remove";
|
||||
jq.ajax({
|
||||
async: true,
|
||||
contentType: "text/xml",
|
||||
url: requestAddress,
|
||||
complete: function (data) {
|
||||
if (JSON.parse(data.responseText).success) {
|
||||
window.location.reload(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function showUserTooltip (isMobile) {
|
||||
if ( jq("div#portal-info").is(":hidden") ) {
|
||||
jq("div#portal-info").show();
|
||||
@ -368,4 +421,27 @@ if (typeof jQuery != "undefined") {
|
||||
}).mouseout(function () {
|
||||
jq("div.tooltip").remove();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function toggleSidePanel(event) {
|
||||
event.preventDefault();
|
||||
let sidePanel = document.querySelector(".left-panel");
|
||||
let body = document.querySelector("body");
|
||||
if (sidePanel.classList.contains("active")) {
|
||||
sidePanel.classList.remove("active");
|
||||
body.classList.remove("menu-open");
|
||||
} else {
|
||||
sidePanel.classList.add("active")
|
||||
body.classList.add("menu-open");
|
||||
}
|
||||
}
|
||||
|
||||
function toggleUserDescr(event) {
|
||||
let list = event.currentTarget.querySelector("ul");
|
||||
let cursor = window.getComputedStyle(event.currentTarget).getPropertyValue("cursor");
|
||||
|
||||
if (cursor === "pointer") {
|
||||
if (list.classList.contains("active")) list.classList.remove("active");
|
||||
else list.classList.add("active");
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -68,7 +68,7 @@
|
||||
|
||||
// the user is trying to switch the document from the viewing into the editing mode
|
||||
var onRequestEditRights = function () {
|
||||
location.href = location.href.replace(RegExp("editorsMode=view\&?", "i"), "");
|
||||
location.href = location.href.replace(RegExp("editorsMode=\\w+\&?", "i"), "") + "&editorsMode=edit";
|
||||
};
|
||||
|
||||
// an error or some other specific event occurs
|
||||
@ -108,7 +108,7 @@
|
||||
|
||||
// the meta information of the document is changed via the meta command
|
||||
var onMetaChange = function (event) {
|
||||
if (event.data.favorite) {
|
||||
if (event.data.favorite !== undefined) {
|
||||
var favorite = !!event.data.favorite;
|
||||
var title = document.title.replace(/^\☆/g, "");
|
||||
document.title = (favorite ? "☆" : "") + title;
|
||||
@ -182,15 +182,39 @@
|
||||
}
|
||||
};
|
||||
|
||||
var onRequestOpen = function (event) { // user open external data source
|
||||
innerAlert("onRequestOpen");
|
||||
var windowName = event.data.windowName;
|
||||
requestReference(event.data, function (data) {
|
||||
if (data.error) {
|
||||
var winEditor = window.open("", windowName);
|
||||
winEditor.close();
|
||||
innerAlert(data.error, true);
|
||||
return;
|
||||
}
|
||||
var link = data.link;
|
||||
window.open(link, windowName);
|
||||
});
|
||||
};
|
||||
|
||||
var onRequestReferenceData = function (event) { // user refresh external data source
|
||||
event.data.directUrl = !!config.document.directUrl;
|
||||
innerAlert("onRequestReferenceData");
|
||||
|
||||
requestReference(event.data, function (data) {
|
||||
docEditor.setReferenceData(data);
|
||||
});
|
||||
};
|
||||
|
||||
var requestReference = function (data, callback) {
|
||||
innerAlert(data);
|
||||
data.directUrl = !!config.document.directUrl;
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "webeditor.ashx?type=reference");
|
||||
xhr.setRequestHeader("Content-Type", "application/json");
|
||||
xhr.send(JSON.stringify(event.data));
|
||||
xhr.send(JSON.stringify(data));
|
||||
xhr.onload = function () {
|
||||
console.log(xhr.responseText);
|
||||
docEditor.setReferenceData(JSON.parse(xhr.responseText));
|
||||
callback(JSON.parse(xhr.responseText));
|
||||
}
|
||||
};
|
||||
|
||||
@ -235,6 +259,48 @@
|
||||
}
|
||||
}
|
||||
|
||||
<% string usersForMentions; %>
|
||||
<% Model.GetUsersMentions(Request, out usersForMentions); %>
|
||||
<% string usersInfo; %>
|
||||
<% Model.GetUsersInfo(Request, out usersInfo); %>
|
||||
<% string usersForProtect; %>
|
||||
<% Model.GetUsersProtect(Request, out usersForProtect); %>
|
||||
|
||||
var onRequestUsers = function (event) {
|
||||
if (event && event.data){
|
||||
var c = event.data.c;
|
||||
}
|
||||
switch (c) {
|
||||
case "info":
|
||||
users = [];
|
||||
var allUsers = <%= usersInfo %>;
|
||||
for (var i = 0; i < event.data.id.length; i++) {
|
||||
for (var j = 0; j < allUsers.length; j++) {
|
||||
if (allUsers[j].id == event.data.id[i]) {
|
||||
users.push(allUsers[j]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "protect":
|
||||
var users = <%= usersForProtect %>;
|
||||
break;
|
||||
default:
|
||||
users = <%= usersForMentions %>;
|
||||
}
|
||||
docEditor.setUsers({
|
||||
"c": c,
|
||||
"users": users,
|
||||
});
|
||||
};
|
||||
|
||||
var onRequestSendNotify = function (event) {
|
||||
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
|
||||
var data = JSON.stringify(event.data);
|
||||
innerAlert("onRequestSendNotify: " + data);
|
||||
};
|
||||
|
||||
config = <%= Model.GetDocConfig(Request, Url) %>;
|
||||
|
||||
config.width = "100%";
|
||||
@ -252,54 +318,37 @@
|
||||
"onRequestSelectSpreadsheet": onRequestSelectSpreadsheet,
|
||||
};
|
||||
|
||||
<% string usersForMentions; %>
|
||||
<% Model.GetUsersMentions(Request, out usersForMentions); %>
|
||||
|
||||
if (config.editorConfig.user.id) {
|
||||
// the user is trying to show the document version history
|
||||
config.events['onRequestHistory'] = onRequestHistory;
|
||||
// the user is trying to click the specific document version in the document version history
|
||||
config.events['onRequestHistoryData'] = onRequestHistoryData;
|
||||
// the user is trying to go back to the document from viewing the document version history
|
||||
config.events['onRequestHistoryClose'] = function () {
|
||||
document.location.reload();
|
||||
};
|
||||
config.events['onRequestRestore'] = onRequestRestore;
|
||||
if (config.editorConfig.user.id !== "uid-3") {
|
||||
config.events['onRequestHistoryClose'] = function () {
|
||||
document.location.reload();
|
||||
};
|
||||
config.events['onRequestRestore'] = onRequestRestore;
|
||||
}
|
||||
|
||||
// add mentions for not anonymous users
|
||||
<% if (!string.IsNullOrEmpty(usersForMentions))
|
||||
{ %>
|
||||
config.events['onRequestUsers'] = function () {
|
||||
docEditor.setUsers({ // set a list of users to mention in the comments
|
||||
"users": <%= usersForMentions %>
|
||||
});
|
||||
};
|
||||
config.events['onRequestUsers'] = onRequestUsers;
|
||||
<% } %>
|
||||
|
||||
config.events['onRequestSaveAs'] = onRequestSaveAs;
|
||||
// the user is mentioned in a comment
|
||||
config.events['onRequestSendNotify'] = function (event) {
|
||||
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
|
||||
var data = JSON.stringify(event.data);
|
||||
innerAlert("onRequestSendNotify: " + data);
|
||||
};
|
||||
config.events['onRequestSendNotify'] = onRequestSendNotify;
|
||||
// prevent file renaming for anonymous users
|
||||
config.events['onRequestRename'] = onRequestRename;
|
||||
config.events['onRequestReferenceData'] = onRequestReferenceData;
|
||||
// prevent switch the document from the viewing into the editing mode for anonymous users
|
||||
config.events['onRequestEditRights'] = onRequestEditRights;
|
||||
config.events['onRequestOpen'] = onRequestOpen;
|
||||
}
|
||||
|
||||
if (config.editorConfig.createUrl) {
|
||||
config.events.onRequestSaveAs = onRequestSaveAs;
|
||||
};
|
||||
|
||||
var сonnectEditor = function () {
|
||||
if ((config.document.fileType === "docxf" || config.document.fileType === "oform")
|
||||
&& DocsAPI.DocEditor.version().split(".")[0] < 7) {
|
||||
innerAlert("Please update ONLYOFFICE Docs to version 7.0 to work on fillable forms online.");
|
||||
return;
|
||||
}
|
||||
|
||||
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
|
||||
};
|
||||
|
||||
|
||||
144
web/documentserver-example/csharp-mvc/Views/Home/Forgotten.aspx
Executable file
@ -0,0 +1,144 @@
|
||||
<%@ Page Title="ONLYOFFICE" Language="C#" Inherits="System.Web.Mvc.ViewPage<OnlineEditorsExampleMVC.Models.ForgottenFilesModel>" %>
|
||||
|
||||
<%@ Import Namespace="System.IO" %>
|
||||
<%@ Import Namespace="System.Web.Configuration" %>
|
||||
<%@ Import Namespace="OnlineEditorsExampleMVC.Helpers" %>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html lang="en">
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="server-version" content=<%= DocManagerHelper.GetVersion() %> />
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
-->
|
||||
<title>ONLYOFFICE</title>
|
||||
|
||||
<link href="<%: Url.Content("~/favicon.ico") %>" rel="shortcut icon" type="image/x-icon" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans:900,800,700,600,500,400,300&subset=latin,cyrillic-ext,cyrillic,latin-ext" />
|
||||
|
||||
<%: Styles.Render("~/Content/css") %>
|
||||
<%: Styles.Render("~/Content/forgotten") %>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="center main-nav">
|
||||
<a href="./">
|
||||
<img src ="content/images/logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</div>
|
||||
<menu class="responsive-nav">
|
||||
<li>
|
||||
<a href="#" onclick="toggleSidePanel(event)">
|
||||
<img src="content/images/mobile-menu.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./">
|
||||
<img src ="content/images/mobile-logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
</menu>
|
||||
</header>
|
||||
|
||||
<div class="center main">
|
||||
<table class="table-main">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="left-panel section"></td>
|
||||
<td class="section">
|
||||
<div class="main-panel">
|
||||
<menu class="links">
|
||||
<li class="home-link" >
|
||||
<a href="./">
|
||||
<img src="content/images/home.svg" alt="Home"/>
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="/Forgotten">Forgotten files</a>
|
||||
</li>
|
||||
</menu>
|
||||
<div class="stored-list">
|
||||
<div class="storedHeader">
|
||||
<div class="storedHeaderText">
|
||||
<span class="header-list">Forgotten files</span>
|
||||
</div>
|
||||
</div>
|
||||
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="tableHeaderCell">Filename</td>
|
||||
<td class="tableHeaderCell">Action</td>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<div class="scroll-table-body">
|
||||
<table cellspacing="0" cellpadding="0" width="100%">
|
||||
<tbody>
|
||||
<% foreach (var file in Model.files) { %>
|
||||
<tr class="tableRow" title="<%= file["key"] %>">
|
||||
<td>
|
||||
<a class="stored-edit action-link <%= file["type"] %>" href="<%= file["url"] %>" target="_blank">
|
||||
<span><%= file["key"] %></span>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<%= file["url"] %>">
|
||||
<img class="icon-download" src="content/images/download.svg" alt="Download" title="Download" /></a>
|
||||
<a class="delete-file" data="<%= file["key"] %>">
|
||||
<img class="icon-action" src="content/images/delete.svg" alt="Delete" title="Delete" /></a>
|
||||
</td>
|
||||
</tr>
|
||||
<% } %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="center">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="mailto:sales@onlyoffice.com">Submit your request</a>
|
||||
</td>
|
||||
<td class="copy">
|
||||
© Ascensio System SIA <%= DateTime.Now.Year.ToString() %>. All rights reserved.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<%: Scripts.Render("~/bundles/jquery", "~/bundles/forgotten") %>
|
||||
</body>
|
||||
</html>
|
||||
@ -13,9 +13,10 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="server-version" content=<%= DocManagerHelper.GetVersion() %> />
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -40,11 +41,23 @@
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="center">
|
||||
<a href="">
|
||||
<div class="center main-nav">
|
||||
<a href="./">
|
||||
<img src ="content/images/logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</div>
|
||||
<menu class="responsive-nav">
|
||||
<li>
|
||||
<a href="#" onclick="toggleSidePanel(event)">
|
||||
<img src="content/images/mobile-menu.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./">
|
||||
<img src ="content/images/mobile-logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
</menu>
|
||||
</header>
|
||||
|
||||
<div class="center main">
|
||||
@ -67,7 +80,7 @@
|
||||
<a class="try-editor slide" data-type="pptx">Presentation</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="try-editor form" data-type="docxf">Form template</a>
|
||||
<a class="try-editor form" data-type="pdf">PDF form</a>
|
||||
</li>
|
||||
</ul>
|
||||
<label class="side-option">
|
||||
@ -121,9 +134,24 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button class="mobile-close-btn" onclick="toggleSidePanel(event)">
|
||||
<img src="content/images/close.svg" alt="">
|
||||
</button>
|
||||
</td>
|
||||
<td class="section">
|
||||
<div class="main-panel">
|
||||
<menu class="links">
|
||||
<li class="home-link active" >
|
||||
<a href="./">
|
||||
<img src="content/images/home.svg" alt="Home"/>
|
||||
</a>
|
||||
</li>
|
||||
<% if (bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"])) { %>
|
||||
<li>
|
||||
<a href="/Forgotten">Forgotten files</a>
|
||||
</li>
|
||||
<% } %>
|
||||
</menu>
|
||||
<% var storedFiles = DocManagerHelper.GetStoredFiles(); %>
|
||||
<div id="portal-info" style="display: <%= storedFiles.Any() ? "none" : "table-cell" %>">
|
||||
<span class="portal-name">ONLYOFFICE Document Editors – Welcome!</span>
|
||||
@ -135,7 +163,7 @@
|
||||
<span class="portal-descr">You can open the same document using different users in different Web browser sessions, so you can check out multi-user editing functions.</span>
|
||||
<% foreach (User user in Users.getAllUsers())
|
||||
{ %>
|
||||
<div class="user-descr">
|
||||
<div class="user-descr" onclick="toggleUserDescr(event)">
|
||||
<b><%= user.name.IsEmpty() ? "Anonymous" : user.name %></b>
|
||||
<ul>
|
||||
<% foreach (string description in user.descriptions)
|
||||
@ -150,7 +178,14 @@
|
||||
if (storedFiles.Any())
|
||||
{ %>
|
||||
<div class="stored-list">
|
||||
<span class="header-list">Your documents</span>
|
||||
<div class="storedHeader">
|
||||
<div class="storedHeaderText">
|
||||
<span class="header-list">Your documents</span>
|
||||
</div>
|
||||
<div class="storedHeaderClearAll">
|
||||
<div class="clear-all">Clear all</div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
@ -192,11 +227,13 @@
|
||||
<img src="content/images/mobile.svg" alt="Open in editor for mobile devices" title="Open in editor for mobile devices"/>
|
||||
</a>
|
||||
</td>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "comment", directUrl = isEnabledDirectUrl }) %>" target="_blank">
|
||||
<img src="content/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
|
||||
</a>
|
||||
</td>
|
||||
<% if (docType != "pdf") { %>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "comment", directUrl = isEnabledDirectUrl }) %>" target="_blank">
|
||||
<img src="content/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
|
||||
</a>
|
||||
</td>
|
||||
<% } %>
|
||||
<% if (docType == "word") { %>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= Url.Action("Editor", "Home", new { fileName = storedFile.Name, editorsType = "desktop", editorsMode = "review", directUrl = isEnabledDirectUrl }) %>" target="_blank">
|
||||
@ -294,6 +331,15 @@
|
||||
<div class="describeUpload">After these steps are completed, you can work with your document.</div>
|
||||
<span id="step1" class="step">1. Loading the file.</span>
|
||||
<span class="step-descr">The loading speed depends on file size and additional elements it contains.</span>
|
||||
<div id="select-file-type" class="invisible">
|
||||
<br />
|
||||
<span class="step">Please select the current document type</span>
|
||||
<div class="buttonsMobile indent">
|
||||
<div class="button file-type document" data="docx">Document</div>
|
||||
<div class="button file-type spreadsheet" data="xlsx">Spreadsheet</div>
|
||||
<div class="button file-type presentation" data="pptx">Presentation</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<span id="step2" class="step">2. Conversion.</span>
|
||||
<span class="step-descr">The file is converted to OOXML so that you can edit it.</span>
|
||||
@ -356,9 +402,6 @@
|
||||
<%: Scripts.Render("~/bundles/jquery", "~/bundles/scripts") %>
|
||||
|
||||
<script language="javascript" type="text/javascript">
|
||||
var FillExtList = '<%= string.Join(",", DocManagerHelper.FillFormExts.ToArray()) %>';
|
||||
var ConverExtList = '<%= string.Join(",", DocManagerHelper.ConvertExts.ToArray()) %>';
|
||||
var EditedExtList = '<%= string.Join(",", DocManagerHelper.EditedExts.ToArray()) %>';
|
||||
var UrlConverter = '<%= Url.Content("~/webeditor.ashx?type=convert") %>';
|
||||
var UrlEditor = '<%= Url.Action("editor", "Home") %>';
|
||||
</script>
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -26,6 +26,7 @@
|
||||
<hgroup>
|
||||
<h1>Error.</h1>
|
||||
<h2>An error occurred while processing your request.</h2>
|
||||
<p><%= ViewData["Message"] %></p>
|
||||
</hgroup>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -69,6 +69,9 @@ namespace OnlineEditorsExampleMVC
|
||||
case "remove":
|
||||
Remove(context);
|
||||
break;
|
||||
case "removeforgotten":
|
||||
RemoveForgotten(context);
|
||||
break;
|
||||
case "assets":
|
||||
Assets(context);
|
||||
break;
|
||||
@ -87,6 +90,9 @@ namespace OnlineEditorsExampleMVC
|
||||
case "reference":
|
||||
Reference(context);
|
||||
break;
|
||||
case "formats":
|
||||
Formats(context);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,7 +246,13 @@ namespace OnlineEditorsExampleMVC
|
||||
var fileUri = DocManagerHelper.GetDownloadUrl(fileName);
|
||||
|
||||
var extension = (Path.GetExtension(fileName).ToLower() ?? "").Trim('.');
|
||||
var internalExtension = "ooxml";
|
||||
string conversionExtension = "ooxml";
|
||||
object fileExt;
|
||||
|
||||
if (body.TryGetValue("fileExt", out fileExt) && !String.IsNullOrEmpty(fileExt.ToString()))
|
||||
{
|
||||
conversionExtension = fileExt.ToString();
|
||||
}
|
||||
|
||||
// check if the file with such an extension can be converted
|
||||
if (DocManagerHelper.ConvertExts.Contains("." + extension))
|
||||
@ -258,7 +270,7 @@ namespace OnlineEditorsExampleMVC
|
||||
|
||||
// get the url and file type of the converted file
|
||||
Dictionary<string, string> newFileData;
|
||||
var result = ServiceConverter.GetConvertedData(downloadUri.ToString(), extension, internalExtension, key, true, out newFileData, filePass, lang);
|
||||
var result = ServiceConverter.GetConvertedData(downloadUri.ToString(), extension, conversionExtension, key, true, out newFileData, filePass, lang);
|
||||
if (result != 100)
|
||||
{
|
||||
context.Response.Write("{ \"step\" : \"" + result + "\", \"filename\" : \"" + fileName + "\"}");
|
||||
@ -393,8 +405,17 @@ namespace OnlineEditorsExampleMVC
|
||||
context.Response.ContentType = "text/plain";
|
||||
try
|
||||
{
|
||||
var fileName = Path.GetFileName(context.Request["fileName"]);
|
||||
Remove(fileName); // remove a file and its history if it exists
|
||||
string fileName = context.Request["fileName"];
|
||||
|
||||
if (!String.IsNullOrEmpty(fileName))
|
||||
{
|
||||
fileName = Path.GetFileName(context.Request["fileName"]);
|
||||
Remove(fileName); // remove a file and its history if it exists
|
||||
}
|
||||
else
|
||||
{
|
||||
RemoveUserDirectory(); // remove the user's directory
|
||||
}
|
||||
|
||||
context.Response.Write("{ \"success\": true }");
|
||||
}
|
||||
@ -414,6 +435,14 @@ namespace OnlineEditorsExampleMVC
|
||||
if (Directory.Exists(histDir)) Directory.Delete(histDir, true);
|
||||
}
|
||||
|
||||
// remove the user's directory
|
||||
private static void RemoveUserDirectory()
|
||||
{
|
||||
var path = DocManagerHelper.StoragePath("", null); // get the path to the user directory
|
||||
|
||||
if (Directory.Exists(path)) Directory.Delete(path, true);
|
||||
}
|
||||
|
||||
// get files information
|
||||
private static void Files(HttpContext context)
|
||||
{
|
||||
@ -453,7 +482,7 @@ namespace OnlineEditorsExampleMVC
|
||||
private static void Assets(HttpContext context)
|
||||
{
|
||||
var fileName = Path.GetFileName(context.Request["filename"]);
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
|
||||
download(filePath, context);
|
||||
}
|
||||
|
||||
@ -461,7 +490,7 @@ namespace OnlineEditorsExampleMVC
|
||||
private static void GetCsv(HttpContext context)
|
||||
{
|
||||
var fileName = "csv.csv";
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
|
||||
download(filePath, context);
|
||||
}
|
||||
|
||||
@ -812,6 +841,27 @@ namespace OnlineEditorsExampleMVC
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName == "" && body.ContainsKey("link"))
|
||||
{
|
||||
string link = body["link"].ToString();
|
||||
if (!link.Contains(DocManagerHelper.GetServerUrl(false)))
|
||||
{
|
||||
context.Response.Write(jss.Serialize(new Dictionary<string, string>() {
|
||||
{ "url", link },
|
||||
{ "directUrl", link }
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
Uri linkUri = new Uri(link);
|
||||
fileName = HttpUtility.ParseQueryString(linkUri.Query).Get("fileName");
|
||||
if (string.IsNullOrEmpty(fileName) || !File.Exists(DocManagerHelper.StoragePath(fileName, null)))
|
||||
{
|
||||
context.Response.Write("{ \"error\": \"File is not exist\"}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName == "")
|
||||
{
|
||||
try
|
||||
@ -853,7 +903,8 @@ namespace OnlineEditorsExampleMVC
|
||||
{ "instanceId", DocManagerHelper.GetServerUrl(false) }
|
||||
}
|
||||
},
|
||||
{ "path", fileName }
|
||||
{ "path", fileName },
|
||||
{ "link", DocManagerHelper.GetServerUrl(false) + "Editor?fileName=" + fileName }
|
||||
};
|
||||
|
||||
if (JwtManager.Enabled)
|
||||
@ -929,6 +980,51 @@ namespace OnlineEditorsExampleMVC
|
||||
return history;
|
||||
}
|
||||
|
||||
// return all the supported formats
|
||||
private static void Formats(HttpContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, object> data = new Dictionary<string, object>
|
||||
{
|
||||
{ "formats", FormatManager.All() }
|
||||
};
|
||||
context.Response.ContentType = "application/json";
|
||||
var jss = new JavaScriptSerializer();
|
||||
|
||||
context.Response.Write(jss.Serialize(data));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
|
||||
}
|
||||
}
|
||||
|
||||
// delete a forgotten file from the document server
|
||||
private static void RemoveForgotten(HttpContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"]))
|
||||
{
|
||||
throw new HttpException(403, "The forgotten page is disabled");
|
||||
}
|
||||
|
||||
string filename = context.Request["filename"];
|
||||
|
||||
if (!String.IsNullOrEmpty(filename))
|
||||
{
|
||||
TrackManager.commandRequest("deleteForgotten", filename);
|
||||
}
|
||||
|
||||
context.Response.StatusCode = 204;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
context.Response.StatusCode = 500;
|
||||
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,15 +1,13 @@
|
||||
<?xml version="1.0"?>
|
||||
<appSettings>
|
||||
<clear />
|
||||
<add key="version" value="1.6.0"/>
|
||||
<add key="version" value="1.11.0"/>
|
||||
|
||||
<add key="filesize-max" value="52428800"/>
|
||||
<add key="storage-path" value=""/>
|
||||
<add key="filename-max" value="50"/>
|
||||
<add key="enable-forgotten" value="true"/>
|
||||
|
||||
<add key="files.docservice.fillform-docs" value=".docx|.oform"/>
|
||||
<add key="files.docservice.viewed-docs" value=".djvu|.oxps|.pdf|.xps"/>
|
||||
<add key="files.docservice.edited-docs" value=".csv|.docm|.docx|.docxf|.dotm|.dotx|.epub|.fb2|.html|.odp|.ods|.odt|.otp|.ots|.ott|.potm|.potx|.ppsm|.ppsx|.pptm|.pptx|.rtf|.txt|.xlsm|.xlsx|.xltm|.xltx"/>
|
||||
<add key="files.docservice.convert-docs" value=".doc|.dot|.dps|.dpt|.epub|.et|.ett|.fb2|.fodp|.fods|.fodt|.htm|.html|.mht|.mhtml|.odp|.ods|.odt|.otp|.ots|.ott|.pot|.pps|.ppt|.rtf|.stw|.sxc|.sxi|.sxw|.wps|.wpt|.xls|.xlsb|.xlt|.xml"/>
|
||||
<add key="files.docservice.timeout" value="120000" />
|
||||
<add key="files.docservice.secret" value="" />
|
||||
<add key="files.docservice.header" value="Authorization" />
|
||||
@ -18,14 +16,14 @@
|
||||
|
||||
<add key="files.docservice.verify-peer-off" value="true"/>
|
||||
|
||||
<add key="files.docservice.languages" value="en:English|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA: Test Language"/>
|
||||
<add key="files.docservice.languages" value="en:English|ar:Arabic|hy:Armenian|az:Azerbaijani|eu:Basque|be:Belarusian|bg:Bulgarian|ca:Catalan|zh:Chinese (Simplified)|zh-TW:Chinese (Traditional)|cs:Czech|da:Danish|nl:Dutch|en-GB:English (United Kingdom)|fi:Finnish|fr:French|gl:Galego|de:German|el:Greek|he-IL:Hebrew (Israel)|hu:Hungarian|id:Indonesian|it:Italian|ja:Japanese|ko:Korean|lo:Lao|lv:Latvian|ms:Malay (Malaysia)|no:Norwegian|pl:Polish|pt:Portuguese (Brazil)|pt-PT:Portuguese (Portugal)|ro:Romanian|ru:Russian|sr-Cyrl-RS:Serbian (Cyrillic)|sr-Latn-RS:Serbian (Latin)|si:Sinhala (Sri Lanka)|sk:Slovak|sl:Slovenian|es:Spanish|sv:Swedish|tr:Turkish|uk:Ukrainian|vi:Vietnamese|aa-AA:Test Language"/>
|
||||
|
||||
<add key="files.docservice.url.site" value="http://documentserver/"/>
|
||||
|
||||
<add key="files.docservice.url.converter" value="ConvertService.ashx"/>
|
||||
<add key="files.docservice.url.converter" value="converter"/>
|
||||
<add key="files.docservice.url.api" value="web-apps/apps/api/documents/api.js"/>
|
||||
<add key="files.docservice.url.preloader" value="web-apps/apps/api/documents/cache-scripts.html"/>
|
||||
<add key="files.docservice.url.command" value="coauthoring/CommandService.ashx"/>
|
||||
<add key="files.docservice.url.command" value="command"/>
|
||||
|
||||
<add key="files.docservice.url.example" value=""/>
|
||||
|
||||
|
||||
161
web/documentserver-example/csharp/App_Themes/forgotten.css
Executable file
@ -0,0 +1,161 @@
|
||||
.center {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
width: 256px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 832px;
|
||||
margin: 0 32px;
|
||||
padding: 48px 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid #E2E2E2;
|
||||
}
|
||||
|
||||
.tableRow td:first-child {
|
||||
width: 70%;
|
||||
flex-grow: 0;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.tableHeader td:first-child {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 10%;
|
||||
text-align: center;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.tableHeader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stored-edit {
|
||||
display: block;
|
||||
padding-top: 0;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
menu.links {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.scroll-table-body table {
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 12px;
|
||||
line-height: normal;
|
||||
position: static;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.stored-list {
|
||||
height: calc(100% - 58px);
|
||||
}
|
||||
|
||||
header {
|
||||
min-width:auto;
|
||||
}
|
||||
|
||||
header a {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
width: 1152px;
|
||||
}
|
||||
|
||||
@media (max-width: 1279px) and (min-width: 1024px) {
|
||||
.left-panel {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 688px;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: 928px;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin-left: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1023px) and (min-width: 593px) {
|
||||
.center {
|
||||
max-width: 768px;
|
||||
width: calc(100% - 80px);
|
||||
}
|
||||
|
||||
.table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: calc(100% - 32px);
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: 768px;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin-left: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 592px) and (min-width: 320px) {
|
||||
.center, .table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
padding: 28px 16px;
|
||||
}
|
||||
|
||||
.tableHeader td:last-child, .tableRow td:last-child {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
header a {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
top: 40px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
padding: 8px 0;
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M0 3c0-1.65685 1.34315-3 3-3h20l7 7v30c0 1.6569-1.3431 3-3 3H3c-1.65685 0-3-1.3431-3-3V3z" fill="#27ABA3"/><path d="M23 0l7 7h-4c-1.6569 0-3-1.34315-3-3V0z" fill="#008078"/><path fill-rule="evenodd" clip-rule="evenodd" d="M24 14H6v7h18v-7zm-.8182 5.9978H6.81818V15H23.1818v4.9978zM24 23H6v7h18v-7zm-.8182 5.9978H6.81818V24H23.1818v4.9978z" fill="#fff"/></svg>
|
||||
|
Before Width: | Height: | Size: 463 B |
@ -0,0 +1,5 @@
|
||||
<svg width="30" height="40" viewBox="0 0 30 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M0 3C0 1.34315 1.34315 0 3 0H23L30 7V37C30 38.6569 28.6569 40 27 40H3C1.34315 40 0 38.6569 0 37V3Z" fill="#9E1919"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.0062 15V16.0065H24V15H17.0062ZM17.0062 19V20.0163H24V19H17.0062ZM24 23H17.0062V24.0261H24V23ZM6 28V27.0293H24V28H6ZM7 16H14V23H7V16ZM6 15H7H14H15V16V23V24H14H7H6V23V16V15Z" fill="white"/>
|
||||
<path d="M23 0L30 7H26C24.3431 7 23 5.65685 23 4V0Z" fill="black" fill-opacity="0.25"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 558 B |
@ -0,0 +1,3 @@
|
||||
<svg width="20" height="17" viewBox="0 0 20 17" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 17V11H12V17H17V9H20L10 0L0 9H3V17H8Z" fill="#444444"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 173 B |
@ -0,0 +1 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 1h8l4 4v10H2V1z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14 5l-4-4H2v14h12V5zm-4-5l5 5v11H1V0h9z" fill="#BFBFBF"/><path fill="#9E1919" d="M3 10h10v4H3z"/><path d="M7 7V2H3v5h4zM8 3V2h2v1H8zM8 5V4h5v1H8zM13 6H8v1h5V6zM13 8H3v1h10V8z" fill="#BFBFBF"/><path opacity=".3" d="M9 1h1v3h4l1 1H9V1z" fill="#333"/></svg>
|
||||
|
After Width: | Height: | Size: 441 B |
|
Before Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="24" height="23" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5332 22.2243L0.632544 17.5921C-0.210848 17.1877 -0.210848 16.5627 0.632544 16.1951L4.07945 14.5775L10.4966 17.5921C11.34 17.9965 12.6967 17.9965 13.5034 17.5921L19.9206 14.5775L23.3675 16.1951C24.2108 16.5995 24.2108 17.2245 23.3675 17.5921L13.4668 22.2243C12.6967 22.592 11.34 22.592 10.5332 22.2243Z" fill="#FF6F3D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5011 16.4922L0.630617 11.8546C-0.210206 11.4497 -0.210206 10.824 0.630617 10.456L3.99391 8.87329L10.5011 11.9282C11.342 12.3331 12.6946 12.3331 13.4989 11.9282L20.0061 8.87329L23.3694 10.456C24.2102 10.8608 24.2102 11.4865 23.3694 11.8546L13.4989 16.4922C12.658 16.897 11.3054 16.897 10.5011 16.4922Z" fill="#95C038"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.5011 10.8195L0.630617 6.24863C-0.210206 5.84959 -0.210206 5.23289 0.630617 4.87013L10.5011 0.299281C11.342 -0.0997605 12.6946 -0.0997605 13.4989 0.299281L23.3694 4.87013C24.2102 5.26917 24.2102 5.88587 23.3694 6.24863L13.4989 10.8195C12.658 11.1822 11.3054 11.1822 10.5011 10.8195Z" fill="#5DC0E8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,5 @@
|
||||
<svg width="20" height="14" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="20" height="2" rx="1" fill="white"/>
|
||||
<rect y="6" width="20" height="2" rx="1" fill="white"/>
|
||||
<rect y="12" width="20" height="2" rx="1" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 278 B |
@ -0,0 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13 17C13 17.5523 12.5523 18 12 18C11.4477 18 11 17.5523 11 17V13H7C6.44772 13 6 12.5523 6 12C6 11.4477 6.44772 11 7 11H11V7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7V11H17C17.5523 11 18 11.4477 18 12C18 12.5523 17.5523 13 17 13H13V17Z" fill="#444444"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 416 B |
BIN
web/documentserver-example/csharp/App_Themes/images/uid-1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
web/documentserver-example/csharp/App_Themes/images/uid-2.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -79,7 +79,8 @@
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
@ -119,7 +120,8 @@
|
||||
.contentCells-icon{
|
||||
width: 5%;
|
||||
}
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 55%;
|
||||
}
|
||||
|
||||
@ -175,7 +177,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 715px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
@ -263,7 +266,8 @@
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
@ -293,7 +297,8 @@
|
||||
width: 580px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
@ -407,7 +412,8 @@
|
||||
padding: 16px 0 6px;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
@ -502,6 +508,17 @@
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
.buttonsMobile.indent {
|
||||
margin-bottom: 0;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
.button.file-type:hover,
|
||||
.button.file-type {
|
||||
height: 28px;
|
||||
width: 100px;
|
||||
margin-bottom: 10px !important;
|
||||
font-size: 9px;
|
||||
}
|
||||
.button.gray{
|
||||
margin: 0;
|
||||
}
|
||||
@ -527,7 +544,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 510px) and (min-width: 470px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 35%;
|
||||
}
|
||||
|
||||
@ -553,7 +571,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 470px) and (min-width: 420px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 30%;
|
||||
}
|
||||
.tableRow td:first-child{
|
||||
@ -588,7 +607,8 @@
|
||||
}
|
||||
|
||||
@media (max-width: 420px) and (min-width: 320px) {
|
||||
.tableRow {
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
@ -638,7 +658,8 @@
|
||||
}
|
||||
}
|
||||
@media (max-width: 769px) and (min-width: 715px){
|
||||
.tableRow{
|
||||
.tableRow,
|
||||
menu.links {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
@ -687,3 +708,216 @@
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 592px) and (min-width: 320px) {
|
||||
body.menu-open {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
header {
|
||||
min-width: auto;
|
||||
height: fit-content;
|
||||
}
|
||||
|
||||
header a {
|
||||
display: block;
|
||||
}
|
||||
|
||||
header img {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header, footer {
|
||||
position: -webkit-sticky; /* Safari */
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.center {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.left-panel {
|
||||
background-color: rgba(186, 186, 186, 0.6);
|
||||
display: none;
|
||||
flex-direction: row;
|
||||
align-items: start;
|
||||
max-width: none;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
position: fixed;
|
||||
left: 0;
|
||||
height: calc(100% - 124px);
|
||||
z-index:99;
|
||||
}
|
||||
|
||||
.left-panel.active {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.help-block {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
background-color: #F5F5F5;
|
||||
width: 248px;
|
||||
padding-left: 16px;
|
||||
padding-top: 33px;
|
||||
padding-bottom: 33px;
|
||||
padding-right: 40px;
|
||||
box-sizing: border-box;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.table-main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mobile-close-btn {
|
||||
display: block;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
background-color: #E2E2E2;
|
||||
border-radius: 2px;
|
||||
border-color: #E2E2E2;
|
||||
color: #808080;
|
||||
cursor: pointer;
|
||||
outline: inherit;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.main-panel {
|
||||
width: 100%;
|
||||
left: 0;
|
||||
padding: 28px 16px;
|
||||
}
|
||||
|
||||
#portal-info {
|
||||
width: 100%;
|
||||
max-width: fit-content;
|
||||
}
|
||||
|
||||
menu.links {
|
||||
width: 100%;
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
span.portal-name {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
span.portal-descr:first-child {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
span.portal-descr {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.user-descr {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
min-width: auto;
|
||||
border-bottom: 1px solid #E5E5E5;
|
||||
padding: 12px 0;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.user-descr ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.user-descr ul.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.user-descr b {
|
||||
font-size: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
column-gap: 8px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.user-descr b::before {
|
||||
content: url("images/plus.svg");
|
||||
display: inline-block;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.storedHeader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.storedHeaderClearAll {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.scroll-table-body {
|
||||
top: 36px;
|
||||
}
|
||||
|
||||
.scroll-table-body tr:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.tableRow {
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
padding: 16px 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.tableRow td:first-child {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.header-list {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.firstContentCellViewers {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.firstContentCellViewers ~ td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.downloadContentCellShift:after {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.main-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.responsive-nav {
|
||||
height: 44px;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 0;
|
||||
align-items: center;
|
||||
column-gap: 16px;
|
||||
padding: 10px 16px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.main {
|
||||
height: calc(100% - 124px);
|
||||
}
|
||||
|
||||
.user-block-table {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -65,6 +65,14 @@ header img {
|
||||
margin: 10px 0 22px 32px;
|
||||
}
|
||||
|
||||
.responsive-nav {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mobile-close-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.center {
|
||||
position: relative;
|
||||
margin: 0 auto 0;
|
||||
@ -164,7 +172,7 @@ label .checkbox {
|
||||
}
|
||||
|
||||
.try-editor.form {
|
||||
background-image: url("images/file_docxf.svg");
|
||||
background-image: url("images/file_pdf.svg");
|
||||
}
|
||||
|
||||
.side-option {
|
||||
@ -230,6 +238,33 @@ label .checkbox {
|
||||
color: #FF6F3D;
|
||||
}
|
||||
|
||||
.button.file-type {
|
||||
font-size: 11px;
|
||||
color: #FFFFFF;
|
||||
padding: 8px 8px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.button.file-type.disable {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.button.file-type.pale {
|
||||
opacity: 30%;
|
||||
}
|
||||
|
||||
.button.file-type.document {
|
||||
background: #446995;
|
||||
}
|
||||
|
||||
.button.file-type.spreadsheet {
|
||||
background: #40865C;
|
||||
}
|
||||
|
||||
.button.file-type.presentation {
|
||||
background: #AA5252;
|
||||
}
|
||||
|
||||
.upload-panel {
|
||||
float: left;
|
||||
padding: 24px 0;
|
||||
@ -271,6 +306,43 @@ label .checkbox {
|
||||
border-bottom: 1px solid #D0D5DA;
|
||||
}
|
||||
|
||||
.links {
|
||||
display: flex;
|
||||
padding: 0;
|
||||
column-gap: 30px;
|
||||
align-items: center;
|
||||
list-style: none;
|
||||
border-bottom: 1px solid #E2E2E2;
|
||||
margin: 0;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.links li {
|
||||
padding: 4px;
|
||||
border-bottom: 2px solid transparent;
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.links li.active {
|
||||
border-bottom: 2px solid #FF6F3D;
|
||||
}
|
||||
|
||||
.links li.active a {
|
||||
color: #FF6F3D;
|
||||
}
|
||||
|
||||
.links li.active a img {
|
||||
filter: invert(55%) sepia(67%) saturate(2727%) hue-rotate(335deg) brightness(104%) contrast(101%);
|
||||
}
|
||||
|
||||
.links a {
|
||||
display: inline-block;
|
||||
padding: 2px 0;
|
||||
line-height: 20px;
|
||||
font-size: 13px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#mainProgress {
|
||||
color: #333333;
|
||||
display: none;
|
||||
@ -468,6 +540,11 @@ footer a:hover {
|
||||
background-image: url("images/icon_pptx.svg");
|
||||
}
|
||||
|
||||
.stored-edit.pdf,
|
||||
.uploadFileName.pdf {
|
||||
background-image: url("images/icon_pdf.svg");
|
||||
}
|
||||
|
||||
.stored-edit span {
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
@ -596,6 +673,29 @@ footer a:hover {
|
||||
width: 4%;
|
||||
}
|
||||
|
||||
.storedHeader {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.storedHeaderClearAll {
|
||||
padding-right: 52px;
|
||||
}
|
||||
|
||||
.clear-all {
|
||||
display: inline-block;
|
||||
width: 100px;
|
||||
padding: 2px;
|
||||
outline: 1px solid #E5E5E5;
|
||||
text-align: center;
|
||||
cursor:pointer;
|
||||
text-transform: uppercase;
|
||||
background-color: #F5F5F5;
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
.select-user {
|
||||
color: #444444;
|
||||
font-family: Open Sans;
|
||||
@ -745,6 +845,16 @@ html {
|
||||
margin-left: 25px;
|
||||
}
|
||||
|
||||
.buttonsMobile.indent{
|
||||
padding-left: 35px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.invisible {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tooltip {
|
||||
background: #FFFFFF;
|
||||
border-radius: 5px;
|
||||
|
||||
@ -13,10 +13,11 @@
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="server-version" content=<%= GetVersion() %> />
|
||||
<title>ONLYOFFICE</title>
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -44,11 +45,23 @@
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<header>
|
||||
<div class="center">
|
||||
<a href="">
|
||||
<div class="center main-nav">
|
||||
<a href="./">
|
||||
<img src ="app_themes/images/logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</div>
|
||||
<menu class="responsive-nav">
|
||||
<li>
|
||||
<a href="#" onclick="toggleSidePanel(event)">
|
||||
<img src="app_themes/images/mobile-menu.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./">
|
||||
<img src ="app_themes/images/mobile-logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
</menu>
|
||||
</header>
|
||||
<div class="center main">
|
||||
<table class="table-main">
|
||||
@ -70,7 +83,7 @@
|
||||
<a class="try-editor slide" data-type="slide">Presentation</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="try-editor form" data-type="docxf">Form template</a>
|
||||
<a class="try-editor form" data-type="pdf">PDF form</a>
|
||||
</li>
|
||||
</ul>
|
||||
<label class="side-option">
|
||||
@ -123,10 +136,25 @@
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<button class="mobile-close-btn" onclick="toggleSidePanel(event)">
|
||||
<img src="app_themes/images/close.svg" alt="">
|
||||
</button>
|
||||
</td>
|
||||
<td class="section">
|
||||
<% var storedFiles = GetStoredFiles(); %>
|
||||
<div class="main-panel">
|
||||
<menu class="links">
|
||||
<li class="home-link active" >
|
||||
<a href="./">
|
||||
<img src="app_themes/images/home.svg" alt="Home"/>
|
||||
</a>
|
||||
</li>
|
||||
<% if (bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"])) { %>
|
||||
<li>
|
||||
<a href="/Forgotten.aspx">Forgotten files</a>
|
||||
</li>
|
||||
<% } %>
|
||||
</menu>
|
||||
<div id="portal-info" style="display: <%= storedFiles.Any() ? "none" : "table-cell" %>">
|
||||
<span class="portal-name">ONLYOFFICE Document Editors – Welcome!</span>
|
||||
<span class="portal-descr">
|
||||
@ -137,7 +165,7 @@
|
||||
<span class="portal-descr">You can open the same document using different users in different Web browser sessions, so you can check out multi-user editing functions.</span>
|
||||
<% foreach (User user in Users.getAllUsers())
|
||||
{ %>
|
||||
<div class="user-descr">
|
||||
<div class="user-descr" onclick="toggleUserDescr(event)">
|
||||
<b><%= user.name.IsEmpty() ? "Anonymous" : user.name %></b>
|
||||
<ul>
|
||||
<% foreach (string description in user.descriptions)
|
||||
@ -152,7 +180,14 @@
|
||||
if (storedFiles.Any())
|
||||
{ %>
|
||||
<div class="stored-list">
|
||||
<span class="header-list">Your documents</span>
|
||||
<div class="storedHeader">
|
||||
<div class="storedHeaderText">
|
||||
<span class="header-list">Your documents</span>
|
||||
</div>
|
||||
<div class="storedHeaderClearAll">
|
||||
<div class="clear-all">Clear all</div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
|
||||
<thead>
|
||||
<tr >
|
||||
@ -194,11 +229,13 @@
|
||||
<img src="app_themes/images/mobile.svg" alt="Open in editor for mobile devices" title="Open in editor for mobile devices"/>
|
||||
</a>
|
||||
</td>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=comment" %>" target="_blank">
|
||||
<img src="app_themes/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
|
||||
</a>
|
||||
</td>
|
||||
<% if (docType != "pdf") { %>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=comment" %>" target="_blank">
|
||||
<img src="app_themes/images/comment.svg" alt="Open in editor for comment" title="Open in editor for comment"/>
|
||||
</a>
|
||||
</td>
|
||||
<% } %>
|
||||
<% if (docType == "word") { %>
|
||||
<td class="contentCells contentCells-icon">
|
||||
<a href="<%= editUrl + "&editorsType=desktop&editorsMode=review" %>" target="_blank">
|
||||
@ -296,6 +333,15 @@
|
||||
<div class="describeUpload">After these steps are completed, you can work with your document.</div>
|
||||
<span id="step1" class="step">1. Loading the file.</span>
|
||||
<span class="step-descr">The loading speed depends on file size and additional elements it contains.</span>
|
||||
<div id="select-file-type" class="invisible">
|
||||
<br />
|
||||
<span class="step">Please select the current document type</span>
|
||||
<div class="buttonsMobile indent">
|
||||
<div class="button file-type document" data="docx">Document</div>
|
||||
<div class="button file-type spreadsheet" data="xlsx">Spreadsheet</div>
|
||||
<div class="button file-type presentation" data="pptx">Presentation</div>
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<span id="step2" class="step">2. Conversion.</span>
|
||||
<span class="step-descr">The file is converted to OOXML so that you can edit it.</span>
|
||||
@ -363,12 +409,8 @@
|
||||
<script language="javascript" type="text/javascript" src="script/jquery.iframe-transport.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="script/jquery.fileupload.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="script/jquery.dropdownToggle.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="script/formats.js"></script>
|
||||
<script language="javascript" type="text/javascript" src="script/jscript.js"></script>
|
||||
<script language="javascript" type="text/javascript">
|
||||
var FillFormExtList = '<%= string.Join(",", FillFormsExts.ToArray()) %>';
|
||||
var ConverExtList = '<%= string.Join(",", ConvertExts.ToArray()) %>';
|
||||
var EditedExtList = '<%= string.Join(",", EditedExts.ToArray()) %>';
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -30,49 +30,15 @@ using ASC.Api.DocumentConverter;
|
||||
|
||||
namespace OnlineEditorsExample
|
||||
{
|
||||
internal static class FileType
|
||||
{
|
||||
// the spreadsheet extension list
|
||||
public static readonly List<string> ExtsSpreadsheet = new List<string>
|
||||
{
|
||||
".xls", ".xlsx", ".xlsm", ".xlsb",
|
||||
".xlt", ".xltx", ".xltm",
|
||||
".ods", ".fods", ".ots", ".csv"
|
||||
};
|
||||
|
||||
// the presentation extension list
|
||||
public static readonly List<string> ExtsPresentation = new List<string>
|
||||
{
|
||||
".pps", ".ppsx", ".ppsm",
|
||||
".ppt", ".pptx", ".pptm",
|
||||
".pot", ".potx", ".potm",
|
||||
".odp", ".fodp", ".otp"
|
||||
};
|
||||
|
||||
// the document extension list
|
||||
public static readonly List<string> ExtsDocument = new List<string>
|
||||
{
|
||||
".doc", ".docx", ".docm",
|
||||
".dot", ".dotx", ".dotm",
|
||||
".odt", ".fodt", ".ott", ".rtf", ".txt",
|
||||
".html", ".htm", ".mht", ".xml",
|
||||
".pdf", ".djvu", ".fb2", ".epub", ".xps", ".oxps", ".oform"
|
||||
};
|
||||
|
||||
// get an internal file extension
|
||||
public static string GetInternalExtension(string extension)
|
||||
{
|
||||
extension = Path.GetExtension(extension).ToLower(); // get file extension
|
||||
if (ExtsDocument.Contains(extension)) return ".docx"; // .docx for text document extensions
|
||||
if (ExtsSpreadsheet.Contains(extension)) return ".xlsx"; // .xlsx for spreadsheet extensions
|
||||
if (ExtsPresentation.Contains(extension)) return ".pptx"; // .pptx for presentation extensions
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public partial class _Default : Page
|
||||
{
|
||||
|
||||
//get server version
|
||||
public static string GetVersion()
|
||||
{
|
||||
return WebConfigurationManager.AppSettings["version"];
|
||||
}
|
||||
|
||||
// get the virtual path
|
||||
public static string VirtualPath
|
||||
{
|
||||
@ -115,24 +81,24 @@ namespace OnlineEditorsExample
|
||||
// file extensions that can be viewed
|
||||
private static List<string> ViewedExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.viewed-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.ViewableExtensions(); }
|
||||
}
|
||||
|
||||
|
||||
public static List<string> FillFormsExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.fillform-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.FillableExtensions(); }
|
||||
}
|
||||
|
||||
// file extensions that can be edited
|
||||
public static List<string> EditedExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.edited-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.EditableExtensions(); }
|
||||
}
|
||||
|
||||
// file extensions that can be converted
|
||||
public static List<string> ConvertExts
|
||||
{
|
||||
get { return (WebConfigurationManager.AppSettings["files.docservice.convert-docs"] ?? "").Split(new char[] { '|', ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); }
|
||||
get { return FormatManager.ConvertibleExtensions(); }
|
||||
}
|
||||
|
||||
private static string _fileName;
|
||||
@ -284,9 +250,10 @@ namespace OnlineEditorsExample
|
||||
{
|
||||
var ext = Path.GetExtension(fileName).ToLower();
|
||||
|
||||
if (FileType.ExtsDocument.Contains(ext)) return "word"; // word for text document extensions
|
||||
if (FileType.ExtsSpreadsheet.Contains(ext)) return "cell"; // cell for spreadsheet extensions
|
||||
if (FileType.ExtsPresentation.Contains(ext)) return "slide"; // slide for presentation extensions
|
||||
if (FormatManager.PdfExtensions().Contains(ext)) return "pdf"; // pdf for pdf extensions
|
||||
if (FormatManager.DocumentExtensions().Contains(ext)) return "word"; // word for text document extensions
|
||||
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return "cell"; // cell for spreadsheet extensions
|
||||
if (FormatManager.PresentationExtensions().Contains(ext)) return "slide"; // slide for presentation extensions
|
||||
|
||||
return "word"; // the default document type is word
|
||||
}
|
||||
@ -471,7 +438,14 @@ namespace OnlineEditorsExample
|
||||
var lang = context.Request.Cookies.GetOrDefault("ulang", null);
|
||||
|
||||
var extension = (Path.GetExtension(_fileName).ToLower() ?? "").Trim('.');
|
||||
var internalExtension = "ooxml";
|
||||
string conversionExtension = "ooxml"; // set the default conversion extension as ooxml
|
||||
object fileExt;
|
||||
|
||||
// change the conversion extension if it was provided in the request body
|
||||
if (body.TryGetValue("fileExt", out fileExt) && !String.IsNullOrEmpty(fileExt.ToString()))
|
||||
{
|
||||
conversionExtension = fileExt.ToString();
|
||||
}
|
||||
|
||||
// check if the file with such an extension can be converted
|
||||
if (ConvertExts.Contains("." + extension))
|
||||
@ -488,7 +462,7 @@ namespace OnlineEditorsExample
|
||||
|
||||
// get the url and file type of the converted file
|
||||
Dictionary<string, string> newFileData;
|
||||
var result = ServiceConverter.GetConvertedData(fileUrl.ToString() , extension, internalExtension, key, true, out newFileData, filePass, lang);
|
||||
var result = ServiceConverter.GetConvertedData(fileUrl.ToString() , extension, conversionExtension, key, true, out newFileData, filePass, lang);
|
||||
if (result != 100)
|
||||
{
|
||||
return "{ \"step\" : \"" + result + "\", \"filename\" : \"" + _fileName + "\"}";
|
||||
@ -538,7 +512,12 @@ namespace OnlineEditorsExample
|
||||
// get the correct file name if such a name already exists
|
||||
public static string GetCorrectName(string fileName, string userAddress = null)
|
||||
{
|
||||
int maxName;
|
||||
int.TryParse(WebConfigurationManager.AppSettings["filename-max"], out maxName);
|
||||
var baseName = Path.GetFileNameWithoutExtension(fileName); // get file name without extension
|
||||
if (baseName.Length > maxName){
|
||||
baseName = baseName.Substring(0, maxName) + "[...]";
|
||||
}
|
||||
var ext = Path.GetExtension(fileName).ToLower(); // get file extension
|
||||
var name = baseName + ext; // get full file name
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<title>ONLYOFFICE</title>
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -86,7 +86,7 @@
|
||||
|
||||
// the user is trying to switch the document from the viewing into the editing mode
|
||||
var onRequestEditRights = function () {
|
||||
location.href = location.href.replace(RegExp("editorsMode=view\&?", "i"), "");
|
||||
location.href = location.href.replace(RegExp("editorsMode=\\w+\&?", "i"), "") + "&editorsMode=edit";
|
||||
};
|
||||
|
||||
// an error or some other specific event occurs
|
||||
@ -126,7 +126,7 @@
|
||||
|
||||
// the meta information of the document is changed via the meta command
|
||||
var onMetaChange = function (event) {
|
||||
if (event.data.favorite) {
|
||||
if (event.data.favorite !== undefined) {
|
||||
var favorite = !!event.data.favorite;
|
||||
var title = document.title.replace(/^\☆/g, "");
|
||||
document.title = (favorite ? "☆" : "") + title;
|
||||
@ -194,19 +194,80 @@
|
||||
}
|
||||
};
|
||||
|
||||
var onRequestReferenceData = function (event) { // user refresh external data source
|
||||
var onRequestOpen = function (event) { // user open external data source
|
||||
innerAlert("onRequestOpen");
|
||||
var windowName = event.data.windowName;
|
||||
|
||||
event.data.directUrl = !!config.document.directUrl;
|
||||
requestReference(event.data, function (data) {
|
||||
if (data.error) {
|
||||
var winEditor = window.open("", windowName);
|
||||
winEditor.close();
|
||||
innerAlert(data.error, true);
|
||||
return;
|
||||
}
|
||||
|
||||
var link = data.link;
|
||||
window.open(link, windowName);
|
||||
});
|
||||
};
|
||||
|
||||
var onRequestReferenceData = function (event) { // user refresh external data source
|
||||
innerAlert("onRequestReferenceData");
|
||||
|
||||
requestReference(event.data, function (data) {
|
||||
docEditor.setReferenceData(data);
|
||||
});
|
||||
};
|
||||
|
||||
var requestReference = function (data, callback) {
|
||||
innerAlert(data);
|
||||
|
||||
data.directUrl = !!config.document.directUrl;
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "webeditor.ashx?type=reference");
|
||||
xhr.setRequestHeader("Content-Type", "application/json");
|
||||
xhr.send(JSON.stringify(event.data));
|
||||
xhr.send(JSON.stringify(data));
|
||||
xhr.onload = function () {
|
||||
console.log(xhr.responseText);
|
||||
docEditor.setReferenceData(JSON.parse(xhr.responseText));
|
||||
callback(JSON.parse(xhr.responseText));
|
||||
}
|
||||
};
|
||||
|
||||
var onRequestUsers = function (event) {
|
||||
if (event && event.data){
|
||||
var c = event.data.c;
|
||||
}
|
||||
switch (c) {
|
||||
case "info":
|
||||
users = [];
|
||||
var allUsers = <%= UsersInfo %>;
|
||||
for (var i = 0; i < event.data.id.length; i++) {
|
||||
for (var j = 0; j < allUsers.length; j++) {
|
||||
if (allUsers[j].id == event.data.id[i]) {
|
||||
users.push(allUsers[j]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "protect":
|
||||
var users = <%= UsersForProtect %>;
|
||||
break;
|
||||
default:
|
||||
users = <%= UsersForMentions %>;
|
||||
}
|
||||
docEditor.setUsers({
|
||||
"c": c,
|
||||
"users": users,
|
||||
});
|
||||
};
|
||||
|
||||
var onRequestSendNotify = function (event) {
|
||||
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
|
||||
var data = JSON.stringify(event.data);
|
||||
innerAlert("onRequestSendNotify: " + data);
|
||||
};
|
||||
|
||||
config = <%= DocConfig %>;
|
||||
|
||||
config.width = "100%";
|
||||
@ -249,60 +310,46 @@
|
||||
docEditor.setHistoryData(JSON.parse(xhr.responseText)); // send the link to the document for viewing the version history
|
||||
}
|
||||
};
|
||||
config.events['onRequestHistoryClose'] = function () { // the user is trying to go back to the document from viewing the document version history
|
||||
document.location.reload();
|
||||
};
|
||||
config.events['onRequestRestore'] = function (event) {
|
||||
var fileName = "<%= FileName %>";
|
||||
var version = event.data.version;
|
||||
var data = {
|
||||
fileName: fileName,
|
||||
version: version
|
||||
if (config.editorConfig.user.id !== "uid-3") {
|
||||
config.events['onRequestHistoryClose'] = function () { // the user is trying to go back to the document from viewing the document version history
|
||||
document.location.reload();
|
||||
};
|
||||
config.events['onRequestRestore'] = function (event) {
|
||||
var fileName = "<%= FileName %>";
|
||||
var version = event.data.version;
|
||||
var data = {
|
||||
fileName: fileName,
|
||||
version: version
|
||||
};
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "webeditor.ashx?type=restore&directUrl=" + !!config.document.directUrl);
|
||||
xhr.setRequestHeader('Content-Type', 'application/json');
|
||||
xhr.send(JSON.stringify(data));
|
||||
xhr.onload = function () {
|
||||
docEditor.refreshHistory(JSON.parse(xhr.responseText));
|
||||
}
|
||||
};
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", "webeditor.ashx?type=restore&directUrl=" + !!config.document.directUrl);
|
||||
xhr.setRequestHeader('Content-Type', 'application/json');
|
||||
xhr.send(JSON.stringify(data));
|
||||
xhr.onload = function () {
|
||||
docEditor.refreshHistory(JSON.parse(xhr.responseText));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// add mentions for not anonymous users
|
||||
<% if (!string.IsNullOrEmpty(UsersForMentions))
|
||||
{ %>
|
||||
config.events['onRequestUsers'] = function () {
|
||||
docEditor.setUsers({ // set a list of users to mention in the comments
|
||||
"users": <%= UsersForMentions %>
|
||||
});
|
||||
};
|
||||
config.events['onRequestUsers'] = onRequestUsers;
|
||||
<% } %>
|
||||
|
||||
config.events['onRequestSaveAs'] = onRequestSaveAs;
|
||||
// the user is mentioned in a comment
|
||||
config.events['onRequestSendNotify'] = function (event) {
|
||||
event.data.actionLink = replaceActionLink(location.href, JSON.stringify(event.data.actionLink));
|
||||
var data = JSON.stringify(event.data);
|
||||
innerAlert("onRequestSendNotify: " + data);
|
||||
};
|
||||
config.events['onRequestSendNotify'] = onRequestSendNotify;
|
||||
// prevent file renaming for anonymous users
|
||||
config.events['onRequestRename'] = onRequestRename;
|
||||
config.events['onRequestReferenceData'] = onRequestReferenceData;
|
||||
// prevent switch the document from the viewing into the editing mode for anonymous users
|
||||
config.events['onRequestEditRights'] = onRequestEditRights;
|
||||
config.events['onRequestOpen'] = onRequestOpen;
|
||||
}
|
||||
|
||||
if (config.editorConfig.createUrl) {
|
||||
config.events.onRequestSaveAs = onRequestSaveAs;
|
||||
};
|
||||
|
||||
var сonnectEditor = function () {
|
||||
if ((config.document.fileType === "docxf" || config.document.fileType === "oform")
|
||||
&& DocsAPI.DocEditor.version().split(".")[0] < 7) {
|
||||
innerAlert("Please update ONLYOFFICE Docs to version 7.0 to work on fillable forms online.");
|
||||
return;
|
||||
}
|
||||
|
||||
docEditor = new DocsAPI.DocEditor("iframeEditor", config);
|
||||
};
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -64,6 +64,8 @@ namespace OnlineEditorsExample
|
||||
protected string DocumentData { get; private set; }
|
||||
protected string DataSpreadsheet { get; private set; }
|
||||
protected string UsersForMentions { get; private set; }
|
||||
protected string UsersInfo { get; private set; }
|
||||
protected string UsersForProtect { get; private set; }
|
||||
protected string DocumentType { get { return _Default.DocumentType(FileName); } }
|
||||
|
||||
// get callback url
|
||||
@ -133,14 +135,14 @@ namespace OnlineEditorsExample
|
||||
{
|
||||
// create demo document of a specified file type
|
||||
Try(type, Request["sample"], Request);
|
||||
Response.Redirect("doceditor.aspx?fileID=" + HttpUtility.UrlEncode(FileName));
|
||||
Response.Redirect("doceditor.aspx?editorsMode=edit&fileID=" + HttpUtility.UrlEncode(FileName));
|
||||
}
|
||||
|
||||
// get file extension
|
||||
var ext = Path.GetExtension(FileName).ToLower();
|
||||
|
||||
var canFill = _Default.FillFormsExts.Contains(ext);
|
||||
// get editor mode or set the default one (edit)
|
||||
var editorsMode = Request.GetOrDefault("editorsMode", "edit");
|
||||
var editorsMode = Request.GetOrDefault("editorsMode", canFill ? "fillForms" : "edit");
|
||||
|
||||
var canEdit = _Default.EditedExts.Contains(ext); // check if this file can be edited
|
||||
var editorsType = Request.GetOrDefault("editorsType", "desktop");
|
||||
@ -148,11 +150,11 @@ namespace OnlineEditorsExample
|
||||
var id = Request.Cookies.GetOrDefault("uid", null);
|
||||
var user = Users.getUser(id); // get the user
|
||||
|
||||
if ((!canEdit && editorsMode.Equals("edit") || editorsMode.Equals("fillForms")) && _Default.FillFormsExts.Contains(ext)) {
|
||||
if ((!canEdit && editorsMode.Equals("edit") || editorsMode.Equals("fillForms")) && canFill) {
|
||||
editorsMode = "fillForms";
|
||||
canEdit = true;
|
||||
}
|
||||
var submitForm = editorsMode.Equals("fillForms") && id.Equals("uid-1") && false; // check if the Submit form button is displayed or hidden
|
||||
var submitForm = !editorsMode.Equals("view") && user.id.Equals("uid-1"); // check if the Submit form button is displayed or hidden
|
||||
var mode = canEdit && editorsMode != "view" ? "edit" : "view"; // get the editor opening mode (edit or view)
|
||||
|
||||
var jss = new JavaScriptSerializer();
|
||||
@ -223,7 +225,7 @@ namespace OnlineEditorsExample
|
||||
{ "download", !user.deniedPermissions.Contains("download") },
|
||||
{ "edit", canEdit && (editorsMode == "edit" || editorsMode =="view" || editorsMode == "filter" || editorsMode == "blockcontent") },
|
||||
{ "print", !user.deniedPermissions.Contains("print") },
|
||||
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "embedded" && editorsMode != "blockcontent" },
|
||||
{ "fillForms", editorsMode != "view" && editorsMode != "comment" && editorsMode != "blockcontent" },
|
||||
{ "modifyFilter", editorsMode != "filter" },
|
||||
{ "modifyContentControl", editorsMode != "blockcontent" },
|
||||
{ "review", canEdit && (editorsMode == "edit" || editorsMode == "review") },
|
||||
@ -256,7 +258,8 @@ namespace OnlineEditorsExample
|
||||
{
|
||||
{ "id", !user.id.Equals("uid-0") ? user.id : null },
|
||||
{ "name", user.name },
|
||||
{ "group", user.group }
|
||||
{ "group", user.group },
|
||||
{ "image", user.avatar ? _Default.GetServerUrl(false) + "/App_Themes/images/"+ user.id + ".png" : null }
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -279,10 +282,12 @@ namespace OnlineEditorsExample
|
||||
{ "forcesave", false }, // adds the request for the forced file saving to the callback handler
|
||||
{ "submitForm", submitForm }, // if the Submit form button is displayed or not
|
||||
{
|
||||
"goback", new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
|
||||
"goback", user.goback != null ? new Dictionary<string, object> // settings for the Open file location menu button and upper right corner button
|
||||
{
|
||||
{ "url", _Default.GetServerUrl(false) + "default.aspx" } // the absolute URL to the website address which will be opened when clicking the Open file location menu button
|
||||
}
|
||||
{ "url", _Default.GetServerUrl(false) + "default.aspx" }, // the absolute URL to the website address which will be opened when clicking the Open file location menu button
|
||||
{ "text", user.goback.text },
|
||||
{ "blank", user.goback.blank }
|
||||
} : new Dictionary<string, object>{}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -317,6 +322,13 @@ namespace OnlineEditorsExample
|
||||
// get users for mentions
|
||||
List<Dictionary<string, object>> usersData = Users.getUsersForMentions(user.id);
|
||||
UsersForMentions = !user.id.Equals("uid-0") ? jss.Serialize(usersData) : null;
|
||||
|
||||
List<Dictionary<string, object>> usersInfo = Users.getUsersInfo(user.id);
|
||||
UsersInfo = jss.Serialize(usersData);
|
||||
|
||||
// get users for protect
|
||||
List<Dictionary<string, object>> usersProtectData = Users.getUsersForProtect(user.id);
|
||||
UsersForProtect = !user.id.Equals("uid-0") ? jss.Serialize(usersProtectData) : null;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
@ -328,17 +340,17 @@ namespace OnlineEditorsExample
|
||||
var InsertImageUrl = new UriBuilder(_Default.GetServerUrl(true));
|
||||
InsertImageUrl.Path = HttpRuntime.AppDomainAppVirtualPath
|
||||
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
|
||||
+ "App_Themes\\images\\logo.png";
|
||||
+ "App_Themes\\images\\logo.svg";
|
||||
|
||||
var DirectImageUrl = new UriBuilder(_Default.GetServerUrl(false));
|
||||
DirectImageUrl.Path = HttpRuntime.AppDomainAppVirtualPath
|
||||
+ (HttpRuntime.AppDomainAppVirtualPath.EndsWith("/") ? "" : "/")
|
||||
+ "App_Themes\\images\\logo.png";
|
||||
+ "App_Themes\\images\\logo.svg";
|
||||
|
||||
// create a logo config
|
||||
Dictionary<string, object> logoConfig = new Dictionary<string, object>
|
||||
{
|
||||
{ "fileType", "png"},
|
||||
{ "fileType", "svg"},
|
||||
{ "url", InsertImageUrl.ToString()}
|
||||
};
|
||||
|
||||
@ -477,14 +489,14 @@ namespace OnlineEditorsExample
|
||||
case "slide":
|
||||
ext = ".pptx"; // .pptx for slide document type
|
||||
break;
|
||||
case "docxf":
|
||||
ext = ".docxf";
|
||||
case "pdf":
|
||||
ext = ".pdf";
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
var demoName = (string.IsNullOrEmpty(sample) ? "new" : "sample") + ext; // create demo document name with the necessary extension
|
||||
var demoPath = "assets\\" + (string.IsNullOrEmpty(sample) ? "new\\" : "sample\\"); // and put this file into the assets directory
|
||||
var demoPath = "assets\\document-templates\\" + (string.IsNullOrEmpty(sample) ? "new\\" : "sample\\"); // and put this file into the assets directory
|
||||
|
||||
FileName = _Default.GetCorrectName(demoName); // get file name with an index if such a file name already exists
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -227,10 +227,14 @@ namespace ASC.Api.DocumentConverter
|
||||
private static void ProcessResponseError(int errorCode)
|
||||
{
|
||||
var errorMessage = string.Empty;
|
||||
const string errorMessageTemplate = "Error occurred in the ConvertService.ashx: {0}";
|
||||
const string errorMessageTemplate = "Error occurred in the ConvertService: {0}";
|
||||
|
||||
switch (errorCode)
|
||||
{
|
||||
case -9:
|
||||
// public const int c_nErrorConversionOutputFormatError = -9;
|
||||
errorMessage = String.Format(errorMessageTemplate, "Error conversion output format");
|
||||
break;
|
||||
case -8:
|
||||
// public const int c_nErrorFileVKey = -8;
|
||||
errorMessage = String.Format(errorMessageTemplate, "Error document VKey");
|
||||
|
||||
147
web/documentserver-example/csharp/Forgotten.aspx
Executable file
@ -0,0 +1,147 @@
|
||||
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Forgotten.aspx.cs" Inherits="OnlineEditorsExample.Forgotten" Title="ONLYOFFICE" %>
|
||||
|
||||
<%@ Import Namespace="System.IO" %>
|
||||
<%@ Import Namespace="OnlineEditorsExample" %>
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head runat="server">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width" />
|
||||
<meta name="server-version" content=<%= GetVersion() %> />
|
||||
<title>ONLYOFFICE</title>
|
||||
<!--
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
-->
|
||||
<link rel="icon" href="~/favicon.ico" type="image/x-icon" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Open+Sans:900,800,700,600,500,400,300&subset=latin,cyrillic-ext,cyrillic,latin-ext" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="app_themes/stylesheet.css" />
|
||||
<link rel="stylesheet" type="text/css" href="app_themes/media.css" />
|
||||
<link rel="stylesheet" type="text/css" href="app_themes/forgotten.css" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="app_themes/jquery-ui.css" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<form id="form1" runat="server">
|
||||
<header>
|
||||
<div class="center main-nav">
|
||||
<a href="./">
|
||||
<img src ="app_themes/images/logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</div>
|
||||
<menu class="responsive-nav">
|
||||
<li>
|
||||
<a href="#">
|
||||
<img src="app_themes/images/mobile-menu.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="./">
|
||||
<img src ="app_themes/images/mobile-logo.svg" alt="ONLYOFFICE" />
|
||||
</a>
|
||||
</li>
|
||||
</menu>
|
||||
</header>
|
||||
<div class="center main">
|
||||
<table class="table-main">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="left-panel section"></td>
|
||||
<td class="section">
|
||||
<div class="main-panel">
|
||||
<menu class="links">
|
||||
<li class="home-link" >
|
||||
<a href="./">
|
||||
<img src="app_themes/images/home.svg" alt="Home"/>
|
||||
</a>
|
||||
</li>
|
||||
<li class="active">
|
||||
<a href="/Forgotten.aspx">Forgotten files</a>
|
||||
</li>
|
||||
</menu>
|
||||
<div class="stored-list">
|
||||
<div class="storedHeader">
|
||||
<div class="storedHeaderText">
|
||||
<span class="header-list">Forgotten files</span>
|
||||
</div>
|
||||
</div>
|
||||
<table class="tableHeader" cellspacing="0" cellpadding="0" width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="tableHeaderCell">Filename</td>
|
||||
<td class="tableHeaderCell">Action</td>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<div class="scroll-table-body">
|
||||
<table cellspacing="0" cellpadding="0" width="100%">
|
||||
<tbody>
|
||||
<% foreach (var file in GetForgottenFiles()) { %>
|
||||
<tr class="tableRow" title="<%= file["key"] %>">
|
||||
<td>
|
||||
<a class="stored-edit <%= file["type"] %>" href="<%= file["url"] %>" target="_blank">
|
||||
<span><%= file["key"] %></span>
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="<%= file["url"] %>">
|
||||
<img class="icon-download" src="app_themes/images/download.svg" alt="Download" title="Download" /></a>
|
||||
<a class="delete-file" data="<%= file["key"] %>">
|
||||
<img class="icon-action" src="app_themes/images/delete.svg" alt="Delete" title="Delete" /></a>
|
||||
</td>
|
||||
</tr>
|
||||
<% } %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<footer>
|
||||
<div class="center">
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="http://api.onlyoffice.com/editors/howitworks" target="_blank">API Documentation</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="mailto:sales@onlyoffice.com">Submit your request</a>
|
||||
</td>
|
||||
<td class="copy">
|
||||
© Ascensio System SIA <%= DateTime.Now.Year.ToString() %>. All rights reserved.
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</footer>
|
||||
</form>
|
||||
|
||||
<script language="javascript" type="text/javascript" src="script/forgotten.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
97
web/documentserver-example/csharp/Forgotten.aspx.cs
Executable file
@ -0,0 +1,97 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Web.Configuration;
|
||||
using System.Web.UI;
|
||||
|
||||
namespace OnlineEditorsExample
|
||||
{
|
||||
public partial class Forgotten : Page
|
||||
{
|
||||
|
||||
//get server version
|
||||
public static string GetVersion()
|
||||
{
|
||||
return WebConfigurationManager.AppSettings["version"];
|
||||
}
|
||||
|
||||
private static bool? _ismono;
|
||||
|
||||
public static bool IsMono
|
||||
{
|
||||
get { return _ismono.HasValue ? _ismono.Value : (_ismono = (bool?)(Type.GetType("Mono.Runtime") != null)).Value; }
|
||||
}
|
||||
|
||||
// get the document type
|
||||
public static string DocumentType(string fileName)
|
||||
{
|
||||
var ext = Path.GetExtension(fileName).ToLower();
|
||||
|
||||
if (FormatManager.PdfExtensions().Contains(ext)) return "pdf"; // pdf for pdf extensions
|
||||
if (FormatManager.DocumentExtensions().Contains(ext)) return "word"; // word for text document extensions
|
||||
if (FormatManager.SpreadsheetExtensions().Contains(ext)) return "cell"; // cell for spreadsheet extensions
|
||||
if (FormatManager.PresentationExtensions().Contains(ext)) return "slide"; // slide for presentation extensions
|
||||
|
||||
return "word"; // the default document type is word
|
||||
}
|
||||
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"]))
|
||||
{
|
||||
Response.Clear();
|
||||
Response.StatusCode = 403;
|
||||
Response.End();
|
||||
}
|
||||
}
|
||||
|
||||
// fetch forgotten files from the document server
|
||||
public static List<Dictionary<string, string>> GetForgottenFiles()
|
||||
{
|
||||
var files = new List<Dictionary<string, string>>();
|
||||
|
||||
try
|
||||
{
|
||||
var response = TrackManager.commandRequest("getForgottenList", null);
|
||||
ArrayList keys = (ArrayList) response["keys"];
|
||||
|
||||
// fetch all the forgotten files from the document server
|
||||
foreach (string key in keys)
|
||||
{
|
||||
var file = new Dictionary<string, string>();
|
||||
var fileResult = TrackManager.commandRequest("getForgotten", key);
|
||||
file.Add("key", fileResult["key"].ToString());
|
||||
file.Add("url", fileResult["url"].ToString());
|
||||
file.Add("type", DocumentType(fileResult["url"].ToString()));
|
||||
|
||||
files.Add(file);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
return files;
|
||||
}
|
||||
}
|
||||
}
|
||||
24
web/documentserver-example/csharp/Forgotten.aspx.designer.cs
generated
Executable file
@ -0,0 +1,24 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace OnlineEditorsExample {
|
||||
|
||||
|
||||
public partial class Forgotten {
|
||||
|
||||
/// <summary>
|
||||
/// form1 control.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Auto-generated field.
|
||||
/// To modify move field declaration from designer file to code-behind file.
|
||||
/// </remarks>
|
||||
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
|
||||
}
|
||||
}
|
||||
206
web/documentserver-example/csharp/FormatManager.cs
Normal file
@ -0,0 +1,206 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace OnlineEditorsExample
|
||||
{
|
||||
public class Format
|
||||
{
|
||||
public string Name { get; }
|
||||
public string Type { get; }
|
||||
public List<string> Actions { get; }
|
||||
public List<string> Convert { get; }
|
||||
public List<string> Mime { get; }
|
||||
|
||||
public Format(string name, string type, List<string> actions, List<string> convert, List<string> mime)
|
||||
{
|
||||
Name = name;
|
||||
Type = type;
|
||||
Actions = actions;
|
||||
Convert = convert;
|
||||
Mime = mime;
|
||||
}
|
||||
|
||||
public string Extension()
|
||||
{
|
||||
return "." + Name;
|
||||
}
|
||||
}
|
||||
|
||||
public class FormatManager
|
||||
{
|
||||
private static List<Format> cachedFormats;
|
||||
|
||||
public static List<string> FillableExtensions()
|
||||
{
|
||||
return Fillable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Fillable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("fill"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> ViewableExtensions()
|
||||
{
|
||||
return Viewable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Viewable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("view"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> EditableExtensions()
|
||||
{
|
||||
return Editable()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Editable()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("edit") || format.Actions.Contains("lossy-edit"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> ConvertibleExtensions()
|
||||
{
|
||||
return Convertible()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Convertible()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Actions.Contains("auto-convert"))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> SpreadsheetExtensions()
|
||||
{
|
||||
return Spreadsheets()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Spreadsheets()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == "cell")
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> PresentationExtensions()
|
||||
{
|
||||
return Presentations()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Presentations()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == "slide")
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> DocumentExtensions()
|
||||
{
|
||||
return Documents()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Documents()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == "word")
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> PdfExtensions()
|
||||
{
|
||||
return Pdfs()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> Pdfs()
|
||||
{
|
||||
return All()
|
||||
.Where(format => format.Type == "pdf")
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<string> AllExtensions()
|
||||
{
|
||||
return All()
|
||||
.Select(format => format.Extension())
|
||||
.ToList();
|
||||
}
|
||||
|
||||
public static List<Format> All()
|
||||
{
|
||||
if (cachedFormats == null) {
|
||||
var path = GetPath();
|
||||
var lines = File.ReadLines(path, Encoding.UTF8);
|
||||
var contents = string.Join(Environment.NewLine, lines);
|
||||
var formats = JsonConvert.DeserializeObject<Format[]>(contents);
|
||||
cachedFormats = formats.ToList();
|
||||
}
|
||||
|
||||
return cachedFormats;
|
||||
}
|
||||
|
||||
private static string GetPath()
|
||||
{
|
||||
string path = Path.Combine(GetDirectory(), "onlyoffice-docs-formats.json");
|
||||
if (File.Exists(path))
|
||||
{
|
||||
return path;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new FileNotFoundException("The JSON file does not exist.");
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetDirectory()
|
||||
{
|
||||
string directory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "assets", "document-formats");
|
||||
return Path.GetFullPath(directory);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -77,6 +77,7 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="App_Themes\forgotten.css" />
|
||||
<Content Include="App_Themes\images\block-content.svg" />
|
||||
<Content Include="App_Themes\images\cell.ico" />
|
||||
<Content Include="App_Themes\images\close.svg" />
|
||||
@ -94,6 +95,7 @@
|
||||
<Content Include="App_Themes\images\file_xlsx.svg" />
|
||||
<Content Include="App_Themes\images\fill-forms.svg" />
|
||||
<Content Include="App_Themes\images\filter.svg" />
|
||||
<Content Include="App_Themes\images\home.svg" />
|
||||
<Content Include="App_Themes\images\icon_docx.svg" />
|
||||
<Content Include="App_Themes\images\icon_pptx.svg" />
|
||||
<Content Include="App_Themes\images\icon_xlsx.svg" />
|
||||
@ -104,10 +106,16 @@
|
||||
<Content Include="App_Themes\images\notdone.svg" />
|
||||
<Content Include="App_Themes\images\review.svg" />
|
||||
<Content Include="App_Themes\images\slide.ico" />
|
||||
<Content Include="App_Themes\images\uid-1.png" />
|
||||
<Content Include="App_Themes\images\uid-2.png" />
|
||||
<Content Include="App_Themes\images\word.ico" />
|
||||
<Content Include="App_Themes\media.css" />
|
||||
<Content Include="Forgotten.aspx" />
|
||||
<Content Include="LICENSE" />
|
||||
<Content Include="licenses\jquery.license" />
|
||||
<Content Include="script\forgotten.js" />
|
||||
<Content Include="script\formats.js" />
|
||||
<Content Include="script\jquery-3.6.4.min.js" />
|
||||
<Content Include="script\jquery-migrate-3.4.1.min.js" />
|
||||
<Content Include="Web.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
@ -119,6 +127,13 @@
|
||||
<DependentUpon>DocEditor.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="DocumentConverter.cs" />
|
||||
<Compile Include="Forgotten.aspx.cs">
|
||||
<DependentUpon>Forgotten.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Forgotten.aspx.designer.cs">
|
||||
<DependentUpon>Forgotten.aspx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="FormatManager.cs" />
|
||||
<Compile Include="JwtManager.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Default.aspx.cs">
|
||||
@ -144,11 +159,9 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="App_Themes\images\loader16.gif" />
|
||||
<Content Include="App_Themes\images\logo.png" />
|
||||
<Content Include="App_Themes\jquery-ui.css" />
|
||||
<Content Include="App_Themes\stylesheet.css" />
|
||||
<Content Include="DocEditor.aspx" />
|
||||
<Content Include="script\jquery-1.9.0.min.js" />
|
||||
<Content Include="script\jquery-ui.min.js" />
|
||||
<Content Include="script\jquery.blockUI.js" />
|
||||
<Content Include="script\jquery.dropdownToggle.js" />
|
||||
@ -158,17 +171,23 @@
|
||||
<Content Include="WebEditor.ashx" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="assets\AUTHORS.md" />
|
||||
<Content Include="assets\LICENSE" />
|
||||
<Content Include="assets\new\new.docx" />
|
||||
<Content Include="assets\new\new.docxf" />
|
||||
<Content Include="assets\new\new.pptx" />
|
||||
<Content Include="assets\new\new.xlsx" />
|
||||
<Content Include="assets\sample\csv.csv" />
|
||||
<Content Include="assets\sample\sample.docx" />
|
||||
<Content Include="assets\sample\sample.docxf" />
|
||||
<Content Include="assets\sample\sample.pptx" />
|
||||
<Content Include="assets\sample\sample.xlsx" />
|
||||
<Content Include="assets\document-formats\AUTHORS.md" />
|
||||
<Content Include="assets\document-formats\CHANGELOG.md" />
|
||||
<Content Include="assets\document-formats\LICENSE" />
|
||||
<Content Include="assets\document-formats\onlyoffice-docs-formats.json" />
|
||||
<Content Include="assets\document-formats\README.md" />
|
||||
<Content Include="assets\document-templates\AUTHORS.md" />
|
||||
<Content Include="assets\document-templates\LICENSE" />
|
||||
<Content Include="assets\document-templates\new\new.docx" />
|
||||
<Content Include="assets\document-templates\new\new.docxf" />
|
||||
<Content Include="assets\document-templates\new\new.pptx" />
|
||||
<Content Include="assets\document-templates\new\new.xlsx" />
|
||||
<Content Include="assets\document-templates\README.md" />
|
||||
<Content Include="assets\document-templates\sample\csv.csv" />
|
||||
<Content Include="assets\document-templates\sample\sample.docx" />
|
||||
<Content Include="assets\document-templates\sample\sample.docxf" />
|
||||
<Content Include="assets\document-templates\sample\sample.pptx" />
|
||||
<Content Include="assets\document-templates\sample\sample.xlsx" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
|
||||
@ -7,7 +7,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Ascensio System SIA")]
|
||||
[assembly: AssemblyProduct("OnlineEditorsExample")]
|
||||
[assembly: AssemblyCopyright("Ascensio System SIA 2023")]
|
||||
[assembly: AssemblyCopyright("Ascensio System SIA 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -258,6 +258,22 @@ namespace OnlineEditorsExample
|
||||
var action = jss.Deserialize<Dictionary<string, object>>(jss.Serialize(actions[0]));
|
||||
var user = action["userid"].ToString(); // get the user id
|
||||
DocEditor.CreateMeta(fileName, user, "Filling Form", userAddress); // create meta data for the forcesaved file
|
||||
|
||||
string formsDataUrl = fileData["formsdataurl"].ToString();
|
||||
|
||||
if (!string.IsNullOrEmpty(formsDataUrl))
|
||||
{
|
||||
string formsName = _Default.GetCorrectName(Path.GetFileNameWithoutExtension(fileName) + ".txt", userAddress);
|
||||
string formsPath = _Default.StoragePath(formsName, userAddress);
|
||||
|
||||
var bytesForms = DownloadFile(formsDataUrl);
|
||||
|
||||
SaveFile(bytesForms, formsPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Document editing service did not return formsDataUrl");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
@ -269,7 +285,7 @@ namespace OnlineEditorsExample
|
||||
}
|
||||
|
||||
// create a command request
|
||||
public static void commandRequest(string method, string key, object meta = null)
|
||||
public static Dictionary<string, object> commandRequest(string method, string key, object meta = null)
|
||||
{
|
||||
_Default.VerifySSL();
|
||||
|
||||
@ -332,6 +348,7 @@ namespace OnlineEditorsExample
|
||||
{
|
||||
throw new Exception(dataResponse);
|
||||
}
|
||||
return responseObj;
|
||||
}
|
||||
|
||||
private static void SaveFile(byte[] data, string path)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -30,7 +30,9 @@ namespace OnlineEditorsExample
|
||||
"Can perform all actions with comments",
|
||||
"The file favorite state is undefined",
|
||||
"Can create files from templates using data from the editor",
|
||||
"Can see the information about all users"
|
||||
"Can see the information about all users",
|
||||
"Has an avatar",
|
||||
"Can submit forms"
|
||||
};
|
||||
|
||||
static List<string> descr_user_2 = new List<string>()
|
||||
@ -40,7 +42,9 @@ namespace OnlineEditorsExample
|
||||
"Can view comments, edit his own comments and comments left by users with no group. Can remove his own comments only",
|
||||
"This file is marked as favorite",
|
||||
"Can create new files from the editor",
|
||||
"Can see the information about users from Group2 and users who don’t belong to any group"
|
||||
"Can see the information about users from Group2 and users who don’t belong to any group",
|
||||
"Has an avatar",
|
||||
"Can’t submit forms"
|
||||
};
|
||||
|
||||
static List<string> descr_user_3 = new List<string>()
|
||||
@ -53,7 +57,10 @@ namespace OnlineEditorsExample
|
||||
"Can’t download the file",
|
||||
"Can’t print the file",
|
||||
"Can create new files from the editor",
|
||||
"Can see the information about Group2 users"
|
||||
"Can see the information about Group2 users",
|
||||
"Can’t submit forms",
|
||||
"Can't close history",
|
||||
"Can't restore the file version"
|
||||
};
|
||||
|
||||
static List<string> descr_user_0 = new List<string>()
|
||||
@ -70,6 +77,7 @@ namespace OnlineEditorsExample
|
||||
"Can't view chat",
|
||||
"Can't protect file",
|
||||
"View file without collaboration",
|
||||
"Can’t submit forms"
|
||||
};
|
||||
|
||||
private static List<User> users = new List<User>() {
|
||||
@ -84,7 +92,9 @@ namespace OnlineEditorsExample
|
||||
null,
|
||||
new List<string>(),
|
||||
descr_user_1,
|
||||
true
|
||||
true,
|
||||
true,
|
||||
new Goback(null, false)
|
||||
),
|
||||
new User(
|
||||
"uid-2",
|
||||
@ -102,12 +112,14 @@ namespace OnlineEditorsExample
|
||||
true,
|
||||
new List<string>(),
|
||||
descr_user_2,
|
||||
false
|
||||
false,
|
||||
true,
|
||||
new Goback("Go to Documents",null)
|
||||
),
|
||||
new User(
|
||||
"uid-3",
|
||||
"Hamish Mitchell",
|
||||
"mitchell@example.com",
|
||||
null,
|
||||
"group-3",
|
||||
new List<string>() { "group-2" },
|
||||
new Dictionary<string,object>()
|
||||
@ -120,7 +132,9 @@ namespace OnlineEditorsExample
|
||||
false,
|
||||
new List<string>() { "copy", "download", "print" },
|
||||
descr_user_3,
|
||||
false
|
||||
false,
|
||||
false,
|
||||
null
|
||||
),
|
||||
new User(
|
||||
"uid-0",
|
||||
@ -133,7 +147,9 @@ namespace OnlineEditorsExample
|
||||
null,
|
||||
new List<string>() { "protect" },
|
||||
descr_user_0,
|
||||
false
|
||||
false,
|
||||
false,
|
||||
null
|
||||
)
|
||||
};
|
||||
|
||||
@ -171,6 +187,44 @@ namespace OnlineEditorsExample
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
|
||||
public static List<Dictionary<string, object>> getUsersInfo(string id)
|
||||
{
|
||||
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
|
||||
if(id != "uid-0"){
|
||||
foreach (User user in users)
|
||||
{
|
||||
usersData.Add(new Dictionary<string, object>()
|
||||
{
|
||||
{"id", user.id},
|
||||
{"name", user.name },
|
||||
{"email", user.email },
|
||||
{"image", user.avatar ? _Default.GetServerUrl(false) + "/App_Themes/images/"+ user.id + ".png" : null }
|
||||
});
|
||||
}
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
|
||||
// get a list of users with their names and emails for protect
|
||||
public static List<Dictionary<string, object>> getUsersForProtect(string id)
|
||||
{
|
||||
List<Dictionary<string, object>> usersData = new List<Dictionary<string, object>>();
|
||||
|
||||
foreach (User user in users)
|
||||
{
|
||||
if (!user.id.Equals(id) && user.name != null)
|
||||
{
|
||||
usersData.Add(new Dictionary<string, object>()
|
||||
{
|
||||
{"name", user.name },
|
||||
{"email", user.email },
|
||||
{"id", user.id}
|
||||
});
|
||||
}
|
||||
}
|
||||
return usersData;
|
||||
}
|
||||
}
|
||||
|
||||
public class User
|
||||
@ -186,8 +240,10 @@ namespace OnlineEditorsExample
|
||||
public List<string> descriptions;
|
||||
public bool templates;
|
||||
public List<string> userInfoGroups;
|
||||
public bool avatar;
|
||||
public Goback goback;
|
||||
|
||||
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates)
|
||||
public User(string id, string name, string email, string group, List<string> reviewGroups, Dictionary<string, object> commentGroups, List<string> userInfoGroups, bool? favorite, List<string> deniedPermissions, List<string> descriptions, bool templates, bool avatar, Goback goback)
|
||||
{
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
@ -200,6 +256,22 @@ namespace OnlineEditorsExample
|
||||
this.descriptions = descriptions;
|
||||
this.templates = templates;
|
||||
this.userInfoGroups = userInfoGroups;
|
||||
this.avatar = avatar;
|
||||
this.goback = goback;
|
||||
}
|
||||
}
|
||||
|
||||
public class Goback
|
||||
{
|
||||
public string text;
|
||||
public bool? blank;
|
||||
|
||||
public Goback(){}
|
||||
|
||||
public Goback(string text, bool? blank)
|
||||
{
|
||||
this.text = text;
|
||||
this.blank = blank;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/**
|
||||
*
|
||||
* (c) Copyright Ascensio System SIA 2023
|
||||
* (c) Copyright Ascensio System SIA 2024
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -29,6 +29,7 @@ using System.Net;
|
||||
using System.Collections;
|
||||
using System.Net.Sockets;
|
||||
using ASC.Api.DocumentConverter;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace OnlineEditorsExample
|
||||
{
|
||||
@ -68,6 +69,9 @@ namespace OnlineEditorsExample
|
||||
case "remove":
|
||||
Remove(context);
|
||||
break;
|
||||
case "removeforgotten":
|
||||
RemoveForgotten(context);
|
||||
break;
|
||||
case "assets":
|
||||
Assets(context);
|
||||
break;
|
||||
@ -86,6 +90,9 @@ namespace OnlineEditorsExample
|
||||
case "reference":
|
||||
Reference(context);
|
||||
break;
|
||||
case "formats":
|
||||
Formats(context);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -221,12 +228,22 @@ namespace OnlineEditorsExample
|
||||
context.Response.ContentType = "text/plain";
|
||||
try
|
||||
{
|
||||
var fileName = Path.GetFileName(context.Request["fileName"]);
|
||||
var path = _Default.StoragePath(fileName, HttpUtility.UrlEncode(_Default.CurUserHostAddress(HttpContext.Current.Request.UserHostAddress)));
|
||||
var histDir = _Default.HistoryDir(path);
|
||||
string fileName = context.Request["fileName"];
|
||||
string userAddress = HttpUtility.UrlEncode(_Default.CurUserHostAddress(HttpContext.Current.Request.UserHostAddress));
|
||||
|
||||
if (File.Exists(path)) File.Delete(path); // delete file
|
||||
if (Directory.Exists(histDir)) Directory.Delete(histDir, true); // delete file history
|
||||
if (!String.IsNullOrEmpty(fileName))
|
||||
{
|
||||
fileName = Path.GetFileName(fileName);
|
||||
var path = _Default.StoragePath(fileName, userAddress);
|
||||
var histDir = _Default.HistoryDir(path);
|
||||
|
||||
if (File.Exists(path)) File.Delete(path); // delete file
|
||||
if (Directory.Exists(histDir)) Directory.Delete(histDir, true); // delete file history
|
||||
} else
|
||||
{
|
||||
string userDir = _Default.StoragePath("", userAddress);
|
||||
if (Directory.Exists(userDir)) Directory.Delete(userDir, true); // delete the user's directory
|
||||
}
|
||||
|
||||
context.Response.Write("{ \"success\": true }");
|
||||
}
|
||||
@ -275,7 +292,7 @@ namespace OnlineEditorsExample
|
||||
private static void Assets(HttpContext context)
|
||||
{
|
||||
var fileName = Path.GetFileName(context.Request["filename"]);
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
|
||||
download(filePath, context);
|
||||
}
|
||||
|
||||
@ -283,7 +300,7 @@ namespace OnlineEditorsExample
|
||||
private static void GetCsv(HttpContext context)
|
||||
{
|
||||
var fileName = "csv.csv";
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/sample/" + fileName;
|
||||
var filePath = HttpRuntime.AppDomainAppPath + "assets/document-templates/sample/" + fileName;
|
||||
download(filePath, context);
|
||||
}
|
||||
|
||||
@ -622,6 +639,27 @@ namespace OnlineEditorsExample
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName == "" && body.ContainsKey("link"))
|
||||
{
|
||||
string link = body["link"].ToString();
|
||||
if (!link.Contains(_Default.GetServerUrl(false)))
|
||||
{
|
||||
context.Response.Write(jss.Serialize(new Dictionary<string, string>() {
|
||||
{ "url", link },
|
||||
{ "directUrl", link }
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
Uri linkUri = new Uri(link);
|
||||
fileName = HttpUtility.ParseQueryString(linkUri.Query).Get("fileID");
|
||||
if (string.IsNullOrEmpty(fileName) || !File.Exists(_Default.StoragePath(fileName, null)))
|
||||
{
|
||||
context.Response.Write("{ \"error\": \"File is not exist\"}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (fileName == "")
|
||||
{
|
||||
try
|
||||
@ -665,7 +703,8 @@ namespace OnlineEditorsExample
|
||||
{"instanceId", _Default.GetServerUrl(false) }
|
||||
}
|
||||
},
|
||||
{ "path", fileName }
|
||||
{ "path", fileName },
|
||||
{ "link", _Default.GetServerUrl(false) + "doceditor.aspx?fileID=" + fileName }
|
||||
};
|
||||
|
||||
if (JwtManager.Enabled)
|
||||
@ -755,5 +794,50 @@ namespace OnlineEditorsExample
|
||||
+ userAddress;
|
||||
return fileUrl.ToString();
|
||||
}
|
||||
|
||||
// return all the supported formats
|
||||
private static void Formats(HttpContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
Dictionary<string, object> data = new Dictionary<string, object>
|
||||
{
|
||||
{ "formats", FormatManager.All() }
|
||||
};
|
||||
context.Response.ContentType = "application/json";
|
||||
var jss = new JavaScriptSerializer();
|
||||
|
||||
context.Response.Write(jss.Serialize(data));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
|
||||
}
|
||||
}
|
||||
|
||||
// delete a forgotten file from the document server
|
||||
private static void RemoveForgotten(HttpContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!bool.Parse(WebConfigurationManager.AppSettings["enable-forgotten"]))
|
||||
{
|
||||
throw new HttpException(403, "The forgotten page is disabled");
|
||||
}
|
||||
|
||||
string filename = context.Request["filename"];
|
||||
|
||||
if (!String.IsNullOrEmpty(filename))
|
||||
{
|
||||
TrackManager.commandRequest("deleteForgotten", filename);
|
||||
}
|
||||
|
||||
context.Response.StatusCode = 204;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
context.Response.Write("{ \"error\": \"" + e.Message + "\"}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
19
web/documentserver-example/csharp/script/forgotten.js
Executable file
@ -0,0 +1,19 @@
|
||||
function deleteFile(event) {
|
||||
let filename = event.currentTarget.getAttribute("data");
|
||||
filename = encodeURIComponent(filename);
|
||||
let url = `webeditor.ashx?type=removeforgotten&filename=${filename}`;
|
||||
|
||||
fetch(url, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
}
|
||||
}).then(result => {
|
||||
if (result.status == 204) {
|
||||
document.location.reload(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll('.delete-file').forEach(el => {
|
||||
el.addEventListener('click', deleteFile);
|
||||
});
|
||||