Compare commits
1076 Commits
17.0
...
cetmix_tow
| Author | SHA1 | Date | |
|---|---|---|---|
| 236b4a6227 | |||
| 93be36fb52 | |||
| 412f99f6a1 | |||
| a00f32e12f | |||
| 155436e103 | |||
| c43c7035a7 | |||
| a68656e1d5 | |||
| 65a7419e30 | |||
| d334b0c87b | |||
| 4826cd422e | |||
| 0f8a0bddba | |||
| 155faf8f8b | |||
| b8e8b0d989 | |||
| 8f8eec47a9 | |||
| c0767d1041 | |||
| 4bb470d291 | |||
| 7f4f78e750 | |||
| 6640a61437 | |||
| 0e7e46d0bb | |||
| 367f45a9b3 | |||
| 1d4e56cbd9 | |||
| 4e07525d10 | |||
| f5d6ad46c4 | |||
| cc8804103b | |||
| f7f24085cd | |||
| 097cf223ec | |||
| 8c3381f41b | |||
| 05a553a8fb | |||
| e71e1e04f4 | |||
| cc614c3ecf | |||
| 49feadbeb9 | |||
| 66d1bf5e47 | |||
| 7d39b690ec | |||
| 48c79615fe | |||
| 55dac4ca23 | |||
| a861002926 | |||
| 462f134278 | |||
| 1a42ca3cb1 | |||
| f5574ed238 | |||
| 3f00653bb2 | |||
| 505f69fb27 | |||
| 85ff0c5741 | |||
| b91b95bccd | |||
| 984be00635 | |||
| 01fd85aec0 | |||
| 6aa60f1bc3 | |||
| 55bad508da | |||
| 99ec962ca3 | |||
| d4b094937a | |||
| 19e36c1a35 | |||
| ce15caaa45 | |||
| 315e1bd1e7 | |||
| ff8d274a38 | |||
| ab2c9cddae | |||
| 16dc380c53 | |||
| 4b5170e8b7 | |||
| c7912ec5a6 | |||
| 090f0099c0 | |||
| ed7a1d93ba | |||
| cbf850a987 | |||
| 877cbcdd6b | |||
| 44e10c9212 | |||
| a2742e95ec | |||
| 9105818e3a | |||
| f06a374569 | |||
| 1c38931430 | |||
| fa92ab9ba8 | |||
| 4b56acc480 | |||
| f3cb0587f5 | |||
| 3e756c774f | |||
| e8fe926dbb | |||
| b2a168bd06 | |||
| 4628821451 | |||
| ab108c0437 | |||
| 5d9fe7b1f3 | |||
| 1b3bf2d301 | |||
| 017d7883d3 | |||
| 00439eac6e | |||
| d5b31de87e | |||
| f9a6b56c81 | |||
| 123239031f | |||
| 7f65dc9a92 | |||
| 25c345f665 | |||
| 2c2058e07b | |||
| f628de0c15 | |||
| 998d97da45 | |||
| 7a6f12082b | |||
|
|
9bb80002c8 | ||
| 2cf3b5185d | |||
| 9214b650ae | |||
| e6027c710b | |||
| 7a40f423d4 | |||
| 9966aa4ffa | |||
| 7c90e7bee2 | |||
| be3a699471 | |||
| a68f5ed5da | |||
| 3a4d546c10 | |||
| 386893e751 | |||
| e8cd94cc98 | |||
| bbf383a59f | |||
| eb41cf2557 | |||
| 7d71cd87fe | |||
| 886affc442 | |||
| 236c25028c | |||
| ca0996089d | |||
| 326bbe4eb1 | |||
| bd2de68a13 | |||
| 241485ada6 | |||
| 93925e7edb | |||
| 8be03b6213 | |||
| f8be9708f2 | |||
| 43f1d3a460 | |||
| 95ab9b7b07 | |||
| c4dec5820f | |||
| cf8020a374 | |||
| 8b2b00309b | |||
| 43c386dd0f | |||
| 94e68bf101 | |||
| c6fcbd4e88 | |||
| 95ec10c4cd | |||
| 8cde5f5b85 | |||
| 92daedbcfe | |||
| 59af83f001 | |||
| 68ca5feaec | |||
| d379066f8d | |||
| 50f45a25f6 | |||
| 4f1b44f859 | |||
| 63cb075ebe | |||
| 3bc89980fb | |||
| a30f10f463 | |||
| a3f387f59d | |||
| 0496b94742 | |||
| eeea0bde1d | |||
| 19a63eac0c | |||
| ff42b73982 | |||
| ac9207b0c6 | |||
| 7dadc5938a | |||
| 88fb907a24 | |||
| a349d97184 | |||
| 2eee80609f | |||
| fcb747f2c9 | |||
| 826194b88f | |||
| 303d179c1a | |||
| b309b6f244 | |||
| ee0ef6b69d | |||
| 121fcd2639 | |||
| 5cecb3364e | |||
| 1e2909808a | |||
| b8658d0fed | |||
| ea586f0019 | |||
| 4219a55576 | |||
| 2d6197c181 | |||
| 049d8dc461 | |||
| 8f7afa25fc | |||
| 7c0c8cf62a | |||
| e0c9e3817f | |||
| 95894e0965 | |||
| 0fd426db38 | |||
| 7f38305cda | |||
| 9eb03938ba | |||
| 38b16543da | |||
| 3a6e036b1d | |||
| c28baccca8 | |||
| 2352fdfaab | |||
| fd93d95ef0 | |||
| 1ad508d029 | |||
| 80e2953742 | |||
| 8f2214eb37 | |||
| 105434392b | |||
| d77c0ec323 | |||
| ebc9c2da81 | |||
| b706079a96 | |||
| 1a3fb88ff0 | |||
| fe73ec564d | |||
| 38becb2347 | |||
| 9cc237dfcd | |||
| 59a0a18068 | |||
| 3cdcbd70c3 | |||
| 36f48cb3ef | |||
| 6e40ceba46 | |||
| 9ed9312f52 | |||
| 3bf88a3db2 | |||
| cd835868a4 | |||
| 3adbefa88a | |||
| 6192b3aff5 | |||
| b504a42afc | |||
| 60532fda2e | |||
| 4604622231 | |||
| f4e43a2f84 | |||
| c5c3887d97 | |||
| 8ce3697a6e | |||
| bbe37b34d9 | |||
| ae8c208c59 | |||
| 3811a9d7cd | |||
| 3eed4a9224 | |||
| 68b713a69a | |||
| af1be38c68 | |||
| 3780eaf1f2 | |||
| 1f23472908 | |||
| 5e71e0a98a | |||
| 5e665079f3 | |||
| b67d86ef4b | |||
| cf83815785 | |||
| 255a06a789 | |||
| 3153e06601 | |||
| 7e4c9dcd99 | |||
| 8e92de0c4e | |||
| eb58ac434c | |||
| 5aed68117b | |||
| b6c3a855a4 | |||
| cd4b7cd2e6 | |||
| cb1e060ebb | |||
| ccc9ef0644 | |||
| 03b1d2bd59 | |||
| 565ef8f0cc | |||
| ae52efe220 | |||
| 09576d37b4 | |||
| 3b556e385d | |||
| d24677fc8e | |||
| bc9c9bf125 | |||
| 953db1c18e | |||
| bb6408e1bb | |||
| f5ee80a075 | |||
| e2a1ef97cf | |||
| f7aa151993 | |||
| c8461e648d | |||
| 78f57a52e8 | |||
| 645bbb9e1f | |||
| 1c5b8f78e8 | |||
| b06be61868 | |||
| 22635fd1db | |||
| 502f3c276f | |||
| a29e7d3701 | |||
| 90a6de998c | |||
| 309834e218 | |||
| 36548b07b3 | |||
| a647db524a | |||
| 96392d7cab | |||
| 3c73cf7286 | |||
| 5128d56863 | |||
| ec366ca548 | |||
| eaaf033cd5 | |||
| 899eefb2b1 | |||
| 35c152c073 | |||
| 4db61b7221 | |||
| 56faad93d6 | |||
| b02021eeab | |||
| 0f8d4c52be | |||
| f6b23b2697 | |||
| 9c162c8c40 | |||
| 9ee9d2dc06 | |||
| f88873226d | |||
| e6ef101e11 | |||
| ace82b83f0 | |||
| c3b5ebd7bc | |||
| f52001bffa | |||
| 8289f0ec93 | |||
| 4c85b5da81 | |||
| 7bddb74ba7 | |||
| b088c69c2b | |||
| ffc66cfaa1 | |||
| 50705d8a20 | |||
| eb85e1f034 | |||
| c104fc8c43 | |||
| 12aaeebb69 | |||
| b8accd5199 | |||
| 36e718ae36 | |||
| fc67cb263f | |||
| d6bec900fe | |||
| db967ff6e3 | |||
| 9d6d07b2e1 | |||
| 1444a3064e | |||
| 0a2e334aee | |||
| 15d21d3ab5 | |||
| a4f565087c | |||
| 6a11883c7c | |||
| 1202892973 | |||
| d3e1cc28bc | |||
| 151246c614 | |||
| 5049ba6907 | |||
| f8b593bec4 | |||
| 682e48bb2b | |||
| c4ddcb8e92 | |||
| d992b45cdd | |||
| f89637d6e8 | |||
| a493701b6e | |||
| 77b6a4b2fc | |||
| 9d595b2565 | |||
| 812b64b18d | |||
| a6d4d64192 | |||
| 0f52520ee3 | |||
| 8a996f5083 | |||
| b4e0d93c28 | |||
| f54217e713 | |||
| ebb1399951 | |||
| f9d33713ab | |||
| 4af3a1e647 | |||
| af44da007b | |||
| 1d5a2ceed0 | |||
| 4f9d558cf4 | |||
| 8bdd6064ab | |||
| 76b43e0b65 | |||
| 3b80e2101c | |||
| 42653be822 | |||
| 717ce4756a | |||
| 5ac0c18619 | |||
| 79dd86e13f | |||
| 05b6f98a82 | |||
| 098ce63b26 | |||
| 254f6312b4 | |||
| 5dc4447ff3 | |||
| d77978d0c9 | |||
| c4df067894 | |||
| c210efa9a2 | |||
| 3dbf0baeb2 | |||
| 5903af189c | |||
| 507eab7847 | |||
| 0f5b16febc | |||
| 1b5342da13 | |||
| 9d2776f6ce | |||
| 716a6d735c | |||
| 5362b526e7 | |||
| 0586c40667 | |||
| 9e48c4e0dc | |||
| 569a853b3a | |||
| 74a3f434a4 | |||
| a6af9583df | |||
| 326900b3a7 | |||
| c4dfb0a886 | |||
| a5efdebe15 | |||
| cb84ce69be | |||
| 7e5354d5ad | |||
| 521d765b35 | |||
| 7fbaaf189b | |||
| 6a9182c820 | |||
| 90f7afa720 | |||
| 90c893ae66 | |||
| 8d55a7ee70 | |||
| f6e32ece58 | |||
| 162ad41852 | |||
| 8b89083a51 | |||
| 68c5b015e0 | |||
| 61e360ae9e | |||
| 50663c7700 | |||
| 4da1291a50 | |||
| 94df75a9bf | |||
| 5ea3184c5e | |||
| 099bb0dfd5 | |||
| e318c89788 | |||
| 1174604b05 | |||
| 364f37aa5a | |||
| bbb71840c1 | |||
| c2923e01e6 | |||
| 4131ae0adb | |||
| f16e0abf03 | |||
| 07adc2628c | |||
| a682b818d3 | |||
| b2a8c2dcde | |||
| 2314a8f6c2 | |||
| f2033e0408 | |||
| 38d4a641f1 | |||
| 8ca3561c1a | |||
| bf7158a6e8 | |||
| 6a92d586a4 | |||
| 2a93942be1 | |||
| e81e6f4ff1 | |||
| 5e4cf9723b | |||
| a6fb93b231 | |||
| a3022f8332 | |||
| af0b27d762 | |||
| d2a8d537f6 | |||
| 52d65dabba | |||
| cbd499b88f | |||
| d59aa0179a | |||
| bf61f4eb4f | |||
| 97352ac44d | |||
| eb0687da36 | |||
| ceea23aaaf | |||
| 802a5a8a1c | |||
| 2d24db2b08 | |||
| bfb1edac54 | |||
| b12ac35b65 | |||
| 8b881eba5b | |||
| b2317325e2 | |||
| a8e845cb8b | |||
| 14bd70a67c | |||
| 82cfb22c03 | |||
| 50cd192fd8 | |||
| 62a0a9b1bd | |||
| 88b9f087a1 | |||
| 55b5ad56c8 | |||
| 00d5145aa0 | |||
| 6161522a04 | |||
| abaabc4cc0 | |||
| 2686884335 | |||
| f41c8d4c6f | |||
| a9496bdbd2 | |||
| 5e634580c2 | |||
| 37b4590851 | |||
| 81e565fdec | |||
| b912c85da7 | |||
| 7ef63fa72d | |||
| 627c3e9ffa | |||
| 876b3f4a7d | |||
| f323562bbd | |||
| f98711ec66 | |||
| 8db97cf776 | |||
| f38452a52a | |||
| 03d392803f | |||
| 8b40cf2659 | |||
| 86cf1847f4 | |||
| 45d7ed8b73 | |||
| 0b7b196159 | |||
| 33ad700d61 | |||
| 7f8552981b | |||
| 5cc9d2512b | |||
| 6ab789e36d | |||
| f8109af6ce | |||
| 1bfc6ac3af | |||
| 548817116a | |||
| b2f712e6b6 | |||
| 93739ddaff | |||
| 1373305638 | |||
| 70a54d0787 | |||
| 40a164b1b0 | |||
| bc966d56b0 | |||
| 61e7953827 | |||
| 192e1a9dbc | |||
| 2fe3c98c53 | |||
| 5f3cca665d | |||
| 88d5b049ff | |||
| 4614cb31fb | |||
| 44d76bc4a1 | |||
| 353350476d | |||
| 76d63a2fe8 | |||
| cce75a5895 | |||
| 2409adec5e | |||
| f75a5247b5 | |||
| 8cfa1310d1 | |||
| 086b96cc39 | |||
| 908aa7e1da | |||
| b6218e6b07 | |||
| 3d868855ca | |||
| 7e7213f67b | |||
| f5afc7d31c | |||
| 72737afb61 | |||
| b39e81512e | |||
| 62fad98a12 | |||
| 98c4aa7358 | |||
| 1a3ee1d4de | |||
| be2facb1f1 | |||
| 97b4731ca6 | |||
| 83326bcaed | |||
| 09eda63698 | |||
| d0aaff2135 | |||
| 7bd0bd0989 | |||
| 94bd98ab65 | |||
| 25fa4c853b | |||
| 4b4581ff2e | |||
| e1ea01e59e | |||
| da4d5c2494 | |||
| 3713992eb3 | |||
| e1c8337464 | |||
| 6c81ab18c8 | |||
| f0085588b9 | |||
| 8fdb330a6c | |||
| fb7a94f8ae | |||
| e71e3822e0 | |||
| e289fb9145 | |||
| bf2a8c4010 | |||
| 5cc34775f3 | |||
| 7f75afbdba | |||
| 1390ec0c15 | |||
| 4e84600e7e | |||
| c0ea49872c | |||
| 0685e4cabe | |||
| 875a590978 | |||
| 98d8aeb011 | |||
| 2f9905210a | |||
| 41d56a304a | |||
| 55da1da7f3 | |||
| a65d315cda | |||
| 16e6c57a3f | |||
| 638a2df7c6 | |||
| 9b53282444 | |||
| 89d02b353b | |||
| c968cca4de | |||
| e163b0d99b | |||
| 4426a5abb6 | |||
| 8c8e527249 | |||
| f50c1865d5 | |||
| f5257dc7ab | |||
| 14315e0035 | |||
| e2fe62b379 | |||
| 1f9bea1264 | |||
| 08f1a4d3cb | |||
| be8a0ac9c3 | |||
| a383f11d2a | |||
| 91618edeec | |||
| b64f6da230 | |||
| ba4b26b175 | |||
| 525c919b3a | |||
| d7f6de08e9 | |||
| 0d20ab7aa8 | |||
| 231d59da7f | |||
| 4fef277751 | |||
| 7032e64dcb | |||
| 15481c11c0 | |||
| 5930f771e5 | |||
| 2290c90089 | |||
| eb28ba0f78 | |||
| 7df203efe8 | |||
| 766b1dd779 | |||
| e992a8ea3f | |||
| e3863de129 | |||
| bfed6bdcf4 | |||
| f4834218ce | |||
| e3e001ac5b | |||
| afc1985114 | |||
| f0c0fa15ac | |||
| 3bb17aa74a | |||
| 3887d3afd3 | |||
| ccf1ac8e77 | |||
| df84150f14 | |||
| fd4f3c89cf | |||
| 46fa14692c | |||
| 2d26b672bf | |||
| f908dd5acd | |||
| f50135b5c6 | |||
| 2be8fc95b7 | |||
| 736d4b40e0 | |||
| 7fa0a4c79a | |||
| 8881aeb2ca | |||
| 8fa1c29c59 | |||
| 318ef00817 | |||
| 3fcdf69f56 | |||
| e2785fff55 | |||
| e5adc46d44 | |||
| 6052fcbe7e | |||
| 268e7e9b23 | |||
| 53f93fe01b | |||
| 202cb09e2b | |||
| c29df047d2 | |||
| 8dc8a3d39b | |||
| 34a4c17e9b | |||
| ccb61bd1d9 | |||
| be89574d27 | |||
| e8a12c08d8 | |||
| 16a5812db0 | |||
| 366eeab65d | |||
| ce185f92e3 | |||
| 276dccf5fd | |||
| 4fc6c80352 | |||
| 016afe19f8 | |||
| 7295ad401c | |||
| 1eed0fbda0 | |||
| da449b9852 | |||
|
|
9a499aced7 | ||
| c3f2c4f522 | |||
| a356f71745 | |||
| 0a76509365 | |||
| 9083833444 | |||
| ed9dc11c4b | |||
| 1c2d483a46 | |||
| 1f073938d7 | |||
| e12133fff0 | |||
| 61d95f53d6 | |||
| ebd9d7c16f | |||
| 455a7192d3 | |||
| 4c8ec8ffa3 | |||
| 2beca515ca | |||
| e1c3544f09 | |||
| 242fc36fd0 | |||
| 4754df89b7 | |||
| e050040bae | |||
| 30deb10c27 | |||
| f2791efa4f | |||
| acc9748aa2 | |||
| b36fe277c0 | |||
| 0b07e80ecb | |||
| b448019f93 | |||
| a108daebd0 | |||
| 2c950b5a0a | |||
| 0ded373257 | |||
| 4ad6ffce26 | |||
| 265f8092e5 | |||
| 6735056551 | |||
| a70aae6404 | |||
| f7c2027d17 | |||
| 8f9c4f4ed9 | |||
| cd4fa9df4d | |||
| b776dea93e | |||
| 2d655e9822 | |||
| f1aef07115 | |||
| ceac54f2a8 | |||
| 8cd2d73dd1 | |||
| 4c8a85091e | |||
| 1d8e306a5b | |||
| ff76148774 | |||
| 263616cf66 | |||
| 5d8563cf5e | |||
| 3a8e7bb486 | |||
| dac924d260 | |||
| 2fec9bae57 | |||
| a3a0e7f1a9 | |||
| 57e4922aa4 | |||
| 5a86e951c9 | |||
| 07a2292b98 | |||
| 498ebf5b5e | |||
| 0c0a53fb80 | |||
| f13d08283f | |||
| 6776b72adf | |||
| fc0111f9af | |||
| 58ecb0871a | |||
| 5ab36dc181 | |||
| 9eb4e7eb59 | |||
| b73d178751 | |||
| aeb5997303 | |||
| b6be8f1f51 | |||
| 6e4ec0f188 | |||
| d84a9d95e3 | |||
| e85ead856e | |||
| d640f69b64 | |||
| 3a855c6905 | |||
| e5bc9f79bc | |||
| e4a9a645a1 | |||
| 7be7fc0d06 | |||
| 639c21ee64 | |||
| 83463f08fd | |||
| d62c41a4c0 | |||
| 5bc32a7b39 | |||
| b87f9f2f0f | |||
| ecb8f48fc7 | |||
| 453e861eb1 | |||
| 9d9ba90f65 | |||
| c0ec43dc15 | |||
| 8bf0f53a1f | |||
| b9935804d8 | |||
| e3cd173cae | |||
| 0b171536bd | |||
| 4df5459abb | |||
| 99c360c739 | |||
| 238f3a123f | |||
| 7635f192bc | |||
| 4be4c95126 | |||
| c7174e1aa0 | |||
| 038f113176 | |||
| e640b7dc00 | |||
| 69ee0e8a79 | |||
| 44f9bf1d9d | |||
| 528d049505 | |||
| d38fff270d | |||
| f47e6d77df | |||
| bcdb9f7100 | |||
| 79c3511ced | |||
| 77163b4017 | |||
| 52512ff961 | |||
| 8e37d624ff | |||
| 2b845fa110 | |||
| 09c730c852 | |||
| 9ea0b5ca1e | |||
| 3f7c12c4cb | |||
| 52212a4234 | |||
| aad83a6e45 | |||
| b15249a7cc | |||
| 971c0b6bb1 | |||
| c8259d3fae | |||
| c1c1591ffd | |||
| 1ceae80007 | |||
| 711c240058 | |||
| ed906caf54 | |||
| fa316c0948 | |||
| 64da73b835 | |||
| 51d27b362c | |||
| 11bf6134ec | |||
| e6fd3d1594 | |||
| 6c440b46d0 | |||
| 6f5049ff54 | |||
| 785da91996 | |||
| a59be21d5c | |||
| dcd8d31c0b | |||
| bbff9cd347 | |||
| c5433c7b44 | |||
| 52e3ae85ef | |||
| 6ee8d34a08 | |||
| fc845bf79a | |||
| aa3ea16a1b | |||
| 5d72ad53fb | |||
| d5a16b3baa | |||
| 4300c11cb1 | |||
| 611bf9a530 | |||
| f665a077cb | |||
| 62c2411818 | |||
| 1aeff8903c | |||
| 7a0fe4f363 | |||
| 6ebe68c8fc | |||
| 075a340056 | |||
| d764da736d | |||
| b9ee75209a | |||
| 389ffcbadb | |||
| 37ec61eab2 | |||
| a901150981 | |||
| d7e623d816 | |||
| 45e7dd2c6c | |||
| 25ca66a86b | |||
| a78cbd6583 | |||
| 09283bba61 | |||
| e738070b24 | |||
| 0c67e0d798 | |||
| 9e7f379923 | |||
| 93426fbae5 | |||
| f1b9101b13 | |||
| 33d3b02763 | |||
| 2a169afa62 | |||
| a2fc7b47c1 | |||
| c717460cea | |||
| a8f57858d8 | |||
| 3ab0e79386 | |||
| 236b78c33b | |||
| 18138fd178 | |||
| fa34dcb44e | |||
| f8a7e22755 | |||
| 5e7a05b949 | |||
| 676d1fd8c1 | |||
| 9a569b9af1 | |||
| bfda22756e | |||
| 237d692cd1 | |||
| 31b57b24f5 | |||
| ff8cc52e41 | |||
| f6d8bab742 | |||
| 1bd0a301dd | |||
| d7ac3f27e0 | |||
| adf18c04a9 | |||
| 150023c203 | |||
| 21bf17da38 | |||
| 54c3d037a0 | |||
| cc7c59f4fa | |||
| 491c5fa696 | |||
| cb1c08a52d | |||
| 7c414a48de | |||
| 0d03d8d956 | |||
| ee974eb8d1 | |||
| 5e17847c10 | |||
| 753ee2e4e3 | |||
| 2c73095fd6 | |||
| c31875dc95 | |||
| 39ac32de74 | |||
| 3a6f76212d | |||
| 89c5d6195a | |||
| a6c0f93af0 | |||
| f52cdfe12d | |||
| fe91357505 | |||
| e4c578f20a | |||
| d9734e17fb | |||
| 4cc3f94635 | |||
| 8ff4dd5b3c | |||
| 423b6acfde | |||
| ccf2ec0804 | |||
| 002f0bda6f | |||
| 753aee7fc5 | |||
| c96b8b5c64 | |||
| 821e088b8e | |||
| 3ea5965a99 | |||
| 5ce2821634 | |||
| 5d4b6ee4fc | |||
| 7399e63d70 | |||
| fc27945b4e | |||
| 2b98a8ca57 | |||
| d50103ca24 | |||
| 52a3aaec81 | |||
| 48d9f3af80 | |||
| 7575ca93ad | |||
| dcf7f0daa9 | |||
| ffe3f45168 | |||
| bd17bdabf9 | |||
| 118c993e31 | |||
| 33707afaaf | |||
| 5fc79cb304 | |||
| b595872bb3 | |||
| e50e55444c | |||
| 0f68d7e8f9 | |||
| f161ba7728 | |||
| fb2479c6fe | |||
| f8f75587c3 | |||
| 3cbf6b5144 | |||
| 48cf579779 | |||
| 5c5edd2106 | |||
| 4a4b2f7206 | |||
| e84cdd1a54 | |||
| 410eaab039 | |||
| 8b8dd4758f | |||
| 16dfa61d3d | |||
| cd0dcdb06b | |||
| 0bc76ebcfb | |||
| b86383444b | |||
| e788902689 | |||
| 2d0d90ba7e | |||
| c56cba7257 | |||
| 63623d0dc3 | |||
| 1a409eab82 | |||
| 135242d577 | |||
| aec96c5193 | |||
| a68eef6627 | |||
| 0ed1ee7bb0 | |||
| ccdde704c7 | |||
| f2803833a6 | |||
| 884df448f0 | |||
| a1cba28258 | |||
| eddb6db49e | |||
| 67267c20a3 | |||
| 547da816ad | |||
| ecf57118ba | |||
| 3681255837 | |||
| f97595108f | |||
| 7bf6c0aa4b | |||
| 9fb24cad21 | |||
| b036b9f480 | |||
| 2d677619f3 | |||
| 576e6edecc | |||
| 0819ee5593 | |||
| 7ca45462cf | |||
| 0e8399ae71 | |||
| cf42f5455d | |||
| 50536e5867 | |||
| e3c584c560 | |||
| c48e67db97 | |||
| fd8c6f50f2 | |||
| e09e6074c8 | |||
| c470e9603f | |||
| faf0882b3a | |||
| e96209ad14 | |||
| 1912047142 | |||
| 8011416ceb | |||
| 2d3f527e24 | |||
| aed221fa34 | |||
| 425d46b0ef | |||
| b3d43ad682 | |||
| 65af6a8437 | |||
| ac07f2e7df | |||
| 4d1c88b43b | |||
| 465720ccdd | |||
| 21fe8ed322 | |||
| 01d440de88 | |||
| aba0ce3a6d | |||
| 906217822f | |||
| 9e81d94e5d | |||
| 092f3b1026 | |||
| 6739cac57b | |||
| 2d69ab84ce | |||
| af3a8d4dbc | |||
| 0792585612 | |||
| ee798802e6 | |||
| 3f44bf0577 | |||
| eaedae0565 | |||
| 9c068d07c9 | |||
| 8abe88b2d3 | |||
| ece70df8fe | |||
| ecc375cf63 | |||
| d89a5b2e4b | |||
| d041586baf | |||
| 49472d32a1 | |||
| aa83b5c270 | |||
| 24bd37cd38 | |||
| a4e24baeb5 | |||
| f0512fdce3 | |||
| 101b6c9b74 | |||
| 9db3f91c28 | |||
| 94de4c07da | |||
| 67eedfddc4 | |||
| 829ec15b5b | |||
| e8bc314cfb | |||
| 85328a6e96 | |||
| 3af743ed1b | |||
| b3b67e7abf | |||
| f2d4464209 | |||
| 3fa52b6f32 | |||
| 01ad3e8a8a | |||
| fc4bbe2568 | |||
| d1a407c6b8 | |||
| a210ca3e17 | |||
| 276f4a5aa4 | |||
| 56b5e117f1 | |||
| 00c5630072 | |||
| f3a4594386 | |||
| ed335e5010 | |||
| cdd5dbb5ea | |||
| 0e51ca5bce | |||
| 0f24587641 | |||
| 5b1f74e263 | |||
| 0a2171ae91 | |||
| 09573a7cfc | |||
| 686c4f2698 | |||
| 9273950afc | |||
| add6fe3994 | |||
| 581efc0235 | |||
| b1d9b4810f | |||
| a868059124 | |||
| 2ceb788c2e | |||
| 3ca93dfc54 | |||
| e8315b207d | |||
| 3090536fc7 | |||
| c5034b43ab | |||
| 6b4b7939b0 | |||
| 99be7c765a | |||
| a018275ebf | |||
| fb9777247a | |||
| 1e8239c7e2 | |||
| 81b127648b | |||
| 4c5e3f2f28 | |||
| 9fb7d3ff42 | |||
| ac3093b5dc | |||
| 975d29fa31 | |||
| 94adb5f348 | |||
| fba8cc9acd | |||
| 0fb75fa95f | |||
| 840c4ac3a9 | |||
| 16613c86a7 | |||
| 0c43591378 | |||
| 9ea6ac8d24 | |||
| 394210c99b | |||
| 0a7c8c70b0 | |||
| 50cfffdb19 | |||
| 262f2ceef5 | |||
| 5377ca3d57 | |||
| 2fc48951c8 | |||
| b5308c583c | |||
| ffc4690cf5 | |||
| aace3488c5 | |||
| 9782ca679d | |||
| 258500d3f7 | |||
| 20a3a2d33d | |||
| 09b6d24303 | |||
| 244569004b | |||
| 773928cf47 | |||
| 0b60b46a40 | |||
| 4a4797e49d | |||
| a26a507d31 | |||
| 151578461e | |||
| c219e1c5e6 | |||
| 701190a853 | |||
| 4a5d224e26 | |||
| c948ed897f | |||
| 9f83c4003a | |||
| 60ad89af8d | |||
| f59c3ac6e4 | |||
| 25aae80175 | |||
| 8a784023df | |||
| d105b3086e | |||
| e68734af4d | |||
| 80aca5c42e | |||
| 91cc351b9f | |||
| 3727eff0a1 | |||
| 98e8f2c77f | |||
| d9cc0ef9d3 | |||
| 20e5e555f1 | |||
| 156a6a6cb6 | |||
| 2c57c4598c | |||
| 130678682c | |||
| ca706b0281 | |||
| 9ff2b454fb | |||
| 5362042060 | |||
| 59c05047e6 | |||
| dabc32defa | |||
| d0ba4497b8 | |||
| cbdbb2cb4f | |||
| 8090db41fd | |||
| e4b8bf49c6 | |||
| f91e4f7f47 | |||
| 2185ab4d96 | |||
| 8b55326dbd | |||
| 29de3846b7 | |||
| 781f6703f2 | |||
| 7901b11a6d | |||
| 136351e574 | |||
| 004fe34221 | |||
| dc15afe84c | |||
| 298b4baeae | |||
| efa72f8d96 | |||
| d5d8cca96e | |||
| 34676028f9 | |||
| 6639a57225 | |||
| e084da09e7 | |||
| 8afc6b5c10 | |||
| 28b558e0eb | |||
| 18d55d8ef9 | |||
| ded62cb3f1 | |||
| da00ab06c2 | |||
| 4021aeef49 | |||
| 3cf5653f0d | |||
| 779e44f63a | |||
| 17f8d7bb98 | |||
| 47e0d157a2 | |||
| bcfaf764a4 | |||
| cd38fe180c | |||
| 51b54d0dc6 | |||
| a452163d96 | |||
| 1457492697 | |||
| c7ce387900 | |||
| 7131dbd052 | |||
| 1a2c8df31e | |||
| d2d280c2e3 | |||
| 7480c912b5 | |||
| 307fb2c8a3 | |||
| 85dcab4226 | |||
| da7bb49726 | |||
| 17c5b9b811 | |||
| 458ca8b40c | |||
| 9bf906a371 | |||
| b1e7ce7277 | |||
| 0fb461e3df | |||
| fdb9083e95 | |||
| ab645f0fe9 | |||
| 290ce48514 | |||
| b6c35b9f76 | |||
| 5c90e911b0 | |||
| b63181ae6b | |||
| bc72822fe4 | |||
| 29d6e2157c | |||
| 6b851b5033 | |||
| cad2a32394 | |||
| b251ba9709 | |||
| 812fb1ff32 | |||
| 0e299769bb | |||
| 956fed6616 | |||
| ef982e5d22 | |||
| fe589090d7 | |||
| 6100570511 | |||
| c25370304e | |||
| 203d561a5d | |||
| 987367d1ca | |||
| f7523e073f | |||
| f42fd8a333 | |||
| bf39b6c79e | |||
| 33dbbb5178 | |||
| db79948886 | |||
| cf09b40b4a | |||
| fbc5aedf35 | |||
| 31c0f1566b | |||
| 16786404e1 | |||
| 050d68c0d1 | |||
| 9f807e8e1d | |||
| 851c2d0239 | |||
| f9ab417fdf | |||
| 6702e0714f | |||
| fa16558cda | |||
| 5328e0be5d | |||
| 1bd02406d4 | |||
| a4c34fb326 | |||
| 80a70b758d | |||
| 0a333efddb | |||
| a4cf1a2957 | |||
| 59e5709f28 | |||
| 1195eb23b1 | |||
| 69f00977ae | |||
| fc8b8b8a9a | |||
| 07a3160ed5 | |||
| 1496fbfa53 | |||
| 780593c0b6 | |||
| db891f43ce | |||
| 3357d9a86b | |||
| 43a7ca4b5e | |||
| c764a356ce | |||
| 4a881b9eaf | |||
| 76d70ea861 | |||
| 959a04e1cc | |||
| bf8fbcc9e3 | |||
| f9fe46154a | |||
| c97921b2ea | |||
| 95967f2f45 | |||
| 552c05599f | |||
| 837d110796 | |||
| fcc7e84300 | |||
| 9080bc85f2 | |||
| 512f1a8f4d | |||
| 4faa6b9af4 | |||
| 019ee02912 |
60
addons/cetmix_tower/README.rst
Normal file
@@ -0,0 +1,60 @@
|
||||
============
|
||||
Cetmix Tower
|
||||
============
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:ec1914ccdcdfd8bfa539b1c131e8b2c41946b9bf978d2a32d13ee89ab655cd65
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
|
||||
:target: https://github.com/cetmix/cetmix-tower/tree/16.0/cetmix_tower
|
||||
:alt: cetmix/cetmix-tower
|
||||
|
||||
|badge1| |badge2| |badge3|
|
||||
|
||||
This is a technical module that allows to get `Cetmix
|
||||
Tower <https://cetmix.com/tower>`__ modules from the `Odoo App
|
||||
Store <https://apps.odoo.com>`__.
|
||||
|
||||
It's designed to install all the `Cetmix
|
||||
Tower <https://cetmix.com/tower>`__ modules at once.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Cetmix
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/16.0/cetmix_tower>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute.
|
||||
0
addons/cetmix_tower/__init__.py
Normal file
22
addons/cetmix_tower/__manifest__.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright Cetmix OU
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
{
|
||||
"name": "Cetmix Tower",
|
||||
"summary": "Odoo SAAS Server Application Management",
|
||||
"version": "16.0.2.1.0",
|
||||
"development_status": "Beta",
|
||||
"category": "Productivity",
|
||||
"website": "https://tower.cetmix.com",
|
||||
"live_test_url": "https://tower.cetmix.com/download",
|
||||
"images": ["static/description/banner.png"],
|
||||
"author": "Cetmix",
|
||||
"license": "AGPL-3",
|
||||
"application": True,
|
||||
"installable": True,
|
||||
"depends": [
|
||||
"cetmix_tower_server",
|
||||
"cetmix_tower_server_queue",
|
||||
"cetmix_tower_git",
|
||||
"cetmix_tower_webhook",
|
||||
],
|
||||
}
|
||||
13
addons/cetmix_tower/i18n/cetmix_tower.pot
Normal file
@@ -0,0 +1,13 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
3
addons/cetmix_tower/pyproject.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
3
addons/cetmix_tower/readme/DESCRIPTION.md
Normal file
@@ -0,0 +1,3 @@
|
||||
This is a technical module that allows to get [Cetmix Tower](https://cetmix.com/tower) modules from the [Odoo App Store](https://apps.odoo.com).
|
||||
|
||||
It's designed to install all the [Cetmix Tower](https://cetmix.com/tower) modules at once.
|
||||
BIN
addons/cetmix_tower/static/description/banner.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
435
addons/cetmix_tower/static/description/cetmix.svg
Normal file
@@ -0,0 +1,435 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 756 322.5" style="enable-background:new 0 0 756 322.5;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st1{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:0.75;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M447.2,121.7c-2,1.6-4.7,2.9-8.3,3.9c-3.6,1-6.8,1.6-9.6,1.6c-10.9,0-19.5-2.8-25.8-8.3s-9.4-13.3-9.4-23.5
|
||||
V53.7h-11.8V35.6H394V14.7l23.5-4.2v25.1h16l0.2,18l-16.2,0.1v37.4c0,4.6,1.1,8.4,3.3,11.3c2.2,3,5.4,4.5,9.7,4.5
|
||||
c1.6,0,3.2-0.2,4.8-0.5c1.6-0.4,3.2-1,4.9-1.8L447.2,121.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M536.3,49.4c3.8-4.3,8.8-7.6,15-10.1c6.3-2.5,11.8-3.7,16.8-3.7c12,0,20.6,3.5,25.6,10.5
|
||||
c5.1,7.1,7.6,15.6,7.6,25.8v55.2h-23.9v-54c0-5.6-1.3-9.9-4-12.8s-6.6-4.5-11.6-4.5c-3.4,0-7,0.9-10.7,2.7s-7.2,3.9-10.3,6.2
|
||||
c0.1,1.2,0.2,2.4,0.4,3.7c0.1,1.2,0.2,2.4,0.2,3.7v55.2h-23.9V73.1c0-5.6-1.3-9.9-4-12.8s-6.5-4.5-11.4-4.5
|
||||
c-3.1,0-6.1,0.6-9.2,1.9c-3.1,1.3-6.1,2.9-8.9,4.8v64.7h-23.7V39l23.3-3v7c3-2,5-3,9.4-4.5c5.7-1.9,10.7-3,15.2-3
|
||||
c7,0,12.7,1.2,17.3,3.7C530.1,41.8,533.7,45.2,536.3,49.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M634.8,0c3.8,0,7,1.3,9.6,3.8c2.6,2.6,3.9,5.7,3.9,9.5s-1.3,6.9-3.9,9.5c-2.6,2.6-5.8,3.8-9.6,3.8
|
||||
c-3.7,0-6.8-1.3-9.3-3.8c-2.6-2.6-3.8-5.7-3.8-9.5s1.3-6.9,3.8-9.5C628.1,1.3,631.2,0,634.8,0z M646.9,36l-0.2,91.1H623L622.9,36
|
||||
H646.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M659.4,127.2l34.1-45.3l-32.8-45.8h25.8l21,29.9l21.9-29.9H756l-34.5,45.8l31.6,45.3H727l-20.5-28.4
|
||||
l-20.9,28.4H659.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M198.4,81.5c0-26.6,19.5-45.5,46.7-45.5c18,0,29,7.8,34.8,15.6l-15.1,14c-4.2-6.1-10.5-9.4-18.6-9.4
|
||||
c-14,0-23.9,10.1-23.9,25.2s9.9,25.4,23.9,25.4c8.1,0,14.4-3.6,18.6-9.4l15.1,13.8c-5.9,8.1-16.7,15.8-34.8,15.8
|
||||
C217.9,127.2,198.4,108.3,198.4,81.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M289.4,81.5c0-25.2,18.8-45.5,45.6-45.5c26.3,0,44.1,19.4,44.1,47.8v5.1h-65.5c1.5,10.9,10.4,20.1,25.3,20.1
|
||||
c7.5,0,17.8-3.2,23.5-8.7l10.3,14.7c-8.8,7.9-22.6,12-36.2,12C309.6,127.2,289.4,109.4,289.4,81.5z M334.8,54.2
|
||||
c-14.4,0-20.6,10.6-21.7,19.2h43.4C356,65.2,350.2,54.2,334.8,54.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M92.3,91.5c0.6,0.3,0.7,1,0.2,1.5c-3.1,2.8-6.6,5.2-10.3,7.1c-6.6,3.2-13.7,4.8-20.9,4.7
|
||||
c-7.2-0.3-14.2-2.2-20.3-5.7s-11.2-8.5-14.9-14.3s-5.8-12.5-6.4-19.3c-0.4-6.8,0.8-13.6,3.5-19.7c1.4-3,3.1-5.9,5.2-8.5
|
||||
s4.5-4.9,7.1-7c5.2-4,11.3-6.7,17.7-7.8C46.9,24,41,27.1,36.4,31.4c-2.4,2.1-4.5,4.5-6.2,7.1c-1.8,2.6-3.1,5.5-4.3,8.4
|
||||
c-2.1,5.8-2.7,12-1.9,18.1c0.9,6.1,3.3,11.7,6.8,16.6c3.6,4.8,8.3,8.7,13.6,11.2s11.1,3.6,16.9,3.4c5.8-0.3,11.3-2,16.2-4.9
|
||||
c1.9-1.2,3.7-2.5,5.4-4c0.3-0.2,0.7-0.3,1-0.1L92.3,91.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M110.3,107.7c0.4,0.4,0.3,1.1-0.1,1.5c-0.2,0.2-0.4,0.4-0.6,0.6c-2.6,2.3-5.4,4.5-8.3,6.4s-6,3.6-9.2,5
|
||||
s-6.5,2.6-9.8,3.5c-13.3,3.7-27.7,2.9-40.4-1.9s-23.8-13.5-31.3-24.7C3.2,86.8-0.4,73.5,0,60.3c0.5-13.1,5.2-26,13.1-36.1
|
||||
C21.2,14,32.3,6.5,44.5,3C56.8-0.6,70-0.2,81.8,4c5.9,2.1,11.4,5.1,16.3,8.9c5,3.7,9.3,8.3,12.7,13.2c-3.8-4.8-8.3-9.1-13.3-12.4
|
||||
S87,7.7,81.1,6c-11.5-3.4-24-2.9-35.3,1S24.9,18.4,18.3,28c-6.7,9.6-10.2,21.1-9.9,32.4c0.2,11.3,4.1,22.5,10.8,31.5
|
||||
c6.7,8.9,16.2,15.5,26.7,18.8s21.9,3.1,32-0.3c8.2-2.7,15.4-7.5,21.2-13.5c0.4-0.4,1.1-0.5,1.5-0.1c0.6,0.6,1.3,1.3,1.8,2
|
||||
C102.6,98.6,108.3,105.4,110.3,107.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M149.8,41l-35.6,43.5l2,4.1l4.1,8.6c0.7,1.5,0.4,3.3-0.8,4.5l-2.9,2.7c-0.2,0.2-0.4,0.2-0.7,0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1-0.1l-7.9-9.4c-0.8-0.9-1.6-1.8-2.5-2.6c-0.7-0.6-1.3-1.2-2.1-1.8c-1.4-1.1-3-2.2-4.6-3
|
||||
c-0.2-0.2-0.5-0.3-0.8-0.4l-9.1-4.8l-1.7-0.9c-0.4-0.2-0.5-0.6-0.3-1l2-3.4c0.9-1.5,2.6-2.2,4.2-1.8l13.7,3.1l13.9-18L91.8,47.8
|
||||
c-0.4-0.2-0.5-0.7-0.3-1l4.5-5.6c1.8-2.3,4.8-3.4,7.7-3l30.2,5.1l7.5-9.6c1.7-2.2,3.9-3.9,6.4-5l3.5-1.5c0.5-0.2,1-0.2,1.4-0.1
|
||||
c0.3,0.1,0.5,0.2,0.7,0.3l0,0c0.5,0.4,0.9,1.2,0.7,2l-0.6,3.7C152.9,36,151.7,38.7,149.8,41z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M155.2,85.4l-4.5,5.6c-0.2,0.2-0.5,0.3-0.7,0.2c-0.1,0-0.3-0.1-0.4-0.2l-17.2-23.3l13.3-16.1l10.5,25.7
|
||||
C157.5,79.9,157,83,155.2,85.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M397.4,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3c15.1,0,27.3,12.3,27.3,27.3l0,0
|
||||
C424.7,229.5,412.4,241.7,397.4,241.7z M397.4,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
|
||||
C381.4,223.2,388.5,230.4,397.4,230.4z M340.2,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3c15.1,0,27.3,12.3,27.3,27.3
|
||||
l0,0C367.5,229.5,355.3,241.7,340.2,241.7z M340.2,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
|
||||
C324.2,223.2,331.3,230.4,340.2,230.4z M310.3,214.1c0,15.3-12.3,27.7-27.3,27.7s-27.3-12.4-27.3-27.7s11.1-27,27.3-27
|
||||
c6,0,11.5,1.2,16,4.6v-15.8c0-3,2.7-5.5,5.7-5.5s5.7,2.5,5.7,5.5V214.1z M282.9,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16
|
||||
c-8.9,0-16,7.2-16,16C266.9,223.2,274.1,230.4,282.9,230.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M225.7,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3s27.3,12.3,27.3,27.3l0,0
|
||||
C253.1,229.5,240.9,241.7,225.7,241.7z M225.7,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
|
||||
C209.7,223.2,216.9,230.4,225.7,230.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M547.4,229.9c0.1,0,0.2,0,0.4,0c0.1,0,0.2,0.1,0.1,0.1v0.1c0,3.8,0,7.6,0,11.4c0,0.1,0,0.1,0,0.1
|
||||
c-0.9,0-1.8,0-2.7,0c0-0.1,0-0.2,0-0.2c0-3.7,0-7.4,0-11.1c0-0.3-0.1-0.2,0.2-0.2c0.1,0,0.2,0,0.4,0
|
||||
C546.4,229.9,546.9,229.9,547.4,229.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M520.6,200.7c-0.1,0.2-0.1,0.5-0.1,0.8c0,0.1-0.1,0.2-0.2,0.2c-0.4-0.1-0.9-0.1-1.3-0.2
|
||||
c-1.5-0.2-3.2-0.4-4.7-0.6c-1.4-0.2-2.7-0.4-4.1-0.5c-0.4-0.1-0.8-0.1-1.2-0.2c-0.1-0.1-0.1-0.1-0.1-0.2c0.2-1.2,0.3-2.4,0.4-3.6
|
||||
c0-0.1,0.1-0.2,0.2-0.2c1.1,0.1,2.1,0.2,3.2,0.4c1.2,0.2,2.6,0.4,3.7,0.5c1.4,0.2,2.7,0.4,4.1,0.5c0.4,0.1,0.4,0.1,0.3,0.4
|
||||
c-0.1,0.3-0.1,0.6-0.1,1c-0.1,0-0.1,0.1-0.1,0.1c-0.1,0.4-0.1,0.9-0.2,1.4C520.6,200.7,520.6,200.7,520.6,200.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M572.9,206.4c0.1-0.2,0.1-0.6,0.1-0.8c0-0.1,0.1-0.1,0.2-0.1c1,0.1,2,0.2,3,0.4c1.1,0.1,2.1,0.2,3.2,0.4
|
||||
c1.2,0.1,2.3,0.3,3.5,0.5c0.5,0.1,1.1,0.1,1.5,0.2c0.1,0,0.2,0.1,0.2,0.2c0.1,0.6-0.1,1.2-0.2,1.8c-0.1,0.6-0.2,1.2-0.2,1.7
|
||||
c0,0.1-0.1,0.2-0.2,0.1c-1.4-0.2-2.8-0.4-4.2-0.6c-1.4-0.2-2.7-0.4-4-0.5c-1.1-0.1-2.1-0.2-3.1-0.4c-0.1,0-0.1-0.1-0.1-0.2
|
||||
c0.1-0.4,0.1-0.7,0.1-1.1c0.1,0,0.1-0.1,0.1-0.1c0.1-0.4,0.1-0.9,0.2-1.3C573,206.6,573,206.5,572.9,206.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M571.1,213.7c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.1,0.1-0.1,0.2-0.1c2.2,1,4.4,2,6.6,3c1.2,0.6,2.4,1.1,3.7,1.7
|
||||
c0.2,0.1,0.2,0.1,0.1,0.3c-0.5,1-0.9,2-1.4,3c-0.1,0.1-0.1,0.1-0.2,0.1c-2.3-1.1-4.6-2.1-7-3.2c-1.1-0.5-2.2-1-3.3-1.5
|
||||
c-0.2-0.1-0.2-0.1-0.1-0.3c0.2-0.3,0.2-0.6,0.4-0.9c0.2-0.3,0.3-0.6,0.4-0.9C571,214.1,571.1,213.9,571.1,213.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M522.6,193.4c-0.1,0.2-0.2,0.5-0.4,0.7c-0.1,0.1-0.1,0.1-0.2,0.1c-1.2-0.6-2.6-1.1-3.8-1.7
|
||||
c-1.5-0.7-3.2-1.4-4.8-2.2c-0.6-0.2-1.1-0.5-1.7-0.8c-0.1-0.1-0.1-0.1-0.1-0.2c0.5-1,1-2.1,1.4-3c0.1-0.1,0.1-0.1,0.2-0.1
|
||||
c1,0.5,2.1,0.9,3,1.4c2.4,1.1,4.8,2.2,7.2,3.3c0.1,0.1,0.2,0.1,0.1,0.3c-0.1,0.2-0.2,0.5-0.4,0.8c-0.1,0.2-0.2,0.4-0.2,0.6
|
||||
C522.8,192.7,522.6,193,522.6,193.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M567.2,220.1c0.1-0.2,0.2-0.3,0.4-0.5c0.1-0.1,0.1-0.1,0.2,0c2.1,1.9,4.3,3.7,6.5,5.6
|
||||
c0.7,0.6,1.4,1.2,2.1,1.8c0.1,0.1,0.1,0.2,0.1,0.3c-0.7,0.8-1.4,1.5-2,2.4c-0.1,0.1-0.1,0.1-0.2,0c-1.9-1.7-3.9-3.3-5.8-5
|
||||
c-0.9-0.8-1.8-1.6-2.8-2.4c-0.1-0.1-0.1-0.1,0-0.2c0.2-0.2,0.4-0.4,0.6-0.7"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M526.4,186.9c-0.2,0.2-0.4,0.4-0.5,0.6c-0.1,0.1-0.1,0.1-0.2,0c-1.2-1-2.4-2-3.5-3c-1.4-1.2-2.7-2.4-4.1-3.6
|
||||
c-0.3-0.2-0.6-0.5-1-0.8c-0.1-0.1-0.1-0.1-0.1-0.2c0.7-0.8,1.4-1.5,2-2.3c0.1-0.1,0.2-0.1,0.2-0.1c1.4,1.2,2.7,2.4,4.1,3.6
|
||||
c1.5,1.2,3,2.6,4.5,3.9c0.1,0.1,0.1,0.1,0.1,0.2c-0.2,0.2-0.3,0.4-0.4,0.5c-0.1,0-0.1,0-0.1,0.1
|
||||
C527.1,186.1,526.8,186.5,526.4,186.9C526.4,186.8,526.4,186.9,526.4,186.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M531.8,181.9c-0.1,0.1-0.2,0.2-0.4,0.2c-0.1,0.1-0.2,0.1-0.3-0.1c-0.7-1.1-1.4-2.1-2-3.2
|
||||
c-1.4-2.1-2.7-4.2-4-6.3c-0.1-0.1-0.1-0.2,0.1-0.2c0.8-0.5,1.6-1,2.4-1.5c0.1-0.1,0.2-0.1,0.2,0.1c1,1.5,2,3.1,3,4.7
|
||||
c1,1.6,2.1,3.2,3,4.8c0.2,0.2,0.2,0.2-0.1,0.4c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0-0.1,0.1-0.2,0.1c-0.4,0.2-0.8,0.5-1.1,0.7
|
||||
C532,181.8,531.9,181.8,531.8,181.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M561.7,225.3c0.2-0.1,0.4-0.2,0.5-0.4c0.1-0.1,0.2-0.1,0.2,0.1c0.8,1.2,1.5,2.4,2.3,3.6
|
||||
c1.1,1.7,2.2,3.4,3.3,5.1c0.2,0.2,0.4,0.5,0.5,0.8c0.1,0.1,0.1,0.2-0.1,0.2c-0.8,0.5-1.6,1.1-2.4,1.5c-0.1,0.1-0.2,0.1-0.2-0.1
|
||||
c-1.7-2.7-3.4-5.3-5.1-8c-0.4-0.5-0.7-1.1-1-1.5c-0.1-0.1-0.1-0.1,0.1-0.2c0.2-0.1,0.4-0.2,0.6-0.4"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M554.9,228.6c0.2-0.1,0.4-0.1,0.5-0.1c0.1-0.1,0.2-0.1,0.2,0.1c0.4,1.4,0.8,2.9,1.2,4.3
|
||||
c0.6,2.1,1.2,4.3,1.9,6.5c0.1,0.2,0.1,0.2-0.2,0.3c-0.8,0.2-1.6,0.5-2.4,0.7c-0.2,0.1-0.2,0-0.3-0.2c-0.4-1.2-0.7-2.4-1.1-3.6
|
||||
c-0.7-2.4-1.4-4.8-2.1-7.1c-0.1-0.2-0.1-0.2,0.2-0.2c0.2-0.1,0.3-0.1,0.4-0.1C553.9,228.9,554.4,228.8,554.9,228.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M538.7,178.5c-0.2,0.1-0.4,0.1-0.5,0.1c-0.1,0.1-0.2,0-0.2-0.1c-0.2-0.8-0.5-1.6-0.7-2.4
|
||||
c-0.8-2.6-1.5-5.2-2.3-7.9c-0.1-0.2-0.1-0.3-0.1-0.5c-0.1-0.1-0.1-0.2,0.1-0.2c0.7-0.2,1.5-0.4,2.2-0.7c0.5-0.1,0.4-0.1,0.6,0.3
|
||||
c0.6,2,1.2,4,1.7,6c0.4,1.5,0.9,3,1.4,4.5c0.1,0.1,0,0.2-0.1,0.2c-0.2,0.1-0.3,0.1-0.4,0.1c-0.1-0.1-0.1,0-0.1,0
|
||||
c-0.4,0.1-0.7,0.2-1.1,0.4C538.9,178.5,538.8,178.5,538.7,178.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M546.1,177.3c-0.5,0-0.5,0-0.5-0.5c0-3.6,0-7.3,0-11c0-0.2,0.1-0.2,0.2-0.2c0.8,0,1.5,0,2.4,0
|
||||
c0.1,0,0.2,0.1,0.2,0.2c0,3.7,0,7.6,0,11.3c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.3,0-0.4,0C547.2,177.2,546.7,177.2,546.1,177.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M540.1,229.1c0.4,0.1,0.4,0.1,0.2,0.4c-1,3.6-2.1,7.1-3,10.7c-0.1,0.2-0.1,0.2-0.2,0.1
|
||||
c-0.7-0.2-1.4-0.4-2.1-0.6c-0.2-0.1-0.2-0.1-0.1-0.2c0.5-1.8,1.1-3.6,1.5-5.4c0.5-1.8,1.1-3.6,1.5-5.5c0.1-0.2,0.1-0.2,0.2-0.1
|
||||
c0.1,0.1,0.2,0.1,0.4,0.1C539,228.8,539.6,228.9,540.1,229.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M553.6,178.2c-0.4-0.1-0.4-0.1-0.3-0.5c0.8-2.9,1.7-5.9,2.5-8.9c0.2-0.6,0.4-1.2,0.5-1.8
|
||||
c0.1-0.1,0.1-0.2,0.2-0.1c0.7,0.2,1.4,0.4,2.2,0.6c0.2,0.1,0.1,0.1,0.1,0.2c-0.4,1.6-0.9,3.2-1.4,4.9c-0.6,2-1.1,4-1.7,6
|
||||
c-0.1,0.2-0.1,0.2-0.3,0.2c-0.1-0.1-0.1-0.1-0.2-0.1c-0.3-0.1-0.7-0.2-1-0.3C554,178.2,553.8,178.2,553.6,178.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M560.3,181.2c-0.3-0.2-0.2-0.2-0.1-0.5c1.7-2.6,3.3-5.2,4.9-7.8c0.4-0.5,0.7-1.1,1-1.6
|
||||
c0.1-0.1,0.1-0.1,0.2-0.1c0.6,0.4,1.1,0.7,1.7,1.1c0.1,0.1,0.1,0.1,0.1,0.2c-1,1.5-2,3-2.9,4.6c-1.1,1.6-2.1,3.2-3.1,4.9
|
||||
c-0.1,0.2-0.2,0.2-0.4,0.1"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M533.1,226.1c0.2,0.2,0.2,0.2,0.1,0.5c-1.2,1.9-2.4,3.7-3.6,5.6c-0.8,1.2-1.6,2.5-2.4,3.7
|
||||
c-0.1,0.1-0.2,0.2-0.3,0.1c-0.5-0.4-1.1-0.7-1.6-1.1c-0.1-0.1-0.1-0.1-0.1-0.2c1.4-2.1,2.7-4.3,4.1-6.4c0.7-1,1.2-2,1.9-3
|
||||
c0.1-0.2,0.1-0.2,0.4-0.1c0,0,0.1,0,0.1,0.1C532.3,225.5,532.7,225.8,533.1,226.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M527.4,221.4c0.1,0.1,0.1,0.2-0.1,0.3c-2.7,2.4-5.4,4.7-8.2,7c-0.1,0.1-0.2,0.2-0.4,0.4
|
||||
c-0.1,0.1-0.1,0.1-0.2,0c-0.4-0.5-0.8-0.9-1.2-1.4c-0.1-0.1-0.1-0.1,0.1-0.2c0.7-0.6,1.4-1.2,2.1-1.8c1.4-1.2,2.7-2.4,4.1-3.6
|
||||
c0.8-0.7,1.6-1.4,2.4-2.1c0.2-0.1,0.2-0.1,0.3,0.1C526.7,220.6,527.1,221,527.4,221.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M566.2,185.8c-0.1-0.1-0.1-0.2,0.1-0.4c2.1-1.8,4.2-3.7,6.4-5.5c0.7-0.6,1.4-1.2,2.1-1.8
|
||||
c0.1-0.1,0.2-0.1,0.2,0c0.4,0.4,0.7,0.9,1.1,1.3c0.1,0.1,0.1,0.2-0.1,0.2c-2.1,1.8-4.2,3.6-6.2,5.4c-0.7,0.7-1.5,1.2-2.2,1.9
|
||||
c-0.1,0.1-0.2,0.1-0.4,0C566.9,186.6,566.6,186.2,566.2,185.8z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M570.3,191.9c-0.1-0.1,0.1-0.1,0.1-0.2c0.9-0.4,1.8-0.8,2.7-1.2c1.2-0.5,2.3-1.1,3.5-1.6
|
||||
c1.4-0.6,2.7-1.2,4-1.9c0.1-0.1,0.2-0.1,0.3,0.1c0.2,0.4,0.4,0.9,0.6,1.3c0.1,0.1,0.1,0.2-0.1,0.2c-1.8,0.8-3.6,1.7-5.5,2.5
|
||||
c-1.6,0.7-3.2,1.5-4.9,2.2c-0.1,0.1-0.2,0.1-0.2-0.1C570.8,192.9,570.6,192.4,570.3,191.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M523.2,215.2c0.1,0.1-0.1,0.1-0.1,0.2c-1,0.4-1.9,0.9-2.9,1.4c-1.2,0.6-2.4,1.1-3.6,1.7
|
||||
c-1.3,0.6-2.6,1.2-3.9,1.8c-0.1,0.1-0.1,0.1-0.2-0.1c-0.2-0.5-0.4-1-0.7-1.4c-0.1-0.1-0.1-0.2,0.1-0.2c2.7-1.2,5.4-2.4,8-3.7
|
||||
c0.7-0.4,1.5-0.7,2.3-1.1c0.1-0.1,0.2-0.1,0.2,0C522.7,214.2,523,214.8,523.2,215.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M531.8,181.9c0.1-0.1,0.1-0.1,0.2-0.2c0.4-0.2,0.7-0.5,1.1-0.7c0.1-0.1,0.1-0.1,0.2-0.1
|
||||
c0.4,0.7,0.8,1.4,1.2,2c1,1.7,2,3.3,3,4.9c0.5,0.9,1.1,1.7,1.5,2.6c0.1,0.1,0.1,0.2-0.1,0.2c-0.4,0.2-0.9,0.5-1.2,0.8
|
||||
c-0.1,0.1-0.1,0.1-0.2-0.1c-1-1.6-1.9-3.2-2.9-4.8c-0.7-1.1-1.4-2.2-2.1-3.4c-0.2-0.4-0.5-0.8-0.7-1.2
|
||||
C532,182,531.9,182,531.8,181.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M514.2,209c-1.6,0.2-3.2,0.4-4.8,0.7c-0.1,0-0.2,0-0.2-0.1c-0.1-0.4-0.1-0.9-0.2-1.3c0-0.1,0.1-0.2,0.1-0.2
|
||||
c1.3-0.2,2.6-0.4,3.9-0.5c1.5-0.2,3-0.4,4.5-0.6c1-0.1,2-0.2,3-0.4c0.1,0.6,0.2,1.1,0.2,1.6"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M572.8,199c1.4-0.2,2.9-0.4,4.4-0.6c1.3-0.2,2.7-0.4,4-0.5c1-0.1,2-0.2,3-0.4c0.2-0.1,0.2,0,0.2,0.2
|
||||
c0.1,0.4,0.1,0.8,0.2,1.2c0,0.1,0,0.2-0.1,0.2c-1,0.1-1.9,0.2-2.9,0.4c-1.6,0.2-3.2,0.4-4.9,0.7c-1.2,0.2-2.4,0.3-3.6,0.5
|
||||
c-0.1,0-0.1,0-0.1,0C572.9,200.1,572.8,199.5,572.8,199z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M546.1,177.3c0.5-0.1,1.1-0.1,1.6,0c0,3.7,0,7.4,0,11.1c0,0.2,0,0.2-0.2,0.2c-0.4,0-0.7,0-1.1,0
|
||||
c-0.2,0-0.2-0.1-0.2-0.2c0-3.6,0-7.2,0-10.8C546.1,177.5,546.1,177.3,546.1,177.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M547.4,229.9c-0.5,0-1.1,0-1.6,0c0-3.7,0-7.4,0-11.1c0-0.2,0.1-0.2,0.2-0.2c0.4,0,0.8,0,1.2,0
|
||||
c0.1,0,0.2,0.1,0.2,0.2c0,0.8,0,1.6,0,2.4C547.4,224.1,547.4,227,547.4,229.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M553.6,178.2c0.2,0,0.4,0.1,0.6,0.1c0.4,0.1,0.7,0.2,1,0.3c-0.1,0.2-0.2,0.5-0.2,0.8c-0.5,1.6-1,3.3-1.4,4.9
|
||||
c-0.5,1.7-1,3.3-1.5,5c-0.1,0.1-0.1,0.2-0.2,0.1c-0.4-0.1-0.8-0.2-1.2-0.4c-0.1-0.1-0.1-0.1-0.1-0.2c0.4-1.2,0.7-2.4,1.1-3.7
|
||||
c0.5-1.7,1-3.4,1.5-5.1C553.1,179.5,553.4,178.8,553.6,178.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M526.4,186.9c0-0.1,0-0.1,0.1-0.1c0.3-0.4,0.6-0.7,1-1.1c0.1-0.1,0.1-0.1,0.1-0.1c0.4,0.3,0.7,0.6,1,0.9
|
||||
c0.5,0.5,1.1,1,1.5,1.4c1,0.9,2,1.8,3,2.7c0.6,0.6,1.2,1.1,1.8,1.7c0.2,0.2,0.5,0.5,0.8,0.7c0.1,0.1,0.1,0.1,0,0.2
|
||||
c-0.3,0.3-0.6,0.7-0.8,1c-0.1,0.1-0.1,0.1-0.2,0.1c-0.3-0.3-0.6-0.6-1-0.8c-1.2-1.1-2.4-2.1-3.6-3.2c-1-0.9-1.9-1.7-2.9-2.6
|
||||
C527.1,187.5,526.8,187.2,526.4,186.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M540.1,229.1c-0.5-0.1-1.1-0.2-1.5-0.4c0.4-1.1,0.7-2.3,1-3.4c0.4-1.4,0.8-2.7,1.2-4.1
|
||||
c0.3-1.1,0.6-2.1,0.9-3.2c0.1-0.2,0.1-0.2,0.2-0.2c0.4,0.1,0.8,0.2,1.2,0.4c0.1,0.1,0.2,0.1,0.1,0.2c-0.5,1.7-1,3.4-1.5,5.1
|
||||
c-0.5,1.7-1,3.5-1.5,5.2C540.1,228.8,540.1,228.9,540.1,229.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M522.6,193.4c0.1-0.3,0.2-0.6,0.4-0.9c0.1-0.2,0.1-0.4,0.2-0.6c0.7,0.3,1.3,0.6,2,0.9c1.5,0.7,3,1.4,4.5,2.1
|
||||
c0.9,0.4,1.7,0.8,2.6,1.2c0.3,0.2,0.7,0.3,1,0.4c0.1,0.1,0.1,0.1,0.1,0.2c-0.2,0.4-0.4,0.8-0.5,1.2c-0.1,0.1-0.1,0.2-0.2,0.1
|
||||
c-0.7-0.4-1.4-0.7-2.1-1c-1.9-0.9-3.9-1.8-5.8-2.7C524,194.1,523.3,193.7,522.6,193.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M571.1,213.7c-0.1,0.2-0.1,0.4-0.2,0.6c-0.1,0.3-0.2,0.6-0.4,0.9c-0.7-0.3-1.4-0.6-2.1-1
|
||||
c-1.6-0.7-3.2-1.5-4.8-2.2c-0.8-0.4-1.6-0.7-2.4-1.1c-0.2-0.1-0.6-0.2-0.8-0.4c-0.1-0.1-0.1-0.1-0.1-0.2c0.2-0.4,0.4-0.8,0.6-1.2
|
||||
c0.1-0.1,0.1-0.1,0.2-0.1c1.4,0.7,2.7,1.2,4.2,1.9C567.2,211.8,569.2,212.7,571.1,213.7C571.1,213.7,571.1,213.7,571.1,213.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M538.7,178.5c0.1-0.1,0.2-0.1,0.2-0.1c0.4-0.1,0.7-0.2,1.1-0.4c0.1,0,0.1-0.1,0.1,0c0.5,1.6,1,3.2,1.4,4.8
|
||||
c0.4,1.2,0.7,2.4,1.1,3.6c0.2,0.7,0.4,1.5,0.7,2.2c0.1,0.1,0,0.2-0.1,0.2c-0.4,0.1-0.8,0.2-1.2,0.4c-0.2,0.1-0.2,0-0.2-0.2
|
||||
c-0.3-1-0.6-2-0.9-3c-0.4-1.2-0.7-2.5-1.1-3.7C539.5,181.1,539.1,179.8,538.7,178.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M520.6,200.7c-0.1,0-0.1-0.1-0.1-0.1c0.1-0.4,0.1-0.9,0.2-1.4c0-0.1,0.1-0.1,0.1-0.1c0.9,0.1,1.7,0.2,2.6,0.4
|
||||
c1,0.1,2.1,0.2,3,0.4c1,0.2,2,0.2,3,0.4c0.7,0.1,1.4,0.2,2.2,0.2c0.2,0,0.2,0.1,0.2,0.2c-0.1,0.4-0.1,0.8-0.2,1.2
|
||||
c0,0.1-0.1,0.1-0.2,0.1c-0.9-0.1-1.8-0.2-2.7-0.4c-1-0.1-1.9-0.2-2.9-0.4c-0.9-0.1-1.8-0.2-2.7-0.4
|
||||
C522.4,200.9,521.6,200.8,520.6,200.7C520.8,200.8,520.8,200.8,520.6,200.7z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M533.1,226.1c-0.4-0.3-0.9-0.6-1.4-0.9c0.3-0.4,0.5-0.8,0.8-1.2c0.7-1.1,1.4-2.1,2.1-3.2
|
||||
c1.1-1.7,2.1-3.3,3.2-5c0.1-0.1,0.1-0.1,0.2-0.1c0.4,0.2,0.7,0.5,1.1,0.7c0.1,0.1,0.1,0.1,0.1,0.2c-0.5,0.7-0.9,1.4-1.4,2.2
|
||||
c-1.5,2.4-3,4.7-4.5,7.1C533.2,226,533.2,226.1,533.1,226.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M560.4,181.1c0.5,0.2,0.9,0.6,1.4,0.9c-0.5,0.7-0.9,1.4-1.4,2.2c-1.5,2.4-3,4.8-4.6,7.2
|
||||
c-0.1,0.1-0.1,0.1-0.2,0.1c-0.4-0.2-0.7-0.4-1.1-0.7c-0.1-0.1-0.2-0.1-0.1-0.2c0.8-1.2,1.5-2.4,2.3-3.6c1.2-1.9,2.4-3.8,3.6-5.7
|
||||
C560.4,181.1,560.4,181.1,560.4,181.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M527.4,221.4c-0.4-0.4-0.7-0.8-1.1-1.2c1-0.9,2-1.7,3-2.6c1-0.9,2-1.7,3-2.6c0.8-0.7,1.7-1.4,2.5-2.1
|
||||
c0.1-0.1,0.2-0.1,0.2,0.1c0.2,0.3,0.5,0.7,0.8,1c0.1,0.1,0.1,0.2,0,0.2c-0.6,0.5-1.2,1.1-1.8,1.6c-0.6,0.5-1.2,1.1-1.9,1.6
|
||||
c-0.9,0.8-1.8,1.5-2.7,2.4C528.7,220.3,528,220.8,527.4,221.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M572.8,199c0.1,0.5,0.1,1.1,0.2,1.5c-0.4,0.1-0.7,0.1-1.1,0.2c-0.7,0.1-1.5,0.2-2.2,0.3
|
||||
c-0.8,0.1-1.7,0.2-2.5,0.4c-0.8,0.1-1.7,0.2-2.5,0.4c-0.7,0.1-1.4,0.2-2.2,0.3c-0.2,0.1-0.4,0.1-0.7,0.1c-0.1,0.1-0.2-0.1-0.2-0.1
|
||||
c-0.1-0.3-0.1-0.6-0.1-0.9c0-0.2-0.1-0.4,0-0.5c0.1-0.1,0.3-0.1,0.4-0.1c1.4-0.2,2.8-0.4,4.2-0.6c1.4-0.2,2.7-0.4,4-0.6
|
||||
C571.2,199.2,571.9,199.2,572.8,199z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M554.9,228.8c-0.5,0.2-1,0.4-1.5,0.5c-0.2-1-0.6-2.2-0.9-3.2c-0.4-1.4-0.8-2.9-1.2-4.3
|
||||
c-0.3-1.1-0.6-2.3-0.9-3.4c-0.1-0.1-0.1-0.2,0.1-0.2c0.4-0.1,0.8-0.2,1.2-0.4c0.1-0.1,0.2,0,0.2,0.1c0.4,1.5,0.8,3,1.2,4.5
|
||||
c0.6,2,1.1,4,1.7,6.1C554.9,228.6,554.9,228.8,554.9,228.8z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M520.8,208.1c-0.1-0.5-0.1-1.1-0.2-1.5c1.2-0.2,2.4-0.4,3.6-0.5c1.1-0.1,2.2-0.3,3.3-0.5
|
||||
c1.2-0.2,2.4-0.3,3.7-0.5c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2,0,0.2,0.1c0.1,0.4,0.1,0.9,0.2,1.2c0,0.1-0.1,0.2-0.1,0.2
|
||||
c-0.4,0.1-0.9,0.1-1.2,0.2c-0.7,0.1-1.4,0.2-2.2,0.3c-0.7,0.1-1.5,0.2-2.2,0.3c-0.7,0.1-1.4,0.2-2.1,0.3"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M566.3,221.4c-1.4-1.2-2.9-2.5-4.3-3.7c-1.1-1-2.2-1.9-3.4-2.9c-0.2-0.2-0.5-0.5-0.8-0.7
|
||||
c-0.1-0.1-0.1-0.1,0-0.2c0.2-0.3,0.5-0.6,0.8-0.9c0.1-0.1,0.2-0.1,0.3,0c0.4,0.4,0.9,0.8,1.4,1.2c0.9,0.7,1.7,1.5,2.6,2.3
|
||||
c0.7,0.6,1.4,1.2,2,1.7c0.8,0.8,1.5,1.4,2.3,2.1c0,0.1-0.1,0.2-0.2,0.2"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M572.9,206.4c0.1,0.1,0.1,0.1,0.1,0.2c-0.1,0.4-0.1,0.9-0.2,1.3c0,0.1,0,0.1-0.1,0.1
|
||||
c-0.4-0.1-0.9-0.1-1.4-0.2c-0.8-0.1-1.7-0.2-2.6-0.4c-0.7-0.1-1.4-0.2-2.2-0.3c-0.7-0.1-1.4-0.2-2.2-0.3c-0.7-0.1-1.2-0.2-1.9-0.2
|
||||
c-0.2-0.1-0.6-0.1-0.8-0.1c-0.1,0-0.1-0.1-0.1-0.2c0.1-0.4,0.1-0.9,0.2-1.3c0-0.1,0.1-0.1,0.2-0.1c0.4,0.1,0.7,0.1,1.1,0.1
|
||||
c0.8,0.1,1.6,0.2,2.4,0.4c0.7,0.1,1.5,0.2,2.3,0.3c0.8,0.1,1.7,0.2,2.5,0.4c0.8,0.1,1.6,0.2,2.4,0.4
|
||||
C572.7,206.4,572.8,206.4,572.9,206.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M566.2,185.8c0.4,0.4,0.7,0.8,1.1,1.2c-0.4,0.3-0.7,0.6-1.1,0.9c-0.9,0.8-1.8,1.5-2.8,2.4
|
||||
c-0.8,0.7-1.7,1.4-2.4,2.1c-0.7,0.6-1.4,1.2-2.1,1.8c-0.1,0.1-0.2,0.1-0.4-0.1c-0.2-0.3-0.5-0.6-0.8-0.9c-0.1-0.1-0.1-0.2,0-0.2
|
||||
c0.5-0.4,1-0.9,1.5-1.3c0.6-0.5,1.2-1.1,1.8-1.5c0.9-0.8,1.9-1.6,2.8-2.4C564.7,187.1,565.5,186.4,566.2,185.8z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M561.7,225.3c-0.1,0.2-0.4,0.2-0.6,0.4c-0.2,0.1-0.4,0.2-0.6,0.4c-0.1,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.2-0.5-0.6-1-0.9-1.5c-1.1-1.7-2.1-3.5-3.2-5.2c-0.6-0.9-1.1-1.8-1.7-2.7c-0.1-0.1-0.1-0.2,0.1-0.2c0.4-0.2,0.7-0.4,1.1-0.7
|
||||
c0.1-0.1,0.2-0.1,0.2,0.1c1.5,2.4,3,4.9,4.5,7.4C560.8,223.9,561.2,224.6,561.7,225.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M523.2,215.2c-0.2-0.5-0.5-1-0.7-1.4c0.7-0.4,1.4-0.7,2.2-1c2-0.9,4-1.8,6-2.7c0.6-0.3,1.2-0.6,1.9-0.9
|
||||
c0.1-0.1,0.2-0.1,0.2,0.1c0.2,0.4,0.4,0.8,0.5,1.2c0.1,0.1,0.1,0.1-0.1,0.2c-2.1,0.9-4,1.9-6.1,2.8c-1.1,0.5-2.3,1.1-3.4,1.5
|
||||
C523.6,215.1,523.4,215.2,523.2,215.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M570.3,191.9c0.2,0.5,0.5,1,0.7,1.4c-0.4,0.2-0.7,0.4-1.1,0.5c-1,0.5-2,0.9-3,1.4c-1.5,0.7-3,1.4-4.6,2.1
|
||||
c-0.5,0.2-1,0.4-1.5,0.7c-0.1,0.1-0.2,0.1-0.2-0.1c-0.2-0.4-0.4-0.8-0.6-1.2c-0.1-0.1,0-0.1,0.1-0.2c1.6-0.7,3.2-1.5,4.9-2.2
|
||||
c1.2-0.5,2.3-1.1,3.5-1.6c0.6-0.2,1.1-0.5,1.7-0.7C570.3,192,570.3,192,570.3,191.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M599.3,214.7c0-8.1,2.2-14.5,6.5-19c4.3-4.6,9.9-6.8,16.8-6.8c4.5,0,8.6,1.1,12.2,3.2c3.6,2.1,6.4,5.2,8.3,9
|
||||
c1.9,3.9,2.9,8.2,2.9,13.1c0,4.9-1,9.3-3,13.3c-2,3.9-4.8,6.8-8.5,8.9c-3.6,2-7.6,3-11.8,3c-4.6,0-8.7-1.1-12.3-3.3
|
||||
c-3.6-2.2-6.4-5.2-8.2-9.1C600.2,223,599.3,219,599.3,214.7z M605.9,214.8c0,5.9,1.6,10.5,4.8,13.9c3.2,3.4,7.1,5.1,11.9,5.1
|
||||
c4.9,0,8.9-1.7,12-5.1c3.2-3.4,4.7-8.3,4.7-14.5c0-4-0.7-7.4-2-10.4s-3.3-5.2-5.9-6.9c-2.6-1.6-5.5-2.4-8.7-2.4
|
||||
c-4.6,0-8.5,1.5-11.8,4.7C607.6,202.2,605.9,207.4,605.9,214.8z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M622.7,241.4c-4.9,0-9.4-1.2-13.4-3.6s-7-5.8-9-10c-2-4-3-8.3-3-13.1c0-8.6,2.4-15.5,7.1-20.4
|
||||
c4.7-4.9,10.9-7.5,18.3-7.5c4.9,0,9.3,1.2,13.3,3.5c3.9,2.3,7,5.6,9.1,9.8c2,4.2,3.1,8.9,3.1,14s-1.1,9.9-3.2,14.2
|
||||
c-2.3,4.3-5.3,7.6-9.3,9.8C631.6,240.3,627.3,241.4,622.7,241.4z M622.7,191c-6.4,0-11.4,2-15.4,6.2c-4,4.1-6,10.1-6,17.6
|
||||
c0,4.1,0.8,7.8,2.6,11.2c1.7,3.5,4.2,6.3,7.4,8.3c3.3,2,7.1,3,11.2,3c3.9,0,7.6-1,10.8-2.8c3.3-1.8,5.8-4.5,7.7-8
|
||||
c1.8-3.6,2.7-7.8,2.7-12.3c0-4.6-0.9-8.6-2.6-12.2c-1.7-3.5-4.3-6.2-7.4-8.1C630.5,191.9,626.9,191,622.7,191z M622.6,235.8
|
||||
c-5.4,0-9.9-1.9-13.5-5.7c-3.5-3.7-5.3-8.9-5.3-15.3c0-7.9,1.9-13.7,5.7-17.3c3.6-3.5,8.1-5.3,13.2-5.3c3.6,0,6.9,1,9.8,2.7
|
||||
c2.9,1.9,5.2,4.5,6.7,7.8c1.5,3.2,2.2,6.9,2.2,11.3c0,6.8-1.8,12.2-5.2,16C632.6,233.8,628,235.8,622.6,235.8z M622.7,196.4
|
||||
c-4.1,0-7.4,1.4-10.4,4.1c-2.9,2.8-4.3,7.6-4.3,14.3c0,5.3,1.4,9.5,4.2,12.4c2.7,3,6.1,4.4,10.4,4.4s7.7-1.4,10.5-4.5
|
||||
c2.7-3,4.2-7.4,4.2-13.1c0-3.7-0.6-6.8-1.8-9.5c-1.2-2.6-2.9-4.5-5.1-6C628.1,197.1,625.5,196.4,622.7,196.4z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M693.7,221.3l6.4,1.6c-1.4,5.3-3.8,9.3-7.3,12.1s-7.8,4.2-12.9,4.2c-5.2,0-9.5-1.1-12.8-3.2
|
||||
c-3.3-2.1-5.8-5.2-7.5-9.3c-1.7-4-2.6-8.4-2.6-13.1c0-5.1,1-9.5,2.9-13.3c2-3.8,4.7-6.7,8.3-8.6s7.5-2.9,11.8-2.9
|
||||
c4.9,0,9,1.2,12.3,3.7c3.3,2.5,5.7,6,7,10.5l-6.4,1.5c-1.1-3.6-2.8-6.1-4.9-7.7c-2.1-1.6-4.9-2.4-8.1-2.4c-3.7,0-6.9,0.9-9.4,2.7
|
||||
c-2.5,1.8-4.3,4.2-5.3,7.3c-1,3-1.5,6.1-1.5,9.3c0,4.2,0.6,7.8,1.8,10.9c1.2,3.1,3.1,5.4,5.7,7c2.6,1.5,5.3,2.3,8.3,2.3
|
||||
c3.6,0,6.7-1.1,9.2-3.2C691,228.5,692.8,225.4,693.7,221.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M679.9,241.3c-5.7,0-10.4-1.2-13.9-3.6c-3.6-2.4-6.4-5.8-8.3-10.2c-1.8-4.2-2.7-8.9-2.7-13.9
|
||||
c0-5.5,1.1-10.2,3.2-14.2c2.1-4.2,5.2-7.3,9.1-9.5c3.8-2.1,8.2-3.2,12.9-3.2c5.3,0,9.9,1.4,13.6,4.2c3.7,2.8,6.3,6.7,7.7,11.5
|
||||
l0.6,2.1l-10.4,2.4l-0.6-1.8c-1-3.1-2.4-5.4-4.2-6.7c-1.8-1.4-4.1-2-6.8-2c-3.3,0-6.1,0.8-8.2,2.3c-2.1,1.5-3.7,3.6-4.5,6.2
|
||||
c-1,2.9-1.4,5.8-1.4,8.7c0,3.9,0.5,7.3,1.7,10.1c1,2.6,2.6,4.6,4.8,6c2.3,1.4,4.6,2,7.2,2c3.1,0,5.7-0.9,7.9-2.7
|
||||
c2.1-1.8,3.6-4.6,4.4-8.2l0.5-2.1l10.5,2.6l-0.5,2c-1.5,5.7-4.2,10.2-8,13.3C690.2,239.8,685.4,241.3,679.9,241.3z M680,190.9
|
||||
c-4,0-7.6,0.9-10.8,2.7c-3.2,1.8-5.7,4.3-7.4,7.7c-1.8,3.4-2.7,7.6-2.7,12.3c0,4.5,0.8,8.5,2.4,12.3c1.5,3.6,3.8,6.4,6.7,8.3
|
||||
s6.8,2.9,11.7,2.9c4.7,0,8.5-1.2,11.6-3.7c2.7-2.1,4.7-5.2,6-9l-2.3-0.6c-1.1,3.5-2.9,6.3-5.2,8.4c-2.9,2.4-6.4,3.6-10.5,3.6
|
||||
c-3.3,0-6.5-0.9-9.3-2.6c-3-1.8-5.2-4.5-6.5-8c-1.2-3.3-1.9-7.3-1.9-11.7c0-3.4,0.5-6.7,1.7-10c1.1-3.5,3.2-6.2,6.1-8.3
|
||||
c2.9-2,6.4-3.1,10.6-3.1c3.7,0,6.8,1,9.3,2.9c2.1,1.6,3.8,3.9,5,7l2.3-0.5c-1.2-3-3-5.5-5.5-7.3C688.1,192,684.4,190.9,680,190.9
|
||||
z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M707.2,238.5l18.7-48.8h7l19.9,48.8h-7.4l-5.7-14.8h-20.4l-5.4,14.8H707.2z M721.3,218.4h16.5l-5.1-13.5
|
||||
c-1.5-4.1-2.7-7.5-3.5-10.1c-0.6,3.2-1.5,6.2-2.6,9.3L721.3,218.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M729.4,187.6h5l21.7,53h-11.9l-5.7-14.8h-17.5l-5.4,14.8h-11.2l20.2-53h4 M746.9,236.4h2.9l-18.2-44.6h-1
|
||||
l0.7,2.4c0.8,2.9,2,6.3,3.4,10l6.2,16.3h-22.6l6.4-17.1c1.1-3.2,2-6.1,2.5-9l0.5-2.7h-0.4l-17.1,44.6h2.3l5.4-14.8h23.3
|
||||
L746.9,236.4z M724.4,216.3h10.5l-4-10.7c-0.4-1.2-0.8-2.3-1.2-3.5c-0.3,0.9-0.6,1.7-0.9,2.6L724.4,216.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M327.3,257c1.3-0.2,3-0.4,5.3-0.4c2.7,0,4.7,0.7,6,1.8c1.2,1,1.8,2.6,1.8,4.5c0,1.9-0.6,3.5-1.7,4.5
|
||||
c-1.4,1.5-3.8,2.3-6.5,2.3c-0.8,0-1.5-0.1-2.2-0.2v8.5h-2.7V257z M330,267.3c0.6,0.2,1.4,0.2,2.3,0.2c3.3,0,5.4-1.6,5.4-4.5
|
||||
c0-2.8-2-4.2-5-4.2c-1.2,0-2.1,0.1-2.6,0.2L330,267.3L330,267.3z"/>
|
||||
<path class="st1" d="M352,278l-0.2-1.9h-0.1c-0.8,1.2-2.5,2.3-4.6,2.3c-3.1,0-4.6-2.2-4.6-4.4c0-3.7,3.3-5.7,9.2-5.7V268
|
||||
c0-1.2-0.4-3.5-3.5-3.5c-1.4,0-2.9,0.4-4,1.1l-0.7-1.8c1.2-0.8,3.1-1.4,5-1.4c4.6,0,5.8,3.2,5.8,6.2v5.7c0,1.3,0.1,2.6,0.2,3.6H352
|
||||
L352,278z M351.6,270.2c-3-0.1-6.5,0.5-6.5,3.5c0,1.8,1.2,2.7,2.6,2.7c2,0,3.3-1.2,3.7-2.6c0.1-0.3,0.2-0.6,0.2-0.9V270.2z"/>
|
||||
<path class="st1" d="M359.2,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
|
||||
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
|
||||
<path class="st1" d="M374.1,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
|
||||
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3H369v-2.1h2.4v-3.6L374.1,258.4z"/>
|
||||
<path class="st1" d="M381.6,266.9c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
|
||||
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8L381.6,266.9L381.6,266.9z"/>
|
||||
<path class="st1" d="M401.1,270.9c0.1,3.7,2.4,5.3,5.2,5.3c2,0,3.2-0.4,4.2-0.8l0.5,2c-1,0.4-2.7,1-5.1,1c-4.7,0-7.5-3.1-7.5-7.7
|
||||
c0-4.6,2.7-8.2,7.1-8.2c5,0,6.3,4.4,6.3,7.2c0,0.6-0.1,1-0.1,1.3L401.1,270.9L401.1,270.9L401.1,270.9z M409.2,268.9
|
||||
c0.1-1.8-0.7-4.5-3.9-4.5c-2.8,0-4,2.6-4.3,4.5H409.2z"/>
|
||||
<path class="st1" d="M415.8,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
|
||||
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st1" d="M614.7,277.4c-1,0.5-3,1-5.6,1c-6,0-10.5-3.8-10.5-10.8c0-6.7,4.5-11.2,11.1-11.2c2.7,0,4.3,0.6,5.1,1
|
||||
l-0.7,2.3c-1-0.5-2.5-0.9-4.3-0.9c-5,0-8.3,3.2-8.3,8.7c0,5.2,3,8.6,8.2,8.6c1.7,0,3.4-0.4,4.5-0.9L614.7,277.4z"/>
|
||||
<path class="st1" d="M631.9,270.3c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1
|
||||
C629,262.4,631.9,265.6,631.9,270.3z M619.9,270.5c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9
|
||||
C621.2,264.5,619.9,267.6,619.9,270.5z"/>
|
||||
<path class="st1" d="M635.9,266.9c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
|
||||
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8V266.9z"/>
|
||||
<path class="st1" d="M657.1,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
|
||||
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3H652v-2.1h2.4v-3.6L657.1,258.4z"/>
|
||||
<path class="st1" d="M664.6,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
|
||||
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
|
||||
<path class="st1" d="M678.5,258.5c0.1,1-0.7,1.7-1.8,1.7c-1,0-1.7-0.8-1.7-1.7s0.7-1.7,1.7-1.7
|
||||
C677.9,256.8,678.5,257.5,678.5,258.5z M675.4,278v-15.2h2.8V278H675.4z"/>
|
||||
<path class="st1" d="M683.2,278c0.1-1,0.1-2.6,0.1-3.9v-18.4h2.7v9.6h0.1c1-1.7,2.7-2.8,5.2-2.8c3.8,0,6.5,3.2,6.4,7.8
|
||||
c0,5.5-3.5,8.2-6.8,8.2c-2.2,0-4-0.8-5.1-2.9h-0.1l-0.1,2.5H683.2z M686,271.9c0,0.4,0.1,0.7,0.1,1c0.5,1.9,2.1,3.3,4.2,3.3
|
||||
c2.9,0,4.6-2.4,4.6-5.9c0-3-1.6-5.7-4.5-5.7c-1.9,0-3.6,1.3-4.2,3.4c-0.1,0.3-0.2,0.7-0.2,1.1L686,271.9L686,271.9z"/>
|
||||
<path class="st1" d="M714.4,273.9c0,1.5,0.1,3,0.1,4.2h-2.4l-0.2-2.5h-0.1c-0.7,1.2-2.3,2.9-5.1,2.9c-2.4,0-5.2-1.3-5.2-6.7v-8.9
|
||||
h2.8v8.5c0,2.9,0.9,4.9,3.4,4.9c1.8,0,3.2-1.3,3.6-2.5c0.2-0.4,0.2-0.9,0.2-1.4v-9.3h2.8L714.4,273.9L714.4,273.9z"/>
|
||||
<path class="st1" d="M722.8,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
|
||||
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3h-2.4v-2.1h2.4v-3.6L722.8,258.4z"/>
|
||||
<path class="st1" d="M744,270.3c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1C741,262.4,744,265.6,744,270.3z
|
||||
M731.9,270.5c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9C733.3,264.5,731.9,267.6,731.9,270.5z"/>
|
||||
<path class="st1" d="M747.9,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
|
||||
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6L747.9,267.6z"/>
|
||||
<path class="st1" d="M646.9,312.6c1.2,0.8,3,1.4,4.9,1.4c2.8,0,4.5-1.5,4.5-3.6c0-2-1.1-3.1-4-4.2c-3.5-1.2-5.6-3-5.6-6
|
||||
c0-3.3,2.7-5.8,6.9-5.8c2.2,0,3.7,0.5,4.7,1l-0.8,2.3c-0.7-0.4-2.1-1-4-1c-2.9,0-4,1.7-4,3.2c0,2,1.3,3,4.2,4.1
|
||||
c3.6,1.4,5.4,3.1,5.4,6.2c0,3.3-2.4,6.1-7.4,6.1c-2,0-4.3-0.6-5.4-1.4L646.9,312.6z"/>
|
||||
<path class="st1" d="M663.2,305.6c0-2-0.1-3.5-0.1-5h2.5l0.1,2.6h0.1c1.1-1.8,2.9-3,5.4-3c3.7,0,6.5,3.1,6.5,7.7
|
||||
c0,5.5-3.3,8.2-7,8.2c-2,0-3.8-0.9-4.7-2.4h-0.1v8.3h-2.7V305.6z M665.9,309.7c0,0.4,0.1,0.8,0.1,1.1c0.5,1.9,2.2,3.3,4.2,3.3
|
||||
c2.9,0,4.6-2.4,4.6-5.9c0-3-1.6-5.7-4.5-5.7c-1.9,0-3.6,1.4-4.2,3.5c-0.1,0.4-0.2,0.8-0.2,1.1L665.9,309.7L665.9,309.7z"/>
|
||||
<path class="st1" d="M695.4,308.1c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1
|
||||
C692.4,300.3,695.4,303.4,695.4,308.1z M683.2,308.3c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9
|
||||
C684.7,302.4,683.2,305.4,683.2,308.3z"/>
|
||||
<path class="st1" d="M699.3,304.8c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
|
||||
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8L699.3,304.8L699.3,304.8z"/>
|
||||
<path class="st1" d="M716.9,313.1c0.8,0.5,2.3,1.1,3.6,1.1c2,0,3-1,3-2.3c0-1.3-0.8-2-2.9-2.8c-2.7-1-4-2.5-4-4.3
|
||||
c0-2.4,2-4.5,5.2-4.5c1.5,0,2.9,0.4,3.7,1l-0.7,2c-0.6-0.4-1.7-0.9-3.1-0.9c-1.7,0-2.6,1-2.6,2.1c0,1.2,0.9,1.8,2.9,2.6
|
||||
c2.7,1,4,2.3,4,4.6c0,2.7-2.1,4.6-5.7,4.6c-1.7,0-3.2-0.4-4.3-1L716.9,313.1z"/>
|
||||
<path class="st1" d="M744,308.1c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1C741,300.3,744,303.4,744,308.1z
|
||||
M731.9,308.3c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9C733.3,302.4,731.9,305.4,731.9,308.3z"/>
|
||||
<path class="st1" d="M747.9,305.4c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
|
||||
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.2h-2.7V305.4L747.9,305.4z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 108 KiB |
BIN
addons/cetmix_tower/static/description/commands_1.png
Normal file
|
After Width: | Height: | Size: 285 KiB |
BIN
addons/cetmix_tower/static/description/commands_2.png
Normal file
|
After Width: | Height: | Size: 342 KiB |
62
addons/cetmix_tower/static/description/connectivity.svg
Normal file
@@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#039BE5;}
|
||||
.st1{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
|
||||
.st2{opacity:5.000000e-02;enable-background:new ;}
|
||||
.st3{fill:#303C42;}
|
||||
.st4{opacity:0.1;enable-background:new ;}
|
||||
.st5{opacity:0.2;enable-background:new ;}
|
||||
.st6{fill:#69B342;}
|
||||
.st7{fill:#C6CDD1;}
|
||||
.st8{fill:url(#SVGID_1_);}
|
||||
.st9{fill:url(#SVGID_2_);}
|
||||
.st10{fill:url(#SVGID_3_);}
|
||||
</style>
|
||||
<circle class="st0" cx="11.1" cy="11.1" r="9.2"/>
|
||||
<path class="st1" d="M11.1,2c-3.8,0-7,2.3-8.4,5.5h16.8C18.1,4.2,14.9,2,11.1,2z"/>
|
||||
<path class="st2" d="M2.7,14.8c1.4,3.2,4.6,5.5,8.4,5.5s7-2.3,8.4-5.5H2.7z"/>
|
||||
<path class="st1" d="M7.5,11.1C7.5,6.1,8.6,2,11.1,2C6.1,2,2,6.1,2,11.1s4.1,9.2,9.2,9.2C8.6,20.3,7.5,16.2,7.5,11.1z"/>
|
||||
<path class="st2" d="M11.1,2c2.5,0,3.7,4.1,3.7,9.2s-1.1,9.2-3.7,9.2c5.1,0,9.2-4.1,9.2-9.2S16.2,2,11.1,2z"/>
|
||||
<path class="st3" d="M6.5,16.2h14.7V18H6.5V16.2z"/>
|
||||
<path class="st4" d="M6.5,16.2h14.7V18H6.5V16.2z"/>
|
||||
<path class="st3" d="M21.2,16.6H6.5c-0.5,0-0.9-0.4-0.9-0.9V13c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.7
|
||||
C22.1,16.2,21.7,16.6,21.2,16.6z"/>
|
||||
<path class="st1" d="M21.2,12.1H6.5c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V13
|
||||
C22.1,12.5,21.7,12.1,21.2,12.1z"/>
|
||||
<path class="st5" d="M21.2,16.4H6.5c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-0.2
|
||||
C22.1,16,21.7,16.4,21.2,16.4z"/>
|
||||
<path class="st3" d="M21.2,22.1H6.5c-0.5,0-0.9-0.4-0.9-0.9v-2.7c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.7
|
||||
C22.1,21.7,21.7,22.1,21.2,22.1z"/>
|
||||
<circle class="st6" cx="19.8" cy="19.8" r="0.5"/>
|
||||
<circle class="st6" cx="18" cy="19.8" r="0.5"/>
|
||||
<circle class="st6" cx="16.2" cy="19.8" r="0.5"/>
|
||||
<circle class="st7" cx="7.9" cy="19.8" r="0.9"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="7.336" y1="6.7378" x2="8.3616" y2="5.7121" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st8" cx="7.9" cy="19.8" r="0.9"/>
|
||||
<circle class="st6" cx="19.8" cy="14.3" r="0.5"/>
|
||||
<circle class="st6" cx="18" cy="14.3" r="0.5"/>
|
||||
<circle class="st6" cx="16.2" cy="14.3" r="0.5"/>
|
||||
<path class="st1" d="M21.2,17.6H6.5c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v-0.2
|
||||
C22.1,18,21.7,17.6,21.2,17.6z"/>
|
||||
<path class="st5" d="M21.2,21.9H6.5c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9V21
|
||||
C22.1,21.5,21.7,21.9,21.2,21.9z"/>
|
||||
<circle class="st7" cx="7.9" cy="14.3" r="0.9"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="7.336" y1="12.2373" x2="8.3616" y2="11.2116" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st9" cx="7.9" cy="14.3" r="0.9"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="2.2175" y1="17.461" x2="23.5011" y2="7.5369" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st10" d="M22.1,15.7V13c0-0.5-0.4-0.9-0.9-0.9h-1c0-0.3,0-0.6,0-0.9c0-5.1-4.1-9.2-9.2-9.2S2,6.1,2,11.1
|
||||
c0,3,1.4,5.6,3.7,7.3l0,0v2.7c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-2.7c0-0.5-0.4-0.9-0.9-0.9v-0.9
|
||||
C21.7,16.6,22.1,16.2,22.1,15.7z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
30
addons/cetmix_tower/static/description/cx_logo.svg
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#29A1DC;}
|
||||
.st1{fill:#FFFFFF;}
|
||||
</style>
|
||||
<circle class="st0" cx="100.5" cy="99.8" r="92.2"/>
|
||||
<path class="st1" d="M113.4,127.1c0.6,0.3,0.7,1,0.2,1.5c-3.1,2.8-6.6,5.2-10.3,7.1c-6.6,3.2-13.8,4.8-21,4.7
|
||||
c-7.2-0.3-14.3-2.2-20.4-5.7s-11.3-8.5-15.1-14.4c-3.7-5.9-5.8-12.6-6.4-19.4c-0.4-6.8,0.8-13.7,3.5-19.8c1.5-3,3.1-5.9,5.2-8.5
|
||||
c2.1-2.6,4.5-5,7.1-7c5.2-4,11.4-6.7,17.8-7.8c-6.3,1.5-12.2,4.6-16.9,8.9c-2.4,2.1-4.5,4.5-6.2,7.1c-1.8,2.6-3.1,5.5-4.3,8.4
|
||||
c-2.1,5.9-2.7,12.2-1.9,18.3c0.9,6.1,3.3,11.8,6.8,16.7c3.6,4.8,8.4,8.7,13.7,11.3c5.3,2.5,11.3,3.7,17,3.4c5.8-0.3,11.4-2,16.3-4.9
|
||||
c1.9-1.2,3.8-2.5,5.4-4c0.3-0.3,0.7-0.3,1-0.1L113.4,127.1z"/>
|
||||
<path class="st1" d="M131.5,143.1c0.4,0.4,0.3,1.1-0.1,1.4c-0.2,0.2-0.4,0.4-0.6,0.6c-2.6,2.3-5.4,4.4-8.3,6.3c-2.9,1.9-6,3.5-9.2,5
|
||||
c-3.2,1.4-6.4,2.6-9.8,3.5c-13.3,3.6-27.7,2.9-40.4-1.9c-12.8-4.8-23.8-13.5-31.2-24.7c-7.4-11.1-11-24.4-10.6-37.6
|
||||
c0.4-13.1,5.2-25.9,13.2-36.1c7.9-10.2,19-17.7,31.3-21.2c12.2-3.5,25.4-3.2,37.2,1c5.9,2.1,11.4,5.1,16.3,8.8s9.2,8.2,12.7,13.3
|
||||
c-3.8-4.8-8.3-9-13.4-12.4c-5-3.4-10.6-6-16.4-7.7c-11.6-3.4-24.1-2.9-35.2,1c-11.2,3.9-20.9,11.4-27.5,21
|
||||
c-6.6,9.5-10.1,21-9.8,32.4c0.3,11.4,4.2,22.6,10.9,31.5c6.7,8.9,16.3,15.5,26.7,18.7c10.5,3.3,21.8,3.1,32-0.3
|
||||
c8.1-2.7,15.4-7.4,21.2-13.6c0.4-0.4,1.1-0.5,1.5-0.1c0.6,0.6,1.3,1.3,1.8,1.9C123.8,134,129.5,140.8,131.5,143.1z"/>
|
||||
<path class="st1" d="M171.3,74.2l-35.9,43.7l2,4.1l4.1,8.6c0.7,1.5,0.4,3.3-0.8,4.5l-2.9,2.7c-0.2,0.2-0.4,0.2-0.7,0.2
|
||||
c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1-0.1l-7.9-9.4c-0.8-0.9-1.6-1.8-2.5-2.6c-0.7-0.6-1.3-1.2-2.1-1.8c-1.4-1.1-2.9-2.2-4.6-3
|
||||
c-0.3-0.2-0.5-0.3-0.8-0.4l-9.3-4.8l-1.7-0.9c-0.3-0.2-0.5-0.6-0.3-1l2-3.4c0.9-1.5,2.6-2.2,4.2-1.8l13.8,3.1l14-18.1L112.9,81
|
||||
c-0.4-0.2-0.5-0.7-0.3-1l4.5-5.6c1.8-2.3,4.8-3.4,7.7-3l30.3,5.1l7.5-9.6c1.7-2.2,3.9-3.9,6.4-5l3.5-1.5c0.5-0.2,1-0.2,1.4-0.1
|
||||
c0.3,0.1,0.5,0.2,0.7,0.3l0,0c0.5,0.5,0.9,1.2,0.7,2l-0.6,3.7C174.4,69.2,173.1,71.9,171.3,74.2z"/>
|
||||
<g>
|
||||
<path class="st1" d="M175.6,119.1l-4.5,5.6c-0.2,0.2-0.5,0.3-0.7,0.2c-0.1,0-0.3-0.1-0.4-0.3l-17.3-23.3l13.5-16.1l10.6,25.8
|
||||
C177.9,113.7,177.5,116.8,175.6,119.1z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
63
addons/cetmix_tower/static/description/development.svg
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#D9DBDC;}
|
||||
.st1{opacity:0.1;fill:#010101;enable-background:new ;}
|
||||
.st2{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
|
||||
.st3{fill:#818181;}
|
||||
.st4{fill:url(#SVGID_1_);}
|
||||
.st5{fill:url(#SVGID_2_);}
|
||||
.st6{fill:#333333;}
|
||||
.st7{opacity:5.000000e-02;fill:#FFFFFF;enable-background:new ;}
|
||||
.st8{fill:url(#SVGID_3_);}
|
||||
.st9{fill:url(#SVGID_4_);}
|
||||
.st10{fill:#00425A;}
|
||||
.st11{fill:#27A0DA;}
|
||||
</style>
|
||||
<path class="st0" d="M1.1,14.7v1.8c0,1,0.8,1.8,1.8,1.8h6.4c0,0.7-0.2,1.9-0.6,2.5c-0.2,0.2-0.5,0.3-0.7,0.3s-0.5,0.2-0.5,0.5
|
||||
S7.6,22,7.9,22h8.2c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5c-0.3,0-0.5-0.1-0.7-0.3c-0.5-0.5-0.6-1.7-0.6-2.5h6.4
|
||||
c1,0,1.8-0.8,1.8-1.8v-1.8H1.1z"/>
|
||||
<path class="st1" d="M21.1,18.2H2.9c-1,0-1.8-0.8-1.8-1.8v0.2c0,1,0.8,1.8,1.8,1.8h18.2c1,0,1.8-0.8,1.8-1.8v-0.3
|
||||
C22.9,17.3,22.1,18.2,21.1,18.2z"/>
|
||||
<path class="st2" d="M7.9,21.3h8.2c0.2,0,0.4,0.2,0.5,0.4v-0.1c0-0.3-0.2-0.5-0.5-0.5H7.9c-0.3-0.1-0.5,0.1-0.5,0.4v0.1
|
||||
C7.6,21.4,7.7,21.3,7.9,21.3z"/>
|
||||
<path class="st3" d="M12,17.7c-0.4,0-0.6-0.4-0.6-0.7c0-0.4,0.3-0.6,0.6-0.6s0.6,0.4,0.6,0.7C12.6,17.3,12.4,17.6,12,17.7z"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="11.3652" y1="-732.7223" x2="12.6001" y2="-733.298" gradientTransform="matrix(1 0 0 -1 0 -716)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st4" d="M12,17.7c-0.4,0-0.6-0.4-0.6-0.7c0-0.4,0.3-0.6,0.6-0.6s0.6,0.4,0.6,0.7C12.6,17.3,12.4,17.6,12,17.7z"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="10.8905" y1="-733.225" x2="14.6633" y2="-736.9988" gradientTransform="matrix(1 0 0 -1 0 -716)">
|
||||
<stop offset="0" style="stop-color:#010101;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#010101;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st5" d="M15.4,20.8c-0.5-0.5-0.6-1.7-0.6-2.5H9.3l2.7,2.7h4.1C15.8,21.1,15.5,21,15.4,20.8z"/>
|
||||
<path class="st6" d="M22.9,3.8c0-1-0.8-1.8-1.8-1.8H2.9c-1,0-1.8,0.8-1.8,1.8v11.8h21.8V3.8z"/>
|
||||
<path class="st7" d="M2.9,2.3h18.2c1,0,1.8,0.8,1.8,1.8V3.8c0-1-0.8-1.8-1.8-1.8H2.9c-1,0-1.8,0.8-1.8,1.8v0.3
|
||||
C1.1,3,1.9,2.3,2.9,2.3z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.2378" y1="-721.2634" x2="23.3135" y2="-732.0244" gradientTransform="matrix(1 0 0 -1 0 -716)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st8" d="M21.1,2H2.9c-1,0-1.8,0.8-1.8,1.8v12.7c0,1,0.8,1.8,1.8,1.8h6.4c0,0.7-0.2,1.9-0.6,2.5
|
||||
c-0.2,0.2-0.5,0.3-0.7,0.3s-0.5,0.2-0.5,0.5S7.6,22,7.9,22h8.2c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5c-0.3,0-0.5-0.1-0.7-0.3
|
||||
c-0.5-0.5-0.6-1.7-0.6-2.5h6.4c1,0,1.8-0.8,1.8-1.8V3.8C22.9,2.8,22.1,2,21.1,2z"/>
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="1.7228" y1="746.1478" x2="22.4117" y2="755.7944" gradientTransform="matrix(1 0 0 1 0 -742)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st9" d="M22,3.7c0-0.5-0.4-0.8-0.7-0.8H2.7C2.4,2.9,2,3.3,2,3.7v11h20V3.7z"/>
|
||||
<path class="st10" d="M6.7,13.8c-0.3,0-0.5-0.1-0.6-0.3c-0.4-0.4-0.4-1,0-1.4l3.1-3.1L6.1,5.9c-0.4-0.4-0.4-1,0-1.4
|
||||
c0.4-0.4,1-0.4,1.4,0l3.8,3.8c0.4,0.4,0.4,1,0,1.4l-3.8,3.8C7.3,13.7,7,13.8,6.7,13.8z M17.3,13.8h-4.7c-0.5,0-0.9-0.5-0.9-0.9
|
||||
s0.5-0.9,0.9-0.9h4.7c0.5,0,0.9,0.5,0.9,0.9S17.7,13.8,17.3,13.8z"/>
|
||||
<g>
|
||||
<path class="st11" d="M6.7,13.3c-0.3,0-0.5-0.1-0.6-0.3c-0.4-0.4-0.4-1,0-1.4l3.1-3.1L6.1,5.4c-0.4-0.4-0.4-1,0-1.4
|
||||
c0.4-0.4,1-0.4,1.4,0l3.8,3.8c0.4,0.4,0.4,1,0,1.4l-3.8,3.8C7.3,13.2,7,13.3,6.7,13.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st11" d="M17.3,13.3h-4.7c-0.5,0-0.9-0.5-0.9-0.9c0-0.5,0.5-0.9,0.9-0.9h4.7c0.5,0,0.9,0.5,0.9,0.9
|
||||
S17.7,13.3,17.3,13.3z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
63
addons/cetmix_tower/static/description/files.svg
Normal file
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#303C42;}
|
||||
.st1{opacity:0.1;enable-background:new ;}
|
||||
.st2{opacity:0.2;enable-background:new ;}
|
||||
.st3{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
|
||||
.st4{fill:#428EB3;}
|
||||
.st5{fill:#C6CDD1;}
|
||||
.st6{fill:url(#SVGID_1_);}
|
||||
.st7{fill:url(#SVGID_2_);}
|
||||
.st8{fill:#29A1DC;}
|
||||
.st9{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
|
||||
.st10{fill:url(#SVGID_3_);}
|
||||
</style>
|
||||
<path class="st0" d="M2,7.5h18.2v2.7H2V7.5z"/>
|
||||
<path class="st1" d="M2,7.5h18.2v2.7H2V7.5z"/>
|
||||
<path class="st0" d="M1.1,3.8v3.6C1.1,8,1.5,8.4,2,8.4h18.2c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
C1.5,2.9,1.1,3.3,1.1,3.8z"/>
|
||||
<path class="st2" d="M20.2,8.1H2c-0.5,0-0.9-0.4-0.9-0.9v0.2C1.1,8,1.5,8.4,2,8.4h18.2c0.5,0,0.9-0.4,0.9-0.9V7.2
|
||||
C21.1,7.7,20.7,8.1,20.2,8.1z"/>
|
||||
<path class="st3" d="M20.2,2.9H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9V3.8
|
||||
C21.1,3.3,20.7,2.9,20.2,2.9z"/>
|
||||
<circle class="st4" cx="17.9" cy="5.6" r="0.5"/>
|
||||
<circle class="st4" cx="16.1" cy="5.6" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="5.6" r="0.5"/>
|
||||
<circle class="st5" cx="4.7" cy="5.6" r="0.9"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="4.1628" y1="20.9292" x2="5.1788" y2="19.9133" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st6" cx="4.7" cy="5.6" r="0.9"/>
|
||||
<path class="st0" d="M1.1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-3.6c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
C1.5,9.3,1.1,9.7,1.1,10.2z"/>
|
||||
<path class="st2" d="M20.2,14.5H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-0.2
|
||||
C21.1,14.1,20.7,14.5,20.2,14.5z"/>
|
||||
<path class="st3" d="M20.2,9.3H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9v-0.2
|
||||
C21.1,9.7,20.7,9.3,20.2,9.3z"/>
|
||||
<circle class="st4" cx="17.9" cy="12" r="0.5"/>
|
||||
<circle class="st4" cx="16.1" cy="12" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="12" r="0.5"/>
|
||||
<circle class="st5" cx="4.7" cy="12" r="0.9"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="4.1628" y1="14.5738" x2="5.1788" y2="13.5578" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st7" cx="4.7" cy="12" r="0.9"/>
|
||||
<path class="st8" d="M22.4,13.8h-4.4l-0.9-0.9h-3.8c-0.3,0-0.5,0.2-0.5,0.5v7.3c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5
|
||||
v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
|
||||
<path class="st9" d="M22.4,13.8h-4.4l-0.9-0.9h-3.8c-0.3,0-0.5,0.2-0.5,0.5v0.2c0-0.3,0.2-0.5,0.5-0.5h3.8l0.9,0.9h4.4
|
||||
c0.3,0,0.5,0.2,0.5,0.5v-0.2C22.9,14,22.7,13.8,22.4,13.8z"/>
|
||||
<path class="st1" d="M22.4,20.9h-9.1c-0.3,0-0.5-0.2-0.5-0.5v0.2c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5v-0.2
|
||||
C22.9,20.6,22.7,20.9,22.4,20.9z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.7043" y1="21.5139" x2="25.1518" y2="10.1132" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st10" d="M22.4,13.8h-1.4v-3.6c0-0.5-0.4-0.9-0.9-0.9V8.4c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
c-0.5,0-0.9,0.4-0.9,0.9v3.6C1.1,8,1.5,8.4,2,8.4v0.9c-0.5,0-0.9,0.4-0.9,0.9v3.6c0,0.5,0.4,0.9,0.9,0.9h10.9v5.9
|
||||
c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
BIN
addons/cetmix_tower/static/description/files_1.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
addons/cetmix_tower/static/description/files_2.png
Normal file
|
After Width: | Height: | Size: 245 KiB |
BIN
addons/cetmix_tower/static/description/files_3.png
Normal file
|
After Width: | Height: | Size: 281 KiB |
380
addons/cetmix_tower/static/description/flight-plan.svg
Normal file
@@ -0,0 +1,380 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;}
|
||||
.st1{fill:#173E51;}
|
||||
.st2{fill:#51BCF0;}
|
||||
.st3{fill:#29A1DC;}
|
||||
.st4{fill:#1381B7;}
|
||||
.st5{fill:#D1D6D8;}
|
||||
.st6{fill:#C0C2C3;}
|
||||
.st7{fill:url(#SVGID_24_);}
|
||||
.st8{fill:#CECECE;}
|
||||
.st9{fill:#727272;}
|
||||
.st10{fill:url(#SVGID_25_);}
|
||||
.st11{fill:url(#SVGID_26_);}
|
||||
.st12{fill:url(#SVGID_27_);}
|
||||
.st13{fill:url(#SVGID_28_);}
|
||||
.st14{fill:url(#SVGID_29_);}
|
||||
.st15{fill:url(#SVGID_30_);}
|
||||
.st16{fill:url(#SVGID_31_);}
|
||||
.st17{fill:url(#SVGID_32_);}
|
||||
.st18{fill:url(#SVGID_33_);}
|
||||
.st19{fill:url(#SVGID_34_);}
|
||||
.st20{fill:url(#SVGID_35_);}
|
||||
.st21{fill:url(#SVGID_36_);}
|
||||
.st22{fill:url(#SVGID_37_);}
|
||||
.st23{fill:url(#SVGID_38_);}
|
||||
.st24{fill:url(#SVGID_39_);}
|
||||
.st25{fill:url(#SVGID_40_);}
|
||||
.st26{fill:url(#SVGID_41_);}
|
||||
.st27{fill:url(#SVGID_42_);}
|
||||
.st28{fill:url(#SVGID_43_);}
|
||||
.st29{fill:url(#SVGID_44_);}
|
||||
.st30{fill:url(#SVGID_45_);}
|
||||
.st31{fill:url(#SVGID_46_);}
|
||||
</style>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_1_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_10_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_11_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_12_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_13_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_14_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_15_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_16_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_17_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_18_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_19_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_2_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st3" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_20_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st3" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_21_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st4" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_22_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st5" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_23_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_3_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st4" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_4_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_5_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st5" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_6_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st6" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_7_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_8_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<g>
|
||||
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
|
||||
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_9_" viewBox="0 -99 103.5 99" style="overflow:visible;">
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<g>
|
||||
<rect y="-99" class="st0" width="103.5" height="99"/>
|
||||
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
|
||||
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
|
||||
</g>
|
||||
</g>
|
||||
</pattern>
|
||||
<pattern id="SVGID_24_" xlink:href="#SVGID_1_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st7" d="M15.9,4.3h-1.6V4c0-0.4-0.3-0.7-0.8-0.7h-1.6c-0.1,0-0.2,0-0.2-0.1c0-0.1,0-0.3-0.1-0.4
|
||||
c-0.2-0.5-0.7-0.9-1.3-0.9C9.9,1.8,9.4,2,9,2.3c-0.3,0.3-0.5,0.6-0.5,1c0,0,0,0,0,0c0,0-0.1,0-0.1,0H6.8C6.4,3.3,6,3.6,6,4v0.3H4.5
|
||||
C3.7,4.3,3,4.9,3,5.8v14.6c0,0.8,0.7,1.5,1.5,1.5h11.4c0.8,0,1.5-0.7,1.5-1.5V5.8C17.4,4.9,16.7,4.3,15.9,4.3z M6.7,4
|
||||
c0,0,0.1-0.1,0.2-0.1h1.6c0.2,0,0.4-0.1,0.6-0.2c0.1-0.1,0.2-0.3,0.2-0.5l0,0c0-0.2,0.1-0.3,0.3-0.5c0.3-0.2,0.6-0.3,0.9-0.3
|
||||
c0.3,0.1,0.7,0.3,0.8,0.6c0,0.1,0,0.1,0,0.2c0,0.2,0.1,0.3,0.2,0.4c0.2,0.2,0.3,0.3,0.6,0.3h1.6c0.1,0,0.2,0.1,0.2,0.1v1.2
|
||||
c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1C6.7,5.2,6.7,4,6.7,4z M16.8,20.4c0,0.5-0.4,0.9-0.9,0.9H4.5c0,0-0.1,0-0.1,0
|
||||
s0,0-0.1,0s-0.1,0-0.1,0c0,0-0.1,0-0.1,0S4,21.2,4,21.1c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0,0,0-0.1-0.1-0.1
|
||||
c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.1-0.3-0.1-0.4V5.8c0-0.5,0.4-0.9,0.9-0.9h1.6v0.3c0,0.4,0.3,0.7,0.8,0.7h6.7c0.4,0,0.8-0.3,0.8-0.7
|
||||
V4.9h1.6c0.2,0,0.3,0,0.4,0.1l0,0c0.1,0,0.1,0.1,0.2,0.1c0,0,0,0,0.1,0.1c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1
|
||||
c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1s0,0,0,0.1s0,0.1,0,0.1L16.8,20.4L16.8,20.4z"/>
|
||||
<path class="st8" d="M16.8,5.7C16.8,5.7,16.8,5.7,16.8,5.7c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.1c0,0,0-0.1-0.1-0.1
|
||||
c0-0.1-0.1-0.1-0.1-0.2C16.5,5.1,16.4,5,16.3,5l0,0c-0.1-0.1-0.3-0.1-0.4-0.1h-1.6v0.3c0,0.4-0.3,0.7-0.8,0.7H6.8
|
||||
c-0.4,0-0.8-0.3-0.8-0.7V4.9H4.5C4,4.9,3.6,5.3,3.6,5.8v14.6c0,0.2,0,0.3,0.1,0.4c0,0,0,0.1,0.1,0.1c0,0.1,0,0.1,0.1,0.1
|
||||
c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0,0.1,0.1c0.1,0,0.1,0,0.1,0.1c0,0,0.1,0,0.1,0s0,0,0.1,0s0.1,0,0.1,0h11.4
|
||||
c0.5,0,0.9-0.4,0.9-0.9L16.8,5.7C16.8,5.7,16.8,5.7,16.8,5.7z M4.6,6.9c0-0.2,0.1-0.3,0.3-0.3h10.7c0.2,0,0.3,0.1,0.3,0.3v13.3
|
||||
c0,0.2-0.1,0.3-0.3,0.3H4.8c-0.2,0-0.3-0.1-0.3-0.3L4.6,6.9L4.6,6.9z"/>
|
||||
<path class="st9" d="M16.8,5.8v14.6c0,0.5-0.4,0.9-0.9,0.9H4.5c-0.3,0-0.7-0.2-0.8-0.5c0.1,0.1,0.3,0.1,0.4,0.1h11.4
|
||||
c0.5,0,0.9-0.4,0.9-0.9V5.4c0-0.2,0-0.3-0.1-0.4C16.6,5.1,16.8,5.4,16.8,5.8z"/>
|
||||
<pattern id="SVGID_25_" xlink:href="#SVGID_2_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st10" d="M13.7,4v1.2c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1V4c0,0,0.1-0.1,0.2-0.1h1.6c0.2,0,0.4-0.1,0.6-0.2
|
||||
c0.1-0.1,0.2-0.3,0.2-0.5l0,0c0-0.2,0.1-0.3,0.3-0.5c0.3-0.2,0.6-0.3,0.9-0.3c0.3,0.1,0.7,0.3,0.8,0.6c0,0.1,0,0.1,0,0.2
|
||||
c0,0.2,0.1,0.3,0.2,0.4c0.2,0.2,0.3,0.3,0.6,0.3L13.7,4C13.7,3.9,13.7,4,13.7,4z"/>
|
||||
<pattern id="SVGID_26_" xlink:href="#SVGID_3_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st11" d="M13.7,4v1.2c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1V4.8H13c0.1,0,0.2,0,0.2-0.1V3.9h0.4
|
||||
C13.7,3.9,13.7,4,13.7,4z"/>
|
||||
<pattern id="SVGID_27_" xlink:href="#SVGID_4_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st12" d="M15.5,6.6H4.8c-0.2,0-0.3,0.1-0.3,0.3v13.3c0,0.2,0.1,0.3,0.3,0.3h10.7c0.2,0,0.3-0.1,0.3-0.3V6.9
|
||||
C15.9,6.7,15.7,6.6,15.5,6.6L15.5,6.6z M15.2,19.9H5.2V7.2h10.1V19.9z"/>
|
||||
<pattern id="SVGID_28_" xlink:href="#SVGID_5_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st13" d="M5.2,7.2v12.7h10.1V7.2H5.2z M8.6,18.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
|
||||
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V18.8z M8.6,15.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
|
||||
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V15.8z M8.6,12.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
|
||||
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V12.8z M8.6,9.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3V8.2
|
||||
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V9.8z M13.6,18.4H9.5c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3h4.1
|
||||
c0.2,0,0.3,0.1,0.3,0.3C13.9,18.2,13.7,18.4,13.6,18.4z M13.6,15.4H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
|
||||
c0.2,0,0.3,0.1,0.3,0.3S13.7,15.4,13.6,15.4z M13.6,12.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1c0.2,0,0.3,0.1,0.3,0.3
|
||||
S13.7,12.3,13.6,12.3z M13.6,9.3H9.5C9.3,9.3,9.2,9.2,9.2,9c0-0.2,0.1-0.3,0.3-0.3h4.1c0.2,0,0.3,0.1,0.3,0.3
|
||||
C13.9,9.2,13.7,9.3,13.6,9.3z"/>
|
||||
<pattern id="SVGID_29_" xlink:href="#SVGID_6_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st14" d="M15.2,7.2v12.7H5.2v-0.6h9.5V7.2H15.2z"/>
|
||||
<pattern id="SVGID_30_" xlink:href="#SVGID_7_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st15" d="M8.3,8H6.8C6.7,8,6.5,8.1,6.5,8.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3V8.3
|
||||
C8.6,8.1,8.5,8,8.3,8z M8,9.5H7.1V8.6H8V9.5z"/>
|
||||
<pattern id="SVGID_31_" xlink:href="#SVGID_8_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st16" d="M7.1,8.6H8v0.9H7.1V8.6z"/>
|
||||
<pattern id="SVGID_32_" xlink:href="#SVGID_9_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st17" d="M8.3,11H6.8c-0.2,0-0.3,0.1-0.3,0.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
|
||||
C8.6,11.1,8.5,11,8.3,11z M8,12.5H7.1v-0.9H8V12.5z"/>
|
||||
<pattern id="SVGID_33_" xlink:href="#SVGID_10_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st18" d="M7.1,11.6H8v0.9H7.1V11.6z"/>
|
||||
<pattern id="SVGID_34_" xlink:href="#SVGID_11_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st19" d="M8.3,14H6.8c-0.2,0-0.3,0.1-0.3,0.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
|
||||
C8.6,14.2,8.5,14,8.3,14z M8,15.5H7.1v-0.9H8V15.5z"/>
|
||||
<pattern id="SVGID_35_" xlink:href="#SVGID_12_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st20" d="M7.1,14.6H8v0.9H7.1V14.6z"/>
|
||||
<pattern id="SVGID_36_" xlink:href="#SVGID_13_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st21" d="M8.3,17H6.8c-0.2,0-0.3,0.1-0.3,0.3l0,0v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
|
||||
C8.6,17.2,8.5,17,8.3,17z M8,18.6H7.1v-0.9H8V18.6z"/>
|
||||
<pattern id="SVGID_37_" xlink:href="#SVGID_14_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st22" d="M7.1,17.7H8v0.9H7.1V17.7z"/>
|
||||
<pattern id="SVGID_38_" xlink:href="#SVGID_15_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st23" d="M13.9,9c0,0.2-0.1,0.3-0.3,0.3H9.5C9.3,9.3,9.2,9.2,9.2,9c0-0.2,0.1-0.3,0.3-0.3h4.1C13.7,8.7,13.9,8.9,13.9,9
|
||||
z"/>
|
||||
<pattern id="SVGID_39_" xlink:href="#SVGID_16_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st24" d="M13.9,12.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
|
||||
C13.7,11.7,13.9,11.9,13.9,12.1z"/>
|
||||
<pattern id="SVGID_40_" xlink:href="#SVGID_17_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st25" d="M13.9,15.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
|
||||
C13.7,14.8,13.9,14.9,13.9,15.1z"/>
|
||||
<pattern id="SVGID_41_" xlink:href="#SVGID_18_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st26" d="M13.9,18.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3h4.1
|
||||
C13.7,17.8,13.9,17.9,13.9,18.1z"/>
|
||||
<pattern id="SVGID_42_" xlink:href="#SVGID_19_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
|
||||
</pattern>
|
||||
<path class="st27" d="M21,19.3C21,19.3,20.9,19.3,21,19.3l0-9.4l0,0v0c0,0,0-0.1,0-0.1l0,0l-1-2.3c-0.1-0.1-0.2-0.2-0.3-0.2
|
||||
s-0.2,0.1-0.3,0.2l-0.9,2.3l0,0c0,0,0,0,0,0.1s0,0,0,0.1l0,0l0,10.7c0,0.7,0.6,1.3,1.3,1.3l0,0h0.1c0.3,0,0.6-0.1,0.9-0.4
|
||||
c0.2-0.2,0.4-0.5,0.4-0.9V19.3C20.9,19.3,20.9,19.3,21,19.3z M19.6,8.4l0.5,1.3h-1L19.6,8.4z M20.3,10.2l0,8.8H19l0-8.8
|
||||
C19,10.3,20.3,10.2,20.3,10.2z M20.2,21.1c-0.1,0.1-0.3,0.2-0.4,0.2h-0.1c-0.2,0-0.3-0.1-0.4-0.2S19,20.8,19,20.7v-1h1.3v1
|
||||
C20.4,20.8,20.3,21,20.2,21.1z"/>
|
||||
<pattern id="SVGID_43_" xlink:href="#SVGID_20_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st28" d="M20.4,19H19l0-8.8h1.3L20.4,19z"/>
|
||||
<pattern id="SVGID_44_" xlink:href="#SVGID_21_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st29" d="M20.4,19H19v-0.4h1.1l0-8.4h0.3L20.4,19z"/>
|
||||
<pattern id="SVGID_45_" xlink:href="#SVGID_22_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st30" d="M20.2,9.7h-1l0.5-1.3L20.2,9.7z"/>
|
||||
<pattern id="SVGID_46_" xlink:href="#SVGID_23_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
|
||||
</pattern>
|
||||
<path class="st31" d="M20.4,20.6c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2h-0.1c-0.2,0-0.3-0.1-0.4-0.2
|
||||
c-0.1-0.1-0.2-0.3-0.2-0.4v-1h1.3V20.6z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
BIN
addons/cetmix_tower/static/description/flight_plan_1.png
Normal file
|
After Width: | Height: | Size: 302 KiB |
BIN
addons/cetmix_tower/static/description/flight_plan_2.png
Normal file
|
After Width: | Height: | Size: 355 KiB |
BIN
addons/cetmix_tower/static/description/flight_plan_3.png
Normal file
|
After Width: | Height: | Size: 351 KiB |
55
addons/cetmix_tower/static/description/git.svg
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#29A1DC;}
|
||||
.st1{clip-path:url(#SVGID_2_);fill:#7DBCE7;}
|
||||
.st2{fill:#010101;}
|
||||
.st3{fill:#F5CCB3;}
|
||||
.st4{fill:#FFFFFF;}
|
||||
.st5{fill:#AF5C51;}
|
||||
.st6{fill:#C4E5D9;}
|
||||
</style>
|
||||
<path class="st0" d="M18.6,19.8c0,1.3-2.9,2.3-6.5,2.3s-6.5-1-6.5-2.3c0-1.3,2.9-2.3,6.5-2.3S18.6,18.5,18.6,19.8z"/>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_1_" d="M9.3,23.8c0.1,0.7,0.5,1.1,0.8,1.3h3.7c0.5-0.3,0.9-0.9,0.9-2v-2.8c0,0,0.1-0.7,0.7-0.9c0,0,0.4-0.3,0-0.4
|
||||
c0,0-1.8-0.1-1.8,1.3v2.1c0,0,0.1,0.8-0.3,1.1V21c0,0,0-0.8,0.5-1.2c0,0,0.3-0.5-0.3-0.4c0,0-1.2,0.2-1.3,1.6l0,2.7h-0.3l0-2.7
|
||||
c-0.1-1.4-1.3-1.6-1.3-1.6c-0.6-0.1-0.3,0.4-0.3,0.4c0.4,0.3,0.5,1.2,0.5,1.2v2.7c-0.4-0.3-0.3-1.1-0.3-1.1v-2.1
|
||||
c0-1.4-1.8-1.3-1.8-1.3c-0.4,0.1,0,0.4,0,0.4c0.6,0.2,0.7,0.9,0.7,0.9v2L9.3,23.8L9.3,23.8z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_2_">
|
||||
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
|
||||
</clipPath>
|
||||
<path class="st1" d="M18.6,19.8c0,1.3-2.9,2.3-6.5,2.3s-6.5-1-6.5-2.3c0-1.3,2.9-2.3,6.5-2.3S18.6,18.5,18.6,19.8z"/>
|
||||
</g>
|
||||
<path class="st0" d="M4.7,13.1l-0.2,0.6c0,0,0,0.2,0.2,0.3c0.2,0,0.2-0.2,0.2-0.3L4.7,13.1L4.7,13.1z"/>
|
||||
<path class="st2" d="M23.5,10.4L23.5,10.4c-1.9-0.5-3.8-0.5-5-0.4c0.2-0.7,0.3-1.5,0.3-2.4c0-1.3-0.5-2.3-1.3-3.1
|
||||
C17.6,4,17.8,3,17.3,1.8c0,0-0.9-0.3-2.9,1.1c-0.8-0.2-1.6-0.3-2.5-0.3c-0.9,0-1.8,0.1-2.7,0.4c-2.1-1.4-3-1.1-3-1.1
|
||||
C5.7,3.3,6,4.4,6.1,4.6C5.4,5.4,5,6.4,5,7.6c0,0.9,0.1,1.7,0.4,2.4c-1.2,0-3.1,0-4.9,0.3l0,0.1C2.3,10,4.2,10,5.4,10
|
||||
c0.1,0.1,0.1,0.3,0.2,0.4c-1.2,0-3.2,0.2-5.1,0.7l0,0.1c1.9-0.5,3.9-0.7,5.1-0.7c0.7,1.3,2.1,2.1,4.5,2.4c-0.4,0.2-0.7,0.6-0.8,1.3
|
||||
c-0.5,0.2-2,0.8-2.9-0.8c0,0-0.5-0.9-1.5-1c0,0-0.9,0-0.1,0.6c0,0,0.6,0.3,1.1,1.4c0,0,0.6,1.9,3.3,1.3v1.9c0,0-0.1,0.7-0.7,0.9
|
||||
c0,0-0.4,0.3,0,0.4c0,0,1.8,0.1,1.8-1.3v-2.1c0,0-0.1-0.8,0.3-1.1V18c0,0,0,0.8-0.5,1.2c0,0-0.3,0.5,0.3,0.4c0,0,1.2-0.2,1.3-1.6
|
||||
l0-3.5h0.3l0,3.5c0.1,1.4,1.3,1.6,1.3,1.6c0.6,0.1,0.3-0.4,0.3-0.4c-0.4-0.3-0.5-1.2-0.5-1.2v-3.5c0.4,0.3,0.3,1.1,0.3,1.1v2.1
|
||||
c0,1.4,1.8,1.3,1.8,1.3c0.4-0.1,0-0.4,0-0.4c-0.6-0.2-0.7-0.9-0.7-0.9v-2.8c0-1.1-0.5-1.7-0.9-2c2.6-0.3,3.9-1.1,4.4-2.4
|
||||
c1.1,0,3.2,0.2,5.2,0.7l0-0.1c-2-0.6-4-0.7-5.2-0.7c0.1-0.1,0.1-0.3,0.1-0.4C19.7,10,21.6,10,23.5,10.4L23.5,10.4z"/>
|
||||
<path class="st3" d="M16.2,7.5c0.6,0.5,0.9,1.1,0.9,1.8c0,3.1-2.3,3.2-5.2,3.2S6.8,12,6.8,9.3c0-0.7,0.3-1.3,0.9-1.8
|
||||
c0.9-0.8,2.5-0.4,4.3-0.4S15.3,6.6,16.2,7.5L16.2,7.5z"/>
|
||||
<path class="st4" d="M10.2,9.4c0,0.9-0.5,1.5-1.1,1.5s-1.1-0.7-1.1-1.5c0-0.9,0.5-1.5,1.1-1.5C9.7,7.9,10.2,8.6,10.2,9.4z"/>
|
||||
<path class="st5" d="M9.9,9.5c0,0.6-0.3,1-0.7,1c-0.4,0-0.7-0.5-0.7-1c0-0.6,0.3-1,0.7-1C9.6,8.4,9.9,8.9,9.9,9.5z"/>
|
||||
<path class="st4" d="M16,9.4c0,0.9-0.5,1.5-1.1,1.5c-0.6,0-1.1-0.7-1.1-1.5c0-0.9,0.5-1.5,1.1-1.5C15.5,7.9,16,8.6,16,9.4z"/>
|
||||
<path class="st5" d="M15.6,9.5c0,0.6-0.3,1-0.7,1c-0.4,0-0.7-0.5-0.7-1c0-0.6,0.3-1,0.7-1C15.3,8.4,15.6,8.9,15.6,9.5z M12.2,10.8
|
||||
c0,0.1-0.1,0.3-0.3,0.3c-0.1,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3C12.1,10.5,12.2,10.7,12.2,10.8z M11.3,11.5c0,0,0-0.1,0.1-0.1
|
||||
c0,0,0.1,0,0.1,0.1c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.3c0,0,0.1-0.1,0.1-0.1c0,0,0.1,0.1,0.1,0.1
|
||||
c-0.1,0.3-0.3,0.4-0.6,0.4C11.7,11.9,11.4,11.8,11.3,11.5L11.3,11.5z"/>
|
||||
<path class="st6" d="M5.4,12.7c0,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.2-0.1-0.2-0.1s0.1-0.1,0.2-0.1C5.3,12.6,5.4,12.6,5.4,12.7z M5.9,13
|
||||
c0,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.2-0.1-0.2-0.1s0.1-0.1,0.2-0.1C5.8,12.9,5.9,12.9,5.9,13z M6.2,13.4c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.1,13.3,6.2,13.3,6.2,13.4z M6.5,13.8c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.4,13.7,6.5,13.7,6.5,13.8z M6.8,14.2c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.7,14.1,6.8,14.1,6.8,14.2z M7.2,14.6c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C7.2,14.4,7.2,14.5,7.2,14.6z M7.8,14.8c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C7.8,14.7,7.8,14.7,7.8,14.8z M8.5,14.8c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C8.4,14.7,8.5,14.7,8.5,14.8z M9.1,14.7c0,0.1-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C9,14.6,9.1,14.6,9.1,14.7z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
BIN
addons/cetmix_tower/static/description/git_1.png
Normal file
|
After Width: | Height: | Size: 318 KiB |
BIN
addons/cetmix_tower/static/description/git_2.png
Normal file
|
After Width: | Height: | Size: 460 KiB |
BIN
addons/cetmix_tower/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
690
addons/cetmix_tower/static/description/index.html
Normal file
@@ -0,0 +1,690 @@
|
||||
<section class="oe_container custom_style description-odoo-font">
|
||||
<div id="wrap" class="oe_structure oe_empty">
|
||||
<section class="s_text_block o_colored_level pb120 pt168 oe_img_bg o_bg_img_center" data-snippet="s_text_block" data-name="Text" style="background-image: url('tower_website.svg'); position: relative;">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px" data-bs-original-title="" title="" aria-describedby="tooltip483440">
|
||||
<strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> What is Cetmix Tower?
|
||||
<br/>
|
||||
</h2>
|
||||
<p style="font-size: 18px; font-weight:300">
|
||||
<b>Cetmix Tower</b> is an <b>open-source</b> DevOps framework built on Odoo. <br/><br/>
|
||||
It empowers you to deploy, manage, and automate applications <b>directly from Odoo</b> whether it's Odoo itself, WordPress, ERPNext or Magento.<br/><br/>
|
||||
Unlike traditional hosting platforms, Cetmix Tower is <b>not tied to any specific technology</b>. You can use it with Docker, Kubernetes, a bare operating system or whatever your infrastructure requires.<br/><br/>
|
||||
Fully <b>self-hosted</b> and deeply integrated with the Odoo ecosystem, it gives you complete control over your servers and applications. <br/><br/>
|
||||
<b>Cetmix Tower</b> is distributed under the <b>AGPL-3 license</b>, ensuring transparency and freedom.
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<img src="cetmix_tower_server_kanban.png" alt="" class="img img-fluid o_we_custom_image" data-original-id="1256" data-original-src="cetmix_tower_server_kanban.png" data-mimetype="image/png" style="width: 100% !important;" loading="eager"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="s_text_image pb32 o_colored_level o_cc o_cc1" data-snippet="s_image_text" style="color: #343A40;" data-name="Custom Image - Text (2)" data-bs-original-title="" title="" aria-describedby="tooltip882751">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-6 table-responsive">
|
||||
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px"> <strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Key Differences</h2>
|
||||
<!-- Bootstrap 5 CSS -->
|
||||
<table class="table table-striped align-middle border">
|
||||
<thead>
|
||||
<tr class="align-middle">
|
||||
<th class="text-center"> </th>
|
||||
<th class="text-center"><b>Cetmix Tower</b></th>
|
||||
<th class="text-center">Odoo.sh</th>
|
||||
<th class="text-center">Other Odoo Hosting</th>
|
||||
<th class="text-center">Generic DevOps Tools</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="text-start">Can Deploy Odoo Enterprise</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Can Deploy Odoo Community</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Can Deploy Other Software besides Odoo</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Runs on Your Own Server</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center">Some*</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Native Odoo App</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Export/Import & Share Configurations</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center">Some*</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="text-start">Is Open Source</td>
|
||||
<td class="text-center"><i class="fa fa-check text-success"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
|
||||
<td class="text-center">Some*</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="small text-muted">* depends on the tool</p>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px"> <strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Why Cetmix Tower?</h2>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li><strong>Easy to use for non-technical users:</strong> Deploy a server or run a multi-step scenario with a single click in the UI.</li>
|
||||
<li><strong>Power and flexibility for technical users:</strong> Leverage powerful features to build complex workflows and automate server and application management tasks.</li>
|
||||
<li><strong>Not limited to a single technology:</strong> Run any software manageable via shell commands or API, whether you're using Docker, Kubernetes, or direct OS commands.</li>
|
||||
<li><strong>Odoo Integration:</strong> Take advantage of the Odoo ecosystem for server management tasks. Integrate with Sales, Accounting, Subscriptions, Helpdesk, or any other Odoo module.</li>
|
||||
<li><strong>Not limited to Odoo:</strong> While optimized for Odoo, Cetmix Tower can manage virtually any software.</li>
|
||||
<li><strong>Extensibility:</strong> Develop your own Odoo modules based on Cetmix Tower to implement custom features.</li>
|
||||
<li><strong>Self-Hosting:</strong> Deploy Cetmix Tower on your own infrastructure for complete control over your server and application management.</li>
|
||||
<li><strong>Open Source:</strong> Cetmix Tower is distributed under the AGPL-3 license, ensuring transparency and freedom.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h2 class="pb32" style="color: #0D3045; font-weight: 500; font-size: 48px"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> Core Features</h2>
|
||||
<div class="container">
|
||||
<div class="pt32" style="margin-left: 40px; background-color:#0D3045; border-radius: 40px; padding: 24px;">
|
||||
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Note</p>
|
||||
<p class="card-text text-800 pb32" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">Cetmix Tower is designed with usability and simplicity in mind, though some features might require a foundational understanding of server management principles</p>
|
||||
<h4 style="font-size: 24px; color: #ffffff; font-weight: 200;">
|
||||
For documentation please check <strong style="font-size: 32px; font-weight: 800; color: #29A1DC;"> | </strong> <a href="https://tower.cetmix.com" style="color: #29A1DC;"> tower.cetmix.com</a>
|
||||
</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="self-host.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Server Management</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Variable-based flexible configuration</li>
|
||||
<li>Create Servers using pre-defined Server Templates</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="server_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="server_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Server Management"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
<img
|
||||
src="server_template_form.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1242"
|
||||
data-original-src="server_template_form.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
data-bs-original-title=""
|
||||
title="Server Management"
|
||||
aria-describedby="tooltip990969"
|
||||
loading="eager"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="server_form_configuration.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-id="1225"
|
||||
data-original-src="server_form_configuration.png"
|
||||
data-mimetype="image/png"
|
||||
title="Server Management"
|
||||
aria-describedby="tooltip997009"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="connectivity.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Connectivity</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Password and key-based authentication for outgoing SSH connections</li>
|
||||
<li>Built-in support of the Python requests library for outgoing API calls</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="development.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Commands</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Execute SSH Commands on remote servers</li>
|
||||
<li>Run Python Commands on the Tower Odoo server</li>
|
||||
<li>Run Flight Plan from command</li>
|
||||
<li>Render commands using Variables</li>
|
||||
<li>Secrets/Keys for private data storage</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="commands_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="commands_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Commands"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="commands_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-id="1225"
|
||||
data-original-src="commands_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Commands"
|
||||
aria-describedby="tooltip997009"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="flight-plan.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Flight Plans</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Execute multiple Commands in a row</li>
|
||||
<li>Condition-based flow:</li>
|
||||
<ul>
|
||||
<li>Based on conditions using Python syntax</li>
|
||||
<li>Based on the previous command exit code</li>
|
||||
</ul>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="flight_plan_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="flight_plan_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Flight Plans"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
<img
|
||||
src="flight_plan_3.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1242"
|
||||
data-original-src="flight_plan_3.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
title="Flight Plans"
|
||||
aria-describedby="tooltip990969"
|
||||
loading="eager"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="flight_plan_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-id="1225"
|
||||
data-original-src="flight_plan_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Flight Plans"
|
||||
aria-describedby="tooltip997009"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="files.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Files</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Download Files from a remote server using SFTP</li>
|
||||
<li>Upload Files to a remote server using SFTP</li>
|
||||
<li>Support for <code>text</code> and <code>binary</code> file formats</li>
|
||||
<li>Manage Files using pre-defined File Templates</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="files_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="files_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Files"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
<img
|
||||
src="files_3.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1242"
|
||||
data-original-src="files_3.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
title="Files"
|
||||
aria-describedby="tooltip990969"
|
||||
loading="eager"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="files_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-id="1225"
|
||||
data-original-src="files_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Files"
|
||||
aria-describedby="tooltip997009"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="container pt64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="server-logs.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Server Logs</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Fetch Logs from a remote server using Commands</li>
|
||||
<li>Fetch Logs from a remote server using Files</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="logs_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="logs_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Server Logs"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="logs_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-id="1225"
|
||||
data-original-src="logs_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Server Logs"
|
||||
aria-describedby="tooltip997009"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class="container pt64 pb64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="tools.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Import/Export Data in YAML Format</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>Share and manage data easily using YAML format</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="yaml_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="yaml_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Import/Export Data in YAML Format"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
<img
|
||||
src="yaml_4.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="yaml_4.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Import/Export Data in YAML Format"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="yaml_3.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-src="yaml_3.png"
|
||||
data-mimetype="image/png"
|
||||
title="Import/Export Data in YAML Format"
|
||||
/>
|
||||
<img
|
||||
src="yaml_5.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-src="yaml_5.png"
|
||||
data-mimetype="image/png"
|
||||
title="Import/Export Data in YAML Format"
|
||||
/>
|
||||
<img
|
||||
src="yaml_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-src="yaml_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Import/Export Data in YAML Format"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="container pt64 pb64">
|
||||
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="git.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Manage Git Projects</h3>
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
|
||||
<li>
|
||||
Manage Git projects directly from Odoo
|
||||
</li>
|
||||
<li>
|
||||
User-friendly interface for controlling git repositories linked to your servers
|
||||
</li>
|
||||
</ul>
|
||||
<section
|
||||
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
|
||||
data-vcss="001"
|
||||
data-columns="2"
|
||||
data-snippet="s_images_wall"
|
||||
data-name="Images Wall"
|
||||
style="overflow: hidden"
|
||||
>
|
||||
<div class="container">
|
||||
<div class="row s_nb_column_fixed">
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="git_1.png"
|
||||
alt=""
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
data-original-id="1218"
|
||||
data-original-src="git_1.png"
|
||||
data-mimetype="image/png"
|
||||
data-resize-width="1920"
|
||||
loading="eager"
|
||||
title="Git Projects"
|
||||
aria-describedby="tooltip65859"
|
||||
/>
|
||||
</div>
|
||||
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
|
||||
<img
|
||||
src="git_2.png"
|
||||
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
|
||||
loading="eager"
|
||||
data-original-src="git_2.png"
|
||||
data-mimetype="image/png"
|
||||
title="Git Projects"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_text_image o_colored_level pt64 pb64 o_cc o_cc5 " data-snippet="s_image_text" style="background-color: #0D3045 !important; background-image: none; position: relative; border-top-right-radius: 40px; border-top-left-radius: 40px;" data-name="Custom Image - Text" data-bs-original-title="" title="" aria-describedby="tooltip522920" data-oe-shape-data="{"shape":"web_editor/Origins/16","colors":{"c3":"#0D2945"},"flip":[]}">
|
||||
<div class="container" style="padding: 30px;">
|
||||
<div class="col-lg-6" style="text-align: right; margin-left: auto;">
|
||||
<img src="cetmix.svg" alt="" class="img img-fluid o_we_custom_image" data-original-id="1256" data-original-src="cetmix.svg" data-mimetype="image/svg+xml" data-bs-original-title="" title="" aria-describedby="tooltip359107" style="width: 50% !important;" loading="eager"/>
|
||||
</div>
|
||||
<h3 class="pt64" style="color: #ffffff; font-weight: 500; font-size: 48px"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> Warning</h3>
|
||||
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #ffffff !important; text-align: left;">
|
||||
The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement.
|
||||
In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #0D3045 !important">
|
||||
<div style="background-color: #3d4856 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_features o_colored_level pb64 o_cc o_cc1" data-snippet="s_features" data-name="Features" style="position: relative; background-color: #3d4856 !important" data-oe-shape-data="">
|
||||
<div class="container mx-3">
|
||||
<h2 style="font-size: 48px; font-weight:500; color: #d7dcdf;">License</h2>
|
||||
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">Cetmix Tower is distributed under the AGPL-3 license. In case you want to use this software in projects that are not compatible with AGPL-3 license, you should contact us directly.</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #3d4856">
|
||||
<div style="background-color: #d7dcdf !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_text_block o_colored_level pt32 pb64 o_cc o_cc1" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #d7dcdf !important; color: #3d4856;">
|
||||
<div class="container mx-3">
|
||||
<h2 style="font-size: 48px; font-weight:500; color: #3d4856;">Copyright</h2>
|
||||
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">Cetmix Tower is a trademark of Cetmix. All rights reserved.</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #d7dcdf">
|
||||
<div style="background-color: #3d4856 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_text_block o_colored_level pt32 pb64 o_cc o_cc1" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #3d4856 !important; color: #3d4856;">
|
||||
<div class="container mx-3">
|
||||
<h2 style="font-size: 48px; font-weight:500; color: #d7dcdf;">Support</h2>
|
||||
|
||||
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">
|
||||
<li>This project is open source. All issues and feature requests should be reported in the GitHub repository</li>
|
||||
<li>Your contribution is welcome. Please refer to the CONTRIBUTING.md file for more details.</li>
|
||||
<li>Dedicated support is available on request. Contact us for details at cetmix.com</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #3d4856">
|
||||
<div style="background-color: #f4f4f4 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section id="cetmix" class="s_text_image o_colored_level pt64 pb64 o_cc o_cc5" data-snippet="s_image_text" style="background-color: #f4f4f4 !important; background-image: none; position: relative;" data-name="Custom Image - Text" data-bs-original-title="" title="" aria-describedby="tooltip522920">
|
||||
<div class="container">
|
||||
<div class="row align-items-center">
|
||||
<div class="pt16 pb16 o_colored_level col-lg-4" style="position: relative;">
|
||||
<img src="cx_logo.svg" alt="" class="img img-fluid mx-auto o_we_custom_image" style="position: relative;" data-original-id="1229" data-original-src="pdf.svg" data-mimetype="image/svg+xml" data-resize-width="undefined" loading="eager"/>
|
||||
</div>
|
||||
<div class="pb16 o_colored_level col-lg-8" >
|
||||
<h1 style="text-align: left; color:#0D3045; font-size: 48px; font-weight:500;">
|
||||
Cetmix is not just another IT company
|
||||
</h1>
|
||||
<h5 class="pt32" style="text-align: left; color:#3d4856; font-size: 22px; font-weight:300">
|
||||
We know how the business works. Our experts have management
|
||||
experience in heavy machinery, energy sector, logistics,
|
||||
accounting, public services and many other industries _
|
||||
<br/>
|
||||
<br/>
|
||||
We are the people of business
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #f4f4f4">
|
||||
<div style="background-color: #29A1DC !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_call_to_action pt48 pb64 o_colored_level o_cc o_cc5" data-snippet="s_call_to_action" data-name="Call to Action" style="background-color: #29A1DC; color: #ffffff;">
|
||||
<div class="container" style="margin-left: 100px">
|
||||
<div class="row o_header_white_border_left">
|
||||
<div class="col-lg-6 pb16 o_colored_level">
|
||||
<h3 style="text-align: left; color:#ffffff; font-size: 48px; font-weight:500;">Solutions for your business</h3>
|
||||
<h5 class="pt16" style="text-align: left; color:#3d4856; font-size: 22px; font-weight:300">Choose an existing one or we can develop a custom one for you</h5>
|
||||
</div>
|
||||
<div class="col pt32 o_colored_level">
|
||||
<p style="text-align: center;" data-bs-original-title="" title="" aria-describedby="tooltip742456">
|
||||
<a class="mb-2 btn btn-lg shadow" href="https://apps.odoo.com/apps/modules/browse?author=Cetmix" data-bs-original-title="" title="" style="color: #ffffff; border-color: #ffffff; border-radius:20px; font-size: 22px; font-weight:300">Check our Apps</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_text_block o_colored_level o_cc o_cc5" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #29A1DC; color: #ffffff; ">
|
||||
<div class="s_allow_columns container-fluid">
|
||||
<div class="row d-flex mx-3 pb64">
|
||||
<div class="o_colored_level col-lg-4" >
|
||||
<h2 style="text-align: center;">
|
||||
<span style="color: #ffffff; font-size: 36px; font-weight:500;">>9 <br/> years</span>
|
||||
</h2>
|
||||
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">of Odoo experience
|
||||
</h5>
|
||||
</div>
|
||||
<div class="o_colored_level col-lg-4" >
|
||||
<h2 style="text-align: center;">
|
||||
<span style="color: #ffffff; font-size: 36px; font-weight:500;">> 15 000 <br/> downloads</span>
|
||||
</h2>
|
||||
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">of our apps from Odoo App Store
|
||||
</h5>
|
||||
</div>
|
||||
<div class="o_colored_level col-lg-3" >
|
||||
<h2 style="text-align: center;">
|
||||
<span style="color: #ffffff; font-size: 36px; font-weight:500;">>100 <br/> clients</span>
|
||||
</h2>
|
||||
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">
|
||||
are happy with our services
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #0D3045">
|
||||
<div style="background-color: #29A1DC !important; border-bottom-right-radius: 40px; border-bottom-left-radius: 40px; padding: 20px;">
|
||||
|
||||
</div>
|
||||
</section>
|
||||
<section class="s_text_block pt64 pb48 o_colored_level" data-snippet="s_text_block" data-name="Text" style="background-color: #0D3045 !important; border-bottom-right-radius: 40px; border-bottom-left-radius: 40px;" data-bs-original-title="" title="" aria-describedby="tooltip180671">
|
||||
<div class="s_allow_columns container mx-5" data-bs-original-title="" title="" aria-describedby="tooltip154809">
|
||||
<h2 style="text-align: left; color:#ffffff; font-size: 48px; font-weight:500;">
|
||||
Need support, customization<br/>or interested in collaboration ?
|
||||
</h2>
|
||||
<h5 class="pb32" style="font-size: 24px; left; color: #ffffff;">
|
||||
<strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>cetmix.com
|
||||
<br/>
|
||||
</h5>
|
||||
<p style="color: #ffffff;">
|
||||
<span class="fa fa-linkedin-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
|
||||
https://www.linkedin.com/company/cetmix/
|
||||
</p>
|
||||
<p style="color: #ffffff;">
|
||||
<span class="fa fa-github-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
|
||||
https://github.com/cetmix/
|
||||
</p>
|
||||
<p style="color: #ffffff;">
|
||||
<span class="fa fa-facebook-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
|
||||
https://www.facebook.com//cetmixteam
|
||||
</p>
|
||||
<p style="color: #ffffff;">
|
||||
<span class="fa fa-twitter-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
|
||||
https://twitter.com/cetmix_team
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
BIN
addons/cetmix_tower/static/description/logs_1.png
Normal file
|
After Width: | Height: | Size: 291 KiB |
BIN
addons/cetmix_tower/static/description/logs_2.png
Normal file
|
After Width: | Height: | Size: 716 KiB |
1
addons/cetmix_tower/static/description/self-host.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="Server"><path fill="#303c42" d="M2 7h20v3H2z" class="color303c42 svgShape"></path><path d="M2 7h20v3H2z" opacity=".1" fill="#000000" class="color000000 svgShape"></path><path fill="#303c42" d="M2 14h20v3H2z" class="color303c42 svgShape"></path><path d="M2 14h20v3H2z" opacity=".1" fill="#000000" class="color000000 svgShape"></path><path fill="#303c42" d="M1 3v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 7.75H2a1 1 0 0 1-1-1V7a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 2H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V3a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="5" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="a" x1="4.368" x2="5.487" y1="4.368" y2="5.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="5" r="1" fill="url(#a)"></circle><path fill="#303c42" d="M1 10v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 14.75H2a1 1 0 0 1-1-1V14a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 9H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V10a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="12" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="b" x1="4.368" x2="5.487" y1="11.368" y2="12.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="12" r="1" fill="url(#b)"></circle><path fill="#303c42" d="M1 17v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 21.75H2a1 1 0 0 1-1-1V21a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 16H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V17a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="19" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="c" x1="4.368" x2="5.487" y1="18.368" y2="19.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="19" r="1" fill="url(#c)"></circle><linearGradient id="d" x1="-.568" x2="24.568" y1="6.14" y2="17.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffffff" stop-opacity=".2" class="stopColorffffff svgShape"></stop><stop offset="1" stop-color="#ffffff" stop-opacity="0" class="stopColorffffff svgShape"></stop></linearGradient><path fill="url(#d)" d="M23 7V3a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1v1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1v1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1v-1a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1V8a1 1 0 0 0 1-1z"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
93
addons/cetmix_tower/static/description/server-logs.svg
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#303C42;}
|
||||
.st1{opacity:0.1;enable-background:new ;}
|
||||
.st2{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
|
||||
.st3{opacity:0.2;enable-background:new ;}
|
||||
.st4{fill:#428EB3;}
|
||||
.st5{fill:#C6CDD1;}
|
||||
.st6{fill:url(#SVGID_1_);}
|
||||
.st7{fill:url(#SVGID_2_);}
|
||||
.st8{fill:#D8DBDC;}
|
||||
.st9{fill:#333333;}
|
||||
.st10{fill:#4D4D4D;}
|
||||
.st11{fill:url(#SVGID_3_);}
|
||||
.st12{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
|
||||
.st13{fill:#29A1DC;}
|
||||
.st14{fill:url(#SVGID_4_);}
|
||||
.st15{fill:url(#SVGID_5_);}
|
||||
.st16{fill:url(#SVGID_6_);}
|
||||
</style>
|
||||
<path class="st0" d="M2.8,6h14.7v1.8H2.8V6z"/>
|
||||
<path class="st1" d="M2.8,6h14.7v1.8H2.8V6z"/>
|
||||
<path class="st0" d="M17.5,6.5H2.8C2.3,6.5,1.8,6,1.8,5.5V2.8c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.8
|
||||
C18.4,6,18,6.5,17.5,6.5z"/>
|
||||
<path class="st2" d="M17.5,1.9H2.8c-0.5,0-0.9,0.4-0.9,0.9V3c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V2.8
|
||||
C18.4,2.3,18,1.9,17.5,1.9z"/>
|
||||
<path class="st3" d="M17.5,6.2H2.8c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9V5.3
|
||||
C18.4,5.8,18,6.2,17.5,6.2z"/>
|
||||
<path class="st0" d="M17.5,12H2.8c-0.5,0-0.9-0.4-0.9-0.9V8.3c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.8
|
||||
C18.4,11.6,18,12,17.5,12z"/>
|
||||
<circle class="st4" cx="16.1" cy="9.7" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="9.7" r="0.5"/>
|
||||
<circle class="st4" cx="12.4" cy="9.7" r="0.5"/>
|
||||
<circle class="st5" cx="4.1" cy="9.7" r="0.9"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.5643" y1="16.9049" x2="4.5946" y2="15.8746" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st6" cx="4.1" cy="9.7" r="0.9"/>
|
||||
<circle class="st4" cx="16.1" cy="4.2" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="4.2" r="0.5"/>
|
||||
<circle class="st4" cx="12.4" cy="4.2" r="0.5"/>
|
||||
<path class="st2" d="M17.5,7.4H2.8c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V8.3
|
||||
C18.4,7.8,18,7.4,17.5,7.4z"/>
|
||||
<path class="st3" d="M17.5,11.7H2.8c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-0.2
|
||||
C18.4,11.3,18,11.7,17.5,11.7z"/>
|
||||
<circle class="st5" cx="4.1" cy="4.2" r="0.9"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.5643" y1="22.4291" x2="4.5946" y2="21.3988" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st7" cx="4.1" cy="4.2" r="0.9"/>
|
||||
<path class="st8" d="M17,19.3c0-0.3-0.2-0.5-0.5-0.5c-0.3,0-0.5,0.2-0.5,0.5h-1.8c0-0.3-0.2-0.5-0.5-0.5s-0.5,0.2-0.5,0.5
|
||||
c0,1-0.5,1.8-0.9,1.8v0.5H18v-0.5C17.5,21.2,17,20.3,17,19.3z"/>
|
||||
<path class="st9" d="M22.1,10.6c0-0.8-0.6-1.4-1.4-1.4h-11c-0.8,0-1.4,0.6-1.4,1.4V18h13.8V10.6z"/>
|
||||
<path class="st8" d="M8.3,18v0.5c0,0.8,0.6,1.4,1.4,1.4h11c0.8,0,1.4-0.6,1.4-1.4V18H8.3z"/>
|
||||
<path class="st1" d="M20.7,19.6h-11c-0.8,0-1.4-0.6-1.4-1.4v0.2c0,0.8,0.6,1.4,1.4,1.4h11c0.8,0,1.4-0.6,1.4-1.4v-0.2
|
||||
C22.1,19,21.5,19.6,20.7,19.6z"/>
|
||||
<path class="st2" d="M9.7,9.4h11c0.8,0,1.4,0.6,1.4,1.4v-0.2c0-0.8-0.6-1.4-1.4-1.4h-11c-0.8,0-1.4,0.6-1.4,1.4v0.2
|
||||
C8.3,10.1,8.9,9.4,9.7,9.4z"/>
|
||||
<path class="st10" d="M21.2,10.6c0-0.3-0.2-0.5-0.5-0.5h-11c-0.3,0-0.5,0.2-0.5,0.5V17h12V10.6z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="9.0616" y1="15.1862" x2="21.4007" y2="9.4328" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st11" d="M21.2,10.6c0-0.3-0.2-0.5-0.5-0.5h-11c-0.3,0-0.5,0.2-0.5,0.5V17h12V10.6z"/>
|
||||
<path class="st8" d="M18,22.1h-5.5c-0.3,0-0.5-0.2-0.5-0.5c0-0.3,0.2-0.5,0.5-0.5H18c0.3,0,0.5,0.2,0.5,0.5
|
||||
C18.4,21.9,18.2,22.1,18,22.1z"/>
|
||||
<path class="st12" d="M12.4,21.4H18c0.2,0,0.4,0.1,0.4,0.3c0,0,0-0.1,0-0.1c0-0.3-0.2-0.5-0.5-0.5h-5.5c-0.3,0-0.5,0.2-0.5,0.5
|
||||
c0,0,0,0.1,0,0.1C12,21.6,12.2,21.4,12.4,21.4z"/>
|
||||
<circle class="st13" cx="15.2" cy="18.9" r="0.5"/>
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="14.7771" y1="7.3105" x2="15.6119" y2="6.9216" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st14" cx="15.2" cy="18.9" r="0.5"/>
|
||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="14.4175" y1="6.9761" x2="16.8002" y2="4.5933" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st15" d="M17.1,19.8h-3.8l1.4,1.4H18C17.6,21.2,17.2,20.6,17.1,19.8z"/>
|
||||
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="0.5921" y1="20.7473" x2="23.4202" y2="10.102" gradientTransform="matrix(1 0 0 -1 0 26)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st16" d="M20.7,9.2h-2.3V8.3c0-0.5-0.4-0.9-0.9-0.9V6.5c0.5,0,0.9-0.4,0.9-0.9V2.8c0-0.5-0.4-0.9-0.9-0.9H2.8
|
||||
c-0.5,0-0.9,0.4-0.9,0.9v2.8c0,0.5,0.4,0.9,0.9,0.9v0.9c-0.5,0-0.9,0.4-0.9,0.9v2.8c0,0.5,0.4,0.9,0.9,0.9h5.5v6.4
|
||||
c0,0.8,0.6,1.4,1.4,1.4h3.6c-0.1,0.8-0.5,1.4-0.9,1.4c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5H18c0.3,0,0.5-0.2,0.5-0.5
|
||||
c0-0.3-0.2-0.5-0.5-0.5c-0.4,0-0.8-0.6-0.9-1.4h3.6c0.8,0,1.4-0.6,1.4-1.4v-7.8C22.1,9.8,21.5,9.2,20.7,9.2z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
BIN
addons/cetmix_tower/static/description/server_1.png
Normal file
|
After Width: | Height: | Size: 99 KiB |
BIN
addons/cetmix_tower/static/description/server_3.png
Normal file
|
After Width: | Height: | Size: 272 KiB |
|
After Width: | Height: | Size: 45 KiB |
BIN
addons/cetmix_tower/static/description/server_template_form.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
159
addons/cetmix_tower/static/description/tools.svg
Normal file
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#303C42;}
|
||||
.st1{opacity:0.1;enable-background:new ;}
|
||||
.st2{opacity:0.2;enable-background:new ;}
|
||||
.st3{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
|
||||
.st4{fill:#428EB3;}
|
||||
.st5{fill:#C6CDD1;}
|
||||
.st6{fill:url(#SVGID_1_);}
|
||||
.st7{fill:url(#SVGID_2_);}
|
||||
.st8{fill:none;}
|
||||
.st9{fill:url(#SVGID_3_);}
|
||||
.st10{fill:#29A1DC;}
|
||||
.st11{fill:#EFF2F4;}
|
||||
.st12{fill:#ACB5BA;}
|
||||
.st13{fill:#CEDAE0;}
|
||||
.st14{fill:#E6EBEE;}
|
||||
.st15{fill:#3F5C6B;}
|
||||
.st16{fill:#22353F;}
|
||||
.st17{fill:#2B424E;}
|
||||
.st18{fill:#324F5E;}
|
||||
</style>
|
||||
<path class="st0" d="M2,7.5h18.2v2.7H2V7.5z"/>
|
||||
<path class="st1" d="M2,7.5h18.2v2.7H2V7.5z"/>
|
||||
<path class="st0" d="M1.1,3.8v3.6c0,0.6,0.4,1,0.9,1h18.2c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
C1.5,2.9,1.1,3.3,1.1,3.8z"/>
|
||||
<path class="st2" d="M20.2,8.1H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.6,0.4,1,0.9,1h18.2c0.5,0,0.9-0.4,0.9-0.9V7.2
|
||||
C21.1,7.7,20.7,8.1,20.2,8.1z"/>
|
||||
<path class="st3" d="M20.2,2.9H2c-0.5,0-0.9,0.4-0.9,0.9V4c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9V3.8
|
||||
C21.1,3.3,20.7,2.9,20.2,2.9z"/>
|
||||
<circle class="st4" cx="17.9" cy="5.6" r="0.5"/>
|
||||
<circle class="st4" cx="16.1" cy="5.6" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="5.6" r="0.5"/>
|
||||
<circle class="st5" cx="4.7" cy="5.6" r="0.9"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="4.1668" y1="-1953.0668" x2="5.1828" y2="-1954.0828" gradientTransform="matrix(1 0 0 -1 0 -1948)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st6" cx="4.7" cy="5.6" r="0.9"/>
|
||||
<path class="st0" d="M1.1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-3.6c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
C1.5,9.3,1.1,9.7,1.1,10.2z"/>
|
||||
<path class="st2" d="M20.2,14.5H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-0.2
|
||||
C21.1,14.1,20.7,14.5,20.2,14.5z"/>
|
||||
<path class="st3" d="M20.2,9.3H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9v-0.2
|
||||
C21.1,9.7,20.7,9.3,20.2,9.3z"/>
|
||||
<circle class="st4" cx="17.9" cy="12" r="0.5"/>
|
||||
<circle class="st4" cx="16.1" cy="12" r="0.5"/>
|
||||
<circle class="st4" cx="14.3" cy="12" r="0.5"/>
|
||||
<circle class="st5" cx="4.7" cy="12" r="0.9"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="4.1445" y1="-1959.4445" x2="5.1605" y2="-1960.4604" gradientTransform="matrix(1 0 0 -1 0 -1948)">
|
||||
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
|
||||
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<circle class="st7" cx="4.7" cy="12" r="0.9"/>
|
||||
<path class="st8" d="M19.1,13c0,0.4,0.3,0.7,0.7,0.8l0,0c0.4,0,0.8-0.3,0.8-0.8c0-0.4-0.3-0.7-0.7-0.8c0,0,0,0-0.1,0
|
||||
C19.5,12.3,19.1,12.6,19.1,13L19.1,13z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.6335" y1="1978.4908" x2="25.081" y2="1989.8916" gradientTransform="matrix(1 0 0 1 0 -1974)">
|
||||
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
|
||||
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||
</linearGradient>
|
||||
<path class="st9" d="M22.4,13.8H21v-3.6c0-0.5-0.4-0.9-0.9-0.9V8.4C20.6,8.4,21,8,21,7.5V3.8c0-0.5-0.4-0.9-0.9-0.9H2
|
||||
C1.5,2.9,1,3.3,1,3.8v3.6c0,0.6,0.4,1,0.9,1v0.9C1.5,9.3,1,9.7,1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h10.9v5.9c0,0.3,0.2,0.5,0.5,0.5
|
||||
h9.1c0.3,0,0.5-0.2,0.5-0.5v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
|
||||
<path class="st10" d="M22.4,16.2c0,2.7-2.2,4.8-4.8,4.8c-2.7,0-4.8-2.1-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8
|
||||
C20.2,11.3,22.4,13.5,22.4,16.2z"/>
|
||||
<path class="st11" d="M22,12.7l-0.5-0.1c0,0-0.1,0-0.1-0.1c0-0.2-0.1-0.3-0.2-0.5c0,0,0-0.1,0-0.1l0.2-0.4c0,0,0-0.1,0-0.1l-0.3-0.3
|
||||
c0,0-0.1,0-0.1,0l-0.4,0.2c0,0-0.1,0-0.1,0c-0.1-0.1-0.3-0.1-0.4-0.2c0,0-0.1,0-0.1-0.1L20,10.6c0,0-0.1-0.1-0.1-0.1h-0.4
|
||||
c0,0-0.1,0-0.1,0.1l-0.1,0.5c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.2,0.1c0,0-0.1,0-0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l-0.4-0.2c0,0-0.1,0-0.1,0l-0.2,0.2h0l-0.1,0.1h0c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l0.2,0.4
|
||||
c0,0,0,0,0,0c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.3-0.2,0.5c0,0,0,0.1-0.1,0.1l-0.5,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0.1v0.4
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.2,0.1,0.3,0.2,0.5c0,0,0,0.1,0,0.1l-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1h0l0.3,0.3c0,0,0.1,0,0.1,0l0.4-0.2c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0.1
|
||||
c0.1,0,0.2,0.1,0.2,0.1c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0.1l0.1,0.5c0,0,0.1,0.1,0.1,0.1h0.4c0.1,0,0.1,0,0.1-0.1l0.1-0.5
|
||||
c0,0,0-0.1,0.1-0.1c0.2,0,0.3-0.1,0.4-0.2c0,0,0.1,0,0.1,0l0.4,0.2c0,0,0.1,0,0.1,0l0.3-0.3c0,0,0-0.1,0-0.1l-0.2-0.4
|
||||
c0,0,0-0.1,0-0.1c0.1-0.1,0.1-0.3,0.2-0.5c0,0,0,0,0-0.1c0,0,0,0,0,0l0.5-0.1c0,0,0.1-0.1,0.1-0.1v-0.4C22.1,12.8,22.1,12.7,22,12.7
|
||||
z M19.8,14.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.4-0.1-0.6-0.3c0,0,0,0,0,0c-0.1-0.2-0.2-0.3-0.2-0.5c0-0.1,0-0.3,0-0.4
|
||||
c0-0.5,0.4-0.9,0.8-1c0.2,0,0.3-0.1,0.5,0c0,0,0,0,0,0c0.2,0,0.4,0.1,0.6,0.3c0,0,0,0,0,0c0.1,0.1,0.1,0.1,0.1,0.2l0,0
|
||||
c0.1,0.1,0.1,0.3,0.1,0.4C20.9,13.4,20.4,14,19.8,14.1C19.8,14.1,19.8,14.1,19.8,14.1z"/>
|
||||
<path class="st8" d="M18.9,13c0,0.4,0.3,0.7,0.7,0.8c0,0,0,0,0,0c0.4,0,0.8-0.3,0.8-0.8c0-0.4-0.3-0.7-0.7-0.8c0,0,0,0-0.1,0
|
||||
C19.2,12.3,18.9,12.6,18.9,13L18.9,13z"/>
|
||||
<path class="st12" d="M20.8,13c0-0.6-0.5-1.2-1.1-1.2c0.1,0.1,0.2,0.2,0.1,0.3c0,0.1-0.1,0.1-0.2,0.1c0.4,0,0.7,0.4,0.7,0.8
|
||||
c0,0.4-0.3,0.8-0.8,0.8c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0,0,0,0.1,0C20.3,14.2,20.8,13.7,20.8,13z"/>
|
||||
<path class="st13" d="M18.9,13.3c0-0.1-0.1-0.2-0.1-0.3c0-0.4,0.3-0.8,0.8-0.8c0,0,0,0,0.1,0c0.1,0,0.2-0.2,0.2-0.3
|
||||
c0-0.1-0.1-0.1-0.1-0.2c0,0-0.1,0-0.1,0c-0.7,0-1.2,0.5-1.2,1.2c0,0.1,0,0.2,0,0.3C18.5,13.3,18.9,13.3,18.9,13.3z"/>
|
||||
<path class="st13" d="M19.7,13.8C19.7,13.8,19.6,13.8,19.7,13.8c-0.5,0-0.8-0.3-0.8-0.8c0,0,0,0,0-0.1h-0.5c0,0,0,0,0,0.1
|
||||
c0,0.7,0.5,1.2,1.2,1.2c0,0,0,0,0.1,0c0.1,0,0.2-0.1,0.2-0.2C19.9,13.9,19.8,13.8,19.7,13.8z"/>
|
||||
<path class="st8" d="M20.5,13c0,0.5-0.4,0.8-0.8,0.9c0,0,0,0,0,0c-0.5,0-0.9-0.4-0.9-0.9c0-0.5,0.3-0.8,0.8-0.8c0,0,0,0,0.1,0
|
||||
C20.1,12.2,20.5,12.6,20.5,13L20.5,13z"/>
|
||||
<path class="st14" d="M19.2,14.8c-0.6-0.4-1-1-1-1.8c0-0.8,0.4-1.4,1-1.8v-0.1c-0.2,0-0.3,0.1-0.5,0.2c0,0-0.1,0-0.1,0l-0.4-0.2
|
||||
c0,0-0.1,0-0.1,0l-0.3,0.3c0,0,0,0.1,0,0.1l0.2,0.4c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.3-0.2,0.5c0,0,0,0.1-0.1,0.1l-0.5,0.1
|
||||
c0,0-0.1,0.1-0.1,0.1v0.4c0,0.1,0,0.1,0.1,0.1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.2,0.1,0.3,0.2,0.5c0,0,0,0.1,0,0.1l-0.2,0.4
|
||||
c0,0,0,0.1,0,0.1l0.3,0.3c0,0,0.1,0,0.1,0l0.4-0.2c0,0,0.1,0,0.1,0C18.8,14.8,19,14.9,19.2,14.8L19.2,14.8L19.2,14.8z"/>
|
||||
<path class="st15" d="M23,18.3l-0.3-0.1c0,0-0.1,0-0.1-0.1c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1l0.2-0.3c0,0,0-0.1,0-0.1l-0.2-0.2
|
||||
c0,0-0.1,0-0.1,0l-0.3,0.2c0,0-0.1,0-0.1,0c-0.1-0.1-0.2-0.1-0.3-0.1c0,0-0.1,0-0.1-0.1l-0.1-0.3c0,0,0-0.1-0.1-0.1h-0.3
|
||||
c0,0-0.1,0-0.1,0.1l-0.1,0.3c0,0,0,0-0.1,0.1c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l-0.3-0.2c0,0-0.1,0-0.1,0l-0.2,0.2h0l0,0h0c0,0,0,0,0,0c0,0,0,0,0,0.1l0.2,0.3c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0.1c-0.1,0.1-0.1,0.2-0.1,0.3c0,0,0,0-0.1,0.1l-0.3,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0v0.3c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0.3,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0,0.1l-0.2,0.3c0,0,0,0,0,0.1
|
||||
c0,0,0,0,0,0h0l0.2,0.2c0,0,0.1,0,0.1,0l0.3-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0.1,0,0.1,0.1,0.2,0.1c0,0,0,0,0.1,0
|
||||
c0,0,0.1,0,0.1,0.1l0.1,0.3c0,0,0,0.1,0.1,0.1h0.3c0,0,0.1,0,0.1-0.1l0.1-0.3c0,0,0-0.1,0.1-0.1c0.1,0,0.2-0.1,0.3-0.1
|
||||
c0,0,0.1,0,0.1,0l0.3,0.2c0,0,0.1,0,0.1,0l0.2-0.2c0,0,0-0.1,0-0.1l-0.2-0.3c0,0,0-0.1,0-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0,0,0,0,0,0
|
||||
c0,0,0,0,0,0l0.3-0.1c0,0,0.1,0,0.1-0.1L23,18.3C23.1,18.3,23.1,18.3,23,18.3L23,18.3z M21.4,19.3c-0.1,0-0.2,0-0.3,0
|
||||
c-0.1,0-0.3-0.1-0.5-0.2c0,0,0,0,0,0c-0.1-0.1-0.2-0.3-0.2-0.4c0-0.1,0-0.2,0-0.3c0-0.4,0.3-0.7,0.6-0.8c0.1,0,0.2,0,0.4,0
|
||||
c0,0,0,0,0,0c0.1,0,0.3,0.1,0.4,0.2c0,0,0,0,0,0c0,0.1,0.1,0.1,0.1,0.2l0,0c0,0.1,0.1,0.2,0.1,0.3C22.2,18.8,21.9,19.3,21.4,19.3
|
||||
C21.4,19.3,21.4,19.3,21.4,19.3L21.4,19.3z"/>
|
||||
<path class="st8" d="M20.7,18.5c0,0.3,0.2,0.5,0.5,0.6c0,0,0,0,0,0c0.3,0,0.6-0.3,0.6-0.6c0-0.3-0.2-0.5-0.5-0.6c0,0,0,0,0,0
|
||||
C20.9,18,20.7,18.2,20.7,18.5z"/>
|
||||
<path class="st16" d="M22.2,18.5c0-0.5-0.4-0.9-0.8-0.9c0.1,0,0.1,0.1,0.1,0.2c0,0-0.1,0.1-0.1,0.1c0.3,0,0.5,0.3,0.5,0.6
|
||||
c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0,0,0c-0.1,0-0.1,0.1-0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0,0,0,0,0C21.8,19.4,22.2,19,22.2,18.5
|
||||
L22.2,18.5z"/>
|
||||
<path class="st17" d="M21.3,17.6c-0.1,0-0.2,0-0.2,0V18c0.1,0,0.1,0,0.2,0c0.3,0,0.5,0.2,0.6,0.5c0-0.1,0.1-0.2,0.2-0.1
|
||||
c0.1,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0C22.1,18,21.7,17.6,21.3,17.6L21.3,17.6z"/>
|
||||
<path class="st16" d="M20.7,18.7c0-0.1,0-0.1,0-0.2c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0,0c0.1,0,0.2-0.1,0.1-0.2c0-0.1-0.1-0.1-0.1-0.1
|
||||
c0,0,0,0-0.1,0c-0.5,0-0.9,0.4-0.9,0.9c0,0.1,0,0.2,0,0.2C20.4,18.7,20.7,18.7,20.7,18.7z"/>
|
||||
<path class="st17" d="M21.3,19.1C21.3,19.1,21.3,19.1,21.3,19.1c-0.3,0-0.6-0.2-0.6-0.6c0,0,0,0,0-0.1h-0.3c0,0,0,0,0,0.1
|
||||
c0,0.5,0.4,0.9,0.9,0.9c0,0,0,0,0,0c0.1,0,0.1-0.1,0.1-0.2C21.4,19.2,21.4,19.1,21.3,19.1L21.3,19.1z"/>
|
||||
<path class="st8" d="M21.9,18.5c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0,0,0c-0.4,0-0.6-0.3-0.6-0.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0,0
|
||||
C21.6,17.9,21.9,18.2,21.9,18.5L21.9,18.5z"/>
|
||||
<path class="st18" d="M20.9,19.9c-0.4-0.3-0.7-0.8-0.7-1.3c0-0.6,0.3-1.1,0.7-1.3v-0.1c-0.1,0-0.2,0.1-0.4,0.1c0,0-0.1,0-0.1,0
|
||||
l-0.3-0.2c0,0-0.1,0-0.1,0l-0.2,0.2c0,0,0,0.1,0,0.1l0.2,0.3c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.2-0.1,0.3c0,0,0,0.1-0.1,0.1l-0.3,0.1
|
||||
c0,0-0.1,0-0.1,0.1v0.3c0,0,0,0.1,0.1,0.1l0.3,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0,0.1l-0.2,0.3
|
||||
c0,0,0,0.1,0,0.1l0.2,0.2c0,0,0.1,0,0.1,0l0.3-0.2c0,0,0.1,0,0.1,0C20.7,19.8,20.8,19.9,20.9,19.9C20.9,19.9,20.9,19.9,20.9,19.9z"
|
||||
/>
|
||||
<path class="st15" d="M19.3,16.9l-0.9-0.1c0,0-0.1,0-0.1-0.1c0-0.1,0-0.1-0.1-0.2c0,0,0-0.1,0-0.1l0.6-0.6c0,0,0-0.1,0-0.2l-0.4-0.5
|
||||
c0,0-0.1-0.1-0.2,0l-0.8,0.4c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.2-0.1c0,0-0.1-0.1-0.1-0.1l0.1-0.9c0-0.1,0-0.1-0.1-0.1L16.7,14
|
||||
c-0.1,0-0.1,0-0.1,0.1l-0.4,0.8c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1-0.1l-0.1-0.3L15.3,14
|
||||
c0-0.1-0.1-0.1-0.1-0.1l-0.6,0.2c-0.1,0-0.1,0.1-0.1,0.1l0.1,0.9c0,0,0,0.1-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0L13.5,15
|
||||
c-0.1,0-0.1,0-0.2,0L13,15.6c0,0,0,0.1,0,0.2l0.6,0.6c0,0,0,0.1,0,0.1c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1l-0.7,0.1
|
||||
c0,0.3,0.1,0.6,0.2,1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0,0.1,0.1,0.2c0,0,0,0.1,0,0.1l-0.3,0.3c0.2,0.3,0.4,0.6,0.6,0.8l0.3-0.2
|
||||
c0,0,0.1,0,0.1,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0.1,0.1,0.2,0.1c0,0,0.1,0.1,0.1,0.1L14.6,20c0.3,0.2,0.5,0.4,0.8,0.5l0.3-0.6
|
||||
c0,0,0.1-0.1,0.1-0.1h0.2c0,0,0.1,0,0.1,0.1l0.4,0.8c0,0.1,0.1,0.1,0.1,0.1l0.6-0.2c0.1,0,0.1-0.1,0.1-0.1l-0.1-0.9
|
||||
c0-0.1,0-0.1,0.1-0.1c0.1,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.8,0.4c0.1,0,0.1,0,0.2,0l0.4-0.5c0-0.1,0-0.1,0-0.2l-0.6-0.6
|
||||
c0,0,0-0.1,0-0.1c0-0.1,0.1-0.1,0.1-0.2c0,0,0-0.1,0.1-0.1l0.9-0.1c0.1,0,0.1-0.1,0.1-0.1v-0.6C19.4,17,19.4,17,19.3,16.9z
|
||||
M15.2,18.3C15.2,18.3,15.2,18.2,15.2,18.3c-0.1-0.1-0.1-0.1-0.2-0.2c0,0-0.1-0.1-0.1-0.1c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.1,0-0.2
|
||||
c0-0.1,0-0.2,0-0.2v0c0-0.6,0.5-1.2,1.2-1.2c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0s0.1,0,0.1,0
|
||||
l0.1,0c0,0,0,0,0.1,0.1l0.1,0.1c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1
|
||||
c0,0.1,0,0.2,0,0.2l0,0.2c0,0,0,0.1,0,0.1l-0.2,0.4c0,0,0,0.1-0.1,0.1c0,0,0,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0.1
|
||||
c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0C15.9,18.6,15.6,18.5,15.2,18.3C15.3,18.3,15.3,18.3,15.2,18.3z"/>
|
||||
<path class="st18" d="M15.3,14c0-0.1-0.1-0.1-0.1-0.1l-0.6,0.2c-0.1,0-0.1,0.1-0.1,0.1l0.1,0.9c0,0,0,0.1-0.1,0.1
|
||||
c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0L13.5,15c-0.1,0-0.1,0-0.2,0L13,15.6c0,0,0,0.1,0,0.2l0.6,0.6c0,0,0,0.1,0,0.1
|
||||
c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1l-0.7,0.1c0,0.3,0.1,0.6,0.2,1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0,0.1,0.1,0.2
|
||||
c0,0,0,0.1,0,0.1l-0.3,0.3c0.2,0.3,0.4,0.6,0.6,0.8l0.3-0.2c0,0,0.1,0,0.1,0c0,0,0,0,0,0l0,0v0c-0.1-0.4-0.2-0.9-0.2-1.4
|
||||
c0,0,0,0,0-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0.1-0.6,0.2-0.9c0,0,0-0.1,0-0.1c0.2-0.7,0.6-1.4,1.1-1.8L15.3,14z"/>
|
||||
<path class="st17" d="M17.2,16.1c-0.3-0.3-0.8-0.5-1.2-0.5c-0.1,0-0.2,0-0.3,0c-0.5,0.1-0.9,0.4-1.2,0.8c-0.2,0.3-0.3,0.6-0.3,0.9
|
||||
c0,0.2,0,0.3,0.1,0.5c0.1,0.3,0.2,0.6,0.5,0.8c0.4,0.4,0.9,0.6,1.5,0.5c0.4,0,0.8-0.2,1-0.5c0.2-0.2,0.4-0.6,0.5-0.9v0
|
||||
c0-0.1,0-0.2,0-0.3C17.7,16.9,17.5,16.4,17.2,16.1z M15.3,18.3C15.3,18.3,15.3,18.3,15.3,18.3c-0.1-0.1-0.1-0.1-0.2-0.1
|
||||
c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.1,0-0.2c0-0.1,0-0.2,0-0.2v0c0-0.6,0.5-1.2,1.2-1.2
|
||||
c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0.1l0.1,0.1
|
||||
c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1s0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0.1,0,0.2,0,0.2l0,0.2c0,0,0,0.1,0,0.1
|
||||
l-0.2,0.4c0,0,0,0.1-0.1,0.1c0,0,0,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0
|
||||
c-0.1,0-0.2,0-0.2,0C15.7,18.5,15.5,18.5,15.3,18.3z"/>
|
||||
<path class="st16" d="M14.5,17.4c0.1,0,0.3-0.1,0.3-0.2c0-0.2,0.2-0.4,0.3-0.6c0.2-0.2,0.4-0.3,0.6-0.3c0.1,0,0.2-0.1,0.2-0.3
|
||||
c0-0.2-0.2-0.3-0.3-0.3c-0.3,0.1-0.7,0.2-0.9,0.5c-0.2,0.2-0.4,0.6-0.5,0.9C14.2,17.2,14.3,17.4,14.5,17.4z M17.4,17.4
|
||||
c-0.1,0-0.3,0.1-0.3,0.2c0,0.2-0.2,0.4-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3c-0.1,0-0.2,0.1-0.2,0.3c0,0.2,0.2,0.3,0.3,0.3
|
||||
c0.3-0.1,0.7-0.2,0.9-0.5c0.2-0.2,0.4-0.6,0.5-0.9C17.7,17.6,17.6,17.4,17.4,17.4z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
8709
addons/cetmix_tower/static/description/tower.svg
Normal file
|
After Width: | Height: | Size: 988 KiB |
3201
addons/cetmix_tower/static/description/tower_website.svg
Normal file
|
After Width: | Height: | Size: 333 KiB |
BIN
addons/cetmix_tower/static/description/yaml_1.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
addons/cetmix_tower/static/description/yaml_2.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
addons/cetmix_tower/static/description/yaml_3.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
addons/cetmix_tower/static/description/yaml_4.png
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
addons/cetmix_tower/static/description/yaml_5.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
162
addons/cetmix_tower_yaml/README.rst
Normal file
@@ -0,0 +1,162 @@
|
||||
=================
|
||||
Cetmix Tower YAML
|
||||
=================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:7f55d44d4d4b9239195643b7169c1a5f98ad8a36c3cc80686d357a9829beb856
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
|
||||
:target: https://github.com/cetmix/cetmix-tower/tree/16.0/cetmix_tower_yaml
|
||||
:alt: cetmix/cetmix-tower
|
||||
|
||||
|badge1| |badge2| |badge3|
|
||||
|
||||
This module implements YAML format data import/export for `Cetmix
|
||||
Tower <https://cetmix.com/tower>`__.
|
||||
|
||||
Please refer to the `official
|
||||
documentation <https://cetmix.com/tower>`__ for detailed information.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Please refer to the `official
|
||||
documentation <https://cetmix.com/tower>`__ for detailed configuration
|
||||
instructions.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
Please refer to the `official
|
||||
documentation <https://cetmix.com/tower>`__ for detailed usage
|
||||
instructions.
|
||||
|
||||
Changelog
|
||||
=========
|
||||
|
||||
16.0.3.1.0 (2026-03-30)
|
||||
-----------------------
|
||||
|
||||
- Features: Deferred import of related records. (5323)
|
||||
|
||||
16.0.3.0.0 (2026-03-23)
|
||||
-----------------------
|
||||
|
||||
- Features: Jets! (4700)
|
||||
|
||||
16.0.2.0.1 (2025-10-29)
|
||||
-----------------------
|
||||
|
||||
- Features: Improve the way secrets are listed in the YAML import
|
||||
widget. (5010)
|
||||
|
||||
16.0.1.4.2 (2025-10-06)
|
||||
-----------------------
|
||||
|
||||
- Bugfixes: Add the missing 'create' function decorator (4980)
|
||||
|
||||
16.0.1.4.1 (2025-08-26)
|
||||
-----------------------
|
||||
|
||||
- Bugfixes: Make selection values lowercase to simplify their
|
||||
management. (4896)
|
||||
|
||||
16.0.1.3.0 (2025-07-30)
|
||||
-----------------------
|
||||
|
||||
- Features: Optional behaviour when file uploaded by command already
|
||||
exists on the server. (4740)
|
||||
|
||||
16.0.1.1.4 (2025-07-08)
|
||||
-----------------------
|
||||
|
||||
- Bugfixes: Fix missing model names in YAML exports when exporting
|
||||
multiple commands with flight plans (4820)
|
||||
|
||||
16.0.1.1.3 (2025-07-07)
|
||||
-----------------------
|
||||
|
||||
- Bugfixes: Import servers with ``Password`` ssh authentication mode
|
||||
(4812)
|
||||
|
||||
16.0.1.1.1 (2025-06-23)
|
||||
-----------------------
|
||||
|
||||
- Features: YAML code optimisation (4728)
|
||||
|
||||
16.0.1.1.0 (2025-06-20)
|
||||
-----------------------
|
||||
|
||||
- Features: Export/import scheduled tasks to/from YAML. (4650)
|
||||
|
||||
16.0.1.0.5 (2025-05-21)
|
||||
-----------------------
|
||||
|
||||
- Features: Export/import secret values related to Server. (4696)
|
||||
|
||||
16.0.1.0.4 (2025-05-16)
|
||||
-----------------------
|
||||
|
||||
- Features: Export/import servers and files to/from YAML. (4670)
|
||||
|
||||
16.0.1.0.3 (2025-05-09)
|
||||
-----------------------
|
||||
|
||||
- Bugfixes: Non-critical issues and performance improvements. (4663)
|
||||
|
||||
16.0.1.0.2 (2025-04-30)
|
||||
-----------------------
|
||||
|
||||
- Features: User groups are visible without developer mode. (4642)
|
||||
|
||||
16.0.1.0.1 (2025-04-21)
|
||||
-----------------------
|
||||
|
||||
- Features: Export additional fields for shortcuts, variables and
|
||||
options. Add action menu to export keys/secrets. (4602)
|
||||
|
||||
16.0.1.0.0
|
||||
----------
|
||||
|
||||
Release for Odoo 16.0
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_yaml%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Cetmix
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/16.0/cetmix_tower_yaml>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute.
|
||||
2
addons/cetmix_tower_yaml/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
from . import models
|
||||
from . import wizards
|
||||
43
addons/cetmix_tower_yaml/__manifest__.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# Copyright Cetmix OÜ 2024
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
{
|
||||
"name": "Cetmix Tower YAML",
|
||||
"summary": "Cetmix Tower YAML export/import",
|
||||
"version": "16.0.3.1.0",
|
||||
"development_status": "Beta",
|
||||
"category": "Productivity",
|
||||
"website": "https://tower.cetmix.com",
|
||||
"author": "Cetmix",
|
||||
"license": "AGPL-3",
|
||||
"installable": True,
|
||||
"depends": ["cetmix_tower_server"],
|
||||
"external_dependencies": {"python": ["pyyaml"]},
|
||||
"data": [
|
||||
"security/cetmix_tower_yaml_groups.xml",
|
||||
"security/cx_tower_yaml_wizard_access_rules.xml",
|
||||
"security/ir.model.access.csv",
|
||||
"views/cx_tower_command_view.xml",
|
||||
"views/cx_tower_file_template_view.xml",
|
||||
"views/cx_tower_plan_view.xml",
|
||||
"views/cx_tower_server_template_view.xml",
|
||||
"views/cx_tower_server_view.xml",
|
||||
"views/cx_tower_variable_view.xml",
|
||||
"views/cx_tower_variable_value_view.xml",
|
||||
"views/cx_tower_os_view.xml",
|
||||
"views/cx_tower_tag_view.xml",
|
||||
"views/cx_tower_shortcut_view.xml",
|
||||
"views/cx_tower_scheduled_task_view.xml",
|
||||
"views/cx_tower_key_view.xml",
|
||||
"views/cx_tower_jet_template_view.xml",
|
||||
"views/cx_tower_yaml_manifest_template_views.xml",
|
||||
"views/cx_tower_yaml_manifest_author_views.xml",
|
||||
"wizards/cx_tower_yaml_export_wiz.xml",
|
||||
"wizards/cx_tower_yaml_export_wiz_download.xml",
|
||||
"wizards/cx_tower_yaml_import_wiz_upload.xml",
|
||||
"wizards/cx_tower_yaml_import_wiz.xml",
|
||||
"views/menuitems.xml",
|
||||
],
|
||||
"demo": [
|
||||
"demo/demo_data.xml",
|
||||
],
|
||||
}
|
||||
13
addons/cetmix_tower_yaml/demo/demo_data.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
<!-- Add demo users to groups -->
|
||||
<record id="base.user_admin" model="res.users">
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[
|
||||
(4, ref('cetmix_tower_yaml.group_export')),
|
||||
(4, ref('cetmix_tower_yaml.group_import')),
|
||||
]"
|
||||
/>
|
||||
</record>
|
||||
</odoo>
|
||||
1097
addons/cetmix_tower_yaml/i18n/cetmix_tower_yaml.pot
Normal file
587
addons/cetmix_tower_yaml/i18n/hr.po
Normal file
@@ -0,0 +1,587 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * cetmix_tower_yaml
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-03-06 09:11+0000\n"
|
||||
"Last-Translator: Bole <bole@dajmi5.com>\n"
|
||||
"Language-Team: Croatian <https://hosted.weblate.org/projects/"
|
||||
"tower-server-14-0-dev/cetmix_tower_yaml/hr/>\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.10.3-dev\n"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:res.groups,comment:cetmix_tower_yaml.group_export
|
||||
msgid ""
|
||||
"\n"
|
||||
" Export data to YAML.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Izvoz podataka u YAML.\n"
|
||||
" "
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:res.groups,comment:cetmix_tower_yaml.group_import
|
||||
msgid ""
|
||||
"\n"
|
||||
" Import data from YAML.\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Uvoz podataka iz YAML.\n"
|
||||
" "
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid ""
|
||||
"<strong>Important:</strong> To maintain data consistency, the following "
|
||||
"model records will always be updated if they exist in Odoo:"
|
||||
msgstr ""
|
||||
"<strong>Važno:</strong> Za održavanje konsistencije podataka, sljedeći "
|
||||
"zapisi modela će uvijek biti ažurirani ako postoje u Odoo:"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__explode_child_records
|
||||
msgid ""
|
||||
"Add entire child record definitions to the exported YAML file. Otherwise "
|
||||
"only references to child records will be added."
|
||||
msgstr ""
|
||||
"Dodaj sve podređene definicije podataka u izveženu YAML datoteku. Inače će "
|
||||
"biti dodane samo reference na podređene zapise."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_command
|
||||
msgid "Cetmix Tower Command"
|
||||
msgstr "Cetmix Tower Naredba"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_plan
|
||||
msgid "Cetmix Tower Flight Plan"
|
||||
msgstr "Cetmix Tower Plan Leta"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_plan_line
|
||||
msgid "Cetmix Tower Flight Plan Line"
|
||||
msgstr "Cetmix Tower Stavka plana leta"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_plan_line_action
|
||||
msgid "Cetmix Tower Flight Plan Line Action"
|
||||
msgstr "Cetmix Tower Akcija stavke plana leta"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_os
|
||||
msgid "Cetmix Tower Operating System"
|
||||
msgstr "Cetmix Tower Operativni sistem"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_server_log
|
||||
msgid "Cetmix Tower Server Log"
|
||||
msgstr "Cetmix Tower Log servera"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_server_template
|
||||
msgid "Cetmix Tower Server Template"
|
||||
msgstr "Cetmix Tower Predložak servera"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_tag
|
||||
msgid "Cetmix Tower Tag"
|
||||
msgstr "Cetmix Tower Oznaka"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_variable
|
||||
msgid "Cetmix Tower Variable"
|
||||
msgstr "Cetmix Tower Varijabla"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_variable_option
|
||||
msgid "Cetmix Tower Variable Options"
|
||||
msgstr "Cetmix Tower Opcija varijable"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_variable_value
|
||||
msgid "Cetmix Tower Variable Values"
|
||||
msgstr "Cetmix Tower Vrijednosti varijabli"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.module.category,name:cetmix_tower_yaml.ir_module_category_tower_yaml
|
||||
msgid "Cetmix Tower YAML"
|
||||
msgstr "Cetmix Tower YAML"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_yaml_export_wiz_download
|
||||
msgid "Cetmix Tower YAML Export File Download"
|
||||
msgstr "Cetmix Tower YAML preuzimanje izvežene datoteke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_yaml_export_wiz
|
||||
msgid "Cetmix Tower YAML Export Wizard"
|
||||
msgstr "Cetmix Tower YAML Čarobnjak za izvoz"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_yaml_import_wiz
|
||||
msgid "Cetmix Tower YAML Import Wizard"
|
||||
msgstr "Cetmix Tower YAML Čarobnjak za uvoz"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_yaml_import_wiz_upload
|
||||
msgid "Cetmix Tower YAML Import Wizard Upload"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_yaml_mixin
|
||||
msgid "Cetmix Tower YAML rendering mixin"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_key
|
||||
msgid "Cetmix Tower private key storage"
|
||||
msgstr "Cetmix Tower Pohrana privatnih ključeva"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_export_wiz_download_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_export_wiz_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_upload_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Close"
|
||||
msgstr "Zatvori"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__comment
|
||||
msgid "Comment"
|
||||
msgstr "Komentar"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__comment
|
||||
msgid "Comment to be added to the beginning of exported YAML file"
|
||||
msgstr "Komentar koje će biti dodan na početku izvežene YAML datoteke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Create New Record"
|
||||
msgstr "Kreiraj novi zapis"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__create_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__create_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__create_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__create_uid
|
||||
msgid "Created by"
|
||||
msgstr "Kreirao"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__create_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__create_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__create_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__create_date
|
||||
msgid "Created on"
|
||||
msgstr "Kreirano"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model,name:cetmix_tower_yaml.model_cx_tower_file_template
|
||||
msgid "Cx Tower File Template"
|
||||
msgstr "CxTower Predložak datoteke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_command__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_file_template__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_key__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_os__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line_action__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_log__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_template__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_tag__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_option__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_value__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__display_name
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_mixin__display_name
|
||||
msgid "Display Name"
|
||||
msgstr "Naziv"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid ""
|
||||
"Existing record will be updated with the new data. Related records, present in the YAML code, will be updated too.\n"
|
||||
" If any of those related records doesn't exist, it will be created automatically."
|
||||
msgstr ""
|
||||
"Postojeći zapis će biti ažuriran sa novim podacima. Povezani zapisi, "
|
||||
"prisutni u YAML kodu, će također biti ažurirani.\n"
|
||||
" Ukoliko neki od "
|
||||
"povezanih zapisa ne postoji, biti će kreiran automatski."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__explode_child_records
|
||||
msgid "Explode Child Records"
|
||||
msgstr "Proširi podređene zapise"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:res.groups,name:cetmix_tower_yaml.group_export
|
||||
msgid "Export"
|
||||
msgstr "Izvoz"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_command_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_file_template_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_plan_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_server_template_view_form
|
||||
msgid "Export YAML"
|
||||
msgstr "Izvoz YAML"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/models/cx_tower_yaml_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Failed to convert dictionary to YAML: %(error)s"
|
||||
msgstr "Neuspjelo pretvaranje dictionary u YAML: %(error)s"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Failed to encode YAML content. Please ensure all characters are UTF-8 "
|
||||
"compatible."
|
||||
msgstr ""
|
||||
"Neuspjelo kreiranje YAML sadržaja. Molimo provjerite jesu li svi znakovi UTF-"
|
||||
"8 kompatabilni."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__file_name
|
||||
msgid "File Name"
|
||||
msgstr "Naziv datoteke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "File is not a valid base64-encoded file"
|
||||
msgstr "Datoteka nije ispravno base64 kodirana"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_export_wiz_view_form
|
||||
msgid "Generate YAML file"
|
||||
msgstr "Generiraj YAML datoteku"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_command__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_file_template__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_key__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_os__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line_action__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_log__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_template__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_tag__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_option__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_value__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__id
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_mixin__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__update_existing_record
|
||||
msgid ""
|
||||
"If enabled, existing records will be updated with the new data. Otherwise, "
|
||||
"new records will be created."
|
||||
msgstr ""
|
||||
"Ako je označeno, postojeći zapisi će biti ažurirani sa novim podacima. "
|
||||
"Inače, novi zapisi će biti kreirani."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:res.groups,name:cetmix_tower_yaml.group_import
|
||||
msgid "Import"
|
||||
msgstr "Uvoz"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.actions.act_window,name:cetmix_tower_yaml.action_cx_tower_yaml_import_wiz_upload
|
||||
#: model:ir.ui.menu,name:cetmix_tower_yaml.menu_cetmix_tower_yaml_import
|
||||
msgid "Import YAML"
|
||||
msgstr "Uvoz YAML"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "Invalid YAML file"
|
||||
msgstr "Neispravna YAML datoteka"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "Invalid model specified in the YAML file"
|
||||
msgstr "Neispravan model naveden u YAML datoteci"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_command____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_file_template____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_key____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_os____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line_action____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_log____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_template____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_tag____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_option____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_value____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload____last_update
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_mixin____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr "Zadnje modificirano"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__write_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__write_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__write_uid
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr "Zadnji ažurirao"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__write_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__write_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__write_date
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr "Zadnje ažurirano"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__model_description
|
||||
msgid "Model"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__model_name
|
||||
msgid "Model Name"
|
||||
msgstr "Naziv modela"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "Model does not support YAML import"
|
||||
msgstr "Model ne podržava YAML uvoz"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__model_name
|
||||
msgid "Model to create records in"
|
||||
msgstr "Model u kojem će podaci biti kreirani"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py:0
|
||||
#, python-format
|
||||
msgid "No YAML code is present."
|
||||
msgstr "YAML kod nije dostupan."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "No model for import is specified in the YAML file"
|
||||
msgstr "Model za uvoz nije naveden u YAML datoteci"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_export_wiz.py:0
|
||||
#, python-format
|
||||
msgid "No model or records selected"
|
||||
msgstr "Nisu odabrani zapisi ili model"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "OSs"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Open Existing Record"
|
||||
msgstr "Otvori postojeći zapis"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_upload_view_form
|
||||
msgid "Process"
|
||||
msgstr "U procesu"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__record_id
|
||||
msgid "Record"
|
||||
msgstr "Zapis"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__record_id
|
||||
msgid "Record ID to update"
|
||||
msgstr "ID zapisa za ažuriranje"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__remove_empty_values
|
||||
msgid "Remove Empty x2m Field Values"
|
||||
msgstr "Ukloni prazne x2m vrijednosti polja"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,help:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__remove_empty_values
|
||||
msgid ""
|
||||
"Remove empty Many2one, Many2many and One2many field values from the exported"
|
||||
" YAML file."
|
||||
msgstr ""
|
||||
"Ukloni prazne Many2one, Many2many i One2many vrijednosti polja iz izvežene "
|
||||
"YAML datoteke."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Tags"
|
||||
msgstr "Oznake"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "This will create a new record. Proceed?"
|
||||
msgstr "Ovo će kreirati novi zapis. Nastaviti?"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "This will overwrite the existing record. Proceed?"
|
||||
msgstr "Ovo će prepisati preko postojećeg zapisa. Nastaviti?"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid ""
|
||||
"To create new entities instead of updating existing ones, remove or modify "
|
||||
"the <code>reference</code> field in the YAML code for those entities."
|
||||
msgstr ""
|
||||
"Za kreiranje novih entiteta umjesto ažuriranja postojećih, uklonite ili "
|
||||
"modificirajte <code>reference</code> polje u YAML kodu za te zapise."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__update_existing_record
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Update Existing Record"
|
||||
msgstr "Ažuriraj postojeći zapis"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/models/cx_tower_yaml_mixin.py:0
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_tower_yaml_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Values must be a dictionary"
|
||||
msgstr "Vrijednosti moraju biti dictionary"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_yaml_import_wiz_view_form
|
||||
msgid "Variables"
|
||||
msgstr "Varijable"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/models/cx_tower_yaml_mixin.py:0
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_tower_yaml_mixin.py:0
|
||||
#, python-format
|
||||
msgid "Wrong value for 'access_level' key: %(acv)s"
|
||||
msgstr "Pogrešna vrijednost za ključ 'access_level': %(acv)s"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_command_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_file_template_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_plan_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_server_template_view_form
|
||||
msgid "YAML"
|
||||
msgstr ""
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "YAML file cannot be decoded properly"
|
||||
msgstr "YAML datoteku nije moguće pročitati ili dekodirati"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"YAML file version is not supported. You may need to update the Cetmix Tower "
|
||||
"Yaml module."
|
||||
msgstr ""
|
||||
"Verzija YAML datoteke nije podržana. Možda morate ažurirati Cetmix Tower "
|
||||
"Yaml modul."
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/models/cx_tower_yaml_mixin.py:0
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_tower_yaml_mixin.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"YAML version is higher than version supported by your Cetmix Tower instance."
|
||||
" %(code_version)s > %(tower_version)s"
|
||||
msgstr ""
|
||||
"YAML verzija je viša od verzije podržane na vašoj Cetmix Tower instanci. "
|
||||
"%(code_version)s>%(tower_version)s"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_command__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_file_template__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_key__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_os__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_plan_line_action__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_log__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_server_template__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_tag__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_option__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_variable_value__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz__yaml_code
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_mixin__yaml_code
|
||||
msgid "Yaml Code"
|
||||
msgstr "YAML kod"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__yaml_file
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_import_wiz_upload__yaml_file
|
||||
msgid "Yaml File"
|
||||
msgstr "YAML datoteka"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model:ir.model.fields,field_description:cetmix_tower_yaml.field_cx_tower_yaml_export_wiz_download__yaml_file_name
|
||||
msgid "Yaml File Name"
|
||||
msgstr "YAML naziv datoteke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/tests/test_yaml_import_wizard.py:0
|
||||
#: code:addons/cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz_upload.py:0
|
||||
#, python-format
|
||||
msgid "Yaml file doesn't contain valid data"
|
||||
msgstr "Yaml datoteka ne sadrži valjane podatke"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: code:addons/cetmix_tower_yaml/models/cx_tower_yaml_mixin.py:0
|
||||
#, python-format
|
||||
msgid "You are not allowed to create records from YAML"
|
||||
msgstr "Nije vam dozvoljeno kreiranje zapisa pomoću YAML datoteka"
|
||||
|
||||
#. module: cetmix_tower_yaml
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_command_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_file_template_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_plan_view_form
|
||||
#: model_terms:ir.ui.view,arch_db:cetmix_tower_yaml.cx_tower_server_template_view_form
|
||||
msgid "You must be a member of the \"YAML/Export\" group to export data as YAML."
|
||||
msgstr "Morate bit član \"YAML/Izvoz\" grupe za izvoz podataka u YAML."
|
||||
1069
addons/cetmix_tower_yaml/i18n/it.po
Normal file
@@ -0,0 +1,19 @@
|
||||
def migrate(cr, version):
|
||||
"""
|
||||
Normalize existing license values to lowercase.
|
||||
Runs only on upgrade (version != False).
|
||||
"""
|
||||
if not version:
|
||||
return
|
||||
# Skip rows already lowercase for efficiency
|
||||
cr.execute(
|
||||
"""
|
||||
UPDATE cx_tower_yaml_manifest_tmpl
|
||||
SET license = LOWER(TRIM(license))
|
||||
WHERE license IS NOT NULL
|
||||
AND (
|
||||
license <> LOWER(license)
|
||||
OR license <> TRIM(license)
|
||||
)
|
||||
"""
|
||||
)
|
||||
27
addons/cetmix_tower_yaml/models/__init__.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from . import cx_tower_yaml_mixin
|
||||
from . import cx_tower_command
|
||||
from . import cx_tower_file_template
|
||||
from . import cx_tower_tag
|
||||
from . import cx_tower_plan
|
||||
from . import cx_tower_plan_line
|
||||
from . import cx_tower_plan_line_action
|
||||
from . import cx_tower_variable
|
||||
from . import cx_tower_variable_option
|
||||
from . import cx_tower_variable_value
|
||||
from . import cx_tower_os
|
||||
from . import cx_tower_server_template
|
||||
from . import cx_tower_key
|
||||
from . import cx_tower_key_value
|
||||
from . import cx_tower_server_log
|
||||
from . import cx_tower_shortcut
|
||||
from . import cx_tower_scheduled_task
|
||||
from . import cx_tower_scheduled_task_cv
|
||||
from . import cx_tower_file
|
||||
from . import cx_tower_server
|
||||
from . import cx_tower_yaml_manifest_template
|
||||
from . import cx_tower_yaml_manifest_author
|
||||
from . import cx_tower_jet_template
|
||||
from . import cx_tower_jet_template_dependency
|
||||
from . import cx_tower_jet_state
|
||||
from . import cx_tower_jet_action
|
||||
from . import cx_tower_jet_waypoint_template
|
||||
43
addons/cetmix_tower_yaml/models/cx_tower_command.py
Normal file
@@ -0,0 +1,43 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerCommand(models.Model):
|
||||
_name = "cx.tower.command"
|
||||
_inherit = ["cx.tower.command", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"access_level",
|
||||
"name",
|
||||
"action",
|
||||
"allow_parallel_run",
|
||||
"note",
|
||||
"os_ids",
|
||||
"tag_ids",
|
||||
"path",
|
||||
"file_template_id",
|
||||
"if_file_exists",
|
||||
"disconnect_file",
|
||||
"flight_plan_id",
|
||||
"jet_template_id",
|
||||
"jet_action_id",
|
||||
"waypoint_template_id",
|
||||
"fly_here",
|
||||
"code",
|
||||
"no_split_for_sudo",
|
||||
"server_status",
|
||||
"variable_ids",
|
||||
"secret_ids",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_deferred_m2o_import_fields(self):
|
||||
"""Return m2o command fields resolved after the main import pass."""
|
||||
return {
|
||||
"jet_template_id": "cx.tower.jet.template",
|
||||
"jet_action_id": "cx.tower.jet.action",
|
||||
"waypoint_template_id": "cx.tower.jet.waypoint.template",
|
||||
}
|
||||
46
addons/cetmix_tower_yaml/models/cx_tower_file.py
Normal file
@@ -0,0 +1,46 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerFile(models.Model):
|
||||
_name = "cx.tower.file"
|
||||
_inherit = ["cx.tower.file", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"source",
|
||||
"file_type",
|
||||
"server_dir",
|
||||
"code",
|
||||
"file",
|
||||
"variable_ids",
|
||||
"secret_ids",
|
||||
"template_id",
|
||||
"keep_when_deleted",
|
||||
"auto_sync",
|
||||
"auto_sync_interval",
|
||||
"sync_date_next",
|
||||
"sync_date_last",
|
||||
"server_response",
|
||||
]
|
||||
return res
|
||||
|
||||
def _post_create_write(self, op_type="write"):
|
||||
# Do not pull/push files if they are being created from YAML
|
||||
if self.env.context.get("from_yaml"):
|
||||
return
|
||||
super()._post_create_write(op_type)
|
||||
|
||||
def _prepare_record_for_yaml(self):
|
||||
"""
|
||||
Override to drop file `code` when the source is 'server'.
|
||||
"""
|
||||
record_dict = super()._prepare_record_for_yaml()
|
||||
|
||||
if record_dict.get("source") == "server":
|
||||
record_dict["code"] = False
|
||||
|
||||
return record_dict
|
||||
25
addons/cetmix_tower_yaml/models/cx_tower_file_template.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerFileTemplate(models.Model):
|
||||
_name = "cx.tower.file.template"
|
||||
_inherit = ["cx.tower.file.template", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"source",
|
||||
"file_type",
|
||||
"server_dir",
|
||||
"file_name",
|
||||
"keep_when_deleted",
|
||||
"tag_ids",
|
||||
"note",
|
||||
"code",
|
||||
"variable_ids",
|
||||
"secret_ids",
|
||||
]
|
||||
return res
|
||||
26
addons/cetmix_tower_yaml/models/cx_tower_jet_action.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerJetAction(models.Model):
|
||||
_name = "cx.tower.jet.action"
|
||||
_inherit = [
|
||||
"cx.tower.jet.action",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"note",
|
||||
"priority",
|
||||
"access_level",
|
||||
"state_from_id",
|
||||
"state_transit_id",
|
||||
"state_to_id",
|
||||
"state_error_id",
|
||||
"plan_id",
|
||||
]
|
||||
return res
|
||||
22
addons/cetmix_tower_yaml/models/cx_tower_jet_state.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerJetState(models.Model):
|
||||
_name = "cx.tower.jet.state"
|
||||
_inherit = [
|
||||
"cx.tower.jet.state",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"sequence",
|
||||
"access_level",
|
||||
"color",
|
||||
"note",
|
||||
]
|
||||
return res
|
||||
42
addons/cetmix_tower_yaml/models/cx_tower_jet_template.py
Normal file
@@ -0,0 +1,42 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerJetTemplate(models.Model):
|
||||
_name = "cx.tower.jet.template"
|
||||
_inherit = [
|
||||
"cx.tower.jet.template",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"note",
|
||||
"tag_ids",
|
||||
"limit_per_server",
|
||||
"show_in_create_wizard",
|
||||
"plan_install_id",
|
||||
"plan_uninstall_id",
|
||||
"plan_clone_same_server_id",
|
||||
"plan_clone_different_server_id",
|
||||
"variable_value_ids",
|
||||
"action_ids",
|
||||
"template_requires_ids",
|
||||
"waypoint_template_ids",
|
||||
"server_log_ids",
|
||||
"scheduled_task_ids",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_deferred_x2m_import_fields(self):
|
||||
"""Return x2m child records resolved after the main import pass."""
|
||||
return {
|
||||
"template_requires_ids": {
|
||||
"child_model": "cx.tower.jet.template.dependency",
|
||||
"deferred_field": "template_required_id",
|
||||
"target_model": "cx.tower.jet.template",
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerJetTemplateDependency(models.Model):
|
||||
_name = "cx.tower.jet.template.dependency"
|
||||
_inherit = [
|
||||
"cx.tower.jet.template.dependency",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"template_required_id",
|
||||
"state_required_id",
|
||||
]
|
||||
return res
|
||||
@@ -0,0 +1,32 @@
|
||||
# Copyright (C) 2025 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerJetWaypointTemplate(models.Model):
|
||||
_name = "cx.tower.jet.waypoint.template"
|
||||
_inherit = [
|
||||
"cx.tower.jet.waypoint.template",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"sequence",
|
||||
"access_level",
|
||||
"jet_template_id",
|
||||
"plan_create_id",
|
||||
"plan_arrive_id",
|
||||
"plan_leave_id",
|
||||
"plan_delete_id",
|
||||
"note",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_deferred_m2o_import_fields(self):
|
||||
"""Return m2o waypoint-template fields resolved after import."""
|
||||
return {
|
||||
"jet_template_id": "cx.tower.jet.template",
|
||||
}
|
||||
20
addons/cetmix_tower_yaml/models/cx_tower_key.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerKey(models.Model):
|
||||
_name = "cx.tower.key"
|
||||
_inherit = [
|
||||
"cx.tower.key",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"key_type",
|
||||
"note",
|
||||
]
|
||||
return res
|
||||
18
addons/cetmix_tower_yaml/models/cx_tower_key_value.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerKeyValue(models.Model):
|
||||
_name = "cx.tower.key.value"
|
||||
_inherit = [
|
||||
"cx.tower.key.value",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"key_id",
|
||||
]
|
||||
return res
|
||||
20
addons/cetmix_tower_yaml/models/cx_tower_os.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerOs(models.Model):
|
||||
_name = "cx.tower.os"
|
||||
_inherit = [
|
||||
"cx.tower.os",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"color",
|
||||
"parent_id",
|
||||
]
|
||||
return res
|
||||
40
addons/cetmix_tower_yaml/models/cx_tower_plan.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerPlan(models.Model):
|
||||
_name = "cx.tower.plan"
|
||||
_inherit = ["cx.tower.plan", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"access_level",
|
||||
"allow_parallel_run",
|
||||
"color",
|
||||
"tag_ids",
|
||||
"note",
|
||||
"on_error_action",
|
||||
"custom_exit_code",
|
||||
"line_ids",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_deferred_x2m_import_fields(self):
|
||||
"""Defer plan lines whose command is not resolvable during nested import.
|
||||
|
||||
Deep YAML (e.g. a command's waypoint inlines a jet template whose plans
|
||||
reference that same command) creates a forward reference: plan lines are
|
||||
prepared before the command exists in the database. Queue those lines
|
||||
and create them after the main import pass when ``command_id`` can be
|
||||
resolved.
|
||||
"""
|
||||
return {
|
||||
"line_ids": {
|
||||
"child_model": "cx.tower.plan.line",
|
||||
"deferred_field": "command_id",
|
||||
"target_model": "cx.tower.command",
|
||||
}
|
||||
}
|
||||
21
addons/cetmix_tower_yaml/models/cx_tower_plan_line.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerPlanLine(models.Model):
|
||||
_name = "cx.tower.plan.line"
|
||||
_inherit = ["cx.tower.plan.line", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"sequence",
|
||||
"condition",
|
||||
"use_sudo",
|
||||
"path",
|
||||
"command_id",
|
||||
"action_ids",
|
||||
"variable_ids",
|
||||
]
|
||||
return res
|
||||
20
addons/cetmix_tower_yaml/models/cx_tower_plan_line_action.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerPlanLineAction(models.Model):
|
||||
_name = "cx.tower.plan.line.action"
|
||||
_inherit = ["cx.tower.plan.line.action", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"sequence",
|
||||
"condition",
|
||||
"value_char",
|
||||
"action",
|
||||
"custom_exit_code",
|
||||
"variable_value_ids",
|
||||
]
|
||||
return res
|
||||
42
addons/cetmix_tower_yaml/models/cx_tower_scheduled_task.py
Normal file
@@ -0,0 +1,42 @@
|
||||
# Copyright (C) 2025 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerScheduledTask(models.Model):
|
||||
_name = "cx.tower.scheduled.task"
|
||||
_inherit = ["cx.tower.scheduled.task", "cx.tower.yaml.mixin"]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"sequence",
|
||||
"action",
|
||||
"command_id",
|
||||
"plan_id",
|
||||
"interval_number",
|
||||
"interval_type",
|
||||
"next_call",
|
||||
"last_call",
|
||||
"monday",
|
||||
"tuesday",
|
||||
"wednesday",
|
||||
"thursday",
|
||||
"friday",
|
||||
"saturday",
|
||||
"sunday",
|
||||
"custom_variable_value_ids",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_deferred_x2m_import_fields(self):
|
||||
"""Return scheduled-task child records resolved after import."""
|
||||
return {
|
||||
"custom_variable_value_ids": {
|
||||
"child_model": "cx.tower.scheduled.task.cv",
|
||||
"deferred_field": "variable_value_id",
|
||||
"target_model": "cx.tower.variable.value",
|
||||
"skip_empty": True,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# Copyright (C) 2025 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerScheduledTaskCv(models.Model):
|
||||
_name = "cx.tower.scheduled.task.cv"
|
||||
_inherit = [
|
||||
"cx.tower.scheduled.task.cv",
|
||||
"cx.tower.yaml.mixin",
|
||||
"cx.tower.reference.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += ["variable_value_id"]
|
||||
return res
|
||||
|
||||
def _post_process_yaml_dict_values(self, values):
|
||||
"""Populate required child fields from the linked variable value."""
|
||||
res = super()._post_process_yaml_dict_values(values)
|
||||
variable_value_id = res.get("variable_value_id")
|
||||
if variable_value_id:
|
||||
variable_value = self.env["cx.tower.variable.value"].browse(
|
||||
variable_value_id
|
||||
)
|
||||
if variable_value.exists():
|
||||
res.update(
|
||||
{
|
||||
"name": variable_value.name,
|
||||
"variable_id": variable_value.variable_id.id,
|
||||
"option_id": variable_value.option_id.id or False,
|
||||
"value_char": variable_value.value_char,
|
||||
}
|
||||
)
|
||||
return res
|
||||
52
addons/cetmix_tower_yaml/models/cx_tower_server.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# Copyright (C) 2024 Cetmix OÜ
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
from odoo import models
|
||||
|
||||
|
||||
class CxTowerServer(models.Model):
|
||||
_name = "cx.tower.server"
|
||||
_inherit = [
|
||||
"cx.tower.server",
|
||||
"cx.tower.yaml.mixin",
|
||||
]
|
||||
|
||||
def _get_fields_for_yaml(self):
|
||||
res = super()._get_fields_for_yaml()
|
||||
res += [
|
||||
"name",
|
||||
"ip_v4_address",
|
||||
"ip_v6_address",
|
||||
"skip_host_key",
|
||||
"color",
|
||||
"os_id",
|
||||
"tag_ids",
|
||||
"url",
|
||||
"note",
|
||||
"ssh_port",
|
||||
"ssh_username",
|
||||
"ssh_key_id",
|
||||
"ssh_auth_mode",
|
||||
"use_sudo",
|
||||
"variable_value_ids",
|
||||
"secret_ids",
|
||||
"server_log_ids",
|
||||
"shortcut_ids",
|
||||
"scheduled_task_ids",
|
||||
"plan_delete_id",
|
||||
"file_ids",
|
||||
"command_ids",
|
||||
"plan_ids",
|
||||
]
|
||||
return res
|
||||
|
||||
def _get_force_x2m_resolve_models(self):
|
||||
res = super()._get_force_x2m_resolve_models()
|
||||
|
||||
# This is useful to avoid duplicating existing plans
|
||||
res += [
|
||||
"cx.tower.shortcut",
|
||||
"cx.tower.scheduled.task",
|
||||
"cx.tower.command",
|
||||
"cx.tower.plan",
|
||||
]
|
||||
return res
|
||||
127
addons/cx_web_refresh_from_backend/README.rst
Normal file
@@ -0,0 +1,127 @@
|
||||
========================
|
||||
Web Refresh From Backend
|
||||
========================
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:e841ff66d3bfff0a3de22c9be5dc40f1ca539739f5487a9162fdf887fc5ac6ad
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
|
||||
:alt: License: LGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
|
||||
:target: https://github.com/cetmix/cetmix-tower/tree/16.0/cx_web_refresh_from_backend
|
||||
:alt: cetmix/cetmix-tower
|
||||
|
||||
|badge1| |badge2| |badge3|
|
||||
|
||||
Backend UI Reload Module
|
||||
========================
|
||||
|
||||
This is a **technical module** that allows triggering a **UI reload**
|
||||
from the backend. It enables triggering the reload action for selected
|
||||
users and record IDs.
|
||||
|
||||
--------------
|
||||
|
||||
🔧 Helper Function: ``reload_views``
|
||||
------------------------------------
|
||||
|
||||
A special helper function ``reload_views`` is added to the ``res.users``
|
||||
model.
|
||||
|
||||
**Arguments**
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
+----------------+--------------------------+--------------------------+
|
||||
| Argument | Type | Description |
|
||||
+================+==========================+==========================+
|
||||
| **model** | ``Char`` | Model name, e.g. |
|
||||
| | | ``'res.partner'`` |
|
||||
+----------------+--------------------------+--------------------------+
|
||||
| **view_types** | ``List of Char`` | View types to reload, |
|
||||
| | *(optional)* | e.g. |
|
||||
| | | ``["form", "kanban"]``. |
|
||||
| | | Leave blank to reload |
|
||||
| | | all views. |
|
||||
+----------------+--------------------------+--------------------------+
|
||||
| **rec_ids** | ``List of Integer`` | The view will be |
|
||||
| | *(optional)* | reloaded only if a |
|
||||
| | | record with an ID from |
|
||||
| | | this list is present in |
|
||||
| | | the view. |
|
||||
+----------------+--------------------------+--------------------------+
|
||||
|
||||
--------------
|
||||
|
||||
⚠️ Important Notes
|
||||
------------------
|
||||
|
||||
Use this function **wisely**.
|
||||
|
||||
When reloading **form views**, be aware that if a user is currently
|
||||
editing a record, **their unsaved updates may be lost**.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
🧩 Example Usage
|
||||
----------------
|
||||
|
||||
Below is a code snippet showing how to use the ``reload_views`` helper
|
||||
function.
|
||||
|
||||
.. code:: python
|
||||
|
||||
# Reload the kanban and form views for all salespeople when an opportunity is won
|
||||
# Will reload views only if the current opportunity is being displayed
|
||||
|
||||
group_id = self.env.ref("sales_team.group_sale_salesman").id
|
||||
users_to_reload = self.env["res.users"].search([("groups_id", "in", [group_id])])
|
||||
users_to_reload.reload_views(
|
||||
model="crm.lead",
|
||||
view_types=["kanban", "form"],
|
||||
rec_ids=[self.id],
|
||||
)
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cx_web_refresh_from_backend%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Cetmix
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Cetmix
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/16.0/cx_web_refresh_from_backend>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute.
|
||||
4
addons/cx_web_refresh_from_backend/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import models
|
||||
26
addons/cx_web_refresh_from_backend/__manifest__.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
# Mail is required: its ir.websocket override subscribes the partner channel to the
|
||||
# bus, so users receive web.refresh_view notifications.
|
||||
|
||||
{
|
||||
"name": "Web Refresh From Backend",
|
||||
"summary": "Refresh frontend views from backend",
|
||||
"version": "16.0.1.0.0",
|
||||
"category": "Web",
|
||||
"license": "LGPL-3",
|
||||
"author": "Cetmix",
|
||||
"website": "https://tower.cetmix.com",
|
||||
"images": ["static/description/banner.png"],
|
||||
"depends": ["mail"],
|
||||
"assets": {
|
||||
"web.assets_backend": [
|
||||
"cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js",
|
||||
"cx_web_refresh_from_backend/static/src/views/kanban/kanban_controller_patch.esm.js",
|
||||
"cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js",
|
||||
],
|
||||
},
|
||||
"installable": True,
|
||||
"auto_install": False,
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * cx_web_refresh_from_backend
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "All unsaved changes will be lost! Continue?"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js:0
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Continue"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Could not reload form. "
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/kanban/kanban_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Could not reload kanban. "
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Could not reload list. "
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Could not save record. "
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/form/form_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Form is being refreshed from backend"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "List is being refreshed from backend"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "Save & Refresh"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#: model:ir.model,name:cx_web_refresh_from_backend.model_res_users
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: cx_web_refresh_from_backend
|
||||
#. odoo-javascript
|
||||
#: code:addons/cx_web_refresh_from_backend/static/src/views/list/list_controller_patch.esm.js:0
|
||||
#, python-format
|
||||
msgid "You have unsaved edits. Save them before refreshing?"
|
||||
msgstr ""
|
||||
4
addons/cx_web_refresh_from_backend/models/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import res_users
|
||||
50
addons/cx_web_refresh_from_backend/models/res_users.py
Normal file
@@ -0,0 +1,50 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class ResUsers(models.Model):
|
||||
_inherit = "res.users"
|
||||
|
||||
def reload_views(self, model, view_types=None, rec_ids=None):
|
||||
"""
|
||||
Trigger UI reload for selected users and record IDs.
|
||||
|
||||
This method allows to reload specific views from the backend.
|
||||
Be aware that when reloading form views, if a user is currently
|
||||
doing some updates, those updates may be lost.
|
||||
|
||||
:param model: str, Model name (e.g., 'res.partner')
|
||||
:param view_types: list of str, optional, View types to reload
|
||||
(e.g., ['form', 'kanban']). Leave blank to reload all views.
|
||||
:param rec_ids: list of int, optional, View will be reloaded only if a record
|
||||
with id from the list is present in the view.
|
||||
|
||||
Example usage:
|
||||
# Reload the kanban and form views for all salespeople
|
||||
# when an opportunity is won.
|
||||
# Will reload views only if the current opportunity is being displayed
|
||||
group_id = self.env.ref("sales_team.group_sale_salesman").id
|
||||
users_to_reload = self.env["res.users"].search(
|
||||
[("groups_id", "in", [group_id])]
|
||||
)
|
||||
users_to_reload.reload_views(
|
||||
model="crm.lead",
|
||||
view_types=["kanban", "form"],
|
||||
rec_ids=[self.id]
|
||||
)
|
||||
"""
|
||||
|
||||
# Prepare the message payload
|
||||
bus_message = {
|
||||
"model": model,
|
||||
"view_types": view_types or [],
|
||||
"rec_ids": rec_ids or [],
|
||||
}
|
||||
|
||||
# Send notification to each user's partner
|
||||
notifications = [
|
||||
[user.partner_id, "web.refresh_view", bus_message] for user in self
|
||||
]
|
||||
self.env["bus.bus"]._sendmany(notifications)
|
||||
3
addons/cx_web_refresh_from_backend/pyproject.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
@@ -0,0 +1,2 @@
|
||||
* Cetmix
|
||||
|
||||
27
addons/cx_web_refresh_from_backend/readme/DESCRIPTION.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Backend UI Reload Module
|
||||
|
||||
This is a **technical module** that allows triggering a **UI reload** from the backend.
|
||||
It enables triggering the reload action for selected users and record IDs.
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Helper Function: `reload_views`
|
||||
|
||||
A special helper function `reload_views` is added to the `res.users` model.
|
||||
|
||||
### **Arguments**
|
||||
|
||||
| Argument | Type | Description |
|
||||
|-----------|------|-------------|
|
||||
| **model** | `Char` | Model name, e.g. `'res.partner'` |
|
||||
| **view_types** | `List of Char` *(optional)* | View types to reload, e.g. `["form", "kanban"]`. Leave blank to reload all views. |
|
||||
| **rec_ids** | `List of Integer` *(optional)* | The view will be reloaded only if a record with an ID from this list is present in the view. |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Important Notes
|
||||
|
||||
Use this function **wisely**.
|
||||
|
||||
When reloading **form views**, be aware that if a user is currently editing a record,
|
||||
**their unsaved updates may be lost**.
|
||||
16
addons/cx_web_refresh_from_backend/readme/USAGE.md
Normal file
@@ -0,0 +1,16 @@
|
||||
## 🧩 Example Usage
|
||||
|
||||
Below is a code snippet showing how to use the `reload_views` helper function.
|
||||
|
||||
```python
|
||||
# Reload the kanban and form views for all salespeople when an opportunity is won
|
||||
# Will reload views only if the current opportunity is being displayed
|
||||
|
||||
group_id = self.env.ref("sales_team.group_sale_salesman").id
|
||||
users_to_reload = self.env["res.users"].search([("groups_id", "in", [group_id])])
|
||||
users_to_reload.reload_views(
|
||||
model="crm.lead",
|
||||
view_types=["kanban", "form"],
|
||||
rec_ids=[self.id],
|
||||
)
|
||||
```
|
||||
BIN
addons/cx_web_refresh_from_backend/static/description/banner.png
Normal file
|
After Width: | Height: | Size: 204 KiB |
BIN
addons/cx_web_refresh_from_backend/static/description/icon.png
Normal file
|
After Width: | Height: | Size: 9.4 KiB |
484
addons/cx_web_refresh_from_backend/static/description/index.html
Normal file
@@ -0,0 +1,484 @@
|
||||
<!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" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Web Refresh From Backend</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="web-refresh-from-backend">
|
||||
<h1 class="title">Web Refresh From Backend</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:e841ff66d3bfff0a3de22c9be5dc40f1ca539739f5487a9162fdf887fc5ac6ad
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/cetmix/cetmix-tower/tree/16.0/cx_web_refresh_from_backend"><img alt="cetmix/cetmix-tower" src="https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github" /></a></p>
|
||||
<div class="section" id="backend-ui-reload-module">
|
||||
<h1>Backend UI Reload Module</h1>
|
||||
<p>This is a <strong>technical module</strong> that allows triggering a <strong>UI reload</strong>
|
||||
from the backend. It enables triggering the reload action for selected
|
||||
users and record IDs.</p>
|
||||
<hr class="docutils" />
|
||||
<div class="section" id="helper-function-reload-views">
|
||||
<h2>🔧 Helper Function: <tt class="docutils literal">reload_views</tt></h2>
|
||||
<p>A special helper function <tt class="docutils literal">reload_views</tt> is added to the <tt class="docutils literal">res.users</tt>
|
||||
model.</p>
|
||||
<div class="section" id="arguments">
|
||||
<h3><strong>Arguments</strong></h3>
|
||||
<table border="1" class="docutils">
|
||||
<colgroup>
|
||||
<col width="24%" />
|
||||
<col width="38%" />
|
||||
<col width="38%" />
|
||||
</colgroup>
|
||||
<thead valign="bottom">
|
||||
<tr><th class="head">Argument</th>
|
||||
<th class="head">Type</th>
|
||||
<th class="head">Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
<tr><td><strong>model</strong></td>
|
||||
<td><tt class="docutils literal">Char</tt></td>
|
||||
<td>Model name, e.g.
|
||||
<tt class="docutils literal">'res.partner'</tt></td>
|
||||
</tr>
|
||||
<tr><td><strong>view_types</strong></td>
|
||||
<td><tt class="docutils literal">List of Char</tt>
|
||||
<em>(optional)</em></td>
|
||||
<td>View types to reload,
|
||||
e.g.
|
||||
<tt class="docutils literal">["form", "kanban"]</tt>.
|
||||
Leave blank to reload
|
||||
all views.</td>
|
||||
</tr>
|
||||
<tr><td><strong>rec_ids</strong></td>
|
||||
<td><tt class="docutils literal">List of Integer</tt>
|
||||
<em>(optional)</em></td>
|
||||
<td>The view will be
|
||||
reloaded only if a
|
||||
record with an ID from
|
||||
this list is present in
|
||||
the view.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="docutils" />
|
||||
<div class="section" id="important-notes">
|
||||
<h2>⚠️ Important Notes</h2>
|
||||
<p>Use this function <strong>wisely</strong>.</p>
|
||||
<p>When reloading <strong>form views</strong>, be aware that if a user is currently
|
||||
editing a record, <strong>their unsaved updates may be lost</strong>.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1>Usage</h1>
|
||||
<div class="section" id="example-usage">
|
||||
<h2>🧩 Example Usage</h2>
|
||||
<p>Below is a code snippet showing how to use the <tt class="docutils literal">reload_views</tt> helper
|
||||
function.</p>
|
||||
<pre class="code python literal-block">
|
||||
<span class="c1"># Reload the kanban and form views for all salespeople when an opportunity is won</span><span class="w">
|
||||
</span><span class="c1"># Will reload views only if the current opportunity is being displayed</span><span class="w">
|
||||
|
||||
</span><span class="n">group_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="o">.</span><span class="n">ref</span><span class="p">(</span><span class="s2">"sales_team.group_sale_salesman"</span><span class="p">)</span><span class="o">.</span><span class="n">id</span><span class="w">
|
||||
</span><span class="n">users_to_reload</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">env</span><span class="p">[</span><span class="s2">"res.users"</span><span class="p">]</span><span class="o">.</span><span class="n">search</span><span class="p">([(</span><span class="s2">"groups_id"</span><span class="p">,</span> <span class="s2">"in"</span><span class="p">,</span> <span class="p">[</span><span class="n">group_id</span><span class="p">])])</span><span class="w">
|
||||
</span><span class="n">users_to_reload</span><span class="o">.</span><span class="n">reload_views</span><span class="p">(</span><span class="w">
|
||||
</span> <span class="n">model</span><span class="o">=</span><span class="s2">"crm.lead"</span><span class="p">,</span><span class="w">
|
||||
</span> <span class="n">view_types</span><span class="o">=</span><span class="p">[</span><span class="s2">"kanban"</span><span class="p">,</span> <span class="s2">"form"</span><span class="p">],</span><span class="w">
|
||||
</span> <span class="n">rec_ids</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">],</span><span class="w">
|
||||
</span><span class="p">)</span>
|
||||
</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1>Bug Tracker</h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cx_web_refresh_from_backend%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1>Credits</h1>
|
||||
<div class="section" id="authors">
|
||||
<h2>Authors</h2>
|
||||
<ul class="simple">
|
||||
<li>Cetmix</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2>Contributors</h2>
|
||||
<ul class="simple">
|
||||
<li>Cetmix</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2>Maintainers</h2>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/cetmix/cetmix-tower/tree/16.0/cx_web_refresh_from_backend">cetmix/cetmix-tower</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,181 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {FormController} from "@web/views/form/form_controller";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
import {onWillUnmount} from "@odoo/owl";
|
||||
import {ConfirmationDialog} from "@web/core/confirmation_dialog/confirmation_dialog";
|
||||
|
||||
// Patch the standard FormController to react on bus notifications
|
||||
patch(FormController.prototype, "cx_web_refresh_from_backend.FormController", {
|
||||
setup() {
|
||||
// Call original setup logic
|
||||
this._super(...arguments);
|
||||
|
||||
// Get core services used by this behavior
|
||||
this.busService = useService("bus_service");
|
||||
this.actionService = useService("action");
|
||||
this.notificationService = useService("notification");
|
||||
|
||||
// Timestamp of last local save (used to avoid immediate auto-refresh)
|
||||
this._lastLocalSave = null;
|
||||
|
||||
// Bind the handler to keep reference for cleanup
|
||||
this._boundBusHandler = this._onBusNotification.bind(this);
|
||||
|
||||
// Subscribe to bus notifications
|
||||
this.busService.addEventListener("notification", this._boundBusHandler);
|
||||
|
||||
// Cleanup subscription on component unmount
|
||||
onWillUnmount(() => {
|
||||
if (this.busService && this._boundBusHandler) {
|
||||
this.busService.removeEventListener(
|
||||
"notification",
|
||||
this._boundBusHandler
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle bus notification for view refresh.
|
||||
* Listens for notifications with type "web.refresh_view" and delegates
|
||||
* processing to _handleViewRefresh.
|
||||
*
|
||||
* @param {Event} event - Bus notification event
|
||||
*/
|
||||
async _onBusNotification({detail: notifications}) {
|
||||
// Check if component is still alive
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const {payload, type} of notifications) {
|
||||
if (type === "web.refresh_view") {
|
||||
await this._handleViewRefresh(payload);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle view refresh notification.
|
||||
*
|
||||
* Only refreshes when:
|
||||
* - model matches current form model
|
||||
* - requested view types include "form" (if specified)
|
||||
* - record id matches current record (if specified)
|
||||
*
|
||||
* @param {Object} notification - Notification payload
|
||||
*/
|
||||
async _handleViewRefresh(notification) {
|
||||
const {model, view_types = [], rec_ids = []} = notification;
|
||||
|
||||
// Check if the model matches current form model
|
||||
if (this.props.resModel !== model) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if view_type matches (if specified in notification)
|
||||
if (view_types.length > 0 && !view_types.includes("form")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if record ID matches (if rec_ids is specified)
|
||||
const currentResId = this.model && this.model.root && this.model.root.resId;
|
||||
if (rec_ids.length > 0 && (!currentResId || !rec_ids.includes(currentResId))) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Skip refresh when form is in a dialog or when a wizard is on top of the stack.
|
||||
// Refreshing in that context can leave wizard/confirmation dialogs stuck open
|
||||
// (e.g. confirm="..." in wizard view).
|
||||
if (this.env.inDialog) {
|
||||
return;
|
||||
}
|
||||
const currentController = this.actionService.currentController;
|
||||
const currentAction = currentController && currentController.action;
|
||||
if (currentAction && currentAction.target === "new") {
|
||||
return;
|
||||
}
|
||||
|
||||
await this.refreshForm();
|
||||
},
|
||||
|
||||
/**
|
||||
* Refresh the form with actual data from server.
|
||||
*
|
||||
* For normal forms:
|
||||
* - if record is clean: perform a soft_reload action
|
||||
* - if record has unsaved changes: ask for confirmation, then reload
|
||||
*
|
||||
* For wizards (dialogs, target="new"):
|
||||
* - reload only the current record without full action reload
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async refreshForm() {
|
||||
// Do not refresh immediately after an explicit save (debounce window)
|
||||
if (this._lastLocalSave && Date.now() - this._lastLocalSave < 1000) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if this form is opened as a wizard (dialog)
|
||||
const currentController = this.actionService.currentController;
|
||||
const action = currentController && currentController.action;
|
||||
const isWizard = action && action.target === "new";
|
||||
|
||||
const record = this.model.root;
|
||||
|
||||
if (!isWizard && record.isDirty) {
|
||||
// Ask user whether to discard unsaved changes before refreshing
|
||||
const confirmed = await new Promise((resolve) => {
|
||||
this.dialogService.add(ConfirmationDialog, {
|
||||
title: this.env._t("Form is being refreshed from backend"),
|
||||
body: this.env._t("All unsaved changes will be lost! Continue?"),
|
||||
confirm: () => resolve(true),
|
||||
cancel: () => resolve(false),
|
||||
confirmLabel: this.env._t("Continue"),
|
||||
cancelLabel: this.env._t("Cancel"),
|
||||
});
|
||||
});
|
||||
|
||||
if (!confirmed) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
await record.load();
|
||||
} catch (error) {
|
||||
const message =
|
||||
(error && error.data && error.data.message) ||
|
||||
(error && error.message) ||
|
||||
String(error);
|
||||
this.notificationService.add(
|
||||
this.env._t("Could not reload form. ") + message,
|
||||
{type: "danger"}
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the view (only if component is still mounted)
|
||||
if (this.model && this.model.root) {
|
||||
this.render(true);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Override of save button handler.
|
||||
*
|
||||
* Stores timestamp of last local save to avoid immediate auto-refresh
|
||||
* triggered by our own changes.
|
||||
*/
|
||||
async saveButtonClicked() {
|
||||
this._lastLocalSave = Date.now();
|
||||
return await this._super(...arguments);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,137 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {KanbanController} from "@web/views/kanban/kanban_controller";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
import {onWillUnmount} from "@odoo/owl";
|
||||
|
||||
patch(KanbanController.prototype, "cx_web_refresh_from_backend.KanbanController", {
|
||||
setup() {
|
||||
this._super(...arguments);
|
||||
this.busService = useService("bus_service");
|
||||
this.notificationService = useService("notification");
|
||||
|
||||
// Bind the handler to keep reference for cleanup
|
||||
this._boundBusHandler = this._onBusNotification.bind(this);
|
||||
|
||||
// Subscribe to bus notifications
|
||||
this.busService.addEventListener("notification", this._boundBusHandler);
|
||||
|
||||
// Cleanup on unmount
|
||||
onWillUnmount(() => {
|
||||
if (this.busService && this._boundBusHandler) {
|
||||
this.busService.removeEventListener(
|
||||
"notification",
|
||||
this._boundBusHandler
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle bus notification for view refresh
|
||||
* @param {Event} event - Bus notification event
|
||||
*/
|
||||
async _onBusNotification({detail: notifications}) {
|
||||
// Check if component is still alive
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const {payload, type} of notifications) {
|
||||
if (type === "web.refresh_view") {
|
||||
await this._handleViewRefresh(payload);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle view refresh notification
|
||||
* @param {Object} notification - Notification payload
|
||||
*/
|
||||
async _handleViewRefresh(notification) {
|
||||
const {model, view_types = [], rec_ids = []} = notification;
|
||||
|
||||
// Check if the model matches
|
||||
if (this.props.resModel !== model) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if view_type matches (if specified)
|
||||
if (view_types.length > 0 && !view_types.includes("kanban")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if record ID matches (if rec_ids is specified)
|
||||
if (rec_ids.length > 0) {
|
||||
const loadedIds = this.getLoadedRecordIds();
|
||||
const shouldReload = loadedIds.some((id) => rec_ids.includes(id));
|
||||
|
||||
if (!shouldReload) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await this.refreshList();
|
||||
},
|
||||
|
||||
/**
|
||||
* Refresh the kanban with actual data from server
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async refreshList() {
|
||||
// Safety check: component might be destroyed
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
const list = this.model.root;
|
||||
|
||||
// Reload data from server
|
||||
try {
|
||||
await list.load();
|
||||
} catch (error) {
|
||||
const message =
|
||||
(error && error.data && error.data.message) ||
|
||||
(error && error.message) ||
|
||||
String(error);
|
||||
this.notificationService.add(
|
||||
this.env._t("Could not reload kanban. ") + message,
|
||||
{type: "danger"}
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the view (only if component is still mounted)
|
||||
if (this.model && this.model.root) {
|
||||
this.render(true);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Get IDs of all loaded records on the current page
|
||||
* @returns {Array<Number>} Array of record IDs
|
||||
*/
|
||||
getLoadedRecordIds() {
|
||||
const list = this.model.root;
|
||||
|
||||
if (list.isGrouped) {
|
||||
// For grouped kanban, collect IDs from all groups
|
||||
const recordIds = [];
|
||||
const collectIds = (groups) => {
|
||||
for (const group of groups) {
|
||||
if (group.list && group.list.records) {
|
||||
recordIds.push(...group.list.records.map((r) => r.resId));
|
||||
}
|
||||
if (group.groups) {
|
||||
collectIds(group.groups);
|
||||
}
|
||||
}
|
||||
};
|
||||
collectIds(list.groups);
|
||||
return recordIds;
|
||||
}
|
||||
// For regular kanban, return IDs of all records
|
||||
return list.records.map((record) => record.resId);
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,177 @@
|
||||
/** @odoo-module **/
|
||||
|
||||
import {ListController} from "@web/views/list/list_controller";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
import {onWillUnmount} from "@odoo/owl";
|
||||
import {ConfirmationDialog} from "@web/core/confirmation_dialog/confirmation_dialog";
|
||||
|
||||
patch(ListController.prototype, "cx_web_refresh_from_backend.ListController", {
|
||||
setup() {
|
||||
this._super(...arguments);
|
||||
this.busService = useService("bus_service");
|
||||
this.dialogService = useService("dialog");
|
||||
this.notificationService = useService("notification");
|
||||
|
||||
// Bind the handler to keep reference for cleanup
|
||||
this._boundBusHandler = this._onBusNotification.bind(this);
|
||||
|
||||
// Subscribe to bus notifications
|
||||
this.busService.addEventListener("notification", this._boundBusHandler);
|
||||
|
||||
// Cleanup on unmount
|
||||
onWillUnmount(() => {
|
||||
if (this.busService && this._boundBusHandler) {
|
||||
this.busService.removeEventListener(
|
||||
"notification",
|
||||
this._boundBusHandler
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle bus notification for view refresh
|
||||
* @param {Event} event - Bus notification event
|
||||
*/
|
||||
async _onBusNotification({detail: notifications}) {
|
||||
// Check if component is still alive
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const {payload, type} of notifications) {
|
||||
if (type === "web.refresh_view") {
|
||||
await this._handleViewRefresh(payload);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Handle view refresh notification
|
||||
* @param {Object} notification - Notification payload
|
||||
*/
|
||||
async _handleViewRefresh(notification) {
|
||||
const {model, view_types = [], rec_ids = []} = notification;
|
||||
|
||||
// Check if the model matches
|
||||
if (this.props.resModel !== model) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if view_type matches (if specified)
|
||||
if (
|
||||
view_types.length > 0 &&
|
||||
!view_types.includes("list") &&
|
||||
!view_types.includes("tree")
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if record ID matches (if rec_ids is specified)
|
||||
if (rec_ids.length > 0) {
|
||||
const loadedIds = this.getLoadedRecordIds();
|
||||
const shouldReload = loadedIds.some((id) => rec_ids.includes(id));
|
||||
|
||||
if (!shouldReload) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await this.refreshList();
|
||||
},
|
||||
|
||||
/**
|
||||
* Refresh the list with actual data from server.
|
||||
* If there is an edited record, asks the user to save or cancel.
|
||||
*
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async refreshList() {
|
||||
// Safety check: component might be destroyed
|
||||
if (!this.model || !this.model.root) {
|
||||
return;
|
||||
}
|
||||
|
||||
const list = this.model.root;
|
||||
|
||||
if (list.editedRecord) {
|
||||
const confirmed = await new Promise((resolve) => {
|
||||
this.dialogService.add(ConfirmationDialog, {
|
||||
title: this.env._t("List is being refreshed from backend"),
|
||||
body: this.env._t(
|
||||
"You have unsaved edits. Save them before refreshing?"
|
||||
),
|
||||
confirm: () => resolve(true),
|
||||
cancel: () => resolve(false),
|
||||
confirmLabel: this.env._t("Save & Refresh"),
|
||||
cancelLabel: this.env._t("Cancel"),
|
||||
});
|
||||
});
|
||||
|
||||
if (!confirmed) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
await list.editedRecord.save();
|
||||
} catch (error) {
|
||||
const message =
|
||||
(error && error.data && error.data.message) ||
|
||||
(error && error.message) ||
|
||||
String(error);
|
||||
this.notificationService.add(
|
||||
this.env._t("Could not save record. ") + message,
|
||||
{type: "danger"}
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Reload data from server
|
||||
try {
|
||||
await list.load();
|
||||
} catch (error) {
|
||||
const message =
|
||||
(error && error.data && error.data.message) ||
|
||||
(error && error.message) ||
|
||||
String(error);
|
||||
this.notificationService.add(
|
||||
this.env._t("Could not reload list. ") + message,
|
||||
{type: "danger"}
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the view (only if component is still mounted)
|
||||
if (this.model && this.model.root) {
|
||||
this.render(true);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Get IDs of all loaded records on the current page
|
||||
* @returns {Array<Number>} Array of record IDs
|
||||
*/
|
||||
getLoadedRecordIds() {
|
||||
const list = this.model.root;
|
||||
|
||||
if (list.isGrouped) {
|
||||
// For grouped list, collect IDs from all groups
|
||||
const recordIds = [];
|
||||
const collectIds = (groups) => {
|
||||
for (const group of groups) {
|
||||
if (group.list && group.list.records) {
|
||||
recordIds.push(...group.list.records.map((r) => r.resId));
|
||||
}
|
||||
if (group.groups) {
|
||||
collectIds(group.groups);
|
||||
}
|
||||
}
|
||||
};
|
||||
collectIds(list.groups);
|
||||
return recordIds;
|
||||
}
|
||||
// For regular list, return IDs of all records
|
||||
return list.records.map((record) => record.resId);
|
||||
},
|
||||
});
|
||||
4
addons/cx_web_refresh_from_backend/tests/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from . import test_reload_views
|
||||
@@ -0,0 +1,95 @@
|
||||
# Copyright 2025 Cetmix OÜ
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from odoo.tests import tagged
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
@tagged("post_install", "-at_install")
|
||||
class TestReloadViews(TransactionCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
super().setUpClass()
|
||||
cls.user_admin = cls.env.ref("base.user_admin")
|
||||
cls.user_demo = cls.env.ref("base.user_demo")
|
||||
cls.partner = cls.env["res.partner"].create(
|
||||
{
|
||||
"name": "Test Partner",
|
||||
}
|
||||
)
|
||||
|
||||
def test_reload_views_basic(self):
|
||||
"""Test basic reload_views call without parameters"""
|
||||
with patch.object(type(self.env["bus.bus"]), "_sendmany") as mock_sendmany:
|
||||
self.user_admin.reload_views(model="res.partner")
|
||||
|
||||
mock_sendmany.assert_called_once()
|
||||
# Get the notifications list - it's the first positional argument
|
||||
notifications = mock_sendmany.call_args[0][0]
|
||||
self.assertEqual(len(notifications), 1)
|
||||
|
||||
partner, channel, message = notifications[0]
|
||||
self.assertEqual(partner, self.user_admin.partner_id)
|
||||
self.assertEqual(channel, "web.refresh_view")
|
||||
self.assertEqual(message["model"], "res.partner")
|
||||
self.assertEqual(message["view_types"], [])
|
||||
self.assertEqual(message["rec_ids"], [])
|
||||
|
||||
def test_reload_views_with_params(self):
|
||||
"""Test reload_views with view_types and rec_ids parameters"""
|
||||
with patch.object(type(self.env["bus.bus"]), "_sendmany") as mock_sendmany:
|
||||
self.user_admin.reload_views(
|
||||
model="res.partner",
|
||||
view_types=["form", "kanban"],
|
||||
rec_ids=[self.partner.id],
|
||||
)
|
||||
|
||||
notifications = mock_sendmany.call_args[0][0]
|
||||
message = notifications[0][2]
|
||||
self.assertEqual(message["view_types"], ["form", "kanban"])
|
||||
self.assertEqual(message["rec_ids"], [self.partner.id])
|
||||
|
||||
def test_reload_views_multiple_users(self):
|
||||
"""Test reload_views for multiple users at once"""
|
||||
users = self.user_admin | self.user_demo
|
||||
|
||||
with patch.object(type(self.env["bus.bus"]), "_sendmany") as mock_sendmany:
|
||||
users.reload_views(model="res.partner")
|
||||
|
||||
notifications = mock_sendmany.call_args[0][0]
|
||||
self.assertEqual(len(notifications), 2)
|
||||
|
||||
# Verify both users' partners are notified
|
||||
notified_partners = {n[0] for n in notifications}
|
||||
expected_partners = {self.user_admin.partner_id, self.user_demo.partner_id}
|
||||
self.assertEqual(notified_partners, expected_partners)
|
||||
|
||||
def test_reload_views_recordset(self):
|
||||
"""Test reload_views on a multi-record user recordset.
|
||||
|
||||
Ensures that calling reload_views on a recordset still results in a
|
||||
single _sendmany call, with one notification entry per user.
|
||||
"""
|
||||
users = self.user_admin | self.user_demo
|
||||
|
||||
with patch.object(type(self.env["bus.bus"]), "_sendmany") as mock_sendmany:
|
||||
users.reload_views(model="res.partner")
|
||||
|
||||
# _sendmany should be called only once for the whole recordset
|
||||
mock_sendmany.assert_called_once()
|
||||
|
||||
notifications = mock_sendmany.call_args[0][0]
|
||||
# We expect one notification tuple per user in the recordset
|
||||
self.assertEqual(len(notifications), 2)
|
||||
|
||||
# Verify both users' partners are notified and payload is correct
|
||||
for partner, channel, message in notifications:
|
||||
self.assertIn(
|
||||
partner, {self.user_admin.partner_id, self.user_demo.partner_id}
|
||||
)
|
||||
self.assertEqual(channel, "web.refresh_view")
|
||||
self.assertEqual(message["model"], "res.partner")
|
||||
self.assertEqual(message["view_types"], [])
|
||||
self.assertEqual(message["rec_ids"], [])
|
||||