| 1 | <?xml version="1.0" encoding="utf-8"?> |
|---|
| 2 | <list> |
|---|
| 3 | <item type="dictionary"><dictionary> |
|---|
| 4 | <item key="key"><![CDATA[ZMSGraphic_extEdit]]></item> |
|---|
| 5 | <item key="value" type="dictionary"><dictionary> |
|---|
| 6 | <item key="__obj_attrs__" type="list"><list> |
|---|
| 7 | <item type="dictionary"><dictionary> |
|---|
| 8 | <item key="custom"> |
|---|
| 9 | <data content_type="image/png" filename="ZMSGraphic_extEdit.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000004084944415478da62aeabab7b2d2e219ac6101119a6f1e9d3a7ff0001c49c9a91a6cfcfc7c3c720d9cbfb7fc5e2ed7f00028831232b55534b27f4da7786ff0c7c7fdffe61707377fb6f616ee5dedadafa9f8181c11d2000004400bbff037878753e23242389191a18de191819dc02e7df02892c326057364368cdeeeded55020101010392f791000bfbdb00ecededf2003c3b423324232397dadadaff131213ff020084007bff017777763dd6cdf20b282a227f000000f70000000000000109e7e6ebb1d8e0bdce04ececebc2121316bea41a9d380009f2005be35b0013458b0024dba931c78fac0704e8e9e728130b179bc656bb0014141500fafbf6001212000061a6ba07e8e8e8520141414100fbfafb00f6f7f600f5f6f600dcdbdb00070707892a2a2a47cccccc5b02000801f7fe01797979fff3f3f130f5f5f5effafbfbe1f1f1f127f6f6f602fdfeffbdfcfafa5b04e6e2f11f13101ea9090d0204000000bf1a1201a301020000c9cac424fafce60304f5f5f824939769389ba1d300fc02f40000010100736742003e38b935f8f7f7c202fdfcfd2b0303030084fc4900d9cdaa00354b460003020400e6ebdf0af6f7f74702fafafac0010102000c190d000c0c0c003c19fb00dddddd00171321eaf3f3f4bc02fdfefe18f6f5f800c63bcc0000ff010005050500f4f4f300e8eadf11eaeae9fd04f8fce89b50505148fcfcfedf060701c62424241341414100f3f4ee550404041102fdfcfe20fafbf7b9f5f6f1da01010114dddddd0129292900eeefefb0fcfcfcb902b44835a14d0451f8dbdffcac886d2d09c55550bc780b5a44113c19a222280a6aa01e02de84e02925e0c583de3cf45028e941055b73f7a022355a0c146cc09c244805aba9ad855893dd99eececcfa363ac38337bc99f77df3be6f3807a5e4ebadae7f47839151a02d55378ad46582e75434a5940da5d4581445bf99cf559f6d5c0865f0806a051a43ffd8c6379e4d58230b8f9f3f3ce10d3ce8ba86f8638438cc4139f902b66d617666110bcf9e9c657ce722d55e999cf33121c26e3a6180f90c8f1a4b18b8dfe11a277166ff24fe887ffe58f90c4ce701cb309469257b5eaf9f24c67b4cc6d90b29b532ddf1745dc77ca70c2d8890b076b1fe740ad56a15b55a0df973f41a39621389f51f9d7119a9454d8bae9aa4fda9503823c4d089291e3f7214d943a7e16cdd87547787e8954a05c414b5f939743adbc68189c37cf5d3db1b9ec71a5ae17cfe960a521f6c6d7c62efbed4140d0aa6611bbd9dcd010bb6afbc597ae9b6db6d388e8352a984e5e5f7ef2cdbbe944c24af93d08dd8ae2b2214a3a4c4b5200c7e92340882900b21cbee41f7e6d7b5b58f24ddbd5c2eb7da6ab5468bc5e26ebd5ef7d3e9f42fc6fcdb43bf5303c4c8d400718390ce719ecd64d06c36e91ce2ff2a506c52a42814c597bf1496e7ea0dafa8440000000049454e44ae426082</data></item> |
|---|
| 10 | <item key="id"><![CDATA[icon]]></item> |
|---|
| 11 | <item key="mandatory" type="int">0</item> |
|---|
| 12 | <item key="multilang" type="int">0</item> |
|---|
| 13 | <item key="name"><![CDATA[icon]]></item> |
|---|
| 14 | <item key="repetitive" type="int">0</item> |
|---|
| 15 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 16 | </dictionary> |
|---|
| 17 | </item> |
|---|
| 18 | <item type="dictionary"><dictionary> |
|---|
| 19 | <item key="custom"> |
|---|
| 20 | <data content_type="application/x-javascript" filename="handleEdit.js" type="file">7661722074656d705f6163745f6865696768740909090909093d20303b0d0a7661722074656d705f6163745f77696474680909090909093d20303b0d0a7661722074656d705f6163745f7468756d625f6865696768740909093d20303b0d0a7661722074656d705f6163745f7468756d625f77696474680909093d20303b0d0a7661722074656d705f63726f705f617069090909090909093d206e756c6c3b0d0a7661722074656d705f63726f705f68697265730909090909093d206e756c6c3b0d0a766172202474656d705f627574746f6e735f6172726f77090909093d206e756c6c3b0d0a766172202474656d705f627574746f6e735f63726f70090909093d206e756c6c3b0d0a766172202474656d705f627574746f6e735f64696d09090909093d206e756c6c3b0d0a766172202474656d705f627574746f6e735f6d61696e090909093d206e756c6c3b0d0a766172202474656d705f627574746f6e735f726573697a650909093d206e756c6c3b0d0a766172202474656d705f616374696f6e5f6c69737409090909093d206e756c6c3b0d0a766172202474656d705f666f726d2009090909090909093d206e756c6c3b0d0a766172202474656d705f696d675f636f6e7461696e6572090909093d206e756c6c3b0d0a766172202474656d705f696e707574735f64696d09090909093d206e756c6c3b0d0a766172202474656d705f6c6162656c5f686972657309090909093d206e756c6c3b0d0a766172202474656d705f6c6162656c5f68697265735f726573697a65093d206e756c6c3b0d0a766172202474656d705f6c6162656c5f7468756d6209090909093d206e756c6c3b0d0a766172202474656d705f6c6162656c5f7468756d625f63726f7009093d206e756c6c3b0d0a766172202474656d705f7069706509090909090909093d206e756c6c3b0d0a766172202474656d705f7468756d625f636f6e7461696e65720909093d206e756c6c3b0d0a766172202474656d705f7468756d625f776964746809090909093d206e756c6c3b0d0a766172202474656d705f7468756d625f686569676874090909093d206e756c6c3b0d0a766172202474656d705f776f726b73706163655f64696d090909093d206e756c6c3b0d0a0d0a66756e6374696f6e206368616e6765427574746f6e417661696c6162696c69747928617661696c61626c652c2024627574746f6e732c206368616e67655f7374796c65290d0a7b0d0a0969662028617661696c61626c65290d0a090924627574746f6e732e636c69636b28636c69636b6564416374696f6e293b0d0a09656c73650d0a090924627574746f6e732e756e62696e642827636c69636b272c20636c69636b6564416374696f6e293b0d0a090d0a09696620286368616e67655f7374796c65290d0a097b0d0a090924627574746f6e732e656163682866756e6374696f6e28696e6465782c20627574746f6e290d0a09097b0d0a09092020766172202474656d705f627574746f6e203d202428627574746f6e293b0d0a090920200d0a090920206966202821617661696c61626c65290d0a09092020092474656d705f627574746f6e2e72656d6f76654174747228277374796c6527293b0d0a09092020090d0a09092020696620282474656d705f627574746f6e2e69732827696d672729290d0a09092020092474656d705f627574746f6e2e617474722827737263272c202474656d705f627574746f6e2e61747472282773726327292e7265706c6163652828617661696c61626c65203f202f5f64697361626c65642f67203a202f2e706e672f67292c2028617661696c61626c65203f202727203a20275f64697361626c65642e706e67272929293b0d0a09092020656c73650d0a090920207b0d0a090920200969662028617661696c61626c65290d0a09092020097b0d0a0909202009092474656d705f627574746f6e2e72656d6f766541747472282764697361626c656427293b0d0a0909202009092474656d705f627574746f6e2e72656d6f76654174747228277374796c6527293b0d0a09092020097d0d0a0909202009656c73650d0a09092020097b0d0a0909092020092474656d705f627574746f6e2e61747472282764697361626c6564272c202764697361626c656427293b0d0a0909092020092474656d705f627574746f6e2e6373732827636f6c6f72272c20272363636327293b0d0a09092020097d0d0a090920207d0d0a09092020090d0a0909202069662028617661696c61626c65290d0a09092020092474656d705f627574746f6e2e6373732827637572736f72272c2027706f696e74657227293b0d0a09097d293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e206368616e6765427574746f6e5669736962696c6974792876697369626c652c2024627574746f6e73290d0a7b0d0a096368616e6765427574746f6e417661696c6162696c6974792876697369626c652c2024627574746f6e732c2066616c7365293b0d0a090d0a096966202876697369626c65290d0a090924627574746f6e732e73686f7728293b0d0a09656c73650d0a090924627574746f6e732e6869646528293b0d0a7d0d0a0d0a66756e6374696f6e206368616e67654a63726f70417661696c6162696c69747928617661696c61626c652c2063726f7070696e672c2063726f705f6869726573290d0a7b0d0a096966202874656d705f63726f705f61706920213d206e756c6c290d0a090974656d705f63726f705f6170692e64657374726f7928293b0d0a0909090d0a0969662028617661696c61626c65290d0a097b0d0a09097661722074656d705f686569676874093d202863726f7070696e67202626202163726f705f686972657329203f207061727365496e74282474656d705f7468756d625f6865696768742e76616c282929203a2074656d705f6163745f6865696768743b0d0a09097661722074656d705f7769647468093d202863726f7070696e67202626202163726f705f686972657329203f207061727365496e74282474656d705f7468756d625f77696474682e76616c282929203a2074656d705f6163745f77696474683b0d0a09090d0a090974656d705f63726f705f617069203d20242e4a63726f70282474656d705f696d675f636f6e7461696e65722e66696e642827696d6727292e65712830292c200d0a0909097b200d0a09090909616c6c6f7753656c656374093a2066616c73652c0d0a09090909617370656374526174696f093a2074656d705f77696474682f74656d705f6865696768742c0d0a090909096d696e53697a650909093a205b32352c2032355d2c0d0a090909096d617853697a650909093a205b696d675f696e666f5b27776f726b7370616365275d5b277769647468275d2c20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d5d2c0d0a0909090968616e646c65730909093a20747275652c0d0a090909096f6e4368616e676509093a206368616e67656453656c656374696f6e0d0a0909097d293b0d0a090974656d705f63726f705f6170692e73657453656c656374285b302c20302c2074656d705f77696474682c2074656d705f6865696768745d293b0d0a090974656d705f63726f705f6170692e7365744f7074696f6e73287b20616c6c6f77526573697a653a20747275652c20616c6c6f774d6f76653a2063726f7070696e677d293b0d0a090974656d705f63726f705f6170692e666f63757328293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e206368616e67656453656c656374696f6e2864696d656e73696f6e73290d0a7b0d0a09696620282474656d705f6c6162656c5f68697265735f726573697a6520213d206e756c6c290d0a09092474656d705f6c6162656c5f68697265735f726573697a652e746578742864696d656e73696f6e732e77202b202720782027202b2064696d656e73696f6e732e68293b0d0a09656c736520696620282474656d705f6c6162656c5f7468756d625f63726f7020213d206e756c6c290d0a09092474656d705f6c6162656c5f7468756d625f63726f702e746578742864696d656e73696f6e732e77202b202720782027202b2064696d656e73696f6e732e68293b0d0a7d0d0a0d0a66756e6374696f6e206368616e676544696d656e73696f6e732872657365745f64696d73290d0a7b0d0a097661722074656d705f6368616e67655f776f726b73706163653b0d0a090d0a09696620282172657365745f64696d73290d0a097b0d0a09097661722074656d705f68656967687420090909093d097061727365496e74282474656d705f7468756d625f6865696768742e76616c2829293b0d0a09097661722074656d705f776964746809090909093d207061727365496e74282474656d705f7468756d625f77696474682e76616c2829293b0d0a09097661722074656d705f776f726b73706163655f64696d093d207061727365496e74282474656d705f776f726b73706163655f64696d2e76616c2829293b0d0a09090d0a090974656d705f68656967687420090909093d202874656d705f686569676874203d3d204e614e29203f2074656d705f6163745f7468756d625f686569676874203a2074656d705f6865696768743b0d0a090974656d705f776964746809090909093d202874656d705f7769647468203d3d204e614e29203f2074656d705f6163745f7468756d625f7769647468203a2074656d705f77696474683b0d0a090974656d705f776f726b73706163655f64696d093d202874656d705f776f726b73706163655f64696d203d3d204e614e29203f20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d203a2074656d705f776f726b73706163655f64696d3b0d0a09090d0a09097661722074656d705f6368616e67655f7468756d62093d202874656d705f68656967687420213d2074656d705f6163745f7468756d625f68656967687429207c7c202874656d705f776964746820213d2074656d705f6163745f7468756d625f7769647468293b0d0a090974656d705f6368616e67655f776f726b7370616365093d2074656d705f776f726b73706163655f64696d20213d20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d3b0d0a0d0a090969662028636f6e6669726d44696d656e73696f6e4368616e6765732874656d705f6368616e67655f7468756d622c2074656d705f6368616e67655f776f726b737061636529290d0a09097b0d0a0909096966202874656d705f6368616e67655f7468756d62290d0a0909097b0d0a090909097661722074656d705f7374796c65203d202474656d705f7468756d625f636f6e7461696e65722e6174747228277374796c6527293b0d0a090909090d0a0909090974656d705f6163745f7468756d625f686569676874203d204d6174682e6d61782832352c204d6174682e6d696e2874656d705f6865696768742c2074656d705f6163745f68656967687429293b0d0a0909090974656d705f6163745f7468756d625f7769647468093d204d6174682e6d61782832352c204d6174682e6d696e2874656d705f77696474682c2074656d705f6163745f776964746829293b0d0a090909090d0a0909090974656d705f7374796c65203d2074656d705f7374796c652e7265706c616365282f6d696e2d6865696768745b3a5c735c645c775d2a3b2f672c20276d696e2d6865696768743a2027202b2074656d705f6163745f7468756d625f686569676874202b202770783b2027293b0d0a0909090974656d705f7374796c65203d2074656d705f7374796c652e7265706c616365282f77696474685b3a5c735c645c775d2a3b2f672c202777696474683a2027202b2074656d705f6163745f7468756d625f7769647468202b202770783b2027293b0d0a090909090d0a090909092474656d705f7468756d625f636f6e7461696e65722e656d70747928293b0d0a090909092474656d705f7468756d625f636f6e7461696e65722e6174747228277374796c65272c2074656d705f7374796c65293b0d0a0909097d0d0a0909090d0a0909096966202874656d705f6368616e67655f776f726b7370616365290d0a0909097b0d0a090909097661722074656d705f7374796c65203d202474656d705f696d675f636f6e7461696e65722e6174747228277374796c6527293b0d0a090909090d0a09090909696d675f696e666f5b27776f726b7370616365275d5b277769647468275d203d204d6174682e6d696e28696d675f696e666f5b27776f726b7370616365275d5b2777696474685f6d6178275d2c2074656d705f776f726b73706163655f64696d290d0a090909090d0a0909090974656d705f7374796c65203d2074656d705f7374796c652e7265706c616365282f6d696e2d6865696768745b3a5c735c645c775d2a3b2f672c20276d696e2d6865696768743a2027202b20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d202b202770783b2027293b0d0a0909090974656d705f7374796c65203d2074656d705f7374796c652e7265706c616365282f77696474685b3a5c735c645c775d2a3b2f672c202777696474683a2027202b20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d202b202770783b2027293b0d0a090909090d0a090909092474656d705f616374696f6e5f6c6973742e656d70747928293b0d0a090909092474656d705f696d675f636f6e7461696e65722e656d70747928293b0d0a090909092474656d705f696d675f636f6e7461696e65722e6174747228277374796c65272c2074656d705f7374796c65293b0d0a090909092474656d705f7468756d625f636f6e7461696e65722e656d70747928293b0d0a0909097d0d0a09097d0d0a0909656c73650d0a09090974656d705f6368616e67655f776f726b7370616365203d2066616c73653b0d0a097d0d0a09656c73650d0a090974656d705f6368616e67655f776f726b7370616365203d2066616c73653b0d0a0d0a092474656d705f7468756d625f6865696768742e76616c2874656d705f6163745f7468756d625f686569676874293b0d0a092474656d705f7468756d625f77696474682e76616c2874656d705f6163745f7468756d625f7769647468293b0d0a092474656d705f776f726b73706163655f64696d2e76616c28696d675f696e666f5b27776f726b7370616365275d5b277769647468275d293b0d0a090d0a0972657475726e2074656d705f6368616e67655f776f726b73706163653b0d0a7d0d0a0d0a66756e6374696f6e20636c69636b6564416374696f6e28290d0a7b0d0a097661722074656d705f616374696f6e090909093d20242874686973292e617474722827696427292e746f4c6f7765724361736528292e7265706c616365282f7a6d73677261706869635f657874656469745f2f672c202727293b0d0a097661722074656d705f616a61785f72657175657374203d2066616c73653b0d0a090d0a09696620282874656d705f616374696f6e203d3d202763616e63656c2729207c7c202874656d705f616374696f6e203d3d20276f6b2729290d0a097b0d0a09092474656d705f666f726d2e66696e642827696e7075745b6e616d653d22616374696f6e225d27292e76616c2874656d705f616374696f6e293b0d0a09090d0a09096966202874656d705f616374696f6e203d3d20276f6b27290d0a0909092474656d705f666f726d2e66696e642827696e7075745b6e616d653d22696d675f696e666f225d27292e76616c2867657445646974506970654173584d4c28696d675f696e666f29293b0d0a09090d0a09092474656d705f666f726d2e7375626d697428293b0d0a097d0d0a09656c736520696620282874656d705f616374696f6e203d3d2027726f746174655f702729207c7c202874656d705f616374696f6e203d3d2027726f746174655f6d2729290d0a097b0d0a090969662028636f6e6669726d5468756d6252657365742829290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a6563742827726f74617465272c202874656d705f616374696f6e2e7265706c616365282f726f746174655f2f672c20272729203d3d20276d2729203f20202d31203a203129293b0d0a0909090d0a0909092474656d705f616374696f6e5f6c6973742e617070656e6428273c6f7074696f6e3e27202b20242874686973292e617474722827616c742729202b20273c2f6f7074696f6e3e27293b0d0a090909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027666c69705f6827290d0a097b0d0a090969662028636f6e6669726d5468756d6252657365742829290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a656374282766686f72697a6f6e74616c272c203129293b0d0a0909090d0a0909092474656d705f616374696f6e5f6c6973742e617070656e6428273c6f7074696f6e3e27202b20242874686973292e617474722827616c742729202b20273c2f6f7074696f6e3e27293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027666c69705f7627290d0a097b0d0a090969662028636f6e6669726d5468756d6252657365742829290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a656374282766766572746963616c272c203129293b0d0a0909090d0a0909092474656d705f616374696f6e5f6c6973742e617070656e6428273c6f7074696f6e3e27202b20242874686973292e617474722827616c742729202b20273c2f6f7074696f6e3e27293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027726573697a6527290d0a097b0d0a09092474656d705f6c6162656c5f68697265735f726573697a65203d202428273c6c6162656c207374796c653d22636f6c6f723a626c75653b223e27202b2074656d705f6163745f7769647468202b202720782027202b2074656d705f6163745f686569676874202b20273c2f6c6162656c3e27293b0d0a09092474656d705f6c6162656c5f68697265732e6e657874416c6c28273a6c61737427292e6166746572282474656d705f6c6162656c5f68697265735f726573697a65293b0d0a09090d0a09096368616e6765427574746f6e417661696c6162696c6974792866616c73652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f627574746f6e735f726573697a65293b0d0a09096368616e67654a63726f70417661696c6162696c69747928747275652c2066616c73652c2066616c7365293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027726573697a655f6f6b27290d0a097b0d0a090964656c6574654c6162656c7328293b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f726573697a65293b0d0a09090d0a090969662028636f6e6669726d5468756d6252657365742829290d0a09097b0d0a0909097661722074656d705f61726561203d2074656d705f63726f705f6170692e74656c6c53656c65637428293b200d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a6563742827726573697a65272c202874656d705f617265612e7832202d2074656d705f617265612e7829202b20272c27202b202874656d705f617265612e7932202d2074656d705f617265612e792929293b0d0a0909090d0a0909092474656d705f616374696f6e5f6c6973742e617070656e6428273c6f7074696f6e3e726573697a6520746f2027202b202874656d705f617265612e7832202d2074656d705f617265612e7829202b202720782027202b202874656d705f617265612e7932202d2074656d705f617265612e7929202b20273c2f6f7074696f6e3e27293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a09090d0a09096368616e67654a63726f70417661696c6162696c6974792866616c73652c2066616c73652c2066616c7365293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027726573697a655f63616e63656c27290d0a097b0d0a090964656c6574654c6162656c7328293b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f726573697a65293b0d0a09096368616e67654a63726f70417661696c6162696c6974792866616c73652c2066616c73652c2066616c7365293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202763726f7027290d0a097b0d0a090974656d705f63726f705f6869726573203d2066616c73653b0d0a09090d0a09092f2f206765742061637475616c207468756d622064696d656e73696f6e730d0a090974656d705f6163745f7468756d625f686569676874203d207061727365496e74282474656d705f7468756d625f6865696768742e76616c2829293b0d0a090974656d705f6163745f7468756d625f7769647468093d207061727365496e74282474656d705f7468756d625f77696474682e76616c2829293b0d0a09090d0a09092474656d705f6c6162656c5f7468756d625f63726f70203d202428273c6c6162656c207374796c653d22636f6c6f723a626c75653b223e27202b2074656d705f6163745f7468756d625f7769647468202b202720782027202b2074656d705f6163745f7468756d625f686569676874202b20273c2f6c6162656c3e27293b0d0a09092474656d705f6c6162656c5f7468756d622e6e657874416c6c28273a6c61737427292e6166746572282474656d705f6c6162656c5f7468756d625f63726f70293b0d0a09090d0a09096368616e6765427574746f6e417661696c6162696c6974792866616c73652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f627574746f6e735f63726f70293b0d0a09096368616e67654a63726f70417661696c6162696c69747928747275652c20747275652c2066616c7365293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202763726f705f686972657327290d0a097b0d0a09096966202874656d705f63726f705f6869726573290d0a09097b0d0a0909096368616e6765427574746f6e417661696c6162696c6974792866616c73652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a0909096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f627574746f6e735f63726f70293b0d0a0909096368616e67654a63726f70417661696c6162696c69747928747275652c20747275652c2074727565293b0d0a09097d0d0a0909656c73650d0a09097b0d0a09090969662028636f6e6669726d486972657352657365742829290d0a0909097b0d0a0909090974656d705f63726f705f686972657309093d20747275653b0d0a0909090974656d705f616a61785f72657175657374203d20747275653b0d0a090909090d0a09090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a65637428277265736574272c203129293b0d0a0909097d0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202763726f705f6f6b27290d0a097b0d0a090964656c6574654c6162656c7328293b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f63726f70293b0d0a09090d0a09097661722074656d705f61726561203d2074656d705f63726f705f6170692e74656c6c53656c65637428293b200d0a0909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a656374282874656d705f63726f705f6869726573203f202763726f705f686972657327203a202763726f7027292c200d0a090909090909090909090909090974656d705f617265612e78202b20272c27202b2074656d705f617265612e79202b20272c27202b2074656d705f617265612e7832202b20272c27202b2074656d705f617265612e7932202b20272c27202b200d0a09090909090909090909090909092874656d705f63726f705f6869726573203f2074656d705f6163745f7769647468202b20272c27202b2074656d705f6163745f686569676874203a202474656d705f7468756d625f77696474682e76616c2829202b20272c27202b202474656d705f7468756d625f6865696768742e76616c28292929293b0d0a09090d0a09096368616e67654a63726f70417661696c6162696c6974792866616c73652c2066616c73652c2066616c7365293b0d0a09090d0a090974656d705f616a61785f72657175657374203d20747275653b0d0a090974656d705f63726f705f686972657309093d2066616c73653b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202763726f705f63616e63656c27290d0a097b0d0a090964656c6574654c6162656c7328293b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f63726f70293b0d0a09096368616e67654a63726f70417661696c6162696c6974792866616c73652c2066616c73652c2066616c7365293b0d0a09090d0a090974656d705f63726f705f6869726573203d2066616c73653b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202764696d656e73696f6e27290d0a097b0d0a09092f2f206765742061637475616c207468756d622064696d656e73696f6e730d0a090974656d705f6163745f7468756d625f686569676874203d207061727365496e74282474656d705f7468756d625f6865696768742e76616c2829293b0d0a090974656d705f6163745f7468756d625f7769647468093d207061727365496e74282474656d705f7468756d625f77696474682e76616c2829293b0d0a09092f2f206765742061637475616c20776f726b73706163652064696d656e73696f6e0d0a0909696d675f696e666f5b27776f726b7370616365275d5b277769647468275d093d207061727365496e74282474656d705f776f726b73706163655f64696d2e76616c2829293b0d0a09090d0a09096368616e6765427574746f6e417661696c6162696c6974792866616c73652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f627574746f6e735f64696d293b0d0a09096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f696e707574735f64696d293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202764696d656e73696f6e5f6f6b27290d0a097b0d0a09097661722074656d705f776f726b73706163655f6368616e676564203d206368616e676544696d656e73696f6e7328293b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f64696d293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f696e707574735f64696d293b0d0a09090d0a09096966202874656d705f776f726b73706163655f6368616e676564290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a6563742827776f726b7370616365272c20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d29293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202764696d656e73696f6e5f63616e63656c27290d0a097b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f64696d293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f696e707574735f64696d293b0d0a09096368616e676544696d656e73696f6e732874727565293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027726573657427290d0a097b0d0a090969662028636f6e6669726d486972657352657365742829290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a65637428277265736574272c203129293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d202764726f705f736861646f7727290d0a097b0d0a090969662028636f6e6669726d5468756d6252657365742829290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a656374282764726f705f736861646f77272c203129293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027647261775f6172726f7727290d0a097b0d0a0909766172202474656d705f696d67203d202474656d705f696d675f636f6e7461696e65722e66696e642827696d6727293b0d0a09090d0a0909696e6974535647282474656d705f696d672e61747472282773726327292c2074656d705f6163745f77696474682c2074656d705f6163745f686569676874293b0d0a09092474656d705f696d672e72656d6f766528293b0d0a09090d0a09096368616e6765427574746f6e417661696c6162696c6974792866616c73652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c69747928747275652c202474656d705f627574746f6e735f6172726f77293b0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027647261775f6172726f775f6f6b27290d0a097b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f6172726f77293b0d0a09090d0a09097661722074656d705f6172726f775f7265637473203d2064656c65746553564728293b0d0a09097661722074656d705f76616c756573203d2027273b0d0a09090d0a09092474656d705f696d675f636f6e7461696e65722e617070656e6428273c696d67207372633d2227202b20696d675f696e666f5b277175657565275d5b696d675f696e666f5b277175657565275d2e6c656e677468202d20315d5b2775726c275d202b202722202f3e27293b0d0a09090d0a0909666f7220287661722069203d20303b2069203c2074656d705f6172726f775f72656374732e6c656e6774683b20692b2b290d0a09097b0d0a09090974656d705f76616c756573202b3d2074656d705f6172726f775f72656374735b695d2e73746172742e58202b20272c27202b2074656d705f6172726f775f72656374735b695d2e73746172742e59202b20272c27202b2074656d705f6172726f775f72656374735b695d2e656e642e58202b20272c27202b2074656d705f6172726f775f72656374735b695d2e656e642e593b0d0a0909096966202869203c2074656d705f6172726f775f72656374732e6c656e677468202d2031290d0a0909090974656d705f76616c756573202b3d20273b273b0d0a09097d0d0a09090d0a09096966202874656d705f76616c7565732e6c656e677468203e2030290d0a09097b0d0a090909696d675f696e666f5b277175657565275d2e707573682863726561746551756575654f626a65637428276172726f77272c2074656d705f76616c75657329293b0d0a0909090d0a09090974656d705f616a61785f72657175657374203d20747275653b0d0a09097d0d0a097d0d0a09656c7365206966202874656d705f616374696f6e203d3d2027647261775f6172726f775f63616e63656c27290d0a097b0d0a09096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e2c2074727565293b0d0a09096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f6172726f77293b0d0a09090d0a090964656c65746553564728293b0d0a09090d0a09092474656d705f696d675f636f6e7461696e65722e617070656e6428273c696d67207372633d2227202b20696d675f696e666f5b277175657565275d5b696d675f696e666f5b277175657565275d2e6c656e677468202d20315d5b2775726c275d202b202722202f3e27293b0d0a097d0d0a090d0a096966202874656d705f616a61785f72657175657374290d0a097b0d0a09096a51756572792e706f7374287a6d73677261706869635f657874656469745f726571756573745f75726c2c207b616374696f6e203a202772657175657374272c20696d675f696e666f203a2067657445646974506970654173584d4c28696d675f696e666f297d2c2072656365697665446174612c20276a736f6e27293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e20636f6e6669726d44696d656e73696f6e4368616e676573287468756d625f64696d5f6368616e6765642c20776f726b73706163655f64696d5f6368616e676564290d0a7b0d0a097661722074656d705f7465787409093d2027417474656e74696f6e21273b0d0a097661722074656d705f726573756c74093d20747275653b0d0a090d0a09696620287468756d625f64696d5f6368616e67656420262620776f726b73706163655f64696d5f6368616e676564290d0a090974656d705f74657874202b3d2027205468756d622d44696d656e73696f6e7320616e6420576f726b73706163652d44696d656e73696f6e2077657265206368616e6765642e2050726576696f7573206368616e67657320616e64205468756d622d496d6167652077696c6c206265206c6f73742e273b0d0a09656c736520696620287468756d625f64696d5f6368616e676564290d0a090974656d705f74657874202b3d2027205468756d622d44696d656e73696f6e732077657265206368616e6765642e20205468756d622d696d6167652077696c6c206265206c6f7374273b0d0a09656c73652069662028776f726b73706163655f64696d5f6368616e676564290d0a090974656d705f74657874202b3d202720576f726b73706163652d44696d656e73696f6e20776173206368616e6765642e2050726576696f7573206368616e67657320616e64205468756d622d496d6167652077696c6c206265206c6f73742e273b0d0a0974656d705f74657874202b3d20275c6e446f20796f752077616e7420746f20636f6e74696e75653f273b0d0a090d0a09696620287468756d625f64696d5f6368616e676564207c7c20776f726b73706163655f64696d5f6368616e676564290d0a090974656d705f726573756c74203d20636f6e6669726d2874656d705f74657874293b0d0a09090d0a0972657475726e2074656d705f726573756c743b0d0a7d0d0a0d0a66756e6374696f6e20636f6e6669726d4869726573526573657428290d0a7b0d0a097661722074656d705f726573756c74203d20636f6e6669726d2827417474656e74696f6e2120496d6167652077696c6c206265207265637265617465642066726f6d204f726967696e616c2e2050726576696f7573206368616e67657320616e64205468756d622d496d6167652077696c6c206265206c6f73742e5c6e446f20796f752077616e7420746f20636f6e74696e75653f27293b0d0a090d0a09696620282874656d705f726573756c742920262620282474656d705f7468756d625f636f6e7461696e65722e66696e642827696d6727292e6c656e677468203e203029290d0a09092474656d705f7468756d625f636f6e7461696e65722e656d70747928293b0d0a090d0a0972657475726e2074656d705f726573756c743b0d0a7d0d0a0d0a66756e6374696f6e20636f6e6669726d5468756d62526573657428290d0a7b0d0a097661722074656d705f726573756c74203d20747275653b0d0a090d0a09696620282474656d705f7468756d625f636f6e7461696e65722e66696e642827696d6727292e6c656e677468203e2030290d0a097b0d0a090974656d705f726573756c74203d20636f6e6669726d2827417474656e74696f6e2120507265766965772077696c6c206265206c6f73742e5c6e446f20796f752077616e7420746f20636f6e74696e75653f27293b0d0a090d0a09096966202874656d705f726573756c74290d0a0909092474656d705f7468756d625f636f6e7461696e65722e656d70747928293b0d0a097d0d0a090d0a0972657475726e2074656d705f726573756c743b0d0a7d0d0a0d0a66756e6374696f6e2063726561746551756575654f626a65637428616374696f6e2c2076616c7565290d0a7b0d0a097661722074656d705f6f626a203d206e6577204f626a65637428293b0d0a090d0a0974656d705f6f626a5b27616374696f6e275d09093d20616374696f6e3b0d0a0974656d705f6f626a5b2776616c7565275d0909093d2076616c75653b0d0a0974656d705f6f626a5b2766696c656e616d65275d093d206e756c6c3b0d0a0974656d705f6f626a5b2775726c275d090909093d206e756c6c3b0d0a0974656d705f6f626a5b277769647468275d0909093d206e756c6c3b0d0a0974656d705f6f626a5b27686569676874275d09093d206e756c6c3b0d0a090d0a0972657475726e2074656d705f6f626a3b0d0a7d0d0a0d0a66756e6374696f6e2064656c6574654c6162656c7328290d0a7b0d0a09696620282474656d705f6c6162656c5f68697265735f726573697a6520213d206e756c6c290d0a097b0d0a09092474656d705f6c6162656c5f68697265735f726573697a652e72656d6f766528293b0d0a09092474656d705f6c6162656c5f68697265735f726573697a65203d206e756c6c3b0d0a097d0d0a09696620282474656d705f6c6162656c5f7468756d625f63726f7020213d206e756c6c290d0a097b0d0a09092474656d705f6c6162656c5f7468756d625f63726f702e72656d6f766528293b0d0a09092474656d705f6c6162656c5f7468756d625f63726f70203d206e756c6c3b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2067657441637444696d46726f6d517565756528696d675f696e666f290d0a7b0d0a097661722074656d705f706f73203d20696d675f696e666f5b277175657565275d2e6c656e677468202d20313b0d0a090d0a0974656d705f6163745f686569676874093d20696d675f696e666f5b277175657565275d5b74656d705f706f735d5b27686569676874275d3b0d0a0974656d705f6163745f7769647468093d20696d675f696e666f5b277175657565275d5b74656d705f706f735d5b277769647468275d3b0d0a7d0d0a0d0a66756e6374696f6e2067657445646974506970654173584d4c28696d675f696e666f290d0a7b0d0a097661722074656d705f786d6c203d2027273b0d0a090d0a0974656d705f786d6c202b3d20273c64696374696f6e6172793e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d2271756575652220747970653d226c697374223e3c6c6973743e5c6e273b0d0a090d0a09666f7220287661722069203d20303b2069203c20696d675f696e666f5b277175657565275d2e6c656e6774683b20692b2b290d0a097b0d0a090974656d705f786d6c202b3d20273c6974656d20747970653d2264696374696f6e617279223e3c64696374696f6e6172793e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d22616374696f6e223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b27616374696f6e275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d2276616c7565223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b2776616c7565275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d2266696c656e616d65223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b2766696c656e616d65275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d2275726c223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b2775726c275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d227769647468223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b277769647468275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c6974656d206b65793d22686569676874223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277175657565275d5b695d5b27686569676874275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a090974656d705f786d6c202b3d20273c2f64696374696f6e6172793e3c2f6974656d3e5c6e273b0d0a097d0d0a090d0a0974656d705f786d6c202b3d20273c2f6c6973743e3c2f6974656d3e5c6e273b0d0a090d0a0974656d705f786d6c202b3d20273c6974656d206b65793d227468756d622220747970653d2264696374696f6e617279223e3c64696374696f6e6172793e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d2266696c656e616d65223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277468756d62275d5b2766696c656e616d65275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d2275726c223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277468756d62275d5b2775726c275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d2263726f705f626f78223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277468756d62275d5b2763726f705f626f78275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d227769647468223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277468756d62275d5b277769647468275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d22686569676874223e3c215b434441544127202b20275b27202b20696d675f696e666f5b277468756d62275d5b27686569676874275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c2f64696374696f6e6172793e3c2f6974656d3e5c6e273b0d0a090d0a0974656d705f786d6c202b3d20273c6974656d206b65793d22776f726b73706163652220747970653d2264696374696f6e617279223e3c64696374696f6e6172793e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d227769647468223e3c215b434441544127202b20275b27202b20696d675f696e666f5b27776f726b7370616365275d5b277769647468275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c6974656d206b65793d2277696474685f6d6178223e3c215b434441544127202b20275b27202b20696d675f696e666f5b27776f726b7370616365275d5b2777696474685f6d6178275d202b20275d27202b20275d3e3c2f6974656d3e5c6e273b0d0a0974656d705f786d6c202b3d20273c2f64696374696f6e6172793e3c2f6974656d3e5c6e270d0a090d0a0974656d705f786d6c202b3d20273c2f64696374696f6e6172793e5c6e273b0d0a090d0a0972657475726e2074656d705f786d6c3b0d0a7d0d0a0d0a66756e6374696f6e20726563656976654461746128646174612c2074657874537461747573290d0a7b0d0a09696620282874657874537461747573203d3d20277375636365737327292026262028646174615b27726573756c74275d203e203029290d0a097b0d0a0909696d675f696e666f203d20646174615b27696d675f696e666f275d3b0d0a09090d0a09097661722074656d705f71756575655f706f73203d20696d675f696e666f5b277175657565275d2e6c656e677468202d20313b0d0a09090d0a0909696620282474656d705f696d675f636f6e7461696e65722e66696e642827696d6727292e6c656e677468203e2030290d0a09097b0d0a090909696620282474656d705f696d675f636f6e7461696e65722e66696e642827696d6727292e617474722827737263272920213d20696d675f696e666f5b277175657565275d5b74656d705f71756575655f706f735d5b2775726c275d290d0a090909092474656d705f696d675f636f6e7461696e65722e66696e642827696d6727292e617474722827737263272c20696d675f696e666f5b277175657565275d5b74656d705f71756575655f706f735d5b2775726c275d293b0d0a09097d0d0a0909656c73650d0a0909092474656d705f696d675f636f6e7461696e65722e617070656e6428273c696d67207372633d2227202b20696d675f696e666f5b277175657565275d5b74656d705f71756575655f706f735d5b2775726c275d202b202722202f3e27293b0d0a09090d0a090969662028696d675f696e666f5b277468756d62275d5b2775726c275d20213d20276e756c6c27290d0a09097b0d0a090909696620282474656d705f7468756d625f636f6e7461696e65722e66696e642827696d6727292e6c656e677468203e2030290d0a090909092474656d705f7468756d625f636f6e7461696e65722e66696e642827696d6727292e617474722827737263272c20696d675f696e666f5b277468756d62275d5b2775726c275d293b0d0a090909656c73650d0a090909092474656d705f7468756d625f636f6e7461696e65722e617070656e6428273c696d67207372633d2227202b20696d675f696e666f5b277468756d62275d5b2775726c275d202b202722202f3e27293b0d0a09097d0d0a0909090d0a090967657441637444696d46726f6d517565756528696d675f696e666f290d0a090972656e646572496d67496e666f28696d675f696e666f290d0a09090d0a09096966202874656d705f63726f705f6869726573290d0a090909242827235a4d53477261706869635f657874456469745f63726f705f686972657327292e636c69636b28293b0d0a097d0d0a7d0d0a0d0a66756e6374696f6e2072656e646572496d67496e666f28696d675f696e666f290d0a7b0d0a092474656d705f6c6162656c5f68697265732e746578742874656d705f6163745f7769647468202b202720782027202b2074656d705f6163745f686569676874293b0d0a0969662028696d675f696e666f5b277468756d62275d5b2775726c275d203d3d20276e756c6c27290d0a09092474656d705f6c6162656c5f7468756d622e7465787428274e6f6e6527293b0d0a09656c73650d0a09092474656d705f6c6162656c5f7468756d622e746578742874656d705f6163745f7468756d625f7769647468202b202720782027202b2074656d705f6163745f7468756d625f686569676874293b0d0a7d0d0a0d0a242827646f63756d656e7427292e72656164792866756e6374696f6e28290d0a7b0d0a092474656d705f666f726d0909090909093d20242827235a4d53477261706869635f657874456469745f666f726d27293b0d0a092474656d705f706970650909090909093d202474656d705f666f726d2e66696e642827696e7075745b6e616d653d2270697065225d27293b0d0a092474656d705f616374696f6e5f6c6973740909093d20242827235a4d53477261706869635f657874456469745f616374696f6e4c69737427293b0d0a092474656d705f696d675f636f6e7461696e657220093d20242827235a4d53477261706869635f657874456469745f696d61676527293b0d0a092474656d705f6c6162656c5f68697265730909093d20242827235a4d53477261706869635f657874456469745f696e666f5f686972657327293b0d0a092474656d705f6c6162656c5f7468756d620909093d20242827235a4d53477261706869635f657874456469745f696e666f5f7468756d6227293b0d0a092474656d705f7468756d625f636f6e7461696e6572093d20242827235a4d53477261706869635f657874456469745f7468756d625f696d6727293b0d0a092474656d705f7468756d625f68656967687409093d20242827235a4d53477261706869635f657874456469745f7468756d625f68656967687427293b0d0a092474656d705f7468756d625f77696474680909093d20242827235a4d53477261706869635f657874456469745f7468756d625f776964746827293b0d0a092474656d705f776f726b73706163655f64696d09093d20242827235a4d53477261706869635f657874456469745f776f726b737061636527293b0d0a090d0a092474656d705f627574746f6e735f6172726f7709093d20242827235a4d53477261706869635f657874456469745f647261775f6172726f775f63616e63656c2c20235a4d53477261706869635f657874456469745f647261775f6172726f775f6f6b27293b0d0a092474656d705f627574746f6e735f63726f7009093d20242827235a4d53477261706869635f657874456469745f63726f705f63616e63656c2c20235a4d53477261706869635f657874456469745f63726f705f6f6b27293b0d0a092474656d705f627574746f6e735f64696d0909093d20242827235a4d53477261706869635f657874456469745f64696d656e73696f6e5f63616e63656c2c20235a4d53477261706869635f657874456469745f64696d656e73696f6e5f6f6b27293b0d0a09696620287a6d73677261706869635f657874656469745f6861735f7375706572726573290d0a09092474656d705f627574746f6e735f6d61696e093d20242827235a4d53477261706869635f657874456469745f63726f702c20235a4d53477261706869635f657874456469745f64696d656e73696f6e2c20235a4d53477261706869635f657874456469745f666c69705f682c20235a4d53477261706869635f657874456469745f666c69705f762c2027202b0d0a090909090909090909090909090927235a4d53477261706869635f657874456469745f726573697a652c20235a4d53477261706869635f657874456469745f726f746174655f6d2c20235a4d53477261706869635f657874456469745f726f746174655f702c20235a4d53477261706869635f657874456469745f72657365742c2027202b0d0a090909090909090909090909090927235a4d53477261706869635f657874456469745f63726f705f68697265732c20235a4d53477261706869635f657874456469745f64726f705f736861646f772c20235a4d53477261706869635f657874456469745f647261775f6172726f772c2027202b0d0a090909090909090909090909090927235a4d53477261706869635f657874456469745f63616e63656c2c20235a4d53477261706869635f657874456469745f6f6b27293b0d0a09656c73650d0a097b0d0a09092474656d705f627574746f6e735f6d61696e093d20242827235a4d53477261706869635f657874456469745f63726f702c20235a4d53477261706869635f657874456469745f64696d656e73696f6e2c20235a4d53477261706869635f657874456469745f666c69705f682c20235a4d53477261706869635f657874456469745f666c69705f762c2027202b0d0a090909090909090909090909090927235a4d53477261706869635f657874456469745f726573697a652c20235a4d53477261706869635f657874456469745f726f746174655f6d2c20235a4d53477261706869635f657874456469745f726f746174655f702c2027202b0d0a090909090909090909090909090927235a4d53477261706869635f657874456469745f64726f705f736861646f772c20235a4d53477261706869635f657874456469745f647261775f6172726f772c20235a4d53477261706869635f657874456469745f63616e63656c2c20235a4d53477261706869635f657874456469745f6f6b27293b0d0a09090909090909090909090909090d0a09096368616e6765427574746f6e417661696c6162696c6974792866616c73652c20242827235a4d53477261706869635f657874456469745f72657365742c20235a4d53477261706869635f657874456469745f63726f705f686972657327292c2074727565293b0d0a097d0d0a09090d0a092474656d705f627574746f6e735f726573697a65093d20242827235a4d53477261706869635f657874456469745f726573697a655f63616e63656c2c20235a4d53477261706869635f657874456469745f726573697a655f6f6b27293b0d0a092474656d705f696e707574735f64696d0909093d20242827235a4d53477261706869635f657874456469745f7468756d625f64696d27293b0d0a090d0a096368616e6765427574746f6e417661696c6162696c69747928747275652c202474656d705f627574746f6e735f6d61696e293b0d0a096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f6172726f77293b0d0a096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f63726f70293b0d0a096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f64696d293b0d0a096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f627574746f6e735f726573697a65293b0d0a096368616e6765427574746f6e5669736962696c6974792866616c73652c202474656d705f696e707574735f64696d293b0d0a090d0a0967657441637444696d46726f6d517565756528696d675f696e666f293b0d0a7d293b</data></item> |
|---|
| 21 | <item key="id"><![CDATA[handleEdit.js]]></item> |
|---|
| 22 | <item key="mandatory" type="int">0</item> |
|---|
| 23 | <item key="multilang" type="int">0</item> |
|---|
| 24 | <item key="name"><![CDATA[handleEdit.js]]></item> |
|---|
| 25 | <item key="repetitive" type="int">0</item> |
|---|
| 26 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 27 | </dictionary> |
|---|
| 28 | </item> |
|---|
| 29 | <item type="dictionary"><dictionary> |
|---|
| 30 | <item key="custom"> |
|---|
| 31 | <data content_type="text/x-c" filename="jquery.Jcrop.js" type="file"><![CDATA[/** |
|---|
| 32 | * jquery.Jcrop.js v0.9.8 |
|---|
| 33 | * jQuery Image Cropping Plugin |
|---|
| 34 | * @author Kelly Hallman <khallman@gmail.com> |
|---|
| 35 | * Copyright (c) 2008-2009 Kelly Hallman - released under MIT License {{{ |
|---|
| 36 | * |
|---|
| 37 | * Permission is hereby granted, free of charge, to any person |
|---|
| 38 | * obtaining a copy of this software and associated documentation |
|---|
| 39 | * files (the "Software"), to deal in the Software without |
|---|
| 40 | * restriction, including without limitation the rights to use, |
|---|
| 41 | * copy, modify, merge, publish, distribute, sublicense, and/or sell |
|---|
| 42 | * copies of the Software, and to permit persons to whom the |
|---|
| 43 | * Software is furnished to do so, subject to the following |
|---|
| 44 | * conditions: |
|---|
| 45 | |
|---|
| 46 | * The above copyright notice and this permission notice shall be |
|---|
| 47 | * included in all copies or substantial portions of the Software. |
|---|
| 48 | |
|---|
| 49 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|---|
| 50 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
|---|
| 51 | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|---|
| 52 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
|---|
| 53 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
|---|
| 54 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|---|
| 55 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
|---|
| 56 | * OTHER DEALINGS IN THE SOFTWARE. |
|---|
| 57 | |
|---|
| 58 | * }}} |
|---|
| 59 | */ |
|---|
| 60 | |
|---|
| 61 | (function($) { |
|---|
| 62 | |
|---|
| 63 | $.Jcrop = function(obj,opt) |
|---|
| 64 | { |
|---|
| 65 | // Initialization {{{ |
|---|
| 66 | |
|---|
| 67 | // Sanitize some options {{{ |
|---|
| 68 | var obj = obj, opt = opt; |
|---|
| 69 | |
|---|
| 70 | if (typeof(obj) !== 'object') obj = $(obj)[0]; |
|---|
| 71 | if (typeof(opt) !== 'object') opt = { }; |
|---|
| 72 | |
|---|
| 73 | // Some on-the-fly fixes for MSIE...sigh |
|---|
| 74 | if (!('trackDocument' in opt)) |
|---|
| 75 | { |
|---|
| 76 | opt.trackDocument = $.browser.msie ? false : true; |
|---|
| 77 | if ($.browser.msie && $.browser.version.split('.')[0] == '8') |
|---|
| 78 | opt.trackDocument = true; |
|---|
| 79 | } |
|---|
| 80 | |
|---|
| 81 | if (!('keySupport' in opt)) |
|---|
| 82 | opt.keySupport = $.browser.msie ? false : true; |
|---|
| 83 | |
|---|
| 84 | // }}} |
|---|
| 85 | // Extend the default options {{{ |
|---|
| 86 | var defaults = { |
|---|
| 87 | |
|---|
| 88 | // Basic Settings |
|---|
| 89 | trackDocument: false, |
|---|
| 90 | baseClass: 'jcrop', |
|---|
| 91 | addClass: null, |
|---|
| 92 | |
|---|
| 93 | // Styling Options |
|---|
| 94 | bgColor: 'black', |
|---|
| 95 | bgOpacity: .6, |
|---|
| 96 | borderOpacity: .4, |
|---|
| 97 | handleOpacity: .5, |
|---|
| 98 | |
|---|
| 99 | handlePad: 5, |
|---|
| 100 | handleSize: 9, |
|---|
| 101 | handleOffset: 5, |
|---|
| 102 | edgeMargin: 14, |
|---|
| 103 | |
|---|
| 104 | aspectRatio: 0, |
|---|
| 105 | keySupport: true, |
|---|
| 106 | cornerHandles: true, |
|---|
| 107 | sideHandles: true, |
|---|
| 108 | drawBorders: true, |
|---|
| 109 | dragEdges: true, |
|---|
| 110 | |
|---|
| 111 | boxWidth: 0, |
|---|
| 112 | boxHeight: 0, |
|---|
| 113 | |
|---|
| 114 | boundary: 8, |
|---|
| 115 | animationDelay: 20, |
|---|
| 116 | swingSpeed: 3, |
|---|
| 117 | |
|---|
| 118 | allowSelect: true, |
|---|
| 119 | allowMove: true, |
|---|
| 120 | allowResize: true, |
|---|
| 121 | |
|---|
| 122 | minSelect: [ 0, 0 ], |
|---|
| 123 | maxSize: [ 0, 0 ], |
|---|
| 124 | minSize: [ 0, 0 ], |
|---|
| 125 | |
|---|
| 126 | // Callbacks / Event Handlers |
|---|
| 127 | onChange: function() { }, |
|---|
| 128 | onSelect: function() { } |
|---|
| 129 | |
|---|
| 130 | }; |
|---|
| 131 | var options = defaults; |
|---|
| 132 | setOptions(opt); |
|---|
| 133 | |
|---|
| 134 | // }}} |
|---|
| 135 | // Initialize some jQuery objects {{{ |
|---|
| 136 | |
|---|
| 137 | var $origimg = $(obj); |
|---|
| 138 | var $img = $origimg.clone().removeAttr('id').css({ position: 'absolute' }); |
|---|
| 139 | |
|---|
| 140 | $img.width($origimg.width()); |
|---|
| 141 | $img.height($origimg.height()); |
|---|
| 142 | $origimg.after($img).hide(); |
|---|
| 143 | |
|---|
| 144 | presize($img,options.boxWidth,options.boxHeight); |
|---|
| 145 | |
|---|
| 146 | var boundx = $img.width(), |
|---|
| 147 | boundy = $img.height(), |
|---|
| 148 | |
|---|
| 149 | $div = $('<div />') |
|---|
| 150 | .width(boundx).height(boundy) |
|---|
| 151 | .addClass(cssClass('holder')) |
|---|
| 152 | .css({ |
|---|
| 153 | position: 'relative', |
|---|
| 154 | backgroundColor: options.bgColor |
|---|
| 155 | }).insertAfter($origimg).append($img); |
|---|
| 156 | ; |
|---|
| 157 | |
|---|
| 158 | if (options.addClass) $div.addClass(options.addClass); |
|---|
| 159 | //$img.wrap($div); |
|---|
| 160 | |
|---|
| 161 | var $img2 = $('<img />')/*{{{*/ |
|---|
| 162 | .attr('src',$img.attr('src')) |
|---|
| 163 | .css('position','absolute') |
|---|
| 164 | .width(boundx).height(boundy) |
|---|
| 165 | ;/*}}}*/ |
|---|
| 166 | var $img_holder = $('<div />')/*{{{*/ |
|---|
| 167 | .width(pct(100)).height(pct(100)) |
|---|
| 168 | .css({ |
|---|
| 169 | zIndex: 310, |
|---|
| 170 | position: 'absolute', |
|---|
| 171 | overflow: 'hidden' |
|---|
| 172 | }) |
|---|
| 173 | .append($img2) |
|---|
| 174 | ;/*}}}*/ |
|---|
| 175 | var $hdl_holder = $('<div />')/*{{{*/ |
|---|
| 176 | .width(pct(100)).height(pct(100)) |
|---|
| 177 | .css('zIndex',320); |
|---|
| 178 | /*}}}*/ |
|---|
| 179 | var $sel = $('<div />')/*{{{*/ |
|---|
| 180 | .css({ |
|---|
| 181 | position: 'absolute', |
|---|
| 182 | zIndex: 300 |
|---|
| 183 | }) |
|---|
| 184 | .insertBefore($img) |
|---|
| 185 | .append($img_holder,$hdl_holder) |
|---|
| 186 | ;/*}}}*/ |
|---|
| 187 | |
|---|
| 188 | var bound = options.boundary; |
|---|
| 189 | var $trk = newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)) |
|---|
| 190 | .css({ position: 'absolute', top: px(-bound), left: px(-bound), zIndex: 290 }) |
|---|
| 191 | .mousedown(newSelection); |
|---|
| 192 | |
|---|
| 193 | /* }}} */ |
|---|
| 194 | // Set more variables {{{ |
|---|
| 195 | |
|---|
| 196 | var xlimit, ylimit, xmin, ymin; |
|---|
| 197 | var xscale, yscale, enabled = true; |
|---|
| 198 | var docOffset = getPos($img), |
|---|
| 199 | // Internal states |
|---|
| 200 | btndown, lastcurs, dimmed, animating, |
|---|
| 201 | shift_down; |
|---|
| 202 | |
|---|
| 203 | // }}} |
|---|
| 204 | |
|---|
| 205 | |
|---|
| 206 | // }}} |
|---|
| 207 | // Internal Modules {{{ |
|---|
| 208 | |
|---|
| 209 | var Coords = function()/*{{{*/ |
|---|
| 210 | { |
|---|
| 211 | var x1 = 0, y1 = 0, x2 = 0, y2 = 0, ox, oy; |
|---|
| 212 | |
|---|
| 213 | function setPressed(pos)/*{{{*/ |
|---|
| 214 | { |
|---|
| 215 | var pos = rebound(pos); |
|---|
| 216 | x2 = x1 = pos[0]; |
|---|
| 217 | y2 = y1 = pos[1]; |
|---|
| 218 | }; |
|---|
| 219 | /*}}}*/ |
|---|
| 220 | function setCurrent(pos)/*{{{*/ |
|---|
| 221 | { |
|---|
| 222 | var pos = rebound(pos); |
|---|
| 223 | ox = pos[0] - x2; |
|---|
| 224 | oy = pos[1] - y2; |
|---|
| 225 | x2 = pos[0]; |
|---|
| 226 | y2 = pos[1]; |
|---|
| 227 | }; |
|---|
| 228 | /*}}}*/ |
|---|
| 229 | function getOffset()/*{{{*/ |
|---|
| 230 | { |
|---|
| 231 | return [ ox, oy ]; |
|---|
| 232 | }; |
|---|
| 233 | /*}}}*/ |
|---|
| 234 | function moveOffset(offset)/*{{{*/ |
|---|
| 235 | { |
|---|
| 236 | var ox = offset[0], oy = offset[1]; |
|---|
| 237 | |
|---|
| 238 | if (0 > x1 + ox) ox -= ox + x1; |
|---|
| 239 | if (0 > y1 + oy) oy -= oy + y1; |
|---|
| 240 | |
|---|
| 241 | if (boundy < y2 + oy) oy += boundy - (y2 + oy); |
|---|
| 242 | if (boundx < x2 + ox) ox += boundx - (x2 + ox); |
|---|
| 243 | |
|---|
| 244 | x1 += ox; |
|---|
| 245 | x2 += ox; |
|---|
| 246 | y1 += oy; |
|---|
| 247 | y2 += oy; |
|---|
| 248 | }; |
|---|
| 249 | /*}}}*/ |
|---|
| 250 | function getCorner(ord)/*{{{*/ |
|---|
| 251 | { |
|---|
| 252 | var c = getFixed(); |
|---|
| 253 | switch(ord) |
|---|
| 254 | { |
|---|
| 255 | case 'ne': return [ c.x2, c.y ]; |
|---|
| 256 | case 'nw': return [ c.x, c.y ]; |
|---|
| 257 | case 'se': return [ c.x2, c.y2 ]; |
|---|
| 258 | case 'sw': return [ c.x, c.y2 ]; |
|---|
| 259 | } |
|---|
| 260 | }; |
|---|
| 261 | /*}}}*/ |
|---|
| 262 | function getFixed()/*{{{*/ |
|---|
| 263 | { |
|---|
| 264 | if (!options.aspectRatio) return getRect(); |
|---|
| 265 | // This function could use some optimization I think... |
|---|
| 266 | var aspect = options.aspectRatio, |
|---|
| 267 | min_x = options.minSize[0]/xscale, |
|---|
| 268 | min_y = options.minSize[1]/yscale, |
|---|
| 269 | max_x = options.maxSize[0]/xscale, |
|---|
| 270 | max_y = options.maxSize[1]/yscale, |
|---|
| 271 | rw = x2 - x1, |
|---|
| 272 | rh = y2 - y1, |
|---|
| 273 | rwa = Math.abs(rw), |
|---|
| 274 | rha = Math.abs(rh), |
|---|
| 275 | real_ratio = rwa / rha, |
|---|
| 276 | xx, yy |
|---|
| 277 | ; |
|---|
| 278 | if (max_x == 0) { max_x = boundx * 10 } |
|---|
| 279 | if (max_y == 0) { max_y = boundy * 10 } |
|---|
| 280 | if (real_ratio < aspect) |
|---|
| 281 | { |
|---|
| 282 | yy = y2; |
|---|
| 283 | w = rha * aspect; |
|---|
| 284 | xx = rw < 0 ? x1 - w : w + x1; |
|---|
| 285 | |
|---|
| 286 | if (xx < 0) |
|---|
| 287 | { |
|---|
| 288 | xx = 0; |
|---|
| 289 | h = Math.abs((xx - x1) / aspect); |
|---|
| 290 | yy = rh < 0 ? y1 - h: h + y1; |
|---|
| 291 | } |
|---|
| 292 | else if (xx > boundx) |
|---|
| 293 | { |
|---|
| 294 | xx = boundx; |
|---|
| 295 | h = Math.abs((xx - x1) / aspect); |
|---|
| 296 | yy = rh < 0 ? y1 - h : h + y1; |
|---|
| 297 | } |
|---|
| 298 | } |
|---|
| 299 | else |
|---|
| 300 | { |
|---|
| 301 | xx = x2; |
|---|
| 302 | h = rwa / aspect; |
|---|
| 303 | yy = rh < 0 ? y1 - h : y1 + h; |
|---|
| 304 | if (yy < 0) |
|---|
| 305 | { |
|---|
| 306 | yy = 0; |
|---|
| 307 | w = Math.abs((yy - y1) * aspect); |
|---|
| 308 | xx = rw < 0 ? x1 - w : w + x1; |
|---|
| 309 | } |
|---|
| 310 | else if (yy > boundy) |
|---|
| 311 | { |
|---|
| 312 | yy = boundy; |
|---|
| 313 | w = Math.abs(yy - y1) * aspect; |
|---|
| 314 | xx = rw < 0 ? x1 - w : w + x1; |
|---|
| 315 | } |
|---|
| 316 | } |
|---|
| 317 | |
|---|
| 318 | // Magic %-) |
|---|
| 319 | if(xx > x1) { // right side |
|---|
| 320 | if(xx - x1 < min_x) { |
|---|
| 321 | xx = x1 + min_x; |
|---|
| 322 | } else if (xx - x1 > max_x) { |
|---|
| 323 | xx = x1 + max_x; |
|---|
| 324 | } |
|---|
| 325 | if(yy > y1) { |
|---|
| 326 | yy = y1 + (xx - x1)/aspect; |
|---|
| 327 | } else { |
|---|
| 328 | yy = y1 - (xx - x1)/aspect; |
|---|
| 329 | } |
|---|
| 330 | } else if (xx < x1) { // left side |
|---|
| 331 | if(x1 - xx < min_x) { |
|---|
| 332 | xx = x1 - min_x |
|---|
| 333 | } else if (x1 - xx > max_x) { |
|---|
| 334 | xx = x1 - max_x; |
|---|
| 335 | } |
|---|
| 336 | if(yy > y1) { |
|---|
| 337 | yy = y1 + (x1 - xx)/aspect; |
|---|
| 338 | } else { |
|---|
| 339 | yy = y1 - (x1 - xx)/aspect; |
|---|
| 340 | } |
|---|
| 341 | } |
|---|
| 342 | |
|---|
| 343 | if(xx < 0) { |
|---|
| 344 | x1 -= xx; |
|---|
| 345 | xx = 0; |
|---|
| 346 | } else if (xx > boundx) { |
|---|
| 347 | x1 -= xx - boundx; |
|---|
| 348 | xx = boundx; |
|---|
| 349 | } |
|---|
| 350 | |
|---|
| 351 | if(yy < 0) { |
|---|
| 352 | y1 -= yy; |
|---|
| 353 | yy = 0; |
|---|
| 354 | } else if (yy > boundy) { |
|---|
| 355 | y1 -= yy - boundy; |
|---|
| 356 | yy = boundy; |
|---|
| 357 | } |
|---|
| 358 | |
|---|
| 359 | return last = makeObj(flipCoords(x1,y1,xx,yy)); |
|---|
| 360 | }; |
|---|
| 361 | /*}}}*/ |
|---|
| 362 | function rebound(p)/*{{{*/ |
|---|
| 363 | { |
|---|
| 364 | if (p[0] < 0) p[0] = 0; |
|---|
| 365 | if (p[1] < 0) p[1] = 0; |
|---|
| 366 | |
|---|
| 367 | if (p[0] > boundx) p[0] = boundx; |
|---|
| 368 | if (p[1] > boundy) p[1] = boundy; |
|---|
| 369 | |
|---|
| 370 | return [ p[0], p[1] ]; |
|---|
| 371 | }; |
|---|
| 372 | /*}}}*/ |
|---|
| 373 | function flipCoords(x1,y1,x2,y2)/*{{{*/ |
|---|
| 374 | { |
|---|
| 375 | var xa = x1, xb = x2, ya = y1, yb = y2; |
|---|
| 376 | if (x2 < x1) |
|---|
| 377 | { |
|---|
| 378 | xa = x2; |
|---|
| 379 | xb = x1; |
|---|
| 380 | } |
|---|
| 381 | if (y2 < y1) |
|---|
| 382 | { |
|---|
| 383 | ya = y2; |
|---|
| 384 | yb = y1; |
|---|
| 385 | } |
|---|
| 386 | return [ Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb) ]; |
|---|
| 387 | }; |
|---|
| 388 | /*}}}*/ |
|---|
| 389 | function getRect()/*{{{*/ |
|---|
| 390 | { |
|---|
| 391 | var xsize = x2 - x1; |
|---|
| 392 | var ysize = y2 - y1; |
|---|
| 393 | |
|---|
| 394 | if (xlimit && (Math.abs(xsize) > xlimit)) |
|---|
| 395 | x2 = (xsize > 0) ? (x1 + xlimit) : (x1 - xlimit); |
|---|
| 396 | if (ylimit && (Math.abs(ysize) > ylimit)) |
|---|
| 397 | y2 = (ysize > 0) ? (y1 + ylimit) : (y1 - ylimit); |
|---|
| 398 | |
|---|
| 399 | if (ymin && (Math.abs(ysize) < ymin)) |
|---|
| 400 | y2 = (ysize > 0) ? (y1 + ymin) : (y1 - ymin); |
|---|
| 401 | if (xmin && (Math.abs(xsize) < xmin)) |
|---|
| 402 | x2 = (xsize > 0) ? (x1 + xmin) : (x1 - xmin); |
|---|
| 403 | |
|---|
| 404 | if (x1 < 0) { x2 -= x1; x1 -= x1; } |
|---|
| 405 | if (y1 < 0) { y2 -= y1; y1 -= y1; } |
|---|
| 406 | if (x2 < 0) { x1 -= x2; x2 -= x2; } |
|---|
| 407 | if (y2 < 0) { y1 -= y2; y2 -= y2; } |
|---|
| 408 | if (x2 > boundx) { var delta = x2 - boundx; x1 -= delta; x2 -= delta; } |
|---|
| 409 | if (y2 > boundy) { var delta = y2 - boundy; y1 -= delta; y2 -= delta; } |
|---|
| 410 | if (x1 > boundx) { var delta = x1 - boundy; y2 -= delta; y1 -= delta; } |
|---|
| 411 | if (y1 > boundy) { var delta = y1 - boundy; y2 -= delta; y1 -= delta; } |
|---|
| 412 | |
|---|
| 413 | return makeObj(flipCoords(x1,y1,x2,y2)); |
|---|
| 414 | }; |
|---|
| 415 | /*}}}*/ |
|---|
| 416 | function makeObj(a)/*{{{*/ |
|---|
| 417 | { |
|---|
| 418 | return { x: a[0], y: a[1], x2: a[2], y2: a[3], |
|---|
| 419 | w: a[2] - a[0], h: a[3] - a[1] }; |
|---|
| 420 | }; |
|---|
| 421 | /*}}}*/ |
|---|
| 422 | |
|---|
| 423 | return { |
|---|
| 424 | flipCoords: flipCoords, |
|---|
| 425 | setPressed: setPressed, |
|---|
| 426 | setCurrent: setCurrent, |
|---|
| 427 | getOffset: getOffset, |
|---|
| 428 | moveOffset: moveOffset, |
|---|
| 429 | getCorner: getCorner, |
|---|
| 430 | getFixed: getFixed |
|---|
| 431 | }; |
|---|
| 432 | }(); |
|---|
| 433 | |
|---|
| 434 | /*}}}*/ |
|---|
| 435 | var Selection = function()/*{{{*/ |
|---|
| 436 | { |
|---|
| 437 | var start, end, dragmode, awake, hdep = 370; |
|---|
| 438 | var borders = { }; |
|---|
| 439 | var handle = { }; |
|---|
| 440 | var seehandles = false; |
|---|
| 441 | var hhs = options.handleOffset; |
|---|
| 442 | |
|---|
| 443 | /* Insert draggable elements {{{*/ |
|---|
| 444 | |
|---|
| 445 | // Insert border divs for outline |
|---|
| 446 | if (options.drawBorders) { |
|---|
| 447 | borders = { |
|---|
| 448 | top: insertBorder('hline') |
|---|
| 449 | .css('top',$.browser.msie?px(-1):px(0)), |
|---|
| 450 | bottom: insertBorder('hline'), |
|---|
| 451 | left: insertBorder('vline'), |
|---|
| 452 | right: insertBorder('vline') |
|---|
| 453 | }; |
|---|
| 454 | } |
|---|
| 455 | |
|---|
| 456 | // Insert handles on edges |
|---|
| 457 | if (options.dragEdges) { |
|---|
| 458 | handle.t = insertDragbar('n'); |
|---|
| 459 | handle.b = insertDragbar('s'); |
|---|
| 460 | handle.r = insertDragbar('e'); |
|---|
| 461 | handle.l = insertDragbar('w'); |
|---|
| 462 | } |
|---|
| 463 | |
|---|
| 464 | // Insert side handles |
|---|
| 465 | options.sideHandles && |
|---|
| 466 | createHandles(['n','s','e','w']); |
|---|
| 467 | |
|---|
| 468 | // Insert corner handles |
|---|
| 469 | options.cornerHandles && |
|---|
| 470 | createHandles(['sw','nw','ne','se']); |
|---|
| 471 | |
|---|
| 472 | /*}}}*/ |
|---|
| 473 | // Private Methods |
|---|
| 474 | function insertBorder(type)/*{{{*/ |
|---|
| 475 | { |
|---|
| 476 | var jq = $('<div />') |
|---|
| 477 | .css({position: 'absolute', opacity: options.borderOpacity }) |
|---|
| 478 | .addClass(cssClass(type)); |
|---|
| 479 | $img_holder.append(jq); |
|---|
| 480 | return jq; |
|---|
| 481 | }; |
|---|
| 482 | /*}}}*/ |
|---|
| 483 | function dragDiv(ord,zi)/*{{{*/ |
|---|
| 484 | { |
|---|
| 485 | var jq = $('<div />') |
|---|
| 486 | .mousedown(createDragger(ord)) |
|---|
| 487 | .css({ |
|---|
| 488 | cursor: ord+'-resize', |
|---|
| 489 | position: 'absolute', |
|---|
| 490 | zIndex: zi |
|---|
| 491 | }) |
|---|
| 492 | ; |
|---|
| 493 | $hdl_holder.append(jq); |
|---|
| 494 | return jq; |
|---|
| 495 | }; |
|---|
| 496 | /*}}}*/ |
|---|
| 497 | function insertHandle(ord)/*{{{*/ |
|---|
| 498 | { |
|---|
| 499 | return dragDiv(ord,hdep++) |
|---|
| 500 | .css({ top: px(-hhs+1), left: px(-hhs+1), opacity: options.handleOpacity }) |
|---|
| 501 | .addClass(cssClass('handle')); |
|---|
| 502 | }; |
|---|
| 503 | /*}}}*/ |
|---|
| 504 | function insertDragbar(ord)/*{{{*/ |
|---|
| 505 | { |
|---|
| 506 | var s = options.handleSize, |
|---|
| 507 | o = hhs, |
|---|
| 508 | h = s, w = s, |
|---|
| 509 | t = o, l = o; |
|---|
| 510 | |
|---|
| 511 | switch(ord) |
|---|
| 512 | { |
|---|
| 513 | case 'n': case 's': w = pct(100); break; |
|---|
| 514 | case 'e': case 'w': h = pct(100); break; |
|---|
| 515 | } |
|---|
| 516 | |
|---|
| 517 | return dragDiv(ord,hdep++).width(w).height(h) |
|---|
| 518 | .css({ top: px(-t+1), left: px(-l+1)}); |
|---|
| 519 | }; |
|---|
| 520 | /*}}}*/ |
|---|
| 521 | function createHandles(li)/*{{{*/ |
|---|
| 522 | { |
|---|
| 523 | for(i in li) handle[li[i]] = insertHandle(li[i]); |
|---|
| 524 | }; |
|---|
| 525 | /*}}}*/ |
|---|
| 526 | function moveHandles(c)/*{{{*/ |
|---|
| 527 | { |
|---|
| 528 | var midvert = Math.round((c.h / 2) - hhs), |
|---|
| 529 | midhoriz = Math.round((c.w / 2) - hhs), |
|---|
| 530 | north = west = -hhs+1, |
|---|
| 531 | east = c.w - hhs, |
|---|
| 532 | south = c.h - hhs, |
|---|
| 533 | x, y; |
|---|
| 534 | |
|---|
| 535 | 'e' in handle && |
|---|
| 536 | handle.e.css({ top: px(midvert), left: px(east) }) && |
|---|
| 537 | handle.w.css({ top: px(midvert) }) && |
|---|
| 538 | handle.s.css({ top: px(south), left: px(midhoriz) }) && |
|---|
| 539 | handle.n.css({ left: px(midhoriz) }); |
|---|
| 540 | |
|---|
| 541 | 'ne' in handle && |
|---|
| 542 | handle.ne.css({ left: px(east) }) && |
|---|
| 543 | handle.se.css({ top: px(south), left: px(east) }) && |
|---|
| 544 | handle.sw.css({ top: px(south) }); |
|---|
| 545 | |
|---|
| 546 | 'b' in handle && |
|---|
| 547 | handle.b.css({ top: px(south) }) && |
|---|
| 548 | handle.r.css({ left: px(east) }); |
|---|
| 549 | }; |
|---|
| 550 | /*}}}*/ |
|---|
| 551 | function moveto(x,y)/*{{{*/ |
|---|
| 552 | { |
|---|
| 553 | $img2.css({ top: px(-y), left: px(-x) }); |
|---|
| 554 | $sel.css({ top: px(y), left: px(x) }); |
|---|
| 555 | }; |
|---|
| 556 | /*}}}*/ |
|---|
| 557 | function resize(w,h)/*{{{*/ |
|---|
| 558 | { |
|---|
| 559 | $sel.width(w).height(h); |
|---|
| 560 | }; |
|---|
| 561 | /*}}}*/ |
|---|
| 562 | function refresh()/*{{{*/ |
|---|
| 563 | { |
|---|
| 564 | var c = Coords.getFixed(); |
|---|
| 565 | |
|---|
| 566 | Coords.setPressed([c.x,c.y]); |
|---|
| 567 | Coords.setCurrent([c.x2,c.y2]); |
|---|
| 568 | |
|---|
| 569 | updateVisible(); |
|---|
| 570 | }; |
|---|
| 571 | /*}}}*/ |
|---|
| 572 | |
|---|
| 573 | // Internal Methods |
|---|
| 574 | function updateVisible()/*{{{*/ |
|---|
| 575 | { if (awake) return update(); }; |
|---|
| 576 | /*}}}*/ |
|---|
| 577 | function update()/*{{{*/ |
|---|
| 578 | { |
|---|
| 579 | var c = Coords.getFixed(); |
|---|
| 580 | |
|---|
| 581 | resize(c.w,c.h); |
|---|
| 582 | moveto(c.x,c.y); |
|---|
| 583 | |
|---|
| 584 | options.drawBorders && |
|---|
| 585 | borders['right'].css({ left: px(c.w-1) }) && |
|---|
| 586 | borders['bottom'].css({ top: px(c.h-1) }); |
|---|
| 587 | |
|---|
| 588 | seehandles && moveHandles(c); |
|---|
| 589 | awake || show(); |
|---|
| 590 | |
|---|
| 591 | options.onChange(unscale(c)); |
|---|
| 592 | }; |
|---|
| 593 | /*}}}*/ |
|---|
| 594 | function show()/*{{{*/ |
|---|
| 595 | { |
|---|
| 596 | $sel.show(); |
|---|
| 597 | $img.css('opacity',options.bgOpacity); |
|---|
| 598 | awake = true; |
|---|
| 599 | }; |
|---|
| 600 | /*}}}*/ |
|---|
| 601 | function release()/*{{{*/ |
|---|
| 602 | { |
|---|
| 603 | disableHandles(); |
|---|
| 604 | $sel.hide(); |
|---|
| 605 | $img.css('opacity',1); |
|---|
| 606 | awake = false; |
|---|
| 607 | }; |
|---|
| 608 | /*}}}*/ |
|---|
| 609 | function showHandles()//{{{ |
|---|
| 610 | { |
|---|
| 611 | if (seehandles) |
|---|
| 612 | { |
|---|
| 613 | moveHandles(Coords.getFixed()); |
|---|
| 614 | $hdl_holder.show(); |
|---|
| 615 | } |
|---|
| 616 | }; |
|---|
| 617 | //}}} |
|---|
| 618 | function enableHandles()/*{{{*/ |
|---|
| 619 | { |
|---|
| 620 | seehandles = true; |
|---|
| 621 | if (options.allowResize) |
|---|
| 622 | { |
|---|
| 623 | moveHandles(Coords.getFixed()); |
|---|
| 624 | $hdl_holder.show(); |
|---|
| 625 | return true; |
|---|
| 626 | } |
|---|
| 627 | }; |
|---|
| 628 | /*}}}*/ |
|---|
| 629 | function disableHandles()/*{{{*/ |
|---|
| 630 | { |
|---|
| 631 | seehandles = false; |
|---|
| 632 | $hdl_holder.hide(); |
|---|
| 633 | }; |
|---|
| 634 | /*}}}*/ |
|---|
| 635 | function animMode(v)/*{{{*/ |
|---|
| 636 | { |
|---|
| 637 | (animating = v) ? disableHandles(): enableHandles(); |
|---|
| 638 | }; |
|---|
| 639 | /*}}}*/ |
|---|
| 640 | function done()/*{{{*/ |
|---|
| 641 | { |
|---|
| 642 | animMode(false); |
|---|
| 643 | refresh(); |
|---|
| 644 | }; |
|---|
| 645 | /*}}}*/ |
|---|
| 646 | |
|---|
| 647 | var $track = newTracker().mousedown(createDragger('move')) |
|---|
| 648 | .css({ cursor: 'move', position: 'absolute', zIndex: 360 }) |
|---|
| 649 | |
|---|
| 650 | $img_holder.append($track); |
|---|
| 651 | disableHandles(); |
|---|
| 652 | |
|---|
| 653 | return { |
|---|
| 654 | updateVisible: updateVisible, |
|---|
| 655 | update: update, |
|---|
| 656 | release: release, |
|---|
| 657 | refresh: refresh, |
|---|
| 658 | setCursor: function (cursor) { $track.css('cursor',cursor); }, |
|---|
| 659 | enableHandles: enableHandles, |
|---|
| 660 | enableOnly: function() { seehandles = true; }, |
|---|
| 661 | showHandles: showHandles, |
|---|
| 662 | disableHandles: disableHandles, |
|---|
| 663 | animMode: animMode, |
|---|
| 664 | done: done |
|---|
| 665 | }; |
|---|
| 666 | }(); |
|---|
| 667 | /*}}}*/ |
|---|
| 668 | var Tracker = function()/*{{{*/ |
|---|
| 669 | { |
|---|
| 670 | var onMove = function() { }, |
|---|
| 671 | onDone = function() { }, |
|---|
| 672 | trackDoc = options.trackDocument; |
|---|
| 673 | |
|---|
| 674 | if (!trackDoc) |
|---|
| 675 | { |
|---|
| 676 | $trk |
|---|
| 677 | .mousemove(trackMove) |
|---|
| 678 | .mouseup(trackUp) |
|---|
| 679 | .mouseout(trackUp) |
|---|
| 680 | ; |
|---|
| 681 | } |
|---|
| 682 | |
|---|
| 683 | function toFront()/*{{{*/ |
|---|
| 684 | { |
|---|
| 685 | $trk.css({zIndex:450}); |
|---|
| 686 | if (trackDoc) |
|---|
| 687 | { |
|---|
| 688 | $(document) |
|---|
| 689 | .mousemove(trackMove) |
|---|
| 690 | .mouseup(trackUp) |
|---|
| 691 | ; |
|---|
| 692 | } |
|---|
| 693 | } |
|---|
| 694 | /*}}}*/ |
|---|
| 695 | function toBack()/*{{{*/ |
|---|
| 696 | { |
|---|
| 697 | $trk.css({zIndex:290}); |
|---|
| 698 | if (trackDoc) |
|---|
| 699 | { |
|---|
| 700 | $(document) |
|---|
| 701 | .unbind('mousemove',trackMove) |
|---|
| 702 | .unbind('mouseup',trackUp) |
|---|
| 703 | ; |
|---|
| 704 | } |
|---|
| 705 | } |
|---|
| 706 | /*}}}*/ |
|---|
| 707 | function trackMove(e)/*{{{*/ |
|---|
| 708 | { |
|---|
| 709 | onMove(mouseAbs(e)); |
|---|
| 710 | }; |
|---|
| 711 | /*}}}*/ |
|---|
| 712 | function trackUp(e)/*{{{*/ |
|---|
| 713 | { |
|---|
| 714 | e.preventDefault(); |
|---|
| 715 | e.stopPropagation(); |
|---|
| 716 | |
|---|
| 717 | if (btndown) |
|---|
| 718 | { |
|---|
| 719 | btndown = false; |
|---|
| 720 | |
|---|
| 721 | onDone(mouseAbs(e)); |
|---|
| 722 | options.onSelect(unscale(Coords.getFixed())); |
|---|
| 723 | toBack(); |
|---|
| 724 | onMove = function() { }; |
|---|
| 725 | onDone = function() { }; |
|---|
| 726 | } |
|---|
| 727 | |
|---|
| 728 | return false; |
|---|
| 729 | }; |
|---|
| 730 | /*}}}*/ |
|---|
| 731 | |
|---|
| 732 | function activateHandlers(move,done)/* {{{ */ |
|---|
| 733 | { |
|---|
| 734 | btndown = true; |
|---|
| 735 | onMove = move; |
|---|
| 736 | onDone = done; |
|---|
| 737 | toFront(); |
|---|
| 738 | return false; |
|---|
| 739 | }; |
|---|
| 740 | /* }}} */ |
|---|
| 741 | |
|---|
| 742 | function setCursor(t) { $trk.css('cursor',t); }; |
|---|
| 743 | |
|---|
| 744 | $img.before($trk); |
|---|
| 745 | return { |
|---|
| 746 | activateHandlers: activateHandlers, |
|---|
| 747 | setCursor: setCursor |
|---|
| 748 | }; |
|---|
| 749 | }(); |
|---|
| 750 | /*}}}*/ |
|---|
| 751 | var KeyManager = function()/*{{{*/ |
|---|
| 752 | { |
|---|
| 753 | var $keymgr = $('<input type="radio" />') |
|---|
| 754 | .css({ position: 'absolute', left: '-30px' }) |
|---|
| 755 | .keypress(parseKey) |
|---|
| 756 | .blur(onBlur), |
|---|
| 757 | |
|---|
| 758 | $keywrap = $('<div />') |
|---|
| 759 | .css({ |
|---|
| 760 | position: 'absolute', |
|---|
| 761 | overflow: 'hidden' |
|---|
| 762 | }) |
|---|
| 763 | .append($keymgr) |
|---|
| 764 | ; |
|---|
| 765 | |
|---|
| 766 | function watchKeys()/*{{{*/ |
|---|
| 767 | { |
|---|
| 768 | if (options.keySupport) |
|---|
| 769 | { |
|---|
| 770 | $keymgr.show(); |
|---|
| 771 | $keymgr.focus(); |
|---|
| 772 | } |
|---|
| 773 | }; |
|---|
| 774 | /*}}}*/ |
|---|
| 775 | function onBlur(e)/*{{{*/ |
|---|
| 776 | { |
|---|
| 777 | $keymgr.hide(); |
|---|
| 778 | }; |
|---|
| 779 | /*}}}*/ |
|---|
| 780 | function doNudge(e,x,y)/*{{{*/ |
|---|
| 781 | { |
|---|
| 782 | if (options.allowMove) { |
|---|
| 783 | Coords.moveOffset([x,y]); |
|---|
| 784 | Selection.updateVisible(); |
|---|
| 785 | }; |
|---|
| 786 | e.preventDefault(); |
|---|
| 787 | e.stopPropagation(); |
|---|
| 788 | }; |
|---|
| 789 | /*}}}*/ |
|---|
| 790 | function parseKey(e)/*{{{*/ |
|---|
| 791 | { |
|---|
| 792 | if (e.ctrlKey) return true; |
|---|
| 793 | shift_down = e.shiftKey ? true : false; |
|---|
| 794 | var nudge = shift_down ? 10 : 1; |
|---|
| 795 | switch(e.keyCode) |
|---|
| 796 | { |
|---|
| 797 | case 37: doNudge(e,-nudge,0); break; |
|---|
| 798 | case 39: doNudge(e,nudge,0); break; |
|---|
| 799 | case 38: doNudge(e,0,-nudge); break; |
|---|
| 800 | case 40: doNudge(e,0,nudge); break; |
|---|
| 801 | |
|---|
| 802 | case 27: Selection.release(); break; |
|---|
| 803 | |
|---|
| 804 | case 9: return true; |
|---|
| 805 | } |
|---|
| 806 | |
|---|
| 807 | return nothing(e); |
|---|
| 808 | }; |
|---|
| 809 | /*}}}*/ |
|---|
| 810 | |
|---|
| 811 | if (options.keySupport) $keywrap.insertBefore($img); |
|---|
| 812 | return { |
|---|
| 813 | watchKeys: watchKeys |
|---|
| 814 | }; |
|---|
| 815 | }(); |
|---|
| 816 | /*}}}*/ |
|---|
| 817 | |
|---|
| 818 | // }}} |
|---|
| 819 | // Internal Methods {{{ |
|---|
| 820 | |
|---|
| 821 | function px(n) { return '' + parseInt(n) + 'px'; }; |
|---|
| 822 | function pct(n) { return '' + parseInt(n) + '%'; }; |
|---|
| 823 | function cssClass(cl) { return options.baseClass + '-' + cl; }; |
|---|
| 824 | function getPos(obj)/*{{{*/ |
|---|
| 825 | { |
|---|
| 826 | // Updated in v0.9.4 to use built-in dimensions plugin |
|---|
| 827 | var pos = $(obj).offset(); |
|---|
| 828 | return [ pos.left, pos.top ]; |
|---|
| 829 | }; |
|---|
| 830 | /*}}}*/ |
|---|
| 831 | function mouseAbs(e)/*{{{*/ |
|---|
| 832 | { |
|---|
| 833 | return [ (e.pageX - docOffset[0]), (e.pageY - docOffset[1]) ]; |
|---|
| 834 | }; |
|---|
| 835 | /*}}}*/ |
|---|
| 836 | function myCursor(type)/*{{{*/ |
|---|
| 837 | { |
|---|
| 838 | if (type != lastcurs) |
|---|
| 839 | { |
|---|
| 840 | Tracker.setCursor(type); |
|---|
| 841 | //Handles.xsetCursor(type); |
|---|
| 842 | lastcurs = type; |
|---|
| 843 | } |
|---|
| 844 | }; |
|---|
| 845 | /*}}}*/ |
|---|
| 846 | function startDragMode(mode,pos)/*{{{*/ |
|---|
| 847 | { |
|---|
| 848 | docOffset = getPos($img); |
|---|
| 849 | Tracker.setCursor(mode=='move'?mode:mode+'-resize'); |
|---|
| 850 | |
|---|
| 851 | if (mode == 'move') |
|---|
| 852 | return Tracker.activateHandlers(createMover(pos), doneSelect); |
|---|
| 853 | |
|---|
| 854 | var fc = Coords.getFixed(); |
|---|
| 855 | var opp = oppLockCorner(mode); |
|---|
| 856 | var opc = Coords.getCorner(oppLockCorner(opp)); |
|---|
| 857 | |
|---|
| 858 | Coords.setPressed(Coords.getCorner(opp)); |
|---|
| 859 | Coords.setCurrent(opc); |
|---|
| 860 | |
|---|
| 861 | Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect); |
|---|
| 862 | }; |
|---|
| 863 | /*}}}*/ |
|---|
| 864 | function dragmodeHandler(mode,f)/*{{{*/ |
|---|
| 865 | { |
|---|
| 866 | return function(pos) { |
|---|
| 867 | if (!options.aspectRatio) switch(mode) |
|---|
| 868 | { |
|---|
| 869 | case 'e': pos[1] = f.y2; break; |
|---|
| 870 | case 'w': pos[1] = f.y2; break; |
|---|
| 871 | case 'n': pos[0] = f.x2; break; |
|---|
| 872 | case 's': pos[0] = f.x2; break; |
|---|
| 873 | } |
|---|
| 874 | else switch(mode) |
|---|
| 875 | { |
|---|
| 876 | case 'e': pos[1] = f.y+1; break; |
|---|
| 877 | case 'w': pos[1] = f.y+1; break; |
|---|
| 878 | case 'n': pos[0] = f.x+1; break; |
|---|
| 879 | case 's': pos[0] = f.x+1; break; |
|---|
| 880 | } |
|---|
| 881 | Coords.setCurrent(pos); |
|---|
| 882 | Selection.update(); |
|---|
| 883 | }; |
|---|
| 884 | }; |
|---|
| 885 | /*}}}*/ |
|---|
| 886 | function createMover(pos)/*{{{*/ |
|---|
| 887 | { |
|---|
| 888 | var lloc = pos; |
|---|
| 889 | KeyManager.watchKeys(); |
|---|
| 890 | |
|---|
| 891 | return function(pos) |
|---|
| 892 | { |
|---|
| 893 | Coords.moveOffset([pos[0] - lloc[0], pos[1] - lloc[1]]); |
|---|
| 894 | lloc = pos; |
|---|
| 895 | |
|---|
| 896 | Selection.update(); |
|---|
| 897 | }; |
|---|
| 898 | }; |
|---|
| 899 | /*}}}*/ |
|---|
| 900 | function oppLockCorner(ord)/*{{{*/ |
|---|
| 901 | { |
|---|
| 902 | switch(ord) |
|---|
| 903 | { |
|---|
| 904 | case 'n': return 'sw'; |
|---|
| 905 | case 's': return 'nw'; |
|---|
| 906 | case 'e': return 'nw'; |
|---|
| 907 | case 'w': return 'ne'; |
|---|
| 908 | case 'ne': return 'sw'; |
|---|
| 909 | case 'nw': return 'se'; |
|---|
| 910 | case 'se': return 'nw'; |
|---|
| 911 | case 'sw': return 'ne'; |
|---|
| 912 | }; |
|---|
| 913 | }; |
|---|
| 914 | /*}}}*/ |
|---|
| 915 | function createDragger(ord)/*{{{*/ |
|---|
| 916 | { |
|---|
| 917 | return function(e) { |
|---|
| 918 | if (options.disabled) return false; |
|---|
| 919 | if ((ord == 'move') && !options.allowMove) return false; |
|---|
| 920 | btndown = true; |
|---|
| 921 | startDragMode(ord,mouseAbs(e)); |
|---|
| 922 | e.stopPropagation(); |
|---|
| 923 | e.preventDefault(); |
|---|
| 924 | return false; |
|---|
| 925 | }; |
|---|
| 926 | }; |
|---|
| 927 | /*}}}*/ |
|---|
| 928 | function presize($obj,w,h)/*{{{*/ |
|---|
| 929 | { |
|---|
| 930 | var nw = $obj.width(), nh = $obj.height(); |
|---|
| 931 | if ((nw > w) && w > 0) |
|---|
| 932 | { |
|---|
| 933 | nw = w; |
|---|
| 934 | nh = (w/$obj.width()) * $obj.height(); |
|---|
| 935 | } |
|---|
| 936 | if ((nh > h) && h > 0) |
|---|
| 937 | { |
|---|
| 938 | nh = h; |
|---|
| 939 | nw = (h/$obj.height()) * $obj.width(); |
|---|
| 940 | } |
|---|
| 941 | xscale = $obj.width() / nw; |
|---|
| 942 | yscale = $obj.height() / nh; |
|---|
| 943 | $obj.width(nw).height(nh); |
|---|
| 944 | }; |
|---|
| 945 | /*}}}*/ |
|---|
| 946 | function unscale(c)/*{{{*/ |
|---|
| 947 | { |
|---|
| 948 | return { |
|---|
| 949 | x: parseInt(c.x * xscale), y: parseInt(c.y * yscale), |
|---|
| 950 | x2: parseInt(c.x2 * xscale), y2: parseInt(c.y2 * yscale), |
|---|
| 951 | w: parseInt(c.w * xscale), h: parseInt(c.h * yscale) |
|---|
| 952 | }; |
|---|
| 953 | }; |
|---|
| 954 | /*}}}*/ |
|---|
| 955 | function doneSelect(pos)/*{{{*/ |
|---|
| 956 | { |
|---|
| 957 | var c = Coords.getFixed(); |
|---|
| 958 | if (c.w > options.minSelect[0] && c.h > options.minSelect[1]) |
|---|
| 959 | { |
|---|
| 960 | Selection.enableHandles(); |
|---|
| 961 | Selection.done(); |
|---|
| 962 | } |
|---|
| 963 | else |
|---|
| 964 | { |
|---|
| 965 | Selection.release(); |
|---|
| 966 | } |
|---|
| 967 | Tracker.setCursor( options.allowSelect?'crosshair':'default' ); |
|---|
| 968 | }; |
|---|
| 969 | /*}}}*/ |
|---|
| 970 | function newSelection(e)/*{{{*/ |
|---|
| 971 | { |
|---|
| 972 | if (options.disabled) return false; |
|---|
| 973 | if (!options.allowSelect) return false; |
|---|
| 974 | btndown = true; |
|---|
| 975 | docOffset = getPos($img); |
|---|
| 976 | Selection.disableHandles(); |
|---|
| 977 | myCursor('crosshair'); |
|---|
| 978 | var pos = mouseAbs(e); |
|---|
| 979 | Coords.setPressed(pos); |
|---|
| 980 | Tracker.activateHandlers(selectDrag,doneSelect); |
|---|
| 981 | KeyManager.watchKeys(); |
|---|
| 982 | Selection.update(); |
|---|
| 983 | |
|---|
| 984 | e.stopPropagation(); |
|---|
| 985 | e.preventDefault(); |
|---|
| 986 | return false; |
|---|
| 987 | }; |
|---|
| 988 | /*}}}*/ |
|---|
| 989 | function selectDrag(pos)/*{{{*/ |
|---|
| 990 | { |
|---|
| 991 | Coords.setCurrent(pos); |
|---|
| 992 | Selection.update(); |
|---|
| 993 | }; |
|---|
| 994 | /*}}}*/ |
|---|
| 995 | function newTracker() |
|---|
| 996 | { |
|---|
| 997 | var trk = $('<div></div>').addClass(cssClass('tracker')); |
|---|
| 998 | $.browser.msie && trk.css({ opacity: 0, backgroundColor: 'white' }); |
|---|
| 999 | return trk; |
|---|
| 1000 | }; |
|---|
| 1001 | |
|---|
| 1002 | // }}} |
|---|
| 1003 | // API methods {{{ |
|---|
| 1004 | |
|---|
| 1005 | function animateTo(a)/*{{{*/ |
|---|
| 1006 | { |
|---|
| 1007 | var x1 = a[0] / xscale, |
|---|
| 1008 | y1 = a[1] / yscale, |
|---|
| 1009 | x2 = a[2] / xscale, |
|---|
| 1010 | y2 = a[3] / yscale; |
|---|
| 1011 | |
|---|
| 1012 | if (animating) return; |
|---|
| 1013 | |
|---|
| 1014 | var animto = Coords.flipCoords(x1,y1,x2,y2); |
|---|
| 1015 | var c = Coords.getFixed(); |
|---|
| 1016 | var animat = initcr = [ c.x, c.y, c.x2, c.y2 ]; |
|---|
| 1017 | var interv = options.animationDelay; |
|---|
| 1018 | |
|---|
| 1019 | var x = animat[0]; |
|---|
| 1020 | var y = animat[1]; |
|---|
| 1021 | var x2 = animat[2]; |
|---|
| 1022 | var y2 = animat[3]; |
|---|
| 1023 | var ix1 = animto[0] - initcr[0]; |
|---|
| 1024 | var iy1 = animto[1] - initcr[1]; |
|---|
| 1025 | var ix2 = animto[2] - initcr[2]; |
|---|
| 1026 | var iy2 = animto[3] - initcr[3]; |
|---|
| 1027 | var pcent = 0; |
|---|
| 1028 | var velocity = options.swingSpeed; |
|---|
| 1029 | |
|---|
| 1030 | Selection.animMode(true); |
|---|
| 1031 | |
|---|
| 1032 | var animator = function() |
|---|
| 1033 | { |
|---|
| 1034 | return function() |
|---|
| 1035 | { |
|---|
| 1036 | pcent += (100 - pcent) / velocity; |
|---|
| 1037 | |
|---|
| 1038 | animat[0] = x + ((pcent / 100) * ix1); |
|---|
| 1039 | animat[1] = y + ((pcent / 100) * iy1); |
|---|
| 1040 | animat[2] = x2 + ((pcent / 100) * ix2); |
|---|
| 1041 | animat[3] = y2 + ((pcent / 100) * iy2); |
|---|
| 1042 | |
|---|
| 1043 | if (pcent < 100) animateStart(); |
|---|
| 1044 | else Selection.done(); |
|---|
| 1045 | |
|---|
| 1046 | if (pcent >= 99.8) pcent = 100; |
|---|
| 1047 | |
|---|
| 1048 | setSelectRaw(animat); |
|---|
| 1049 | }; |
|---|
| 1050 | }(); |
|---|
| 1051 | |
|---|
| 1052 | function animateStart() |
|---|
| 1053 | { window.setTimeout(animator,interv); }; |
|---|
| 1054 | |
|---|
| 1055 | animateStart(); |
|---|
| 1056 | }; |
|---|
| 1057 | /*}}}*/ |
|---|
| 1058 | function setSelect(rect)//{{{ |
|---|
| 1059 | { |
|---|
| 1060 | setSelectRaw([rect[0]/xscale,rect[1]/yscale,rect[2]/xscale,rect[3]/yscale]); |
|---|
| 1061 | }; |
|---|
| 1062 | //}}} |
|---|
| 1063 | function setSelectRaw(l) /*{{{*/ |
|---|
| 1064 | { |
|---|
| 1065 | Coords.setPressed([l[0],l[1]]); |
|---|
| 1066 | Coords.setCurrent([l[2],l[3]]); |
|---|
| 1067 | Selection.update(); |
|---|
| 1068 | }; |
|---|
| 1069 | /*}}}*/ |
|---|
| 1070 | function setOptions(opt)/*{{{*/ |
|---|
| 1071 | { |
|---|
| 1072 | if (typeof(opt) != 'object') opt = { }; |
|---|
| 1073 | options = $.extend(options,opt); |
|---|
| 1074 | |
|---|
| 1075 | if (typeof(options.onChange)!=='function') |
|---|
| 1076 | options.onChange = function() { }; |
|---|
| 1077 | |
|---|
| 1078 | if (typeof(options.onSelect)!=='function') |
|---|
| 1079 | options.onSelect = function() { }; |
|---|
| 1080 | |
|---|
| 1081 | }; |
|---|
| 1082 | /*}}}*/ |
|---|
| 1083 | function tellSelect()/*{{{*/ |
|---|
| 1084 | { |
|---|
| 1085 | return unscale(Coords.getFixed()); |
|---|
| 1086 | }; |
|---|
| 1087 | /*}}}*/ |
|---|
| 1088 | function tellScaled()/*{{{*/ |
|---|
| 1089 | { |
|---|
| 1090 | return Coords.getFixed(); |
|---|
| 1091 | }; |
|---|
| 1092 | /*}}}*/ |
|---|
| 1093 | function setOptionsNew(opt)/*{{{*/ |
|---|
| 1094 | { |
|---|
| 1095 | setOptions(opt); |
|---|
| 1096 | interfaceUpdate(); |
|---|
| 1097 | }; |
|---|
| 1098 | /*}}}*/ |
|---|
| 1099 | function disableCrop()//{{{ |
|---|
| 1100 | { |
|---|
| 1101 | options.disabled = true; |
|---|
| 1102 | Selection.disableHandles(); |
|---|
| 1103 | Selection.setCursor('default'); |
|---|
| 1104 | Tracker.setCursor('default'); |
|---|
| 1105 | }; |
|---|
| 1106 | //}}} |
|---|
| 1107 | function enableCrop()//{{{ |
|---|
| 1108 | { |
|---|
| 1109 | options.disabled = false; |
|---|
| 1110 | interfaceUpdate(); |
|---|
| 1111 | }; |
|---|
| 1112 | //}}} |
|---|
| 1113 | function cancelCrop()//{{{ |
|---|
| 1114 | { |
|---|
| 1115 | Selection.done(); |
|---|
| 1116 | Tracker.activateHandlers(null,null); |
|---|
| 1117 | }; |
|---|
| 1118 | //}}} |
|---|
| 1119 | function destroy()//{{{ |
|---|
| 1120 | { |
|---|
| 1121 | $div.remove(); |
|---|
| 1122 | $origimg.show(); |
|---|
| 1123 | }; |
|---|
| 1124 | //}}} |
|---|
| 1125 | |
|---|
| 1126 | function interfaceUpdate(alt)//{{{ |
|---|
| 1127 | // This method tweaks the interface based on options object. |
|---|
| 1128 | // Called when options are changed and at end of initialization. |
|---|
| 1129 | { |
|---|
| 1130 | options.allowResize ? |
|---|
| 1131 | alt?Selection.enableOnly():Selection.enableHandles(): |
|---|
| 1132 | Selection.disableHandles(); |
|---|
| 1133 | |
|---|
| 1134 | Tracker.setCursor( options.allowSelect? 'crosshair': 'default' ); |
|---|
| 1135 | Selection.setCursor( options.allowMove? 'move': 'default' ); |
|---|
| 1136 | |
|---|
| 1137 | $div.css('backgroundColor',options.bgColor); |
|---|
| 1138 | |
|---|
| 1139 | if ('setSelect' in options) { |
|---|
| 1140 | setSelect(opt.setSelect); |
|---|
| 1141 | Selection.done(); |
|---|
| 1142 | delete(options.setSelect); |
|---|
| 1143 | } |
|---|
| 1144 | |
|---|
| 1145 | if ('trueSize' in options) { |
|---|
| 1146 | xscale = options.trueSize[0] / boundx; |
|---|
| 1147 | yscale = options.trueSize[1] / boundy; |
|---|
| 1148 | } |
|---|
| 1149 | |
|---|
| 1150 | xlimit = options.maxSize[0] || 0; |
|---|
| 1151 | ylimit = options.maxSize[1] || 0; |
|---|
| 1152 | xmin = options.minSize[0] || 0; |
|---|
| 1153 | ymin = options.minSize[1] || 0; |
|---|
| 1154 | |
|---|
| 1155 | if ('outerImage' in options) |
|---|
| 1156 | { |
|---|
| 1157 | $img.attr('src',options.outerImage); |
|---|
| 1158 | delete(options.outerImage); |
|---|
| 1159 | } |
|---|
| 1160 | |
|---|
| 1161 | Selection.refresh(); |
|---|
| 1162 | }; |
|---|
| 1163 | //}}} |
|---|
| 1164 | |
|---|
| 1165 | // }}} |
|---|
| 1166 | |
|---|
| 1167 | $hdl_holder.hide(); |
|---|
| 1168 | interfaceUpdate(true); |
|---|
| 1169 | |
|---|
| 1170 | var api = { |
|---|
| 1171 | animateTo: animateTo, |
|---|
| 1172 | setSelect: setSelect, |
|---|
| 1173 | setOptions: setOptionsNew, |
|---|
| 1174 | tellSelect: tellSelect, |
|---|
| 1175 | tellScaled: tellScaled, |
|---|
| 1176 | |
|---|
| 1177 | disable: disableCrop, |
|---|
| 1178 | enable: enableCrop, |
|---|
| 1179 | cancel: cancelCrop, |
|---|
| 1180 | |
|---|
| 1181 | focus: KeyManager.watchKeys, |
|---|
| 1182 | |
|---|
| 1183 | getBounds: function() { return [ boundx * xscale, boundy * yscale ]; }, |
|---|
| 1184 | getWidgetSize: function() { return [ boundx, boundy ]; }, |
|---|
| 1185 | |
|---|
| 1186 | release: Selection.release, |
|---|
| 1187 | destroy: destroy |
|---|
| 1188 | |
|---|
| 1189 | }; |
|---|
| 1190 | |
|---|
| 1191 | $origimg.data('Jcrop',api); |
|---|
| 1192 | return api; |
|---|
| 1193 | }; |
|---|
| 1194 | |
|---|
| 1195 | $.fn.Jcrop = function(options)/*{{{*/ |
|---|
| 1196 | { |
|---|
| 1197 | function attachWhenDone(from)/*{{{*/ |
|---|
| 1198 | { |
|---|
| 1199 | var loadsrc = options.useImg || from.src; |
|---|
| 1200 | var img = new Image(); |
|---|
| 1201 | img.onload = function() { $.Jcrop(from,options); }; |
|---|
| 1202 | img.src = loadsrc; |
|---|
| 1203 | }; |
|---|
| 1204 | /*}}}*/ |
|---|
| 1205 | if (typeof(options) !== 'object') options = { }; |
|---|
| 1206 | |
|---|
| 1207 | // Iterate over each object, attach Jcrop |
|---|
| 1208 | this.each(function() |
|---|
| 1209 | { |
|---|
| 1210 | // If we've already attached to this object |
|---|
| 1211 | if ($(this).data('Jcrop')) |
|---|
| 1212 | { |
|---|
| 1213 | // The API can be requested this way (undocumented) |
|---|
| 1214 | if (options == 'api') return $(this).data('Jcrop'); |
|---|
| 1215 | // Otherwise, we just reset the options... |
|---|
| 1216 | else $(this).data('Jcrop').setOptions(options); |
|---|
| 1217 | } |
|---|
| 1218 | // If we haven't been attached, preload and attach |
|---|
| 1219 | else attachWhenDone(this); |
|---|
| 1220 | }); |
|---|
| 1221 | |
|---|
| 1222 | // Return "this" so we're chainable a la jQuery plugin-style! |
|---|
| 1223 | return this; |
|---|
| 1224 | }; |
|---|
| 1225 | /*}}}*/ |
|---|
| 1226 | |
|---|
| 1227 | })(jQuery); |
|---|
| 1228 | ]]></data></item> |
|---|
| 1229 | <item key="id"><![CDATA[jquery.Jcrop.js]]></item> |
|---|
| 1230 | <item key="mandatory" type="int">0</item> |
|---|
| 1231 | <item key="multilang" type="int">0</item> |
|---|
| 1232 | <item key="name"><![CDATA[jquery.Jcrop.js]]></item> |
|---|
| 1233 | <item key="repetitive" type="int">0</item> |
|---|
| 1234 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1235 | </dictionary> |
|---|
| 1236 | </item> |
|---|
| 1237 | <item type="dictionary"><dictionary> |
|---|
| 1238 | <item key="custom"> |
|---|
| 1239 | <data content_type="text/css" filename="jcrop.css" type="file"><![CDATA[/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */ |
|---|
| 1240 | .jcrop-holder { text-align: left; } |
|---|
| 1241 | |
|---|
| 1242 | .jcrop-vline, .jcrop-hline |
|---|
| 1243 | { |
|---|
| 1244 | font-size: 0; |
|---|
| 1245 | position: absolute; |
|---|
| 1246 | background: white url('metaobj_manager/ZMSMediaPlayerLib.Jcrop.gif') top left repeat; |
|---|
| 1247 | } |
|---|
| 1248 | .jcrop-vline { height: 100%; width: 1px !important; } |
|---|
| 1249 | .jcrop-hline { width: 100%; height: 1px !important; } |
|---|
| 1250 | .jcrop-handle { |
|---|
| 1251 | font-size: 1px; |
|---|
| 1252 | width: 7px !important; |
|---|
| 1253 | height: 7px !important; |
|---|
| 1254 | border: 1px #eee solid; |
|---|
| 1255 | background-color: #333; |
|---|
| 1256 | *width: 9px; |
|---|
| 1257 | *height: 9px; |
|---|
| 1258 | } |
|---|
| 1259 | |
|---|
| 1260 | .jcrop-tracker { width: 100%; height: 100%; } |
|---|
| 1261 | |
|---|
| 1262 | .custom .jcrop-vline, |
|---|
| 1263 | .custom .jcrop-hline |
|---|
| 1264 | { |
|---|
| 1265 | background: yellow; |
|---|
| 1266 | } |
|---|
| 1267 | .custom .jcrop-handle |
|---|
| 1268 | { |
|---|
| 1269 | border-color: black; |
|---|
| 1270 | background-color: #C7BB00; |
|---|
| 1271 | -moz-border-radius: 3px; |
|---|
| 1272 | -webkit-border-radius: 3px; |
|---|
| 1273 | } |
|---|
| 1274 | ]]></data></item> |
|---|
| 1275 | <item key="id"><![CDATA[jcrop.css]]></item> |
|---|
| 1276 | <item key="mandatory" type="int">0</item> |
|---|
| 1277 | <item key="multilang" type="int">0</item> |
|---|
| 1278 | <item key="name"><![CDATA[jcrop.css]]></item> |
|---|
| 1279 | <item key="repetitive" type="int">0</item> |
|---|
| 1280 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1281 | </dictionary> |
|---|
| 1282 | </item> |
|---|
| 1283 | <item type="dictionary"><dictionary> |
|---|
| 1284 | <item key="custom"> |
|---|
| 1285 | <data content_type="text/x-c" filename="jquery.svg.min.js" type="file"><![CDATA[/* http://keith-wood.name/svg.html
|
|---|
| 1286 | SVG for jQuery v1.4.3.
|
|---|
| 1287 | Written by Keith Wood (kbwood{at}iinet.com.au) August 2007.
|
|---|
| 1288 | Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
|
|---|
| 1289 | MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
|
|---|
| 1290 | Please attribute the author if you use it. */
|
|---|
| 1291 | (function($){function SVGManager(){this._settings=[];this._extensions=[];this.regional=[];this.regional['']={errorLoadingText:'Error loading',notSupportedText:'This browser does not support SVG'};this.local=this.regional[''];this._uuid=new Date().getTime();this._renesis=detectActiveX('RenesisX.RenesisCtrl')}function detectActiveX(a){try{return!!(window.ActiveXObject&&new ActiveXObject(a))}catch(e){return false}}var p='svgwrapper';$.extend(SVGManager.prototype,{markerClassName:'hasSVG',svgNS:'http://www.w3.org/2000/svg',xlinkNS:'http://www.w3.org/1999/xlink',_wrapperClass:SVGWrapper,_attrNames:{class_:'class',in_:'in',alignmentBaseline:'alignment-baseline',baselineShift:'baseline-shift',clipPath:'clip-path',clipRule:'clip-rule',colorInterpolation:'color-interpolation',colorInterpolationFilters:'color-interpolation-filters',colorRendering:'color-rendering',dominantBaseline:'dominant-baseline',enableBackground:'enable-background',fillOpacity:'fill-opacity',fillRule:'fill-rule',floodColor:'flood-color',floodOpacity:'flood-opacity',fontFamily:'font-family',fontSize:'font-size',fontSizeAdjust:'font-size-adjust',fontStretch:'font-stretch',fontStyle:'font-style',fontVariant:'font-variant',fontWeight:'font-weight',glyphOrientationHorizontal:'glyph-orientation-horizontal',glyphOrientationVertical:'glyph-orientation-vertical',horizAdvX:'horiz-adv-x',horizOriginX:'horiz-origin-x',imageRendering:'image-rendering',letterSpacing:'letter-spacing',lightingColor:'lighting-color',markerEnd:'marker-end',markerMid:'marker-mid',markerStart:'marker-start',stopColor:'stop-color',stopOpacity:'stop-opacity',strikethroughPosition:'strikethrough-position',strikethroughThickness:'strikethrough-thickness',strokeDashArray:'stroke-dasharray',strokeDashOffset:'stroke-dashoffset',strokeLineCap:'stroke-linecap',strokeLineJoin:'stroke-linejoin',strokeMiterLimit:'stroke-miterlimit',strokeOpacity:'stroke-opacity',strokeWidth:'stroke-width',textAnchor:'text-anchor',textDecoration:'text-decoration',textRendering:'text-rendering',underlinePosition:'underline-position',underlineThickness:'underline-thickness',vertAdvY:'vert-adv-y',vertOriginY:'vert-origin-y',wordSpacing:'word-spacing',writingMode:'writing-mode'},_attachSVG:function(a,b){var c=(a.namespaceURI==this.svgNS?a:null);var a=(c?null:a);if($(a||c).hasClass(this.markerClassName)){return}if(typeof b=='string'){b={loadURL:b}}else if(typeof b=='function'){b={onLoad:b}}$(a||c).addClass(this.markerClassName);try{if(!c){c=document.createElementNS(this.svgNS,'svg');c.setAttribute('version','1.1');c.setAttribute('width',a.clientWidth);c.setAttribute('height',a.clientHeight);a.appendChild(c)}this._afterLoad(a,c,b||{})}catch(e){if($.browser.msie){if(!a.id){a.id='svg'+(this._uuid++)}this._settings[a.id]=b;a.innerHTML='<embed type="image/svg+xml" width="100%" '+'height="100%" src="'+(b.initPath||'')+'blank.svg"/>'}else{a.innerHTML='<p class="svg_error">'+this.local.notSupportedText+'</p>'}}},_registerSVG:function(){for(var i=0;i<document.embeds.length;i++){var a=document.embeds[i].parentNode;if(!$(a).hasClass($.svg.markerClassName)||$.data(a,p)){continue}var b=null;try{b=document.embeds[i].getSVGDocument()}catch(e){setTimeout($.svg._registerSVG,250);return}b=(b?b.documentElement:null);if(b){$.svg._afterLoad(a,b)}}},_afterLoad:function(a,b,c){var c=c||this._settings[a.id];this._settings[a?a.id:'']=null;var d=new this._wrapperClass(b,a);$.data(a||b,p,d);try{if(c.loadURL){d.load(c.loadURL,c)}if(c.settings){d.configure(c.settings)}if(c.onLoad&&!c.loadURL){c.onLoad.apply(a||b,[d])}}catch(e){alert(e)}},_getSVG:function(a){a=(typeof a=='string'?$(a)[0]:(a.jquery?a[0]:a));return $.data(a,p)},_destroySVG:function(a){var b=$(a);if(!b.hasClass(this.markerClassName)){return}b.removeClass(this.markerClassName);if(a.namespaceURI!=this.svgNS){b.empty()}$.removeData(a,p)},addExtension:function(a,b){this._extensions.push([a,b])}});function SVGWrapper(a,b){this._svg=a;this._container=b;for(var i=0;i<$.svg._extensions.length;i++){var c=$.svg._extensions[i];this[c[0]]=new c[1](this)}}$.extend(SVGWrapper.prototype,{_width:function(){return(this._container?this._container.clientWidth:this._svg.width)},_height:function(){return(this._container?this._container.clientHeight:this._svg.height)},root:function(){return this._svg},configure:function(a,b){if(b){for(var i=this._svg.attributes.length-1;i>=0;i--){var c=this._svg.attributes.item(i);if(!(c.nodeName=='onload'||c.nodeName=='version'||c.nodeName.substring(0,5)=='xmlns')){this._svg.attributes.removeNamedItem(c.nodeName)}}}for(var d in a){this._svg.setAttribute(d,a[d])}return this},getElementById:function(a){return this._svg.ownerDocument.getElementById(a)},change:function(a,b){if(a){for(var c in b){if(b[c]==null){a.removeAttribute(c)}else{a.setAttribute(c,b[c])}}}return this},_args:function(b,c,d){c.splice(0,0,'parent');c.splice(c.length,0,'settings');var e={};var f=0;if(b[0]!=null&&b[0].jquery){b[0]=b[0][0]}if(b[0]!=null&&!(typeof b[0]=='object'&&b[0].nodeName)){e['parent']=null;f=1}for(var i=0;i<b.length;i++){e[c[i+f]]=b[i]}if(d){$.each(d,function(i,a){if(typeof e[a]=='object'){e.settings=e[a];e[a]=null}})}return e},title:function(a,b,c){var d=this._args(arguments,['text']);var e=this._makeNode(d.parent,'title',d.settings||{});e.appendChild(this._svg.ownerDocument.createTextNode(d.text));return e},describe:function(a,b,c){var d=this._args(arguments,['text']);var e=this._makeNode(d.parent,'desc',d.settings||{});e.appendChild(this._svg.ownerDocument.createTextNode(d.text));return e},defs:function(a,b,c){var d=this._args(arguments,['id'],['id']);return this._makeNode(d.parent,'defs',$.extend((d.id?{id:d.id}:{}),d.settings||{}))},symbol:function(a,b,c,d,e,f,g){var h=this._args(arguments,['id','x1','y1','width','height']);return this._makeNode(h.parent,'symbol',$.extend({id:h.id,viewBox:h.x1+' '+h.y1+' '+h.width+' '+h.height},h.settings||{}))},marker:function(a,b,c,d,e,f,g,h){var i=this._args(arguments,['id','refX','refY','mWidth','mHeight','orient'],['orient']);return this._makeNode(i.parent,'marker',$.extend({id:i.id,refX:i.refX,refY:i.refY,markerWidth:i.mWidth,markerHeight:i.mHeight,orient:i.orient||'auto'},i.settings||{}))},style:function(a,b,c){var d=this._args(arguments,['styles']);var e=this._makeNode(d.parent,'style',$.extend({type:'text/css'},d.settings||{}));e.appendChild(this._svg.ownerDocument.createTextNode(d.styles));if($.browser.opera){$('head').append('<style type="text/css">'+d.styles+'</style>')}return e},script:function(a,b,c,d){var e=this._args(arguments,['script','type'],['type']);var f=this._makeNode(e.parent,'script',$.extend({type:e.type||'text/javascript'},e.settings||{}));f.appendChild(this._svg.ownerDocument.createTextNode(this._escapeXML(e.script)));if(!$.browser.mozilla){$.globalEval(e.script)}return f},linearGradient:function(a,b,c,d,e,f,g,h){var i=this._args(arguments,['id','stops','x1','y1','x2','y2'],['x1']);var j=$.extend({id:i.id},(i.x1!=null?{x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2}:{}));return this._gradient(i.parent,'linearGradient',$.extend(j,i.settings||{}),i.stops)},radialGradient:function(a,b,c,d,e,r,f,g,h){var i=this._args(arguments,['id','stops','cx','cy','r','fx','fy'],['cx']);var j=$.extend({id:i.id},(i.cx!=null?{cx:i.cx,cy:i.cy,r:i.r,fx:i.fx,fy:i.fy}:{}));return this._gradient(i.parent,'radialGradient',$.extend(j,i.settings||{}),i.stops)},_gradient:function(a,b,c,d){var e=this._makeNode(a,b,c);for(var i=0;i<d.length;i++){var f=d[i];this._makeNode(e,'stop',$.extend({offset:f[0],stopColor:f[1]},(f[2]!=null?{stopOpacity:f[2]}:{})))}return e},pattern:function(a,b,x,y,c,d,e,f,g,h,i){var j=this._args(arguments,['id','x','y','width','height','vx','vy','vwidth','vheight'],['vx']);var k=$.extend({id:j.id,x:j.x,y:j.y,width:j.width,height:j.height},(j.vx!=null?{viewBox:j.vx+' '+j.vy+' '+j.vwidth+' '+j.vheight}:{}));return this._makeNode(j.parent,'pattern',$.extend(k,j.settings||{}))},mask:function(a,b,x,y,c,d,e){var f=this._args(arguments,['id','x','y','width','height']);return this._makeNode(f.parent,'mask',$.extend({id:f.id,x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}))},createPath:function(){return new SVGPath()},createText:function(){return new SVGText()},svg:function(a,x,y,b,c,d,e,f,g,h){var i=this._args(arguments,['x','y','width','height','vx','vy','vwidth','vheight'],['vx']);var j=$.extend({x:i.x,y:i.y,width:i.width,height:i.height},(i.vx!=null?{viewBox:i.vx+' '+i.vy+' '+i.vwidth+' '+i.vheight}:{}));return this._makeNode(i.parent,'svg',$.extend(j,i.settings||{}))},group:function(a,b,c){var d=this._args(arguments,['id'],['id']);return this._makeNode(d.parent,'g',$.extend({id:d.id},d.settings||{}))},use:function(a,x,y,b,c,d,e){var f=this._args(arguments,['x','y','width','height','ref']);if(typeof f.x=='string'){f.ref=f.x;f.settings=f.y;f.x=f.y=f.width=f.height=null}var g=this._makeNode(f.parent,'use',$.extend({x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}));g.setAttributeNS($.svg.xlinkNS,'href',f.ref);return g},link:function(a,b,c){var d=this._args(arguments,['ref']);var e=this._makeNode(d.parent,'a',d.settings);e.setAttributeNS($.svg.xlinkNS,'href',d.ref);return e},image:function(a,x,y,b,c,d,e){var f=this._args(arguments,['x','y','width','height','ref']);var g=this._makeNode(f.parent,'image',$.extend({x:f.x,y:f.y,width:f.width,height:f.height},f.settings||{}));g.setAttributeNS($.svg.xlinkNS,'href',f.ref);return g},path:function(a,b,c){var d=this._args(arguments,['path']);return this._makeNode(d.parent,'path',$.extend({d:(d.path.path?d.path.path():d.path)},d.settings||{}))},rect:function(a,x,y,b,c,d,e,f){var g=this._args(arguments,['x','y','width','height','rx','ry'],['rx']);return this._makeNode(g.parent,'rect',$.extend({x:g.x,y:g.y,width:g.width,height:g.height},(g.rx?{rx:g.rx,ry:g.ry}:{}),g.settings||{}))},circle:function(a,b,c,r,d){var e=this._args(arguments,['cx','cy','r']);return this._makeNode(e.parent,'circle',$.extend({cx:e.cx,cy:e.cy,r:e.r},e.settings||{}))},ellipse:function(a,b,c,d,e,f){var g=this._args(arguments,['cx','cy','rx','ry']);return this._makeNode(g.parent,'ellipse',$.extend({cx:g.cx,cy:g.cy,rx:g.rx,ry:g.ry},g.settings||{}))},line:function(a,b,c,d,e,f){var g=this._args(arguments,['x1','y1','x2','y2']);return this._makeNode(g.parent,'line',$.extend({x1:g.x1,y1:g.y1,x2:g.x2,y2:g.y2},g.settings||{}))},polyline:function(a,b,c){var d=this._args(arguments,['points']);return this._poly(d.parent,'polyline',d.points,d.settings)},polygon:function(a,b,c){var d=this._args(arguments,['points']);return this._poly(d.parent,'polygon',d.points,d.settings)},_poly:function(a,b,c,d){var e='';for(var i=0;i<c.length;i++){e+=c[i].join()+' '}return this._makeNode(a,b,$.extend({points:$.trim(e)},d||{}))},text:function(a,x,y,b,c){var d=this._args(arguments,['x','y','value']);if(typeof d.x=='string'&&arguments.length<4){d.value=d.x;d.settings=d.y;d.x=d.y=null}return this._text(d.parent,'text',d.value,$.extend({x:(d.x&&isArray(d.x)?d.x.join(' '):d.x),y:(d.y&&isArray(d.y)?d.y.join(' '):d.y)},d.settings||{}))},textpath:function(a,b,c,d){var e=this._args(arguments,['path','value']);var f=this._text(e.parent,'textPath',e.value,e.settings||{});f.setAttributeNS($.svg.xlinkNS,'href',e.path);return f},_text:function(a,b,c,d){var e=this._makeNode(a,b,d);if(typeof c=='string'){e.appendChild(e.ownerDocument.createTextNode(c))}else{for(var i=0;i<c._parts.length;i++){var f=c._parts[i];if(f[0]=='tspan'){var g=this._makeNode(e,f[0],f[2]);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else if(f[0]=='tref'){var g=this._makeNode(e,f[0],f[2]);g.setAttributeNS($.svg.xlinkNS,'href',f[1]);e.appendChild(g)}else if(f[0]=='textpath'){var h=$.extend({},f[2]);h.href=null;var g=this._makeNode(e,f[0],h);g.setAttributeNS($.svg.xlinkNS,'href',f[2].href);g.appendChild(e.ownerDocument.createTextNode(f[1]));e.appendChild(g)}else{e.appendChild(e.ownerDocument.createTextNode(f[1]))}}}return e},other:function(a,b,c){var d=this._args(arguments,['name']);return this._makeNode(d.parent,d.name,d.settings||{})},_makeNode:function(a,b,c){a=a||this._svg;var d=this._svg.ownerDocument.createElementNS($.svg.svgNS,b);for(var b in c){var e=c[b];if(e!=null&&e!=null&&(typeof e!='string'||e!='')){d.setAttribute($.svg._attrNames[b]||b,e)}}a.appendChild(d);return d},add:function(b,c){var d=this._args((arguments.length==1?[null,b]:arguments),['node']);var f=this;d.parent=d.parent||this._svg;try{if($.svg._renesis){throw'Force traversal';}d.parent.appendChild(d.node.cloneNode(true))}catch(e){d.node=(d.node.jquery?d.node:$(d.node));d.node.each(function(){var a=f._cloneAsSVG(this);if(a){d.parent.appendChild(a)}})}return this},_cloneAsSVG:function(a){var b=null;if(a.nodeType==1){b=this._svg.ownerDocument.createElementNS($.svg.svgNS,this._checkName(a.nodeName));for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(c.nodeName!='xmlns'&&c.nodeValue){if(c.prefix=='xlink'){b.setAttributeNS($.svg.xlinkNS,c.localName,c.nodeValue)}else{b.setAttribute(this._checkName(c.nodeName),c.nodeValue)}}}for(var i=0;i<a.childNodes.length;i++){var d=this._cloneAsSVG(a.childNodes[i]);if(d){b.appendChild(d)}}}else if(a.nodeType==3){if($.trim(a.nodeValue)){b=this._svg.ownerDocument.createTextNode(a.nodeValue)}}else if(a.nodeType==4){if($.trim(a.nodeValue)){try{b=this._svg.ownerDocument.createCDATASection(a.nodeValue)}catch(e){b=this._svg.ownerDocument.createTextNode(a.nodeValue.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'))}}}return b},_checkName:function(a){a=(a.substring(0,1)>='A'&&a.substring(0,1)<='Z'?a.toLowerCase():a);return(a.substring(0,4)=='svg:'?a.substring(4):a)},load:function(h,j){j=(typeof j=='boolean'?{addTo:j}:(typeof j=='function'?{onLoad:j}:j||{}));if(!j.addTo){this.clear(false)}var k=[this._svg.getAttribute('width'),this._svg.getAttribute('height')];var l=this;var m=function(a){a=$.svg.local.errorLoadingText+': '+a;if(j.onLoad){j.onLoad.apply(l._container||l._svg,[l,a])}else{l.text(null,10,20,a)}};var n=function(a){var b=new ActiveXObject('Microsoft.XMLDOM');b.validateOnParse=false;b.resolveExternals=false;b.async=false;b.loadXML(a);if(b.parseError.errorCode!=0){m(b.parseError.reason);return null}return b};var o=function(a){if(!a){return}if(a.documentElement.nodeName!='svg'){var b=a.getElementsByTagName('parsererror');var c=(b.length?b[0].getElementsByTagName('div'):[]);m(!b.length?'???':(c.length?c[0]:b[0]).firstChild.nodeValue);return}var d={};for(var i=0;i<a.documentElement.attributes.length;i++){var f=a.documentElement.attributes.item(i);if(!(f.nodeName=='version'||f.nodeName.substring(0,5)=='xmlns')){d[f.nodeName]=f.nodeValue}}l.configure(d,true);var g=a.documentElement.childNodes;for(var i=0;i<g.length;i++){try{if($.svg._renesis){throw'Force traversal';}l._svg.appendChild(g[i].cloneNode(true));if(g[i].nodeName=='script'){$.globalEval(g[i].textContent)}}catch(e){l.add(null,g[i])}}if(!j.changeSize){l.configure({width:k[0],height:k[1]})}if(j.onLoad){j.onLoad.apply(l._container||l._svg,[l])}};if(h.match('<svg')){o($.browser.msie?n(h):new DOMParser().parseFromString(h,'text/xml'))}else{$.ajax({url:h,dataType:($.browser.msie?'text':'xml'),success:function(a){o($.browser.msie?n(a):a)},error:function(a,b,c){m(b+(c?' '+c.message:''))}})}return this},remove:function(a){a=(a.jquery?a[0]:a);a.parentNode.removeChild(a);return this},clear:function(a){if(a){this.configure({},true)}while(this._svg.firstChild){this._svg.removeChild(this._svg.firstChild)}return this},toSVG:function(a){a=a||this._svg;return(typeof XMLSerializer=='undefined'?this._toSVG(a):new XMLSerializer().serializeToString(a))},_toSVG:function(a){var b='';if(!a){return b}if(a.nodeType==3){b=a.nodeValue}else if(a.nodeType==4){b='<![CDATA['+a.nodeValue+']]>'}else{b='<'+a.nodeName;if(a.attributes){for(var i=0;i<a.attributes.length;i++){var c=a.attributes.item(i);if(!($.trim(c.nodeValue)==''||c.nodeValue.match(/^\[object/)||c.nodeValue.match(/^function/))){b+=' '+(c.namespaceURI==$.svg.xlinkNS?'xlink:':'')+c.nodeName+'="'+c.nodeValue+'"'}}}if(a.firstChild){b+='>';var d=a.firstChild;while(d){b+=this._toSVG(d);d=d.nextSibling}b+='</'+a.nodeName+'>'}else{b+='/>'}}return b},_escapeXML:function(a){a=a.replace(/&/g,'&');a=a.replace(/</g,'<');a=a.replace(/>/g,'>');return a}});function SVGPath(){this._path=''}$.extend(SVGPath.prototype,{reset:function(){this._path='';return this},move:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'m':'M'),x,y)},line:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'l':'L'),x,y)},horiz:function(x,a){this._path+=(a?'h':'H')+(isArray(x)?x.join(' '):x);return this},vert:function(y,a){this._path+=(a?'v':'V')+(isArray(y)?y.join(' '):y);return this},curveC:function(a,b,c,d,x,y,e){e=(isArray(a)?b:e);return this._coords((e?'c':'C'),a,b,c,d,x,y)},smoothC:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'s':'S'),a,b,x,y)},curveQ:function(a,b,x,y,c){c=(isArray(a)?b:c);return this._coords((c?'q':'Q'),a,b,x,y)},smoothQ:function(x,y,a){a=(isArray(x)?y:a);return this._coords((a?'t':'T'),x,y)},_coords:function(a,b,c,d,e,f,g){if(isArray(b)){for(var i=0;i<b.length;i++){var h=b[i];this._path+=(i==0?a:' ')+h[0]+','+h[1]+(h.length<4?'':' '+h[2]+','+h[3]+(h.length<6?'':' '+h[4]+','+h[5]))}}else{this._path+=a+b+','+c+(d==null?'':' '+d+','+e+(f==null?'':' '+f+','+g))}return this},arc:function(a,b,c,d,e,x,y,f){f=(isArray(a)?b:f);this._path+=(f?'a':'A');if(isArray(a)){for(var i=0;i<a.length;i++){var g=a[i];this._path+=(i==0?'':' ')+g[0]+','+g[1]+' '+g[2]+' '+(g[3]?'1':'0')+','+(g[4]?'1':'0')+' '+g[5]+','+g[6]}}else{this._path+=a+','+b+' '+c+' '+(d?'1':'0')+','+(e?'1':'0')+' '+x+','+y}return this},close:function(){this._path+='z';return this},path:function(){return this._path}});SVGPath.prototype.moveTo=SVGPath.prototype.move;SVGPath.prototype.lineTo=SVGPath.prototype.line;SVGPath.prototype.horizTo=SVGPath.prototype.horiz;SVGPath.prototype.vertTo=SVGPath.prototype.vert;SVGPath.prototype.curveCTo=SVGPath.prototype.curveC;SVGPath.prototype.smoothCTo=SVGPath.prototype.smoothC;SVGPath.prototype.curveQTo=SVGPath.prototype.curveQ;SVGPath.prototype.smoothQTo=SVGPath.prototype.smoothQ;SVGPath.prototype.arcTo=SVGPath.prototype.arc;function SVGText(){this._parts=[]}$.extend(SVGText.prototype,{reset:function(){this._parts=[];return this},string:function(a){this._parts[this._parts.length]=['text',a];return this},span:function(a,b){this._parts[this._parts.length]=['tspan',a,b];return this},ref:function(a,b){this._parts[this._parts.length]=['tref',a,b];return this},path:function(a,b,c){this._parts[this._parts.length]=['textpath',b,$.extend({href:a},c||{})];return this}});$.fn.svg=function(a){var b=Array.prototype.slice.call(arguments,1);if(typeof a=='string'&&a=='get'){return $.svg['_'+a+'SVG'].apply($.svg,[this[0]].concat(b))}return this.each(function(){if(typeof a=='string'){$.svg['_'+a+'SVG'].apply($.svg,[this].concat(b))}else{$.svg._attachSVG(this,a||{})}})};function isArray(a){return(a&&a.constructor==Array)}$.svg=new SVGManager()})(jQuery);]]></data></item> |
|---|
| 1292 | <item key="id"><![CDATA[jquery.svg.js]]></item> |
|---|
| 1293 | <item key="mandatory" type="int">0</item> |
|---|
| 1294 | <item key="multilang" type="int">0</item> |
|---|
| 1295 | <item key="name"><![CDATA[jquery.svg.js]]></item> |
|---|
| 1296 | <item key="repetitive" type="int">0</item> |
|---|
| 1297 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1298 | </dictionary> |
|---|
| 1299 | </item> |
|---|
| 1300 | <item type="dictionary"><dictionary> |
|---|
| 1301 | <item key="custom"> |
|---|
| 1302 | <data content_type="application/x-javascript" filename="handleSVG.js" type="file">7661722074656d705f6172726f775f616e676c650909093d206e756c6c3b0d0a7661722074656d705f6172726f775f6c656e6774680909093d206e756c6c3b0d0a7661722074656d705f6172726f775f72656374730909093d206e756c6c3b0d0a7661722074656d705f646567327261645f6d6f646966696572093d204d6174682e5049202f203138303b0d0a7661722074656d705f6472616767696e6709090909093d2066616c73653b0d0a7661722074656d705f6472616767696e675f7061746809093d206e756c6c3b0d0a7661722074656d705f6c6173745f6e6f6465090909093d206e756c6c3b0d0a7661722074656d705f6f66667365745f706f73090909093d206e756c6c3b0d0a7661722074656d705f6f75746c696e6509090909093d206e756c6c3b0d0a7661722074656d705f706f735f656e6409090909093d206e756c6c3b0d0a7661722074656d705f706f735f7374617274090909093d206e756c6c3b0d0a7661722074656d705f7374726f6b655f636f6c6f720909093d206e756c6c3b0d0a7661722074656d705f7374726f6b655f77696474680909093d206e756c6c3b0d0a7661722074656d705f737667090909090909093d206e756c6c3b0d0a766172202474656d705f63616e76617309090909093d206e756c6c3b0d0a0d0a66756e6374696f6e2063616c634172726f775061746828706174685f6f626a2c207374617274782c207374617274792c20656e64782c20656e6479290d0a7b0d0a097661722074656d705f616e676c65093d206e756c6c3b0d0a097661722074656d705f7061746809093d206e756c6c3b0d0a090d0a0969662028737461727478203d3d20656e6478290d0a090974656d705f616e676c65203d2028737461727479203e20656e647929203f2039302e30203a202d39302e303b0d0a09656c73650d0a090974656d705f616e676c65203d204d6174682e6174616e2828737461727479202d20656e647929202f2028737461727478202d20656e64782929202a20313830202f204d6174682e50493b0d0a090d0a0969662028737461727478203c20656e6478290d0a2020202074656d705f70617468203d20706174685f6f626a2e726573657428292e6d6f7665287374617274782c20737461727479292e6c696e6528656e64782c20656e6479292e0d0a0909090909090909096c696e6528656e6478202d204d6174682e666c6f6f72284d6174682e636f73282874656d705f616e676c65202b2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e677468292c200d0a090909090909090909090909656e6479202d204d6174682e666c6f6f72284d6174682e73696e282874656d705f616e676c65202b2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e67746829292e0d0a0909090909090909096d6f766528656e64782c20656e6479292e0d0a0909090909090909096c696e6528656e6478202d204d6174682e666c6f6f72284d6174682e636f73282874656d705f616e676c65202d2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e677468292c200d0a090909090909090909090909656e6479202d204d6174682e666c6f6f72284d6174682e73696e282874656d705f616e676c65202d2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e67746829292e0d0a090909090909090909636c6f736528293b0d0a09656c73650d0a090974656d705f70617468203d20706174685f6f626a2e726573657428292e6d6f7665287374617274782c20737461727479292e6c696e6528656e64782c20656e6479292e0d0a0909090909090909096c696e6528656e6478202b204d6174682e666c6f6f72284d6174682e636f73282874656d705f616e676c65202b2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e677468292c200d0a090909090909090909090909656e6479202b204d6174682e666c6f6f72284d6174682e73696e282874656d705f616e676c65202b2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e67746829292e0d0a0909090909090909096d6f766528656e64782c20656e6479292e0d0a0909090909090909096c696e6528656e6478202b204d6174682e666c6f6f72284d6174682e636f73282874656d705f616e676c65202d2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e677468292c200d0a090909090909090909090909656e6479202b204d6174682e666c6f6f72284d6174682e73696e282874656d705f616e676c65202d2074656d705f6172726f775f616e676c6529202a2074656d705f646567327261645f6d6f64696669657229202a2074656d705f6172726f775f6c656e67746829292e0d0a090909090909090909636c6f736528293b0d0a0d0a0972657475726e2074656d705f706174683b0d0a7d0d0a0d0a66756e6374696f6e2064656c65746553564728290d0a7b0d0a092474656d705f63616e7661732e737667282764657374726f7927293b0d0a090d0a0972657475726e2074656d705f6172726f775f72656374733b0d0a7d0d0a0d0a2f2f206472617720726573756c740d0a66756e6374696f6e2064726167456e64286576656e74290d0a7b200d0a09696620282174656d705f6472616767696e67290d0a090972657475726e3b0d0a090d0a0972656d6f766554656d705061746828293b0d0a090d0a0974656d705f706f735f656e64203d207b583a206576656e742e636c69656e7458202d2074656d705f6f66667365745f706f732e6c6566742c20593a206576656e742e636c69656e7459202d2074656d705f6f66667365745f706f732e746f707d3b0d0a090d0a09766172207061746832203d2074656d705f7376672e6372656174655061746828293b0d0a090d0a0974656d705f7376672e706174682863616c634172726f77506174682870617468322c2074656d705f706f735f73746172742e582c2074656d705f706f735f73746172742e592c2074656d705f706f735f656e642e582c2074656d705f706f735f656e642e59292c0d0a0909090909090909097b66696c6c3a20276e6f6e65272c207374726f6b653a2074656d705f7374726f6b655f636f6c6f722c207374726f6b6557696474683a2074656d705f7374726f6b655f77696474687d293b0d0a090d0a092f2f242874656d705f6f75746c696e65292e72656d6f766528293b0d0a092f2f74656d705f6f75746c696e65203d206e756c6c3b0d0a090d0a0974656d705f6472616767696e67090909093d2066616c73653b0d0a0974656d705f6472616767696e675f70617468093d206e756c6c3b0d0a090d0a0974656d705f6172726f775f72656374732e70757368287b73746172743a2074656d705f706f735f73746172742c20656e643a2074656d705f706f735f656e647d293b0d0a090d0a092474656d705f63616e7661732e666f63757328293b0d0a7d0d0a0d0a2f2f2070726f7669646520666565646261636b207768696c65206472616767696e670d0a66756e6374696f6e206472616767696e67286576656e74290d0a7b0d0a09696620282174656d705f6472616767696e67290d0a090972657475726e3b0d0a202020200d0a092f2a0d0a09696620282174656d705f6f75746c696e65290d0a097b0d0a090974656d705f6f75746c696e65203d2074656d705f7376672e7265637428302c20302c20302c20302c207b66696c6c3a20276e6f6e65272c207374726f6b653a202723633063306330272c207374726f6b6557696474683a20312c207374726f6b654461736841727261793a2027322c32277d293b0d0a0909242874656d705f6f75746c696e65292e6d6f75736575702864726167456e64293b0d0a097d0d0a090d0a0974656d705f7376672e6368616e67652874656d705f6f75746c696e652c207b783a204d6174682e6d696e286576656e742e636c69656e7458202d2074656d705f6f66667365745f706f732e6c6566742c2074656d705f706f735f73746172742e58292c0d0a090909090909090909090909092020202020202020793a204d6174682e6d696e286576656e742e636c69656e7459202d2074656d705f6f66667365745f706f732e746f702c2074656d705f706f735f73746172742e59292c0d0a09090909090909090909090909202020202020202077696474683a204d6174682e616273286576656e742e636c69656e7458202d2074656d705f6f66667365745f706f732e6c656674202d2074656d705f706f735f73746172742e58292c0d0a0909090909090909090909090920202020202020206865696768743a204d6174682e616273286576656e742e636c69656e7459202d2074656d705f6f66667365745f706f732e746f70202d2074656d705f706f735f73746172742e59297d293b0d0a092a2f0d0a090d0a09696620282174656d705f6472616767696e675f70617468290d0a097b0d0a090974656d705f6472616767696e675f70617468203d2074656d705f7376672e6372656174655061746828293b0d0a097d0d0a090d0a0972656d6f766554656d705061746828293b0d0a090d0a0974656d705f6c6173745f6e6f6465203d2074656d705f7376672e706174682863616c634172726f77506174682874656d705f6472616767696e675f706174682c2074656d705f706f735f73746172742e582c2074656d705f706f735f73746172742e592c206576656e742e636c69656e7458202d2074656d705f6f66667365745f706f732e6c6566742c206576656e742e636c69656e7459202d2074656d705f6f66667365745f706f732e746f70292c0d0a09090909090909090909090909090909097b66696c6c3a20276e6f6e65272c207374726f6b653a2074656d705f7374726f6b655f636f6c6f722c207374726f6b6557696474683a2074656d705f7374726f6b655f77696474687d293b0d0a09242874656d705f6c6173745f6e6f6465292e6d6f75736575702864726167456e64293b0d0a7d0d0a0d0a2f2f2072656d656d6265722074656d705f73746172745f706f73706f736974696f6e0d0a66756e6374696f6e20647261675374617274286576656e74290d0a7b0d0a096966202874656d705f6472616767696e67290d0a090972657475726e3b0d0a09090d0a0974656d705f6f66667365745f706f73203d2028242e62726f777365722e6d736965203f207b6c6566743a20302c20746f703a20307d203a202474656d705f63616e7661732e6f66667365742829293b0d0a096966202821242e62726f777365722e6d736965290d0a097b0d0a090974656d705f6f66667365745f706f732e6c656674202d3d20646f63756d656e742e646f63756d656e74456c656d656e742e7363726f6c6c4c656674207c7c20646f63756d656e742e626f64792e7363726f6c6c4c6566743b0d0a090974656d705f6f66667365745f706f732e746f70202d3d20646f63756d656e742e646f63756d656e74456c656d656e742e7363726f6c6c546f70207c7c20646f63756d656e742e626f64792e7363726f6c6c546f703b0d0a097d0d0a090d0a0974656d705f706f735f7374617274093d207b583a206576656e742e636c69656e7458202d2074656d705f6f66667365745f706f732e6c6566742c20593a206576656e742e636c69656e7459202d2074656d705f6f66667365745f706f732e746f707d3b0d0a0974656d705f6472616767696e6709093d20747275653b0d0a7d0d0a0d0a66756e6374696f6e20696e697453564728696d6167655f75726c2c2077696474682c20686569676874290d0a7b0d0a0974656d705f6172726f775f7265637473203d206e657720417272617928293b0d0a090d0a09686569676874093d2028686569676874203d3d20756e646566696e656429203f20333030203a206865696768743b0d0a09776964746809093d20287769647468203d3d20756e646566696e656429203f20343030203a2077696474683b0d0a090d0a092474656d705f63616e7661732e737667287b6f6e4c6f61643a2066756e6374696f6e2873766729200d0a09097b0d0a20202020202074656d705f737667203d207376673b0d0a2020202020200d0a2020202020207661722073757266616365203d207376672e7265637428302c20302c2077696474682c206865696768742c207b69643a202773757266616365272c2066696c6c3a20277768697465277d293b0d0a20202020202076617220696d616765203d2074656d705f7376672e696d61676528302c20302c2077696474682c206865696768742c20696d6167655f75726c293b0d0a0909090d0a0909092f2f242873757266616365292e6d6f757365646f776e28647261675374617274292e6d6f7573656d6f7665286472616767696e67292e6d6f75736575702864726167456e64293b0d0a0909092428696d616765292e6d6f757365646f776e28647261675374617274292e6d6f7573656d6f7665286472616767696e67292e6d6f75736575702864726167456e64293b0d0a202020207d0d0a097d293b0d0a7d0d0a0d0a66756e6374696f6e2072656d6f766554656d705061746828290d0a7b0d0a096966202874656d705f6c6173745f6e6f6465290d0a097b0d0a090974656d705f7376672e72656d6f76652874656d705f6c6173745f6e6f6465293b0d0a090974656d705f6c6173745f6e6f6465203d206e756c6c3b0d0a097d0d0a7d0d0a0d0a2428646f63756d656e74292e72656164792866756e6374696f6e28290d0a7b0d0a0974656d705f6172726f775f616e676c65093d2032303b0d0a0974656d705f6172726f775f6c656e677468093d2033353b0d0a0974656d705f7374726f6b655f636f6c6f72093d202723343939313162273b0d0a0974656d705f7374726f6b655f7769647468203d20353b0d0a090d0a092474656d705f63616e766173203d20242827235a4d53477261706869635f657874456469745f696d61676527293b0d0a7d293b</data></item> |
|---|
| 1303 | <item key="id"><![CDATA[handleSVG.js]]></item> |
|---|
| 1304 | <item key="mandatory" type="int">0</item> |
|---|
| 1305 | <item key="multilang" type="int">0</item> |
|---|
| 1306 | <item key="name"><![CDATA[handleSVG.js]]></item> |
|---|
| 1307 | <item key="repetitive" type="int">0</item> |
|---|
| 1308 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1309 | </dictionary> |
|---|
| 1310 | </item> |
|---|
| 1311 | <item type="dictionary"><dictionary> |
|---|
| 1312 | <item key="custom"> |
|---|
| 1313 | <data content_type="image/png" filename="action_cancel.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff61000002df49444154388da591cf6f93051cc63fdfb73fd76e6b69d7769d334b818d9529c34d37319081c651438c86838a07e3cd3f004ffe133a63e2851310885146341cf460444492893f8610f60bc9469a755db7b6ebf6b67ddbbeefd7033d78f7499ec373789e3cc9475495ff2331c487a3167160261cf9e8d94a7179d3e12701b2801fe804bcc00b7ee3953b9eaed1f3bb3b5fe6016f2088801b68e183d1fa6a7e9ec5bfb89ac978bdd05c6f0f0400033877f1b2eabe38c137a7276a70d7d5d181012d80973f1f9f9c275f82e421c64f4d352ca0d9b6054c4cbfa11c398e3c738099d732bf01276cdb4680fdd637bffce35d5d821bd7b183115c2fbdc8c2f50b5cbb775ffcc0eb63933a9a7987c6837b7869c1509afbd92d8e7cfdc58800b8c3bdd5f9547fc7c8d23285661d7c01623d514a6fbd4d3d9723393747a15281aa49cceb612d1c26b5b18d620900fb922980078f2351ad83de04fd19b43c98d64232a9b7406f835641174181b5ae6014fc7e04a0a37f905a768518cccd76754e9477f7d8005c6d542ea00710c3c5878efd7013467ca10456a382ac4d9ee4d7b99bec012b806730fd7da6563dbd905dc3fe0fefe76209be737b6e4b2e7b6298a73792dd118c0ddb660b2801267072b77cda32f7280135a00194818a5567dae53a6eb67311d802dc75c7a1da2e7f10ef532bbfce8ac22120d6be9f038a951d0e9a55de8f27f4c7cdbc00582846d36e5107f75430a84621c79ec2619e3a30368effd8319e075240d16ed2592c31150d690d022d47319a8d46f4934f3f6b769b26255506dae53fc261b61e3d9c5d5f98bf743712e228d00f145a0d42db3b7c7cf65db3a94e1f77cebcc7ad9e6efd1bf411a8057a251ed3accfbdfc4328c08d7080558febcf2b895e6d813e065dea0eeaefc95e9d11c170505444b68103c369ae0d0ff36aa1f0c48621074145b0616caa985ffc2a9e2095e8a35c3171c410c4c050041bc106991ddacfb9e953d8ca80a38ab671390ab6a3e9b343037c9b3e8803a2223822fc0b66623e7859e6be1b0000000049454e44ae426082</data></item> |
|---|
| 1314 | <item key="id"><![CDATA[action_cancel.png]]></item> |
|---|
| 1315 | <item key="mandatory" type="int">0</item> |
|---|
| 1316 | <item key="multilang" type="int">0</item> |
|---|
| 1317 | <item key="name"><![CDATA[action_cancel.png]]></item> |
|---|
| 1318 | <item key="repetitive" type="int">0</item> |
|---|
| 1319 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1320 | </dictionary> |
|---|
| 1321 | </item> |
|---|
| 1322 | <item type="dictionary"><dictionary> |
|---|
| 1323 | <item key="custom"> |
|---|
| 1324 | <data content_type="image/png" filename="action_ok.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000022b49444154388da5925d48536118c7ffefcedee3ce39fb385b6a114462348cf6114ad6888cc4ba4b24280be903d2ba89c008eaaa8f9b6e92e8428ac8863692848a912d4b7375a1c30f2c299b36743484b4ac3575b60f3b7bbb9044ca6cd51f9e9be7e1f75cfcf911c618fe27aabf05845aa2fee707a29348f2a8a9db74506e995f32c6d21ae106a4e567e4fef6c15676c0b997a976e121630c249d0e846b44328464dfadc38db686ae3a8c25c721270d703f78dc3cff20ab915f064672272a12bd0b617d3d913286f43e5755a3cde5bf89d64f1e70318a592f0d2666a2052a00d0d4924cf3477b6043d8d121d593ed3fe095f725adf69dd1e73a7edbd634de805eda012dd521ec890d47a7239668cb6c449d7d51cc2e164bfcd5a5d5a6a812c5a427e2597157b35312b53d7448d75973e4b2adf9f33d0cd2d710133af89b42232495b2269eb03800708a4cae1795380a3f08ef892c1a5190974ffbbc03e508d1aa739567cd2fe33d08706fa04c11f43b03412e4bb1c6efccc100e64a14ca344ff376afda6a2fb4f3f9ba8da08487811a31a8bcc208de62facb0c9ed57407f94d494bf8a8125bd8911a0062ee780957a66a838c22b6f91b6fe6d721cc4d60821b833205745c7d11cca9c85c3f503c1ac74f99b74a71a776d03daa76596fda62dc66cc108880d424f0fc5257d071c26a79b4b6f31778519132f6a9dbca7b4b1317c2a759eea99ce1935f2b354b09b6e8527748f4ae39bfbaaf8e5d11fe64e86f0fc7e2fb693a8aa7a5f252f90efa3664491dd43f160000000049454e44ae426082</data></item> |
|---|
| 1325 | <item key="id"><![CDATA[action_ok.png]]></item> |
|---|
| 1326 | <item key="mandatory" type="int">0</item> |
|---|
| 1327 | <item key="multilang" type="int">0</item> |
|---|
| 1328 | <item key="name"><![CDATA[action_ok.png]]></item> |
|---|
| 1329 | <item key="repetitive" type="int">0</item> |
|---|
| 1330 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1331 | </dictionary> |
|---|
| 1332 | </item> |
|---|
| 1333 | <item type="dictionary"><dictionary> |
|---|
| 1334 | <item key="custom"> |
|---|
| 1335 | <data content_type="image/png" filename="crop_thumb.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c0000022c4944415438cba553316c1261147e87475b0a346d358db9041988038cc2e4d068188993830446757070c048024c2e2c24b2903010244c3a19217173705131a665686cd11aad5e6bad06b1831e84fbffff7cef07da42bbf54fbeffddddffde77dffbee9d6259169c66a9b4e572391d893c88562a950a4c26a5d3e997a6695e1142b4f2f97ce018012e4f2412817abdee7fb662588203902e8a0263b7db85582c06954ac57fa202ce79b356ab5d72cc2dc1e2ac4d1659b80964a10ee7ce5d8052a9048cb1d79304cac883a7ef0cebaccb260bc411c87b24dbdd1770ebeaac72a2025aa3c437cf8bd0f9b503ea8c1b2e5fbb0bf619d7e08c0b99170e8757d08f2062b5d168846c2302d92f26b6f7748846a3f0fbe70eac6fb761ed5b07d6b6dab0f7671f1e3cd1ad5eaf17cc6432e44b704c01c3628eb03be6a1582cc29929272cb9559876d88123b3c0438ace050d92c924a082e68107894442ca72ce9f87e5ebf7e13dbe555b98c296b010fb22f51c374e2488cdef0614ee5c947ec816484e3c1e871ffa26ec76d8205958323286ea18450bd890c0340f874f12605fcd42a120e3edb04b3129918a381509093e2219c6b1af50ad5683473fcde06d87920f3c185e33c68fcfc168854221bddfef7bdc8b1adcb8f748169212f283a31f8f1fde842f1b6f69f85aa838609b1c0c7ce8c966b3e8c727f8b86dc007fd1fc2808daf7fa1b565c0e7f50694cb659a4aff7080ac31f87cbe55afd72b344d6b4c9e1154557da1280ac97e45f7ca697fe7ff1fa88b9df58d166d0000000049454e44ae426082</data></item> |
|---|
| 1336 | <item key="id"><![CDATA[crop_thumb.png]]></item> |
|---|
| 1337 | <item key="mandatory" type="int">0</item> |
|---|
| 1338 | <item key="multilang" type="int">0</item> |
|---|
| 1339 | <item key="name"><![CDATA[crop_thumb.png]]></item> |
|---|
| 1340 | <item key="repetitive" type="int">0</item> |
|---|
| 1341 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1342 | </dictionary> |
|---|
| 1343 | </item> |
|---|
| 1344 | <item type="dictionary"><dictionary> |
|---|
| 1345 | <item key="custom"> |
|---|
| 1346 | <data content_type="image/png" filename="crop_thumb_disabled.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001d54944415478daa4533b6b0241109e8b117c3f40acb415b4cce507e417586a2188166ae70fd042106c142c2c6c6cb4b1162d530424218ddac981e0b310516c7deb6567c2ca79da39f0ddb2bb33dfce7c3327c8b20ccfd82b7e1289c48c11b919a44aa5e2533b050281afe3f1f8713e9fa566b3e9bb2360e60e854250abd5bcad564b3e9d4e74c8020033dc6c36f808944a25efc30c9863af5aadbe592c16406010e272b9101c0e07148b45f4fb5113085c8346a321dbed760ae0c14aa2e57209e170587898011a3a61caf57a9d9c753a1d04834130180c44c2cbf2783c1de627b27d773a9dbebf2809108bc50262b118ac562b180c06204912f4fb7ddae77239998929a65229381c0ee24d06f83a12e8f57a28140aa0d56ac166b381c964a23b0ea3d108e9749a74bb6ae0f7fb3bc88c024622117ad5e9745ecb52024b994c26282ae941256cb75b311e8fc37c3ea7127836e8cc886f564ec28d08f6fb7d2f9fcfc36eb7eb45a351e15100079e236ebad06eb745656b9401ea1278667773c0cde572cd98831bc54b2693d70cb81ee57299dacc4c629df0bda807831dba33990cacd76b188fc7301a8d681d0e87040cce66b348f63fd67cda38d83476ad56ebc56c36ffaaef101a8de613c318be712f3cfb3bff09300083719dbdbb82fb6f0000000049454e44ae426082</data></item> |
|---|
| 1347 | <item key="id"><![CDATA[crop_thumb_disabled.png]]></item> |
|---|
| 1348 | <item key="mandatory" type="int">0</item> |
|---|
| 1349 | <item key="multilang" type="int">0</item> |
|---|
| 1350 | <item key="name"><![CDATA[crop_thumb_disabled.png]]></item> |
|---|
| 1351 | <item key="repetitive" type="int">0</item> |
|---|
| 1352 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1353 | </dictionary> |
|---|
| 1354 | </item> |
|---|
| 1355 | <item type="dictionary"><dictionary> |
|---|
| 1356 | <item key="custom"> |
|---|
| 1357 | <data content_type="image/png" filename="dimensions.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001b9494441541819a5c1bb6f8d7100c7e1cffbf6489d6a2369d579d5ed0f40a5b1da4874301106529168420c2cfe0e0993582462109741108989c9cad491440f272e71ab4b2fbfcf574739b1f579aa4b2fce85554948420c97f75faff88fb34f66a241c512546a567506b7b0bdbd93184c9a8bcf67439fb34f66a269103aed86ce50078bd449484267b0616b7b072dd6f534f4b388c5dea6f6385b87b73150b550a963e8fd7ecf9b85370c571bd8bd719228fd8a616af33e465a2374bf7779fdf935a5486d4229a579f7b3cb60ab4d950a4be8679104d6b786e87eeba23616a99270e1d999c4a04125866bd3372bfe71eadef1a868b088ca9d9907559584b5a859a39a35aa59a316ab661f9d8c068ba868b875ec6ec53f8edc389c182ca241e5f1f9a7553dfbe8642c36031960d7d81e26c7a7b0483f4b989cd8cbae89dda8689ae9ab07535b44d31b5b3fceb7df5f595e59c222fd5416cb125f7e7d61d3f03855e8a9d416698626181d1ce5c7e202afdebf44a59f45e6e6e7585a5ea1b3b1c3e8f01831b48af267f90ff38bf37c5cf84029366a8f3e1a8a8bcdfca7b73d4b210613aa13b78f46c5221a54ee9f7e58f11f87ae1c480c26c49084bf80a04a8daf86177c0000000049454e44ae426082</data></item> |
|---|
| 1358 | <item key="id"><![CDATA[dimensions.png]]></item> |
|---|
| 1359 | <item key="mandatory" type="int">0</item> |
|---|
| 1360 | <item key="multilang" type="int">0</item> |
|---|
| 1361 | <item key="name"><![CDATA[dimensions.png]]></item> |
|---|
| 1362 | <item key="repetitive" type="int">0</item> |
|---|
| 1363 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1364 | </dictionary> |
|---|
| 1365 | </item> |
|---|
| 1366 | <item type="dictionary"><dictionary> |
|---|
| 1367 | <item key="custom"> |
|---|
| 1368 | <data content_type="image/png" filename="dimensions_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000002104944415478da62983163c67f2060600411200010408c93274ffefffefd7b84084000318044d6ac5903563773e6ccff2caf5fbf668081070f1e30000410c3f4e9d3c1b2205c5b5bfb9fe5fbf7ef605910e7dbb76f1208c360a0abab0bac252d2ded7f7c7cfc7f8000629c366dda7f39393986fbf7ef33e4e4e4308214353535fde7e1e181380cc30834c002221a1a1afefffefd9ba1b5b5156c02d02430ffcf9f3f0c4c555555ff99989818be7cf92201d305741d03c8b59c9c9c0c0001082183130842188ac6b02028e2750f1e6ccc062c443cd9808d891578b2004166360117e6341f029204f3fe1794c6de1b628ce22ca494f8072ad45a8331064a297f181a78ef61ad0538e7fc2aa5b87944ae5a6bbcf0ea02e1451f0ae500e59c19f407ccbd5aab407a586bf9de91730e28c910c285524a18633c207bef9c09d9bf05289d8c51200462289a2c1e40d062402cbc98bd5858790f6f67215a47d1c24e1b353f8b8bbbec62b103824c3233c9cbffc601d980354d13e6eab66d93a228f85a8b52de75df695c90afff348e233d807b9e675ad795c230a4288ae4fada955d1cc71204811deefbdef6bc3ccfb9aaaa7d59162b09417c9f0b3dd675fd8a2357cff12de7bbf5f70536272dc731b338f7145cd77550fe1bc42ccbf624494ca26ddba20d83eda1379da34074b01c5cf98b41d334e4fbbe09711806511d129765691ec3cd272035337f2b374d538cd22c7c3e720001fe61e663879b410000000049454e44ae426082</data></item> |
|---|
| 1369 | <item key="id"><![CDATA[dimensions_disabled.png]]></item> |
|---|
| 1370 | <item key="mandatory" type="int">0</item> |
|---|
| 1371 | <item key="multilang" type="int">0</item> |
|---|
| 1372 | <item key="name"><![CDATA[dimensions_disabled.png]]></item> |
|---|
| 1373 | <item key="repetitive" type="int">0</item> |
|---|
| 1374 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1375 | </dictionary> |
|---|
| 1376 | </item> |
|---|
| 1377 | <item type="dictionary"><dictionary> |
|---|
| 1378 | <item key="custom"> |
|---|
| 1379 | <data content_type="image/png" filename="flip_horizontal.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001254944415438cbddd33d4a03511405e033f9313e34112d02161681d94d202ec0d6ce7a208d6ec0664010449b20822ec24241b115c1c234294c69299949ee39d7c2898d8a9160e359c0f7de3bf7bec8dd314f4a98337f039cdd8dc3e96dde0780bd8b617ff7fc39fc0a203d31210600c963ca939981de4dde3279d7f85eae2490ea26bd416b26c0e8e9fa4a294c01936363ad128c4a7f044eaeb37623449d462dc214208550065697ca9d9da3a7f6b7c0f155168c9ed66b1172034cd31b09af19b15806cc946e1f3c862f01a327cd7a29ae9601a3832a9e60c2682c9811cd4635362af9041c5e8e5a46ef2e2f449814a753d38910d99818e502e420d5dddabfff28b452149552080fc309e88004a85871a33078c9200a9443ee41f214c0260044fff42ffc266f7edfb08cd6d90ddc0000000049454e44ae426082</data></item> |
|---|
| 1380 | <item key="id"><![CDATA[flip_horizontal.png]]></item> |
|---|
| 1381 | <item key="mandatory" type="int">0</item> |
|---|
| 1382 | <item key="multilang" type="int">0</item> |
|---|
| 1383 | <item key="name"><![CDATA[flip_horizontal.png]]></item> |
|---|
| 1384 | <item key="repetitive" type="int">0</item> |
|---|
| 1385 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1386 | </dictionary> |
|---|
| 1387 | </item> |
|---|
| 1388 | <item type="dictionary"><dictionary> |
|---|
| 1389 | <item key="custom"> |
|---|
| 1390 | <data content_type="image/png" filename="flip_horizontal_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001764944415478da62fcffff3f03188018e5e5e5ff0102881126c2b27bf7eeff9b366de2020820b01408373737ff07d170253000104018024c2062c58a157051a6c58b17737efaf489a1ababeb3f562d00018421800e58608ca54b976efcfdfbb7dffdfbf71980f4a6b6b6367fb8a573e6ccf9262a2aeaf7f5eb5706907d2c2c2c7ee9e9e9df88b2022080082a60622000e00a56ae5c5907a281615687558190905023328da260e1c285b7595959c102402f32141414dc862b98376f9ea2949494cacf9f3fc102206ff2f1f1a9a4a6a62a52c717000146d004a2830119ac59b38673d5aa55608f00e3ec766b6b2b27d10600c353f1d7af5f6f819e5601f1fffcf9a302e2d7d6d62a1234009862bc393838eec9cbcb73023581c540b4b4b4342710dc2b2929f1c669c082050bea80c1bb058819be7dfbc60033e0c78f1f0cefdebd03b3797878b6646565d561a4576072dcf8efdf3fbf274f9e3000693086052e28fe1e3f7e0c1707e2c6e4e464e3b973e7fad32e164801000940cf2674e2ee1e0000000049454e44ae426082</data></item> |
|---|
| 1391 | <item key="id"><![CDATA[flip_horizontal_disabled.png]]></item> |
|---|
| 1392 | <item key="mandatory" type="int">0</item> |
|---|
| 1393 | <item key="multilang" type="int">0</item> |
|---|
| 1394 | <item key="name"><![CDATA[flip_horizontal_disabled.png]]></item> |
|---|
| 1395 | <item key="repetitive" type="int">0</item> |
|---|
| 1396 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1397 | </dictionary> |
|---|
| 1398 | </item> |
|---|
| 1399 | <item type="dictionary"><dictionary> |
|---|
| 1400 | <item key="custom"> |
|---|
| 1401 | <data content_type="image/png" filename="flip_vertical.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001344944415438cbb591cf4a025118c5ddce63ccf3cc3e82a045d0a645d02208b2d9248558522061586161d21f12a609276160088220425393889b3496d40358e35c37a7332fa0ce448b0feee2fece39df776200627f99509fb34e5fcdd89e115a60efa6af10d6097b5b951f841220ac1116a5071f7673808df2f77802f95b5f256c9cddfbb0ea12f69384f52891bc1a2150b8930a619db067d6249cd600958644996fb32ab176d91b2e4058100663833b23d839881d380770c2e821720b236b5c39e96a1cc1c172f1034b850e160f5d2c1cb4319f1398cbbe6036f33c3c016185b04ed8dbb53e5174beb07fddc58ef98ef4858b99edd6782bd059a5b3913875b159ea2075fe86d5e336a6d38d7037606c8db145fce815f1bcc054aa1efe888cadd05927ec4d266bd15b20ac4eac578dffab31cafc027494fa973b52b3050000000049454e44ae426082</data></item> |
|---|
| 1402 | <item key="id"><![CDATA[flip_vertical.png]]></item> |
|---|
| 1403 | <item key="mandatory" type="int">0</item> |
|---|
| 1404 | <item key="multilang" type="int">0</item> |
|---|
| 1405 | <item key="name"><![CDATA[flip_vertical.png]]></item> |
|---|
| 1406 | <item key="repetitive" type="int">0</item> |
|---|
| 1407 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1408 | </dictionary> |
|---|
| 1409 | </item> |
|---|
| 1410 | <item type="dictionary"><dictionary> |
|---|
| 1411 | <item key="custom"> |
|---|
| 1412 | <data content_type="image/png" filename="flip_vertical_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001934944415478da62fcffff3f03188018b5b5b5ff0102881126c2ccc6c6767beddab5930002082eb271e3c6ff8f1f3f86a885e1e4e4e4ff0001045701034c2062c58a158afbf7efff0f17b873e7cebd1d3b7620ec03e18c8c8c3a100d10402886c2f0c2850beb66cd9af51fc4668119be72e5cadbbf7efd52f9f1e307c3cf9f3f19fefefd8bb01404c2c3c3556fdfbeadf4e6cd1b866fdfbe31dcbc79132c8ee14c74001040041530a10b2c5dba9473debc79df607c1634c98d6262627ec8a6322149fe07bade0f18287007c24d686b6bf306d17ffefc017b1184b13ab2baba7aa3888888dfd7af5f196a6a6a18311cd9dadaea7fefde3d2e60bc7d27da9b000186352e70e1458b162902836023b2180b030100f4bdf7bf7fff26080a0aaa484b4ba38400463882003021720243a314882b84858539656464c0a103c2c0c4c0f0fbf76fd2a29210c07001304e388149ad14e8ec0a0909094e6e6e6e86efdfbf836d07c5cffdfbf719264f9ecc48b40b4a4a4abc81ce9fc0cfcfaf0252fbe2c50b06606267242b1680d950313131112516280e03000cee4f0564e6a9940000000049454e44ae426082</data></item> |
|---|
| 1413 | <item key="id"><![CDATA[flip_vertical_disabled.png]]></item> |
|---|
| 1414 | <item key="mandatory" type="int">0</item> |
|---|
| 1415 | <item key="multilang" type="int">0</item> |
|---|
| 1416 | <item key="name"><![CDATA[flip_vertical_disabled.png]]></item> |
|---|
| 1417 | <item key="repetitive" type="int">0</item> |
|---|
| 1418 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1419 | </dictionary> |
|---|
| 1420 | </item> |
|---|
| 1421 | <item type="dictionary"><dictionary> |
|---|
| 1422 | <item key="custom"> |
|---|
| 1423 | <data content_type="image/png" filename="information.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c0000029c4944415438cba593cb6bd4571cc53f774cac644c26310a9989368fd1a82868a189522c08c54d21523b5441a22e5c74956d155cf91f080a3e56beb0a5749aae855a9a9486cea21b99c630d5c4348fd11833c924fdcddcefbdf7eb42487cb41b3dcb2f5f3e1c38e71855e57d54f3e6217375342dc11d57174e56adb4380d28a108e1a677e1cee0d94f1ebefa6f5e75f0c595918cb572b123a1c99eb6461ad6ae016021720c159e707f7a7906a3fdb9f39f65df021cbe9ccfd8486e1cda5617dfdd5acfd49ca5b810e18392a85b432ab18ec2b332033f3f5ca68653b90b87b32b80de4bf73b45dcd0a1adf1d4f6967a7263259c13f6b435812a7f8ecd6362865dc9f5fc335fe6a7bb8569347c9abb76f4510c4082ebeb68d0d48e6403c385e7d8c822d540efc7497abb5388136cd5929f2cd1be3141d7d6869446d2071003b0de9fd8d7decc587109114182c707c78fc313648727b062b1ceb214458ccf2e72606f1bc6da132b29d8c8b636d5d7509829e1bc47bca021d077b013058647a6d1100043716e91aed466d447adab0eaa160d8a53b0ae4af09e1094fce379fead38bc7578f13871382ba801bc6705007e6a6eb94273bc16a3313428c17b5e26a478710411825812f10f78b258c69830b50ab0eed6607e92b64d7108019c72647f3b3b3f6ca26e5d2dfd47f6202238113a5a120c0dfd0de8add52656a2db230fca5fa7938da99eae4dfc969fe4fb5f47f9f6de5fa83854038af2d1f62d8c971679942f4c1bb8fd5a91ba4f7f97d172e5c6e75fee8e776eace7c1e359669f97092eb0a1b18e6d5b9a192f2d71ef875f9631b5a77203df64dfaa72f7b1eb19d45e4cef4a260fec4bd3bc7e2da03c5da830f8fb2813f9c28c31b1fedcc099ec7f6e01a0e7ab2b69557f1c0d2709951634608c2902370d72e78f8173ff3fa677d10ba83f827b59b621b90000000049454e44ae426082</data></item> |
|---|
| 1424 | <item key="id"><![CDATA[information.png]]></item> |
|---|
| 1425 | <item key="mandatory" type="int">0</item> |
|---|
| 1426 | <item key="multilang" type="int">0</item> |
|---|
| 1427 | <item key="name"><![CDATA[information.png]]></item> |
|---|
| 1428 | <item key="repetitive" type="int">0</item> |
|---|
| 1429 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1430 | </dictionary> |
|---|
| 1431 | </item> |
|---|
| 1432 | <item type="dictionary"><dictionary> |
|---|
| 1433 | <item key="custom"> |
|---|
| 1434 | <data content_type="image/png" filename="resize.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001ac4944415438cba592318b13511485bf9151d0425c0441d8147649204d7e8190c222ff2258e60784fc8480648b9449bf6582761636cada68e9244d24b3e8c2d6261998f7eed9226f2609460bbdf0e0f1de3d8773cebd9124fea76280c160904aaa484a7abd5efd6f806eb7fb21cff397ceb9643299d4e3f05e69b7dbcc66b3da9b7737320901de03029961026fb0dd6ee9743a8c46a35aa9c07bff753a9d36e3474f797e761f1908900913e880e4f6c939c3e110e7dc2780a8c860f0f6a7cecf1eec00069290c0a492c84c9889e54dc6a0f3222a1510e47a0324cc02b0b8db3149eeed38440079db350acc0c19016025b02074ee048133302f2c34ed9a8bbbed9508cce97702738637953e75e059c152a1c49d22700ebcb7d2ff31c95e9104ce4e59f01eefe3907a002a8cf2204049787f52c1eea3946b60c1fbe13815b22a2a9244abd54af33caf3c7cfc8c579d8ba3c40fa54be2f2e235df93cf78ef932ccbeaf700b22cabf4fb7d6e7f2c595caf595c6f98a76b16ab5fccd335f3d58664b52649372cbf5d311e8f71ced576f39768369b5f1a8d8655abd52b8505fad389e3f87d1445023e4adaaff2bfd61df935bc3c4be0dd6f0000000049454e44ae426082</data></item> |
|---|
| 1435 | <item key="id"><![CDATA[resize.png]]></item> |
|---|
| 1436 | <item key="mandatory" type="int">0</item> |
|---|
| 1437 | <item key="multilang" type="int">0</item> |
|---|
| 1438 | <item key="name"><![CDATA[resize.png]]></item> |
|---|
| 1439 | <item key="repetitive" type="int">0</item> |
|---|
| 1440 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1441 | </dictionary> |
|---|
| 1442 | </item> |
|---|
| 1443 | <item type="dictionary"><dictionary> |
|---|
| 1444 | <item key="custom"> |
|---|
| 1445 | <data content_type="image/png" filename="resize_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001f44944415478da62fcffff3f0308308188499326fd070820469808cbac59b3fe7ffcf891012080c022cb962dfbffebd72f861f3f7e30b080a49f3f7fce00129832650a034000c1f5c0000bc824414141b08ae4e4644696cf9f3f33b0b0b030fcfcf91362dfbc79f318be7cf9c2f0f5eb57065656d66b0001981c77158041188adee2248a6bbecbafcdd049e8208ef91907b58fa4141a08e742c8e5584729e51211681e6360ad056646effd356cad21a5841002628cc69c336aad9b69a9b0f71e734efbfe68a3b544742affeb9cdb9ff3710b200c7fa003c6f4f4747030181818c08d066155555586e0e06046b0092b56acf88f6c37083f78f080a1b5b515e24890d74092300c52000a5870d08108901530ffc3681405a06084e94456080e5a7575f547d3a74f072b026198690b162c8078435a5afaac8888c871f4706004bbff3f03408042a9d80662100692868201e822d17ea6f896a168e85231405af6608cf44f89f42390f72119118a0fd2c920f0199faf7541ad7e28ae84f3388eed9f2ed6da4415def48d33a5b4b53fd2a11056a5d40b92d45adb63440045384a294529053d7d9bd03c8910c2a5b5ee8f39010dcfe79cb3d8f77de92acd528e243370c712df08e03da8385662a2718fc8eebe11f008e6044e1a4979869dc0187339e7044006eb897365ac18a3f0dec3cef0dff268e7a7f50312c8e53d339dcf5d0000000049454e44ae426082</data></item> |
|---|
| 1446 | <item key="id"><![CDATA[resize_disabled.png]]></item> |
|---|
| 1447 | <item key="mandatory" type="int">0</item> |
|---|
| 1448 | <item key="multilang" type="int">0</item> |
|---|
| 1449 | <item key="name"><![CDATA[resize_disabled.png]]></item> |
|---|
| 1450 | <item key="repetitive" type="int">0</item> |
|---|
| 1451 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1452 | </dictionary> |
|---|
| 1453 | </item> |
|---|
| 1454 | <item type="dictionary"><dictionary> |
|---|
| 1455 | <item key="custom"> |
|---|
| 1456 | <data content_type="image/png" filename="rotate_anticlockwise.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000002234944415438cba5934d68134114c7df24dba64bad6dd5c458518c06bc78118fea4d5189a4879e143c59c482b112680d28968282d54b842a6a110fa1e0a122112b5a2852150ca18a5a056bd2f48be650230561bb3b5f3bbe6d4dacf643b00b7f7666f6bddfbcf9ef1ba29482d53cae7f05b4a49adcd1d7a762ff0d105cdce1941f5fee3b59e908cd038d717fc5a66684c0c874ee1ba7ec2db5f87366b1878f9bfa2657049c7d71f2f2c60aff851d354190b604831950f8f11df2853c0c8f7e4d22a463e062ea8db654f2f9c478886d60e5ccc580490633e60c68ee72d03c1a6cdbbc1d4091faf4bb41d81ddd1559e4416b625c97d28edf3e9268cde6b39def473f806551c84c6480e29b0a0aebbd5ea8f3d7d55393362caa00935b504167dc7dec51e468e7813543c39ff660c9fd78fe86fd7bf76d712aa9aead0146f9a13f00d1fbb980b4550c01a535d3b01a3139f6aa2d7d054b86a7bdcfce712640a0a49087c131b1a8485726d9d133a64edffaa29c79cf204ba2020b63fe56c983485736b4aed21d2e23f8ef7f5710b6157c7e906697ba534c5fb691cedccda07132eec19961c912009361a78fe8be2ad22ea4fa78efa5155a12e018e7ab2a0b726e83c56c287a807ecc41aa3d04b6d692e05a9d3cb9d96f266ff4cd068a000dcf3b671c761498988c3b2d000030a1700dc0ed22e0ad24ce8ee1b1823878add7b88a79d7352c378e033d373dfb6b47943ddf9d0e6c680aa1f6fcb82804eb18db8e6127c86aaff34faf1c5f4f628956340000000049454e44ae426082</data></item> |
|---|
| 1457 | <item key="id"><![CDATA[rotate_anticlockwise.png]]></item> |
|---|
| 1458 | <item key="mandatory" type="int">0</item> |
|---|
| 1459 | <item key="multilang" type="int">0</item> |
|---|
| 1460 | <item key="name"><![CDATA[rotate_anticlockwise.png]]></item> |
|---|
| 1461 | <item key="repetitive" type="int">0</item> |
|---|
| 1462 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1463 | </dictionary> |
|---|
| 1464 | </item> |
|---|
| 1465 | <item type="dictionary"><dictionary> |
|---|
| 1466 | <item key="custom"> |
|---|
| 1467 | <data content_type="image/png" filename="rotate_anticlockwise_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000002614944415478da62fcffff3f03188018a1a1a1cc0001c40817292f2fff666363f31f2080e0225bb76efd7fe2c409062610a7b6b6f6bf8c8c0c83a2a2e226800042e881021610d1d7d7d722252555bd6ad52a2bb0f1306c6464f49fa1b1b1f13f8873e0c001300d1040282a4078d2a4497390f9704beaebeb3981babfb7b4b4fcfff3e70f83a4a424c3f1e3c7215e282d2df5eeeded051bb971e3c66f6bd6ace18499c0929b9bbb11a8c3effdfbf760933e7ffeccf9ebd7af6fd3a74f67f8fdfb3703400061f8031d30a10b00adba84cc473161ce9c39ffc5c4c4189e3c79c270e4c8918dcb962d0b802ba8a9a9b9fdf3e7cf1dcacaca39205f800050412158417575b522d061f7babbbb19030202aa3f7dfa24f2eddbb702a006881520bfbf7efd9ac1d5d59501a8bb1ea8a809eec8a2a2a2babf7fff328054838c9695956d0486c5ffd9b3672b821d999595f51fe45f902237373706a0550cdfbf7f07870150c31d8000c3880b743c63c60ce6c9932757e092c71b9013274e9cc0cbcb9b0fb2151834af7ffcf87116887702f15a60903dc60847180046bc373b3bbb3d1f1f5f2928e901438581959515ec7410b877ef1ec3d9b3673702fd9d8b610030bceb807e6bece8e86004f1131313e7036d34062ade0bc4c1b6b6b6b21c1c1c0c8f1e3d0245d60e1403805961a3888888dff3e7cf41c99a71f3e6cd1b81c205bebebef77179139c0780c991f3dfbf7f97809a5540d101c2d0dce6a7a0a0e077e8d02106a0a177803151101515b515c580c2c24245a0e6abc2c2c29cc0a4ca006483a30a044034d0f90c2c2c2c0cc04ca60294db028c639061df81deec00f2bb0926674200008520bdcee578a4df0000000049454e44ae426082</data></item> |
|---|
| 1468 | <item key="id"><![CDATA[rotate_anticlockwise_disabled.png]]></item> |
|---|
| 1469 | <item key="mandatory" type="int">0</item> |
|---|
| 1470 | <item key="multilang" type="int">0</item> |
|---|
| 1471 | <item key="name"><![CDATA[rotate_anticlockwise_disabled.png]]></item> |
|---|
| 1472 | <item key="repetitive" type="int">0</item> |
|---|
| 1473 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1474 | </dictionary> |
|---|
| 1475 | </item> |
|---|
| 1476 | <item type="dictionary"><dictionary> |
|---|
| 1477 | <item key="custom"> |
|---|
| 1478 | <data content_type="image/png" filename="rotate_clockwise.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000002334944415438cba5934f48545114c6bf3733da3cd4a9b034151782548b762da265b430109c85b4b1852ddc8404ba989a450589ae8298d2452e5c58040549498118862209b6186cec9f380a8a83082a44d17bf7de77cf392dc6812ca7202f9ccd3de7fcce772fdf714404fb39a162898e976dc9f66717c3ff0dd09e6ef33d3df82f80537842e7c4e5fa40db56a383a6409bd3d51535478d31c8ae2edd1bef9eeafa2be0caebf6b3810eaed796d5c663d1838896ba70e04091c6fb2f19649796fa667bd337f6028437ce2cd71b6dfa8e579e88d71daa43000b16c696b705471ce4d673d8dcd87cb7fe355e7aee542cfbc71f28dfb41e736be2956547a0ac86561a8bab5918df229d99c3e2427660eeeec76b0052379fe4dcdf0111e5a9a6f2ca7228abf0cdfb8ef1e9f135ad8291409bf34607e90ff717ae0200b334b2480240cf6e059ebef0363383e76f5e606c720cbea747667bd3ddca374fb50a3a0a85cc0c224e2686571a76491091a2f160d26f1898f046450489872bd2ff2a275d43cba3bfd6ece983a169e50e4ea95b96e4932569010022861b060e97855b3a07179b8b1a69685a355bc67c558573fb6475c4b594f78925c60f458886016b39d5d1ffd9058048a171784637589254cc755a2a0e38280903811510e7f3d6327cc3206654c54a1ad7b6fd04809ec8e359e35a9284254956c7426e79a903430213002400715e01114199100a8a883879e94ee651c492cc5b9246cbc0ea36c192c0527e32b160a71f96182bdb0a4cbc732f2eb3a49cfdaef34fd7d967e699b5fc230000000049454e44ae426082</data></item> |
|---|
| 1479 | <item key="id"><![CDATA[rotate_clockwise.png]]></item> |
|---|
| 1480 | <item key="mandatory" type="int">0</item> |
|---|
| 1481 | <item key="multilang" type="int">0</item> |
|---|
| 1482 | <item key="name"><![CDATA[rotate_clockwise.png]]></item> |
|---|
| 1483 | <item key="repetitive" type="int">0</item> |
|---|
| 1484 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1485 | </dictionary> |
|---|
| 1486 | </item> |
|---|
| 1487 | <item type="dictionary"><dictionary> |
|---|
| 1488 | <item key="custom"> |
|---|
| 1489 | <data content_type="image/png" filename="rotate_clockwise_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000002854944415478da62fcffff3f0318a4a5a5fd07710002881126c27cf2e4c9fe9b376fde0208200690c8ecd9b3ffe7e6e622946cdcb8f1ff93274f183e7efcc8001040703d30c0ccc4c4b40128bb5c4f4faf112c121616f6dfc6c6a6bab1b11162c68a152b14c5c4c4ee6dddba95e1dbb76ff5000104b605864b4b4b2f21f34198f9cf9f3f056fdebc397ee4c89106666666f19a9a1a9167cf9e4db2b5b59d0cb202c5158b162daafbf1e347e3a3478f18b8b8b818aaaaaa184176defef9f3a70a1033fcfaf58b016822c39d3b77c03408030410863fd0011332273f3f7f0eba0296cece4e4b0e0e8e632222220c8686860c5e5e5e2fb66ddb56033701e872b0e4b56bd7180e1f3ecc00926c6d6de5849b70f9f265b0043080192d2c2c98418240c7be05525c6015b00059b26409e7bc79f3be81d83367cefc5f5c5cec0d62b380142d5dba74233078fd603e7af7ee1d030f0fcf165038b10025ff83c2e0eeddbbe0707073736300c525889d9c9cbc1120c018d0c31e861b1a1a2a2a2b2b9971c9c3303c20bbbbbb6581d1100cb4cd1d481b0b0a0a8a826cbe77efde44a0fb0b700534331b1b9bec9e3d7b16898a8ace949595f5e0e7e757111717e76664646400b2198009c1a2bfbf9ffbe9d3a76cc004701bdd00c6c2c2c2ed2a2a2a1e7c7c7c0c9f3f7f66d8bd7bf763a00bd6fefefddb19e8cfb3070f1e4c04296c6969f9ffefdfbffabababa261403f0a50560ea5204269809494949fef5f5f5ff8121cd0074c9a6b6b6367f7844a26b0286ba37d0a6090202022a402f31dcb871032c0e0a0fa0ab1880e27e050505b7816af4264d9af49d65cd9a359c7ffffe2d05da54212c2ccc292323034faa40af8035c10c006543a05a06a077555ebe7cf9363535559b60722604001067a1e996e25dee0000000049454e44ae426082</data></item> |
|---|
| 1490 | <item key="id"><![CDATA[rotate_clockwise_disabled.png]]></item> |
|---|
| 1491 | <item key="mandatory" type="int">0</item> |
|---|
| 1492 | <item key="multilang" type="int">0</item> |
|---|
| 1493 | <item key="name"><![CDATA[rotate_clockwise_disabled.png]]></item> |
|---|
| 1494 | <item key="repetitive" type="int">0</item> |
|---|
| 1495 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1496 | </dictionary> |
|---|
| 1497 | </item> |
|---|
| 1498 | <item type="dictionary"><dictionary> |
|---|
| 1499 | <item key="custom"> |
|---|
| 1500 | <data content_type="image/png" filename="drop-shadow.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c0000022b4944415478da62fcffff3f0308308188ae558ffe030410234c8465f2e6a7ff6fbd78dc0e1040609185075efffffefd0f83b3ca1788da780751c6ab4f1eb64f3af0f62f4000c1f5c000cbd2c36ffefff8f997e11b508b8bca270696cf5f7e03397f197efcf8c3f0fbf76f060690969c59c79f82e8e3c78fff070820b019bd5b9effff0ba4fffc6100aafacbf0fbd77f8696183946b80b85b8981904d9991904d818809891418083812177f689a7d7af5fffcf025270e1e647869fbfff0175ff03ebfef3f72fc3b21a0be9b367cffec770263a00084008b92341080241740236357437dd886b791acb6beca10ce0161ba88038d80d456c303543cd87d7fd386008c822e722675649f82641e7327d1b24e9c7e18530f246fe20d337e75c5d342962235d0d3013b4c81e54acb5ed42c023e2640f0ec7705599f5c2769cb2fe231ada4c028baab2f7ab9454e1bd2fb077ee36f79af128f3166004151002e0a800859594201bd8ca7f40f3feff03b99381e12f9000d1ff80fcbf7fff33dc7df69da127458911c3805f7f4029e11f564d601a6420900d0a5f60e8b4815265960dbf94a6a6262338b5fc0426b69fc050fa090ac29f9060fd8114b4600c9407193039d5a20a14827f8109069edc402916972670dc4023f3e76f48fc800c01a76e788e4a5464ccf69162f4d1f9c970f7cd936745c1b28c8f3e3c6b7ff2e9d9b3ca2805c617df5fb4bffaf1f2d9d26a5d90ff1f020df9f30794fad16301967e40cefb070e0bdc1804acacac18298e46005292b72d500388820000000049454e44ae426082</data></item> |
|---|
| 1501 | <item key="id"><![CDATA[drop-shadow.png]]></item> |
|---|
| 1502 | <item key="mandatory" type="int">0</item> |
|---|
| 1503 | <item key="multilang" type="int">0</item> |
|---|
| 1504 | <item key="name"><![CDATA[drop-shadow.png]]></item> |
|---|
| 1505 | <item key="repetitive" type="int">0</item> |
|---|
| 1506 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1507 | </dictionary> |
|---|
| 1508 | </item> |
|---|
| 1509 | <item type="dictionary"><dictionary> |
|---|
| 1510 | <item key="custom"> |
|---|
| 1511 | <data content_type="image/png" filename="drop-shadow_disabled.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001364944415478dac4533b6e83401065a2880a5120992647a1e4045c801c02941358b62c4143e18e821289825344200e815c844398cf86b7cae035c6958b8c34ccec8a37fbde63212184f64abc692fc63b1e49920822921bd33469e3386a60868a1c8661a9fbfd9e1e06006cdbb604610027405c9197cb659b817aea1690d760d0348de03dc771487aa00254ba7ddfcbca3d32cff3635114dd9d89ea4b003370dda3cef11945d1077b26076c01f8445506d60087617840bf78c00c54ddcf8c04182cd02f0caed7eb838cb5073c8025fcc9b93168dbf6ce489501df09044b705df7c6e0743a511cc7e4fbbea6eb7a773e9fc9308ca3699a5d9aa66459d671b7db755996d10cfe9e215f182e03d339ebba16a841101ce6fc79d20fe8cbb294ef92fa33555525f8abac0de48bc4d2109ee711fdfbdff82bc000ee88a508657ee4330000000049454e44ae426082</data></item> |
|---|
| 1512 | <item key="id"><![CDATA[drop-shadow_disabled.png]]></item> |
|---|
| 1513 | <item key="mandatory" type="int">0</item> |
|---|
| 1514 | <item key="multilang" type="int">0</item> |
|---|
| 1515 | <item key="name"><![CDATA[drop-shadow_disabled.png]]></item> |
|---|
| 1516 | <item key="repetitive" type="int">0</item> |
|---|
| 1517 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1518 | </dictionary> |
|---|
| 1519 | </item> |
|---|
| 1520 | <item type="dictionary"><dictionary> |
|---|
| 1521 | <item key="custom"> |
|---|
| 1522 | <data content_type="image/png" filename="reset.png" type="file">89504e470d0a1a0a0000000d494844520000000f0000000f08060000003bd6954a000000097048597300000b1300000b1301009a9c180000000467414d410000b18e7cfb5193000000206348524d00007a25000080830000f9ff000080e9000075300000ea6000003a980000176f925fc5460000017e4944415478da62f8ffff3fc33f1cb865d3f3ffd8c4ff43314000b130e0004d1b9efffff4fd2f033e0010408c6053b069fcf69701843f7efbc7f01988bffdfccb70a05e8d11ac09aa0e20809870d9f8f1fb3f864fdf411aff327c06f1bffc6550cbb982620f40006168ae0b9064fcfae33fc3a7af7fc1f833d0802f4003be02e96fdfff3308c55c841b0010404cd8fc323d51961164e317a0730f37aa319eefd664fcf603a819887ffc40580e10404cb802635b850ae317a400fb0ed4f8f3e77f865fbffec1c50002081cdac5cb9ffefffced0fc3c7afff1856e629c2c283e11cd046181b64e34f248d2000104060cda050fdfcf51fd89930a09673f5ffad29da70cd5fd71830a2bb0e2080c0ce06070c346ae08a8101248c1438d800400081e3d9b3e3ce7fd45005c52bd08f207ffefacff06793118aad300e4000c1138951e9f5ff5fbe4342f43b18a3060eb201300640003121070e2c3abea3852a2e0010405893273824fdcec184ff006d65c5e66c800062c16732ba5fd101408001005a9410e9e22e4a040000000049454e44ae426082</data></item> |
|---|
| 1523 | <item key="id"><![CDATA[reset.png]]></item> |
|---|
| 1524 | <item key="mandatory" type="int">0</item> |
|---|
| 1525 | <item key="multilang" type="int">0</item> |
|---|
| 1526 | <item key="name"><![CDATA[reset.png]]></item> |
|---|
| 1527 | <item key="repetitive" type="int">0</item> |
|---|
| 1528 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1529 | </dictionary> |
|---|
| 1530 | </item> |
|---|
| 1531 | <item type="dictionary"><dictionary> |
|---|
| 1532 | <item key="custom"> |
|---|
| 1533 | <data content_type="image/png" filename="reset_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000000f0000000f08060000003bd6954a0000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000000f64944415478da94923d0a84301085278b7b245b7b4bafe015bc818d95d8585b89ada547b0f03afe2bccee0b8c842509ec832191e49b9f678899c9155555b1ef3c2087cab2e46559c827850c36709e6702bcaeab8ef33ca96d5b65de7bb92a02d8b64daffbbeeb44711cb317ceb24c0192ca00f18df5380e8aa2889d305414854e80e8ba4ef57dafaeeb22092f0c354da3504d8499effbd621d26ee779aee744d475fd98828ab24745137c6001618e08e60cc3f0c0e338aadfee74db3047dc35db34cd71fee7344dd97415a0988356a76952de47922409db40912dc1cb34c705fef53ca1300ce5e0fe567ddbee04beccae59451f0106009e590f814d8292bd0000000049454e44ae426082</data></item> |
|---|
| 1534 | <item key="id"><![CDATA[reset_disabled.png]]></item> |
|---|
| 1535 | <item key="mandatory" type="int">0</item> |
|---|
| 1536 | <item key="multilang" type="int">0</item> |
|---|
| 1537 | <item key="name"><![CDATA[reset_disabled.png]]></item> |
|---|
| 1538 | <item key="repetitive" type="int">0</item> |
|---|
| 1539 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1540 | </dictionary> |
|---|
| 1541 | </item> |
|---|
| 1542 | <item type="dictionary"><dictionary> |
|---|
| 1543 | <item key="custom"> |
|---|
| 1544 | <data content_type="image/png" filename="crop_hires.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c000001bb4944415438cb8d93318b53511085cf0bd1c228618dd8c816762a36bad67103428a54f901c2a691fc84b476a631ff42c8569b2e04c14a0392dd428b45d6425670cbd89817de9b33c7e2be17dfea433230ccdccbccc799b9dc68381c9e4bda95743a180c1e600bebf7fbefd234dd27795a01b0dbe97440f21eb6b4388ef77bbd1ee238be5f257932994c1e5dbd7e3b3a5aac24004e208f0ec00590c0f3e6b50800d6ebf5dbd168f4ccccde47920000478b95766a1540a1491e1aa5102f7e3a0e9e0640d1aa79420fc57943ee12e00e98978fb301e485ca24bbff0561396133c2e187956edea840023e9d2f832a0924203acc0137871960245e1ddc8d2e2930012c8c7067e74a50e1025d7086480a5f7fa4253b604136959d0577071d201d640024a99700045c2c1d740fc52e381d24b2bb3f4ad254ff028a4ff4f270299a6f24d31d6e0a7ba0c3ac04503433c10a92373bc87233fe1f9026845975d36854b64c8713971574bbdd4592247b248fa7d3e9130048cd71f6fd175207680e23604638c3d37e7cf302b75e7f91999da1dd6e6b369ba9d96c4a12b6f146a3a1f178ac5aada6a8d56a1d2749f298e4c97c3edfdbe637d6ebf5cf66f690e4b7df0925a260120fa46f0000000049454e44ae426082</data></item> |
|---|
| 1545 | <item key="id"><![CDATA[crop_hires.png]]></item> |
|---|
| 1546 | <item key="mandatory" type="int">0</item> |
|---|
| 1547 | <item key="multilang" type="int">0</item> |
|---|
| 1548 | <item key="name"><![CDATA[crop_hires.png]]></item> |
|---|
| 1549 | <item key="repetitive" type="int">0</item> |
|---|
| 1550 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1551 | </dictionary> |
|---|
| 1552 | </item> |
|---|
| 1553 | <item type="dictionary"><dictionary> |
|---|
| 1554 | <item key="custom"> |
|---|
| 1555 | <data content_type="image/png" filename="crop_hires_disabled.png" type="file">89504e470d0a1a0a0000000d494844520000001000000010080600000168f4cff70000001974455874536f6674776172650041646f626520496d616765526561647971c9653c0000023d4944415478da62484b4b7bf4ffff7f060610316fdebcff0001c408e60101cbf6eddbffdfbe7d9b012080c052fbf6edfbbf63c78eff20365c497f7fffff2f5fbe30000410434a4aca359020083b3838fc675cbf7efd7f5e5e5e86a74f9f32c4c5c531b27cfbf68de1ebd7af0cdfbf7f076b658a8a8a627cfffe3dc3870f1fc0020001c4989c9c7c968b8bcbc8d5d595e1cf9f3f60fcfbf76f0690426363e3ff605b57af5efd5f505090e1faf5eb60c95fbf7e31fcf8f183a1a1a1819105644c68682823887ef8f0e17f9024131313188381a6a6e67f2525a5ff30a722e3aeaeaeff0001d8a09613864220b84210c4cbc37e3c8b0dd881955888455840b0018f292377216a9c25e6f416d483333b1f8a31de7e6e4f4f6bedebb1355729658d31d8e09c93420862a7f8f4dedf6cb2d6ca8003f2de0bfa0d9b8473240078b3a8b5b69022a524d8ea615ed745c618426434c8cde172ce09307050e979ff121830b4d62c816d00f1e49c6f632aa59694727d05e89b0a5218848160022d78cbc95ff4125a6ff9895e7c8d7e24979c7d800f684f0509f403e2231a77845d4c095d588c6633ceee4c14b922cdf39cfabeff960a4be99c4b90a7699a240ec1ac8c3159219ae3f5b66daaeb3a194f3626043b018161733200342e853008211c8ec17b8c51d5752d2c7e934ca3c671d4190388b5aeeb518049e28f67f9f9896fac5106d0b6adf4470a1f4ae35089814804006bed930aefb4f15a96e5c19ae2529e01788db6a66952defb448c3e17ba701af46943180cc3a0d59fa8aaea4df53702b8ee2e970b61db5e74010000000049454e44ae426082</data></item> |
|---|
| 1556 | <item key="id"><![CDATA[crop_hires_disabled.png]]></item> |
|---|
| 1557 | <item key="mandatory" type="int">0</item> |
|---|
| 1558 | <item key="multilang" type="int">0</item> |
|---|
| 1559 | <item key="name"><![CDATA[crop_hires_disabled.png]]></item> |
|---|
| 1560 | <item key="repetitive" type="int">0</item> |
|---|
| 1561 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1562 | </dictionary> |
|---|
| 1563 | </item> |
|---|
| 1564 | <item type="dictionary"><dictionary> |
|---|
| 1565 | <item key="custom"> |
|---|
| 1566 | <data content_type="image/png" filename="arrow.png" type="file">89504e470d0a1a0a0000000d49484452000000100000001008060000001ff3ff610000000467414d410000afc837058ae90000001974455874536f6674776172650041646f626520496d616765526561647971c9653c0000012c4944415438cb63f8ffff3f03259861981b90bdd8fc6bea7cc3fff1737539c9322079bee1d7c6cd51ffc36768fcf79f2acf49d080fca5b6ff73179bff4d5f68fc3771aefedf9af5a1ff579d9ef8bf64b5ff7fd77ef1bfb6dd823c780d003af9ff8673d3feaf3d3b05ac71c5e909ff27ec29f9bff078d7ff8ca56eff4ddbd9ffea3633f2e33400e864b0e6be5df9ff3b7764ff6fdd96f6bf6173e2ffa6ade9ff671c6afe1fb3c0e6bf6a3dc31f9c0644cfd6fcbff2d484ff4b4ff4fe5f78acebffbca31d4043b2fe4f3fd4f43f6da9c77fc55a8657d2950c06380d089caef8cf73a2f43fe77ed17fd6ddfcffe2e65bfd9f76b0e17fd262b7fff2b50ccf252b19b4488a05ed66c6aff10b9dffcb57333c016a5627391a814efe2a57cdfc5fb4924191ec94285ccec039b8f302008795c7fa0eddacec0000000049454e44ae426082</data></item> |
|---|
| 1567 | <item key="id"><![CDATA[arrow.png]]></item> |
|---|
| 1568 | <item key="mandatory" type="int">0</item> |
|---|
| 1569 | <item key="multilang" type="int">0</item> |
|---|
| 1570 | <item key="name"><![CDATA[arrow.png]]></item> |
|---|
| 1571 | <item key="repetitive" type="int">0</item> |
|---|
| 1572 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1573 | </dictionary> |
|---|
| 1574 | </item> |
|---|
| 1575 | <item type="dictionary"><dictionary> |
|---|
| 1576 | <item key="custom"> |
|---|
| 1577 | <data content_type="image/png" filename="arrow_disabled.png" type="file">89504e470d0a1a0a0000000d4948445200000010000000100804000000b5fa37ea000000097048597300000b1300000b1301009a9c180000031b6943435050686f746f73686f70204943432070726f66696c65000078da6360609ee0e8e2e4ca24c0c050505452e41ee418191119a5c07e9e818d819981818181812131b9b8c03120c087818181212f3f2f9501153032307cbbc6c0c8c0c0c07059d7d1c5c9958134c09a5c5054c2c0c070808181c12825b538998181e10b0303437a794941090303630c03038348527641090303630103038348764890330303630b0303134f496a450903030383737e416551667a468982a1a5a5a582634a7e52aa42706571496a6eb182675e727e51417e5162496a0a030303d40e060606065e97fc1205f7c4cc3c05435355062a8388c82805080b113e083104482e2d2a8307250383008316831f4325c32a86078cd28c518cf3189f32193235305d62d6606e64becb62c3328f9599359bf52a9b13db267615f6991c021c9d9cac9ccd5ccc5c6ddcdcdc1379a47896f21af31ee20be67bc65f2d2024b05ad04df09150a3b0a2f0619174515ed1ad6271e29ce25b25522485258f4a5548eb4a3f9199231b2a27287756be47c1479157f182d214e528152595d7aa5bd51ad5fd346435de6aeed39aa89daa63ad2ba4fb4aef88fe7c831ac328234b6349e3df26f74c0f9bad30efb7a8b04cb4f2b1b6b051b515b163b1fb6affdce1b6e305a763ce7b5db6baae775be9bed46391e742af05de0b7d16fb2ef35be5bf3e606be0dea063c1e7436e853e0bfb12c1142918a5146d1ce3161b159717df92303b7173d2d9e4e7a94c6972e9361951995559b3b2f7e4dccb63ca572ff0292c2e9a5d7cb8e46d9944b94b4561e5bcaab3d57f6bf5eae2eb27351c6bfcdd6cd092de3aafed7a8760a777577bf7e15e863efbfeba09fb26fe9fec38a575ea89e9bc338267ce9af5688ed6dc9279fb16702d0c5bb478f1c7a50ecb262c7fb8d27855ebea9b6b75d735adbfb9d16053c7e6075badb64dddfe61a7efae557b38f6a6ef3b7e40fd60e7a1d747fc8e6e3e2e7ea2f6e493d3de67b69c933ddf7ee1d3a5b8cba7ae5a5c5b7643f466ebadaf77d2efdebceff3e0c023d3c7ab9f2a3e9bf942f065d76be637756f7fbe2ffdf0e953c1e7775ff3bebdfb91fff3c3efe23fdffe55fdff0f002e0c1d8ba03c09310000000467414d410000b18e7cfb5193000000206348524d00007a25000080830000f9ff000080e9000075300000ea6000003a980000176f925fc546000000ac4944415478dabcd1ad0ac25000c5f1d581e033980493ef20db1882c132502c8a208ccd8fcd66320c5404b1a94114c181fa568260bfcd7bffe6295b1239f557ce391a5a76b4bf8391f071f50ce08b882e6dfd0b8c09e440ba724acc84a674721f20e0c6959898354742eab2964f008f0b2b962c8898b1c3a7fa4a801e674e1cd833674b88fd34ca09d0512dd5508ef2d830c47e98a5941635d1c7ba9bc5d49ab6b0300a994b56f45f7ff11e00e6bc130af9fb49370000000049454e44ae426082</data></item> |
|---|
| 1578 | <item key="id"><![CDATA[arrow_disabled.png]]></item> |
|---|
| 1579 | <item key="mandatory" type="int">0</item> |
|---|
| 1580 | <item key="multilang" type="int">0</item> |
|---|
| 1581 | <item key="name"><![CDATA[arrow_disabled.png]]></item> |
|---|
| 1582 | <item key="repetitive" type="int">0</item> |
|---|
| 1583 | <item key="type"><![CDATA[resource]]></item> |
|---|
| 1584 | </dictionary> |
|---|
| 1585 | </item> |
|---|
| 1586 | <item type="dictionary"><dictionary> |
|---|
| 1587 | <item key="custom"><![CDATA[<dtml-comment>--// BO bodyContentZMSCustom_ZMSGraphic_extEdit //--</dtml-comment> |
|---|
| 1588 | |
|---|
| 1589 | |
|---|
| 1590 | <dtml-comment>--// EO bodyContentZMSCustom_ZMSGraphic_extEdit //--</dtml-comment>]]></item> |
|---|
| 1591 | <item key="id"><![CDATA[bodyContentZMSCustom_ZMSGraphic_extEdit]]></item> |
|---|
| 1592 | <item key="mandatory" type="int">0</item> |
|---|
| 1593 | <item key="multilang" type="int">0</item> |
|---|
| 1594 | <item key="name"><![CDATA[Template: ZMSGraphic_extEdit]]></item> |
|---|
| 1595 | <item key="repetitive" type="int">0</item> |
|---|
| 1596 | <item key="type"><![CDATA[DTML Method]]></item> |
|---|
| 1597 | </dictionary> |
|---|
| 1598 | </item> |
|---|
| 1599 | <item type="dictionary"><dictionary> |
|---|
| 1600 | <item key="custom"><![CDATA[<dtml-comment>--// BO ZMSGraphic_extEdit_Form //--</dtml-comment>
|
|---|
| 1601 |
|
|---|
| 1602 | <dtml-var manage_page_header>
|
|---|
| 1603 | <script type="text/javascript">
|
|---|
| 1604 | var img_info = new Object();
|
|---|
| 1605 | var zmsgraphic_extedit_workspace_width = &dtml-workspace_width;
|
|---|
| 1606 | var zmsgraphic_extedit_workspace_width_max = &dtml-workspace_width_max;
|
|---|
| 1607 | var zmsgraphic_extedit_request_url = "<dtml-var "absolute_url()">/ZMSGraphic_extEdit_core";
|
|---|
| 1608 | var zmsgraphic_extedit_has_superres = <dtml-if "(img_info['imgsuperres'] is not None) and (img_info['imgsuperres']['filename'] is not None)">true<dtml-else>false</dtml-if>;
|
|---|
| 1609 |
|
|---|
| 1610 | img_info['queue'] = new Array();
|
|---|
| 1611 | img_info['queue'].push(new Object());
|
|---|
| 1612 | img_info['queue'][0]['action'] = 'create';
|
|---|
| 1613 | img_info['queue'][0]['value'] = null;
|
|---|
| 1614 | img_info['queue'][0]['filename'] = '<dtml-var "img_info['act']['filename']">';
|
|---|
| 1615 | img_info['queue'][0]['url'] = '<dtml-var "ZMSGraphic_extEdit_getTempFolder().absolute_url()">/<dtml-var "img_info['act']['filename']">';
|
|---|
| 1616 | img_info['queue'][0]['width'] = <dtml-var "img_info['act']['width']">;
|
|---|
| 1617 | img_info['queue'][0]['height'] = <dtml-var "img_info['act']['height']">;
|
|---|
| 1618 | img_info['thumb'] = new Object();
|
|---|
| 1619 | img_info['thumb']['filename'] = '<dtml-var "img_info['img']['filename']">';
|
|---|
| 1620 | img_info['thumb']['url'] = '<dtml-var "ZMSGraphic_extEdit_getTempFolder().absolute_url()">/<dtml-var "img_info['img']['filename']">';
|
|---|
| 1621 | img_info['thumb']['width'] = <dtml-var "img_info['img']['width']">;
|
|---|
| 1622 | img_info['thumb']['height'] = <dtml-var "img_info['img']['height']">;
|
|---|
| 1623 | img_info['thumb']['crop_box'] = null;
|
|---|
| 1624 | img_info['workspace'] = new Object();
|
|---|
| 1625 | img_info['workspace']['width'] = &dtml-workspace_width;;
|
|---|
| 1626 | img_info['workspace']['width_max'] = &dtml-workspace_width_max;;
|
|---|
| 1627 | </script>
|
|---|
| 1628 | <script type="text/javascript" src="<dtml-var "getDocumentElement().absolute_url()">/metaobj_manager/ZMSGraphic_extEdit.jquery.Jcrop.js"></script>
|
|---|
| 1629 | <script type="text/javascript" src="<dtml-var "getDocumentElement().absolute_url()">/metaobj_manager/ZMSGraphic_extEdit.jquery.svg.js"></script>
|
|---|
| 1630 | <script type="text/javascript" src="<dtml-var "getDocumentElement().absolute_url()">/metaobj_manager/ZMSGraphic_extEdit.handleEdit.js"></script>
|
|---|
| 1631 | <script type="text/javascript" src="<dtml-var "getDocumentElement().absolute_url()">/metaobj_manager/ZMSGraphic_extEdit.handleSVG.js"></script>
|
|---|
| 1632 |
|
|---|
| 1633 | <link type="text/css" href="<dtml-var "getDocumentElement().absolute_url()">/metaobj_manager/ZMSGraphic_extEdit.jcrop.css" rel="stylesheet" />
|
|---|
| 1634 | </head>
|
|---|
| 1635 | <dtml-var "manage_tabs(_,_,my_manage_options=[{'label':'Abbildung bearbeiten','action':''}])">
|
|---|
| 1636 | <dtml-var f_bo_area>
|
|---|
| 1637 |
|
|---|
| 1638 | <dtml-if "((img_info['act'].has_key('filename')) and (len(img_info['act']['filename']) > 0))">
|
|---|
| 1639 | <dtml-let resUrl="getDocumentElement().absolute_url()+'/metaobj_manager'"
|
|---|
| 1640 | has_superres="(img_info['imgsuperres'] is not None) and (img_info['imgsuperres']['filename'] is not None)">
|
|---|
| 1641 | <div id="ZMSGraphic_extEdit_main" style="text-align:left;">
|
|---|
| 1642 | <div id="ZMSGraphic_extEdit_info">
|
|---|
| 1643 | <div class="form-label"><img src="<dtml-var resUrl>/ZMSGraphic_extEdit.information.png" id="ZMSGraphic_extEdit_info" alt="info" /> <dtml-if "img_info['imgsuperres'] is not None"><strong style="vertical-align:top;"><dtml-var "img_info['imgsuperres']['filename']"></strong></dtml-if></div>
|
|---|
| 1644 | <table cellspacing="0" cellpadding="3" border="0">
|
|---|
| 1645 | <tr>
|
|---|
| 1646 | <th><div class="form-label">Original (aka SuperRes)</div></th>
|
|---|
| 1647 | <td><div class="form-element"><label id="ZMSGraphic_extEdit_info_superres"><dtml-if "img_info['imgsuperres'] is not None"><dtml-var "img_info['imgsuperres']['width']"> x <dtml-var "img_info['imgsuperres']['height']"><dtml-else>None</dtml-if></label></div></td>
|
|---|
| 1648 | <td rowspan="3" align="right">
|
|---|
| 1649 | <div id="ZMSGraphic_extEdit_thumb">
|
|---|
| 1650 | <div id="ZMSGraphic_extEdit_thumb_img" style="border: 1px solid #000; min-height: <dtml-var "img_info['img']['height']">px; width: <dtml-var "img_info['img']['width']">px;">
|
|---|
| 1651 | <dtml-if "thumb_filename is not None">
|
|---|
| 1652 | <img src="<dtml-var "ZMSGraphic_extEdit_getTempFolder().absolute_url()">/<dtml-var "img_info['img']['filename']">" />
|
|---|
| 1653 | </dtml-if>
|
|---|
| 1654 | </div>
|
|---|
| 1655 | </div>
|
|---|
| 1656 | </td>
|
|---|
| 1657 | </tr>
|
|---|
| 1658 | <tr>
|
|---|
| 1659 | <th><div class="form-label">Image (aka HighRes)</div></th>
|
|---|
| 1660 | <td><div class="form-element"><label id="ZMSGraphic_extEdit_info_hires"><dtml-var "img_info['act']['width']"> x <dtml-var "img_info['act']['height']"></label><br /></div></td>
|
|---|
| 1661 | </tr>
|
|---|
| 1662 | <tr>
|
|---|
| 1663 | <th><div class="form-label">Preview (aka Thumbnail)</div></th>
|
|---|
| 1664 | <td><div class="form-element"><label id="ZMSGraphic_extEdit_info_thumb"><dtml-if "img_info['img'] is not None"><dtml-var "img_info['img']['width']"> x <dtml-var "img_info['img']['height']"><dtml-else>None</dtml-if></label><br /></div></td>
|
|---|
| 1665 | </tr>
|
|---|
| 1666 | <tr>
|
|---|
| 1667 | <th></th>
|
|---|
| 1668 | <td colspan="2">
|
|---|
| 1669 | <div id="ZMSGraphic_extEdit_thumb_dim" class="form-element">
|
|---|
| 1670 | <label>Preview (px) </label><input type="text" id="ZMSGraphic_extEdit_thumb_width" max-length="3" size="3" value="<dtml-var "img_info['img']['width']">" /> x <input type="text" id="ZMSGraphic_extEdit_thumb_height" max-length="3" size="3" value="<dtml-var "img_info['img']['height']">" /><br />
|
|---|
| 1671 | <label>Working space (px) </label><input type="text" id="ZMSGraphic_extEdit_workspace" max-length="4" size="3" value="&dtml-workspace_width;" />
|
|---|
| 1672 | </div>
|
|---|
| 1673 | </td>
|
|---|
| 1674 | </tr>
|
|---|
| 1675 | <tr>
|
|---|
| 1676 | <th></th>
|
|---|
| 1677 | <td>
|
|---|
| 1678 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_ok.png" id="ZMSGraphic_extEdit_dimension_ok" alt="accept dimensions" style="cursor:pointer;" /> <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_cancel.png" id="ZMSGraphic_extEdit_dimension_cancel" alt="cancel dimensions" style="cursor:pointer;" />
|
|---|
| 1679 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_ok.png" id="ZMSGraphic_extEdit_crop_ok" alt="accept crop" style="cursor:pointer;" /> <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_cancel.png" id="ZMSGraphic_extEdit_crop_cancel" alt="cancel crop" style="cursor:pointer;" />
|
|---|
| 1680 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_ok.png" id="ZMSGraphic_extEdit_resize_ok" alt="accept resize" style="cursor:pointer;" /> <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_cancel.png" id="ZMSGraphic_extEdit_resize_cancel" alt="cancel resize" style="cursor:pointer;" />
|
|---|
| 1681 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_ok.png" id="ZMSGraphic_extEdit_draw_arrow_ok" alt="accept arrow" style="cursor:pointer;" /> <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.action_cancel.png" id="ZMSGraphic_extEdit_draw_arrow_cancel" alt="cancel arrow" style="cursor:pointer;" />
|
|---|
| 1682 | </td>
|
|---|
| 1683 | <td></td>
|
|---|
| 1684 | </tr>
|
|---|
| 1685 | </table>
|
|---|
| 1686 | </div>
|
|---|
| 1687 | <div id="ZMSGraphic_extEdit_actions">
|
|---|
| 1688 | <table cellspacing="3" cellpadding="3" border="0">
|
|---|
| 1689 | <tr valign="top">
|
|---|
| 1690 | <td>
|
|---|
| 1691 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.dimensions.png" id="ZMSGraphic_extEdit_dimension" alt="change dimensions" title="change dimensions" style="cursor:pointer;" /><br /><br />
|
|---|
| 1692 | <br />
|
|---|
| 1693 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.resize.png" id="ZMSGraphic_extEdit_resize" alt="resize image" title="resize image" style="cursor:pointer;" /><br /><br />
|
|---|
| 1694 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.crop_hires.png" id="ZMSGraphic_extEdit_crop_hires" alt="crop image" title="crop image"<dtml-if "has_superres"> style="cursor:pointer;"</dtml-if> /><br /><br />
|
|---|
| 1695 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.crop_thumb.png" id="ZMSGraphic_extEdit_crop" alt="crop preview" title="crop preview" style="cursor:pointer;" /><br /><br />
|
|---|
| 1696 | <br />
|
|---|
| 1697 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.drop-shadow.png" id="ZMSGraphic_extEdit_drop_shadow" alt="drop shadow" title="drop shadow" style="cursor:pointer;" /><br /><br />
|
|---|
| 1698 | <br />
|
|---|
| 1699 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.rotate_clockwise.png" id="ZMSGraphic_extEdit_rotate_p" alt="rotate clockwise" title="rotate clockwise" style="cursor:pointer;" /><br /><br />
|
|---|
| 1700 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.rotate_anticlockwise.png" id="ZMSGraphic_extEdit_rotate_m" alt="rotate anticlockwise" title="rotate anticlockwise" style="cursor:pointer;" /><br /><br />
|
|---|
| 1701 | <br />
|
|---|
| 1702 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.flip_vertical.png" id="ZMSGraphic_extEdit_flip_v" alt="flip vertical" title="flip vertical" style="cursor:pointer;" /><br />
|
|---|
| 1703 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.flip_horizontal.png" id="ZMSGraphic_extEdit_flip_h" alt="flip horizontal" title="flip horizontal" style="cursor:pointer;" /><br /><br />
|
|---|
| 1704 | <br />
|
|---|
| 1705 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.reset.png" id="ZMSGraphic_extEdit_reset" alt="reset image" title="reset image"<dtml-if "has_superres"> style="cursor:pointer;"</dtml-if> /><br /><br />
|
|---|
| 1706 | <br />
|
|---|
| 1707 | <img src="<dtml-var resUrl>/ZMSGraphic_extEdit.arrow.png" id="ZMSGraphic_extEdit_draw_arrow" alt="draw arrow" title="draw arrow" style="cursor:pointer;" /><br /><br />
|
|---|
| 1708 | </td>
|
|---|
| 1709 | <td>
|
|---|
| 1710 | <div id="ZMSGraphic_extEdit_image" style="border: 1px solid #000; min-height: <dtml-var "workspace_width">px; width: <dtml-var "workspace_width">px;">
|
|---|
| 1711 | <img src="<dtml-var "ZMSGraphic_extEdit_getTempFolder().absolute_url()">/<dtml-var "img_info['act']['filename']">" />
|
|---|
| 1712 | </div>
|
|---|
| 1713 | </td>
|
|---|
| 1714 | </tr>
|
|---|
| 1715 | <tr>
|
|---|
| 1716 | <td></td>
|
|---|
| 1717 | <td>
|
|---|
| 1718 | <div id="ZMSGraphic_extEdit_footer" class="form-element">
|
|---|
| 1719 | <form action="<dtml-var "absolute_url()">/ZMSGraphic_extEdit?lang=<dtml-var "lang">" method="POST" id="ZMSGraphic_extEdit_form">
|
|---|
| 1720 | <input type="hidden" name="action" value="cancel" />
|
|---|
| 1721 | <input type="hidden" name="img_info" value="" />
|
|---|
| 1722 | </form>
|
|---|
| 1723 | <input type="button" id="ZMSGraphic_extEdit_ok" value="OK" title="OK" style="cursor:pointer;" />
|
|---|
| 1724 | <input type="button" id="ZMSGraphic_extEdit_cancel" value="Cancel" title="Cancel" style="cursor:pointer;" />
|
|---|
| 1725 | </div>
|
|---|
| 1726 | </td>
|
|---|
| 1727 | </tr>
|
|---|
| 1728 | </table>
|
|---|
| 1729 | </div>
|
|---|
| 1730 | <dtml-comment>
|
|---|
| 1731 | <div id="ZMSGraphic_extEdit_actions">
|
|---|
| 1732 | <label>Actions:</label>
|
|---|
| 1733 | <select id="ZMSGraphic_extEdit_actionList" size="5" style="width: 150px;">
|
|---|
| 1734 | </select>
|
|---|
| 1735 | </div>
|
|---|
| 1736 | </dtml-comment>
|
|---|
| 1737 | </div>
|
|---|
| 1738 | </dtml-let>
|
|---|
| 1739 | </dtml-if>
|
|---|
| 1740 |
|
|---|
| 1741 | <dtml-var f_eo_area>
|
|---|
| 1742 | <dtml-var manage_page_footer>
|
|---|
| 1743 |
|
|---|
| 1744 | <dtml-comment>--// EO ZMSGraphic_extEdit_Form //--</dtml-comment>]]></item> |
|---|
| 1745 | <item key="id"><![CDATA[ZMSGraphic_extEdit_Form]]></item> |
|---|
| 1746 | <item key="mandatory" type="int">0</item> |
|---|
| 1747 | <item key="multilang" type="int">0</item> |
|---|
| 1748 | <item key="name"><![CDATA[ZMSGraphic_extEdit_Form]]></item> |
|---|
| 1749 | <item key="repetitive" type="int">0</item> |
|---|
| 1750 | <item key="type"><![CDATA[DTML Method]]></item> |
|---|
| 1751 | </dictionary> |
|---|
| 1752 | </item> |
|---|
| 1753 | <item type="dictionary"><dictionary> |
|---|
| 1754 | <item key="custom"><![CDATA[# --// BO ZMSGraphic_extEdit_getTempFolder(createIt=False) //-- |
|---|
| 1755 | |
|---|
| 1756 | temp_folder = context.temp_folder |
|---|
| 1757 | temp_folder_id = 'zmsgraphic_extedit' |
|---|
| 1758 | |
|---|
| 1759 | if (temp_folder_id not in temp_folder.objectIds()): |
|---|
| 1760 | if (createIt): |
|---|
| 1761 | temp_folder.manage_addFolder(temp_folder_id) |
|---|
| 1762 | temp_folder = getattr(temp_folder, temp_folder_id) |
|---|
| 1763 | else: |
|---|
| 1764 | temp_folder = None |
|---|
| 1765 | else: |
|---|
| 1766 | temp_folder = getattr(temp_folder, temp_folder_id) |
|---|
| 1767 | |
|---|
| 1768 | return temp_folder |
|---|
| 1769 | |
|---|
| 1770 | # --// EO ZMSGraphic_extEdit_getTempFolder //-- |
|---|
| 1771 | ]]></item> |
|---|
| 1772 | <item key="id"><![CDATA[ZMSGraphic_extEdit_getTempFolder]]></item> |
|---|
| 1773 | <item key="mandatory" type="int">0</item> |
|---|
| 1774 | <item key="multilang" type="int">0</item> |
|---|
| 1775 | <item key="name"><![CDATA[ZMSGraphic_extEdit_getTempFolder]]></item> |
|---|
| 1776 | <item key="repetitive" type="int">0</item> |
|---|
| 1777 | <item key="type"><![CDATA[Script (Python)]]></item> |
|---|
| 1778 | </dictionary> |
|---|
| 1779 | </item> |
|---|
| 1780 | <item type="dictionary"><dictionary> |
|---|
| 1781 | <item key="custom"><![CDATA[from time import localtime, strftime
|
|---|
| 1782 | from PIL import Image
|
|---|
| 1783 | from cStringIO import StringIO
|
|---|
| 1784 | import os.path
|
|---|
| 1785 |
|
|---|
| 1786 | def ZMSGraphic_extEdit_crop(dest_folder, source_id, coords, dest_id = None, unique_filename = False):
|
|---|
| 1787 | if (dest_folder is not None):
|
|---|
| 1788 | if (not source_id in dest_folder.objectIds()):
|
|---|
| 1789 | raise 'ZMSGraphic_extEdit_crop: can\'t find source-image'
|
|---|
| 1790 |
|
|---|
| 1791 | temp_source = getattr(dest_folder, source_id)
|
|---|
| 1792 | temp_source = StringIO(str(temp_source.data))
|
|---|
| 1793 |
|
|---|
| 1794 | temp_image = Image.open(temp_source)
|
|---|
| 1795 | temp_image = temp_image.convert('RGB')
|
|---|
| 1796 | temp_thumb = temp_image.crop(coords)
|
|---|
| 1797 | temp_image_size = temp_thumb.size
|
|---|
| 1798 |
|
|---|
| 1799 | temp_dest = StringIO()
|
|---|
| 1800 | temp_thumb.save(temp_dest, "JPEG")
|
|---|
| 1801 | temp_dest.seek(0)
|
|---|
| 1802 |
|
|---|
| 1803 | temp_path, temp_ext = os.path.splitext(source_id)
|
|---|
| 1804 | temp_dest_id = (dest_id is None) and temp_path or dest_id
|
|---|
| 1805 | if (unique_filename):
|
|---|
| 1806 | temp_dest_id += '_%s'%strftime('%Y%m%d%H%M%S', localtime())
|
|---|
| 1807 | temp_dest_id += '_crop.jpg'
|
|---|
| 1808 |
|
|---|
| 1809 | if (temp_dest_id in dest_folder.objectIds()):
|
|---|
| 1810 | dest_folder.manage_delObjects(temp_dest_id)
|
|---|
| 1811 |
|
|---|
| 1812 | dest_folder.manage_addImage(temp_dest_id, temp_dest)
|
|---|
| 1813 |
|
|---|
| 1814 | temp_result = temp_dest_id
|
|---|
| 1815 | temp_result = (temp_dest_id, temp_image_size[0], temp_image_size[1])
|
|---|
| 1816 | else:
|
|---|
| 1817 | temp_result = None
|
|---|
| 1818 |
|
|---|
| 1819 | return temp_result]]></item> |
|---|
| 1820 | <item key="id"><![CDATA[ZMSGraphic_extEdit_crop]]></item> |
|---|
| 1821 | <item key="mandatory" type="int">0</item> |
|---|
| 1822 | <item key="multilang" type="int">0</item> |
|---|
| 1823 | <item key="name"><![CDATA[ZMSGraphic_extEdit_crop]]></item> |
|---|
| 1824 | <item key="repetitive" type="int">0</item> |
|---|
| 1825 | <item key="type"><![CDATA[External Method]]></item> |
|---|
| 1826 | </dictionary> |
|---|
| 1827 | </item> |
|---|
| 1828 | <item type="dictionary"><dictionary> |
|---|
| 1829 | <item key="custom"><![CDATA[from time import localtime, strftime |
|---|
| 1830 | from PIL import Image |
|---|
| 1831 | from cStringIO import StringIO |
|---|
| 1832 | import os.path |
|---|
| 1833 | |
|---|
| 1834 | def ZMSGraphic_extEdit_resize(dest_folder, source_id, max_width, max_height = None, dest_id = None, replace_source = False, unique_filename = False): |
|---|
| 1835 | if (dest_folder is not None): |
|---|
| 1836 | if (not source_id in dest_folder.objectIds()): |
|---|
| 1837 | raise 'ZMSGraphic_extEdit_resize: can\'t find source-image' |
|---|
| 1838 | |
|---|
| 1839 | if (max_height is None): |
|---|
| 1840 | max_height = max_width |
|---|
| 1841 | |
|---|
| 1842 | temp_source = getattr(dest_folder, source_id) |
|---|
| 1843 | temp_source = StringIO(str(temp_source.data)) |
|---|
| 1844 | |
|---|
| 1845 | temp_image = Image.open(temp_source) |
|---|
| 1846 | temp_image = temp_image.convert('RGB') |
|---|
| 1847 | temp_resized = temp_image.resize((max_width, max_height), Image.ANTIALIAS) |
|---|
| 1848 | temp_image_size = temp_resized.size |
|---|
| 1849 | |
|---|
| 1850 | temp_dest = StringIO() |
|---|
| 1851 | temp_resized.save(temp_dest, "JPEG") |
|---|
| 1852 | temp_dest.seek(0) |
|---|
| 1853 | |
|---|
| 1854 | temp_path, temp_ext = os.path.splitext(source_id) |
|---|
| 1855 | temp_dest_id = (dest_id is None) and temp_path or dest_id |
|---|
| 1856 | if (not replace_source): |
|---|
| 1857 | temp_dest_id += '_preview' |
|---|
| 1858 | if (unique_filename): |
|---|
| 1859 | temp_dest_id += '_%s'%strftime('%Y%m%d%H%M%S', localtime()) |
|---|
| 1860 | temp_dest_id += '.jpg' |
|---|
| 1861 | |
|---|
| 1862 | if (replace_source): |
|---|
| 1863 | dest_folder.manage_delObjects(source_id) |
|---|
| 1864 | |
|---|
| 1865 | if (temp_dest_id in dest_folder.objectIds()): |
|---|
| 1866 | dest_folder.manage_delObjects(temp_dest_id) |
|---|
| 1867 | |
|---|
| 1868 | dest_folder.manage_addImage(temp_dest_id, temp_dest) |
|---|
| 1869 | |
|---|
| 1870 | temp_result = (temp_dest_id, temp_image_size[0], temp_image_size[1]) |
|---|
| 1871 | else: |
|---|
| 1872 | temp_result = None |
|---|
| 1873 | |
|---|
| 1874 | return temp_result]]></item> |
|---|
| 1875 | <item key="id"><![CDATA[ZMSGraphic_extEdit_resize]]></item> |
|---|
| 1876 | <item key="mandatory" type="int">0</item> |
|---|
| 1877 | <item key="multilang" type="int">0</item> |
|---|
| 1878 | <item key="name"><![CDATA[ZMSGraphic_extEdit_resize]]></item> |
|---|
| 1879 | <item key="repetitive" type="int">0</item> |
|---|
| 1880 | <item key="type"><![CDATA[External Method]]></item> |
|---|
| 1881 | </dictionary> |
|---|
| 1882 | </item> |
|---|
| 1883 | <item type="dictionary"><dictionary> |
|---|
| 1884 | <item key="custom"><![CDATA[from time import localtime, strftime |
|---|
| 1885 | from PIL import Image |
|---|
| 1886 | from cStringIO import StringIO |
|---|
| 1887 | import os.path |
|---|
| 1888 | |
|---|
| 1889 | # @param methods list of FLIP_LEFT_RIGHT (0), FLIP_TOP_BOTTOM (1), ROTATE_90 (2), ROTATE_180 (3) or ROTATE_270 (4) |
|---|
| 1890 | |
|---|
| 1891 | def ZMSGraphic_extEdit_transpose(dest_folder, source_id, methods, replace_source = False, dest_id = None, unique_filename = False): |
|---|
| 1892 | if (dest_folder is not None): |
|---|
| 1893 | if (not source_id in dest_folder.objectIds()): |
|---|
| 1894 | raise 'ZMSGraphic_extEdit_transpose: can\'t find source-image' |
|---|
| 1895 | |
|---|
| 1896 | if (type(methods) != type([])): |
|---|
| 1897 | methods = [methods] |
|---|
| 1898 | |
|---|
| 1899 | temp_source = getattr(dest_folder, source_id) |
|---|
| 1900 | temp_source = StringIO(str(temp_source.data)) |
|---|
| 1901 | |
|---|
| 1902 | temp_image = Image.open(temp_source) |
|---|
| 1903 | temp_image = temp_image.convert('RGB') |
|---|
| 1904 | for one_method in methods: |
|---|
| 1905 | temp_image = temp_image.transpose(one_method) |
|---|
| 1906 | temp_image_size = temp_image.size |
|---|
| 1907 | |
|---|
| 1908 | temp_dest = StringIO() |
|---|
| 1909 | temp_image.save(temp_dest, "JPEG") |
|---|
| 1910 | temp_dest.seek(0) |
|---|
| 1911 | |
|---|
| 1912 | temp_path, temp_ext = os.path.splitext(source_id) |
|---|
| 1913 | temp_dest_id = (dest_id is None) and temp_path or dest_id |
|---|
| 1914 | if (not replace_source): |
|---|
| 1915 | temp_dest_id += '_preview' |
|---|
| 1916 | if (unique_filename): |
|---|
| 1917 | temp_dest_id += '_%s'%strftime('%Y%m%d%H%M%S', localtime()) |
|---|
| 1918 | temp_dest_id += '.jpg' |
|---|
| 1919 | |
|---|
| 1920 | if (replace_source): |
|---|
| 1921 | dest_folder.manage_delObjects(source_id) |
|---|
| 1922 | |
|---|
| 1923 | if (temp_dest_id in dest_folder.objectIds()): |
|---|
| 1924 | dest_folder.manage_delObjects(temp_dest_id) |
|---|
| 1925 | |
|---|
| 1926 | dest_folder.manage_addImage(temp_dest_id, temp_dest) |
|---|
| 1927 | |
|---|
| 1928 | temp_result = (temp_dest_id, temp_image_size[0], temp_image_size[1]) |
|---|
| 1929 | else: |
|---|
| 1930 | temp_result = None |
|---|
| 1931 | |
|---|
| 1932 | return temp_result]]></item> |
|---|
| 1933 | <item key="id"><![CDATA[ZMSGraphic_extEdit_transpose]]></item> |
|---|
| 1934 | <item key="mandatory" type="int">0</item> |
|---|
| 1935 | <item key="multilang" type="int">0</item> |
|---|
| 1936 | <item key="name"><![CDATA[ZMSGraphic_extEdit_transpose]]></item> |
|---|
| 1937 | <item key="repetitive" type="int">0</item> |
|---|
| 1938 | <item key="type"><![CDATA[External Method]]></item> |
|---|
| 1939 | </dictionary> |
|---|
| 1940 | </item> |
|---|
| 1941 | <item type="dictionary"><dictionary> |
|---|
| 1942 | <item key="custom"><![CDATA[from DateTime import DateTime |
|---|
| 1943 | |
|---|
| 1944 | def calcCropValues(src_values, src_dim, dest_dim): |
|---|
| 1945 | temp_factor = float (dest_dim[0]) / float (src_dim[0]) |
|---|
| 1946 | |
|---|
| 1947 | for i in range(0, len(src_values)): |
|---|
| 1948 | src_values[i] = int (float (src_values[i]) * temp_factor) |
|---|
| 1949 | |
|---|
| 1950 | return src_values |
|---|
| 1951 | |
|---|
| 1952 | def calcResizeDim(src_width, src_height, dest_width = None, dest_height = None): |
|---|
| 1953 | if (dest_width is None): |
|---|
| 1954 | dest_width = src_width |
|---|
| 1955 | if (dest_height is None): |
|---|
| 1956 | dest_height = src_height |
|---|
| 1957 | |
|---|
| 1958 | if src_width > dest_width: src_height = max(int (round(float (src_height * dest_width) / float(src_width))), 1); src_width = dest_width |
|---|
| 1959 | if src_height > dest_height: src_width = max(int (round(src_width * dest_height / src_height)), 1); src_height = dest_height |
|---|
| 1960 | |
|---|
| 1961 | return (src_width, src_height) |
|---|
| 1962 | |
|---|
| 1963 | def calcRotateValue(source_value): |
|---|
| 1964 | return (source_value < 0) and 4 - (abs(source_value) % 4) or source_value % 4 |
|---|
| 1965 | |
|---|
| 1966 | def clearGarbage(dest_folder): |
|---|
| 1967 | if ((dest_folder is not None) and (dest_folder.getId() in context.temp_folder.objectIds())): |
|---|
| 1968 | context.temp_folder.manage_delObjects(dest_folder.getId()) |
|---|
| 1969 | |
|---|
| 1970 | def createTempImage(dest_folder, image_filename, image_data): |
|---|
| 1971 | # delete old image |
|---|
| 1972 | if (image_filename in dest_folder.objectIds()): |
|---|
| 1973 | dest_folder.manage_delObjects(image_filename) |
|---|
| 1974 | # create image |
|---|
| 1975 | dest_folder.manage_addImage(image_filename, image_data) |
|---|
| 1976 | |
|---|
| 1977 | def createTempImages(dest_folder, image_dict, conf_dimensions, use_hires = False): |
|---|
| 1978 | temp_image_dict = ((image_dict['imgsuperres'] is not None) and (not use_hires)) and image_dict['imgsuperres'] or image_dict['imghires'] |
|---|
| 1979 | |
|---|
| 1980 | if (temp_image_dict is not None): |
|---|
| 1981 | # create new filename |
|---|
| 1982 | image_dict['act']['filename'] = createUniqueFilename(temp_image_dict['filename']) |
|---|
| 1983 | # create image |
|---|
| 1984 | createTempImage(dest_folder, image_dict['act']['filename'], temp_image_dict['data']) |
|---|
| 1985 | |
|---|
| 1986 | # resize image if its greater than workspace width |
|---|
| 1987 | if (max(temp_image_dict['height'], temp_image_dict['width']) > conf_dimensions['workspace']): |
|---|
| 1988 | temp_size = calcResizeDim(temp_image_dict['width'], temp_image_dict['height'], conf_dimensions['workspace'], conf_dimensions['workspace']) |
|---|
| 1989 | temp_info = context.ZMSGraphic_extEdit_resize(dest_folder, image_dict['act']['filename'], temp_size[0], temp_size[1], replace_source = True) |
|---|
| 1990 | |
|---|
| 1991 | image_dict['act']['width'] = temp_info[1] |
|---|
| 1992 | image_dict['act']['height'] = temp_info[2] |
|---|
| 1993 | else: |
|---|
| 1994 | image_dict['act']['height'] = temp_image_dict['height'] |
|---|
| 1995 | image_dict['act']['width'] = temp_image_dict['width'] |
|---|
| 1996 | |
|---|
| 1997 | if ((image_dict['img'] is not None) and (image_dict['img'].has_key('filename')) and (image_dict['img']['filename'] is not None)): |
|---|
| 1998 | # delete old thumb |
|---|
| 1999 | if (image_dict['img']['filename'] in dest_folder.objectIds()): |
|---|
| 2000 | dest_folder.manage_delObjects(image_dict['img']['filename']) |
|---|
| 2001 | # create thumb |
|---|
| 2002 | dest_folder.manage_addImage(image_dict['img']['filename'], image_dict['img']['data']) |
|---|
| 2003 | |
|---|
| 2004 | return image_dict |
|---|
| 2005 | |
|---|
| 2006 | def createUniqueFilename(src_filename): |
|---|
| 2007 | temp_parts = src_filename.rsplit('.') |
|---|
| 2008 | |
|---|
| 2009 | return '%s_%s%s'%(temp_parts[0], DateTime().strftime('%Y%m%d%H%M%S'), (len(temp_parts) > 1) and '.%s'%temp_parts[1] or '') |
|---|
| 2010 | |
|---|
| 2011 | def cropImage(dest_folder, source_id, crop_box, max_dim, unique_filename = False): |
|---|
| 2012 | temp_info = None |
|---|
| 2013 | |
|---|
| 2014 | if ((dest_folder is not None) and (source_id in dest_folder.objectIds())): |
|---|
| 2015 | temp_info = context.ZMSGraphic_extEdit_crop(dest_folder, source_id, |
|---|
| 2016 | (int (crop_box[0]), int (crop_box[1]), int (crop_box[2]), int (crop_box[3])), |
|---|
| 2017 | unique_filename = unique_filename) |
|---|
| 2018 | |
|---|
| 2019 | max_dim[0] = int (max_dim[0]) |
|---|
| 2020 | max_dim[1] = int (max_dim[1]) |
|---|
| 2021 | |
|---|
| 2022 | # resize cropped image to max dimensions if dimensions are unequal to thumb-dimension-settings |
|---|
| 2023 | if ((temp_info[1] <> max_dim[0]) or (temp_info[2] <> max_dim[1])): |
|---|
| 2024 | temp_info = context.ZMSGraphic_extEdit_resize(dest_folder, temp_info[0], max_dim[0], max_dim[1], replace_source = True) |
|---|
| 2025 | |
|---|
| 2026 | return temp_info |
|---|
| 2027 | |
|---|
| 2028 | def getConfDimensions(is_gallery): |
|---|
| 2029 | temp_result = {} |
|---|
| 2030 | |
|---|
| 2031 | if (is_gallery): |
|---|
| 2032 | temp_result['thumb_height'] = int (context.aq_parent.getObjProperty('galleryThumbsMaxHeight', REQUEST)) |
|---|
| 2033 | temp_result['thumb_width'] = int (context.aq_parent.getObjProperty('galleryThumbsMaxWidth', REQUEST)) |
|---|
| 2034 | temp_result['workspace'] = int (context.aq_parent.getObjProperty('galleryWidth', REQUEST)) |
|---|
| 2035 | else: |
|---|
| 2036 | if (context.getConfProperty('InstalledProducts.pil')): |
|---|
| 2037 | temp_result['thumb_height'] = int (context.getConfProperty('InstalledProducts.pil.thumbnail.max', 75)) |
|---|
| 2038 | temp_result['thumb_width'] = int (context.getConfProperty('InstalledProducts.pil.thumbnail.max', 75)) |
|---|
| 2039 | temp_result['workspace'] = int (context.getConfProperty('InstalledProducts.pil.hires.thumbnail.max', 400)) |
|---|
| 2040 | |
|---|
| 2041 | if (temp_result['workspace'] < 1): |
|---|
| 2042 | temp_result['workspace'] = int (context.getConfProperty('ZMSGraphic.zmi_max_width', 400)) |
|---|
| 2043 | else: |
|---|
| 2044 | temp_result['thumb_height'] = 75 |
|---|
| 2045 | temp_result['thumb_width'] = 75 |
|---|
| 2046 | temp_result['workspace'] = int (context.getConfProperty('ZMSGraphic.zmi_max_width', 400)) |
|---|
| 2047 | |
|---|
| 2048 | if (temp_result['workspace'] < 1): |
|---|
| 2049 | temp_result['workspace'] = 400 |
|---|
| 2050 | |
|---|
| 2051 | return temp_result |
|---|
| 2052 | |
|---|
| 2053 | def getFileData(dest_folder, filename): |
|---|
| 2054 | if ((dest_folder is not None) and (filename in dest_folder.objectIds())): |
|---|
| 2055 | temp_data = getattr(dest_folder, filename) |
|---|
| 2056 | temp_data = {'filename' : temp_data.getId(), |
|---|
| 2057 | 'data' : str(temp_data.data), |
|---|
| 2058 | 'content_type' : temp_data.getContentType(), |
|---|
| 2059 | 'size' : temp_data.get_size()} |
|---|
| 2060 | else: |
|---|
| 2061 | temp_data = None |
|---|
| 2062 | |
|---|
| 2063 | return temp_data |
|---|
| 2064 | |
|---|
| 2065 | def getSourceImageData(attr_name, create_it = False, dest_folder = None): |
|---|
| 2066 | temp_image = context.getObjProperty(attr_name, REQUEST) |
|---|
| 2067 | |
|---|
| 2068 | if (temp_image is None): |
|---|
| 2069 | temp_result = None |
|---|
| 2070 | else: |
|---|
| 2071 | temp_result = {} |
|---|
| 2072 | temp_result['data'] = temp_image.getData() |
|---|
| 2073 | temp_result['filename'] = temp_image.getFilename() |
|---|
| 2074 | temp_result['height'] = temp_image.getHeight() |
|---|
| 2075 | temp_result['width'] = temp_image.getWidth() |
|---|
| 2076 | |
|---|
| 2077 | # create image |
|---|
| 2078 | if (create_it and (dest_folder is not None)): |
|---|
| 2079 | createTempImage(dest_folder, temp_image.getFilename(), temp_image.getData()) |
|---|
| 2080 | |
|---|
| 2081 | return temp_result |
|---|
| 2082 | |
|---|
| 2083 | def handleEditQueue(dest_folder, img_info, is_gallery): |
|---|
| 2084 | if ((img_info is not None) and (len(img_info['queue']) > 1) and (img_info['queue'][-1]['filename'] == 'null')): |
|---|
| 2085 | temp_action = img_info['queue'][-1]['action'] |
|---|
| 2086 | temp_dest_id = img_info['queue'][0]['filename'].rsplit('.', 1)[0] |
|---|
| 2087 | |
|---|
| 2088 | if (temp_action == 'rotate'): |
|---|
| 2089 | temp_value = int (img_info['queue'][-1]['value']) |
|---|
| 2090 | |
|---|
| 2091 | temp_value = (temp_value < 0) and 4 - (abs(temp_value) % 4) or temp_value % 4 |
|---|
| 2092 | if (temp_value != 0): |
|---|
| 2093 | img_info = handleFlipRotateActions(dest_folder, temp_dest_id, img_info, temp_value + 1) |
|---|
| 2094 | elif (temp_action == 'fhorizontal'): |
|---|
| 2095 | img_info = handleFlipRotateActions(dest_folder, temp_dest_id, img_info, 0) |
|---|
| 2096 | elif (temp_action == 'fvertical'): |
|---|
| 2097 | img_info = handleFlipRotateActions(dest_folder, temp_dest_id, img_info, 1) |
|---|
| 2098 | elif (temp_action == 'resize'): |
|---|
| 2099 | # resize image |
|---|
| 2100 | temp_size = img_info['queue'][-1]['value'].split(',') |
|---|
| 2101 | temp_info = context.ZMSGraphic_extEdit_resize(dest_folder, img_info['queue'][-2]['filename'], int (temp_size[0]), int (temp_size[1]), |
|---|
| 2102 | dest_id = temp_dest_id, unique_filename = True) |
|---|
| 2103 | |
|---|
| 2104 | img_info['queue'][-1]['filename'] = temp_info[0] |
|---|
| 2105 | img_info['queue'][-1]['url'] = '%s/%s'%(dest_folder.absolute_url(), temp_info[0]) |
|---|
| 2106 | img_info['queue'][-1]['width'] = temp_info[1] |
|---|
| 2107 | img_info['queue'][-1]['height'] = temp_info[2] |
|---|
| 2108 | |
|---|
| 2109 | img_info = setThumbInfo(img_info) |
|---|
| 2110 | elif (temp_action == 'crop'): |
|---|
| 2111 | temp_crop_info = img_info['queue'][-1]['value'].split(',') |
|---|
| 2112 | # crop thumb |
|---|
| 2113 | temp_info = cropImage(dest_folder, img_info['queue'][-2]['filename'], temp_crop_info[:4], temp_crop_info[-2:], True) |
|---|
| 2114 | img_info = setThumbInfo(img_info, temp_info, img_info['queue'][-1]['value'], dest_folder) |
|---|
| 2115 | # delete crop-action from edit-queue |
|---|
| 2116 | img_info['queue'].pop() |
|---|
| 2117 | elif (temp_action == 'crop_hires'): |
|---|
| 2118 | temp_source_dict = getSourceImageData('imgsuperres', True, dest_folder) |
|---|
| 2119 | if (temp_source_dict is not None): |
|---|
| 2120 | # calculate crop-values |
|---|
| 2121 | temp_crop_info = img_info['queue'][-1]['value'].split(',') |
|---|
| 2122 | temp_max_dim = temp_crop_info[-2:] |
|---|
| 2123 | temp_crop_info = calcCropValues(temp_crop_info[:4], temp_max_dim, (temp_source_dict['width'], temp_source_dict['height'])) |
|---|
| 2124 | # crop thumb |
|---|
| 2125 | temp_info = cropImage(dest_folder, temp_source_dict['filename'], temp_crop_info, temp_max_dim, True) |
|---|
| 2126 | # reset edit-queue |
|---|
| 2127 | img_info['queue'] = [{'action' : 'crop_hires', |
|---|
| 2128 | 'value' : '%i,%i,%i,%i,%s,%s'%(temp_crop_info[0], temp_crop_info[1], temp_crop_info[2], temp_crop_info[3], |
|---|
| 2129 | temp_max_dim[0], temp_max_dim[1]), |
|---|
| 2130 | 'filename' : temp_info[0], |
|---|
| 2131 | 'url' : '%s/%s'%(dest_folder.absolute_url(), temp_info[0]), |
|---|
| 2132 | 'width' : temp_info[1], |
|---|
| 2133 | 'height' : temp_info[2]}] |
|---|
| 2134 | |
|---|
| 2135 | img_info = setThumbInfo(img_info) |
|---|
| 2136 | else: |
|---|
| 2137 | # delete crop-hires-action from edit-queue |
|---|
| 2138 | img_info['queue'].pop() |
|---|
| 2139 | elif ((temp_action == 'workspace') or (temp_action == 'reset')): |
|---|
| 2140 | temp_workspace_width = (temp_action == 'reset') and int (img_info['workspace']['width']) or int (img_info['queue'][-1]['value']) |
|---|
| 2141 | temp_dims = {'thumb_height' : 0, 'thumb_width' : 0, 'workspace' : temp_workspace_width} |
|---|
| 2142 | |
|---|
| 2143 | temp_source_dict = {} |
|---|
| 2144 | temp_source_dict['act'] = {} |
|---|
| 2145 | temp_source_dict['img'] = None |
|---|
| 2146 | temp_source_dict['imghires'] = getSourceImageData('imghires') |
|---|
| 2147 | temp_source_dict['imgsuperres'] = getSourceImageData('imgsuperres') |
|---|
| 2148 | temp_source_dict = createTempImages(dest_folder, temp_source_dict, temp_dims) |
|---|
| 2149 | # reset edit-queue |
|---|
| 2150 | img_info['queue'] = [{'action' : 'reset', |
|---|
| 2151 | 'value' : 'null', |
|---|
| 2152 | 'filename' : temp_source_dict['act']['filename'], |
|---|
| 2153 | 'url' : '%s/%s'%(dest_folder.absolute_url(), temp_source_dict['act']['filename']), |
|---|
| 2154 | 'width' : temp_source_dict['act']['width'], |
|---|
| 2155 | 'height' : temp_source_dict['act']['height']}] |
|---|
| 2156 | |
|---|
| 2157 | img_info = setThumbInfo(img_info) |
|---|
| 2158 | elif (temp_action == 'drop_shadow'): |
|---|
| 2159 | temp_info = context.ZMSGraphic_extEdit_dropShadow(dest_folder, img_info['queue'][-2]['filename'], unique_filename = True) |
|---|
| 2160 | |
|---|
| 2161 | img_info['queue'][-1]['filename'] = temp_info[0] |
|---|
| 2162 | img_info['queue'][-1]['url'] = '%s/%s'%(dest_folder.absolute_url(), temp_info[0]) |
|---|
| 2163 | img_info['queue'][-1]['width'] = temp_info[1] |
|---|
| 2164 | img_info['queue'][-1]['height'] = temp_info[2] |
|---|
| 2165 | |
|---|
| 2166 | img_info = setThumbInfo(img_info) |
|---|
| 2167 | elif (temp_action == 'arrow'): |
|---|
| 2168 | # convert coordinates-string into list of coordinate-tuples |
|---|
| 2169 | temp_arrow_rects = [] |
|---|
| 2170 | for one_rect in img_info['queue'][-1]['value'].split(';'): |
|---|
| 2171 | temp_one_rect = one_rect.split(',') |
|---|
| 2172 | |
|---|
| 2173 | temp_arrow_rects.append((float (temp_one_rect[0]), float (temp_one_rect[1]), float (temp_one_rect[2]), float (temp_one_rect[3]))) |
|---|
| 2174 | |
|---|
| 2175 | if (len(temp_arrow_rects) > 0): |
|---|
| 2176 | temp_info = context.ZMSGraphic_extEdit_drawArrow(dest_folder, img_info['queue'][-2]['filename'], temp_arrow_rects, dest_id = temp_dest_id, unique_filename = True) |
|---|
| 2177 | |
|---|
| 2178 | img_info['queue'][-1]['filename'] = temp_info[0] |
|---|
| 2179 | img_info['queue'][-1]['url'] = '%s/%s'%(dest_folder.absolute_url(), temp_info[0]) |
|---|
| 2180 | img_info['queue'][-1]['width'] = temp_info[1] |
|---|
| 2181 | img_info['queue'][-1]['height'] = temp_info[2] |
|---|
| 2182 | |
|---|
| 2183 | return img_info |
|---|
| 2184 | |
|---|
| 2185 | def handleFlipRotateActions(dest_folder, dest_id, img_info, temp_action): |
|---|
| 2186 | temp_info = context.ZMSGraphic_extEdit_transpose(dest_folder, img_info['queue'][-2]['filename'], temp_action, dest_id = dest_id, unique_filename = True) |
|---|
| 2187 | |
|---|
| 2188 | img_info['queue'][-1]['filename'] = temp_info[0] |
|---|
| 2189 | img_info['queue'][-1]['url'] = '%s/%s'%(dest_folder.absolute_url(), temp_info[0]) |
|---|
| 2190 | img_info['queue'][-1]['width'] = temp_info[1] |
|---|
| 2191 | img_info['queue'][-1]['height'] = temp_info[2] |
|---|
| 2192 | |
|---|
| 2193 | return setThumbInfo(img_info) |
|---|
| 2194 | |
|---|
| 2195 | def optimizeQueue(img_info): |
|---|
| 2196 | if ((img_info is not None) and (len(img_info['queue']) > 0)): |
|---|
| 2197 | temp_dest_actions = [] |
|---|
| 2198 | temp_last_action = None |
|---|
| 2199 | temp_value = None |
|---|
| 2200 | |
|---|
| 2201 | def appendToList(action, value): |
|---|
| 2202 | if (action in ['rotate']): |
|---|
| 2203 | value = calcRotateValue(value) |
|---|
| 2204 | |
|---|
| 2205 | if (value > 0): |
|---|
| 2206 | temp_dest_actions.append({'action' : action, 'value' : value}) |
|---|
| 2207 | elif (action in ['fvertical', 'fhorizontal']): |
|---|
| 2208 | value = value % 2 |
|---|
| 2209 | |
|---|
| 2210 | if (value > 0): |
|---|
| 2211 | temp_dest_actions.append({'action' : action, 'value' : value}) |
|---|
| 2212 | else: |
|---|
| 2213 | temp_dest_actions.append({'action' : action, 'value' : value}) |
|---|
| 2214 | |
|---|
| 2215 | for i in range(0, len(img_info['queue']) + 1): |
|---|
| 2216 | if (i == len(img_info['queue'])): |
|---|
| 2217 | appendToList(temp_last_action, temp_value) |
|---|
| 2218 | elif (temp_last_action is None): |
|---|
| 2219 | temp_last_action = img_info['queue'][i]['action'] |
|---|
| 2220 | temp_value = img_info['queue'][i]['value'] |
|---|
| 2221 | elif (temp_last_action == img_info['queue'][i]['action']): |
|---|
| 2222 | if (temp_last_action in ['rotate', 'fvertical', 'fhorizontal']): |
|---|
| 2223 | temp_value = (temp_value is None) and int (img_info['queue'][i]['value']) or temp_value + int (img_info['queue'][i]['value']) |
|---|
| 2224 | else: |
|---|
| 2225 | temp_value = img_info['queue'][i]['value'] |
|---|
| 2226 | else: |
|---|
| 2227 | appendToList(temp_last_action, temp_value) |
|---|
| 2228 | |
|---|
| 2229 | temp_last_action = img_info['queue'][i]['action'] |
|---|
| 2230 | temp_value = (temp_last_action in ['rotate', 'fvertical', 'fhorizontal']) and int (img_info['queue'][i]['value']) or img_info['queue'][i]['value'] |
|---|
| 2231 | |
|---|
| 2232 | img_info['queue'] = temp_dest_actions |
|---|
| 2233 | |
|---|
| 2234 | return img_info |
|---|
| 2235 | |
|---|
| 2236 | def recreateImages(dest_folder, img_info, is_gallery = False): |
|---|
| 2237 | def setInfo(dest_dict, source_list): |
|---|
| 2238 | dest_dict['filename'] = source_list[0] |
|---|
| 2239 | dest_dict['height'] = source_list[2] |
|---|
| 2240 | dest_dict['width'] = source_list[1] |
|---|
| 2241 | |
|---|
| 2242 | return dest_dict |
|---|
| 2243 | |
|---|
| 2244 | def doTranspose(image_dict, action_list): |
|---|
| 2245 | if (len(action_list) > 0): |
|---|
| 2246 | if (image_dict['imgsuperres'] is not None): |
|---|
| 2247 | image_dict['imgsuperres'] = setInfo(image_dict['imgsuperres'], context.ZMSGraphic_extEdit_transpose(dest_folder, temp_image_dict['imgsuperres']['filename'], action_list, replace_source = True)) |
|---|
| 2248 | if (image_dict['imghires'] is not None): |
|---|
| 2249 | image_dict['imghires'] = setInfo(image_dict['imghires'], context.ZMSGraphic_extEdit_transpose(dest_folder, temp_image_dict['imghires']['filename'], action_list, replace_source = True)) |
|---|
| 2250 | |
|---|
| 2251 | return image_dict |
|---|
| 2252 | |
|---|
| 2253 | # delete temp-images |
|---|
| 2254 | clearGarbage(dest_folder) |
|---|
| 2255 | # create new temp-folder |
|---|
| 2256 | dest_folder = context.ZMSGraphic_extEdit_getTempFolder(True) |
|---|
| 2257 | |
|---|
| 2258 | temp_image_dict = {} |
|---|
| 2259 | temp_image_dict['img'] = (img_info['thumb']['url'] != 'null') and getSourceImageData('img', True, dest_folder) or None |
|---|
| 2260 | temp_image_dict['imghires'] = (img_info['queue'][0]['action'] == 'create') and getSourceImageData('imghires', True, dest_folder) or None |
|---|
| 2261 | temp_image_dict['imgsuperres'] = getSourceImageData('imgsuperres', True, dest_folder) |
|---|
| 2262 | |
|---|
| 2263 | if (temp_image_dict['imghires'] is None): |
|---|
| 2264 | # create hires from superres |
|---|
| 2265 | if (temp_image_dict['imgsuperres'] is not None): |
|---|
| 2266 | # crop hires from superres |
|---|
| 2267 | if (img_info['queue'][0]['action'] == 'crop_hires'): |
|---|
| 2268 | temp_crop_info = img_info['queue'][0]['value'].split(',') |
|---|
| 2269 | temp_info = cropImage(dest_folder, temp_image_dict['imgsuperres']['filename'], temp_crop_info[:4], temp_crop_info[-2:], True) |
|---|
| 2270 | else: |
|---|
| 2271 | temp_size = calcResizeDim(temp_image_dict['imgsuperres']['width'], temp_image_dict['imgsuperres']['height'], img_info['workspace']['width']) |
|---|
| 2272 | temp_info = context.ZMSGraphic_extEdit_resize(dest_folder, temp_image_dict['imgsuperres']['filename'], temp_size[0], temp_size[1]) |
|---|
| 2273 | |
|---|
| 2274 | temp_image_dict['imghires'] = {} |
|---|
| 2275 | temp_image_dict['imghires']['filename'] = temp_info[0] |
|---|
| 2276 | temp_image_dict['imghires']['height'] = temp_info[2] |
|---|
| 2277 | temp_image_dict['imghires']['width'] = temp_info[1] |
|---|
| 2278 | # crop hires from superres |
|---|
| 2279 | elif (img_info['queue'][0]['action'] == 'crop_hires'): |
|---|
| 2280 | temp_crop_info = img_info['queue'][0]['value'].split(',') |
|---|
| 2281 | temp_info = cropImage(dest_folder, temp_image_dict['imgsuperres']['filename'], temp_crop_info[:4], temp_crop_info[-2:], True) |
|---|
| 2282 | |
|---|
| 2283 | temp_image_dict['imghires']['filename'] = temp_info[0] |
|---|
| 2284 | temp_image_dict['imghires']['height'] = temp_info[2] |
|---|
| 2285 | temp_image_dict['imghires']['width'] = temp_info[1] |
|---|
| 2286 | |
|---|
| 2287 | if ((temp_image_dict['imghires'] is not None or temp_image_dict['imgsuperres'] is not None) and (img_info is not None)): |
|---|
| 2288 | if (temp_image_dict['imghires'] is not None): |
|---|
| 2289 | img_info['workspace']['width'] = int (img_info['workspace']['width']) |
|---|
| 2290 | temp_hires_max_dim = max(temp_image_dict['imghires']['height'], temp_image_dict['imghires']['width']) |
|---|
| 2291 | # resize hires if its greater than workspace width |
|---|
| 2292 | if (((temp_is_gallery) and (temp_hires_max_dim <> img_info['workspace']['width'])) or |
|---|
| 2293 | ((not temp_is_gallery) and (temp_hires_max_dim > img_info['workspace']['width']))): |
|---|
| 2294 | temp_size = calcResizeDim(temp_image_dict['imghires']['width'], temp_image_dict['imghires']['height'], img_info['workspace']['width']) |
|---|
| 2295 | temp_info = context.ZMSGraphic_extEdit_resize(dest_folder, temp_image_dict['imghires']['filename'], temp_size[0], temp_size[1], replace_source = True) |
|---|
| 2296 | |
|---|
| 2297 | temp_image_dict['imghires']['width'] = temp_info[1] |
|---|
| 2298 | temp_image_dict['imghires']['height'] = temp_info[2] |
|---|
| 2299 | |
|---|
| 2300 | # apply edit-actions to hires and/or superres |
|---|
| 2301 | if (len(img_info['queue']) > 1): |
|---|
| 2302 | temp_action_list = [] |
|---|
| 2303 | |
|---|
| 2304 | for i in range(0, len(img_info['queue'])): |
|---|
| 2305 | temp_action = img_info['queue'][i]['action'] |
|---|
| 2306 | |
|---|
| 2307 | if (temp_action == 'rotate'): |
|---|
| 2308 | temp_value = calcRotateValue(int (img_info['queue'][i]['value'])) |
|---|
| 2309 | if (temp_value != 0): |
|---|
| 2310 | temp_action_list.append(temp_value + 1) |
|---|
| 2311 | elif (temp_action == 'fhorizontal'): |
|---|
| 2312 | temp_action_list.append(0) |
|---|
| 2313 | elif (temp_action == 'fvertical'): |
|---|
| 2314 | temp_action_list.append(1) |
|---|
| 2315 | elif (temp_action == 'resize'): |
|---|
| 2316 | temp_image_dict = doTranspose(temp_image_dict, temp_action_list) |
|---|
| 2317 | # resize image |
|---|
| 2318 | temp_size = img_info['queue'][i]['value'].split(',') |
|---|
| 2319 | temp_image_dict['imghires'] = setInfo(temp_image_dict['imghires'], context.ZMSGraphic_extEdit_resize(dest_folder, temp_image_dict['imghires']['filename'], int (temp_size[0]), int (temp_size[1]), replace_source = True)) |
|---|
| 2320 | # reset action-list |
|---|
| 2321 | temp_action_list = [] |
|---|
| 2322 | elif (temp_action == 'drop_shadow'): |
|---|
| 2323 | temp_image_dict = doTranspose(temp_image_dict, temp_action_list) |
|---|
| 2324 | # draw drop-shadow |
|---|
| 2325 | temp_image_dict['imghires'] = setInfo(temp_image_dict['imghires'], context.ZMSGraphic_extEdit_dropShadow(dest_folder, temp_image_dict['imghires']['filename'], replace_source = True)) |
|---|
| 2326 | # reset action-list |
|---|
| 2327 | temp_action_list = [] |
|---|
| 2328 | elif (temp_action == 'arrow'): |
|---|
| 2329 | temp_image_dict = doTranspose(temp_image_dict, temp_action_list) |
|---|
| 2330 | # convert coordinates-string into list of coordinate-tuples |
|---|
| 2331 | temp_arrow_rects = [] |
|---|
| 2332 | for one_rect in img_info['queue'][-1]['value'].split(';'): |
|---|
| 2333 | temp_one_rect = one_rect.split(',') |
|---|
| 2334 | temp_arrow_rects.append((float (temp_one_rect[0]), float (temp_one_rect[1]), float (temp_one_rect[2]), float (temp_one_rect[3]))) |
|---|
| 2335 | |
|---|
| 2336 | if (len(temp_arrow_rects) > 0): |
|---|
| 2337 | temp_image_dict['imghires'] = setInfo(temp_image_dict['imghires'], context.ZMSGraphic_extEdit_drawArrow(dest_folder, temp_image_dict['imghires']['filename'], temp_arrow_rects, replace_source = True)) |
|---|
| 2338 | |
|---|
| 2339 | # reset action-list |
|---|
| 2340 | temp_action_list = [] |
|---|
| 2341 | |
|---|
| 2342 | temp_image_dict = doTranspose(temp_image_dict, temp_action_list) |
|---|
| 2343 | # create thumb |
|---|
| 2344 | if (img_info['thumb']['crop_box'] != 'null'): |
|---|
| 2345 | temp_crop_info = img_info['thumb']['crop_box'].split(',') |
|---|
| 2346 | temp_info = cropImage(dest_folder, temp_image_dict['imghires']['filename'], temp_crop_info[:4], temp_crop_info[-2:]) |
|---|
| 2347 | |
|---|
| 2348 | temp_image_dict['img'] = {} |
|---|
| 2349 | temp_image_dict['img']['filename'] = temp_info[0] |
|---|
| 2350 | temp_image_dict['img']['height'] = temp_info[2] |
|---|
| 2351 | temp_image_dict['img']['width'] = temp_info[1] |
|---|
| 2352 | # draw drop shadow |
|---|
| 2353 | #if ((int (img_info['drop_shadow']) != 0) and (temp_image_dict['imghires'] is not None)): |
|---|
| 2354 | # context.ZMSGraphic_extEdit_dropShadow(dest_folder, temp_image_dict['imghires']['filename'], replace_source = True) |
|---|
| 2355 | |
|---|
| 2356 | if (temp_image_dict['img'] is None): |
|---|
| 2357 | context.setObjProperty('img', None) |
|---|
| 2358 | else: |
|---|
| 2359 | context.setObjProperty('img', getFileData(dest_folder, temp_image_dict['img']['filename'])) |
|---|
| 2360 | if (temp_image_dict['imghires'] is not None): |
|---|
| 2361 | context.setObjProperty('imghires', getFileData(dest_folder, temp_image_dict['imghires']['filename'])) |
|---|
| 2362 | if (temp_image_dict['imgsuperres'] is not None): |
|---|
| 2363 | context.setObjProperty('imgsuperres', getFileData(dest_folder, temp_image_dict['imgsuperres']['filename'])) |
|---|
| 2364 | |
|---|
| 2365 | def setThumbInfo(img_info, info = None, thumb_box = None, dest_folder = None): |
|---|
| 2366 | if (info is None): |
|---|
| 2367 | img_info['thumb']['filename'] = 'null' |
|---|
| 2368 | img_info['thumb']['url'] = 'null' |
|---|
| 2369 | img_info['thumb']['crop_box'] = 'null' |
|---|
| 2370 | else: |
|---|
| 2371 | img_info['thumb']['filename'] = info[0] |
|---|
| 2372 | img_info['thumb']['url'] = '%s/%s'%(dest_folder.absolute_url(), info[0]) |
|---|
| 2373 | img_info['thumb']['crop_box'] = thumb_box |
|---|
| 2374 | img_info['thumb']['width'] = info[1] |
|---|
| 2375 | img_info['thumb']['height'] = info[2] |
|---|
| 2376 | |
|---|
| 2377 | return img_info |
|---|
| 2378 | |
|---|
| 2379 | ################################################################################################## |
|---|
| 2380 | REQUEST = context.REQUEST |
|---|
| 2381 | temp_action = REQUEST.get('action', None) |
|---|
| 2382 | temp_lang = REQUEST.get('lang', context.getPrimaryLanguage()) |
|---|
| 2383 | temp_result = '' |
|---|
| 2384 | |
|---|
| 2385 | temp_folder = context.ZMSGraphic_extEdit_getTempFolder(True) |
|---|
| 2386 | temp_is_gallery = context.aq_parent.meta_id in ['ZMSGallery'] |
|---|
| 2387 | |
|---|
| 2388 | if (temp_action is not None): |
|---|
| 2389 | # button ok pressed |
|---|
| 2390 | if (temp_action == 'ok'): |
|---|
| 2391 | recreateImages(temp_folder, optimizeQueue(context.parseXmlString(REQUEST.get('img_info', None))), temp_is_gallery) |
|---|
| 2392 | |
|---|
| 2393 | clearGarbage(temp_folder) |
|---|
| 2394 | |
|---|
| 2395 | REQUEST.RESPONSE.redirect('%s/manage_main?lang=%s&manage_lang=%s'%(context.aq_parent.absolute_url(), temp_lang, temp_lang)) |
|---|
| 2396 | # ajax request |
|---|
| 2397 | elif (temp_action == 'request'): |
|---|
| 2398 | REQUEST.RESPONSE.setHeader('Content-type', 'text/html; charset=utf-8;') |
|---|
| 2399 | |
|---|
| 2400 | temp_img_info = context.parseXmlString(REQUEST.get('img_info', None)) |
|---|
| 2401 | |
|---|
| 2402 | if ((temp_img_info is not None) and (len(temp_img_info['queue']) > 0)): |
|---|
| 2403 | temp_img_info = handleEditQueue(temp_folder, temp_img_info, temp_is_gallery) |
|---|
| 2404 | |
|---|
| 2405 | temp_result = {'result' : 1, 'img_info' : temp_img_info} |
|---|
| 2406 | else: |
|---|
| 2407 | temp_result = {'result' : 0} |
|---|
| 2408 | # button cancel pressed |
|---|
| 2409 | else: |
|---|
| 2410 | clearGarbage(temp_folder) |
|---|
| 2411 | |
|---|
| 2412 | REQUEST.RESPONSE.redirect('%s/manage_main?lang=%s&manage_lang=%s'%(context.aq_parent.absolute_url(), temp_lang, temp_lang)) |
|---|
| 2413 | # show edit-form |
|---|
| 2414 | else: |
|---|
| 2415 | temp_conf_dims = getConfDimensions(temp_is_gallery) |
|---|
| 2416 | |
|---|
| 2417 | temp_source_dict = {} |
|---|
| 2418 | temp_source_dict['act'] = {} |
|---|
| 2419 | temp_source_dict['img'] = getSourceImageData('img') |
|---|
| 2420 | temp_source_dict['imghires'] = getSourceImageData('imghires') |
|---|
| 2421 | temp_source_dict['imgsuperres'] = getSourceImageData('imgsuperres') |
|---|
| 2422 | |
|---|
| 2423 | if (temp_source_dict['img'] is None): |
|---|
| 2424 | temp_source_dict['img'] = {} |
|---|
| 2425 | temp_source_dict['img']['filename'] = None |
|---|
| 2426 | temp_source_dict['img']['height'] = temp_conf_dims['thumb_height'] |
|---|
| 2427 | temp_source_dict['img']['width'] = temp_conf_dims['thumb_width'] |
|---|
| 2428 | temp_source_dict['img']['data'] = None |
|---|
| 2429 | |
|---|
| 2430 | if ((temp_source_dict['imghires'] is not None) or (temp_source_dict['imgsuperres'] is not None)): |
|---|
| 2431 | if (temp_source_dict['imgsuperres'] is not None): |
|---|
| 2432 | temp_max_workspace_width = max(temp_source_dict['imgsuperres']['height'], temp_source_dict['imgsuperres']['width']) |
|---|
| 2433 | else: |
|---|
| 2434 | temp_max_workspace_width = max(temp_source_dict['imghires']['height'], temp_source_dict['imghires']['width']) |
|---|
| 2435 | |
|---|
| 2436 | if (not temp_is_gallery): |
|---|
| 2437 | temp_conf_dims['workspace'] = temp_max_workspace_width |
|---|
| 2438 | |
|---|
| 2439 | temp_source_dict = createTempImages(temp_folder, temp_source_dict, temp_conf_dims, use_hires = True) |
|---|
| 2440 | |
|---|
| 2441 | REQUEST.set('filename', temp_source_dict['act']['filename']) |
|---|
| 2442 | REQUEST.set('height', temp_source_dict['act']['height']) |
|---|
| 2443 | REQUEST.set('width', temp_source_dict['act']['width']) |
|---|
| 2444 | REQUEST.set('thumb_filename', temp_source_dict['img']['filename']) |
|---|
| 2445 | REQUEST.set('thumb_height', temp_source_dict['img']['height']) |
|---|
| 2446 | REQUEST.set('thumb_width', temp_source_dict['img']['width']) |
|---|
| 2447 | |
|---|
| 2448 | REQUEST.set('img_info', temp_source_dict) |
|---|
| 2449 | |
|---|
| 2450 | REQUEST.set('workspace_width', temp_conf_dims['workspace']) |
|---|
| 2451 | REQUEST.set('workspace_width_max', temp_max_workspace_width) |
|---|
| 2452 | else: |
|---|
| 2453 | REQUEST.set('filename', None) |
|---|
| 2454 | |
|---|
| 2455 | temp_result = context.dt_html(str(context.ZMSGraphic_extEdit_Form.document_src()), REQUEST) |
|---|
| 2456 | |
|---|
| 2457 | return temp_result |
|---|
| 2458 | ]]></item> |
|---|
| 2459 | <item key="id"><![CDATA[ZMSGraphic_extEdit_core]]></item> |
|---|
| 2460 | <item key="mandatory" type="int">0</item> |
|---|
| 2461 | <item key="multilang" type="int">0</item> |
|---|
| 2462 | <item key="name"><![CDATA[ZMSGraphic_extEdit_core]]></item> |
|---|
| 2463 | <item key="repetitive" type="int">0</item> |
|---|
| 2464 | <item key="type"><![CDATA[Script (Python)]]></item> |
|---|
| 2465 | </dictionary> |
|---|
| 2466 | </item> |
|---|
| 2467 | <item type="dictionary"><dictionary> |
|---|
| 2468 | <item key="custom"><![CDATA[from time import localtime, strftime
|
|---|
| 2469 | from PIL import Image, ImageFilter
|
|---|
| 2470 | from cStringIO import StringIO
|
|---|
| 2471 | import os.path
|
|---|
| 2472 |
|
|---|
| 2473 | def ZMSGraphic_extEdit_dropShadow(dest_folder, source_id, dest_id = None, replace_source = False, unique_filename = False, maintain_size = True,
|
|---|
| 2474 | iterations = 3, border = 5, offset = (3, 3), background_color = 0xffffff, shadow_color = 0x444444):
|
|---|
| 2475 | # image: base image to give a drop shadow
|
|---|
| 2476 | # iterations: number of times to apply the blur filter to the shadow
|
|---|
| 2477 | # border: border to give the image to leave space for the shadow
|
|---|
| 2478 | # offset: offset of the shadow as [x,y]
|
|---|
| 2479 | # background_color: color of the background
|
|---|
| 2480 | # shadow_color: color of the drop shadow
|
|---|
| 2481 |
|
|---|
| 2482 | if (dest_folder is not None):
|
|---|
| 2483 | if (not source_id in dest_folder.objectIds()):
|
|---|
| 2484 | raise 'ZMSGraphic_extEdit_resize: can\'t find source-image'
|
|---|
| 2485 |
|
|---|
| 2486 | temp_source = getattr(dest_folder, source_id)
|
|---|
| 2487 | temp_source = StringIO(str(temp_source.data))
|
|---|
| 2488 |
|
|---|
| 2489 | temp_image = Image.open(temp_source)
|
|---|
| 2490 | temp_image = temp_image.convert('RGB')
|
|---|
| 2491 |
|
|---|
| 2492 | # calculate size of shadow image
|
|---|
| 2493 | temp_dest_width = maintain_size and temp_image.size[0] or temp_image.size[0] + abs(offset[0]) + 2 * border
|
|---|
| 2494 | temp_dest_height = maintain_size and temp_image.size[1] or temp_image.size[1] + abs(offset[1]) + 2 * border
|
|---|
| 2495 | # resize image if necessary
|
|---|
| 2496 | if (maintain_size):
|
|---|
| 2497 | temp_image = temp_image.resize((temp_image.size[0] - abs(offset[0]) - 2 * border, temp_image.size[1] - abs(offset[1]) - 2 * border), Image.ANTIALIAS)
|
|---|
| 2498 | # create shadow image
|
|---|
| 2499 | temp_shadow = Image.new(temp_image.mode, (temp_dest_width, temp_dest_height), background_color)
|
|---|
| 2500 | # place the shadow, with the required offset
|
|---|
| 2501 | temp_left = border + max(offset[0], 0) #if <0, push the rest of the image right
|
|---|
| 2502 | temp_top = border + max(offset[1], 0) #if <0, push the rest of the image down
|
|---|
| 2503 | # paste in constant color
|
|---|
| 2504 | temp_shadow.paste(shadow_color,
|
|---|
| 2505 | [temp_left, temp_top,
|
|---|
| 2506 | temp_left + temp_image.size[0],
|
|---|
| 2507 | temp_top + temp_image.size[1]])
|
|---|
| 2508 | # apply BLUR filter repeatedly
|
|---|
| 2509 | for i in range(iterations):
|
|---|
| 2510 | temp_shadow = temp_shadow.filter(ImageFilter.BLUR)
|
|---|
| 2511 |
|
|---|
| 2512 | temp_image_size = temp_shadow.size
|
|---|
| 2513 |
|
|---|
| 2514 | # paste image on top of shadow
|
|---|
| 2515 | temp_left = border - min(offset[0], 0) #if the shadow offset was <0, push right
|
|---|
| 2516 | temp_top = border - min(offset[1], 0) #if the shadow offset was <0, push down
|
|---|
| 2517 | temp_shadow.paste(temp_image, (temp_left, temp_top))
|
|---|
| 2518 |
|
|---|
| 2519 | temp_dest = StringIO()
|
|---|
| 2520 | temp_shadow.save(temp_dest, "JPEG")
|
|---|
| 2521 | temp_dest.seek(0)
|
|---|
| 2522 |
|
|---|
| 2523 | temp_path, temp_ext = os.path.splitext(source_id)
|
|---|
| 2524 | temp_dest_id = (dest_id is None) and temp_path or dest_id
|
|---|
| 2525 | if (not replace_source):
|
|---|
| 2526 | temp_dest_id += '_shadow'
|
|---|
| 2527 | if (unique_filename):
|
|---|
| 2528 | temp_dest_id += '_%s'%strftime('%Y%m%d%H%M%S', localtime())
|
|---|
| 2529 | temp_dest_id += '.jpg'
|
|---|
| 2530 |
|
|---|
| 2531 | if (replace_source):
|
|---|
| 2532 | dest_folder.manage_delObjects(source_id)
|
|---|
| 2533 |
|
|---|
| 2534 | if (temp_dest_id in dest_folder.objectIds()):
|
|---|
| 2535 | dest_folder.manage_delObjects(temp_dest_id)
|
|---|
| 2536 |
|
|---|
| 2537 | dest_folder.manage_addImage(temp_dest_id, temp_dest)
|
|---|
| 2538 |
|
|---|
| 2539 | temp_result = (temp_dest_id, temp_image_size[0], temp_image_size[1])
|
|---|
| 2540 | else:
|
|---|
| 2541 | temp_result = None
|
|---|
| 2542 |
|
|---|
| 2543 | return temp_result]]></item> |
|---|
| 2544 | <item key="id"><![CDATA[ZMSGraphic_extEdit_dropShadow]]></item> |
|---|
| 2545 | <item key="mandatory" type="int">0</item> |
|---|
| 2546 | <item key="multilang" type="int">0</item> |
|---|
| 2547 | <item key="name"><![CDATA[ZMSGraphic_extEdit_dropShadow]]></item> |
|---|
| 2548 | <item key="repetitive" type="int">0</item> |
|---|
| 2549 | <item key="type"><![CDATA[External Method]]></item> |
|---|
| 2550 | </dictionary> |
|---|
| 2551 | </item> |
|---|
| 2552 | <item type="dictionary"><dictionary> |
|---|
| 2553 | <item key="custom"><![CDATA[from time import localtime, strftime
|
|---|
| 2554 | from PIL import Image, ImageDraw
|
|---|
| 2555 | from cStringIO import StringIO
|
|---|
| 2556 | import math
|
|---|
| 2557 | import os.path
|
|---|
| 2558 |
|
|---|
| 2559 | # arrow_tuple = (start_x, start_y, end_x, end_y)
|
|---|
| 2560 | def _drawArrow(draw_obj, arrow_tuple, arrow_angle = 20, arrow_length = 35, stroke_color = '#49911b', stroke_width = 5):
|
|---|
| 2561 | if ((arrow_tuple[0] != arrow_tuple[2]) and (arrow_tuple[1] != arrow_tuple[3])):
|
|---|
| 2562 | if (arrow_tuple[0] == arrow_tuple[2]):
|
|---|
| 2563 | temp_angle = (arrow_tuple[1] > arrow_tuple[3]) and 90.0 or -90.0
|
|---|
| 2564 | else:
|
|---|
| 2565 | temp_angle = math.atan(float (arrow_tuple[1] - arrow_tuple[3]) / float (arrow_tuple[0] - arrow_tuple[2])) * 180 / math.pi
|
|---|
| 2566 |
|
|---|
| 2567 | temp_deg2rad_modifier = math.pi / 180
|
|---|
| 2568 |
|
|---|
| 2569 | if (arrow_tuple[0] < arrow_tuple[2]):
|
|---|
| 2570 | draw_obj.line((arrow_tuple[0], arrow_tuple[1], arrow_tuple[2], arrow_tuple[3]), fill = stroke_color, width = stroke_width)
|
|---|
| 2571 | draw_obj.line((arrow_tuple[2], arrow_tuple[3],
|
|---|
| 2572 | arrow_tuple[2] - round(math.cos((temp_angle + arrow_angle) * temp_deg2rad_modifier) * arrow_length),
|
|---|
| 2573 | arrow_tuple[3] - round(math.sin((temp_angle + arrow_angle) * temp_deg2rad_modifier) * arrow_length)),
|
|---|
| 2574 | fill = stroke_color, width = stroke_width + 2)
|
|---|
| 2575 | draw_obj.line((arrow_tuple[2], arrow_tuple[3],
|
|---|
| 2576 | arrow_tuple[2] - round(math.cos((temp_angle - arrow_angle) * temp_deg2rad_modifier) * arrow_length),
|
|---|
| 2577 | arrow_tuple[3] - round(math.sin((temp_angle - arrow_angle) * temp_deg2rad_modifier) * arrow_length)),
|
|---|
| 2578 | fill = stroke_color, width = stroke_width + 2)
|
|---|
| 2579 | else:
|
|---|
| 2580 | draw_obj.line((arrow_tuple[0], arrow_tuple[1], arrow_tuple[2], arrow_tuple[3]), fill = stroke_color, width = stroke_width)
|
|---|
| 2581 | draw_obj.line((arrow_tuple[2], arrow_tuple[3],
|
|---|
| 2582 | arrow_tuple[2] + round(math.cos((temp_angle + arrow_angle) * temp_deg2rad_modifier) * arrow_length),
|
|---|
| 2583 | arrow_tuple[3] + round(math.sin((temp_angle + arrow_angle) * temp_deg2rad_modifier) * arrow_length)),
|
|---|
| 2584 | fill = stroke_color, width = stroke_width + 2)
|
|---|
| 2585 | draw_obj.line((arrow_tuple[2], arrow_tuple[3],
|
|---|
| 2586 | arrow_tuple[2] + round(math.cos((temp_angle - arrow_angle) * temp_deg2rad_modifier) * arrow_length),
|
|---|
| 2587 | arrow_tuple[3] + round(math.sin((temp_angle - arrow_angle) * temp_deg2rad_modifier) * arrow_length)),
|
|---|
| 2588 | fill = stroke_color, width = stroke_width + 2)
|
|---|
| 2589 |
|
|---|
| 2590 | def ZMSGraphic_extEdit_drawArrow(dest_folder, source_id, arrow_rect_list, replace_source = False, dest_id = None, unique_filename = False):
|
|---|
| 2591 | if (dest_folder is not None):
|
|---|
| 2592 | if (not source_id in dest_folder.objectIds()):
|
|---|
| 2593 | raise 'ZMSGraphic_extEdit_drawArrow: can\'t find source-image'
|
|---|
| 2594 |
|
|---|
| 2595 | temp_source = getattr(dest_folder, source_id)
|
|---|
| 2596 | temp_source = StringIO(str(temp_source.data))
|
|---|
| 2597 |
|
|---|
| 2598 | temp_image = Image.open(temp_source)
|
|---|
| 2599 | temp_image = temp_image.convert('RGB')
|
|---|
| 2600 |
|
|---|
| 2601 | temp_image_size = temp_image.size
|
|---|
| 2602 |
|
|---|
| 2603 | if (type(arrow_rect_list) == type((0,))):
|
|---|
| 2604 | methods = [methods]
|
|---|
| 2605 |
|
|---|
| 2606 | if (len(arrow_rect_list) > 0):
|
|---|
| 2607 | temp_draw = ImageDraw.Draw(temp_image)
|
|---|
| 2608 |
|
|---|
| 2609 | for one_rect in arrow_rect_list:
|
|---|
| 2610 | _drawArrow(temp_draw, one_rect)
|
|---|
| 2611 | #temp_draw.line((one_rect[0], one_rect[1], one_rect[2], one_rect[3]), fill = '#ffff00', width = 5)
|
|---|
| 2612 |
|
|---|
| 2613 | del temp_draw
|
|---|
| 2614 |
|
|---|
| 2615 | temp_dest = StringIO()
|
|---|
| 2616 | temp_image.save(temp_dest, "JPEG")
|
|---|
| 2617 | temp_dest.seek(0)
|
|---|
| 2618 |
|
|---|
| 2619 | temp_path, temp_ext = os.path.splitext(source_id)
|
|---|
| 2620 | temp_dest_id = (dest_id is None) and temp_path or dest_id
|
|---|
| 2621 | if (not replace_source):
|
|---|
| 2622 | temp_dest_id += '_arrow'
|
|---|
| 2623 | if (unique_filename):
|
|---|
| 2624 | temp_dest_id += '_%s'%strftime('%Y%m%d%H%M%S', localtime())
|
|---|
| 2625 | temp_dest_id += '.jpg'
|
|---|
| 2626 |
|
|---|
| 2627 | if (replace_source):
|
|---|
| 2628 | dest_folder.manage_delObjects(source_id)
|
|---|
| 2629 |
|
|---|
| 2630 | if (temp_dest_id in dest_folder.objectIds()):
|
|---|
| 2631 | dest_folder.manage_delObjects(temp_dest_id)
|
|---|
| 2632 |
|
|---|
| 2633 | dest_folder.manage_addImage(temp_dest_id, temp_dest)
|
|---|
| 2634 |
|
|---|
| 2635 | temp_result = (temp_dest_id, temp_image_size[0], temp_image_size[1])
|
|---|
| 2636 | else:
|
|---|
| 2637 | temp_result = None
|
|---|
| 2638 |
|
|---|
| 2639 | return temp_result]]></item> |
|---|
| 2640 | <item key="id"><![CDATA[ZMSGraphic_extEdit_drawArrow]]></item> |
|---|
| 2641 | <item key="mandatory" type="int">0</item> |
|---|
| 2642 | <item key="multilang" type="int">0</item> |
|---|
| 2643 | <item key="name"><![CDATA[ZMSGraphic_extEdit_drawArrow]]></item> |
|---|
| 2644 | <item key="repetitive" type="int">0</item> |
|---|
| 2645 | <item key="type"><![CDATA[External Method]]></item> |
|---|
| 2646 | </dictionary> |
|---|
| 2647 | </item> |
|---|
| 2648 | </list> |
|---|
| 2649 | </item> |
|---|
| 2650 | <item key="access" type="dictionary"><dictionary> |
|---|
| 2651 | <item key="delete" type="list"><list> |
|---|
| 2652 | </list> |
|---|
| 2653 | </item> |
|---|
| 2654 | <item key="delete_custom"></item> |
|---|
| 2655 | <item key="edit" type="list"><list> |
|---|
| 2656 | </list> |
|---|
| 2657 | </item> |
|---|
| 2658 | <item key="edit_custom"></item> |
|---|
| 2659 | <item key="insert" type="list"><list> |
|---|
| 2660 | </list> |
|---|
| 2661 | </item> |
|---|
| 2662 | <item key="insert_custom"></item> |
|---|
| 2663 | </dictionary> |
|---|
| 2664 | </item> |
|---|
| 2665 | <item key="enabled" type="int">0</item> |
|---|
| 2666 | <item key="id"><![CDATA[ZMSGraphic_extEdit]]></item> |
|---|
| 2667 | <item key="name"><![CDATA[ZMSGraphic_extEdit]]></item> |
|---|
| 2668 | <item key="package"><![CDATA[com.zms.zmsgraphic_extedit]]></item> |
|---|
| 2669 | <item key="revision"><![CDATA[1.1.1-arrow]]></item> |
|---|
| 2670 | <item key="type"><![CDATA[ZMSLibrary]]></item> |
|---|
| 2671 | </dictionary> |
|---|
| 2672 | </item> |
|---|
| 2673 | </dictionary> |
|---|
| 2674 | </item> |
|---|
| 2675 | <item type="dictionary"><dictionary> |
|---|
| 2676 | <item key="key"><![CDATA[com.zms.zmsgraphic_extedit]]></item> |
|---|
| 2677 | <item key="value" type="dictionary"><dictionary> |
|---|
| 2678 | <item key="__obj_attrs__" type="list"><list> |
|---|
| 2679 | </list> |
|---|
| 2680 | </item> |
|---|
| 2681 | <item key="access" type="dictionary"><dictionary> |
|---|
| 2682 | <item key="delete" type="list"><list> |
|---|
| 2683 | </list> |
|---|
| 2684 | </item> |
|---|
| 2685 | <item key="delete_custom"></item> |
|---|
| 2686 | <item key="edit" type="list"><list> |
|---|
| 2687 | </list> |
|---|
| 2688 | </item> |
|---|
| 2689 | <item key="edit_custom"></item> |
|---|
| 2690 | <item key="insert" type="list"><list> |
|---|
| 2691 | </list> |
|---|
| 2692 | </item> |
|---|
| 2693 | <item key="insert_custom"></item> |
|---|
| 2694 | </dictionary> |
|---|
| 2695 | </item> |
|---|
| 2696 | <item key="enabled" type="int">0</item> |
|---|
| 2697 | <item key="id"><![CDATA[com.zms.zmsgraphic_extedit]]></item> |
|---|
| 2698 | <item key="name"><![CDATA[com.zms.extensions]]></item> |
|---|
| 2699 | <item key="package"></item> |
|---|
| 2700 | <item key="revision"><![CDATA[1.1.1-arrow]]></item> |
|---|
| 2701 | <item key="type"><![CDATA[ZMSPackage]]></item> |
|---|
| 2702 | </dictionary> |
|---|
| 2703 | </item> |
|---|
| 2704 | </dictionary> |
|---|
| 2705 | </item> |
|---|
| 2706 | </list> |
|---|