From 28c36b5c9155839e4192f5300f580a9c56d0ab00 Mon Sep 17 00:00:00 2001 From: Fernando Ontiveros Date: Fri, 4 Apr 2025 12:19:34 +0000 Subject: [PATCH] adding pmdynaform lib folder --- thirdparty/jsmin/jsmin.php | 4 + workflow/public_html/lib/buildhash | 1 + .../lib/css/images/alfrescoIcon.png | Bin 0 -> 1921 bytes .../lib/css/images/arrow-right-b.png | Bin 0 -> 965 bytes .../lib/css/images/arrow-right-d.png | Bin 0 -> 1049 bytes .../lib/css/images/arrow-right-w.png | Bin 0 -> 974 bytes .../public_html/lib/css/images/backPM.png | Bin 0 -> 26060 bytes workflow/public_html/lib/css/images/bg_dd.png | Bin 0 -> 151 bytes .../public_html/lib/css/images/custom.png | Bin 0 -> 6443 bytes .../public_html/lib/css/images/editcopy.png | Bin 0 -> 730 bytes .../public_html/lib/css/images/elbow-end.gif | Bin 0 -> 70 bytes .../public_html/lib/css/images/elbow-line.gif | Bin 0 -> 72 bytes .../lib/css/images/elbow-minus-nl.gif | Bin 0 -> 898 bytes .../lib/css/images/elbow-minus.gif | Bin 0 -> 908 bytes .../lib/css/images/elbow-plus-nl.gif | Bin 0 -> 900 bytes .../public_html/lib/css/images/elbow-plus.gif | Bin 0 -> 910 bytes workflow/public_html/lib/css/images/elbow.gif | Bin 0 -> 73 bytes .../css/images/pmui-sprite-s05eefa0ad7.png | Bin 0 -> 17803 bytes .../public_html/lib/css/images/submenu.gif | Bin 0 -> 53 bytes .../css/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_55_fbec88_40x100.png | Bin 0 -> 206 bytes .../images/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 336 bytes .../images/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 341 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 5824 bytes .../ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 333 bytes .../ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 292 bytes .../css/images/ui-icons_217bc0_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_469bdd_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_6da8d5_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4549 bytes .../css/images/ui-icons_f9bd01_256x240.png | Bin 0 -> 4549 bytes .../lib/css/mafe-4d5932e1-7aa8f9de.css | 10734 ++ .../lib/fonts/Chivo/Chivo-Black.ttf | Bin 0 -> 55128 bytes .../lib/fonts/Chivo/Chivo-BlackItalic.ttf | Bin 0 -> 32324 bytes .../lib/fonts/Chivo/Chivo-Italic.ttf | Bin 0 -> 30864 bytes .../lib/fonts/Chivo/Chivo-Regular.ttf | Bin 0 -> 50844 bytes workflow/public_html/lib/fonts/Chivo/OFL.txt | 94 + .../lib/fonts/Montserrat/Montserrat-Bold.ttf | Bin 0 -> 29560 bytes .../fonts/Montserrat/Montserrat-Regular.ttf | Bin 0 -> 29016 bytes .../public_html/lib/fonts/Montserrat/OFL.txt | 92 + .../SourceSansPro-Bold-webfont.eot | Bin 0 -> 31682 bytes .../SourceSansPro-Bold-webfont.svg | 173 + .../SourceSansPro-Bold-webfont.ttf | Bin 0 -> 31388 bytes .../SourceSansPro-Bold-webfont.woff | Bin 0 -> 18424 bytes .../SourceSansPro-Regular-webfont.eot | Bin 0 -> 32242 bytes .../SourceSansPro-Regular-webfont.svg | 173 + .../SourceSansPro-Regular-webfont.ttf | Bin 0 -> 31936 bytes .../SourceSansPro-Regular-webfont.woff | Bin 0 -> 18996 bytes workflow/public_html/lib/img/15px-Edit.png | Bin 0 -> 688 bytes workflow/public_html/lib/img/PM.png | Bin 0 -> 538 bytes .../public_html/lib/img/TalendOpenStudio.gif | Bin 0 -> 1300 bytes workflow/public_html/lib/img/_bg-blue.gif | Bin 0 -> 1397 bytes workflow/public_html/lib/img/_editcopy.png | Bin 0 -> 730 bytes workflow/public_html/lib/img/activate.png | Bin 0 -> 750 bytes workflow/public_html/lib/img/add.png | Bin 0 -> 373 bytes workflow/public_html/lib/img/addtext.png | Bin 0 -> 444 bytes workflow/public_html/lib/img/alfrescoIcon.png | Bin 0 -> 1921 bytes workflow/public_html/lib/img/ar_01.gif | Bin 0 -> 53 bytes workflow/public_html/lib/img/ar_dwn.png | Bin 0 -> 143 bytes workflow/public_html/lib/img/arrow-down.png | Bin 0 -> 8691 bytes workflow/public_html/lib/img/arrow-grid.png | Bin 0 -> 1535 bytes workflow/public_html/lib/img/arrow-up.png | Bin 0 -> 8661 bytes workflow/public_html/lib/img/bg_dd.png | Bin 0 -> 151 bytes workflow/public_html/lib/img/bg_designer.gif | Bin 0 -> 178 bytes .../public_html/lib/img/bpmnProcessmaker.gif | Bin 0 -> 2235313 bytes .../lib/img/bpmn_sprite_with_zoom.png | Bin 0 -> 67766 bytes workflow/public_html/lib/img/btn_create.png | Bin 0 -> 1254 bytes workflow/public_html/lib/img/button.png | Bin 0 -> 1672 bytes workflow/public_html/lib/img/calendar.png | Bin 0 -> 701 bytes workflow/public_html/lib/img/caret-down-w.png | Bin 0 -> 163 bytes workflow/public_html/lib/img/caret-down.png | Bin 0 -> 145 bytes workflow/public_html/lib/img/casa.png | Bin 0 -> 3642 bytes workflow/public_html/lib/img/close-grid.png | Bin 0 -> 1588 bytes workflow/public_html/lib/img/close.png | Bin 0 -> 248 bytes workflow/public_html/lib/img/close_.png | Bin 0 -> 1412 bytes workflow/public_html/lib/img/cmp-icons.png | Bin 0 -> 2452 bytes workflow/public_html/lib/img/copy_import.png | Bin 0 -> 10042 bytes .../public_html/lib/img/corona-delete.png | Bin 0 -> 387 bytes .../lib/img/corona-end-message.png | Bin 0 -> 3319 bytes workflow/public_html/lib/img/corona-end.png | Bin 0 -> 3242 bytes workflow/public_html/lib/img/corona-flow.png | Bin 0 -> 371 bytes .../lib/img/corona-gateway-exclusive.png | Bin 0 -> 3021 bytes .../lib/img/corona-gateway-inclusive.png | Bin 0 -> 3033 bytes .../lib/img/corona-gateway-parallel.png | Bin 0 -> 2968 bytes .../corona-intermediate-receive-message.png | Bin 0 -> 3929 bytes .../img/corona-intermediate-send-message.png | Bin 0 -> 3921 bytes .../lib/img/corona-intermediate.png | Bin 0 -> 3921 bytes workflow/public_html/lib/img/corona-lane.png | Bin 0 -> 2973 bytes workflow/public_html/lib/img/corona-pool.png | Bin 0 -> 2917 bytes .../public_html/lib/img/corona-settings.png | Bin 0 -> 1066 bytes .../lib/img/corona-start-message.png | Bin 0 -> 3563 bytes workflow/public_html/lib/img/corona-start.png | Bin 0 -> 3362 bytes workflow/public_html/lib/img/corona-task.png | Bin 0 -> 2887 bytes .../lib/img/corona-textfield-rename.png | Bin 0 -> 181 bytes workflow/public_html/lib/img/deactivate.png | Bin 0 -> 591 bytes workflow/public_html/lib/img/delete.png | Bin 0 -> 400 bytes workflow/public_html/lib/img/delete_rules.png | Bin 0 -> 363 bytes workflow/public_html/lib/img/dynaforms.gif | Bin 0 -> 402 bytes workflow/public_html/lib/img/edit-table.png | Bin 0 -> 667 bytes workflow/public_html/lib/img/edit.gif | Bin 0 -> 681 bytes workflow/public_html/lib/img/elbow-end.gif | Bin 0 -> 70 bytes workflow/public_html/lib/img/elbow-line.gif | Bin 0 -> 72 bytes .../public_html/lib/img/elbow-minus-nl.gif | Bin 0 -> 898 bytes workflow/public_html/lib/img/elbow-minus.gif | Bin 0 -> 908 bytes .../public_html/lib/img/elbow-plus-nl.gif | Bin 0 -> 900 bytes workflow/public_html/lib/img/elbow-plus.gif | Bin 0 -> 910 bytes workflow/public_html/lib/img/elbow.gif | Bin 0 -> 73 bytes workflow/public_html/lib/img/email.png | Bin 0 -> 733 bytes workflow/public_html/lib/img/engranaje.gif | Bin 0 -> 834 bytes workflow/public_html/lib/img/events.gif | Bin 0 -> 1167 bytes .../lib/img/examples/icon-save.png | Bin 0 -> 233 bytes workflow/public_html/lib/img/facebook-16.png | Bin 0 -> 629 bytes .../public_html/lib/img/fd-annotation.png | Bin 0 -> 1428 bytes .../lib/img/fd-application-form.png | Bin 0 -> 454 bytes .../public_html/lib/img/fd-arrow-left.png | Bin 0 -> 339 bytes .../public_html/lib/img/fd-arrow-right.png | Bin 0 -> 318 bytes .../public_html/lib/img/fd-audio-card.png | Bin 0 -> 879 bytes .../public_html/lib/img/fd-audio-mobile.png | Bin 0 -> 1602 bytes workflow/public_html/lib/img/fd-button.png | Bin 0 -> 1042 bytes workflow/public_html/lib/img/fd-calendar.png | Bin 0 -> 655 bytes workflow/public_html/lib/img/fd-checkbox.png | Bin 0 -> 3081 bytes .../public_html/lib/img/fd-checkgroup.png | Bin 0 -> 3343 bytes workflow/public_html/lib/img/fd-clear.png | Bin 0 -> 3069 bytes workflow/public_html/lib/img/fd-clearw.png | Bin 0 -> 1181 bytes workflow/public_html/lib/img/fd-close.png | Bin 0 -> 3038 bytes .../public_html/lib/img/fd-close_delete.png | Bin 0 -> 280 bytes workflow/public_html/lib/img/fd-closew.png | Bin 0 -> 2939 bytes workflow/public_html/lib/img/fd-datetime.png | Bin 0 -> 3316 bytes workflow/public_html/lib/img/fd-desktop.png | Bin 0 -> 421 bytes workflow/public_html/lib/img/fd-desktopw.png | Bin 0 -> 1311 bytes .../lib/img/fd-document-horizontal-text.png | Bin 0 -> 529 bytes .../lib/img/fd-document-text-image.png | Bin 0 -> 647 bytes workflow/public_html/lib/img/fd-dragdrop.png | Bin 0 -> 151 bytes workflow/public_html/lib/img/fd-dropdown.png | Bin 0 -> 2899 bytes workflow/public_html/lib/img/fd-export.png | Bin 0 -> 3125 bytes workflow/public_html/lib/img/fd-exportw.png | Bin 0 -> 1227 bytes .../public_html/lib/img/fd-file-upload.png | Bin 0 -> 18154 bytes workflow/public_html/lib/img/fd-file.png | Bin 0 -> 1322 bytes .../public_html/lib/img/fd-geomap-mobile.png | Bin 0 -> 1323 bytes workflow/public_html/lib/img/fd-grid.png | Bin 0 -> 1201 bytes workflow/public_html/lib/img/fd-h1.png | Bin 0 -> 2932 bytes workflow/public_html/lib/img/fd-h2.png | Bin 0 -> 1240 bytes workflow/public_html/lib/img/fd-help.png | Bin 0 -> 786 bytes workflow/public_html/lib/img/fd-hidden.png | Bin 0 -> 3205 bytes .../lib/img/fd-image-instagram.png | Bin 0 -> 704 bytes .../public_html/lib/img/fd-image-mobile.png | Bin 0 -> 1222 bytes workflow/public_html/lib/img/fd-image.png | Bin 0 -> 562 bytes workflow/public_html/lib/img/fd-image2.png | Bin 0 -> 1498 bytes workflow/public_html/lib/img/fd-import.png | Bin 0 -> 3140 bytes workflow/public_html/lib/img/fd-importw.png | Bin 0 -> 1227 bytes workflow/public_html/lib/img/fd-label.png | Bin 0 -> 541 bytes workflow/public_html/lib/img/fd-language.png | Bin 0 -> 3398 bytes workflow/public_html/lib/img/fd-languagew.png | Bin 0 -> 1516 bytes workflow/public_html/lib/img/fd-link.png | Bin 0 -> 1517 bytes workflow/public_html/lib/img/fd-magnifier.png | Bin 0 -> 321 bytes workflow/public_html/lib/img/fd-map.png | Bin 0 -> 804 bytes .../public_html/lib/img/fd-mobile_phone.png | Bin 0 -> 402 bytes .../public_html/lib/img/fd-mobile_phonew.png | Bin 0 -> 1302 bytes workflow/public_html/lib/img/fd-move.png | Bin 0 -> 259 bytes workflow/public_html/lib/img/fd-move2.png | Bin 0 -> 3181 bytes workflow/public_html/lib/img/fd-panel32.png | Bin 0 -> 1199 bytes .../public_html/lib/img/fd-panel_blank.png | Bin 0 -> 1138 bytes workflow/public_html/lib/img/fd-preview.png | Bin 0 -> 3205 bytes workflow/public_html/lib/img/fd-previeww.png | Bin 0 -> 1219 bytes workflow/public_html/lib/img/fd-qr-code.png | Bin 0 -> 314 bytes .../public_html/lib/img/fd-qrcode-mobile.png | Bin 0 -> 2053 bytes workflow/public_html/lib/img/fd-radio.png | Bin 0 -> 3428 bytes workflow/public_html/lib/img/fd-refresh.png | Bin 0 -> 800 bytes workflow/public_html/lib/img/fd-remove.png | Bin 0 -> 1345 bytes workflow/public_html/lib/img/fd-save.png | Bin 0 -> 3077 bytes workflow/public_html/lib/img/fd-savew.png | Bin 0 -> 1214 bytes .../lib/img/fd-signature-mobile.png | Bin 0 -> 1415 bytes workflow/public_html/lib/img/fd-subform.png | Bin 0 -> 1134 bytes workflow/public_html/lib/img/fd-submit.png | Bin 0 -> 1037 bytes workflow/public_html/lib/img/fd-suggest.png | Bin 0 -> 2936 bytes workflow/public_html/lib/img/fd-table.png | Bin 0 -> 563 bytes workflow/public_html/lib/img/fd-tablet.png | Bin 0 -> 360 bytes workflow/public_html/lib/img/fd-tabletw.png | Bin 0 -> 1279 bytes workflow/public_html/lib/img/fd-text.png | Bin 0 -> 3041 bytes .../public_html/lib/img/fd-text_heading_1.png | Bin 0 -> 532 bytes .../public_html/lib/img/fd-text_heading_2.png | Bin 0 -> 577 bytes .../public_html/lib/img/fd-text_signature.png | Bin 0 -> 524 bytes workflow/public_html/lib/img/fd-textarea.png | Bin 0 -> 3214 bytes workflow/public_html/lib/img/fd-toggle.png | Bin 0 -> 1025 bytes .../lib/img/fd-ui-button-default.png | Bin 0 -> 393 bytes workflow/public_html/lib/img/fd-ui-button.png | Bin 0 -> 348 bytes .../lib/img/fd-ui-check-boxes-list.png | Bin 0 -> 479 bytes .../public_html/lib/img/fd-ui-combo-box.png | Bin 0 -> 454 bytes .../public_html/lib/img/fd-ui-label-link.png | Bin 0 -> 633 bytes workflow/public_html/lib/img/fd-ui-label.png | Bin 0 -> 524 bytes workflow/public_html/lib/img/fd-ui-labels.png | Bin 0 -> 616 bytes .../public_html/lib/img/fd-ui-list-box.png | Bin 0 -> 415 bytes .../lib/img/fd-ui-radio-buttons-list.png | Bin 0 -> 518 bytes .../public_html/lib/img/fd-ui-text-area.png | Bin 0 -> 337 bytes .../lib/img/fd-ui-text-field-hidden.png | Bin 0 -> 242 bytes .../public_html/lib/img/fd-ui-text-field.png | Bin 0 -> 359 bytes .../public_html/lib/img/fd-video-mobile.png | Bin 0 -> 1422 bytes workflow/public_html/lib/img/fd-video.png | Bin 0 -> 621 bytes workflow/public_html/lib/img/folder-open.gif | Bin 0 -> 356 bytes workflow/public_html/lib/img/folder.gif | Bin 0 -> 351 bytes workflow/public_html/lib/img/form.gif | Bin 0 -> 990 bytes workflow/public_html/lib/img/form.png | Bin 0 -> 2779 bytes workflow/public_html/lib/img/gear.png | Bin 0 -> 1513 bytes workflow/public_html/lib/img/grid.jpg | Bin 0 -> 68246 bytes workflow/public_html/lib/img/grid_10.png | Bin 0 -> 982 bytes workflow/public_html/lib/img/grid_20.png | Bin 0 -> 980 bytes workflow/public_html/lib/img/grid_30.png | Bin 0 -> 986 bytes workflow/public_html/lib/img/help.png | Bin 0 -> 416 bytes workflow/public_html/lib/img/i_dept_med.png | Bin 0 -> 248 bytes workflow/public_html/lib/img/i_dept_small.png | Bin 0 -> 230 bytes workflow/public_html/lib/img/i_group_big.png | Bin 0 -> 1928 bytes workflow/public_html/lib/img/i_group_med.png | Bin 0 -> 619 bytes .../public_html/lib/img/i_group_med_white.gif | Bin 0 -> 123 bytes .../public_html/lib/img/i_group_med_white.png | Bin 0 -> 727 bytes .../public_html/lib/img/i_group_small.png | Bin 0 -> 579 bytes workflow/public_html/lib/img/i_us_med.png | Bin 0 -> 376 bytes workflow/public_html/lib/img/i_us_small.png | Bin 0 -> 298 bytes workflow/public_html/lib/img/i_us_white.png | Bin 0 -> 484 bytes workflow/public_html/lib/img/ico_full_scr.png | Bin 0 -> 315 bytes workflow/public_html/lib/img/ico_hiden2.png | Bin 0 -> 140 bytes workflow/public_html/lib/img/ico_hiden3.png | Bin 0 -> 134 bytes workflow/public_html/lib/img/ico_mor02.png | Bin 0 -> 233 bytes workflow/public_html/lib/img/ico_mor2.png | Bin 0 -> 351 bytes workflow/public_html/lib/img/ico_ok.png | Bin 0 -> 318 bytes workflow/public_html/lib/img/ico_save.png | Bin 0 -> 211 bytes workflow/public_html/lib/img/ico_show2.png | Bin 0 -> 150 bytes workflow/public_html/lib/img/ico_show3.png | Bin 0 -> 144 bytes .../public_html/lib/img/icon_SugarCRM.gif | Bin 0 -> 850 bytes workflow/public_html/lib/img/icons/arrow.png | Bin 0 -> 165 bytes .../lib/img/icons/arrow_expanded.png | Bin 0 -> 134 bytes workflow/public_html/lib/img/icons/cancel.png | Bin 0 -> 727 bytes .../public_html/lib/img/icons/elbow-minus.gif | Bin 0 -> 908 bytes .../public_html/lib/img/icons/elbow-plus.gif | Bin 0 -> 910 bytes workflow/public_html/lib/img/icons/error.png | Bin 0 -> 543 bytes workflow/public_html/lib/img/icons/folder.gif | Bin 0 -> 952 bytes workflow/public_html/lib/img/icons/help.png | Bin 0 -> 761 bytes .../public_html/lib/img/icons/information.png | Bin 0 -> 764 bytes workflow/public_html/lib/img/icons/leaf.gif | Bin 0 -> 945 bytes workflow/public_html/lib/img/leaf.gif | Bin 0 -> 945 bytes workflow/public_html/lib/img/linhori.png | Bin 0 -> 77 bytes workflow/public_html/lib/img/linkedin-16.png | Bin 0 -> 699 bytes workflow/public_html/lib/img/linver.png | Bin 0 -> 84 bytes workflow/public_html/lib/img/load_big.gif | Bin 0 -> 7364 bytes workflow/public_html/lib/img/load_small.gif | Bin 0 -> 1849 bytes workflow/public_html/lib/img/loading.gif | Bin 0 -> 37076 bytes .../lib/img/mafe-icons-s4e9dfa1250.png | Bin 0 -> 14669 bytes workflow/public_html/lib/img/mafe-sprite.png | Bin 0 -> 4489 bytes workflow/public_html/lib/img/mafe-tools.png | Bin 0 -> 22315 bytes .../public_html/lib/img/mafe-validate.png | Bin 0 -> 2439 bytes workflow/public_html/lib/img/mafe_sprite.png | Bin 0 -> 392691 bytes .../lib/img/mafe_sprite_monochrome.png | Bin 0 -> 400419 bytes .../public_html/lib/img/mafe_sprite_old.png | Bin 0 -> 59867 bytes .../lib/img/mafe_sprite_with_zoom.gif | Bin 0 -> 74105 bytes workflow/public_html/lib/img/mafe_tools.png | Bin 0 -> 18255 bytes workflow/public_html/lib/img/menuParent.gif | Bin 0 -> 854 bytes workflow/public_html/lib/img/moveUpDown.png | Bin 0 -> 1368 bytes workflow/public_html/lib/img/moveUpDown3.png | Bin 0 -> 191 bytes workflow/public_html/lib/img/msk_us.png | Bin 0 -> 1138 bytes .../public_html/lib/img/object_permission.gif | Bin 0 -> 163 bytes .../public_html/lib/img/pager-next-icon.png | Bin 0 -> 562 bytes .../lib/img/pager-previous-icon.png | Bin 0 -> 544 bytes workflow/public_html/lib/img/plus.png | Bin 0 -> 3062 bytes workflow/public_html/lib/img/plus_.png | Bin 0 -> 1471 bytes .../lib/img/pmui-sprite-s947c1ade08.png | Bin 0 -> 20291 bytes .../lib/img/pmui-sprite-sc9cf09aadd.png | Bin 0 -> 20276 bytes .../lib/img/pmui-sprite/arrow-down.png | Bin 0 -> 134 bytes .../lib/img/pmui-sprite/arrow-right.png | Bin 0 -> 165 bytes .../lib/img/pmui-sprite/checkbox-off.png | Bin 0 -> 194 bytes .../lib/img/pmui-sprite/checkbox-on.png | Bin 0 -> 580 bytes .../lib/img/pmui-sprite/delete-16.png | Bin 0 -> 2981 bytes .../lib/img/pmui-sprite/error-16.png | Bin 0 -> 727 bytes .../lib/img/pmui-sprite/error-64.png | Bin 0 -> 813 bytes .../lib/img/pmui-sprite/info-16.png | Bin 0 -> 764 bytes .../lib/img/pmui-sprite/info-64.png | Bin 0 -> 5242 bytes .../lib/img/pmui-sprite/question-16.png | Bin 0 -> 761 bytes .../lib/img/pmui-sprite/question-64.png | Bin 0 -> 7428 bytes .../lib/img/pmui-sprite/success-64.png | Bin 0 -> 1825 bytes .../lib/img/pmui-sprite/warning-16.png | Bin 0 -> 543 bytes .../lib/img/pmui-sprite/warning-64.png | Bin 0 -> 3338 bytes .../lib/img/pmui-sprite/window-close.png | Bin 0 -> 248 bytes .../public_html/lib/img/process_maker.png | Bin 0 -> 1789 bytes workflow/public_html/lib/img/refreshIcon.png | Bin 0 -> 3010 bytes workflow/public_html/lib/img/rules.png | Bin 0 -> 233 bytes workflow/public_html/lib/img/shape01.png | Bin 0 -> 171 bytes workflow/public_html/lib/img/shape02.png | Bin 0 -> 163 bytes workflow/public_html/lib/img/shape03.png | Bin 0 -> 441 bytes workflow/public_html/lib/img/shape04.png | Bin 0 -> 964 bytes workflow/public_html/lib/img/shape05.png | Bin 0 -> 431 bytes workflow/public_html/lib/img/shape06.png | Bin 0 -> 475 bytes workflow/public_html/lib/img/shape07.png | Bin 0 -> 405 bytes workflow/public_html/lib/img/shape08.png | Bin 0 -> 576 bytes workflow/public_html/lib/img/shape09.png | Bin 0 -> 459 bytes workflow/public_html/lib/img/shape10.png | Bin 0 -> 396 bytes .../public_html/lib/img/shapes-refresh.png | Bin 0 -> 1186 bytes .../public_html/lib/img/shapes-toogle.png | Bin 0 -> 1188 bytes workflow/public_html/lib/img/sharepoint.gif | Bin 0 -> 1652 bytes workflow/public_html/lib/img/sort_asc.png | Bin 0 -> 160 bytes .../public_html/lib/img/sort_asc_disabled.png | Bin 0 -> 148 bytes workflow/public_html/lib/img/sort_both.png | Bin 0 -> 201 bytes workflow/public_html/lib/img/sort_desc.png | Bin 0 -> 158 bytes .../lib/img/sort_desc_disabled.png | Bin 0 -> 146 bytes workflow/public_html/lib/img/spriteOld.png | Bin 0 -> 249064 bytes .../public_html/lib/img/startcoronahelp.png | Bin 0 -> 4620 bytes workflow/public_html/lib/img/step.png | Bin 0 -> 1141 bytes workflow/public_html/lib/img/steps.png | Bin 0 -> 239 bytes workflow/public_html/lib/img/subProcess.png | Bin 0 -> 504 bytes workflow/public_html/lib/img/subm.png | Bin 0 -> 1826 bytes workflow/public_html/lib/img/submit.png | Bin 0 -> 1505 bytes workflow/public_html/lib/img/suggest.png | Bin 0 -> 1283 bytes workflow/public_html/lib/img/table.png | Bin 0 -> 6464 bytes workflow/public_html/lib/img/tracker.gif | Bin 0 -> 1174 bytes workflow/public_html/lib/img/trigger.png | Bin 0 -> 4707 bytes .../public_html/lib/img/triggerContent.png | Bin 0 -> 16983 bytes .../public_html/lib/img/triggerWizard.png | Bin 0 -> 24849 bytes workflow/public_html/lib/img/tumblr-16.png | Bin 0 -> 701 bytes workflow/public_html/lib/img/twitter-16.png | Bin 0 -> 741 bytes workflow/public_html/lib/img/users.png | Bin 0 -> 1145 bytes workflow/public_html/lib/img/zimbra.gif | Bin 0 -> 2037 bytes .../public_html/lib/js/jquery-1.10.2.min.js | 4 + .../lib/js/jquery-ui-1.10.3.custom.min.js | 7 + .../public_html/lib/js/jquery.layout.min.js | 142 + .../lib/js/mafe-4d5932e1-7aa8f9de.js | 148841 +++++++++++++++ workflow/public_html/lib/js/modernizr.js | 4 + workflow/public_html/lib/js/restclient.min.js | 1 + workflow/public_html/lib/js/underscore-min.js | 5 + workflow/public_html/lib/js/wz_jsgraphics.js | 1108 + workflow/public_html/lib/lib-mafe.log | 30 + workflow/public_html/lib/lib-pmdynaform.log | 30 + workflow/public_html/lib/lib-pmui.log | 30 + workflow/public_html/lib/mafe/designer.min.js | 35237 ++++ workflow/public_html/lib/mafe/mafe.min.css | 7627 + workflow/public_html/lib/mafe/mafe.min.js | 45813 +++++ workflow/public_html/lib/pmUI/pmui.min.css | 2727 + workflow/public_html/lib/pmUI/pmui.min.js | 51584 +++++ .../lib/pmdynaform/build/appBuild.js | 337 + .../lib/pmdynaform/build/appBuild2.js | 118 + .../lib/pmdynaform/build/codemirror.css | 309 + .../lib/pmdynaform/build/codemirror.js | 8029 + .../pmdynaform/build/codemirrorFormatting.js | 108 + .../lib/pmdynaform/build/codemirrorMode.js | 692 + .../pmdynaform/build/css/PMDynaform-rtl.css | 1827 + .../lib/pmdynaform/build/css/PMDynaform.css | 3199 + .../SourceSansPro-Bold-webfont.eot | Bin 0 -> 31682 bytes .../SourceSansPro-Bold-webfont.svg | 173 + .../SourceSansPro-Bold-webfont.ttf | Bin 0 -> 31388 bytes .../SourceSansPro-Bold-webfont.woff | Bin 0 -> 18424 bytes .../SourceSansPro-Regular-webfont.eot | Bin 0 -> 32242 bytes .../SourceSansPro-Regular-webfont.svg | 173 + .../SourceSansPro-Regular-webfont.ttf | Bin 0 -> 31936 bytes .../SourceSansPro-Regular-webfont.woff | Bin 0 -> 18996 bytes .../lib/pmdynaform/build/data/sample1.json | 823 + .../lib/pmdynaform/build/data/sample10.json | 561 + .../lib/pmdynaform/build/data/sample11.json | 675 + .../lib/pmdynaform/build/data/sample12.json | 88 + .../lib/pmdynaform/build/data/sample2.json | 644 + .../lib/pmdynaform/build/data/sample3.json | 375 + .../lib/pmdynaform/build/data/sample4.json | 481 + .../lib/pmdynaform/build/data/sample5.json | 491 + .../lib/pmdynaform/build/data/sample6.json | 328 + .../lib/pmdynaform/build/data/sample7.json | 690 + .../lib/pmdynaform/build/data/sample8.json | 715 + .../lib/pmdynaform/build/data/sample9.json | 80 + .../lib/pmdynaform/build/form.html | 2052 + .../lib/pmdynaform/build/form2.html | 2047 + .../lib/pmdynaform/build/formRest.html | 2144 + .../lib/pmdynaform/build/gridRest.html | 2154 + .../lib/pmdynaform/build/img/add-row.png | Bin 0 -> 369 bytes .../lib/pmdynaform/build/img/audio.png | Bin 0 -> 3061 bytes .../lib/pmdynaform/build/img/compress.png | Bin 0 -> 2785 bytes .../lib/pmdynaform/build/img/doc.png | Bin 0 -> 2845 bytes .../lib/pmdynaform/build/img/file.png | Bin 0 -> 2105 bytes .../lib/pmdynaform/build/img/geoMap.jpg | Bin 0 -> 130044 bytes .../lib/pmdynaform/build/img/image.png | Bin 0 -> 2580 bytes .../lib/pmdynaform/build/img/loading.gif | Bin 0 -> 37076 bytes .../lib/pmdynaform/build/img/logow.png | Bin 0 -> 6383 bytes .../lib/pmdynaform/build/img/pdf.png | Bin 0 -> 2799 bytes .../lib/pmdynaform/build/img/ppt.png | Bin 0 -> 2577 bytes .../lib/pmdynaform/build/img/print-icon.png | Bin 0 -> 1800 bytes .../lib/pmdynaform/build/img/trash.png | Bin 0 -> 1538 bytes .../lib/pmdynaform/build/img/txt.png | Bin 0 -> 2387 bytes .../lib/pmdynaform/build/img/up.png | Bin 0 -> 2251 bytes .../lib/pmdynaform/build/img/video.png | Bin 0 -> 2286 bytes .../lib/pmdynaform/build/img/xls.png | Bin 0 -> 2767 bytes .../lib/pmdynaform/build/index.html | 66 + .../lib/pmdynaform/build/js/PMDynaform.js | 29653 +++ .../lib/pmdynaform/build/pmdynaform.html | 2025 + .../pmdynaform/libs/animate-css/animate.css | 3623 + .../pmdynaform/libs/backbone/backbone-min.js | 1 + .../css/bootstrap-3.3.6.min.css | 6 + .../bootstrap-3.1.1/css/bootstrap-theme.css | 347 + .../css/bootstrap-theme.css.map | 1 + .../css/bootstrap-theme.min.css | 7 + .../libs/bootstrap-3.1.1/css/bootstrap.css | 5785 + .../bootstrap-3.1.1/css/bootstrap.css.map | 1 + .../bootstrap-3.1.1/css/bootstrap.min.css | 7 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes .../libs/bootstrap-3.1.1/js/bootstrap.js | 1951 + .../libs/bootstrap-3.1.1/js/bootstrap.min.js | 6 + .../bootstrap-notify.js | 350 + .../bootstrap-notify.min.js | 2 + .../lib/pmdynaform/libs/custom/custom.css | 140 + .../css/dataTables.bootstrap.min.css | 1 + .../datatable/dataTables.bootstrap.min.js | 9 + .../datatable/dataTables.responsive.min.js | 23 + .../libs/datatable/jquery.dataTables.js | 15212 ++ .../datatable/responsive.bootstrap.min.js | 7 + .../datepicker/bootstrap-datetimepicker.css | 5 + .../datepicker/bootstrap-datetimepicker.js | 2 + .../font-awesome-4.6.3/css/font-awesome.css | 2199 + .../css/font-awesome.min.css | 4 + .../font-awesome-4.6.3/fonts/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome-webfont.svg | 685 + .../fonts/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes .../libs/fonts/css/font-awesome.css | 2086 + .../libs/fonts/css/font-awesome.min.css | 4 + .../libs/fonts/fonts/FontAwesome.otf | Bin 0 -> 109688 bytes .../libs/fonts/fonts/fontawesome-webfont.eot | Bin 0 -> 70807 bytes .../libs/fonts/fonts/fontawesome-webfont.svg | 655 + .../libs/fonts/fonts/fontawesome-webfont.ttf | Bin 0 -> 142072 bytes .../libs/fonts/fonts/fontawesome-webfont.woff | Bin 0 -> 83588 bytes .../fonts/fonts/fontawesome-webfont.woff2 | Bin 0 -> 66624 bytes .../lib/pmdynaform/libs/html5/html5.js | 8 + .../pmdynaform/libs/html5shiv/html5shiv.js | 8 + .../lib/pmdynaform/libs/jquery/jquery-1.11.js | 4 + .../libs/jqueryLayout/LayoutPanel.css | 224 + .../libs/jqueryLayout/jquery.layout.min.js | 142 + .../lib/pmdynaform/libs/moment/moment.min.js | 1 + .../pmdynaform/libs/respondjs/respond.min.js | 5 + .../libs/select2/select2-bootstrap.min.css | 7 + .../pmdynaform/libs/select2/select2.min.css | 1 + .../pmdynaform/libs/select2/select2.min.js | 2 + .../lib/pmdynaform/libs/sinon/sinon-1.17.3.js | 6437 + .../libs/underscore/underscore-1.8.3.js | 5 + workflow/public_html/lib/processmaker.log | 30 + .../public_html/lib/taskscheduler/css/app.css | 1 + .../lib/taskscheduler/css/chunk-vendors.css | 9 + .../public_html/lib/taskscheduler/favicon.ico | Bin 0 -> 4286 bytes .../public_html/lib/taskscheduler/index.html | 13 + .../public_html/lib/taskscheduler/js/app.js | 2 + .../lib/taskscheduler/js/app.js.map | 1 + .../lib/taskscheduler/js/chunk-vendors.js | 65 + .../lib/taskscheduler/js/chunk-vendors.js.map | 1 + workflow/public_html/lib/versions | 1 + 452 files changed, 405833 insertions(+) create mode 100644 workflow/public_html/lib/buildhash create mode 100644 workflow/public_html/lib/css/images/alfrescoIcon.png create mode 100644 workflow/public_html/lib/css/images/arrow-right-b.png create mode 100644 workflow/public_html/lib/css/images/arrow-right-d.png create mode 100644 workflow/public_html/lib/css/images/arrow-right-w.png create mode 100644 workflow/public_html/lib/css/images/backPM.png create mode 100644 workflow/public_html/lib/css/images/bg_dd.png create mode 100644 workflow/public_html/lib/css/images/custom.png create mode 100644 workflow/public_html/lib/css/images/editcopy.png create mode 100644 workflow/public_html/lib/css/images/elbow-end.gif create mode 100644 workflow/public_html/lib/css/images/elbow-line.gif create mode 100644 workflow/public_html/lib/css/images/elbow-minus-nl.gif create mode 100644 workflow/public_html/lib/css/images/elbow-minus.gif create mode 100644 workflow/public_html/lib/css/images/elbow-plus-nl.gif create mode 100644 workflow/public_html/lib/css/images/elbow-plus.gif create mode 100644 workflow/public_html/lib/css/images/elbow.gif create mode 100644 workflow/public_html/lib/css/images/pmui-sprite-s05eefa0ad7.png create mode 100644 workflow/public_html/lib/css/images/submenu.gif create mode 100644 workflow/public_html/lib/css/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_flat_55_fbec88_40x100.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 workflow/public_html/lib/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_217bc0_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_2e83ff_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_469bdd_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_6da8d5_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_cd0a0a_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_d8e7f3_256x240.png create mode 100644 workflow/public_html/lib/css/images/ui-icons_f9bd01_256x240.png create mode 100644 workflow/public_html/lib/css/mafe-4d5932e1-7aa8f9de.css create mode 100644 workflow/public_html/lib/fonts/Chivo/Chivo-Black.ttf create mode 100644 workflow/public_html/lib/fonts/Chivo/Chivo-BlackItalic.ttf create mode 100644 workflow/public_html/lib/fonts/Chivo/Chivo-Italic.ttf create mode 100644 workflow/public_html/lib/fonts/Chivo/Chivo-Regular.ttf create mode 100644 workflow/public_html/lib/fonts/Chivo/OFL.txt create mode 100644 workflow/public_html/lib/fonts/Montserrat/Montserrat-Bold.ttf create mode 100644 workflow/public_html/lib/fonts/Montserrat/Montserrat-Regular.ttf create mode 100644 workflow/public_html/lib/fonts/Montserrat/OFL.txt create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf create mode 100644 workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff create mode 100644 workflow/public_html/lib/img/15px-Edit.png create mode 100644 workflow/public_html/lib/img/PM.png create mode 100644 workflow/public_html/lib/img/TalendOpenStudio.gif create mode 100644 workflow/public_html/lib/img/_bg-blue.gif create mode 100644 workflow/public_html/lib/img/_editcopy.png create mode 100644 workflow/public_html/lib/img/activate.png create mode 100644 workflow/public_html/lib/img/add.png create mode 100644 workflow/public_html/lib/img/addtext.png create mode 100644 workflow/public_html/lib/img/alfrescoIcon.png create mode 100644 workflow/public_html/lib/img/ar_01.gif create mode 100644 workflow/public_html/lib/img/ar_dwn.png create mode 100644 workflow/public_html/lib/img/arrow-down.png create mode 100644 workflow/public_html/lib/img/arrow-grid.png create mode 100644 workflow/public_html/lib/img/arrow-up.png create mode 100644 workflow/public_html/lib/img/bg_dd.png create mode 100644 workflow/public_html/lib/img/bg_designer.gif create mode 100644 workflow/public_html/lib/img/bpmnProcessmaker.gif create mode 100644 workflow/public_html/lib/img/bpmn_sprite_with_zoom.png create mode 100644 workflow/public_html/lib/img/btn_create.png create mode 100644 workflow/public_html/lib/img/button.png create mode 100644 workflow/public_html/lib/img/calendar.png create mode 100644 workflow/public_html/lib/img/caret-down-w.png create mode 100644 workflow/public_html/lib/img/caret-down.png create mode 100644 workflow/public_html/lib/img/casa.png create mode 100644 workflow/public_html/lib/img/close-grid.png create mode 100644 workflow/public_html/lib/img/close.png create mode 100644 workflow/public_html/lib/img/close_.png create mode 100644 workflow/public_html/lib/img/cmp-icons.png create mode 100644 workflow/public_html/lib/img/copy_import.png create mode 100644 workflow/public_html/lib/img/corona-delete.png create mode 100644 workflow/public_html/lib/img/corona-end-message.png create mode 100644 workflow/public_html/lib/img/corona-end.png create mode 100644 workflow/public_html/lib/img/corona-flow.png create mode 100644 workflow/public_html/lib/img/corona-gateway-exclusive.png create mode 100644 workflow/public_html/lib/img/corona-gateway-inclusive.png create mode 100644 workflow/public_html/lib/img/corona-gateway-parallel.png create mode 100644 workflow/public_html/lib/img/corona-intermediate-receive-message.png create mode 100644 workflow/public_html/lib/img/corona-intermediate-send-message.png create mode 100644 workflow/public_html/lib/img/corona-intermediate.png create mode 100644 workflow/public_html/lib/img/corona-lane.png create mode 100644 workflow/public_html/lib/img/corona-pool.png create mode 100644 workflow/public_html/lib/img/corona-settings.png create mode 100644 workflow/public_html/lib/img/corona-start-message.png create mode 100644 workflow/public_html/lib/img/corona-start.png create mode 100644 workflow/public_html/lib/img/corona-task.png create mode 100644 workflow/public_html/lib/img/corona-textfield-rename.png create mode 100644 workflow/public_html/lib/img/deactivate.png create mode 100644 workflow/public_html/lib/img/delete.png create mode 100644 workflow/public_html/lib/img/delete_rules.png create mode 100644 workflow/public_html/lib/img/dynaforms.gif create mode 100644 workflow/public_html/lib/img/edit-table.png create mode 100644 workflow/public_html/lib/img/edit.gif create mode 100644 workflow/public_html/lib/img/elbow-end.gif create mode 100644 workflow/public_html/lib/img/elbow-line.gif create mode 100644 workflow/public_html/lib/img/elbow-minus-nl.gif create mode 100644 workflow/public_html/lib/img/elbow-minus.gif create mode 100644 workflow/public_html/lib/img/elbow-plus-nl.gif create mode 100644 workflow/public_html/lib/img/elbow-plus.gif create mode 100644 workflow/public_html/lib/img/elbow.gif create mode 100644 workflow/public_html/lib/img/email.png create mode 100644 workflow/public_html/lib/img/engranaje.gif create mode 100644 workflow/public_html/lib/img/events.gif create mode 100644 workflow/public_html/lib/img/examples/icon-save.png create mode 100644 workflow/public_html/lib/img/facebook-16.png create mode 100644 workflow/public_html/lib/img/fd-annotation.png create mode 100644 workflow/public_html/lib/img/fd-application-form.png create mode 100644 workflow/public_html/lib/img/fd-arrow-left.png create mode 100644 workflow/public_html/lib/img/fd-arrow-right.png create mode 100644 workflow/public_html/lib/img/fd-audio-card.png create mode 100644 workflow/public_html/lib/img/fd-audio-mobile.png create mode 100644 workflow/public_html/lib/img/fd-button.png create mode 100644 workflow/public_html/lib/img/fd-calendar.png create mode 100644 workflow/public_html/lib/img/fd-checkbox.png create mode 100644 workflow/public_html/lib/img/fd-checkgroup.png create mode 100644 workflow/public_html/lib/img/fd-clear.png create mode 100644 workflow/public_html/lib/img/fd-clearw.png create mode 100644 workflow/public_html/lib/img/fd-close.png create mode 100644 workflow/public_html/lib/img/fd-close_delete.png create mode 100644 workflow/public_html/lib/img/fd-closew.png create mode 100644 workflow/public_html/lib/img/fd-datetime.png create mode 100644 workflow/public_html/lib/img/fd-desktop.png create mode 100644 workflow/public_html/lib/img/fd-desktopw.png create mode 100644 workflow/public_html/lib/img/fd-document-horizontal-text.png create mode 100644 workflow/public_html/lib/img/fd-document-text-image.png create mode 100644 workflow/public_html/lib/img/fd-dragdrop.png create mode 100644 workflow/public_html/lib/img/fd-dropdown.png create mode 100644 workflow/public_html/lib/img/fd-export.png create mode 100644 workflow/public_html/lib/img/fd-exportw.png create mode 100644 workflow/public_html/lib/img/fd-file-upload.png create mode 100644 workflow/public_html/lib/img/fd-file.png create mode 100644 workflow/public_html/lib/img/fd-geomap-mobile.png create mode 100644 workflow/public_html/lib/img/fd-grid.png create mode 100644 workflow/public_html/lib/img/fd-h1.png create mode 100644 workflow/public_html/lib/img/fd-h2.png create mode 100644 workflow/public_html/lib/img/fd-help.png create mode 100644 workflow/public_html/lib/img/fd-hidden.png create mode 100644 workflow/public_html/lib/img/fd-image-instagram.png create mode 100644 workflow/public_html/lib/img/fd-image-mobile.png create mode 100644 workflow/public_html/lib/img/fd-image.png create mode 100644 workflow/public_html/lib/img/fd-image2.png create mode 100644 workflow/public_html/lib/img/fd-import.png create mode 100644 workflow/public_html/lib/img/fd-importw.png create mode 100644 workflow/public_html/lib/img/fd-label.png create mode 100644 workflow/public_html/lib/img/fd-language.png create mode 100644 workflow/public_html/lib/img/fd-languagew.png create mode 100644 workflow/public_html/lib/img/fd-link.png create mode 100644 workflow/public_html/lib/img/fd-magnifier.png create mode 100644 workflow/public_html/lib/img/fd-map.png create mode 100644 workflow/public_html/lib/img/fd-mobile_phone.png create mode 100644 workflow/public_html/lib/img/fd-mobile_phonew.png create mode 100644 workflow/public_html/lib/img/fd-move.png create mode 100644 workflow/public_html/lib/img/fd-move2.png create mode 100644 workflow/public_html/lib/img/fd-panel32.png create mode 100644 workflow/public_html/lib/img/fd-panel_blank.png create mode 100644 workflow/public_html/lib/img/fd-preview.png create mode 100644 workflow/public_html/lib/img/fd-previeww.png create mode 100644 workflow/public_html/lib/img/fd-qr-code.png create mode 100644 workflow/public_html/lib/img/fd-qrcode-mobile.png create mode 100644 workflow/public_html/lib/img/fd-radio.png create mode 100644 workflow/public_html/lib/img/fd-refresh.png create mode 100644 workflow/public_html/lib/img/fd-remove.png create mode 100644 workflow/public_html/lib/img/fd-save.png create mode 100644 workflow/public_html/lib/img/fd-savew.png create mode 100644 workflow/public_html/lib/img/fd-signature-mobile.png create mode 100644 workflow/public_html/lib/img/fd-subform.png create mode 100644 workflow/public_html/lib/img/fd-submit.png create mode 100644 workflow/public_html/lib/img/fd-suggest.png create mode 100644 workflow/public_html/lib/img/fd-table.png create mode 100644 workflow/public_html/lib/img/fd-tablet.png create mode 100644 workflow/public_html/lib/img/fd-tabletw.png create mode 100644 workflow/public_html/lib/img/fd-text.png create mode 100644 workflow/public_html/lib/img/fd-text_heading_1.png create mode 100644 workflow/public_html/lib/img/fd-text_heading_2.png create mode 100644 workflow/public_html/lib/img/fd-text_signature.png create mode 100644 workflow/public_html/lib/img/fd-textarea.png create mode 100644 workflow/public_html/lib/img/fd-toggle.png create mode 100644 workflow/public_html/lib/img/fd-ui-button-default.png create mode 100644 workflow/public_html/lib/img/fd-ui-button.png create mode 100644 workflow/public_html/lib/img/fd-ui-check-boxes-list.png create mode 100644 workflow/public_html/lib/img/fd-ui-combo-box.png create mode 100644 workflow/public_html/lib/img/fd-ui-label-link.png create mode 100644 workflow/public_html/lib/img/fd-ui-label.png create mode 100644 workflow/public_html/lib/img/fd-ui-labels.png create mode 100644 workflow/public_html/lib/img/fd-ui-list-box.png create mode 100644 workflow/public_html/lib/img/fd-ui-radio-buttons-list.png create mode 100644 workflow/public_html/lib/img/fd-ui-text-area.png create mode 100644 workflow/public_html/lib/img/fd-ui-text-field-hidden.png create mode 100644 workflow/public_html/lib/img/fd-ui-text-field.png create mode 100644 workflow/public_html/lib/img/fd-video-mobile.png create mode 100644 workflow/public_html/lib/img/fd-video.png create mode 100644 workflow/public_html/lib/img/folder-open.gif create mode 100644 workflow/public_html/lib/img/folder.gif create mode 100644 workflow/public_html/lib/img/form.gif create mode 100644 workflow/public_html/lib/img/form.png create mode 100644 workflow/public_html/lib/img/gear.png create mode 100644 workflow/public_html/lib/img/grid.jpg create mode 100644 workflow/public_html/lib/img/grid_10.png create mode 100644 workflow/public_html/lib/img/grid_20.png create mode 100644 workflow/public_html/lib/img/grid_30.png create mode 100644 workflow/public_html/lib/img/help.png create mode 100644 workflow/public_html/lib/img/i_dept_med.png create mode 100644 workflow/public_html/lib/img/i_dept_small.png create mode 100644 workflow/public_html/lib/img/i_group_big.png create mode 100644 workflow/public_html/lib/img/i_group_med.png create mode 100644 workflow/public_html/lib/img/i_group_med_white.gif create mode 100644 workflow/public_html/lib/img/i_group_med_white.png create mode 100644 workflow/public_html/lib/img/i_group_small.png create mode 100644 workflow/public_html/lib/img/i_us_med.png create mode 100644 workflow/public_html/lib/img/i_us_small.png create mode 100644 workflow/public_html/lib/img/i_us_white.png create mode 100644 workflow/public_html/lib/img/ico_full_scr.png create mode 100644 workflow/public_html/lib/img/ico_hiden2.png create mode 100644 workflow/public_html/lib/img/ico_hiden3.png create mode 100644 workflow/public_html/lib/img/ico_mor02.png create mode 100644 workflow/public_html/lib/img/ico_mor2.png create mode 100644 workflow/public_html/lib/img/ico_ok.png create mode 100644 workflow/public_html/lib/img/ico_save.png create mode 100644 workflow/public_html/lib/img/ico_show2.png create mode 100644 workflow/public_html/lib/img/ico_show3.png create mode 100644 workflow/public_html/lib/img/icon_SugarCRM.gif create mode 100644 workflow/public_html/lib/img/icons/arrow.png create mode 100644 workflow/public_html/lib/img/icons/arrow_expanded.png create mode 100644 workflow/public_html/lib/img/icons/cancel.png create mode 100644 workflow/public_html/lib/img/icons/elbow-minus.gif create mode 100644 workflow/public_html/lib/img/icons/elbow-plus.gif create mode 100644 workflow/public_html/lib/img/icons/error.png create mode 100644 workflow/public_html/lib/img/icons/folder.gif create mode 100644 workflow/public_html/lib/img/icons/help.png create mode 100644 workflow/public_html/lib/img/icons/information.png create mode 100644 workflow/public_html/lib/img/icons/leaf.gif create mode 100644 workflow/public_html/lib/img/leaf.gif create mode 100644 workflow/public_html/lib/img/linhori.png create mode 100644 workflow/public_html/lib/img/linkedin-16.png create mode 100644 workflow/public_html/lib/img/linver.png create mode 100644 workflow/public_html/lib/img/load_big.gif create mode 100644 workflow/public_html/lib/img/load_small.gif create mode 100644 workflow/public_html/lib/img/loading.gif create mode 100644 workflow/public_html/lib/img/mafe-icons-s4e9dfa1250.png create mode 100644 workflow/public_html/lib/img/mafe-sprite.png create mode 100644 workflow/public_html/lib/img/mafe-tools.png create mode 100644 workflow/public_html/lib/img/mafe-validate.png create mode 100644 workflow/public_html/lib/img/mafe_sprite.png create mode 100644 workflow/public_html/lib/img/mafe_sprite_monochrome.png create mode 100644 workflow/public_html/lib/img/mafe_sprite_old.png create mode 100644 workflow/public_html/lib/img/mafe_sprite_with_zoom.gif create mode 100644 workflow/public_html/lib/img/mafe_tools.png create mode 100644 workflow/public_html/lib/img/menuParent.gif create mode 100644 workflow/public_html/lib/img/moveUpDown.png create mode 100644 workflow/public_html/lib/img/moveUpDown3.png create mode 100644 workflow/public_html/lib/img/msk_us.png create mode 100644 workflow/public_html/lib/img/object_permission.gif create mode 100644 workflow/public_html/lib/img/pager-next-icon.png create mode 100644 workflow/public_html/lib/img/pager-previous-icon.png create mode 100644 workflow/public_html/lib/img/plus.png create mode 100644 workflow/public_html/lib/img/plus_.png create mode 100644 workflow/public_html/lib/img/pmui-sprite-s947c1ade08.png create mode 100644 workflow/public_html/lib/img/pmui-sprite-sc9cf09aadd.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/arrow-down.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/arrow-right.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/checkbox-off.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/checkbox-on.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/delete-16.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/error-16.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/error-64.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/info-16.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/info-64.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/question-16.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/question-64.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/success-64.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/warning-16.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/warning-64.png create mode 100644 workflow/public_html/lib/img/pmui-sprite/window-close.png create mode 100644 workflow/public_html/lib/img/process_maker.png create mode 100644 workflow/public_html/lib/img/refreshIcon.png create mode 100644 workflow/public_html/lib/img/rules.png create mode 100644 workflow/public_html/lib/img/shape01.png create mode 100644 workflow/public_html/lib/img/shape02.png create mode 100644 workflow/public_html/lib/img/shape03.png create mode 100644 workflow/public_html/lib/img/shape04.png create mode 100644 workflow/public_html/lib/img/shape05.png create mode 100644 workflow/public_html/lib/img/shape06.png create mode 100644 workflow/public_html/lib/img/shape07.png create mode 100644 workflow/public_html/lib/img/shape08.png create mode 100644 workflow/public_html/lib/img/shape09.png create mode 100644 workflow/public_html/lib/img/shape10.png create mode 100644 workflow/public_html/lib/img/shapes-refresh.png create mode 100644 workflow/public_html/lib/img/shapes-toogle.png create mode 100644 workflow/public_html/lib/img/sharepoint.gif create mode 100644 workflow/public_html/lib/img/sort_asc.png create mode 100644 workflow/public_html/lib/img/sort_asc_disabled.png create mode 100644 workflow/public_html/lib/img/sort_both.png create mode 100644 workflow/public_html/lib/img/sort_desc.png create mode 100644 workflow/public_html/lib/img/sort_desc_disabled.png create mode 100644 workflow/public_html/lib/img/spriteOld.png create mode 100644 workflow/public_html/lib/img/startcoronahelp.png create mode 100644 workflow/public_html/lib/img/step.png create mode 100644 workflow/public_html/lib/img/steps.png create mode 100644 workflow/public_html/lib/img/subProcess.png create mode 100644 workflow/public_html/lib/img/subm.png create mode 100644 workflow/public_html/lib/img/submit.png create mode 100644 workflow/public_html/lib/img/suggest.png create mode 100644 workflow/public_html/lib/img/table.png create mode 100644 workflow/public_html/lib/img/tracker.gif create mode 100644 workflow/public_html/lib/img/trigger.png create mode 100644 workflow/public_html/lib/img/triggerContent.png create mode 100644 workflow/public_html/lib/img/triggerWizard.png create mode 100644 workflow/public_html/lib/img/tumblr-16.png create mode 100644 workflow/public_html/lib/img/twitter-16.png create mode 100644 workflow/public_html/lib/img/users.png create mode 100644 workflow/public_html/lib/img/zimbra.gif create mode 100644 workflow/public_html/lib/js/jquery-1.10.2.min.js create mode 100644 workflow/public_html/lib/js/jquery-ui-1.10.3.custom.min.js create mode 100644 workflow/public_html/lib/js/jquery.layout.min.js create mode 100644 workflow/public_html/lib/js/mafe-4d5932e1-7aa8f9de.js create mode 100644 workflow/public_html/lib/js/modernizr.js create mode 100644 workflow/public_html/lib/js/restclient.min.js create mode 100644 workflow/public_html/lib/js/underscore-min.js create mode 100644 workflow/public_html/lib/js/wz_jsgraphics.js create mode 100644 workflow/public_html/lib/lib-mafe.log create mode 100644 workflow/public_html/lib/lib-pmdynaform.log create mode 100644 workflow/public_html/lib/lib-pmui.log create mode 100644 workflow/public_html/lib/mafe/designer.min.js create mode 100644 workflow/public_html/lib/mafe/mafe.min.css create mode 100644 workflow/public_html/lib/mafe/mafe.min.js create mode 100644 workflow/public_html/lib/pmUI/pmui.min.css create mode 100644 workflow/public_html/lib/pmUI/pmui.min.js create mode 100644 workflow/public_html/lib/pmdynaform/build/appBuild.js create mode 100644 workflow/public_html/lib/pmdynaform/build/appBuild2.js create mode 100644 workflow/public_html/lib/pmdynaform/build/codemirror.css create mode 100644 workflow/public_html/lib/pmdynaform/build/codemirror.js create mode 100644 workflow/public_html/lib/pmdynaform/build/codemirrorFormatting.js create mode 100644 workflow/public_html/lib/pmdynaform/build/codemirrorMode.js create mode 100644 workflow/public_html/lib/pmdynaform/build/css/PMDynaform-rtl.css create mode 100644 workflow/public_html/lib/pmdynaform/build/css/PMDynaform.css create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf create mode 100644 workflow/public_html/lib/pmdynaform/build/css/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample1.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample10.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample11.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample12.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample2.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample3.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample4.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample5.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample6.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample7.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample8.json create mode 100644 workflow/public_html/lib/pmdynaform/build/data/sample9.json create mode 100644 workflow/public_html/lib/pmdynaform/build/form.html create mode 100644 workflow/public_html/lib/pmdynaform/build/form2.html create mode 100644 workflow/public_html/lib/pmdynaform/build/formRest.html create mode 100644 workflow/public_html/lib/pmdynaform/build/gridRest.html create mode 100644 workflow/public_html/lib/pmdynaform/build/img/add-row.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/audio.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/compress.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/doc.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/file.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/geoMap.jpg create mode 100644 workflow/public_html/lib/pmdynaform/build/img/image.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/loading.gif create mode 100644 workflow/public_html/lib/pmdynaform/build/img/logow.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/pdf.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/ppt.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/print-icon.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/trash.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/txt.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/up.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/video.png create mode 100644 workflow/public_html/lib/pmdynaform/build/img/xls.png create mode 100644 workflow/public_html/lib/pmdynaform/build/index.html create mode 100644 workflow/public_html/lib/pmdynaform/build/js/PMDynaform.js create mode 100644 workflow/public_html/lib/pmdynaform/build/pmdynaform.html create mode 100644 workflow/public_html/lib/pmdynaform/libs/animate-css/animate.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/backbone/backbone-min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap-3.3.6.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap-theme.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap-theme.css.map create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap-theme.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap.css.map create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/css/bootstrap.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.eot create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.svg create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.ttf create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/fonts/glyphicons-halflings-regular.woff create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/js/bootstrap.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-3.1.1/js/bootstrap.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-notify-3.1.3/bootstrap-notify.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/bootstrap-notify-3.1.3/bootstrap-notify.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/custom/custom.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/datatable/css/dataTables.bootstrap.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/datatable/dataTables.bootstrap.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/datatable/dataTables.responsive.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/datatable/jquery.dataTables.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/datatable/responsive.bootstrap.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/datepicker/bootstrap-datetimepicker.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/datepicker/bootstrap-datetimepicker.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/css/font-awesome.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/css/font-awesome.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/FontAwesome.otf create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/fontawesome-webfont.eot create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/fontawesome-webfont.svg create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/fontawesome-webfont.ttf create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/fontawesome-webfont.woff create mode 100644 workflow/public_html/lib/pmdynaform/libs/font-awesome-4.6.3/fonts/fontawesome-webfont.woff2 create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/css/font-awesome.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/css/font-awesome.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/FontAwesome.otf create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/fontawesome-webfont.eot create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/fontawesome-webfont.svg create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/fontawesome-webfont.ttf create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/fontawesome-webfont.woff create mode 100644 workflow/public_html/lib/pmdynaform/libs/fonts/fonts/fontawesome-webfont.woff2 create mode 100644 workflow/public_html/lib/pmdynaform/libs/html5/html5.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/html5shiv/html5shiv.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/jquery/jquery-1.11.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/jqueryLayout/LayoutPanel.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/jqueryLayout/jquery.layout.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/moment/moment.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/respondjs/respond.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/select2/select2-bootstrap.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/select2/select2.min.css create mode 100644 workflow/public_html/lib/pmdynaform/libs/select2/select2.min.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/sinon/sinon-1.17.3.js create mode 100644 workflow/public_html/lib/pmdynaform/libs/underscore/underscore-1.8.3.js create mode 100644 workflow/public_html/lib/processmaker.log create mode 100644 workflow/public_html/lib/taskscheduler/css/app.css create mode 100644 workflow/public_html/lib/taskscheduler/css/chunk-vendors.css create mode 100644 workflow/public_html/lib/taskscheduler/favicon.ico create mode 100644 workflow/public_html/lib/taskscheduler/index.html create mode 100644 workflow/public_html/lib/taskscheduler/js/app.js create mode 100644 workflow/public_html/lib/taskscheduler/js/app.js.map create mode 100644 workflow/public_html/lib/taskscheduler/js/chunk-vendors.js create mode 100644 workflow/public_html/lib/taskscheduler/js/chunk-vendors.js.map create mode 100644 workflow/public_html/lib/versions diff --git a/thirdparty/jsmin/jsmin.php b/thirdparty/jsmin/jsmin.php index a1fc36dcc..4985c6246 100644 --- a/thirdparty/jsmin/jsmin.php +++ b/thirdparty/jsmin/jsmin.php @@ -220,6 +220,10 @@ class JSMin { * @return bool */ protected function isAlphaNum($c) { + // Check if $c is null or not a string + if (!is_string($c) || strlen($c) === 0) { + return false; // Return false if $c is not a valid character + } return ord($c) > 126 || $c === '\\' || preg_match('/^[\w\$]$/', $c) === 1; } diff --git a/workflow/public_html/lib/buildhash b/workflow/public_html/lib/buildhash new file mode 100644 index 000000000..54f0119d6 --- /dev/null +++ b/workflow/public_html/lib/buildhash @@ -0,0 +1 @@ +4d5932e1-7aa8f9de \ No newline at end of file diff --git a/workflow/public_html/lib/css/images/alfrescoIcon.png b/workflow/public_html/lib/css/images/alfrescoIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a65ce4667ec70aba884232bd8924685655603eb5 GIT binary patch literal 1921 zcmV-{2Y&d8P)V;isSb?mjBwb$!?%Y+~{Od2r<|;H*LLv*Af_yW9csZ5A^XKq+ z7#W5lph9tX4W3?)GIaq0`Ievw9oJJZIGhSDL@*f3qLUJV_}e`UgJDmL?n)1VGuWz# z>@Yw2W`gkqJ`CdIHSvWQ8GcZm#s-D{!?XqxqtF%yDNjK=YFH&)uwK;LVBoBSF5(vU^ywQt?{Kyy>pES{P*``#OFrbhI@o@YU z4}E|_V)6u1}RNKG|B$I_&axAZeR~s;co#!(jImTJ~ zh9ajKVi~mf@U3##WK3%~KV_=kQ(-0~N1$m)XJ92o=b#dFG{@ADPV+&LLU1Q1AP6K& ziNGP_mut}zM1Kg0G%D=aQ3r<|hp%9E4%Z_k+gx**92~p8i+1U+eDXB$T8UeQN`=n& ztOlnCR4GM}Ht_KXUg*I;FPcKkQ=Y}9W%zk3yf*x?7t=HII|T~C&h_}sioe;e?4xTe zD07lR_4s0$yYHRSFIUh;iKtZg@<9;4{Sr|MNj04mvJor6&=tT_AK`8vcHRM>C!crW zfK|e-JN4f;9k*Ti8Lf|#+tebu=s2P_hSj>x@gH59JIcXnNXX-Y*}961x*AxrRn28t z&|JKZ$KOZWB6QpVk2f1K#gpI5?DZdU1RkR+3}P*`s%gfcG^E|ne-_y{o$2q1?48p? z$}*I+ot+EZ^S!_N{wBZ7?=giPJscF(MR z+sWvwm*)OL&3Kh9-UH;>vs}!8`SKSU)iQvA`D3u$isxE!S2Yx#HX>iZj`_3HfHDIk zko=@C`o^q2m_--nd|mky^88sUpxqYSSI0Llp0P;5G)t7kO_#;<7xaNId)H4ZSK0;pdu7jKy?Od-|e% zZe>MOzuMy3x4-Y1gdQU%oLDYJa(JEEGEdB|>bZ;)qAs%BPB$%q$7cH8Tq)2`y*}_r z_sF|5T7+@4oyAY0#)hSMuy*g)x^2Y%GQc!oN|qsu?Lppg^g??bu<(Y z3N_?pDkg&4uC>;>w%5McHF);;&_P3tp?oWlU_?E9`B03Uc%o@fQ^lPUkwnDVpjli~ znAW_-`-ev7LxR*)u_|FzMY2EHwYDk|OX<2nRK@T(G@rxT?%nh0@cFLccPNoaX|xLu z$mopY-N2!?+ABX@`-{o=BNwL6$I?-oZ1a~lHhEgAY^#JxX%;adJ`!2#juXU-it;P$rrrLq7x}@kl}{1)hwrAQB_UW4VsgGZkeGwwu-If1_BZI zD(8+x*7dB=zF7xF98A0tH;TlB#$|%9XJ30@`H!7SnGhl=?PR4^t+j1#ux}%Ub}JQ5 zrLOyYZ&q2q!?+L<&+sH8QJ=NOU|gWD^hMovu}P6&@?);_bu{jFspUE|Y>F;ZmKzM5 zOEtE;w)hUn)LMkS`QR1J4E4tj2I8GjJ^bymhoiCjBSTNsdlD{drZBF#Oq|VSkKabx zx`&SGN>7FJx){7=@{*N~?W-lt=!EV!!TRsp5CVW zCAxB(m+AkB{EDaB4Ptc30UnU49U-Rf;ywbVZx2x$+3xJoCsbpYi+QipC0%P@aj?(X zDTYh@kg^%3wwr{uGe!jT(a;N2_VoP+7I?18K9nrp3N7pkiha|skg`-C~dv5^hGU|9T5^L5KgC4ZYpv(8bU#qWylv{u~?vp zLOctIofLvNpDE}lb|Nn%9u7dNX!r4is4R{2ECoMY$p-PVOtfGyu|p_ue40`Qw5jr`6C96l2s90BTejl` zslBrxSe9Z2F|h*&nYzkS3C{CerL4b@ik5Wuty{>-O>H33#@% s-~HKZeE#-47~FYh6n+d!Z>}&K*O}STwb!TMWIKIWrqR^j-tRsA0~1#)jsO4v literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/arrow-right-d.png b/workflow/public_html/lib/css/images/arrow-right-d.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaf6617e60d62c2b314be77f087025ce95a23fb GIT binary patch literal 1049 zcmaJ=O=#0l9FOZZ$6yFfWbU$%$xyWUXjpf;;KbZVA3FrXIxU0_@4(~>ZhAxlJ-Ze$w4G1hniQS-Pq$yl5ZGeZ!kYAyh zARgvOCd33I%t<^zGb}~36vO(N08eu~6T+JxfxOvjp3jJhrY~egi6Vp+Pf_J^nJlxU zX%{Gl<2Z^AP=SCSA^gsQ0cF>3IHN5E5jcviSx_?#+*6cu<~)oNDAL^&bgM0EIL$Jl zf>Ew)Q4C3YDYbx-^na+Xx6uyFfW3JCDePnyEI?&|W6s+OYFvKQb7k>@4PKoX>;sk}HTgk!-lCnV?u!^GLh zDN&3^Sb+@+5iZ0gT3pdo=5=7e7FXTl#yWDnSFr8K?={)bU2nyw*9Ea7Vo+ zSM3~2q$8I?!BAdj|LSz>3XP9u(wVCVCUMQerIYzRM+($%h53 zE0IX_j*X4c`N(4JOTAXB_4cYyuhxIpU)~w1A9%CTH>liRS}N7PZ;#xlR;$0BTwEC< zFFbee_8j#c{Q336exXvS_(nz^(1X6=*?c~~?@{;W+Un{m?QFfi|6}LV+ZX<`>9kQj rF=2mPt1mAvA3nrh>stT3)zv+Ot=plU_g6M{yvLe~r^UyUv)BIs(l}Wh literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/arrow-right-w.png b/workflow/public_html/lib/css/images/arrow-right-w.png new file mode 100644 index 0000000000000000000000000000000000000000..d0cc4e4ae8adbaf19931c9ba9bd09577018310fc GIT binary patch literal 974 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 Lsy!-xVC4Tl=KsY; literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/bg_dd.png b/workflow/public_html/lib/css/images/bg_dd.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8006075b10ff2ecd422dbe674953315bc7e451 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTz!3HD`7q*rHDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MV6i}jv*DdlGd$XzrC!WV1jkQg9FKIY-|RzI~lnX{`~)M x-=<*f!5y$#CgAqtwl+3{>X6?HF7XK@Feq#fb4YKhJP0&|!PC{xWt~$(69B1{F%19! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/custom.png b/workflow/public_html/lib/css/images/custom.png new file mode 100644 index 0000000000000000000000000000000000000000..c6cf695756d9c687fc4d8b473cdd9749cf3c656c GIT binary patch literal 6443 zcmX9@2RzjOA3p1xeag6y&X&D0vd@ZSCE3oF)fHvWGqOo`$O;KrA)AnSS=kkm?4KRN z|8xG&>*c=Z9d?sydt?vP6&vy)J(NhBfs#0#lkN(V z^Oe}uRI+=r*PKR2Gd!`C*_xqy;o97r+E<_vMcPCm)o;069ca7>n6YtgeKYog-=1^L z`{9n3mQ|+&9B7W;uHbf3D&i}?ugGl&4(4CPHz5#SxvN%`$*mC&PY&*vEoi-jcc!n9 zY5qtMozqYx-DV3Lqqy*zBZGUw3G?ktG*K`%eF0%9CQ%^)|E0J^8&u#y87;@|-Zh8) zKT5$XqVe6WXCKS&y*%8uYCG?z4?92iisWGB;Y1V$6LNl-A@bMr9TNFKYMg3~h_D_N z56J%Rb^46;p*n`8#j@GE9TLmWmzm{=Q!gpNCQg(+yN%*}gv(LJa%$3D{MCq4e+e_G zCT2tFyiS+7y42G%Qb0les=r!{kHk35e&=k9jt{McTAlf$*_~CX0V9cqqhQLg-(~?h zmWsaWddQz-#MY~$Aw;4TCEiE#v>dSM)_I$23g(qk8L*qe+p`bhu+lOQX#_XCq>=_o z>+HOE{F+6RkN4}UYSNN?N~?96U7p{)`l8B(R?SN%9A`$?R!E-u+RsZ`MQwNPd7eradUJeDNHUR(?jVQ(*%q6Lqj8gmY4 zef?VR4&4JjRQ&atS+3Qr#|@_eKRd9bG^}zB&Hmrso76ZAnbtb>#9kA37%X|uB7$xY zCLkgw_q?60Q+!vPmxVgA%UZK~+Ep^Eyufy{!lLQ<<_RuH(sk;CbytM0qMI`ww>_X+ zjtEHRJIVgnq(kXVj>M3pWb6|kpC7F+!}Qz)Me-|z5UM3_xs$#OsJyVY6N`i9{qqO+ z1n>WX{Jdms5^rmwuj=&guR;LK=iH}YXYB!YfhGvOokE*&2~$DH&iQGXQMqZI^F$~~ zd)RvcG+|e}Hf*3;V8G`6h?4{pRS$P^pPiV!o%U<#CySq>IMfHTq#l27_Mu=5?HpUx z$&vHf{nb~XL6B(pu4%|eFSgN4ePe1QnHDzj?RK^lQRtEcQqW_DujUe=V~8Np)R0!EsJx;H~SlIDhj|6hz_v1R4t z`T-Xg$t7-E$gw8$F2U3a!1AK?#4@zGlM&dTrBq3rkZ5ae-OB~-ELmrFVDXn9ba9?7 zyI^)x{#*sBW&pv$gTk`^9T({tCIc74eJ+>g%^X|9tI4 z!9}|Mlf&)Fp+b?cP^C$01X_=2EBX>_DnAvl3;!?7`IfAA)xA-)UW8%hIk~wRnlH3_ z_M(Wp#wVpDcbk#^fAfYMs+#w7JZi>P_beJPIKDDj5lSLTI5FJY!{aU<14$fjd_$G> z>{TLut>EDzfpqGxl~7{oeZtZ!B68Ir(2WJZs63UrIko z8{=71Kq+Ln{<@>5X>b2uD`&`0(YNhiuOU=kn3fxrO(42fJUqNMrmAdvYLZ}Yzo~pY25wKIxQyg9bZDPgNw^uMIMj(kdYy;UvZF-a&)>LFCBTf zljq_Q5n94hlSrvW1cNOd(ky$cnaq7JQ{vHFL;fXbIVyA?%$0P43zhm*Ny7kBHm>Pe z=DTT9wfKb=l3!3zR8(5J;&HWepTWoLqN7D^eAR_1Lr)od?~z+vw@sC?KtPbL!#*)| zD~&S-|2CWXgOGOBBoqmxC_^<)kmSlYpRGpwfmA`Wj~nIne}*HUmE6Y^kQZQ?F1E1t zkL!}Q28|W{)mh|yy_DwAD!yBP=Pr?_ajvGn?hGTl%1y^G{94B2_h82Tx7rzE_Wi&5 zDqG3lm3)8`s-{sGaIoT{>G_S`8&|o{4`zrvw(gG>Y6iCb*gm@Z(p(7ClLS|2;w2%E z_aKRPps1hR9I6jk<|0K0GcuaIw!gRd9es3*A_n~wZv2u#kdLpkA%D@Ujag<_8R|(B zL)!v*`RyO_g(~6m!@oQ55_*Q7r5$epZWugj{osDFPWJ6*&OXPrkH+4Dvzc*Wic>F` zh`%oD`2RJhCxM=p!#$A~q@kCv?;*Y6|6d2`4J2{ndkOL2((%odLcqgR%#s4al{I54 zd&i!imU?vo1KJ#I(Q;JR;0N%bY0mS^shTD-)-1_ofQ5!gL)o4=J2K9oifX? zgDc5>pTMJNLg8$GOjq%2e-DS%w>QB!s?jczM6CY#^XJ2C*Fq=2`B|$IWXBzYTnxP~Dis(;od${to)s=+!{Vpmt%XZeH`pZ@wYV%s~M zWAQ<$plbT9PPVA+C}+!gQ5rG9=ue5$lZL4mO~i$c713hd>m(2@E#x(64Dx|I=+~L= ztTDHw@F2yu^VVeaFux-6431WTv3rLdZq0*Bu|G9>rIa zp7m@;f&_V%a9C~Gz$$(iHeF}m7%AxR6U!LRk@o{N98dlAn1RAS-u@;>iPoCT*iorq zp8DxxcMPMjr7Fyj4OQdN@^6>F5*e1L&7H}dmW%(s;W#j}LPCMrM zRn*dv8)(@djca7G$!8EAjro$JAky}*9>vq?&Tz#G8C24X$#o2pE>2P^=;%7C%Gkr> z9u+Du$YQ?A7Iu6l>s4VIp4fpF`Rk7uSkBWEi~3r0x8sdv0vuQ4YQ%sFICZXjx&N1N zq>O6SGQT_hca9RhMGHCK#-du;gmay#btFaT2+Z9@9a*Fge-{Qb5X^BJ@$W5S615p%8{gv+bt1oZU}5%l4d!5u zbuXE^VeiydG|bzQ?%D0Iec$*cpD;>j*qnQq=k3&GpD;td7`1Zs7xqg#s)S1?CvV@X zvM2o=u$puK()!6f%zuBR0J=y`uqwD2FFLM5973o{VMIhq%_5EYnXD^h-hf%?4A+$> zQ4$;c|2~daiw`d0@~!=>H$h4QkMYT%qxnXUm0_+cAxe(LlP(gesXDo>PDwgEFus(& zuqS+Vct(QtExUVhh64G8W2S`3WcS(WP@{Z&p87mwL}_vLR3T90Bm-{^U=x#ma^xha zhZWK+rfz%(2a|$=EcF4WYZF65>Pyk|6BBN3d0)Sk2eyqpsyU!LC~*1MuDQx@*7Ip*uoJC>Y*bwz$vp~z!`?4@)lo#KI%WNc!`8>6ftm>N4QioJ(5VRC&h zirrYa;K}!9HWesM;O4F5KA;dYGpTQUoZUQ(VO%(tu4uaDei;D|C+X`-SeEb`Gt=sJHA!aGd=8}=u3IWGrJz-&8VNMb< zGEfyc9T;i>BNkOPdp$~ShZuEyOs;0c@C#|okmt>EaueI3goGz@w*Aw(wmf%T2KENuUWg z7s`29I_GXIC7!&br6uyw_?1>U!y8h2PGBEk-8Oott+i-XcG@s=p{9BFv_k!YrvN#A z?pt#UU6C}xLJEO%V16HN9ULzLDV_vDJ7u=Dt<-PbUWhIGXV2XhMRB(vlbIZj$l$OJ8ZBM7Rre zZxoE6+l_@*q%$aA!Ml*0X)5hZ3HQ-&*F0gL|f6oO1_$#M%T!tPEEjS&aqMl*!bl zsQAN%EHc;MfR4m^PFf#7zzs{=6F5HGhyp1ROHYo5!RXk+34=Ac*}CAAC|y7~Kx0Sc zqu5}fUyE`1Y8)EzEHaMNINR7AAfJXC=H0zq_}_b6=s-?Y2nb>u7?E@C^|CFNGn+a^ z1~>IR8}mn;YTx#(4B&9M1l8ym5@k3aALmWLB`N)AIH6fgH>ge#BR+6Ya#XPfWbH7* z!R&0{h`U8P-T;H8WgyK$3B}%?rx1RXnwr{rXnJuD#diGk%uxU}HSdV)SpqhiMPstb zj3@ZaI=JMWDR8YbbuQc2Uu-==&D_1(4a@-@@t^Sbr8}p4ySuwKRh^x{LSC0;V0l_J zx}DH%BZ_+JL4Zin0<84ss)`a>xJ`P1fOX=vW--cZPju_VMXeu)~)U z=wRS)<`9O|*@q6Jl=a2Rpx@$dc=V2XB+efNf^BD-NC-yS?T za^cvbeDOV3m~QvIM|v zqWGBe3aE`fJ5F|>-02X?yf-yLE+A?P%)5oQ7YMq9Z%G=$ z%|W!7Zb)wV*d<22KtGnG1ITt58FA+VCVeReKrU6@!7R|9wd2)*y? zbpCA}xWH6+9aG`xj24V7O=xop?~#K}k|#2=v$M}O>qCJ)O%6D5k^uV6MPk<j(5*afipeW!v!b+pQZQ& z^%6AUt~aae#Qth19NZsevQ|_+?^^>NUGh+*|Bf1al2(yH7)A>B>8+V^%q4iV(-nix z{~hoB@Gh{rv>^O~*$M$C`>SIb@nKtV6fZnW(rpI#s@8z(mq=iSOYuuvY)6R2;wDE% zMrg^i6$CY3);@d&8LwbZ4`-d9u_xVel3*16SX)~Q&o?AgF_uixD)LuwBGnAi z<;(|lE+{A?^HqThhRGLTAc7e3fv`-aq>Mr*y-NPU)w+|f7j}|C|8{zBfR}IO?JxTK zm9bDNCJA2Q1l9-G+oWAekDhN^LVixRL6umgkXz;{-Ani|DZ%R*7!N*fZoI_pbd0?= zRZ}JUPa8o-qy77NBq|Tyv%CyAS==cRl?U=cjRXfr7YU{~t%KiL3^CoiiWgl^KvPRQ z!CBT+fd3i<2s+>U90jON9s>!sK~y+83e!)nSGJv>tXE$Amcq&H4T|IB?i)e1A^AWn zm|TK|6jJ-qveo~1cX^=gOi)7cpK)-*gDA-%MCBw<{%7Z7#k8oBcjRntDjWmM;S&lqJ=> zglEiEo`p|06dAhl;}ryH{jV-PRI~TASjo?kP}*Mo0v*{aA!N0w-{&alJ3J#7m#9>? z+uQjmmv)Rn8R5KsQ=(wy78LEs{Z0ySg-xENeXl@Go0v#u0aoRu%ZHVJ@GR2113oOD zLqt00P;)%*#moe<&4LPQ(<@_77kJ?qUU42r{EpLvt!kk0@&n6>b_{ATS6+-j(-V9g zA~myl>5(U9KPm@=7!d}!D$U8*&bfouKJdlmaD^q-xe$dk1AP3*rUFKs=dN807YO}M z4+<`by4}{P!JKZ>)%d{Whrh?azdK942@f9-a8O?lZCt5ZHlr^I6j*xRJ_X|0Ns8$o!mS^s z1sG!NF9I{P^MYqMQLrL|Hzsm9PPIivMO=WVZ_CQcRw@#VE%`ZVu+@ehZsN@nuo8ji z$Nvw7?|gC0y)>AO^XR)ql@UT^`Rvj+M#bHI%rBw_v0^9nCjqO;w^oDNJWo#_bLDRT zc+*(&&!qr#N^R}_kkrDQx|<+kJ6ksI9uI4=n_~SBeMKXOIX~I)>_-un%bpe=cQVPb u-YNwIW}Q!@yb>p!5HKmQ@@KR{(% z91K9a|NjLDAeR3i=d-dg{`>j+$M3&?feQbl>ShFCMuy)&;lCgZG6;x&gA4|$1qdJ( z9&XM$5nf(PW=1BN17~h9ym;}P;TO~;VB3If2NM+rBMn)GU%w!R{DT_y;oE-(fB<5N z3vjHeOmb)c1GN3)r>_h^X8;3;5o`bx6BEPTCvO94KS&2SK!NH30*D1gGf?msR1t^`Qt<;AdS8D12m6}= z>VFsp2>}EU3$o21TmQg98Du<^4~nS242Y@A0@*;l00G3ZSz%KR{cV!Q%gc;l>C|`)5v`y9W?p03+98#-LdpAOHXW M07*qoM6N<$f-s^ilmGw# literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/elbow-end.gif b/workflow/public_html/lib/css/images/elbow-end.gif new file mode 100644 index 0000000000000000000000000000000000000000..406a88dff55195c8f8fbb65c37a10280e9689e25 GIT binary patch literal 70 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01Cw}5e&gx43+Bx!j0#)d SwtMyY(nlWCo>_`ASOWlykQ)2| literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/elbow-line.gif b/workflow/public_html/lib/css/images/elbow-line.gif new file mode 100644 index 0000000000000000000000000000000000000000..e25ed03fb6cebb2a0f891c0730f50977246ddace GIT binary patch literal 72 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01CwM+e&gx43+Bx!j0#)d Tw)?qX<1KZol+K0jj11NQyrLT7 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/elbow-minus-nl.gif b/workflow/public_html/lib/css/images/elbow-minus-nl.gif new file mode 100644 index 0000000000000000000000000000000000000000..928779e92361aaebfe9446b236d95cb64256e443 GIT binary patch literal 898 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/elbow-minus.gif b/workflow/public_html/lib/css/images/elbow-minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98 GIT binary patch literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5duiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/elbow.gif b/workflow/public_html/lib/css/images/elbow.gif new file mode 100644 index 0000000000000000000000000000000000000000..201c413e388369bf82b1a1289baf47fa3cc06f40 GIT binary patch literal 73 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01Cvxse&gx43+Bx!j0#)d UwtMyYQa?4X6w5`|G{qRK0oEWJ9RL6T literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/pmui-sprite-s05eefa0ad7.png b/workflow/public_html/lib/css/images/pmui-sprite-s05eefa0ad7.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e815c96d63b12b20f17be17a0bfac62ae65d04 GIT binary patch literal 17803 zcmV)JK)b(*P)>8t5SnOMfiI z48!DL$;D!zKXCr*5Ee7OJb-08mdccr6t1n?#4r##q0HchwuNGmX=o8?g>E91ma8t`FoX0bp^|^X#~#gc7xq+ z2am@C2#7Btc=4jo5jjW{;P(K(U#M2AXXE>`@q2cZqVMs0uj5C5NKa4qwJQSZ>gov4 zS=iXeu+irc5U0}#*n>QHv3Ch%IB@Aj#L(wOiJ*%J(Q36iEHkn0nJ$-WZ*6VuGg!|D znVFg1lTJWYRaI|%cvhp)%)mw|EEWq7UhX3BA`!7JDM=(XL?qRVQUQ9sz7LYI5Q(^} zy1M$0NcO6XjEoac00LLw!|m8BPh%sJsgc;IsDP+vi5QpL1vW1SR<{=%*yBV6t6;#O zV!@zPfCfQgoq&Xf5Jh!R{ZvRQl9G~!<7a-xI{$@jc_ceK+j7DPsHmt&$A@>Q*BuTA zKfdKI`kUEmg}wDw*lKgbK^F%VUIuJ9f;k5HQxJz7p#$)FL4$a+l>pt<3=GgJVNj|8 z(hPd)^$;>hD(dU&i6|xh?T`3+61M5;+}zw9ZB9U0Sy?gm_&2DidXsshaU0&-Rs?;> zWQL_CC#-k)z^+t5vRa2gRFHpEgtaInPITT43ms17@T1Q zV{$UDD8-AHD3l0;!7vcp^J{r|`Ru&Byl>l#faAxHpNT)T7(r$d_;7_rlCZb79zL&e zz*d(6Qngx0OIATTBa#C+1U%qEkX|2}JmF31T^a@~f>U8hLMuQ8wI7rs886njpi5mX zT$W~rGqX}i{6kD94L_8|R4kui8*e8ak*Hosn1Ex)jt#@Hw;0EACW*H6BD-Bv-vFPM zH^MTD4~%*p6eRhpb|7F27AqEq#|u8r-{+_f`JNX%0sbA)9BOck>scJo!8sY;I%3T z9COsbtgfk$Y%m0dgy47R&}6=kZ9ltPw{AO|O#qH3s_7DbkcBpjWA}Cmi7PaZyLQ3g5o5S2kQx zl+Hg7cXOj%gHm)bXpjze7CPYh9mk>6>H)cLd9bc3?0^i78a}UfLy^7_M&zW1_zLJG zp=DJpIDGi3yL_a#KYzJ2=&@!?i6kO?yCgm;cw!Hr+D;&>ztAFV%is1P3?S^#IJ z8xjT{e)TtM;GZLl;NeY2VSBwp_A~sDz#*81Ci6|~m>vc-WF#9xyha?xqp>3|$CsbR zC7`6Fghb~)Y_MM1XtMQdYb>zM!tplS?Trqe-hXIdK8#4$Bk-0*u4GxBKq7BjeHbbo z-Y6uX9zo?uKEoGfR=A6|5lK>p^9Uf#_2(I2?T7!8l`CtryPAazeLMHpGIUJ{xAU*~a6`pJNh$Y+Z#PHu@wE z3{|kI3bnJFL9zGxHC2RK@+(1dT&_WdCz8j7`Z=)A?0^@xS3rr?9Uz3^$GsNj4$gx- zv<@IMT*hW6L9SK>6?RXU0S%I2$4=8Ll<-xB4emfvStZMRoPq??2XBc<0EU%-G4|EI zFz?Nc-q-ilPQE)hj*02q^g$pw8l~)*uXTFhp$%ow;Py(~U$S)!j&UbEw(&Updu$OZ z%*gLzkO(6(4Dju-hA2wcZ!_H}b-⪙40KnS^8l5jU*a}!Sp?Q_9XZ1+qY4c00f_h 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/submenu.gif b/workflow/public_html/lib/css/images/submenu.gif new file mode 100644 index 0000000000000000000000000000000000000000..427b9dda26e4c687e39b1b074cb78c3a6919a7d1 GIT binary patch literal 53 zcmZ?wbhEHbWM$xFXkcW}wF~(F|G(l-7DfgJMg|=QAOOiQF!8v^B`m-FEh#8RRfLPd F8URYm3@`uy literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_flat_0_aaaaaa_40x100.png b/workflow/public_html/lib/css/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..2399a7bb2c2ff02a8647cd29738873748a84d91c GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`URu+%j$3^BB{GBvd_1hUPo3=Gy3z1f7KAvZrIGp!Q0hP(P9d_WBh Mp00i_>zopr0J-8b&;S4c literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_flat_55_fbec88_40x100.png b/workflow/public_html/lib/css/images/ui-bg_flat_55_fbec88_40x100.png new file mode 100644 index 0000000000000000000000000000000000000000..bb07c67434861726804a4dddcf6bf1afa18fc7d4 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F$P6UUt$JVyq?iMILR^2p>EL%3lLT@(3p^r= zfwTu0yPeFo12XtMT^vI+&L<~Gur6-+#lXN6!N6E*)>aObQY~?fC`m~yNwrEYN(E93 zMh1q)x(1fI28JPqmR6>wR>r2f2If`<2Aba+ccW;?%}>cptHiA#VwEL3Py>UftDnm{ Hr-UW|0S__k literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_glass_75_d0e5f5_1x400.png b/workflow/public_html/lib/css/images/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..9923cafb77dbc524030efeaf69e546c7b7c5a1d0 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12XzNT^vI^j=w#>kdKj3=J?0=@27v6%;IVMUg1JcliIElxdYl6axRlf zzjoc!(_FUE@@3iW-UpIBAN=Qk@QpurwKhJKtwDjK>A`E8?p60quDJ!5u2r;lD_g}Z zoV~Vb=3H*wH!=D_yF(V8(VMzqOVPpQnp?N;GJIZCld^S(TIzDS*}~dvVf|)n|IgrS zQura8|6q%H3BUHj1fa`QOI#yLQW8s2t&)pUffR$0fuXUkfu*j2VThrnm8q$fv8k?s mxs`!|=J&?kC>nC}Q!>*kachWJWyucIz~JfX=d#Wzp$PyV4R_7} literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_glass_85_dfeffc_1x400.png b/workflow/public_html/lib/css/images/ui-bg_glass_85_dfeffc_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..be95f162d816d7071b7d9f4f7ced1399c3f29df7 GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12QIix;Tb-9DjR7k?RnHg!{+uf13{~G&Ln=`oO=hJOs{);)V=83A}=O}g86Gs>w%OA6 z;^IdBdxdlMKWE!C8<`)MX5lF!N|bSSl7T(*T68u(9+7( s)XLaI*TCG$z@WdOiyuWpZhlH;S|x4`|Lz)X25MmNboFyt=akR{0O?79A^-pY literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_glass_95_fef1ec_1x400.png b/workflow/public_html/lib/css/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..4070c9712950cc6c68458b0483094a81df5548b6 GIT binary patch literal 332 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png b/workflow/public_html/lib/css/images/ui-bg_inset-hard_100_f5f8f9_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..4170860f30b4f083da2aa0b3d31e6070dd01b6cb GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?szyu^`+!HJTQfx`y?k@kqfHUIz9iRwjfk$L9 zkoEv$x0Bg+Kt{Kxi(`n!`M2j4`56l(4m`ZSxACmnjSLe{^HyJjlgq5X-V)u{l&{P^ z%X3lxf?F&H&)xl9f8RLXagT!SPsP(+PN57B&g*}8mubDFWrn7*V&b_OH4DENDDH2Y zS*mhNaPyKKGj9m`>V8!FwPo{q&gl2Q=6(3kyMM#f`KJ`iKKRe%nw;SfpAoP;tTVUt zC)4+QGus1}jz56TQY~?fC`m~yNwrEYN(E93Mh1q)x(1fI28JPqmR6>wR>mf}2If`< j2K^0P{3sf7^HVa@DsgN0ch_h$Py>UftDnm{r-UW|7}0w% literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png b/workflow/public_html/lib/css/images/ui-bg_inset-hard_100_fcfdfd_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb62e89ee07d929bd5e3999a180b390b19b6210 GIT binary patch literal 292 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 E19GBNuK)l5 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-icons_2e83ff_256x240.png b/workflow/public_html/lib/css/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..84b601bf0f726bf95801da487deaf2344a32e4b8 GIT binary patch literal 4549 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 F{{S81aohj^ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-icons_469bdd_256x240.png b/workflow/public_html/lib/css/images/ui-icons_469bdd_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..5dff3f962cd744033b2aef575491451a8b2ce6a8 GIT binary patch literal 4549 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 F{{RRLc7^}| literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-icons_6da8d5_256x240.png b/workflow/public_html/lib/css/images/ui-icons_6da8d5_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f7809f8566cd0aaef9af00e7caeca9d3720cf1b0 GIT binary patch literal 4549 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 DTfr$v literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-icons_d8e7f3_256x240.png b/workflow/public_html/lib/css/images/ui-icons_d8e7f3_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..9b46228fb1e80406b2a9a65b694e5674494c2775 GIT binary patch literal 4549 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 DwY1D= literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/images/ui-icons_f9bd01_256x240.png b/workflow/public_html/lib/css/images/ui-icons_f9bd01_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..f1f0531ad5b02b7f891d84a6b6db6ce7290b65de GIT binary patch literal 4549 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 D=xKF{ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/css/mafe-4d5932e1-7aa8f9de.css b/workflow/public_html/lib/css/mafe-4d5932e1-7aa8f9de.css new file mode 100644 index 000000000..08ad39660 --- /dev/null +++ b/workflow/public_html/lib/css/mafe-4d5932e1-7aa8f9de.css @@ -0,0 +1,10734 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} + +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: -20px; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -30px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } + +.CodeMirror-hints { + position: absolute; + z-index: 10; + overflow: hidden; + list-style: none; + + margin: 0; + padding: 2px; + + -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); + box-shadow: 2px 3px 5px rgba(0,0,0,.2); + border-radius: 3px; + border: 1px solid silver; + + background: white; + font-size: 90%; + font-family: monospace; + + max-height: 20em; + overflow-y: auto; +} + +.CodeMirror-hint { + margin: 0; + padding: 0 4px; + border-radius: 2px; + white-space: pre; + color: black; + cursor: pointer; +} + +li.CodeMirror-hint-active { + background: #08f; + color: white; +} + +/** @class PMUI.panel.AccordionPanel */ +/** + * @var {color} + * The default background-color for AccordionPanel-header + */ +/** + * @var {color} + * The default background-color for AccordionPanel-body + */ +/** + * @var {color} + * The default background-color for AccordionPanel-body + */ +/** + * @var {color} + * The default background-color for AccordionPanel-header + */ +/** + * @var {color} + * The default background-color for AccordionItem-header + */ +/** + * @var {color} + * The default background-color for AccordionItem-header + */ +/** @class PMUI.ui.Button */ +/** + * @var {number} + * The font-size for the default button + */ +/** + * @var {color} + * The color for the default button + */ +/** + * @var {color} + * The background-color for the default button + */ +/** + * @var {number} + * The button-opacity for the default button + */ +/** + * @var {color} + * The button-opacity for the default button when the button is hover + */ +/** + * @var {color} + * The button-link for the default button + */ +/** + * @var {color} + * The button-link color for the default button when the button is hover + */ +/** + * @var {color} + * The button-background color for the default button when the button is disabled + */ +/** + * @var {color} + * The button-color for the default button when the button is disabled + */ +/** + * @var {color} + * The button-opacity for the default button when the button is disabled + */ +/** + * @var {color} + * The button-background color for the default button when the button is disabled and hover + */ +/** + * @var {color} + * The button-opacity for the default button when the button is disabled and hover + */ +/** @class PMUI.ui.Button */ +/** + * Creates a default pmui button. + * @param {class} $base base class + * @param {number} [$button_fontSize] font size + * @param {color} [$button_color] font color + * @param {button_backgroundColor} [$button_backgroundColor] background color + * @param {number} [$button_opacity] opacity + * @param {color} [$button-hover_opacity] button hover opacity + * @param {color} [$button-link_color] button link color + * @param {color} [$button-link-hover_color] button-link-hover_color + * @param {color} [$button-disabled_backgroundColor] button-disabled_backgroundColor + * @param {color} [$button-disabled_color] button-disabled_color + * @param {color} [$button-disabled_opacity] button-disabled_opacity + * @param {color} [$button-disabled-hover_backgroundColor] button-disabled-hover_backgroundColor + * @param {color} [$button-disabled-hover_opacity] button-disabled-hover_opacity + */ +/*@include font-face("SourceSansPro", font-files("SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf", "SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot", "SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff", "SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg"),"SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot"); +@include font-face("SourceSansProBold", font-files("SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf", "SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot", "SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff", "SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg"),"SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot");*/ +@font-face { + font-family: "Chivo"; + src: url('../fonts/Chivo/Chivo-Black.ttf?1608295698') format('truetype'), url('../fonts/Chivo/Chivo-BlackItalic.ttf?1608295698') format('truetype'), url('../fonts/Chivo/Chivo-Italic.ttf?1608295698') format('truetype'), url('../fonts/Chivo/Chivo-Regular.ttf?1608295698') format('truetype'); +} +@font-face { + font-family: "Montserrat"; + src: url('../fonts/Montserrat/Montserrat-Bold.ttf?1608295698') format('truetype'), url('../fonts/Montserrat/Montserrat-Regular.ttf?1608295698') format('truetype'); +} +.pmui-sprite-sprite, .pmui-sprite-arrow-down, .pmui-sprite-arrow-next, .pmui-sprite-arrow-previous, .pmui-sprite-arrow-right, .pmui-sprite-arrow-up, .pmui-sprite-delete-16, .pmui-sprite-error-64, .pmui-sprite-error, .pmui-sprite-grid-arrow-down, .pmui-sprite-grid-arrow-up, .pmui-sprite-help, .pmui-sprite-info-64, .pmui-sprite-information, .pmui-sprite-question-64, .pmui-sprite-success-64, .pmui-sprite-warning-64, .pmui-sprite-warning, .pmui-sprite-window-close, .pmui-accordion-item-closed, .pmui-accordion-item-expanded, .pmui-gridpanel-pagelink.pmui-gridpanel-nextbutton .pmui-icon, .pmui-gridpanel-pagelink.pmui-gridpanel-previousbutton .pmui-icon, .pmui-gridpanelcolumn.pmui-sortable.pmui-sort-asc .pmui-grid-sort-icon, .pmui-gridpanelcolumn.pmui-sortable.pmui-sort-desc .pmui-grid-sort-icon, .pmui-icon-help, .pmui-icon-info, .pmui-icon-error, .pmui-icon-warning, .pmui-messagewindow-icon-error, .pmui-messagewindow-icon-warning, .pmui-messagewindow-icon-info, .pmui-messagewindow-icon-success, .pmui-messagewindow-icon-confirm { + background-image: url('../img/pmui-sprite-s947c1ade08.png'); + background-repeat: no-repeat; +} + +.pmui-sprite-arrow-down { + background-position: 0 0; + height: 6px; + width: 11px; +} + +.pmui-sprite-arrow-next { + background-position: 0 -6px; + height: 13px; + width: 9px; +} + +.pmui-sprite-arrow-previous { + background-position: 0 -19px; + height: 13px; + width: 9px; +} + +.pmui-sprite-arrow-right { + background-position: 0 -32px; + height: 16px; + width: 16px; +} + +.pmui-sprite-arrow-up { + background-position: 0 -48px; + height: 6px; + width: 11px; +} + +.pmui-sprite-delete-16 { + background-position: 0 -54px; + height: 16px; + width: 16px; +} + +.pmui-sprite-error-64 { + background-position: 0 -70px; + height: 64px; + width: 64px; +} + +.pmui-sprite-error { + background-position: 0 -134px; + height: 16px; + width: 16px; +} + +.pmui-sprite-grid-arrow-down { + background-position: 0 -150px; + height: 6px; + width: 11px; +} + +.pmui-sprite-grid-arrow-up { + background-position: 0 -156px; + height: 6px; + width: 11px; +} + +.pmui-sprite-help { + background-position: 0 -162px; + height: 18px; + width: 18px; +} + +.pmui-sprite-info-64 { + background-position: 0 -180px; + height: 64px; + width: 64px; +} + +.pmui-sprite-information { + background-position: 0 -244px; + height: 16px; + width: 16px; +} + +.pmui-sprite-question-64 { + background-position: 0 -260px; + height: 64px; + width: 64px; +} + +.pmui-sprite-success-64 { + background-position: 0 -324px; + height: 64px; + width: 64px; +} + +.pmui-sprite-warning-64 { + background-position: 0 -388px; + height: 64px; + width: 64px; +} + +.pmui-sprite-warning { + background-position: 0 -452px; + height: 16px; + width: 16px; +} + +.pmui-sprite-window-close { + background-position: 0 -468px; + height: 14px; + width: 18px; +} + +/* Title assignment */ +.mafe-designer-assigment-title { + left: 15px !important; + font-weight: 700; + color: #2d3e50; + background: transparent; + margin-top: 15px; + text-align: left; +} + +.pmui-gridpanel.mafe-designer-assigment-grid input { + border: 1px solid #cdd2d5; +} + +.pmui-gridpanel-tableContainer { + overflow: inherit !important; +} + +.mafe-gridPanel-smooth .mafe-button-delete { + border: 1px solid white; +} + +.pmui-form .pmui-formpanel { + text-align: initial; + overflow: inherit !important; +} + +a.mafe-button-show { + background-color: red; + color: white; + background-color: #7CC2F9; + padding: 0 15px; + text-transform: none; +} + +a.mafe-button-edit { + background-color: #1fbc99; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-edit:hover { + background: #1ba385; + opacity: 1; +} + +a.mafe-button-edit-assign-no-hover { + background-image: url(../img/plus_.png); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: inherit; + background-color: #3397e1; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-edit-assign { + background-image: url(../img/arrow-grid.png); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: inherit; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-edit-assign:hover { + background-image: url(../img/arrow-grid.png); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: #e0e0e0; + opacity: 1; +} + +a.mafe-button-editstep { + background-color: #1fbc99; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-editstep:hover { + background: #1ba385; + opacity: 1; +} + +a.mafe-button-condition-trigger { + line-height: 18px !important; + height: 40px !important; + top: -2px !important; +} + +a.mafe-button-properties { + background-color: white; + padding: 0 5px; + text-transform: none; + line-height: 28px !important; + height: 28px !important; + color: #3397e1; + border: 1px solid #3397e1; + -moz-box-shadow: inset 0 0 0 1px #3397e1; + -webkit-box-shadow: inset 0 0 0 1px #3397e1; + box-shadow: inset 0 0 0 1px #3397e1; +} + +a.mafe-button-properties:hover { + background: #3397e1; + color: #fff; + opacity: 1; +} + +a.mafe-button-delete { + background-color: #e4655f; + border: 1px solid #e14333; + padding: 0 4px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-delete:hover { + background: #e14333; + opacity: 1; +} + +a.mafe-button-delete-assign-no-hover { + background-image: url("../img/close_.png"); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: inherit; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-delete-assign { + background-image: url("../img/close-grid.png"); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: inherit; + padding: 0 12px; + text-transform: none; + line-height: 26px !important; + height: 26px !important; + font-size: 14px; +} + +a.mafe-button-delete-assign:hover { + background-image: url("../img/close-grid.png"); + background-position: 99% 50%; + background-repeat: no-repeat; + background-color: #e0e0e0; + opacity: 1; +} + +#gridUsers .mafe-button-edit { + border: none; +} + +#gridUsers .mafe-button-edit, #gridUsers .mafe-button-delete { + border: none; +} + +a.mafe-button-create { + background-color: #1fbc99; + border: 1px solid #1ba385; + float: right; + padding: 0 15px 0 38px; + background: #1fbc99 url(../img/ico_mor2.png) no-repeat 5px center; + font-size: 16px; + margin-top: 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + margin-right: 2px; +} + +a.mafe-button-create:hover { + background-color: #1ba385; + opacity: 1; +} + +.mafe-webentry-link { + width: 485px; + overflow: hidden; + white-space: nowrap; + display: inline-block; + text-overflow: ellipsis; +} + +/* +a.mafe-button-create:hover{ + background: #1ba385 url(../img/ico_mor2.png) no-repeat 95% center; + padding: 0 45px 0 15px; + opacity : 1; + background-color: #1ba385; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +}*/ +.mafe-gridPanel { + margin: 0 2% 0 2%; +} + +/* MAFE ASSIGMENT*/ +.mafe-tabpanel-assignment { + padding-top: 1%; +} + +/* MAFE ASSIGMENT*/ +.mafe-panel { + text-align: left; +} + +.mafe-panel-assignment-white { + vertical-align: top; + padding-left: 2%; +} + +.mafe-panel-assignment-smooth { + vertical-align: top; + background-color: #eaebed; + padding-left: 2%; +} + +.mafe-designer-assigment-grid { + left: 14px !important; +} + +.mafe-designer-assigment-grid .pmui-gridpanel-tableContainer { + border: 1px solid #e5e5e5; + margin: 0 6% 0 0%; +} + +.mafe-designer-assigment-grid .pmui-gridpanel-table { + min-height: 0em; + overflow: hidden; +} + +.mafe-designer-assigment-grid .pmui-gridpanelcell-content { + padding: 0 0 0 0; + font-size: 14px; +} + +/*.mafe-designer-assigment-grid .mafe-button-edit { + background-color: #FFFFFF; +}*/ +/*.mafe-designer-assigment-grid .mafe-button-delete { + background-color: #FFFFFF; + border: 1px solid white; +}*/ +/* +.mafe-designer-assigment-grid tr:hover .mafe-button-delete { + background-color: #e53d3d; +} + +.mafe-designer-assigment-grid tr:hover .mafe-button-edit{ + background-color: #19bd9b; +}*/ +.mafe-panel-assignment-smooth .mafe-designer-assigment-grid { + background-color: #eaebed; +} + +/*option selector */ +.mafe-assigment-buttons { + margin: 9px 0 2px 0; + text-align: left; +} + +.mafe-assigment-buttons .pmui-switch-buttonitem { + margin-right: 7px; + border-radius: 0 0 0 0; + font-size: 11px; + border: 0px solid rgba(45, 62, 82, 0.1); + background-color: rgba(45, 62, 82, 0.1); + padding: 8px 15px; +} + +.mafe-assigment-buttons .pmui-switch-buttonitem:hover { + border: 0px solid rgba(45, 62, 82, 0.1); + border-radius: 0 0 0 0; +} + +.mafe-assigment-buttons .pmui-switch-buttonitem-selected { + font-size: 11px; + margin-right: 7px; + border-radius: 0 0 0 0; + background: #2d3e50; + border: 0px solid #2d3e50; + padding: 8px 15px; +} + +.mafe-assigment-buttons .pmui-switch-buttonitem-selected:hover { + border: 0px solid #2d3e50; + border-radius: 0 0 0 0; +} + +.pmui-switch-buttonitem.pmui-switch-icon-all .pmui-switch-buttonitem-icon { + height: 22px; + display: inline-block; + vertical-align: middle; +} + +.pmui-switch-buttonitem-selected.pmui-switch-icon-all .pmui-switch-buttonitem-icon { + height: 22px; + display: inline-block; + vertical-align: middle; +} + +.pmui-switch-buttonitem.pmui-switch-icon-user .pmui-switch-buttonitem-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: 0px -173px; + width: 33px; + height: 22px; + display: inline-block; + vertical-align: middle; +} + +.pmui-switch-buttonitem-selected.pmui-switch-icon-user .pmui-switch-buttonitem-icon { + background: url(../img/i_us_white.png) no-repeat; + background-position: 0px 0px; + width: 33px; + height: 22px; + display: inline-block; + vertical-align: middle; +} + +.pmui-switch-buttonitem.pmui-switch-icon-group .pmui-switch-buttonitem-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: 0px -113px; + width: 33px; + height: 22px; + display: inline-block; + vertical-align: middle; + margin: 0 6px; +} + +.pmui-switch-buttonitem-selected.pmui-switch-icon-group .pmui-switch-buttonitem-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: 0px -91px; + width: 33px; + height: 22px; + display: inline-block; + vertical-align: middle; + margin: 0 6px; +} + +.mafe-grid-panel-empty { + background: url(../img/i_group_big.png) no-repeat center; + height: none; + text-align: center; + padding-top: 120px; + box-sizing: border-box; +} + +.mafe-grid-panel-empty span { + font-size: 18px; + color: #777777; + font-style: normal; +} + +/* STEPS SUPERVISOR*/ +.mafe-panel-smooth { + background-color: #eaebed; +} + +.mafe-gridPanel-smooth .pmui-gridpanel-tableContainer { + border: 1px solid #e5e5e5; + margin: 0 6% 0 0%; +} + +.mafe-gridPanel-smooth .pmui-gridpanel-table { + min-height: 0em; +} + +.mafe-gridPanel-smooth .pmui-gridpanelcell-content { + padding: 0 0 0 0; + font-size: 14px; +} + +.mafe-gridPanel-smooth .mafe-button-edit { + background-color: #FFFFFF; +} + +.mafe-gridPanel-smooth .mafe-button-delete { + background-color: #FFFFFF; +} + +.mafe-gridPanel-smooth tr:hover .mafe-button-delete { + background-color: #e53d3d; +} + +.mafe-gridPanel-smooth tr:hover .mafe-button-edit { + background-color: #19bd9b; +} + +.pmui-accordion-item-header { + background: #3397e1 !important; + color: white; + border-color: #2481c5; + border-top: 1px solid #2081C8 !important; + border-bottom: 1px solid #068CED !important; +} + +.pmui-accordion-panel-body { + border: 1px solid #eee; + min-height: 200px; +} + +.pmui-accordion-item-container { + border-left: none !important; + border-right: none !important; +} + +.mafe-border-panel { + border: 1px solid #aeb5b6; +} + +.mafe-hidden-fields-panel { + list-style-type: none; + border: 1px solid #C0C0C0; + height: 50px; + width: 100%; + margin-top: 2px; + bottom: 1px; + overflow: auto; +} + +.mafe-hidden-fields-panel > * { + margin: 5px 0px 5px 5px; + padding: 2px; + float: left; + height: 34px; + width: 90px; + text-align: center; +} + +.mafe-hidden-fields-panel-name { + font-size: 10px; + border: 2px dotted #C0C0C0; + height: 15px; + margin: 3px; + line-height: 150%; + width: 80px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.mafe-hidden-fields-panel-label { + font-size: 9px; +} + +.mafe-hidden-fields-panel-label-isSelected { + background-color: gainsboro; +} + +.pmui-gridpanel-footer { + top: 0px; + left: 10px; + width: 95%; + height: 13px; +} + +#gridUsers .pmui-gridpanel-footer, +#gridUserList .pmui-gridpanel-footer, +#gridUsersAD .pmui-gridpanel-footer, +#gridUserListAD .pmui-gridpanel-footer { + position: initial; + top: inherit; + left: initial; + width: 95%; + margin-top: inherit; + height: 13px; + padding-top: 1px !important; + position: relative; +} + +.pmui-gridpanel-footer { + padding: 10px 10px; +} + +#gridUserList .pmui-gridpanel-tableContainer, +#gridUsers .pmui-gridpanel-tableContainer, +#gridUsersAD .pmui-gridpanel-tableContainer, +#gridUserListAD .pmui-gridpanel-tableContainer { + height: 245px; +} + +.pmui-gridpanel-total { + vertical-align: super; +} + +.content_controls ul li { + padding: 1px 0 !important; +} + +.pmui-gridpanel-footer-dinamic .pmui-gridpanel-pager { + padding: 0px; +} + +#gridUsers .pmui-gridpanel-searchload.load { + left: 310px; + top: 15px; +} + +.pmui-field-control-table td { + padding: 0px 45px 0px 20px !important; +} + +#gridAcceptedValues .pmui-gridpanel-footer { + top: 0px; + left: 10px; + width: 89%; + height: 13px; + padding-top: 1px !important; +} + +.clearlooks2 .mceFocus .mceTop .mceCenter { + background: #3397e1 !important; + color: white !important; + text-align: left !important; + padding: 10px 15px !important; + cursor: move !important; + font-size: 14px !important; + border-bottom: 1px solid #e5e5e5 !important; +} + +.clearlooks2 .mceBottom .mceCenter { + left: 5px !important; + width: 100% !important; + background: none !important; + background-color: white !important; +} + +.clearlooks2 { + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4) !important; +} + +.clearlooks2 a.mceResizeW { + background-color: white !important; +} + +.clearlooks2 a.mceResizeE { + background-color: white !important; +} + +.clearlooks2 .mceResize { + background: none !important; +} + +.clearlooks2 .mceClose { + background: url("../img/mafe-tools.png") no-repeat !important; + background-position: 0 -966px !important; + width: 20px !important; + height: 20px !important; + margin-top: -1px !important; + margin-right: 3px !important; + opacity: inherit !important; +} + +.clearlooks2 .mceClose:hover { + background: url("../img/mafe-tools.png") no-repeat !important; + background-position: 0 -1156px !important; +} + +.clearlooks2 .mceFocus .mceMax { + visibility: hidden; +} + +.clearlooks2 .mceFocus .mceMed { + background: url(../img/mafe-tools.png) no-repeat !important; + background-position: 0 -966px !important; + width: 27px !important; + height: 20px !important; + margin-top: -3px !important; +} + +.pmui-window-close { + margin-top: 0px !important; + outline: 0; +} + +.pmui-window-close .button-icon { + background: url("../img/mafe-tools.png") no-repeat !important; + background-position: 0 -966px !important; + width: 20px !important; + height: 20px !important; + margin-top: 0px !important; + opacity: inherit !important; +} + +.pmui-window-close .button-icon:hover { + background: url("../img/mafe-tools.png") no-repeat !important; + background-position: 0 -1156px !important; +} + +.pmui-gridpanel-pagelink.disable, +.pmui-gridpanel-pagelink.pmui-gridpanel-nextbutton.disable, +.pmui-gridpanel-pagelink.pmui-gridpanel-previousbutton.disable { + background: #D6D2D2; + color: #ffffff; + cursor: default; +} + +.mafe-button-submenu-option { + padding: 10px; + cursor: pointer; +} + +#buttonCriteriaField { + background: black; +} + +.mafe-activity-task-red { + background-color: #ce0615; + border: 1px solid #9f0614; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.list-suggest-item :hover { + background-color: #e0e0e0; +} + +.list-suggest-item.single-label :hover { + background-color: initial; + color: white; +} + +#ActionsByEmailPanel #customGridPanelControls { + border: 1px solid #c0c0c0; +} + +#customGridPanel .pmui-formpanel { + padding: 3px !important; +} + +#customGridPanelControls #firstPanel { + float: left; +} + +#thirdPanel .pmui-button { + padding: 5px 10px 5px 10px; + width: 75px !important; +} + +#thirdPanel .pmui-button { + padding: 5px 10px 5px 10px; + width: 75px !important; +} + +.propertiesTask-accordionItem { + right: 6px; + position: absolute; + display: inline-block; +} + +.propertiesTask-accordionButton { + padding: 0px 7px 3px 7px; + border: 1px solid; + box-sizing: border-box; +} + +.propertiesTask-accordionButton:hover { + background: #2481c5; +} + +.mafe-button-delete.propertiesTask-accordionButton, +.mafe-button-edit.propertiesTask-accordionButton { + line-height: initial !important; + border-right: none; + cursor: pointer; +} + +.mafe-button-edit.propertiesTask-accordionButton { + border: none; + border-right: 1px solid; +} + +#stepsAssignAccordion .pmui-accordion-item-header { + cursor: move; +} + +#idAssignment .pmui-accordion-item-header, +#idRouting .pmui-accordion-item-header { + cursor: auto; +} + +#stepsAssignTree .pmui-treepanel-list { + width: 300px; +} + +#stepsAssignTree .pmui-treepanel-node-collapsed { + cursor: move; +} + +#stepsMainContainer .pmui-field-label, +#stepsMainContainer .pmui-textannotationfield { + padding: 0px 10px 0px 10px; +} + +#stepsMainContainer .mafe-gridPanel { + margin: 0px !important; + padding: 0px 10px 0px 10px; + border: 1px solid; + border-color: #c0c0c0; +} + +#stepsMainContainer .pmui-accordion-item-body { + padding: 3px; + box-sizing: border-box; +} + +#stepsAssignAccordion .pmui-accordion-item-title { + width: 400px; + text-transform: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +#mainContainer #collapse-button { + width: 160px !important; +} + +.mafe-activity-task { + background-color: white; + border: 2px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 12px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.mafe-activity-task-disabled { + background-color: white; + border: 2px solid #a5adb4; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 12px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; +} + +.pmui-pmactivity .pmui-label span { + color: black; +} + +.pmui-pmevent .pmui-label span { + color: black; +} + +.pmui-pmgateway .pmui-label span { + color: black; +} + +.pmui-pmpool .pmui-label > first-child { + color: black; +} + +.rotateText { + color: #3b4753; +} + +.mafe-activity-subprocess { + background-color: white; + border: 4px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 12px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; +} + +.mafe-activity-subprocess-disabled { + background-color: white; + border: 3px solid #a5adb4; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 12px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; +} + +.pmui-pmactivity .pmui-label span { + color: black; +} + +.pmui-pmdata .pmui-label span { + color: black; +} + +.pmui-connection .pmui-label span { + color: black; +} + +.mafe-intersection { + bacground-color: black; +} + +.dragConnectHandler { + background-color: #FAB606; + border-radius: 50%; +} + +/*.dragConnectHandler.ui-draggable-dragging { + background: green; + z-index:200; +} +*/ +.dropConnectHandler { + background-color: #3b4753; + border-radius: 50%; +} + +/*.dropConnectHandler.ui-draggable-dragging { + background: #0317FC; + z-index:200; +}*/ +.dropConnectHandler.ui-state-active { + background: white; +} + +.dropConnectHandler .ui-state-hover { + background: green; +} + +.pmui { + font-family: Chivo-regular, sans-serif; + font-size: inherit; + padding: 0; +} + +.pmui-window-modal { + position: fixed; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + left: 0; + top: 0; + z-index: 100; +} + +.pmui-window { + display: inline-block; + position: absolute; + background-color: #FFF; + -moz-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); + -webkit-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.4); +} + +.pmui-window-header { + background: #3397e1; + color: #FFF; + text-align: left; + padding: 10px 15px; + cursor: move; + font-size: 14px; + border-bottom: 1px solid #e5e5e5; +} + +.pmui-window-close.pmui-button { + border: none; + padding: 0px 6px; +} + +.pmui-window .pmui-window-close .button-icon:hover { + /* + //@include transform(scale(0.90)); + //@include opacity(0.7); + -moz-opacity:$window-close_hover-opacity; + -khtml-opacity:$window-close_hover-opacity; + opacity: $window-close_hover-opacity; + -ms-transform:$window-close_hover-transform; + -webkit-transform:$window-close_hover-transform; + -moz-transform:$window-close_hover-transform; + -o-transform:$window-close_hover-transform; + filter: alpha(opacity=70);*/ + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; + filter: alpha(opacity=50); +} + +.pmui.pmui-window-close { + /*background: none;*/ + padding: 0; + cursor: pointer; + background: 0 0; + border: 0; + -webkit-appearance: none; + margin: -3px 0 0 0; +} +.pmui.pmui-window-close .button-icon { + /*display: inline-block; + height: 15px; + width: 18px;*/ + float: right; + font-size: 24px; + font-weight: 700; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; + filter: alpha(opacity=20); + font-family: "Chivo"; +} +.pmui.pmui-window-close .button-label { + display: none; +} + +.pmui-window-title { + text-transform: none; + display: block; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-family: Chivo-regular, sans-serif; +} + +.pmui-window-body { + background-color: #FFF; + padding: 0px 0px; + overflow: auto; + text-align: inherit; + font-family: "SourceSansPro"; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.pmui-window-toolbar-top, +.pmui-window-toolbar-bottom { + overflow: hidden; + padding: 10px; + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.pmui-window .pmui-buttonpanel .pmui-button { + margin-left: 5px; + margin-right: 5px; +} + + /* + .pmui-window .pmui-buttonpanel .pmui-link{ + margin-left:3.5px; + margin-right:3.5px; + padding: initial; + font-size : $window-panelButtons_fontSize; + } + .pmui-window .pmui-buttonpanel .pmui-textlabel { + margin-left : 3.5px; + margin-right : 3.5px + }*/ +.pmui-window .pmui-buttonpanel { + padding: 10px; + border-top: 1px solid #e5e5e5; +} + +.pmui-accordion-panel-header { + padding-top: 5px; + height: 25px; + background-color: #93c4ea; + text-align: center; + color: white; +} + +.pmui-accordion-panel-header span { + font-size: 14px; +} + +.pmui-accordion-panel-body { + border-top: 1px solid #c3d8e9; + border-bottom: 0px; + height: 357px; + width: auto; +} + +.pmui-accordion-panel-footer { + height: 0px; +} + +.pmui-accordion-panel-container { + overflow: auto; +} + +/* AccordionItem */ +.pmui-accordion-item-header { + background-color: #DFE8F6; + border-top: 1px solid #c3d8e9; + border-bottom: 1px solid #c3d8e9; + overflow-wrap: break-word; + padding: 2px; + color: white; + font-size: 14px; +} + +.pmui-accordion-item-body { + overflow: auto; + background-color: white; +} + +.pmui-accordion-item-footer { + overflow: auto; + background-color: white; +} + +.pmui-accordion-item-container { + height: auto; + width: auto; + border-left: 1px solid #c3d8e9; + border-right: 1px solid #c3d8e9; +} + +.pmui-accordion-item-iconbase { + background-repeat: no-repeat; + display: inline-block; + height: 16px; + margin: 0 5px 0 5px; + width: 16px; +} + +.pmui-accordion-item-closed { + background-position: 0 -32px; + height: 16px; + width: 16px; + opacity: 0.6; + filter: alpha(opacity=60); +} + +.pmui-accordion-item-expanded { + background-position: 0 0; + height: 6px; + width: 11px; + opacity: 0.6; + filter: alpha(opacity=60); +} + +.pmui-accordion .pmui-accordion-item-iconContainer { + cursor: pointer; + padding: 5px; +} + +.pmui-button { + font-size: 14px; + display: inline-block; + text-decoration: none; + padding: 11px 35px; + /*@include border-radius($PMUI-DEFAULT-BORDER-RADIUS);*/ + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + -ms-border-radius: 2px; + -o-border-radius: 2px; + border-radius: 2px; + background-color: #1e91d1; + color: #FFF; + text-align: center; + -webkit-transition: all .5s; + -moz-transition: all .5s; + -ms-transition: all .5s; + -o-transition: all .5s; + transition: all .5s; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.pmui-button.pmui-error:hover { + background: #e14333; + opacity: 1; + opacity: 1; +} + +.pmui-button.pmui-warning:hover { + background: #db9d22; + opacity: 1; + opacity: 1; +} + +.pmui-button.pmui-success:hover { + background: #1ba385; + opacity: 1; + opacity: 1; +} + +.pmui-button.pmui-info:hover { + background: #3397e1; + opacity: 1; + opacity: 1; +} + +.pmui-button.pmui-link { + color: #383838; + text-decoration: underline; + background: none; + padding: initial; +} + +.pmui-button.pmui-success { + color: #fff; + background-color: #1fbc99; + border: 1px solid #1ba385; +} + +.pmui-button.pmui-info { + color: #fff; + background-color: #3397e1; + border: 1px solid #3397e1; +} + +.pmui-button.pmui-warning { + color: #fff; + background-color: #EE9B26; + border: 1px solid #d58512; +} + +.pmui-button.pmui-error { + color: #fff; + background-color: #e4655f; + border: 1px solid #e14333; +} + +.pmui-button.pmui-disabled { + background-color: #BEBEBE; + color: #F7F7F7; + opacity: 0.8; + pointer-events: none; + cursor: default; + border: 1px solid #AAA8A8; +} + +.button-disabled:hover { + opacity: 0.8; +} + +.pmui-button.pmui-link.pmui-disabled { + background-color: inherit; + color: #CCC8C8; + opacity: inherit; + border: inherit; +} + +.pmui-flashmessage { + color: #DDD; + background: rgba(0, 0, 0, 0.8); + padding: 12px; + text-align: center; +} + +.pmui-flashmessage.pmui-info { + background: rgba(30, 145, 209, 0.8); +} + +.pmui-flashmessage.pmui-error { + background: rgba(255, 0, 0, 0.8); +} + +.pmui-flashmessage.pmui-success { + background: rgba(0, 143, 97, 0.8); +} + +.pmui-flashmessage-list { + margin: 0; + -webkit-padding-start: 20px; + -moz-padding-start: 20px; +} + +.pmui-optionsselectorfield a { + text-decoration: none; +} + +.pmui-switch-buttonitem { + background-color: #ebebeb; + border: 1px solid #d3d3d3; + color: #555555; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + display: inline-block; + position: relative; + padding: 5px 10px 5px 10px; + line-height: normal; + cursor: pointer; + margin: 0em; + vertical-align: middle; + text-align: center; + text-transform: none; + text-indent: 0px; + text-shadow: none; + overflow: visible; + word-spacing: normal; + font: -webkit-small-control; + letter-spacing: normal; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.pmui-switch-buttonitem:hover { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border: 1px solid #d3d3d3; + color: #333; + background-color: #d8d8d8; + border-color: #adadad; +} + +.pmui-switch-buttonitem-selected { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border: 1px solid #3276B1; + background-color: #3276B1; + color: #ffffff; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + display: inline-block; + position: relative; + padding: 5px 10px 5px 10px; + line-height: normal; + cursor: pointer; + margin: 0em; + vertical-align: middle; + text-align: center; + text-transform: none; + text-indent: 0px; + text-shadow: none; + overflow: visible; + word-spacing: normal; + font: -webkit-small-control; + letter-spacing: normal; +} + +.pmui-switch-buttonitem-disabled { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + border: 1px solid #d3d3d3; + background-color: #e5e5e5; + color: #d3cfcf; + cursor: default; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + display: inline-block; + position: relative; + padding: 5px 10px 5px 10px; + line-height: normal; + cursor: pointer; + margin: 0em; + vertical-align: middle; + text-align: center; + text-transform: none; + text-indent: 0px; + text-shadow: none; + overflow: visible; + word-spacing: normal; + font: -webkit-small-control; + letter-spacing: normal; +} + +.pmui-menu { + font-family: Tahoma, Arial, Verdana; + font-size: 12px; + border: 1px solid #d5d8dc; + display: inline-block; + list-style: none; + background: #F0F0F0; + margin: 0; + padding: 0; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); +} + +.pmui-menuoption { + position: relative; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + -webkit-transition: all 0.3s; + transition: all 0.3s; +} + +.pmui-menuoption:hover { + background: #444; +} + +.pmui-menuoption.pmui-disabled:hover { + background: none; +} + +.pmui-menuoption-title { + display: block; + padding: 0.4em 0.6em; + text-decoration: none; + color: #2d3e50; +} + +.pmui-disabled .pmui-menuoption-title { + cursor: default; +} + +.pmui-menuoption-text { + line-height: 1.84em; + padding-right: 15px; + white-space: nowrap; +} + +.pmui-disabled .pmui-menuoption-text { + color: #bbb; +} + +.pmui-menuoption:hover > .pmui-menuoption-title { + color: #F0F0F0; +} + +.pmui-menuoption.pmui-father > .pmui-menuoption-title { + background: url(images/arrow-right-b.png) no-repeat right content-box; +} + +.pmui-menuoption.pmui-father:hover > .pmui-menuoption-title { + background-image: url(images/arrow-right-w.png); +} + +.pmui-menuoption.pmui-father.pmui-disabled > .pmui-menuoption-title, +.pmui-menuoption.pmui-father.pmui-disabled:hover > .pmui-menuoption-title { + background-image: url(images/arrow-right-d.png); +} + +.pmui-menuseparatoritem { + border-top: 1px solid #d8d8d8; + border-bottom: 1px solid #fff; +} + +.pmui-menuoption:hover > .pmui-menu { + display: inline-block; +} + +.pmui-menuoption.pmui-disabled:hover > .pmui-menu { + display: none; +} + +.pmui-menu .pmui-menu { + display: none; + position: absolute !important; + left: 100% !important; + top: 0 !important; +} + +.pmui-datepicker { + font-size: 12px; + width: 200px; + position: absolute; + border: #888 1px solid; + color: #000; + background-color: #F8F8F8; + -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); + box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.5); +} + +.pmui-datetimecontrol { + border: 1px solid #ccc; +} + +.pmui-datepicker input { + border: #888 1px solid; + font-size: 0.8em; + text-align: center; + width: 100%; +} + +.pmui-datepicker a { + text-decoration: none; + color: inherit; +} + +.pmui-datepicker-header { + font-size: 1.2em; + background-color: #F8F8F8; +} + +.pmui-datepicker-head-table { + width: 100%; +} + +.pmui-datepicker-month-selector select, +.pmui-datepicker-year-selector select { + background: none; + border: none; +} + +.pmui-datepicker-month-selector { + text-align: left; +} + +.pmui-datepicker-year-selector { + text-align: right; +} + +.pmui-datepicker-table { + width: 100%; +} + +.pmui-datepicker-table tr { + margin: 0; + padding: 0; +} + +.pmui-datepicker-table td { + text-align: center; + background: #F0F0F0; + padding: 1px; +} + +.pmui-datepicker-table td a { + display: block; + background-color: #F8F8F8; + color: #000; +} + +.pmui-datepicker-table td a:hover, +.pmui-datepicker-table td .selected { + background-color: #D0D0D0; +} + +.pmui-datepicker-table thead th { + font-size: 0.8em; + color: #000; + background-color: #F8F8F8; +} + +.pmui-datepicker-disabled-date { + color: #888; +} + +.pmui-datepicker-footer { + padding: 4px; +} + +.pmui-datepicker-footer div { + display: inline-block; +} + +.pmui-datepicker-button { + font-family: Arial; + background-color: #C0C0C0; + padding: 1px; + border: solid #888; + border-width: 1px; + margin: 1px; + /*color:$datepicker-button_color;*/ +} + +.pmui-gridpanel { + background-color: #FFF; + font-size: 14px; + vertical-align: top; + font-family: "SourceSansPro", Arial, Tahoma, Verdana; +} + +.pmui-gridpanel-tableContainer { + border: 0px solid #e5e5e5; +} + +.pmui-gridpanel-table { + border-collapse: collapse; + min-height: 3em; + background-color: #fff; + width: 100%; + font-size: 14px; +} + +.pmui-gridpanelcolumn { + border-right: 2px solid #fff; + /*padding: 5px 10px;*/ + color: #fff; + font-size: 14px; + background: #3397e1; +} + +.pmui-gridpanelcell { + border-right: 2px solid #fff; +} + +.pmui-gridpanelcolumn.pmui-sortable { + cursor: pointer; +} + +.pmui-gridpanel.pmui-sortable.pmui-sort-asc, +.pmui-gridpanel.pmui-sortable.pmui-sort-desc { + background-repeat: no-repeat; + background-position: right; +} + +.pmui-gridpanelrow { + border-bottom: 1px solid #e5e5e5; + line-height: auto; +} + +.pmui-gridpanelrow.ui-draggable > .pmui-gridpanelcell:first-child, +.pmui-gridpanel-tbody.ui-sortable .pmui-gridpanelrow > .pmui-gridpanelcell:first-child { + background-image: url(images/bg_dd.png); + background-position: 2px center; + background-repeat: no-repeat; +} + +.pmui-gridpanelrow.ui-draggable, +.pmui-gridpanel-tbody.ui-sortable .pmui-gridpanelrow { + cursor: move; +} + +.pmui-gridpanelrow:hover { + background: #e0e0e0; +} + +.pmui-gridpanel-pager { + display: inline-block; + margin: 0; +} + +.pmui-gridpanel-gotoPage { + width: 40px; + margin: 0 2px 0 2px; + height: 20px; + text-align: center; + border: 1px solid #ddd; +} + +.pmui-gridpanel-footer.pmui-gridpanel-total { + vertical-align: super; + font-size: 13px; + padding: 2px; +} + +.pmui-gridpanel-pager-current { + text-decoration: none; + float: left; + color: #0493E5; + font-size: 14px; + line-height: 26px; + font-weight: normal; + text-align: center; + border: 1px solid #ddd; + min-width: 14px; + padding: 0 11px; + margin: 0 5px 0 0; + background: #FFF; + background: #0493E5; + color: #FFF; + cursor: default; + margin-left: -7px; +} + +.pmui-gridpanel-pager-ellipse { + background: none; + border: none; + border-radius: 0; + box-shadow: none; + font-weight: bold; + cursor: default; + text-decoration: none; + float: left; + color: #0493E5; + font-size: 14px; + line-height: 26px; + font-weight: normal; + text-align: center; + border: 1px solid #ddd; + min-width: 14px; + padding: 0 7px; + margin: 0 5px 0 0; + background: #FFF; + margin-left: -7px; +} + +.pmui-gridpanel-pager li a { + text-decoration: none; + float: left; + color: #0493E5; + font-size: 14px; + line-height: 26px; + font-weight: normal; + text-align: center; + border: 1px solid #ddd; + min-width: 14px; + padding: 0 11px; + margin: 0 5px 0 0; + background: #FFF; + margin-left: -7px; +} + +.pmui-gridpanel-pager li a:hover { + text-decoration: none; + background: #0493E5; + color: #FFF; +} + +.pmui-gridpanel-pager li { + display: inline-block; + margin: 0 1px; +} + +.pmui-gridpanel-pagelink { + float: left; + display: block; + color: #2d3e50; + padding: 4px 7px; + height: 13px; +} + +.pmui-gridpanel-pagelink, +.pmui-gridpanel-pagelink.pmui-gridpanel-nextbutton, +.pmui-gridpanel-pagelink.pmui-gridpanel-previousbutton { + text-decoration: none; + font-size: 12px; +} + +.pmui-gridpanel-pagelink.pmui-gridpanel-nextbutton .pmui-icon { + background-position: 0 -6px; + height: 13px; + width: 9px; +} + +.pmui-gridpanel-pagelink.pmui-gridpanel-previousbutton .pmui-icon { + background-position: 0 -19px; + height: 13px; + width: 9px; +} + +.pmui-gridpanel-pagelink { + float: left; + display: block; + color: #2d3e50; + padding: 4px 7px; + font-size: 12px; +} + +.pmui-gridpanel-pagelink:hover { + filter: alpha(opacity=0.7); + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; +} + +.pmui-gridpanel-pagelink.pmui-active { + color: #fff; + background: #2d3e50; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} + +.pmui-gridpanel-toolbar { + padding: 5px 0px; + text-align: left; + height: 40px; + margin: 4px 0 4px 0; +} + +.pmui-gridpanel-footer { + text-align: center; + padding: 10px 20px; +} + +.pmui-gridpanel-statusbar { + text-align: left; + font-size: 12px; + margin-top: 5px; +} + +.pmui-gridpanelcell-content, +.pmui-gridpanelColumn-title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + position: relative; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.pmui-gridpanelcell-content { + display: inline-block; + color: #333; + text-align: left; + padding: 1px 5px 1px 5px; + margin-left: 5px; +} + +.pmui-gridpanelColumn-title { + display: block; + padding: 9px 5px; + text-align: left; + font-weight: initial; +} + +.pmui-grid-sort-icon { + position: absolute; + width: 11px; + height: 1em; + right: 5px; + display: none; + top: 9px; +} +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-asc .pmui-grid-sort-icon { + background-position: 0 -150px; + height: 6px; + width: 11px; +} +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-desc .pmui-grid-sort-icon { + background-position: 0 -156px; + height: 6px; + width: 11px; +} + +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-asc .pmui-gridpanelColumn-title, +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-desc .pmui-gridpanelColumn-title { + padding-right: 20px; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; +} +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-asc .pmui-gridpanelColumn-title:hover, +.pmui-gridpanelcolumn.pmui-sortable.pmui-sort-desc .pmui-gridpanelColumn-title:hover { + filter: alpha(opacity=0.7); + -moz-opacity: 0.7; + -khtml-opacity: 0.7; + opacity: 0.7; +} + +.pmui-gridpanelcolumn.pmui-sortable .pmui-grid-sort-icon { + display: inline-block; +} + +.pmui-active-row { + background: antiquewhite; +} + +.pmui-gridpanel-emptyrow td { + padding: 0.5em; + font-style: italic; +} + +.pmui-gridpanelrow-deleteButton { + width: 16px; + height: 16px; + padding: 2px; + background: #e0e0e0; + position: absolute; + top: -16px; + right: 0px; + -moz-border-radius: 100% 100% 0px 0px; + -webkit-border-radius: 100% 100% 0px 0px; + border-radius: 100% 100% 0px 0px; +} + +.pmui-gridpanelrow-deleteButton a { + display: inline-block; + /*@include pmui-sprite-sprite(delete-16);*/ +} + +.pmui-gridpanel-searchload.load { + background: url(../img/loading.gif) no-repeat center; + background-size: contain; + height: 20px; + width: 20px; + position: absolute; +} + +.pmui-tabpanel { + background: none; +} + +.pmui-tabpanel-container { + background: #FFF; + overflow: visible !important; +} + +.pmui-tabpanel-tabs { + padding: 0; + margin: 0; + border-bottom: 1px solid #ddd; + width: 92%; +} + +.pmui-tabitem { + font-size: 14px; + font-weight: normal; + text-transform: none; + margin: 0 4px; +} + +.pmui-tab-ref { + display: block; + color: #337ab7; + text-decoration: none; + background: #FFF; + padding: 0.6em 0.9em; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.pmui-tabitem.pmui-active .pmui-tab-ref { + color: #555; + background: FFF; + border: 1px solid #ddd; + border-top: 3px solid #3397e1; +} + +.pmui-tabitem:hover .pmui-tab-ref { + color: #555; + background: #FFF; +} + +.pmui-tab_title { + text-overflow: ellipsis; + white-space: nowrap; + overflow: inherit; + display: inline-block; +} + +.pmui-tabpanel-left .pmui-tabpanel-tabs { + border-bottom: 0; + padding-right: 6px; +} +.pmui-tabpanel-left .pmui-tabitem { + clear: both; + text-align: left; + /*width: 100%;*/ + margin: 2px 0; +} + +.pmui-collapsibleBar { + width: 5px; + background: white; + border-left: 1px solid #dadfe4; +} + +.pmui-tab-icon { + float: left; + width: auto; + height: 20px; +} + +.pmui-textcontrol, +.pmui-dropdownlistcontrol, +.pmui-textareacontrol, +.pmui-passwordcontrol, +.pmui-uploadcontrol, +.pmui-datetimecontrol { + font-size: 14px; + border-radius: 2px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: #fff; + display: inline-block; + text-align: 'left'; + padding: 4px 6px; + color: #000; + border: 1px solid #adafb2; +} + +.pmui-textcontrol, .pmui-passwordcontrol { + color: #000; +} + +.pmui-textcontrol:-ms-input-placeholder, .pmui-passwordcontrol:-ms-input-placeholder { + color: #AAAAAA; +} + +select.pmui-dropdownlistcontrol { + height: 36px; +} + +.pmui-textareacontrol { + width: 100%; +} + +.pmui-selectablecontrol span { + font-size: 14px; +} + +.pmui-field-label { + display: block; + text-align: left; + width: 160px; + padding: 6px 20px 6px 10px; + color: #2d3e50; + font-size: 14px; + box-sizing: border-box; +} + +.pmui-field { + padding: 4px 0; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + background: none; +} + +.pmui-field-label, +.pmui-field-control { + /*float: left;*/ + display: inline-block; + text-align: left; + margin-right: 5px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +.pmui-textannotationfield { + color: #2d3e50; +} + +.pmui-textannotationfield .pmui-field-label { + margin: 0px; + color: inherit; +} + +.pmui-field-control-er { + color: #f00; +} + +.pmui-field-required { + color: #e84c3d; + padding-top: 3px; + text-align: center; +} + +.pmui-field .pmui-textlabel { + clear: both; + color: #fff; + font-size: 12px; + background: #F5736D; + padding: 4px 10px; + display: inline-block; +} + +.pmui-field-colon { + color: #000; +} + +.pmui-field .error { + outline: 1px solid #ecc3c2; + border: 1px solid white; +} + +.pmui-field-control-table { + display: inline-block; +} + +.pmui-field-control-table { + border: 1px solid #e7e7e7; + padding: 0px; +} + +.pmui-field-control-table td { + padding: 0px 45px 0px 0px; +} + +.pmui-field-message { + text-align: left; + position: absolute; + z-index: 100; +} + +.pmui.pmui-textannotationfield { + clear: both; +} + +.pmui-tooltip .pmui-icon { + background-repeat: no-repeat; + display: inline-block; + margin-left: 3px; + float: right; + margin-top: 5px; +} + +.pmui-icon-help { + background-position: 0 -162px; + height: 18px; + width: 18px; +} + +.pmui-icon-info { + background-position: 0 -244px; + height: 16px; + width: 16px; +} + +.pmui-icon-error { + background-position: 0 -134px; + height: 16px; + width: 16px; +} + +.pmui-icon-warning { + background-position: 0 -452px; + height: 16px; + width: 16px; +} + +.pmui-tooltip { + margin-left: 5px; + border-radius: 1em; +} + +.pmui-tooltip-message { + margin: 0 5px 0 3px; +} + +.pmui .pmui-tooltip-mode-normal .pmui-tooltip-message { + font-size: 0.8em; +} + +.pmui-field-message-container { + display: block; +} + +.pmui-tooltip-category-error { + color: #F00; +} + +.ui-tooltip { + max-width: 350px !important; +} + +.pmui-form { + background-color: white; +} + +.pmui-form-title, +.pmui-form-footer { + text-align: center; +} + +.pmui-form-header { + padding: 0.4em; + background-color: white; +} + +.pmui-form-title { + font-size: 1.2em; + margin: 0; + line-height: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: black; +} + +.pmui-form fieldset { + border-color: #c7c7c7; + color: #2d3e50; +} + +/*.pmui-form .pmui-buttonpanel a { + color: #fff; + font-size: 16px; + background: $form-buttonBar_background; + margin-right: 10px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + padding: 0px 15px; + border: 1px solid #2D9663; +} +.pmui .pmui-buttonpanel .button-link{ + color : #000000; + text-decoration: underline; + background : inherit; + padding : 0px 5px 0px 5px; +}*/ +.pmui-form .pmui-formpanel { + text-align: initial; +} + +.pmui-treepanel { + display: inline-block; + height: 360px; +} + +.pmui-treepanel-list { + list-style: none; + margin: 0; + padding: 0; + vertical-align: top; +} + +.pmui-treepanel-node .pmui-treepanel-list { + margin-left: 18px; +} + +.pmui-treepanel-node-title { + text-decoration: none; + color: #000; +} + +.pmui-treepanel-node { + background: url(images/elbow-line.gif) repeat-y left top; + list-style-type: none; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + text-align: left; +} + +.pmui-treepanel, +.pmui-treepanel-node { + font-size: 14px; + background: inherit; +} + +.pmui-treepanel-node, +.pmui-treepanel-list > .pmui-treepanel-node:last-child { + background: url(images/elbow-end.gif) no-repeat left top; +} + +.pmui-treepanel-node-icon { + display: inline-block; + margin-right: 3px; +} + +.pmui-treepanel-node-elbow { + width: 16px; + margin-right: 3px; + display: inline-block; +} + +.pmui-treepanel-emptymessage { + font-style: italic; +} + +.pmui-treepanel-toolbar { + margin: 1em 0.5em; +} + +.pmui-treepanel .pmui-treepanel-node { + background: url(images/elbow-line.gif) repeat-y top left; +} + +.pmui-treepanel-node .pmui-treepanel-node-elbow { + background: url(images/elbow-end.gif) no-repeat top left; +} + +ul.pmui-treepanel > .pmui-treepanel-node:last-child { + background: url(images/elbow-end.gif) no-repeat top left; +} + +.pmui-treepanel-node.pmui-treepanel-node-father > .pmui-treepanel-node-title .pmui-treepanel-node-elbow { + background: url(images/elbow-minus-nl.gif) no-repeat center; +} + +.pmui-treepanel-node.pmui-treepanel-node-father.pmui-treepanel-node-collapsed > .pmui-treepanel-node-title .pmui-treepanel-node-elbow { + background: url(images/elbow-plus-nl.gif) no-repeat center; +} + +/*.pmui-buttonpanel { + padding : 7px; + border-bottom : 1px solid $button-panel_borderColor +}*/ +.pmui-messagewindow-container { + margin: 10px; +} + +.pmui-messagewindow-container tr, +.pmui-messagewindow-container tr td { + margin: 0; + border: 0; + padding: 0; +} + +.pmui-messagewindow-icon { + display: inline-block; + margin-right: 10px; +} + +.pmui-messagewindow-icon-error { + background-position: 0 -70px; + height: 64px; + width: 64px; +} + +.pmui-messagewindow-icon-warning { + background-position: 0 -388px; + height: 64px; + width: 64px; +} + +.pmui-messagewindow-icon-info { + background-position: 0 -180px; + height: 64px; + width: 64px; +} + +.pmui-messagewindow-icon-success { + background-position: 0 -324px; + height: 64px; + width: 64px; +} + +.pmui-messagewindow-icon-confirm { + background-position: 0 -260px; + height: 64px; + width: 64px; +} + +.pmui-window-body { + font-Size: 16px; +} + +.pmui-windowmessage.pmui-windowmessage-error { + background-color: inherit; + /*.pmui-buttonpanel .pmui-button { + background-color : $windowMessage-error-header_background-color; + } + .pmui-buttonpanel .pmui-link { + background : none; + }*/ +} +.pmui-windowmessage.pmui-windowmessage-error .pmui-window-header { + background-color: #e4655f; + padding: 7px 15px; +} +.pmui-windowmessage.pmui-windowmessage-error .pmui-window-body { + background-color: white; + color: #58585b; + font-size: 14px; + padding: 20px 30px 20px 30px; +} +.pmui-windowmessage.pmui-windowmessage-error .pmui-messagewindow-message { + font-size: 14px; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} +.pmui-windowmessage.pmui-windowmessage-error .pmui-window-footer { + background-color: white; +} + +.pmui-windowmessage.pmui-windowmessage-warning { + background-color: inherit; + /*.pmui-buttonpanel .pmui-button { + background-color : $windowMessage-warning-header_background-color ; + } + .pmui-buttonpanel .pmui-link { + background : none; + }*/ +} +.pmui-windowmessage.pmui-windowmessage-warning .pmui-window-header { + background-color: #edb60b; + padding: 7px 15px; +} +.pmui-windowmessage.pmui-windowmessage-warning .pmui-window-body { + background-color: white; + color: #58585b; + font-size: 14px; +} +.pmui-windowmessage.pmui-windowmessage-warning .pmui-messagewindow-message { + font-size: 14px; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} +.pmui-windowmessage.pmui-windowmessage-warning .pmui-window-footer { + background-color: white; +} + +.pmui-windowmessage.pmui-windowmessage-success { + background-color: inherit; + /*.pmui-buttonpanel .pmui-button { + background-color : $windowMessage-success-header_background-color; + } + .pmui-buttonpanel .pmui-link { + background : none; + }*/ +} +.pmui-windowmessage.pmui-windowmessage-success .pmui-window-header { + background-color: #2ddfb7; + padding: 7px 15px; +} +.pmui-windowmessage.pmui-windowmessage-success .pmui-window-body { + background-color: white; + color: #58585b; + font-size: 14px; +} +.pmui-windowmessage.pmui-windowmessage-success .pmui-messagewindow-message { + font-size: 14px; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} +.pmui-windowmessage.pmui-windowmessage-success .pmui-window-footer { + background-color: white; +} + +.pmui-windowmessage.pmui-windowmessage-default { + background-color: inherit; + /*.pmui-buttonpanel .pmui-button { + background-color : $windowMessage-default-header_background-color; + } + .pmui-buttonpanel .pmui-link { + background : none; + }*/ +} +.pmui-windowmessage.pmui-windowmessage-default .pmui-window-header { + background-color: #44afff; + padding: 7px 15px; +} +.pmui-windowmessage.pmui-windowmessage-default .pmui-window-body { + background-color: white; + color: #58585b; + font-size: 14px; +} +.pmui-windowmessage.pmui-windowmessage-default .pmui-messagewindow-message { + font-size: 14px; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} +.pmui-windowmessage.pmui-windowmessage-default .pmui-window-footer { + background-color: white; +} + +.pmui-windowmessage .pmui-buttonpanel .pmui-button { + padding-left: 25px; + padding-right: 25px; + border-radius: 2px; +} + +.pmui-windowmessage .pmui-buttonpanel .pmui-textlabel { + margin-left: 5px; +} + +.pmui-windowmessage .pmui-buttonpanel .pmui-link { + padding: initial; + margin-left: 5px; +} + +.pmui-windowmessage .pmui-window-footer { + padding: 10px; + border-top: 1px solid #e5e5e5; + background: white; +} + +.pmui-windowmessage .pmui-window-body { + padding: 20px 30px 20px 30px; + font-family: Chivo-regular, sans-serif; +} + +.pmui-windowmessage .pmui-textlabel { + font-size: 16px; +} + +.pmui-windowmessage .pmui-buttonpanel .pmui-button { + margin-left: 10px; +} + +.pmui-windowmessage .pmui-window-title { + text-align: center; +} + +.pmui-toolbaritem { + display: inline-block; + margin: 2px; +} + +.pmui-listpanel { + border: 1px solid #bbb; + font-size: 12px; +} + +.pmui-listitem { + border: solid 1px #bbb; +} + +.pmui-listpanel-title, +.pmui-listpanel-toolbar, +.pmui-listpanel-statusbar { + padding: 0.5em; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.pmui-listpanel-title { + min-height: 1em; + background: #5f6c79; + color: #FFF; +} + +.pmui-listpanel-toolbar { + font-size: 0.8em; +} + +.pmui-listpanel-statusbar { + background: #E9E9E9; +} + +.pmui-listpanel-list { + overflow: auto; + border-color: #bbb; + border-style: solid; + border-width: 2px 0; + padding: 0; + margin: 0; + border-collapse: collapse; +} + +.pmui-listitem { + list-style: none; + border-color: #bbb; + border-style: solid; + border-width: 0 0 1px 0; + padding: 0.5em; + background: #f8f8f8; +} + +.pmui-listpanel-list > .pmui-listitem:last-child { + border-bottom: 0px; +} + +.pmui-listitem:nth-child(odd) { + background: #eaebed; +} + +.pmui-listitem:hover { + background: #e0e0e0; +} + +.pmui-listitem-icon, +.pmui-listitem-text { + display: inline-block; + vertical-align: middle; +} + +.pmui-listitem-icon { + margin-right: 0.3em; +} + +.pmui-listitem .pmui-toolbar.pmui-listitem-actions { + text-align: right; +} + +.pmui.ui-layout-pane { + border: 1px solid #BBB; + padding: 2px; + /*alerta*/ +} + +/* + * Default Layout Theme + * + * Created for jquery.layout + * + * Copyright (c) 2010 + * Fabrizio Balliano (http://www.fabrizioballiano.net) + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * Last Updated: 2010-02-10 + * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars + */ + +/* + * DEFAULT FONT + * Just to make demo-pages look better - not actually relevant to Layout! + */ +/*body { + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 100%; + *font-size: 80%; +}*/ + +/* + * PANES & CONTENT-DIVs + */ +.ui-layout-pane { /* all 'panes' */ + background: #FFF; + border: 1px solid #BBB; + padding: 2px; + overflow: auto; + /* DO NOT add scrolling (or padding) to 'panes' that have a content-div, + otherwise you may get double-scrollbars - on the pane AND on the content-div + - use ui-layout-wrapper class if pane has a content-div + - use ui-layout-container if pane has an inner-layout + */ + } + /* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */ + .ui-layout-content { + padding: 10px; + position: relative; /* contain floated or positioned elements */ + overflow: auto; /* add scrolling to content-div */ + } + +/* + * UTILITY CLASSES + * Must come AFTER pane-class above so will override + * These classes are NOT auto-generated and are NOT used by Layout + */ +.layout-child-container, +.layout-content-container { + padding: 0; + overflow: hidden; +} +.layout-child-container { + border: 0; /* remove border because inner-layout-panes probably have borders */ +} +.layout-scroll { + overflow: auto; +} +.layout-hide { + display: none; +} + +/* + * RESIZER-BARS + */ +.ui-layout-resizer { /* all 'resizer-bars' */ + background: #DDD; + border: 1px solid #BBB; + border-width: 0; + } + .ui-layout-resizer-drag { /* REAL resizer while resize in progress */ + } + .ui-layout-resizer-hover { /* affects both open and closed states */ + } + /* NOTE: It looks best when 'hover' and 'dragging' are set to the same color, + otherwise color shifts while dragging when bar can't keep up with mouse */ + .ui-layout-resizer-open-hover , /* hover-color to 'resize' */ + .ui-layout-resizer-dragging { /* resizer beging 'dragging' */ + background: #C4E1A4; + } + .ui-layout-resizer-dragging { /* CLONED resizer being dragged */ + border: 1px solid #BBB; + } + .ui-layout-resizer-north-dragging, + .ui-layout-resizer-south-dragging { + border-width: 1px 0; + } + .ui-layout-resizer-west-dragging, + .ui-layout-resizer-east-dragging { + border-width: 0 1px; + } + /* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */ + .ui-layout-resizer-dragging-limit { /* CLONED resizer at min or max size-limit */ + background: #E1A4A4; /* red */ + } + + .ui-layout-resizer-closed-hover { /* hover-color to 'slide open' */ + background: #EBD5AA; + } + .ui-layout-resizer-sliding { /* resizer when pane is 'slid open' */ + opacity: .10; /* show only a slight shadow */ + filter: alpha(opacity=10); + } + .ui-layout-resizer-sliding-hover { /* sliding resizer - hover */ + opacity: 1.00; /* on-hover, show the resizer-bar normally */ + filter: alpha(opacity=100); + } + /* sliding resizer - add 'outside-border' to resizer on-hover + * this sample illustrates how to target specific panes and states */ + .ui-layout-resizer-north-sliding-hover { border-bottom-width: 1px; } + .ui-layout-resizer-south-sliding-hover { border-top-width: 1px; } + .ui-layout-resizer-west-sliding-hover { border-right-width: 1px; } + .ui-layout-resizer-east-sliding-hover { border-left-width: 1px; } + +/* + * TOGGLER-BUTTONS + */ +.ui-layout-toggler { + border: 1px solid #BBB; /* match pane-border */ + background-color: #BBB; + } + .ui-layout-resizer-hover .ui-layout-toggler { + opacity: .60; + filter: alpha(opacity=60); + } + .ui-layout-toggler-hover , /* need when NOT resizable */ + .ui-layout-resizer-hover .ui-layout-toggler-hover { /* need specificity when IS resizable */ + background-color: #FC6; + opacity: 1.00; + filter: alpha(opacity=100); + } + .ui-layout-toggler-north , + .ui-layout-toggler-south { + border-width: 0 1px; /* left/right borders */ + } + .ui-layout-toggler-west , + .ui-layout-toggler-east { + border-width: 1px 0; /* top/bottom borders */ + } + /* hide the toggler-button when the pane is 'slid open' */ + .ui-layout-resizer-sliding .ui-layout-toggler { + display: none; + } + /* + * style the text we put INSIDE the togglers + */ + .ui-layout-toggler .content { + color: #666; + font-size: 12px; + font-weight: bold; + width: 100%; + padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */ + } + +/* + * PANE-MASKS + * these styles are hard-coded on mask elems, but are also + * included here as !important to ensure will overrides any generic styles + */ +.ui-layout-mask { + border: none !important; + padding: 0 !important; + margin: 0 !important; + overflow: hidden !important; + position: absolute !important; + opacity: 0 !important; + filter: Alpha(Opacity="0") !important; +} +.ui-layout-mask-inside-pane { /* masks always inside pane EXCEPT when pane is an iframe */ + top: 0 !important; + left: 0 !important; + width: 100% !important; + height: 100% !important; +} +div.ui-layout-mask {} /* standard mask for iframes */ +iframe.ui-layout-mask {} /* extra mask for objects/applets */ + +/* + * Default printing styles + */ +@media print { + /* + * Unless you want to print the layout as it appears onscreen, + * these html/body styles are needed to allow the content to 'flow' + */ + html { + height: auto !important; + overflow: visible !important; + } + body.ui-layout-container { + position: static !important; + top: auto !important; + bottom: auto !important; + left: auto !important; + right: auto !important; + /* only IE6 has container width & height set by Layout */ + _width: auto !important; + _height: auto !important; + } + .ui-layout-resizer, .ui-layout-toggler { + display: none !important; + } + /* + * Default pane print styles disables positioning, borders and backgrounds. + * You can modify these styles however it suit your needs. + */ + .ui-layout-pane { + border: none !important; + background: transparent !important; + position: relative !important; + top: auto !important; + bottom: auto !important; + left: auto !important; + right: auto !important; + width: auto !important; + height: auto !important; + overflow: visible !important; + } +} +/*! jQuery UI - v1.10.3 - 2013-09-02 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=11px&cornerRadius=5px&bgColorHeader=%235c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=%234297d7&fcHeader=%23ffffff&iconColorHeader=%23d8e7f3&bgColorContent=%23fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=%23a6c9e2&fcContent=%23222222&iconColorContent=%23469bdd&bgColorDefault=%23dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=%23c5dbec&fcDefault=%232e6e9e&iconColorDefault=%236da8d5&bgColorHover=%23d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=%2379b7e7&fcHover=%231d5987&iconColorHover=%23217bc0&bgColorActive=%23f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=%2379b7e7&fcActive=%23e17009&iconColorActive=%23f9bd01&bgColorHighlight=%23fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=%23fad42e&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 11px; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border-right: 1px solid #a6c9e2; + border-left: 1px solid #a6c9e2; + border-bottom: 1px solid #a6c9e2; + background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #4297d7; + background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; + color: #ffffff; + font-weight: bold; + /*color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);*/ +} +.ui-widget-header a { + color: #ffffff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #c5dbec; + background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #2e6e9e; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #2e6e9e; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #79b7e7; + background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #1d5987; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #1d5987; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #79b7e7; + background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; + font-weight: bold; + color: #e17009; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #e17009; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fad42e; + background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_469bdd_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_d8e7f3_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_6da8d5_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_217bc0_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_f9bd01_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 5px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} +.introjs-overlay { + position: absolute; + z-index: 999999; + background-color: #000; + opacity: 0; + background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9))); + background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-fixParent { + z-index: auto !important; + opacity: 1.0 !important; + position: absolute !important; + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + -o-transform: none !important; + transform: none !important; +} + +.introjs-showElement, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + z-index: 9999999 !important; +} + +.introjs-disableInteraction { + z-index: 99999999 !important; + position: absolute; +} + +.introjs-relativePosition, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + position: relative; +} + +.introjs-helperLayer { + position: fixed; + z-index: 9999998; + background-color: #FFF; + background-color: rgba(255,255,255,.9); + border: 1px solid #777; + border: 1px solid rgba(0,0,0,.5); + border-radius: 4px; + box-shadow: 0 2px 15px rgba(0,0,0,.4); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-tooltipReferenceLayer { + position: fixed; + z-index: 10000000; + background-color: transparent; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-helperLayer *, +.introjs-helperLayer *:before, +.introjs-helperLayer *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + box-sizing: content-box; +} + +.introjs-helperNumberLayer { + position: absolute; + top: 5px; + /*left: -16px;*/ + left: 50%; + z-index: 9999999999 !important; + padding: 2px; + font-family: Arial, verdana, tahoma; + font-size: 13px; + font-weight: bold; + color: white; + text-align: center; + text-shadow: 1px 1px 1px rgba(0,0,0,.3); + background: #ff3019; /* Old browsers */ + background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Chrome10+,Safari5.1+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404)); /* Chrome,Safari4+ */ + background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* FF3.6+ */ + background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* IE10+ */ + background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Opera 11.10+ */ + background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%); /* W3C */ + width: 20px; + height:20px; + line-height: 20px; + border: 3px solid white; + border-radius: 50%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0); /* IE6-9 */ + filter: progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000); /* IE10 text shadows */ + box-shadow: 0 2px 5px rgba(0,0,0,.4); +} + +.introjs-arrow { + border: 5px solid white; + content:''; + position: absolute; +} +.introjs-arrow.top { + top: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-right { + top: -10px; + right: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-middle { + top: -10px; + left: 50%; + margin-left: -5px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.right { + right: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.right-bottom { + bottom:10px; + right: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.bottom { + bottom: -10px; + border-top-color:white; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left { + left: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left-bottom { + left: -10px; + bottom:10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} + +.introjs-tooltip { + position: absolute; + padding: 10px; + background-color: white; + min-width: 200px; + max-width: 600px; + border-radius: 3px; + box-shadow: 0 1px 10px rgba(0,0,0,.4); + -webkit-transition: opacity 0.1s ease-out; + -moz-transition: opacity 0.1s ease-out; + -ms-transition: opacity 0.1s ease-out; + -o-transition: opacity 0.1s ease-out; + transition: opacity 0.1s ease-out; +} + +.introjs-tooltipbuttons { + text-align: right; + white-space: nowrap; +} + +/* + Buttons style by http://nicolasgallagher.com/lab/css3-github-buttons/ + Changed by Afshin Mehrabani +*/ +.introjs-button { + position: relative; + overflow: visible; + display: inline-block; + padding: 0.3em 0.8em; + border: 1px solid #d4d4d4; + margin: 0; + text-decoration: none; + text-shadow: 1px 1px 0 #fff; + font: 11px/normal sans-serif; + color: #333; + white-space: nowrap; + cursor: pointer; + outline: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec)); + background-image: -moz-linear-gradient(#f4f4f4, #ececec); + background-image: -o-linear-gradient(#f4f4f4, #ececec); + background-image: linear-gradient(#f4f4f4, #ececec); + -webkit-background-clip: padding; + -moz-background-clip: padding; + -o-background-clip: padding-box; + /*background-clip: padding-box;*/ /* commented out due to Opera 11.10 bug */ + -webkit-border-radius: 0.2em; + -moz-border-radius: 0.2em; + border-radius: 0.2em; + /* IE hacks */ + zoom: 1; + *display: inline; + margin-top: 10px; +} + +.introjs-button:hover { + border-color: #bcbcbc; + text-decoration: none; + box-shadow: 0px 1px 1px #e3e3e3; +} + +.introjs-button:focus, +.introjs-button:active { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ececec), to(#f4f4f4)); + background-image: -moz-linear-gradient(#ececec, #f4f4f4); + background-image: -o-linear-gradient(#ececec, #f4f4f4); + background-image: linear-gradient(#ececec, #f4f4f4); +} + +/* overrides extra padding on button elements in Firefox */ +.introjs-button::-moz-focus-inner { + padding: 0; + border: 0; +} + +.introjs-skipbutton { + margin-right: 5px; + color: #7a7a7a; +} + +.introjs-prevbutton { + -webkit-border-radius: 0.2em 0 0 0.2em; + -moz-border-radius: 0.2em 0 0 0.2em; + border-radius: 0.2em 0 0 0.2em; + border-right: none; +} + +.introjs-nextbutton { + -webkit-border-radius: 0 0.2em 0.2em 0; + -moz-border-radius: 0 0.2em 0.2em 0; + border-radius: 0 0.2em 0.2em 0; +} + +.introjs-disabled, .introjs-disabled:hover, .introjs-disabled:focus { + color: #9a9a9a; + border-color: #d4d4d4; + box-shadow: none; + cursor: default; + background-color: #f4f4f4; + background-image: none; + text-decoration: none; +} + +.introjs-bullets { + text-align: center; +} +.introjs-bullets ul { + clear: both; + margin: 15px auto 0; + padding: 0; + display: inline-block; +} +.introjs-bullets ul li { + list-style: none; + float: left; + margin: 0 2px; +} +.introjs-bullets ul li a { + display: block; + width: 6px; + height: 6px; + background: #ccc; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + text-decoration: none; +} +.introjs-bullets ul li a:hover { + background: #999; +} +.introjs-bullets ul li a.active { + background: #999; +} + +.introjs-progress { + overflow: hidden; + height: 10px; + margin: 10px 0 5px 0; + border-radius: 4px; + background-color: #ecf0f1 +} +.introjs-progressbar { + float: left; + width: 0%; + height: 100%; + font-size: 10px; + line-height: 10px; + text-align: center; + background-color: #08c; +} + +.introjsFloatingElement { + position: absolute; + height: 0; + width: 0; + left: 50%; + top: 50%; +} + +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../img/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../img/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../img/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../img/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../img/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} + +.pmui-pmlabelfield .pmui-textlabel { + background: #aaaaaa; +} + +/* +.pmui-gridpanel { + padding: 10px 20px; +}*/ +.pmui-gridpanel-pager .list-item-ajax a { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #428bca; + background-color: #fff; + border: 1px solid #ddd; + margin: 0 0 0 -1px; + min-width: inherit; + font-size: 14px; + border-radius: 2px; +} + +.pmui-gridpanel-pager .list-item-ajax { + margin: 0px; +} + +.pmui-gridpanel-gotoPage { + padding: 6px 14px 6px 14px; + margin: 0px; + background-color: #f7f7f7; + text-align: left; + color: #555; + border-radius: 2px; +} + +.pmui-gridpanel-pager .list-item-ajax a:hover { + color: #2a6496; + background-color: #eee; + border-color: #ddd; +} + +/*@import "base"; + +.pmui-pmform { + margin-left: 20px; + margin-right: 20px; +} + + +.pmui-background { + background-color: $PMUI-FORM-BACKGROUND; +} + +.pmui-window-footer { + padding-left: 20px; + padding-right: 20px; +} + +.pmui-window-footer > button-solid { + margin-left: 5px; + margin-right: 5px; + margin-bottom: 5px; + +} + +div.pmui-window-footer > a.button-solid { + margin-left: 7px; + margin-top: 5px; + margin-bottom: 5px; + background: $MAFE-FORM-BUTTONS-BACKGROUND; + padding: 6px 15px; +} + +div.pmui-form-footer > a.button-solid { + margin-left: 7px; + margin-top: 5px; + margin-bottom: 5px; + background: $MAFE-FORM-BUTTONS-BACKGROUND; + padding: 6px 15px; +} + +.pmui-buttonpanel { + padding-right: 10px; + padding-left: 10px; + text-align: right; +}*/ + +body { + font-family: 'SourceSansProRegular', Arial, Tahoma, Verdana; + background: #fff; + margin: 0; + padding: 0; +} + +/*IE9*/ +/**::selection*/ +/*.content_control::selection +{ + background-color:transparent; +} +.content_control::-moz-selection +{ + background-color:transparent; +}*/ +* { + /*You just need this if you are only concerned with android and not desktop browsers.*/ + -webkit-tap-highlight-color: transparent; +} + +/* BPMN */ +#p-center-layout { + -webkit-user-select: none; + -moz-user-select: -moz-none; + user-select: none; +} + +/** +* Canvas +*/ +.pmui-pmcanvas { + background-image: url(../img/bg_designer.gif); +} + +/** +* ToolbarPanel +*/ +.mafe-toolbarpanel-btn { + text-decoration: none; + list-style: none; + text-align: center; +} + +.mafe-toolbarpanel-btn-span { + font-size: 10px; +} + +.mafe-toolbarpanel-btn-img { + width: 30px; + height: 30px; +} + +.mafe-toolbarpanel-tooltip { + font-size: 10px; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + -moz-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; + background-color: #6D87B7; + color: white; +} + +.mafe-email { + background: url(../img/email.png) no-repeat; +} + +/* +* For buttons that are on the north from the Layout +*/ +.ui-layout-north a { + margin-left: 2px; +} + +/** + * Shapes + */ +.mafe-shape-sprite { + background: url("../img/mafe_sprite.png") no-repeat; +} + +[class^="mafe-activity-task-"], +[class*=" mafe-activity-task-"], +[class^="mafe-event-"], +[class*=" mafe-event-"], +[class^="mafe-gateway-"], +[class*=" mafe-gateway-"], +[class^="PM-decorator_"], +[class*=" PM-decorator_"], +[class^="mafe-usertask-marker-"], +[class*=" mafe-usertask-marker-"], +[class^="mafe-sendtask-marker-"], +[class*=" mafe-sendtask-marker-"], +[class^="mafe-receivetask-marker-"], +[class*=" mafe-receivetask-marker-"], +[class^="mafe-usertask-marker-"], +[class*=" mafe-usertask-marker-"], +[class^="mafe-servicetask-marker-"], +[class*=" mafe-servicetask-marker-"], +[class^="mafe-scripttask-marker-"], +[class*=" mafe-scripttask-marker-"], +[class^="mafe-manualtask-marker-"], +[class*=" mafe-manualtask-marker-"], +[class^="mafe-businessrule-marker-"], +[class*=" mafe-businessrule-marker-"], +[class^="mafe-collapsed-marker-"], +[class*="mafe-parallel-marker-"], +[class*="mafe-sequential-marker-"], +[class*="mafe-loop-marker-"], +[class*="mafe-style-error-marker-"], +[class^="mafe-data"], +[class*=" mafe-data"], +[class^="mafe-message"], +[class*=" mafe-message"], +[class^="mafe-sequence"], +[class*=" mafe-sequence"], +[class^="mafe-association"], +[class*=" mafe-association"], +[class^="mafe-default"], +[class*=" mafe-default"] { + background-image: url("../img/mafe_sprite.png"); + background-repeat: no-repeat; + background-position: -565px -510px; +} + +.mafe-activity-task-red { + background-color: #BD0A17; + border: 1px solid #72020C; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-green { + background-color: #1B7909; + border: 1px solid #0F5502; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-orange { + background-color: #C57701; + border: 1px solid #965B02; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-silver { + background-color: #AAA8A6; + border: 1px solid #6F6D6C; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-artifact-group { + border: 1px dashed #995E06; +} + +.mafe-artifact-annotation { + /*background-color: #fbf1ce;*/ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.mafe-artifact-annotation-close { + float: right; + background: url("../img/delete.png") no-repeat center; + width: 10px; + height: 10px; + cursor: pointer; +} + +.mafe-layer-line-vertical { + visibility: visible; + background-color: transparent; + border-left-width: 1px; + border-left-style: solid; + border-left-color: red; + border-top-width: 0px; + border-top-style: solid; + border-top-color: red; + overflow: hidden; +} + +.mafe-layer-line-horizontal { + background-color: transparent; + border-left-width: 0px; + border-left-style: solid; + border-left-color: red; + border-top-width: 1px; + border-top-style: solid; + border-top-color: red; + overflow: hidden; +} + +.mafe-participant { + background-color: white; + border: 2px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 6px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; +} + +.mafe-pool { + border: 2px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 6px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; + background-color: white; +} + +/*mafe sprite*/ +.mafe-association_100_target_bottom { + background-position: 0 -9162px; +} + +.mafe-association_100_target_left { + background-position: 0 -9184px; +} + +.mafe-association_100_target_right { + background-position: 0 -9251px; +} + +.mafe-association_100_target_top { + background-position: 0 -9173px; +} + +.mafe-association_125_target_bottom { + background-position: 0 -9048px; +} + +.mafe-association_125_target_left { + background-position: 0 -9136px; +} + +.mafe-association_125_target_right { + background-position: 0 -9149px; +} + +.mafe-association_125_target_top { + background-position: 0 -9093px; +} + +.mafe-association_150_target_bottom { + background-position: 0 -8993px; +} + +.mafe-association_150_target_left { + background-position: 0 -11416px; +} + +.mafe-association_150_target_right { + background-position: 0 -9106px; +} + +.mafe-association_150_target_top { + background-position: 0 -9018px; +} + +.mafe-association_50_target_bottom { + background-position: 0 -9791px; +} + +.mafe-association_50_target_left { + background-position: 0 -9797px; +} + +.mafe-association_50_target_right { + background-position: 0 -9893px; +} + +.mafe-association_50_target_top { + background-position: 0 -9824px; +} + +.mafe-association_75_target_bottom { + background-position: 0 -9506px; +} + +.mafe-association_75_target_left { + background-position: 0 -9525px; +} + +.mafe-association_75_target_right { + background-position: 0 -9569px; +} + +.mafe-association_75_target_top { + background-position: 0 -9533px; +} + +.mafe-businessrule-marker-10 { + background-position: 0 -11431px; +} + +.mafe-businessrule-marker-15 { + background-position: 0 -11360px; +} + +.mafe-businessrule-marker-21 { + background-position: 0 -11225px; +} + +.mafe-businessrule-marker-26 { + background-position: 0 -11334px; +} + +.mafe-businessrule-marker-31 { + background-position: 0 -11441px; +} + +.mafe-collapsed-marker-10 { + background-position: 0 -9008px; +} + +.mafe-collapsed-marker-15 { + background-position: 0 -8518px; +} + +.mafe-collapsed-marker-21 { + background-position: 0 -8357px; +} + +.mafe-collapsed-marker-26 { + background-position: 0 -8378px; +} + +.mafe-collapsed-marker-31 { + background-position: 0 -8947px; +} + +.mafe-datainput-marker-10 { + background-position: 0 -9322px; +} + +.mafe-datainput-marker-15 { + background-position: 0 -8978px; +} + +.mafe-datainput-marker-21 { + background-position: 0 -8616px; +} + +.mafe-datainput-marker-26 { + background-position: 0 -8548px; +} + +.mafe-datainput-marker-31 { + background-position: 0 -11179px; +} + +.mafe-dataobject-100 { + background-position: 0 -8010px; +} + +.mafe-dataobject-125 { + background-position: 0 -7886px; +} + +.mafe-dataobject-150 { + background-position: 0 -11000px; +} + +.mafe-dataobject-50 { + background-position: 0 -8650px; +} + +.mafe-dataobject-75 { + background-position: 0 -8242px; +} + +.mafe-dataoutput-marker-10 { + background-position: 0 -9433px; +} + +.mafe-dataoutput-marker-15 { + background-position: 0 -9033px; +} + +.mafe-dataoutput-marker-21 { + background-position: 0 -8906px; +} + +.mafe-dataoutput-marker-26 { + background-position: 0 -8870px; +} + +.mafe-dataoutput-marker-31 { + background-position: 0 -11385px; +} + +.mafe-datastore-20 { + background-position: 0 -7643px; +} + +.mafe-datastore-30 { + background-position: 0 -5709px; +} + +.mafe-datastore-41 { + background-position: 0 -3780px; +} + +.mafe-datastore-51 { + background-position: 0 -1972px; +} + +.mafe-datastore-61 { + background-position: 0 -4076px; +} + +.mafe-default_100_source_bottom { + background-position: 0 -9577px; +} + +.mafe-default_100_source_left { + background-position: 0 -9605px; +} + +.mafe-default_100_source_right { + background-position: 0 -9588px; +} + +.mafe-default_100_source_top { + background-position: 0 -9558px; +} + +.mafe-default_125_source_bottom { + background-position: 0 -9443px; +} + +.mafe-default_125_source_left { + background-position: 0 -9480px; +} + +.mafe-default_125_source_right { + background-position: 0 -9493px; +} + +.mafe-default_125_source_top { + background-position: 0 -9456px; +} + +.mafe-default_150_source_bottom { + background-position: 0 -9262px; +} + +.mafe-default_150_source_left { + background-position: 0 -9061px; +} + +.mafe-default_150_source_right { + background-position: 0 -9077px; +} + +.mafe-default_150_source_top { + background-position: 0 -9347px; +} + +.mafe-default_50_source_bottom { + background-position: 0 -9984px; +} + +.mafe-default_50_source_left { + background-position: 0 -9974px; +} + +.mafe-default_50_source_right { + background-position: 0 -9963px; +} + +.mafe-default_50_source_top { + background-position: 0 -9979px; +} + +.mafe-default_75_source_bottom { + background-position: 0 -9877px; +} + +.mafe-default_75_source_left { + background-position: 0 -9922px; +} + +.mafe-default_75_source_right { + background-position: 0 -9899px; +} + +.mafe-default_75_source_top { + background-position: 0 -9885px; +} + +.mafe-event-boundary-compensationthrow-16 { + background-position: 0 -7394px; +} + +.mafe-event-boundary-compensationthrow-24 { + background-position: 0 -5883px; +} + +.mafe-event-boundary-compensationthrow-33 { + background-position: 0 -3335px; +} + +.mafe-event-boundary-compensationthrow-41 { + background-position: 0 -1080px; +} + +.mafe-event-boundary-compensationthrow-49 { + background-position: 0 -198px; +} + +.mafe-event-boundary-conditional-16 { + background-position: 0 -8083px; +} + +.mafe-event-boundary-conditional-24 { + background-position: 0 -6889px; +} + +.mafe-event-boundary-conditional-33 { + background-position: 0 -5277px; +} + +.mafe-event-boundary-conditional-41 { + background-position: 0 -4137px; +} + +.mafe-event-boundary-conditional-49 { + background-position: 0 -3401px; +} + +.mafe-event-boundary-empty-16 { + background-position: 0 -7963px; +} + +.mafe-event-boundary-empty-24 { + background-position: 0 -6680px; +} + +.mafe-event-boundary-empty-33 { + background-position: 0 -4610px; +} + +.mafe-event-boundary-empty-41 { + background-position: 0 -2426px; +} + +.mafe-event-boundary-empty-49 { + background-position: 0 -1031px; +} + +.mafe-event-boundary-errorcatch-1 { + background-position: 0 -11375px; +} + +.mafe-event-boundary-errorcatch-16 { + background-position: 0 -10867px; +} + +.mafe-event-boundary-errorcatch-2 { + background-position: 0 -11061px; +} + +.mafe-event-boundary-errorcatch-24 { + background-position: 0 -10426px; +} + +.mafe-event-boundary-errorcatch-3 { + background-position: 0 -10664px; +} + +.mafe-event-boundary-errorcatch-33 { + background-position: 0 -9203px; +} + +.mafe-event-boundary-errorcatch-4 { + background-position: 0 -10328px; +} + +.mafe-event-boundary-errorcatch-41 { + background-position: 0 -7458px; +} + +.mafe-event-boundary-errorcatch-49 { + background-position: 0 -5931px; +} + +.mafe-event-boundary-errorcatch-5 { + background-position: 0 -10798px; +} + +.mafe-event-boundary-linkcatch-16 { + background-position: 0 -7555px; +} + +.mafe-event-boundary-linkcatch-24 { + background-position: 0 -5980px; +} + +.mafe-event-boundary-linkcatch-33 { + background-position: 0 -3673px; +} + +.mafe-event-boundary-linkcatch-41 { + background-position: 0 -1387px; +} + +.mafe-event-boundary-linkcatch-49 { + background-position: 0 -357px; +} + +.mafe-event-boundary-linkthrow-16 { + background-position: 0 -7499px; +} + +.mafe-event-boundary-linkthrow-24 { + background-position: 0 -6028px; +} + +.mafe-event-boundary-linkthrow-33 { + background-position: 0 -3887px; +} + +.mafe-event-boundary-linkthrow-41 { + background-position: 0 -1651px; +} + +.mafe-event-boundary-linkthrow-49 { + background-position: 0 -702px; +} + +.mafe-event-boundary-messagecatch-16 { + background-position: 0 -7742px; +} + +.mafe-event-boundary-messagecatch-24 { + background-position: 0 -6165px; +} + +.mafe-event-boundary-messagecatch-33 { + background-position: 0 -3994px; +} + +.mafe-event-boundary-messagecatch-41 { + background-position: 0 -2072px; +} + +.mafe-event-boundary-messagecatch-49 { + background-position: 0 -849px; +} + +.mafe-event-boundary-messagecatch-enabled-16 { + background-position: 0 -11246px; +} + +.mafe-event-boundary-messagecatch-enabled-24 { + background-position: 0 -10819px; +} + +.mafe-event-boundary-messagecatch-enabled-33 { + background-position: 0 -10565px; +} + +.mafe-event-boundary-messagecatch-enabled-41 { + background-position: 0 -10235px; +} + +.mafe-event-boundary-messagecatch-enabled-49 { + background-position: 0 -9616px; +} + +.mafe-event-boundary-messagethrow-16 { + background-position: 0 -11318px; +} + +.mafe-event-boundary-messagethrow-24 { + background-position: 0 -10940px; +} + +.mafe-event-boundary-messagethrow-33 { + background-position: 0 -10631px; +} + +.mafe-event-boundary-messagethrow-41 { + background-position: 0 -10359px; +} + +.mafe-event-boundary-messagethrow-49 { + background-position: 0 -10145px; +} + +.mafe-event-boundary-multiplecatch-16 { + background-position: 0 -7426px; +} + +.mafe-event-boundary-multiplecatch-24 { + background-position: 0 -5835px; +} + +.mafe-event-boundary-multiplecatch-33 { + background-position: 0 -3014px; +} + +.mafe-event-boundary-multiplecatch-41 { + background-position: 0 -949px; +} + +.mafe-event-boundary-multiplecatch-49 { + background-position: 0 0; +} + +.mafe-event-boundary-multiplethrow-16 { + background-position: 0 -7258px; +} + +.mafe-event-boundary-multiplethrow-24 { + background-position: 0 -5739px; +} + +.mafe-event-boundary-multiplethrow-33 { + background-position: 0 -3269px; +} + +.mafe-event-boundary-multiplethrow-41 { + background-position: 0 -1305px; +} + +.mafe-event-boundary-multiplethrow-49 { + background-position: 0 -604px; +} + +.mafe-event-boundary-parallelcatch-16 { + background-position: 0 -7338px; +} + +.mafe-event-boundary-parallelcatch-24 { + background-position: 0 -5787px; +} + +.mafe-event-boundary-parallelcatch-33 { + background-position: 0 -3047px; +} + +.mafe-event-boundary-parallelcatch-41 { + background-position: 0 -1223px; +} + +.mafe-event-boundary-parallelcatch-49 { + background-position: 0 -455px; +} + +.mafe-event-boundary-signalcatch-16 { + background-position: 0 -7587px; +} + +.mafe-event-boundary-signalcatch-24 { + background-position: 0 -6100px; +} + +.mafe-event-boundary-signalcatch-33 { + background-position: 0 -3821px; +} + +.mafe-event-boundary-signalcatch-41 { + background-position: 0 -1428px; +} + +.mafe-event-boundary-signalcatch-49 { + background-position: 0 -98px; +} + +.mafe-event-boundary-signalthrow-16 { + background-position: 0 -7603px; +} + +.mafe-event-boundary-signalthrow-24 { + background-position: 0 -6076px; +} + +.mafe-event-boundary-signalthrow-33 { + background-position: 0 -3854px; +} + +.mafe-event-boundary-signalthrow-41 { + background-position: 0 -1559px; +} + +.mafe-event-boundary-signalthrow-49 { + background-position: 0 -800px; +} + +.mafe-event-boundary-timer-16 { + background-position: 0 -7854px; +} + +.mafe-event-boundary-timer-24 { + background-position: 0 -6369px; +} + +.mafe-event-boundary-timer-33 { + background-position: 0 -4372px; +} + +.mafe-event-boundary-timer-41 { + background-position: 0 -2344px; +} + +.mafe-event-boundary-timer-49 { + background-position: 0 -1733px; +} + +.mafe-event-end-cancelthrow-16 { + background-position: 0 -7726px; +} + +.mafe-event-end-cancelthrow-24 { + background-position: 0 -6503px; +} + +.mafe-event-end-cancelthrow-33 { + background-position: 0 -4528px; +} + +.mafe-event-end-cancelthrow-41 { + background-position: 0 -2508px; +} + +.mafe-event-end-cancelthrow-49 { + background-position: 0 -1872px; +} + +.mafe-event-end-compensationthrow-16 { + background-position: 0 -7758px; +} + +.mafe-event-end-compensationthrow-24 { + background-position: 0 -6575px; +} + +.mafe-event-end-compensationthrow-33 { + background-position: 0 -4899px; +} + +.mafe-event-end-compensationthrow-41 { + background-position: 0 -3146px; +} + +.mafe-event-end-compensationthrow-49 { + background-position: 0 -2254px; +} + +.mafe-event-end-email-16 { + background-position: 0 -8288px; +} + +.mafe-event-end-email-24 { + background-position: 0 -7290px; +} + +.mafe-event-end-email-33 { + background-position: 0 -6823px; +} + +.mafe-event-end-email-41 { + background-position: 0 -6230px; +} + +.mafe-event-end-email-49 { + background-position: 0 -5458px; +} + +.mafe-event-end-empty-16 { + background-position: 0 -8481px; +} + +.mafe-event-end-empty-24 { + background-position: 0 -7515px; +} + +.mafe-event-end-empty-33 { + background-position: 0 -6704px; +} + +.mafe-event-end-empty-41 { + background-position: 0 -5589px; +} + +.mafe-event-end-empty-49 { + background-position: 0 -4479px; +} + +.mafe-event-end-errorthrow-16 { + background-position: 0 -8168px; +} + +.mafe-event-end-errorthrow-24 { + background-position: 0 -7186px; +} + +.mafe-event-end-errorthrow-33 { + background-position: 0 -6312px; +} + +.mafe-event-end-errorthrow-41 { + background-position: 0 -5195px; +} + +.mafe-event-end-errorthrow-49 { + background-position: 0 -4561px; +} + +.mafe-event-end-messagethrow-16 { + background-position: 0 -8304px; +} + +.mafe-event-end-messagethrow-24 { + background-position: 0 -7314px; +} + +.mafe-event-end-messagethrow-33 { + background-position: 0 -6856px; +} + +.mafe-event-end-messagethrow-41 { + background-position: 0 -6271px; +} + +.mafe-event-end-messagethrow-49 { + background-position: 0 -5507px; +} + +.mafe-event-end-multiplethrow-16 { + background-position: 0 -7710px; +} + +.mafe-event-end-multiplethrow-24 { + background-position: 0 -6551px; +} + +.mafe-event-end-multiplethrow-33 { + background-position: 0 -4866px; +} + +.mafe-event-end-multiplethrow-41 { + background-position: 0 -3550px; +} + +.mafe-event-end-multiplethrow-49 { + background-position: 0 -2639px; +} + +.mafe-event-end-signalthrow-16 { + background-position: 0 -8272px; +} + +.mafe-event-end-signalthrow-24 { + background-position: 0 -7370px; +} + +.mafe-event-end-signalthrow-33 { + background-position: 0 -6985px; +} + +.mafe-event-end-signalthrow-41 { + background-position: 0 -6441px; +} + +.mafe-event-end-signalthrow-49 { + background-position: 0 -5660px; +} + +.mafe-event-end-terminatethrow-16 { + background-position: 0 -8404px; +} + +.mafe-event-end-terminatethrow-24 { + background-position: 0 -7234px; +} + +.mafe-event-end-terminatethrow-33 { + background-position: 0 -6737px; +} + +.mafe-event-end-terminatethrow-41 { + background-position: 0 -6189px; +} + +.mafe-event-end-terminatethrow-49 { + background-position: 0 -5343px; +} + +.mafe-event-intermediate-compensationthrow-16 { + background-position: 0 -7410px; +} + +.mafe-event-intermediate-compensationthrow-24 { + background-position: 0 -5907px; +} + +.mafe-event-intermediate-compensationthrow-33 { + background-position: 0 -3368px; +} + +.mafe-event-intermediate-compensationthrow-41 { + background-position: 0 -1121px; +} + +.mafe-event-intermediate-compensationthrow-49 { + background-position: 0 -247px; +} + +.mafe-event-intermediate-conditional-16 { + background-position: 0 -8099px; +} + +.mafe-event-intermediate-conditional-24 { + background-position: 0 -6913px; +} + +.mafe-event-intermediate-conditional-33 { + background-position: 0 -5310px; +} + +.mafe-event-intermediate-conditional-41 { + background-position: 0 -4178px; +} + +.mafe-event-intermediate-conditional-49 { + background-position: 0 -3450px; +} + +.mafe-event-intermediate-email-16 { + background-position: 0 -8115px; +} + +.mafe-event-intermediate-email-24 { + background-position: 0 -7018px; +} + +.mafe-event-intermediate-email-33 { + background-position: 0 -5392px; +} + +.mafe-event-intermediate-email-41 { + background-position: 0 -4219px; +} + +.mafe-event-intermediate-email-49 { + background-position: 0 -2867px; +} + +.mafe-event-intermediate-linkcatch-16 { + background-position: 0 -7571px; +} + +.mafe-event-intermediate-linkcatch-24 { + background-position: 0 -6004px; +} + +.mafe-event-intermediate-linkcatch-33 { + background-position: 0 -3706px; +} + +.mafe-event-intermediate-linkcatch-41 { + background-position: 0 -1469px; +} + +.mafe-event-intermediate-linkcatch-49 { + background-position: 0 -406px; +} + +.mafe-event-intermediate-linkthrow-16 { + background-position: 0 -7539px; +} + +.mafe-event-intermediate-linkthrow-24 { + background-position: 0 -6052px; +} + +.mafe-event-intermediate-linkthrow-33 { + background-position: 0 -3920px; +} + +.mafe-event-intermediate-linkthrow-41 { + background-position: 0 -1692px; +} + +.mafe-event-intermediate-linkthrow-49 { + background-position: 0 -751px; +} + +.mafe-event-intermediate-messagecatch-16 { + background-position: 0 -11272px; +} + +.mafe-event-intermediate-messagecatch-24 { + background-position: 0 -10843px; +} + +.mafe-event-intermediate-messagecatch-33 { + background-position: 0 -10598px; +} + +.mafe-event-intermediate-messagecatch-41 { + background-position: 0 -2303px; +} + +.mafe-event-intermediate-messagecatch-419 { + background-position: 0 -10194px; +} + +.mafe-event-intermediate-messagecatch-49 { + background-position: 0 -10070px; +} + +.mafe-event-intermediate-messagethrow-16 { + background-position: 0 -8131px; +} + +.mafe-event-intermediate-messagethrow-24 { + background-position: 0 -7042px; +} + +.mafe-event-intermediate-messagethrow-33 { + background-position: 0 -5425px; +} + +.mafe-event-intermediate-messagethrow-41 { + background-position: 0 -4260px; +} + +.mafe-event-intermediate-messagethrow-49 { + background-position: 0 -2916px; +} + +.mafe-event-intermediate-multiplecatch-16 { + background-position: 0 -7442px; +} + +.mafe-event-intermediate-multiplecatch-24 { + background-position: 0 -5859px; +} + +.mafe-event-intermediate-multiplecatch-33 { + background-position: 0 -3080px; +} + +.mafe-event-intermediate-multiplecatch-41 { + background-position: 0 -990px; +} + +.mafe-event-intermediate-multiplecatch-49 { + background-position: 0 -49px; +} + +.mafe-event-intermediate-multiplethrow-16 { + background-position: 0 -7274px; +} + +.mafe-event-intermediate-multiplethrow-24 { + background-position: 0 -5763px; +} + +.mafe-event-intermediate-multiplethrow-33 { + background-position: 0 -3302px; +} + +.mafe-event-intermediate-multiplethrow-41 { + background-position: 0 -1346px; +} + +.mafe-event-intermediate-multiplethrow-49 { + background-position: 0 -653px; +} + +.mafe-event-intermediate-parallelcatch-16 { + background-position: 0 -7354px; +} + +.mafe-event-intermediate-parallelcatch-24 { + background-position: 0 -5811px; +} + +.mafe-event-intermediate-parallelcatch-33 { + background-position: 0 -3113px; +} + +.mafe-event-intermediate-parallelcatch-41 { + background-position: 0 -1264px; +} + +.mafe-event-intermediate-parallelcatch-49 { + background-position: 0 -504px; +} + +.mafe-event-intermediate-signalcatch-16 { + background-position: 0 -8051px; +} + +.mafe-event-intermediate-signalcatch-24 { + background-position: 0 -6937px; +} + +.mafe-event-intermediate-signalcatch-33 { + background-position: 0 -5162px; +} + +.mafe-event-intermediate-signalcatch-41 { + background-position: 0 -3953px; +} + +.mafe-event-intermediate-signalcatch-49 { + background-position: 0 -2205px; +} + +.mafe-event-intermediate-signalthrow-16 { + background-position: 0 -8067px; +} + +.mafe-event-intermediate-signalthrow-24 { + background-position: 0 -6961px; +} + +.mafe-event-intermediate-signalthrow-33 { + background-position: 0 -5556px; +} + +.mafe-event-intermediate-signalthrow-41 { + background-position: 0 -4301px; +} + +.mafe-event-intermediate-signalthrow-49 { + background-position: 0 -2965px; +} + +.mafe-event-intermediate-timer-16 { + background-position: 0 -7870px; +} + +.mafe-event-intermediate-timer-24 { + background-position: 0 -6393px; +} + +.mafe-event-intermediate-timer-33 { + background-position: 0 -4405px; +} + +.mafe-event-intermediate-timer-41 { + background-position: 0 -2385px; +} + +.mafe-event-intermediate-timer-49 { + background-position: 0 -1782px; +} + +.mafe-event-start-conditional-16 { + background-position: 0 -7838px; +} + +.mafe-event-start-conditional-24 { + background-position: 0 -6527px; +} + +.mafe-event-start-conditional-33 { + background-position: 0 -4737px; +} + +.mafe-event-start-conditional-41 { + background-position: 0 -3739px; +} + +.mafe-event-start-conditional-49 { + background-position: 0 -2818px; +} + +.mafe-event-start-empty-16 { + background-position: 0 -8226px; +} + +.mafe-event-start-empty-24 { + background-position: 0 -7619px; +} + +.mafe-event-start-empty-33 { + background-position: 0 -6623px; +} + +.mafe-event-start-empty-41 { + background-position: 0 -5236px; +} + +.mafe-event-start-empty-49 { + background-position: 0 -4027px; +} + +.mafe-event-start-messagecatch-16 { + background-position: 0 -8184px; +} + +.mafe-event-start-messagecatch-24 { + background-position: 0 -7210px; +} + +.mafe-event-start-messagecatch-33 { + background-position: 0 -6770px; +} + +.mafe-event-start-messagecatch-41 { + background-position: 0 -6124px; +} + +.mafe-event-start-messagecatch-49 { + background-position: 0 -5023px; +} + +.mafe-event-start-multiplecatch-16 { + background-position: 0 -7774px; +} + +.mafe-event-start-multiplecatch-24 { + background-position: 0 -6656px; +} + +.mafe-event-start-multiplecatch-33 { + background-position: 0 -4833px; +} + +.mafe-event-start-multiplecatch-41 { + background-position: 0 -2777px; +} + +.mafe-event-start-multiplecatch-49 { + background-position: 0 -2023px; +} + +.mafe-event-start-parallelcatch-16 { + background-position: 0 -7694px; +} + +.mafe-event-start-parallelcatch-24 { + background-position: 0 -6599px; +} + +.mafe-event-start-parallelcatch-33 { + background-position: 0 -4770px; +} + +.mafe-event-start-parallelcatch-41 { + background-position: 0 -3591px; +} + +.mafe-event-start-parallelcatch-49 { + background-position: 0 -2549px; +} + +.mafe-event-start-signalcatch-16 { + background-position: 0 -7806px; +} + +.mafe-event-start-signalcatch-24 { + background-position: 0 -6417px; +} + +.mafe-event-start-signalcatch-33 { + background-position: 0 -4643px; +} + +.mafe-event-start-signalcatch-41 { + background-position: 0 -3187px; +} + +.mafe-event-start-signalcatch-48 { + background-position: 0 -2688px; +} + +.mafe-event-start-signalcatch-49 { + background-position: 0 -7822px; +} + +.mafe-event-start-timer-16 { + background-position: 0 -7790px; +} + +.mafe-event-start-timer-24 { + background-position: 0 -6345px; +} + +.mafe-event-start-timer-33 { + background-position: 0 -10471px; +} + +.mafe-event-start-timer-41 { + background-position: 0 -2467px; +} + +.mafe-event-start-timer-49 { + background-position: 0 -1510px; +} + +.mafe-gateway-complex-20 { + background-position: 0 -7126px; +} + +.mafe-gateway-complex-30 { + background-position: 0 -5132px; +} + +.mafe-gateway-complex-41 { + background-position: 0 -3632px; +} + +.mafe-gateway-complex-51 { + background-position: 0 -2113px; +} + +.mafe-gateway-complex-61 { + background-position: 0 -4962px; +} + +.mafe-gateway-eventbased-20 { + background-position: 0 -7086px; +} + +.mafe-gateway-eventbased-30 { + background-position: 0 -4803px; +} + +.mafe-gateway-eventbased-41 { + background-position: 0 -2164px; +} + +.mafe-gateway-eventbased-51 { + background-position: 0 -553px; +} + +.mafe-gateway-eventbased-61 { + background-position: 0 -296px; +} + +.mafe-gateway-exclusive-20 { + background-position: 0 -7166px; +} + +.mafe-gateway-exclusive-30 { + background-position: 0 -5102px; +} + +.mafe-gateway-exclusive-41 { + background-position: 0 -3228px; +} + +.mafe-gateway-exclusive-51 { + background-position: 0 -1921px; +} + +.mafe-gateway-exclusive-61 { + background-position: 0 -10009px; +} + +.mafe-gateway-exclusiveeventbased-20 { + background-position: 0 -7106px; +} + +.mafe-gateway-exclusiveeventbased-30 { + background-position: 0 -4932px; +} + +.mafe-gateway-exclusiveeventbased-41 { + background-position: 0 -2598px; +} + +.mafe-gateway-exclusiveeventbased-51 { + background-position: 0 -898px; +} + +.mafe-gateway-exclusiveeventbased-61 { + background-position: 0 -1162px; +} + +.mafe-gateway-inclusive-20 { + background-position: 0 -7066px; +} + +.mafe-gateway-inclusive-30 { + background-position: 0 -5072px; +} + +.mafe-gateway-inclusive-41 { + background-position: 0 -2736px; +} + +.mafe-gateway-inclusive-51 { + background-position: 0 -1600px; +} + +.mafe-gateway-inclusive-61 { + background-position: 0 -8420px; +} + +.mafe-gateway-parallel-20 { + background-position: 0 -7146px; +} + +.mafe-gateway-parallel-30 { + background-position: 0 -5630px; +} + +.mafe-gateway-parallel-41 { + background-position: 0 -4438px; +} + +.mafe-gateway-parallel-51 { + background-position: 0 -3499px; +} + +.mafe-gateway-parallel-61 { + background-position: 0 -10504px; +} + +.mafe-gateway-paralleleventbased-20 { + background-position: 0 -6803px; +} + +.mafe-gateway-paralleleventbased-30 { + background-position: 0 -4342px; +} + +.mafe-gateway-paralleleventbased-41 { + background-position: 0 -1831px; +} + +.mafe-gateway-paralleleventbased-51 { + background-position: 0 -147px; +} + +.mafe-gateway-paralleleventbased-61 { + background-position: 0 -4676px; +} + +.mafe-loop-marker-10 { + background-position: 0 -8937px; +} + +.mafe-loop-marker-15 { + background-position: 0 -8588px; +} + +.mafe-loop-marker-21 { + background-position: 0 -8497px; +} + +.mafe-loop-marker-26 { + background-position: 0 -8200px; +} + +.mafe-loop-marker-31 { + background-position: 0 -7979px; +} + +.mafe-manualtask-marker-10 { + background-position: 0 -11288px; +} + +.mafe-manualtask-marker-15 { + background-position: 0 -10964px; +} + +.mafe-manualtask-marker-21 { + background-position: 0 -10777px; +} + +.mafe-manualtask-marker-26 { + background-position: 0 -10690px; +} + +.mafe-manualtask-marker-31 { + background-position: 0 -10716px; +} + +.mafe-message_100_source_bottom, +.mafe-message_100_source_top, +.mafe-message_100_source_left, +.mafe-message_100_source_right { + background-position: 0 -8859px; +} + +.mafe-message_100_target_bottom { + background-position: 0 -8806px; +} + +.mafe-message_100_target_left { + background-position: 0 -8795px; +} + +.mafe-message_100_target_right { + background-position: 0 -8784px; +} + +.mafe-message_100_target_top { + background-position: 0 -8817px; +} + +.mafe-message_125_source_bottom, +.mafe-message_125_source_top, +.mafe-message_125_source_left, +.mafe-message_125_source_right { + background-position: 0 -8726px; +} + +.mafe-message_125_target_bottom { + background-position: 0 -8637px; +} + +.mafe-message_125_target_left { + background-position: 0 -8685px; +} + +.mafe-message_125_target_right { + background-position: 0 -8698px; +} + +.mafe-message_125_target_top { + background-position: 0 -8603px; +} + +.mafe-message_150_source_bottom, +.mafe-message_150_source_top, +.mafe-message_150_source_left, +.mafe-message_150_source_right { + background-position: 0 -8739px; +} + +.mafe-message_150_target_bottom { + background-position: 0 -8769px; +} + +.mafe-message_150_target_left { + background-position: 0 -8754px; +} + +.mafe-message_150_target_right { + background-position: 0 -8711px; +} + +.mafe-message_150_target_top { + background-position: 0 -8670px; +} + +.mafe-message_50_source_bottom, +.mafe-message_50_source_top, +.mafe-message_50_source_left, +.mafe-message_50_source_right { + background-position: 0 -9725px; +} + +.mafe-message_50_target_bottom { + background-position: 0 -9599px; +} + +.mafe-message_50_target_left { + background-position: 0 -9402px; +} + +.mafe-message_50_target_right { + background-position: 0 -9408px; +} + +.mafe-message_50_target_top { + background-position: 0 -9541px; +} + +.mafe-message_75_source_bottom, +.mafe-message_75_source_top, +.mafe-message_75_source_left, +.mafe-message_75_source_right { + background-position: 0 -9414px; +} + +.mafe-message_75_target_bottom { + background-position: 0 -9278px; +} + +.mafe-message_75_target_left { + background-position: 0 -9128px; +} + +.mafe-message_75_target_right { + background-position: 0 -9195px; +} + +.mafe-message_75_target_top { + background-position: 0 -9286px; +} + +.mafe-parallel-marker-10 { + background-position: 0 -9989px; +} + +.mafe-parallel-marker-15 { + background-position: 0 -9907px; +} + +.mafe-parallel-marker-21 { + background-position: 0 -9803px; +} + +.mafe-parallel-marker-26 { + background-position: 0 -9691px; +} + +.mafe-parallel-marker-31 { + background-position: 0 -9846px; +} + +.mafe-receivetask-marker-10 { + background-position: 0 -11298px; +} + +.mafe-receivetask-marker-15 { + background-position: 0 -11133px; +} + +.mafe-receivetask-marker-21 { + background-position: 0 -10979px; +} + +.mafe-receivetask-marker-26 { + background-position: 0 -10914px; +} + +.mafe-receivetask-marker-31 { + background-position: 0 -10883px; +} + +.mafe-scripttask-marker-10 { + background-position: 0 -11262px; +} + +.mafe-scripttask-marker-15 { + background-position: 0 -10762px; +} + +.mafe-scripttask-marker-21 { + background-position: 0 -10450px; +} + +.mafe-scripttask-marker-26 { + background-position: 0 -10400px; +} + +.mafe-scripttask-marker-31 { + background-position: 0 -10297px; +} + +.mafe-sendtask-marker-10 { + background-position: 0 -11308px; +} + +.mafe-sendtask-marker-15 { + background-position: 0 -11210px; +} + +.mafe-sendtask-marker-21 { + background-position: 0 -11148px; +} + +.mafe-sendtask-marker-26 { + background-position: 0 -11076px; +} + +.mafe-sendtask-marker-31 { + background-position: 0 -11102px; +} + +.mafe-sequence_100_target_bottom { + background-position: 0 -9547px; +} + +.mafe-sequence_100_target_left { + background-position: 1px -9469px; +} + +.mafe-sequence_100_target_right { + background-position: -1px -9422px; +} + +.mafe-sequence_100_target_top { + background-position: 0 -9514px; +} + +.mafe-sequence_125_target_bottom { + background-position: 0 -9363px; +} + +.mafe-sequence_125_target_left { + background-position: 1px -9376px; +} + +.mafe-sequence_125_target_right { + background-position: 0 -9294px; +} + +.mafe-sequence_125_target_top { + background-position: 0 -9389px; +} + +.mafe-sequence_150_target_bottom { + background-position: 0 -9307px; +} + +.mafe-sequence_150_target_left { + background-position: 2px -11472px; +} + +.mafe-sequence_150_target_right { + background-position: -1px -9332px; +} + +.mafe-sequence_150_target_top { + background-position: 0 -9235px; +} + +.mafe-sequence_50_target_bottom { + background-position: 0 -9951px; +} + +.mafe-sequence_50_target_left { + background-position: 0 -9957px; +} + +.mafe-sequence_50_target_right { + background-position: 0 -9968px; +} + +.mafe-sequence_50_target_top { + background-position: 0 -9945px; +} + +.mafe-sequence_75_target_bottom { + background-position: 0 -9752px; +} + +.mafe-sequence_75_target_left { + background-position: 0 -9838px; +} + +.mafe-sequence_75_target_right { + background-position: 0 -9830px; +} + +.mafe-sequence_75_target_top { + background-position: 0 -9717px; +} + +.mafe-sequential-marker-10 { + background-position: 0 -9999px; +} + +.mafe-sequential-marker-15 { + background-position: 0 -9930px; +} + +.mafe-sequential-marker-21 { + background-position: 0 -9731px; +} + +.mafe-sequential-marker-26 { + background-position: 0 -9665px; +} + +.mafe-sequential-marker-31 { + background-position: 0 -9760px; +} + +.mafe-servicetask-marker-10 { + background-position: 0 -11169px; +} + +.mafe-servicetask-marker-15 { + background-position: 0 -10747px; +} + +.mafe-servicetask-marker-21 { + background-position: 0 -10276px; +} + +.mafe-servicetask-marker-26 { + background-position: 0 -10119px; +} + +.mafe-servicetask-marker-31 { + background-position: 0 -8828px; +} + +.mafe-usertask-marker-10 { + background-position: 0 -8927px; +} + +.mafe-usertask-marker-15 { + background-position: 0 -8533px; +} + +.mafe-usertask-marker-21 { + background-position: 0 -6482px; +} + +.mafe-usertask-marker-26 { + background-position: 0 -7937px; +} + +.mafe-usertask-marker-31 { + background-position: 0 -7663px; +} + +/*******end sprite***********/ +.mafe-toolbar-sprite { + background-image: url(../img/bpmn_sprite_with_zoom.png); + background-repeat: no-repeat; + width: 16px; + height: 16px; + display: inline-block; +} + +.mafe-toolbar-size { + width: 17px; + height: 17px; + display: block; + margin: 2px 0 2px 2px; +} + +.mafe-toolbar-container { + padding-left: 0; +} + +.mafe-toolbar-rectangle-size { + width: 17px; + height: 13px; + display: block; + margin: 2px 0 2px 2px; +} + +/** +* PMTask Menu +*/ +.mafe-menu-task-steps { + background: url(../img/steps.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-users-action { + background: url(../img/users.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-delete-rules-action { + background: url(../img/delete_rules.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-delete-action { + background: url(../img/delete.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-properties-action { + background: url(../img/dynaforms.gif) no-repeat; + background-size: 20px 20px; +} + +/** +* Tree Menu +*/ +.mafe-menu-tree-disable { + background: url(../img/deactivate.png) no-repeat; +} + +.mafe-menu-tree-enable { + background: url(../img/activate.png) no-repeat; +} + +/** +* Sub process Menu +*/ +.mafe-menu-rules-action { + background: url(../img/rules.png) no-repeat; + background-size: 20px 20px; +} + +/** +* Toolbar Menu +*/ +.mafe-menu-toolbar-blank-dynaform { + background: url(../img/form.gif) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-toolbar-copyimport-dynaform { + background: url(../img/edit-table.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-label-annotation span { + color: black; +} + +/** +* Input Document +*/ +.mafe-inputDocument-newinput { + background-position: 0 -199px; + margin: 10px 0 10px 20px; +} + +/* BUTTON UID*/ +/*a.mafe-button-uid:link,a.mafe-button-uid:visited{ + display: block; + color: #e77e23; + font-size: 14px; + font-weight: 700; + line-height: 24px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #fdf8e2; + width: 90%; + height: 24px; + margin: 4px auto; + padding: 0 5px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} +a.mafe-button-uid:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} +.mafe-button-uid .pmui-button-label { + color: #e77e23; + font-weight:bold; +}*/ +/* BUTTON NEW*/ +/*a.mafe-button-new:link,a.mafe-button-new:visited{ + float: right; + display: block; + color: #fff; + line-height: 45px; + text-decoration: none; + background: #e77e23 url(../img/ico_mor2.png) no-repeat 5px center; + background-size : 25px; + padding: 6px 38px 6px 33px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + max-width: 80%; + height: auto; +} +a.mafe-button-new:hover{ + background: #e77e23 url(../img/ico_mor2.png) no-repeat 96% center; + background-size : 25px; + padding: 6px 38px 6px 33px; +} +.mafe-button-new .pmui-button-label { + text-transform:capitalize; +}*/ +/* BUTTON EDIT*/ +/*a.mafe-button-edit:link,a.mafe-button-edit:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #19bd9b; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-edit:hover{ + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +}*/ +/* BUTTON DELETE*/ +/*a.mafe-button-delete:link,a.mafe-button-delete:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #e84c3d; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-delete:hover { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +}*/ +/* BUTTON PROPERTIES*/ +/*a.mafe-button-properties:link,a.mafe-button-properties:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #3D78E5; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-properties:hover { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} +a.mafe-button-img-delete { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-delete .pmui-button-icon { + background-image: url(../img/delete.png); + background-repeat: no-repeat; + display: inline-block; + width: 19px; + height: 18px; +} +a.mafe-button-img-delete .pmui-button-label { + display: none; +} +a.mafe-button-img-edit { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-edit .pmui-button-icon { + background-image: url(../img/edit.gif); + background-repeat: no-repeat; + display: inline-block; + width: 23px; + height: 20px; +} +a.mafe-button-img-edit .pmui-button-label { + display: none; +} + +a.mafe-button-img-properties { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-properties .pmui-button-icon { + background-image: url(../img/edit-table.png); + background-repeat: no-repeat; + display: inline-block; + width: 17px; + height: 16px; +} +a.mafe-button-img-properties .pmui-button-label { + display: none; +} + +.mafe-button-text{ + background-color :#FDFDFD; +} +.mafe-button-text .pmui-button-label{ + background-color :#FDFDFD; + color: black; + text-transform:capitalize; +} +*/ +/* ToolbarPanel */ +.mafe-toolbarpanel-btn { + text-decoration: none; + list-style: none; + text-align: center; +} + +.mafe-toolbarpanel-btn-span { + font-size: 10px; +} + +.mafe-toolbarpanel-btn-img { + width: 30px; + height: 30px; +} + +.mafe-toolbarpanel-tooltip { + font-size: 10px; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + -moz-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; + background-color: #6D87B7; + color: white; +} + +/** + * Styles for arrows + */ +.mafe-decorator_50_target_right { + border-bottom: 3px solid transparent; + border-top: 3px solid transparent; + border-right: 6px solid black; +} + +.mafe-decorator_75_target_right { + border-bottom: 4px solid transparent; + border-top: 4px solid transparent; + border-right: 8px solid black; +} + +.mafe-decorator_100_target_right { + border-bottom: 5px solid transparent; + border-top: 5px solid transparent; + border-right: 10px solid black; +} + +.mafe-decorator_125_target_right { + border-bottom: 6px solid transparent; + border-top: 6px solid transparent; + border-right: 12px solid black; +} + +.mafe-decorator_150_target_right { + border-bottom: 7px solid transparent; + border-top: 7px solid transparent; + border-right: 14px solid black; +} + +.mafe-decorator_50_target_bottom { + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-bottom: 6px solid black; +} + +.mafe-decorator_75_target_bottom { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 8px solid black; +} + +.mafe-decorator_100_target_bottom { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 10px solid black; +} + +.mafe-decorator_125_target_bottom { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 12px solid black; +} + +.mafe-decorator_150_target_bottom { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 14px solid black; +} + +.mafe-decorator_50_target_left { + border-bottom: 3px solid transparent; + border-top: 3px solid transparent; + border-left: 6px solid black; +} + +.mafe-decorator_75_target_left { + border-bottom: 4px solid transparent; + border-top: 4px solid transparent; + border-left: 8px solid black; +} + +.mafe-decorator_100_target_left { + border-bottom: 5px solid transparent; + border-top: 5px solid transparent; + border-left: 10px solid black; +} + +.mafe-decorator_125_target_left { + border-bottom: 6px solid transparent; + border-top: 6px solid transparent; + border-left: 12px solid black; +} + +.mafe-decorator_150_target_left { + border-bottom: 7px solid transparent; + border-top: 7px solid transparent; + border-left: 14px solid black; +} + +.mafe-decorator_50_target_top { + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 6px solid black; +} + +.mafe-decorator_75_target_top { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 8px solid black; +} + +.mafe-decorator_100_target_top { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 10px solid black; +} + +.mafe-decorator_125_target_top { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 12px solid black; +} + +.mafe-decorator_150_target_top { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 14px solid black; +} + +/* ---------------------------- NAV ---------------------------- */ +.navBar { + background: #3397e2; + color: #fff; + height: auto; + left: 0px; + position: fixed; + /*top: 1px;*/ + width: 97%; + z-index: 2; + padding: 0 1% 0 2%; + display: none; + border: 1px solid #2979b8; +} + +.navBar .head { + background-color: #3b4753; + cursor: move; + font-size: 12px; + height: 16px; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; +} + +.navBar nav { + position: relative; + font-size: 11px; + height: 35px; + float: right; + font-weight: 600; +} + +.navBar nav ul { + position: relative; + list-style: none; + height: 35px; + margin: 0; + padding: 0; +} + +.navBar nav ul li { + float: right; + border-right: 1px solid #70b5ec; + border-left: 1px solid #70b5ec; + padding: 2px 5px; +} + +.navBar nav ul li:hover { + background-color: #2979b4; + border-right: 1px solid #2979b8; + border-left: 1px solid #2979b8; +} + +.navBar nav ul li:last-child { + border: 0; +} + +.navBar nav ul li a { + display: inline-block; + color: #fff; + line-height: 31px; + text-align: center; + text-decoration: none; + background-color: transparent; + height: 29px; + padding: 0 10px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + cursor: pointer; +} + +.navBar nav ul li b { + display: inline-block; + color: #fff; + line-height: 31px; + text-align: center; + text-decoration: none; + background-color: transparent; + height: 29px; + padding: 0 10px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + cursor: pointer; +} + +.navBar nav ul li input { + height: 31px; + width: 58px; + padding: 5px; +} + +.navBar .processName { + width: 55%; + float: left; + /*border: 1px solid red; */ +} + +.navBar .buttonSection { + /*border: 1px solid green; */ + width: 40%; + /* don't want this */ + float: right; +} + +.navBar h2 { + /*float: left;*/ + text-align: left; + font-size: 12px; + font-weight: 700px; + line-height: 35px; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +a.mafe-button-save:link, a.mafe-button-save:visited { + width: 70px; +} + +.mafe-save-process { + color: white; + background: #19bd9b; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; + border-left: 1px solid lightgray !important; + border-right: 1px solid lightgray !important; + border-bottom: 1px solid lightgray !important; + padding-right: 25px !important; +} + +li.mafe-redo { + margin-top: -2px; +} + +li.mafe-undo { + margin-top: -2px; +} + +a.mafe-button-save:hover { + /*background: #16a085 !important;*/ + color: white; +} + +.mafe-dropdown-zoom { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + font-size: 12px; +} + +.mafe-dropdown-zoom option { + font-size: 12px; +} + +a.mafe-button-fullscreen:link, a.mafe-button-fullscreen:visited { + float: left; + display: block; + outline: none; + text-indent: -9000px; + text-decoration: none; + background: url(../img/mafe-tools.png) no-repeat; + background-position: 0 -1036px; + width: 11px; + margin: 0 5px 0 5px; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; +} + +a.mafe-button-fullscreen:hover { + -ms-transform: scale(1); + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} + +/* ---------------------------- NAV ---------------------------- */ +/* ---------------------------- PANELES ---------------------------- */ +.content { + /*position: relative; + background: url(../img/bg_designer.gif) repeat; + width: 100%; + height: 700px; + overflow: auto;*/ +} + +.bpmn_shapes { + /*right: 20px;*/ + border: 1px solid #d6d7d9; + background-color: #e9e9e9; + /*width: 88px;*/ + padding-top: 5px; + padding-bottom: 5px; + /*overflow: visible;*/ + z-index: 1; + position: fixed; + top: 35px; + left: 0px; + height: 31px; + width: 100%; + display: none; +} + +.bpmn_shapes .head { + background-color: #d5d8dd; + height: 16px; + cursor: move; +} + +.bpmn_shapes .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.bpmn_shapes .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.bpmn_shapes ul:nth-child(2) { + border-top: none; +} + +.bpmn_shapes ul:last-child { + border-bottom: 0; +} + +.bpmn_shapes ul { + position: relative; + overflow: hidden; + list-style: none; + width: 96%; + margin: 0 0%; + padding: 4px 0; + display: inline; +} + +.bpmn_shapes ul li { + display: inline-block; + margin-top: 2px; + margin: 0 4px; + margin-top: 2px; + padding: 0; +} + +.bpmn_shapes ul li a { + float: left; + display: inline-block; + color: #fff; + line-height: 10px; + text-align: center; + text-decoration: none; + padding: 3px 4px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls { + top: 90px; + right: 20px; + font-size: 11px; + border: 1px solid #d8dbdf; + background-color: #3397e2; + width: 200px; + z-index: 1; + position: fixed; + font-weight: 700; + display: none; +} + +.content_controls .head { + background-color: #3b4753; + height: 18px; + cursor: move; +} + +.content_controls .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.content_controls ul { + float: left; + position: relative; + overflow: hidden; + list-style: none; + width: 96%; + margin: 0 2%; + padding: 0; +} + +.content_controls ul li:first-child { + border-top: 0; +} + +.content_controls ul li:last-child { + border-bottom: 0; +} + +.content_controls ul li { + float: left; + display: inline-block; + border-bottom: 1px solid #20669D; + width: 100%; + margin: 0; + padding: 3px 0; +} + +.content_controls ul li:hover { + background-color: #2979b4; +} + +.content_controls ul li a { + float: left; + display: inline-block; + color: #fff; + line-height: 23px; + text-align: center; + text-decoration: none; + padding: 3px 3px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls li { + position: relative; +} + +a.btn_create { + float: right; + position: absolute; + right: 0px; + top: 1px; +} + +a.btn_create:link, a.btn_create:visited { + float: right; + display: block; + color: #fff; + line-height: 23px; + text-decoration: none; + background: transparent url(../img/btn_create.png) no-repeat center !important; + width: 20px; + height: 23px; + padding: 3px 0; + filter: alpha(opacity=50); + -moz-opacity: 0.50; + -khtml-opacity: 0.50; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; +} + +a.btn_create span { + filter: alpha(opacity=0); + -moz-opacity: 0.00; + -khtml-opacity: 0.00; + opacity: 0.00; +} + +a.btn_create:hover { + background: #20bb99 url(../img/btn_create.png) no-repeat 5px center !important; + width: 45px; + height: 23px; + padding: 3px 0 3px 18px; + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} + +a.btn_create:hover span { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} + +.bpmn_shapes_legend { + /*top: 1px;*/ + /*right: 20px;*/ + border: 1px solid #d6d7d9; + background-color: #e9e9e9; + width: 250px; + padding-bottom: 2px; + overflow: visible; + z-index: 1; + position: fixed; + right: 20px; + top: 70px; + display: none; +} + +.bpmn_shapes_legend .head { + background-color: #d5d8dd; + height: 16px; + cursor: move; +} + +.bpmn_shapes_legend .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.bpmn_shapes_legend .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.bpmn_shapes_legend .icon-legend { + height: 20px; + width: 50px; + margin: 5px; + display: inline-block; +} + +.bpmn_shapes_legend .text-legend { + font-size: small; + display: inline-block; + margin-top: 9px; +} + +/* ---------------------------- PANELES ---------------------------- */ +/* ---------------------------- ELEMENTOS BASE ---------------------------- */ +.bold { + font-weight: 700; +} + +.small { + font-size: 12px; +} + +.color2 { + color: #f46500; +} + +/* ---------------------------- ELEMENTOS BASE ---------------------------- */ +.mafe-shapes-toggle { + background-image: url("../img/shapes-toogle.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 16px; + margin-top: 2px; +} + +.mafe-shapes-plus { + background-image: url("../img/plus.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 16px; + margin-top: 2px; +} + +.mafe-shapes-refresh { + background-image: url("../img/shapes-refresh.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 14px; + background-size: 10px; + margin-top: 4px; +} + +.mafe-process-object { + color: white; + margin-top: 3px; + margin-left: 7px; + float: left; +} + +/* + toolbar sprite +*/ +.mafe-sprite, .mafe-fullscream, .mafe-toolbar-annotation, .mafe-toolbar-blackbox, .mafe-toolbar-boundary, .mafe-toolbar-data-object, .mafe-toolbar-data-store, .mafe-toolbar-end-message, .mafe-toolbar-end, .mafe-toolbar-gateway-exclusive, .mafe-toolbar-gateway-inclusive, .mafe-toolbar-gateway-parallel, .mafe-toolbar-group, .mafe-toolbar-horizontal-line, .mafe-toolbar-horizontal-text, .mafe-toolbar-intermediate-receive-mesage, .mafe-toolbar-intermediate-send-mesage, .mafe-toolbar-lane, .mafe-toolbar-participant, .mafe-toolbar-pool, .mafe-toolbar-start-message, .mafe-toolbar-start-timer, .mafe-toolbar-start, .mafe-toolbar-subprocess, .mafe-toolbar-task, .mafe-toolbar-vertical-line, .mafe-toolbar-vertical-text, .mafe-button-redo, .mafe-button-undo, .mafe-button-close, .mafe-toolbar-lasso, .mafe-toolbar-help, .mafe-toolbar-end-email, .mafe-toolbar-intermediate-email, .mafe-toolbar-event-intermediate-timer, .mafe-toolbar-event-start-timer, .mafe-toolbar-validation, .mafe-validator-close, .mafe-icon-error, .mafe-icon-warning { + background: url("../img/mafe-tools.png") no-repeat; + width: 23px; + height: 23px; +} + +.mafe-button-close { + background-position: 0 -966px; +} + +.mafe-button-close:hover, .mafe-button-close.button-close_hover, .mafe-button-close.button-close-hover { + background-position: 0 -1156px; +} + +.mafe-button-redo { + background-position: 0 -888px; +} + +.mafe-button-redo:hover, .mafe-button-redo.button-redo_hover, .mafe-button-redo.button-redo-hover { + background-position: 0 -863px; +} + +.mafe-button-undo { + background-position: 0 -837px; +} + +.mafe-button-undo:hover, .mafe-button-undo.button-undo_hover, .mafe-button-undo.button-undo-hover { + background-position: 0 -913px; +} + +.mafe-fullscream { + background-position: 0 -1036px; +} + +.mafe-icon-error { + background-position: 0 -1256px; +} + +.mafe-icon-warning { + background-position: 0 -1271px; +} + +.mafe-plus { + background-position: 0 -790px; +} + +.mafe-shapes-refresh { + background-position: 0 -952px; +} + +.mafe-shapes-toogle { + background-position: 0 -938px; +} + +.mafe-toolbar-annotation { + background-position: 0 -730px; +} + +.mafe-toolbar-blackbox { + background-position: 0 -530px; +} + +.mafe-toolbar-boundary { + background-position: 0 -120px; +} + +.mafe-toolbar-data-object { + background-position: 0 -1066px; +} + +.mafe-toolbar-data-store { + background-position: 0 -300px; +} + +.mafe-toolbar-easy { + background-position: 0 -450px; +} + +.mafe-toolbar-end-email { + background-position: 0 -390px; +} + +.mafe-toolbar-end-message { + background-position: 0 -150px; +} + +.mafe-toolbar-end { + background-position: 0 -240px; +} + +.mafe-toolbar-event-intermediate-timer { + background-position: 0 -270px; +} + +.mafe-toolbar-event-start-timer { + background-position: 0 -620px; +} + +.mafe-toolbar-gateway-exclusive { + background-position: 0 -420px; +} + +.mafe-toolbar-gateway-inclusive { + background-position: 0 -360px; +} + +.mafe-toolbar-gateway-parallel { + background-position: 0 -470px; +} + +.mafe-toolbar-group { + background-position: 0 -560px; +} + +.mafe-toolbar-help { + background-position: 0 -680px; +} + +.mafe-toolbar-help:hover, .mafe-toolbar-help.toolbar-help_hover, .mafe-toolbar-help.toolbar-help-hover { + background-position: 0 -705px; +} + +.mafe-toolbar-horizontal-line { + background-position: 0 -1196px; +} + +.mafe-toolbar-horizontal-text { + background-position: 0 -807px; +} + +.mafe-toolbar-intermediate-email { + background-position: 0 -210px; +} + +.mafe-toolbar-intermediate-receive-mesage { + background-position: 0 0; +} + +.mafe-toolbar-intermediate-send-mesage { + background-position: 0 -30px; +} + +.mafe-toolbar-lane { + background-position: 0 -500px; +} + +.mafe-toolbar-lasso { + background-position: 0 -330px; +} + +.mafe-toolbar-participant { + background-position: 0 -1096px; +} + +.mafe-toolbar-pool { + background-position: 0 -590px; +} + +.mafe-toolbar-start-message { + background-position: 0 -60px; +} + +.mafe-toolbar-start-timer { + background-position: 0 -650px; +} + +.mafe-toolbar-start { + background-position: 0 -180px; +} + +.mafe-toolbar-subprocess { + background-position: 0 -1006px; +} + +.mafe-toolbar-task { + background-position: 0 -1126px; +} + +.mafe-toolbar-validation { + background-position: 0 -90px; +} + +.mafe-toolbar-vertical-line { + background-position: 0 -1226px; +} + +.mafe-toolbar-vertical-text { + background-position: 0 -760px; +} + +.mafe-validator-close { + background-position: 0 -1176px; +} + +.mafe-validator-close:hover, .mafe-validator-close.validator-close_hover, .mafe-validator-close.validator-close-hover { + background-position: 0 -986px; +} + +/*end toolbar sprite**/ +span.mafe-button-redo { + width: 22px; + height: 24px; + display: block; + margin-top: 4px; +} + +span.mafe-button-undo { + width: 22px; + height: 24px; + display: block; + margin-top: 4px; +} + +span.mafe-button-close { + width: 20px; + height: 20px; + display: block; + margin-top: 7px; +} + +span.mafe-validator-close { + width: 20px; + height: 20px; + display: block; + margin: 4px 8px 4px 4px; +} + +a.mafe-close { + margin: -1px; +} + +span.mafe-toolbar-help { + width: 23px; + height: 23px; + display: block; + margin-top: 2px; +} + +span.mafe-toolbar-validation { + width: 9px; + height: 20px; + display: block; + margin-top: 6px; +} + +/** + * Tooltip for actions + */ +.mafe-action-tooltip { + font-size: 10px; + background-color: #ECF0F1; +} + +/** + * Tooltip Black + */ +.ui-tooltip.mafe-action-tooltip-black { + background: black; + color: white; +} + +/** Rotate Label **/ +.rotateText { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-transform: rotate(-90deg); + /* IE9+ */ + -moz-transform: rotate(-90deg); + /* Firefox */ + -o-transform: rotate(-90deg); + /* Opera */ + -webkit-transform: rotate(-90deg); + /* Safari & Chrome */ + transform: rotate(-90deg); + display: block; + float: center; + margin: 0 10px 0; +} + +.rotateControl { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-transform: rotate(90deg); + /* IE9+ */ + -moz-transform: rotate(90deg); + /* Firefox */ + -o-transform: rotate(90deg); + /* Opera */ + -webkit-transform: rotate(90deg); + /* Safari & Chrome */ + transform: rotate(90deg); + display: block; + float: right; + margin: 0 10px 0; +} + +.mafe-textarea-resize .pmui-textareacontrol { + resize: vertical; +} + +.dropableClass { + background-color: #e2eae3; +} + +.loader { + position: fixed; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + z-index: 9999; + background: url("../img/loading.gif") 50% 50% no-repeat #f9f9f9; +} + +.screencast { + position: relative; + width: 480px; + height: 161px; + z-index: 9999; + background: url("../img/bpmnProcessmaker.gif") 50% 50% no-repeat #f9f9f9; +} + +.startcoronahelp { + position: relative; + height: 100px; + z-index: 9999; + background: url("../img/startcoronahelp.png") 50% 50% no-repeat; +} + +.mafe-button-menu { + display: inline-block; + vertical-align: top; + position: absolute; + top: 0px; + bottom: 2px; + padding-top: 5px; +} + +.mafe-button-menu img { + cursor: pointer; +} + +.mafe-button-menu-option { + padding: 7px; + color: black; + cursor: pointer; + position: absolute; + height: 14px; + width: 107px; + border: 1px solid lightgray; + background-color: #e8e8e8; + top: 2px; + left: -6px; +} + +.mafe-button-menu-option:hover { + background-color: lightgray; +} + +.mafe-button-menu-container { + position: relative; +} + +.mafe-can-connect-layer { + background-color: #9dee9d; + opacity: 0.4; +} + +.mafe-can-not-connect-layer { + background-color: #f590a5; + opacity: 0.4; +} + +.arrow_box { + position: absolute; + background: #ffffff; + border: 1px solid #BCBCBC; + padding-right: 5px; + font-size: smaller; + width: auto; + min-width: 27%; +} + +.arrow_box:after, .arrow_box:before { + right: 100%; + top: 10px; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.arrow_box:after { + border-color: rgba(255, 255, 255, 0); + border-right-color: #ffffff; + border-width: 7px; + margin-top: -7px; +} + +.arrow_box:before { + border-color: rgba(188, 188, 188, 0); + border-right-color: #BCBCBC; + border-width: 8px; + margin-top: -8px; +} + +.bpmn_validator { + /* background: #3397e2; */ + height: auto; + /* left: 0px; */ + /* position: fixed; */ + /* top: 68%; */ + width: 99.4%; + z-index: 2; + /* display: none; */ + border: 4px solid #E5E5E5; + visibility: hidden; + width: 100%; + position: fixed; + bottom: 0; + left: 0; +} + +.validator_header { + height: 28px; + background-color: #262A35; + color: #fff; +} + +.validator_body { + background-color: white; + font-size: smaller; +} + +.validator-close { + float: right; +} + +i.mafe-icon-error { + float: left; + height: 15px; + height: 15px; +} + +i.mafe-icon-warning { + float: left; + height: 15px; + height: 15px; +} + +.validator_header h2 { + text-align: left; + font-size: 12px; + line-height: 28px; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-left: 10px; + float: left; +} + +table.dataTable thead th, table.dataTable thead td { + padding: 10px 18px; + border-bottom: none; + background-color: #B6B6B6; + color: white; +} + +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: none; +} + +/* + * Sprite Validator Icons + */ +.mafe-sprite, .mafe-style-error-marker-10, .mafe-style-error-marker-14, .mafe-style-error-marker-17, .mafe-style-error-marker-21, .mafe-style-error-marker-7, .mafe-style-warning-marker-10, .mafe-style-warning-marker-14, .mafe-style-warning-marker-17, .mafe-style-warning-marker-21, .mafe-style-warning-marker-7 { + background-image: url("../img/mafe-validate.png"); + background-repeat: no-repeat; +} + +/* Icons for Errors */ +.mafe-style-error-marker-10 { + background-position: 0 0; +} + +.mafe-style-error-marker-14 { + background-position: 0 -10px; +} + +.mafe-style-error-marker-17 { + background-position: 0 -24px; +} + +.mafe-style-error-marker-21 { + background-position: 0 -41px; +} + +.mafe-style-error-marker-7 { + background-position: 0 -62px; +} + +/* Icons for Warning */ +.mafe-style-warning-marker-10 { + background-position: 0 -69px; +} + +.mafe-style-warning-marker-14 { + background-position: 0 -78px; +} + +.mafe-style-warning-marker-17 { + background-position: 0 -91px; +} + +.mafe-style-warning-marker-21 { + background-position: 0 -107px; +} + +.mafe-style-warning-marker-7 { + background-position: 0 -127px; +} + +.crown-container { + z-index: auto; + display: table; + padding-left: 4px; +} + +.crown-container .row { + display: table-row; +} + +.crown-container .row .item-crown { + display: table-cell; +} + +.mafe-corona-task { + background: url("../img/corona-task.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-task:hover { + background: url("../img/corona-task.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-gateway-exclusive { + background: url("../img/corona-gateway-exclusive.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-gateway-exclusive:hover { + background: url("../img/corona-gateway-exclusive.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-intermediate { + background: url("../img/corona-intermediate.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-intermediate:hover { + background: url("../img/corona-intermediate.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-end { + background: url("../img/corona-end.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-end:hover { + background: url("../img/corona-end.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-flow { + background: url("../img/corona-flow.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-flow:hover { + background: url("../img/corona-flow.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-settings { + background: url("../img/corona-settings.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-settings:hover { + background: url("../img/corona-settings.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-delete { + background: url("../img/corona-delete.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-delete:hover { + background: url("../img/corona-delete.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-textfield-rename { + background: url("../img/corona-textfield-rename.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-textfield-rename:hover { + background: url("../img/corona-textfield-rename.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +/*Dynaform Creation Buttons*/ +.pmui .mafeButton .pmMafeButtonsIconBlack { + background: #474747 url(../img/form.png) no-repeat center; + background-size: contain; + height: 55px; + width: 100px; + margin-top: 15px; +} + +.pmui .mafeButton .pmMafeButtonsIconPMTable { + background: #474747 url(../img/table.png) no-repeat center; + background-size: contain; + height: 55px; + width: 80px; + margin-top: 15px; +} + +.pmui .mafeButton .pmMafeButtonsIconCopy { + background: #474747 url(../img/copy_import.png) no-repeat center; + background-size: contain; + height: 55px; + width: 80px; + margin-top: 15px; +} + +.pmui.varButton-delete { + background: #e84c3d; + padding: 0 15px; +} + +.pmui.varButton-edit { + background: #19bd9b; + padding: 0 15px; +} + +/* AccordionItem */ +.pmui-accordion-item-header { + background-color: #DFE8F6; + border-top: 1px solid #ada9a9; + border-bottom: 1px solid #ada9a9; + cursor: pointer; + overflow-wrap: break-word; + padding: 2px; + text-align: left; +} + +/*.pmtrigger .newPmtrigger .pmui-treepanel-node-icon{ + background: grey; +}*/ +.pmcustomtrigger .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmcopytrigger .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmfunction .pmui-treepanel-node-father .pmui-treepanel-node-collapsed .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +/*accordion*/ +.pmcustomtrigger { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -63px -250px; +} + +.pmcopytrigger { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -65px -271px; +} + +.pmFunctions { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -66px -120px; +} + +.pmTrSharepoint { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -79px -92px; +} + +.pmTrAlfresco { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -72px -223px; +} + +.pmZimbra { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -78px -15px; +} + +.pmSugar { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -68px -152px; +} + +.pmTalend { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -85px -48px; +} + +.ui-tooltip { + overflow-wrap: break-word; +} + + +.mafe-designer-assigment-button { + background-color: #d7d9dd; + font-size: 10; + text-transform: none; +} + +.mafe-designer-assigment-grid .pmui-gridpanelcell { + text-align: left; +} + +.mafe-grid-button { + background-color: transparent; + height: 0; + padding: 0px 0px; +} + +.mafe-grid-button.button-icon-user .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: 1px -195px; + width: 14px; + height: 17px; + display: block; +} + +.mafe-grid-button.button-icon-group .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -2px -135px; + width: 22px; + height: 17px; + display: block; +} + +.mafe-grid-button .button-label { + display: none; +} + +.mafe-designer-assigment-grid .pmui-gridpanelcolumn { + background-color: #FFFFFF; + padding: 0px 10px; +} + +.mafe-designer-assigment-grid .mafe-assigment-panel { + padding: 0px 10px; +} + +/* PANEL */ +/* +.mafe-assigment-panel .pmui-panel { + background-color: transparent; +} + + +.mafe-assigment-panel-right{ + background-color:#eaebed; + padding-left: 10px; +} + +.mafe-assigment-panel-global { + background-color: transparent; + padding-left: 20px; + padding-right: 0px; +} */ +/* TEXT SEARCH */ +.pmui.pmui-textfield.mafe-assigment-search { + text-align: left; +} + +/* BUTTONS SEARCH */ +/* GRID ASSIGNES*/ +/*.mafe-designer-assigment-grid { + background-color: #FFFFFF; + text-align: left; + padding: 0px 0px; +} + +.mafe-designer-assigment-grid .pmui-gridpanel-table{ + min-height: 0em; +}*/ +.pmui-pmtooltipmessage .pmui-button-label { + color: #999999; + font-size: 10px; +} + +.pmui-pmtooltipmessage .mafe-tooltip-close { + background: transparent; + margin: 0px 0px; + padding: 0px 0px; + width: auto; + height: auto; + color: black; +} + +.pmui-pmtooltipmessage .mafe-tooltip-header { + background: #EEF1F6; + margin: 0px 7px; + padding: 4px 0px; + width: auto; + height: 6px; + color: black; +} + +.pmui-pmtooltipmessage .mafe-tooltip-body { + background: #EEF1F6; + padding: 10px; +} + +.pmui-pmtooltipmessage { + background: #FFFFFF; + font-size: 10; + border: 1px solid #e7e7e7; + -webkit-box-shadow: 2px 2px 5px 0px #999; + -moz-box-shadow: 2px 2px 5px 0px #999; + filter: shadow(color=#999999, direction=135, strength=2); +} + +#list-usersIngroup { + width: 175px; + max-height: 100px; + background: #eef1f6; +} + +#list-usersIngroup #list-usersIngroup-iem { + font-size: 13px; + text-overflow: ellipsis; + overflow: hidden; + display: block; + white-space: nowrap; + width: 175px; + color: #333333; +} + +#tooltipmessagecustombody { + float: left; + padding: 10px; +} + +#tooltipmessagecustom #header { + width: 100%; + padding: 2px; + height: 20px; + box-sizing: border-box; + background-color: #e7e7e7; +} + +#tooltipmessagecustom #header a { + float: right; + margin-right: 4px; + cursor: pointer; +} + +.pmui .mafe-button-img-properties .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -91px -270px; +} + +.pmui .mafe-button-img-edit .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -89px -292px; +} + +.pmui .mafe-button-img-delete .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmui .mafe-button-img-delete .button-icon, .pmui .mafe-button-img-edit .button-icon, .pmui .mafe-button-img-properties .button-icon { + width: 18px; + height: 18px; + display: inline-block; +} + +a.mafe-button-img-properties, a.mafe-button-img-delete, a.mafe-button-img-edit { + background-color: transparent; +} + +.pmui .mafe-button-img-properties .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -91px -270px; +} + +.pmui .mafe-button-img-edit .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -89px -292px; +} + +.pmui .mafe-button-img-delete .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmui .mafe-button-img-delete .button-icon, .pmui .mafe-button-img-edit .button-icon, .pmui .mafe-button-img-properties .button-icon { + width: 18px; + height: 18px; + display: inline-block; +} + +a.mafe-button-img-properties, a.mafe-button-img-delete, a.mafe-button-img-edit { + background-color: transparent; +} + +.itemsSteps .pmui-treepanel-node-father > .pmui-treepanel-node-title .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.itemsSteps .pmui-treepanel-node-leaf .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.treePanelTriggers .pmui-treepanel-node-father > .pmui-treepanel-node-title .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.treePanelTriggers .pmui-treepanel-node-leaf .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.itemsSteps { + border-radius: 7px; + background: white; + box-sizing: border-box; + border: 1px solid #ccc; +} + +.treePanelTriggers { + border-radius: '7px'; + border: 1px solid #ccc; + width: 216px; + overflow: auto; +} + +#accordionPanelTriggers .pmui-gridpanelcell-content { + padding: 0px; +} + +.mafe-step-arrow-up { + background: url(../img/arrow-up.png) no-repeat; + background-size: 20px 10px; + width: 20px; + height: 10px; + margin: 0px; + padding: 0px; +} + +.mafe-step-arrow-down { + background: url(../img/arrow-down.png) no-repeat; + background-size: 20px 10px; + width: 20px; + height: 10px; + margin: 0px; + padding: 0px; +} + +.steps-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + list-style: none; + height: 2em; + text-align: center; + color: #9b9b9b; +} + +.steps-placeholder .placeholder-index { + display: block; + padding: 7px; +} + +@charset "UTF-8"; +.mafe-col { + background: #676767; + /*background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod…EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #b0b1b3 0%, #939497 10%, #727375 91%, #595959 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b0b1b3), color-stop(10%,#939497), color-stop(91%,#727375), color-stop(100%,#595959)); + background: -webkit-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -o-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -ms-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: linear-gradient(to bottom, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b0b1b3', endColorstr='#595959',GradientType=0 );*/ + color: white; + font-size: 12px; + width: auto; + padding: 6px 15px; + font-weight: inherit; +} + +.mafe-body-properties { + font-size: 11px; +} + +.mafe-field-labelCell { + padding: 2px; + border-bottom: 1px solid #D6D6D6; +} + +.pmui-rowfield:hover { + background: #D6D6D6; +} + +.mafe-field-labelCell .pmui-textcontrol { + border: 1px solid white; +} + +.mafe-field-labelCell .pmui-textcontrol, .mafe-field-labelCell .pmui-dropdownlistcontrol { + font-size: 12px; +} + +.mafe-table-properties tr:nth-child(odd) { + background-color: #E5E5E5; +} + +.mafe-table-properties tr:nth-child(even) { + background-color: #F2F2F2; +} + +.mafe-field-labelCell .pmui-button { + color: #4e4d4d; + border-radius: 2px; + float: right; + border: 1px solid #b1b1b1; + background: -moz-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 91%, #bababa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(10%, #eaeaea), color-stop(91%, #cfcfcf), color-stop(100%, #bababa)); + background: -webkit-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: -o-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: -ms-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: linear-gradient(to bottom, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); +} + +.pmui-rowfield .error { + outline: 1px solid #ecc3c2; + border: 1px solid white; +} + +.pmui-rowfield.error { + color: red; +} + +.pmui-pmformgrid { + padding: 1em 0 1em 1em; + box-sizing: border-box; + background: #f1f1f1; +} + +.pmdesigner-initialrow { + height: 10em !important; +} + +.pmdesigner-formgrid-head, +.pmdesigner-formgrid-headrow, +.pmdesigner-formgrid-headcell { + padding: 0; + height: 0; +} + +.pmdesigner-textMessageContent { + color: #777f8b; +} + +/*.pmdesigner-mainpanel-slec, +.pmdesigner-formgrid, +.pmdesigner-formgrid-bodyrow, +.pmdesigner-formgrid-bodycell { + box-sizing: border-box; + border-collapse: collapse; + border: 1px dotted #c0c0c0; +}*/ +.pmdesigner-formgrid-bodyrow { + background: white; +} + +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell { + background: #F0F0F0; +} + +.pmdesigner-rowhandler { + box-sizing: border-box; + background: url("../img/moveUpDown.png") no-repeat center rgba(224, 222, 222, 0.8); + display: inline-block; + padding: 0.3em; + position: absolute; + top: 0; + left: 0; + color: white; + cursor: move; +} + +.pmui-window.pmdesigner-dropdownconfig .pmui-window-body { + padding: 0 1em; +} + +.pmui-gridfieldcell.gridfieldcell-bodycell.pmui-containeritembehavior-hover, +.pmdesigner-formgrid-bodycell.pmui-containeritembehavior-hover { + border-style: dashed; + background: #FCF8D6; + border-color: #e9ca27; + border-width: 2px; + color: orange; +} + +.pmdesigner-formgrid-bodycell { + min-height: 2em; + background: white; +} + +.unique-cell { + text-align: center; + font-size: 30px; + color: #aaa8a8; + height: 5em; +} + +/* +.pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell.pmdesigner-active +{ + background: #ECECE9; + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod?EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 91%, #bababa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(10%,#eaeaea), color-stop(91%,#cfcfcf), color-stop(100%,#bababa)); + background: -webkit-linear-gradient(top, #ffffff 0%,#F1F3CA 10%,#cfcfcf 91%,#bababa 100%); + background: -o-linear-gradient(top, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + background: -ms-linear-gradient(top, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + background: linear-gradient(to bottom, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeaea', endColorstr='#cfcfcf',GradientType=0 ); +} +*/ +.pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmui-gridfieldcell.gridfieldcell-bodycell.pmdesigner-active { + background: #C0C0C0; + color: white; +} + +.pmdesigner-formgrid-bodycell .pmui-field-label { + color: inherit; +} + +.pmdesigner-formgrid-headcell { + width: 8.333333333333%; + box-sizing: border-box; +} + +#pmdesigner-mainpanel .pmui-contextmenu-target { + background: #F0F0F0; +} + +.pmdesigner-formpanel { + display: block; + border: 1px solid #e0e0e0; +} + +.pmdesigner-formpanel:hover { + background: #e0e0e0; +} + +.pmui.ui-layout-pane.right-layout-panel { + padding: 0px; +} + +.pmui.pmui-panel.pmdesigner-layout-eastpanel { + overflow-x: hidden; +} + +.toolbox-title { + display: block; + padding: 5px; + background: linear-gradient(to bottom, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + font-size: 14px; +} + +/*.pmui-accordion-item-header { + background: #b0b1b3; + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod?EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #b0b1b3 0%, #939497 10%, #727375 91%, #595959 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b0b1b3), color-stop(10%,#939497), color-stop(91%,#727375), color-stop(100%,#595959)); + background: -webkit-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -o-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -ms-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: linear-gradient(to bottom, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b0b1b3', endColorstr='#595959',GradientType=0 ); + color: #F0F0F0; + border-color: #888; +}*/ +.pmui-containeritembehavior-placeholder { + visibility: visible; + background: rgba(128, 128, 128, 0.3); + border: 2px #888 dashed; + list-style: none; + height: 2em; +} + +/* +.pmui.pmui-listpanel.components-list { + border: none; +} +*/ +.toolbox-title { + display: block; + padding: 0.5em; + font-size: 15px; + background: #2d3e50; + color: white; +} + +.pmui.pmui-listpanel.components-list .pmui-listitem { + background: none; + border: none; +} + +.pmui.pmui-listpanel.components-list .pmui-listitem:hover { + background: #e0e0e0; +} + +.pmdesigner-controlslist .pmui-listitem .pmui-listitem-icon, .otherControlsList-list .pmui-listitem .pmui-listitem-icon { + background-image: url(../img/cmp-icons.png); + width: 16px; + height: 16px; +} + +.pmui-listitem.cmp-text .pmui-listitem-icon { + background-position: 0 -128px; +} + +.pmui-listitem.cmp-dropdown .pmui-listitem-icon { + background-position: 0 -144px; +} + +.pmui-listitem.cmp-checkbox .pmui-listitem-icon { + background-position: 0 -32px; +} + +.pmui-listitem.cmp-radio .pmui-listitem-icon { + background-position: 0 0; +} + +.pmui-listitem.cmp-label .pmui-listitem-icon { + background-position: 0 -64px; +} + +.pmui-listitem.cmp-datetime .pmui-listitem-icon { + background-position: 0 -16px; +} + +.pmui-listitem.cmp-fieldset .pmui-listitem-icon { + background-position: 0 -80px; +} + +.pmui-listitem.cmp-formpanel .pmui-listitem-icon { + background-position: 0 -48px; +} + +.pmui-listitem.cmp-textarea .pmui-listitem-icon { + background-position: 0 -96px; +} + +.pmui-listitem.controls-submit .pmui-listitem-icon { + background: url("../img/submit.png") no-repeat; + width: 33px; + height: 20px; +} + +.pmui-listitem.controls-button .pmui-listitem-icon { + background: url("../img/button.png") no-repeat; + width: 33px; + height: 20px; +} + +.pmui-listitem.grid-field .pmui-listitem-icon { + background: url("../img/icon_grid.png") no-repeat; + width: 33px; + height: 30px; +} + +.pmui-listitem.label-field .pmui-listitem-icon { + background: url("../img/label.png") no-repeat; + width: 33px; + height: 30px; + background-size: contain; +} + +.pmui-listitem.subForm-field .pmui-listitem-icon { + background: url("../img/subform.png") no-repeat; + width: 33px; + height: 30px; + background-size: contain; +} + +.pmui-listitem.fiel-field .pmui-listitem-icon { + background: url("../img/file2.png") no-repeat; + width: 24px; + height: 25px; +} + +.subFormList-list .pmdesigner-subform .pmui-listitem-icon { + background: url("../img/subform.png") no-repeat; + width: 20px; + height: 20px; + background-size: contain; +} + +.pmui-listitem.image-field .pmui-listitem-icon { + background: url("../img/image.png") no-repeat; + width: 24px; + height: 25px; + background-size: contain; +} + +.pmui-listitem.link-field .pmui-listitem-icon { + background: url("../img/link.png") no-repeat; + width: 24px; + height: 25px; + background-size: contain; +} + +.pmui-listitem.controls-title .pmui-listitem-icon { + background-position: 0 -112px; +} + +.pmui-window.pmdesigner-controlselector .pmui-window-body { + padding: 1em; +} + +.pmui-window.pmdesigner-dependencyFieldWindow .pmui-window-body { + padding: 1em; +} + +.pm-titleListFields { + margin-left: 40px; + font-weight: bold; + font-size: 20px; +} + +.pm-titleListDependent { + margin-left: 14px; + font-weight: bold; + font-size: 20px; +} + +.pm-dependentFieldsGrid .pmui-button { + background: #e84c3d; +} + +.pm-listFieldGrid .pmui-button { + background: #19bd9b; +} + +.pmdesigner-dependencyFieldWindow .pmui-window-body { + background: #faf8f8; +} + +.pm_labelfield .pmui-textcontrol { + border: 1px white; +} + +.pm-listFieldGrid .pmui-gridpanelcell-content { + padding: 2px; +} + +.pm-dependentFieldsGrid .pmui-gridpanelcell-content { + padding: 2px; +} + +.pm-listFieldGrid .pmui-gridpanel-toolbar { + height: 30px; +} + +.pm-dependentFieldsGrid .pmui-gridpanel-toolbar { + height: 30px; +} + +.pmdesigner-formgrid { + /*background: rgb(150, 150, 150);*/ + width: 99%; +} + +.pmdesigner-formgrid .emptyform { + width: 100%; + height: 10em; +} + +/*.pmdesigner-formgrid-bodyrow.my_row{ + border-left: 3px solid #c0c0c0; + border-bottom: 3px solid #c0c0c0; +}*/ +.pmdesigner-formgrid-bodycell.pmui-textcontrol { + width: 100%; +} + +.pmdesigner-formgrid-bodycell .pmui-buttonfield .pmui-field-control { + width: auto; +} + +.pmdesigner-formgrid-bodycell .pmui-datetimefield .icon-field { + background: url("../img/calendar.png") no-repeat; + display: inline-block; + padding: 0.6em; +} + +.pmui-pmsuggestfield .icon-field { + background: url("../img/suggest.png") no-repeat; + display: inline-block; + padding: 0.6em; + background-size: contain; +} + +/*.pmdesigner-formgrid-bodycell .pmui-field-textLabel{ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: inherit; +}*/ +.pmdesigner-formgrid-bodycell .pmui-field-label { + padding: 6px 3px 6px 10px; +} + +.pmdesigner-formgrid-bodycell .pmui-field-textLabel { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +.pmdesigner-formgrid-bodycell.colspan_12-11 .pmui-field-control { + width: 73%; +} + +.pmdesigner-formgrid-bodycell.colspan_10-9 .pmui-field-control { + width: 72%; +} + +.pmdesigner-formgrid-bodycell.colspan_8-7 .pmui-field-control { + width: 70%; +} + +.pmdesigner-formgrid-bodycell.colspan_6 .pmui-field-control { + width: 69%; +} + +.pmdesigner-formgrid-bodycell.colspan_5 .pmui-field-control { + width: 68%; +} + +.pmdesigner-formgrid-bodycell.colspan_4 .pmui-field-control { + width: 65%; +} + +.pmdesigner-formgrid-bodycell.colspan_3 .pmui-field-control { + width: 61%; +} + +.pmdesigner-formgrid-bodycell.colspan_2 .pmui-field-control { + width: 53%; +} + +.pmdesigner-formgrid-bodycell.colspan_1 .pmui-field-control { + width: 26%; +} + +.pmdesigner-formgrid-bodycell .pmui-buttonfield .pmui-field-control { + text-align: center; +} + +/*custom styles formdesigner*/ +/*/////////////////////////////////////////////////////// +/ +/ +/ +/ + + +/ +/ +/ +/*/ +#designer-body .pmui-accordion-item-body { + background: #FFFFFF; + padding: 0 5px 0 5px; + background: #e0e0e0; +} + +.pmdesigner-mainlayout, #designer-body .right-layout-panel, .pmdesigner-layout-eastpanel { + background: #f1f1f1; +} + +#designer-body .pmui-accordion-item-body .pmui-listitem { + padding: 3px; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem { + color: white; + border-bottom: 2px solid #d6d6d6; + background: white; + cursor: move; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem:hover { + color: black; + background: #e0e0e0; +} + +#designer-body .pmListItem-buttonEdit { + background: white; + color: white; + border: none; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem:hover .pmListItem-buttonEdit { + background-color: #19bd9b; +} + +#designer-body .pmui-accordion-item-header { + font-size: 13px; +} + +#designer-body .pmui-accordion-item-container { + border-left: 1px solid white; + border-right: 1px solid white; +} + +#designer-body .pmui-accordion-item-header .pmui-textcontrol { + outline: none; + margin-left: 10px; +} + +#designer-body .right-layout-panel .pmui-listpanel-toolbar { + display: none; +} + +#designer-body .pmui-accordion-item-header { + background: #676E7C; + color: white; + border-color: #d8dbdf; + padding: 3px 0 6px 0; +} + +#designer-body .otherControlsList-list { + background: white; +} + +#designer-body .otherControlsList-list .pmui-listitem { + background: white; + color: black; + border-style: none; +} + +#designer-body .otherControlsList-list .pmui-listitem:hover { + background: #e0e0e0; + color: black; +} + +#designer-body .ui-layout-pane { + overflow: initial; +} + +#designer-body { + background: #c0c0c0; +} + +#designer-body .label-other-controls { + padding-left: 5px; + font-size: 13px; +} + +#designer-body .pmdesigner-formgrid-tableContainer { + overflow: auto; + width: 100%; + height: 97%; + border: 1px solid #C0C0C0; +} + +#otherControlsList-firstItem .pmui-listitem-text, #otherControlsList-secondItem .pmui-listitem-text { + /*display: none;*/ +} + +#idOtherControlsList .pmui-listitem-text { + margin-left: 20px; + position: absolute; + left: 50px; + top: 10px; +} + +#designer-body .formGrid-freeCell { + width: 98%; + height: 36px; + border: 3px dotted #888888; + background: #c0c0c0; +} + +.pmui-propertiestable { + background: white; + padding: 0 2px 0 2px; +} + +.pmui-field.formview-view .pmui-textcontrol, +.pmui-field.formview-view .pmui-dropdownlistcontrol, +.pmui-field.formview-view .pmui-textareacontrol, +.pmui-field.formview-view .pmui-passwordcontrol, +.pmui-field.formview-view .pmui-uploadcontrol, +.pmui-field.formview-view .pmui-datetimecontrol { + border: 1px solid white; + background: #ECECEC; + font-style: italic; +} + +.pmui-field.formview-disabled .pmui-textcontrol, +.pmui-field.formview-disabled .pmui-dropdownlistcontrol, +.pmui-field.formview-disabled .pmui-textareacontrol, +.pmui-field.formview-disabled .pmui-passwordcontrol, +.pmui-field.formview-disabled .pmui-uploadcontrol, +.pmui-field.formview-disabled .pmui-datetimecontrol { + color: #757575; + background: #ECECEC; +} + +#designer-body .pmui-accordion-panel-container #first-item .pmui-accordion-item-body { + height: 200px; +} + +#third-item .pmui-accordion-item-body { + height: 850px; +} + +.pmTextContainer1 { + width: 60px; + display: inline-block; + font-size: 12px; + margin: 1px; + color: #ee710f; +} + +.pmTextContainer1 span, .pmNameContent { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +.pmTextContainer2 { + width: auto; + display: inline-block; + font-size: 12px; + color: #21366d; +} + +.pmNameContent { + width: 130px; +} + +.pmdesigner-formgrid-bodycell .pmui-pmsub-titlefield h5 { + background-color: #9FA1AA; + color: white; + margin: 0.5em 0 0.5em 0; + padding: 8px; +} + +.pmdesigner-formgrid-bodycell.pmdesigner-active .pmui-pmsub-titlefield h5 { + background: none; +} + +.pmdesigner-formgrid-bodycell .pmui-pmtitlefield h4 { + background-color: #383D41; + color: white; + font-size: 18px; + padding: 10px; + margin: 0.5em 0 0.5em 0; +} + +.pmdesigner-formgrid-bodycell.pmdesigner-active .pmui-pmtitlefield h4 { + background: none; +} + +.pmdesigner-itemcontrol-x { + margin-left: 5px; + vertical-align: super; + cursor: pointer; + color: #e7e7e7; +} + +.pmdesigner-itemcontrol-x:hover { + color: #8b8888; +} + +.pmdesigner-itemcontrol-itemselected, +.pmdesigner-itemcontrol-optselected, +.pmdesigner-itemcontrol-bracketsselected { + position: relative; + display: inline-block; +} + +.pmdesigner-itemcontrol-itemselected > a { + background: #f5f2f2; + padding: 5px; + margin: 1px; +} + +.pmdesigner-itemcontrol-itemselected > a:hover { + background: #e7e7e7; +} + +.pmdesigner-itemcontrol-bracketsselected > a { + color: red; + padding: 1px; + background: #f5f2f2; +} + +.pmdesigner-itemcontrol-optselected > a { + color: blue; + padding: 1px; + background: #f5f2f2; +} + +/* areacontrol*/ +.pmdesigner-areacontrol { + background: white; + height: auto; +} + +.pmdesigner-suggestcontrol { + height: 20%; + padding: 5px; +} + +.pmdesigner-suggestcontrol input { + height: 20px; + width: 90%; +} + +.pmdesigner-suggestfields { + position: absolute; + width: 52%; + z-index: 5; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); +} + +.pmdesigner-suggestfields ul { + list-style-type: none; + padding: 0; + margin: 0; +} + +.pmdesigner-suggestfields a { + display: block; + background: #DFDFDF; + color: #2d3e50; + text-decoration: none; + padding: 0.4em 0.6em; +} + +.pmdesigner-suggestfields li { + left: 0px; + top: 0px; + width: auto; + height: auto; + position: relative; + z-index: auto; +} + +.pmdesigner-suggestfields a:hover { + background: #838486; + color: white; + cursor: pointer; +} + +.pmdesigner-areacontrol-operations { + height: 10%; +} + +.pmdesigner-areacontrol-operationsitem { + background: #c4c9ca; + height: 12px; + padding: 3px 9px; + margin: 0 2px; + text-align: center; + cursor: pointer; + border-radius: 3px; + opacity: 0.5; +} + +.pmdesigner-areacontrol-operationsitem:hover { + opacity: 1; +} + +.pmdesigner-areacontrol-areaformula { + height: auto; + margin: 2px; + background: #f5f2f2; + padding: 10px 2px; +} + +.GridFieldItem .pmui-field-label { + background: #888888; + color: white; + font-size: 12px; + padding: 2px; + display: inline-block; + margin: initial; +} + +.GridFieldItem .pmui-field-control { + padding: 3%; +} + +.GridFieldItem { + padding: initial; +} + +.gridfielditem-header { + border-bottom: 1px solid #c0c0c0; +} + +.GridFieldItem-textarea .pmui-textareacontrol { + resize: vertical; +} + +.GridFieldItem-configFieldIcon { + background: url("../img/config.png") no-repeat white; + display: inline-block; + width: 20%; + background-size: contain; + vertical-align: top; + height: 20px; +} + +.GridFieldItem-suggest .icon-field { + background: url("../img/suggest.png") no-repeat; + display: inline-block; + padding: 0.7em; + background-size: contain; + vertical-align: top; + float: right; +} + +.GridFieldItem-datetime .icon-field { + background: url("../img/datetime.png") no-repeat; + display: inline-block; + padding: 0.7em; + background-size: contain; + vertical-align: top; + float: right; +} + +.pmui-gridfield .gridfieldcell-bodycell { + vertical-align: top; + float: left; + background: white; + border-left: 1px solid #c0c0c0; +} + +.pmui-gridfield .GridField-list { + padding: 1px; + margin: 0px; + background: #c0c0c0; +} + +/*GridField-black-cell-contain +GridField-black-cell-icon +GridField-black-cell-message +*/ +.gridfieldcell-bodycell .GridField-black-cell-icon { + background: url(../img/addControl.png) no-repeat; + width: 100%; + height: 50%; + margin-left: 20%; + display: block; + background-size: contain; +} + +.gridfieldcell-bodycell .GridField-black-cell-contain { + text-align: center; + text-align: center; + color: black; + font-size: 14px; +} + +/*.pmui-gridfield { + box-sizing : border-box; + border : 2px solid #c0c0c0; + padding : 5px 5px 5px 8px; +}*/ +.GridFieldItem.GridFieldItem-text .GridFieldItem-iconControl { + background: url(../img/inputext.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-textarea .GridFieldItem-iconControl { + background: url(../img/textarea.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-dropdown .GridFieldItem-iconControl { + background: url(../img/select.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-checkbox .GridFieldItem-iconControl { + background: url(../img/checkbox.png) no-repeat; + background-size: cover; + width: 47%; + height: 14px; + /* padding: 25px 75px 1px 1px; */ + margin: 3% 0 0 25%; +} + +.GridFieldItem.GridFieldItem-radio .GridFieldItem-iconControl { + background: url(../img/radio.png) no-repeat; + background-size: cover; + width: 47%; + height: 14px; + /* padding: 25px 75px 1px 1px; */ + margin: 3% 0 0 25%; +} + +.GridFieldItem.GridFieldItem-suggest .GridFieldItem-iconControl { + background: url(../img/inputext.png) no-repeat; + width: 80%; + height: 1.7em; + background-size: contain; + margin: 2% 1% 1% 11%; +} + +.GridField-listContainer { + overflow: auto; + height: inherit; + padding-left: 9px; +} + +.pmimagefield-imageContainer { + background: url(../img/image.png) no-repeat center #e7e7e7; + padding: 15px; + background-size: contain; + opacity: 0.5; +} + +.pmimagefield-commentContainer { + font-size: 12px; + font-style: italic; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-link { + background: url("../img/link_web.png") no-repeat center; + background-size: contain; + height: 30px; + width: 100%; + display: block; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-linkContainer { + text-align: center; + background-color: #F5F5F5; + border: 1px solid #DFDDDD; + height: 30px; + width: 100%; +} + +.pmui-pmlinkfield .PMLinkField-linkContainer { + padding-top: 8px; +} + +.pmui-pmlinkfield .PMLinkField-linkContainer .PMLinkField-link { + text-decoration: underline; + color: #53539e; + font-style: italic; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-linkContainer { + padding-top: initial; +} + +.pmui-pm-textlabelfield .pmui-textlabel-field { + margin-left: 10px; +} + +.pmui-pmformfield .pmFormField-formContainer { + text-align: center; + background-color: #F5F5F5; + border: 1px solid #DFDDDD; + height: 30px; + width: 100%; + padding-bottom: 2px; + padding-top: 2px; +} + +.pmui-pmformfield .pmFormField-formIcon { + background: url("../img/subform.png") no-repeat; + width: 28px; + height: 28px; + display: inline-block; + background-size: contain; +} + +.pmui-pmformfield .pmui-field-label { + background: #d3d0d0; + color: white; +} + +.pmui-pmformfield .pmFormField-editIcon { + background: url("../img/edit.png") no-repeat; + width: 18px; + height: 18px; + display: inline-block; + background-size: contain; + float: right; +} + +@font-face { + font-family: "SourceSansPro"; + src: url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot'); + src: url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf') format('truetype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot') format('embedded-opentype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff') format('woff'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg') format('svg'); +} +@font-face { + font-family: "SourceSansProBold"; + src: url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot'); + src: url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf') format('truetype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot') format('embedded-opentype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff') format('woff'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg') format('svg'); +} +body { + font-family: 'SourceSansProRegular', Arial, Tahoma, Verdana; + background: #fff; + margin: 0; + padding: 0; +} +.fd-list { + /*list-style: none;*/ + border-color: #bbb; + border-style: solid; + border-width: 0 0 1px 0; + background: #f8f8f8; + font-size:11px; + padding: 0.3em; + cursor: pointer; +} +.fd-list:nth-child(odd) { + background: #eaebed; +} +.fd-list:hover { + background: #e0e0e0; +} +.fd-list-responsive { + position: relative; + font-size: 11px; + width: 54px; + height: 54px; + float: left; + text-align: center; + background: white; + margin: 4px; + padding: 2px; + border: 1px solid darkgray; +} +.fd-button-panel{ + text-align: right; + border-top: 1px solid #e5e5e5; + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 10px; +} +.fd-button { + font-family: "SourceSansPro", Arial, Tahoma, Verdana; + font-size: 14px; + display: inline-block; + text-decoration: none; + background-color: #1e91d1; + text-align: center; + transition: all .5s; + box-sizing: border-box; + border-radius: 2px; + margin: 0px 0px 0px 10px; + padding: 7px 20px; +} +.fd-button:hover { + opacity: 1; + opacity: 0.8; +} +.fd-button-success { + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; +} +.fd-button-link { + color: #383838; + text-decoration: underline; + background: none; + padding: initial; +} +.fd-button-create { + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; + background: #1fbc99 url(../img/ico_mor2.png) no-repeat 5px center; +} +.fd-button-yes{ + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; +} +.fd-button-no{ + color: #fff !important; + background-color: #e4655f; + border: 1px solid #e14333; + font-size: 16px; +} +.fd-table tr:nth-child(odd) { + background-color: #E5E5E5; +} +.fd-table tr:nth-child(even) { + background-color: #F2F2F2; +} +.fd-tbody { + font-size: 11px; +} +.fd-table-th { + background: #3397e1; + color : white; + font-size: 11px; + padding: 6px 15px; + font-weight: inherit; +} +.fd-table-td { + padding: 2px; + border-bottom: 1px solid #D6D6D6; +} +.fd-table-td-error { + border: 1px solid red; +} +.fd-gridForm-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + height: 40px; + width: 100%; + margin-top:6px; +} +.fd-gridForm-grid { + list-style-type: none; + border:1px solid #C0C0C0; + height:84px; + overflow: hidden; + margin:20px 6px 6px 6px; + padding:6px; + white-space:nowrap; + /*overflow-x: scroll; + width: 600px;*/ +} +.fd-gridForm-grid > * { + padding: 1px 1px 1px 1px; + display: inline-block; + width: 130px; + text-align: left; + overflow: hidden; + vertical-align: top; + border:1px solid #C0C0C0; + margin-right:1px; + margin-top:20px; +} +.fd-gridForm-grid-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + height: 59px; + margin-top: 20px; +} +.grid-item-field{ + margin:20px 6px 6px 6px; + padding:4px; + position:relative; + border:1px solid white; + height: 30px; +} +.fd-gridForm-field-label{ + position: absolute; + top: 20px; + width: 60px; + overflow: hidden; +} +.fd-gridForm-grid-contentRequired { + position: absolute; + top: 20px; + left: 65px; + color:red; + display:none; +} +.fd-gridForm-grid-text { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-textarea { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-dropdown { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-checkbox { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-checkgroup { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-radio { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-datetime { + height: 17px; + border: 1px solid #c0c0c0; + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-suggest { + height: 17px; + border: 1px solid #c0c0c0; + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-suggest-placeholder{ + color: gray; +} +.fd-gridForm-grid-hidden { + height: 17px; + border: 1px dashed #c0c0c0; + position: absolute; + left: 1px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-title { + padding: 4px; + font-family: "Montserrat",sans-serif; + font-size: 20px; + border-radius: 3px; + background: white; + color: #555151; + position: absolute; + left: 1px; + right: 1px; + overflow: hidden; +} +.fd-gridForm-grid-subtitle { + padding: 3px; + font-family: "Montserrat",sans-serif; + font-size: 15px; + border-radius: 3px; + background: white; + color: #555151; + position: absolute; + left: 1px; + right: 1px; + overflow: hidden; +} +.fd-gridForm-grid-annotation { + position: absolute; + left: 1px; + right: 1px; + top:18px; + overflow: hidden; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-link { + position: absolute; + left: 70px; + right: 1px; + top:18px; + overflow: hidden; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-image { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-file { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; + overflow: hidden; +} +.fd-gridForm-grid-submit { + position: absolute; + left: 1px; + right: 1px; + top: 18px; + overflow: hidden; +} +.fd-gridForm-grid-button { + position: absolute; + left: 1px; + right: 1px; + top: 18px; + overflow: hidden; +} +.fd-gridForm-grid-panel{ + border: 1px solid #DADADA; + background-color: #F6F5F3; + font-weight: bold; + position: absolute; + left: 1px; + right: 1px; + top: 1px; + overflow: hidden; + height: 34px; +} +.fd-gridForm-grid-msgpanel{ + border: 1px solid #DADADA; + background-color: #F6F5F3; + font-weight: bold; + position: absolute; + left: 1px; + right: 1px; + top: 1px; + overflow: hidden; + height: 34px; + color: red; +} +.fd-gridForm-grid-geomap { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-qrcode { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-signature { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-imagem { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-audiom { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-videom { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-griditem-gridtitle{ + position:absolute; + border:none; + margin:0px; + font-weight:bold; + left:6px; + width:auto; +} +.fd-gridForm-grid-griditem-gridplaceholder{ + position:absolute; + border:none; + margin:25px 0px 0px 0px; + color:gray; + left:6px; + width:auto; +} +.fd-gridForm-grid-griditem-columnRequired { + color: red; + display: none; +} +.fd-gridForm-grid-text-column { + box-sizing: border-box; + width: 100%; +} +.fd-gridForm-grid-textarea-column { + box-sizing: border-box; + width: 100%; + resize: vertical; +} +.fd-gridForm-grid-dropdown-column { + box-sizing: border-box; + width: 100%; +} +.fd-gridForm-grid-link-column { + margin-bottom: 2px; + color: blue; + text-decoration: underline; +} +.fd-designer-button{ + display:inline-block; + border-left:1px solid #70b5ec; + padding: 5px 6px; + cursor:pointer; + width:24px; + height:24px; +} +.fd-designer-button:hover{ + background: #2481c5; + color: #fff; +} +.fd-drag-drop{ + vertical-align:top; + cursor: move; +} +.fd-drag-drop-placeholder{ + background: rgba(128, 128, 128, 0.3); + border: 2px dashed #888; + height: 31px; +} +.fd-tooltip-date-format>div{ + overflow-x: hidden; + overflow-y: scroll; + height: 400px; + width: 309px; +} +.fd-tooltip{ + padding:3px; + border-radius: 0px; +} +.fd-message-error{ + color: #fff; + background: #F5736D; + padding: 4px 10px; + display: inline-block; +} + +ul.CodeMirror-hints { + z-index: 10000; +} +.ui-accordion-header { + color:white; + background:#3397e1; + border-top: 1px solid #3397e1; + border-bottom:1px solid #262932; + border-left:1px solid #262932; + border-right:1px solid #262932; + border-radius:initial; + font-size:12px; + text-align:center; +} +.ui-accordion-header.ui-state-active { + background: white; + color:#3397e1; +} +.ui-layout-pane-north{ + border:1px solid #2979b8; +} +.ui-layout-pane-center{ + border-top: none; + border-right: none; + border-bottom: none; +} +.ui-layout-toggler-west div { + width: 8px; + height: 35px; +} +.ui-datepicker { + border: 1px solid #DADADA; + background: #fcfdfd; + color: #222222; +} +.ui-datepicker-header { + border: 1px solid #fcfdfd; + background: white; + color: black; + font-weight: bold; +} +.ui-datepicker .ui-state-default:not(.ui-state-active):not(.ui-state-highlight) { + border: 1px solid #DADADA; + background: #fcfdfd; + font-weight: bold; + color: #2e6e9e; +} + +/* -- begin PMPopOver -- */ + +.mafe-popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + padding: 1px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); + white-space: normal; + text-align: center; + max-width: 300px; + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +.mafe-popover.in { + opacity: 1; +} + +.mafe-popover-content { + padding: 9px 14px; +} + +.mafe-popover>.arrow, .mafe-popover>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.mafe-popover>.arrow:after { + border-width: 10px; + content: ""; +} + +.mafe-popover.right>.arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} + +.mafe-popover.left>.arrow:after { + content: " "; + right: 1px; + bottom: -10px; + border-right-width: 0; + border-left-color: #fff; +} + +.mafe-popover.top>.arrow:after { + content: " "; + bottom: 1px; + right: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} + +.mafe-popover.bottom>.arrow:after { + content: " "; + top: 1px; + right: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} + +.mafe-popover>.arrow { + border-width: 11px; +} + +.mafe-popover.right>.arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: rgba(0,0,0,.25); +} + +.mafe-popover.left>.arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: rgba(0,0,0,.25); +} + +.mafe-popover.top>.arrow { + right: 50%; + bottom: -11px; + margin-right: -11px; + border-bottom-width: 0; + border-top-color: rgba(0,0,0,.25); +} + +.mafe-popover.bottom>.arrow { + right: 50%; + top: -11px; + margin-right: -11px; + border-top-width: 0; + border-bottom-color: rgba(0,0,0,.25); +} + +.mafe-popover :before, .mafe-popover :after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* -- end PMPopOver -- */ + +.mafe-deprecated-control { + line-height: 1; + position: absolute; + top: 0; + right: 0; +} + +.mafe-deprecated-control::before { + font-family: FontAwesome; + content: "\f12a"; + color: white; + font-size: 10px; + width: 1.2em; + cursor: pointer; + height: 1.2em; + background: red; + display: inline-block; + text-align: center; + line-height: 1.2em; + border-radius: 100%; +} + +.mafe-popover.deprecated { + font-size: 11px; +} + +.mafe-deprecated-title { + font-size: 12px; + color: #B65858; + backgroud: none; + text-align: center; + font-weight: bold; +} + +.deprecated-ok-btn { + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.grid-item-field .mafe-deprecated-control { + left: 0; + width: 1.2em; + display: inline-block; +} + +.mafe-alert { + font-size: 12px; + text-align: left; + font-weight: normal; + padding: 15px 30px 15px 15px; + border: 1px solid #ebccd1; + color: #a94442; + background-color: #f2dede; + border-radius: 4px; +} + +.mafe-alert .button-close { + background: none; + border: none; + color: inherit; + position: relative; + right: -22px; + float: right; + outline: none; + cursor: pointer; +} + +.pm-mafe-grid-item .mafe-deprecated-control { + float: left; + position: relative; +} + +.datetime-gadget-class { + position: absolute; +} + diff --git a/workflow/public_html/lib/fonts/Chivo/Chivo-Black.ttf b/workflow/public_html/lib/fonts/Chivo/Chivo-Black.ttf new file mode 100644 index 0000000000000000000000000000000000000000..307da30319b62292ce971a478daa1f5e129dd180 GIT binary patch literal 55128 zcmeFa2b@*a)%SnSxih!Tow;-S^m6a?&h!~z7<%uhC>Agl5*tQihz)F!#9pGr7){g| zTMQZ%V~C;=ED1g!Vn+!of)uGU6q);e*FN`7p=sXt{ro@w=Y5>Zy7ipB*IvK1)?Rz< zbq<=YX_|+p1TA&g)X^jP#0Nc#SNn(&)5f1V|G6{xT)^k7k;8_M&|9@aKDYC^WaOlY zQ!{f{Oyu)yO`DK5a_VtI&b{s8TQqIre16ZHIJLUA?b=okpMS^anLjvh)|`cjj+vS^ ziI0{m&z^PB94$?AXxh~Ie35$gxj#E=%h2*=e7;rFE^MED=BzXJX5RaEO?!1Ezc=qrf-5_R?PS7a_qSia!=0vQSP+~SLXgQ_x0TM^xpljnKS7JMV(lp{q&?01XP{@H z=b**V^Uw>>a%dy{Z-%~xYT;swRv0~?6+P zbDMc>iEhwZIlh1N3vEDjwKg!iNt*#(&F|Mh*Fx7pKZmY|7DT_)e#v<^KsQ1+K{s>$ zEzqsdZP4v}cL($v=w9fz(0$PTwEsI^{{g)Qy}{=<>C1DNTt%keRi1I#jntB&JG3IG z462NNt<~~c4>d-2Yb}~fYlZr2iP`|os||~81HFx)_Z8@E)J7xS@!B|T630)5rtsZV zUZ?T~g+;jq$z?zi((>-5%YeJKzI8| zzq}RGu`TG>HgsznZEV&?Yu>K6;NqVkwjIQ_!_6`f+YVyeK`RJae$cXmRt{)=09va- z>jThQjc$AdQX4^PBS@_Vsf{4@0Z45GsrNx@H%N&l@6t{|5?9mDHPE%tb!AhF zr$BK#C~gPE?Vz|F6t{!oc2L|7ia8+o0SJBof**k32O#(X2z~&9AAsO$5L^v{t3hxz z2(AV}H`1vFz15(%5%gAr-fGZW4SK6VZ#C$x2E9$7w+Zw%f!-$2+YWlGLGFE!%hCP` z-#W6}g+G_)@o29LiS6OjZfx}nMzx1g?O{}V7}Xv|wTDsdVN_eNwJ)%*FSHcRfnQ3F zuG7L$Q}k`lejA+L*9I~EcC6$C5IGSqa1uPsq@OwP(HVV5i=Z)k@OB^4XD2>Id`5@j zq?PacgW&*1H<0h!`F=F7GtjV8c%8}bS98ua(6!KY(9fakp#>asGsoNl-3r|X-A_Be z=XDX9^Aw1`!RI&m{LknC^!EVzdw`kVMK50XYKrbt5@@Bh{?X6rRa)K1*&M@B+d1lA z9EBDk!B+Yc-!_Pmw)0+ioXKwsq8~HLPUc2w-OIO&@bRM6gYfhp;gLS#+ZP!7+i2!n ze4B_CZbu6{(83P1umdgJiWcrc3-_Rf9cZC={|>Zp4_deb4eX@9-N>X9dAyB0-bNm8 zBagR{$J@x`ZTMJ@hHXc~wxeO&(Xj1k*mg8*I~ukf4eLO|I?%8VG^_&+>p;W&+Mj82 z5!U;ZR*$B2plLF5bf9S+Xj%uF)`6yVplKawS|^&;iKca;X`R|D9J`$FUx&wk@_8d; z-3)yV*%|dVq_+#{Z9{rHL3u6G+X+f*L1r!5=vC4VVBK=8*xHHweiF1uD}|$Ur09*V zL3TTk*8ya80Qnq19tV_uT+R2_K-WUoK|hDChZf*#ALW?GpvR#npg%#2Xi@ayY2H5r zJqtYtEry#Ga18Z>MRa22>5t>j2Rnl86uk}zPnmh=9(@qb= zm^DX4KLg>7aQzuty&cX!16A=W9gKA&qu9xKKV!U~YbQf9iOtT7{#(0%W9J~ZU(n{A z(66Aopu3@k&^^%anLQt%j|ZWLpg%wlLw|%GfgYvZ$DqfdC!jw;PZAwI1$R&L{u$_5 z=s9RH^gQ$e^f!1~0{tC&5qb%}UWS&@=W>33jWNCs|DVI-7tl`l?bO^@*LJLHyOye~ zAQ^oRgIiPdAE5s-=)Z*rc7XohmF=7W_a~wOCovDq1ob)40%G0H=wFrP?Ev)^oV}x4 zclzU32GPFEJ2Rk}3gu5ZW3RLfKFQ2GZu;^--Y7Q6{8E7=Dx)uAw;!W@9m>ZH!|F}j z+ZVIFeahyh@%{18)tq+?bS-op^mFKXXhHND{LOy+&3^pNe*DdTG`Ry5_JP7aP}m0w z`#@nIDC`4;eMhvpMOq0cNQBmLR68?mY9Ch8q5RiI#v&fs+cK4g)W0T)hf7Fg`S2c&?<8t~Wv9&0$`87&+A%z+}HX5z99UEZeV)LLHa zp+*oMgl(A~cn$ch0iO@SXAOG1pB~qO(HG3KU!c=#z~~F~`a>}K0^5HVjAU-v2v?oV zFU;@6&*#Cz1<)MYJ~}opg3UH;U>i2D4I9{o4Q#^(wqXO?(D(iLi8bJ}27K0l&l>Pq z13qiOXAStQ0iQMCvj%+DfX^E6$p@b;NTw#{wby{p7vQr7eAa-^8t_>IK5M{d4ft#X zpN-(N5qvf>H-7;x+pvo@;Ib31{Vurd0GAEmvH@JyfXf;#4PdRfQHUe>W26nvl{kUlCJ^`-1U?3Vk3ryL5cn7bJ_dm;Ag~1lwt&DE5Rh10R#G3wR#G2!f3hB5z8;BfKw|5AMH*X?)>b6MY_Hjn&<=ET2XU4I4R^89 z^hO^+AJ-zCXF(|ky-UT?Ur`?SL|Q(Hqi5h_X7c?UUKfz__&xgeBw55iqdSYVEVvy3 zUaROKq@vMXoc%R2lQp_%fR7_`w25Q}MDMqO$W9R1NuS$6WG9I1WUXmut!ZVQnF=af zL1iTj+5oy1$iPzoysi@Z5n7Y$rn? zdcO_5--h0AL+`ht_uJ5Wa|Qeh&bt%(6?7MLH?$DC2f80#%DM=ikm@kGb0v%TnK`j(fMtlxET~TgW_gT+zg7FL2)xEZUx1yptuzj zw}ReI(32Q(3v16*^nE*snVEy1Xo+OJoGRv?V9wUL!`6LWPlGfE5Sw?>x`!#qNqw+941(}pwCo2&izKw&i~ zyswSpyYbo>Z6dEdUPxB{;)ULed7)21V-;w82pY>l<4x>llbRE*29;}|YoY6)pF`I} zzksJ-!qW}VjnGZd&5Yv~=vL@9=ytxl1G#JCZ}}w{66Qe;C#t1eaQK&*LZLC zyf@bK=2*`=Xk(LBM&E8`!Hvv-8{yy$tY7k7A7kywSbH+o?nB4+Vd>wXV-hRxLyx|} zVvm;h0$0v?l;a+Q9*3TQ{shT-e34qEMX?+6U@epkH|9!t44jYGj)NmID)^-Z%;!g56_3Hz2hiiuSH-dl#{1HO3-9Cw zM-%N&k>rLL3O)D<3L-sO;R^yz-i;?SE$^D~+q>b?!_2m&mml5M?MEAlzM9aX0pK$X ze=>qLOh5V+WBE$?%;VugRvs77#xeaLZ9Kqn4?+(?e}Eo_{s=t+JxY6zL61XEK!1Xs zhMs|*g`R^JL(fAmK&F5D3d`ukGQP$#HZz}ZVTRhm47HO{Z%67br7Q1X6}uS8Dl~2l za{3sJTaT<(qj8(j*bX#qFIp=a_Z3=e$}E8Qla<*HyxM-w{DLzjL$*q-UI)?gcyc2* zbIdK!tfhg@Vga0CEv9Tz5W3I_W}Oz1N`3y_`eVEe;>gAt8n!RTzvvp zpTN~8aIqXNmczwbboDiK^)+<$H8|R#Y*K9cV|o_vEjIlrJrluW=cY{_Ktg6Va3=Cy zfXqd!BnOkonUY=lH)nQo<^lNqlrtqWy&FC|=v(}jWC(VkbzZ(PNB9Xxi^hJ+k$dn_ z-^7p*AGHxHF!Kmokdbh=92spuMzRmEi55PG!_VkzC$iZ^3tyw5lIf9L-d^lqa(VH5 z!d_nJKK&F?ISy)CbQvQNbf6l14A2RArMlD&CPPLYs z!fQN>BKeuCk>@qgwa|6Y&!Ov~1!&9Rqu%~4qwd5`JF(MF?6ea*?Zi$yvC~fMv=ck+ z#7;Z0(@yNP6Avl&DH)XQu~C1`sJ~{^Uo&cQ0N4ZBY_u?y5f<@H8B~dUYI&`P8acZO zj9Pe=9Qh#hO7hdgIM0miwlVU}Dw3N<8^`mz>5;bKk@hgh?_rML!yLbdIergw{2u1` zJ>dHVBkjZ^b>fja@kpI`q)t3iCmyL2k92r6CQ;bYBCut&DG}Fe@cBACNUr{K`1t}d zJBYMTbU&Z3!&9OLGcE@(b;$Slu zEbG8ip`&MecOda&?Vw2vESb7v?Vue#4?M|yw+P8S#mpshf*A)Nd0sd?4wiMF%oCCw zmmM^Tg?AA(br3amu!}aH=z0;Wn5USTWlv3Vn|l-%R%9=Jcn^BFj^hTPGwZ;09lJP^ zvvT8;z6K-7tV`amLwU^s_`<9C{u=07=sM`<(DjgHSnh}3fMh3a9cRjJt?Z--otv*;O!NV-2t+DKz0XwHed^~&naG2 zVuAH|?=OiwlC`U8_ZsM0=sM`<(Dl#)R&T$ck2|4XL3crSLkppMpx@Bvz0hx=`=I;j z^HKVE40;@T0{Rp5H1rJgEc6_-7(v~84RkGZ9rSbPdT0UrU^mmwEzqsdZBWlVEbINP z_@J%$Aerf9y=d-4y$=VSN7;Wr`rdmJmfOOZ%-t*5UD*P+`>`;|(@Nz14f2<$cpGb% zZ&RP8pX6Wd(M~kI zQ*>K0|DY}LV}O0KY-aBg&Me^8MK;4t7)`ZMXPzV>ZacsS}vjm8!eP@W(H@bab^Z*RM6ni3Q%Hgz?MRk04?k(g%SqjWJg3mFj~)}LLvp}{4x(N> zST?yBC;Q5S;B*+cmTEuXF+w|!$4Ko0ZH_idyMo6U?J8{{8g-BMCw~94_Pq8}?FGhj zmG%$qpV}|9&oydHw4K^6jv%(w?$zzOL;J0!=a{ulB~&tO(Vx@5v1C|gC)}K{G;xA; zob`O`UVDziL0ZI`|6+nzSTefck6w=uig1BwLAZLtSI5v*6*u6;`OCRuKM`C0^|D%jPENj z`c`0kU!!1F?#F8s{@<@K_@7cE@SpGWf4_hK{r>&`d;9m_@3|kT7VAIVb3gjN`v2LE z`uF?ha)spg`{wa$*#GbBn}5Gk9(Bm?Frg6s(Vjhul^*eY))l|dk#C>zteut&iPZ?)7q=-Xd8}; z<*prxyKVQfYo4KL(f6Z!qMM_;p%;1A5#15p&-41|7tznCiT;*9cJvSXqlE+1HXQYj z8pp%_qMM>pn|6f1=svS8UiTm2=VN|#Y(9FQ3eUUE&(W`i6J)R_x}Bu-4f+$GW6mt`JHQK<#`qKO!OTz<=<4lsz0hl%-6jj zw1eOGN4Fk{Q}ZZ(j~~C!l#+=mvju-t-5l{x+Lb@}eaU=P&zVr@Q||0@1%mpYHym&zra|F&@QROv7XRz}fD& zE%cz)(?DGEJ>Pu$I}^pe$6?`LQN??dzvx~ndiaa+rev)?cgAISq!XzqJ?sxl+Cklt z`iqa8cH??*fNR6~Gm$ej013pbPkN_L={x=P9gC^4hn{#S=2VvV`iuUh*9YE$&+|Rs z#B~eZ*?VN3luhl6zC!gIb|7cQN7>WLk>7#%ZfUc3yZGPjrXGmYs9KEu#lG7gU5%W& zePY~y#gFRsYETKqH7it{$|E3m#o<+IrrcD*6;VZ1%)_7>u7v8mavlj(!c{Q$RP(S> ziPev9YI)eWCqzBZjXdmJxj|-yYOVpyPy=}+QF}Fv3asHgxax#Q3K{HC^fs1axcAH3bq!>K)>{SmGn;o;F9<&mO2M*WvZ`wI`h z_6${EL8`!B;Q4Rbi*WK1k4$O{m%`!8JTj>c`v-DZ#>1j5=i$*_<6+lc=aEj0+8gxp zCXXbl$o>icpKD*h`34>#Dh$7*zHlRtR4NTO@y%B}(x^1s%r`rEc&Rtr#TX4{aH(z6 zX-)3dC76XcCY4_Vvyj3pjhe9nzANP6SNK^#uax&?JWTxj3O^5VLO;G2 zSOyiAhQcyMVd+*_h7^`53QM=bGNf@e0T>CQ$qLbQRXykcy=;*5V3A^T7KL9T$dw@R za*%RhWwq#zVB=P(q$*TAU}EAif-wsQA!SKvU@#TE6YI%Vvd%%)r%*F1^^W;U%3&qt z2vS~1fA=80{>bZ3+F&H~Jhik^^*B|@Vg|DKC+AD;;}76{mv#=iC-;TRg4;vy3un3& zi&0~_7ERTRCB`rL>PGWbU&}c5+pUJ?OymZ72HIubJI*|d=RE$X>dZS}SRReGa5K3_ zk$&tLJ!(8Dhj5cBK~8`{_gUsroE^u70I{ zyYZT_*0RL1G|!pm&&$Zm$qVNd<<;c1<_*g`E$@l^aDGwP2wTJMus56$&Iy-?M}=pG z&n$d%owhf6z~Ihz!olxobFe-|pGlin(B^XEebuIxmztNBm&G88@~ZP%4r|lXtIacF zZR*h|p8S>QZPBZv7e&vGPL7U`wszSLc7F4>gMoGLu3NS4t#vEb{cGJD>t0^>*L925 z-L-Dar)xfa`;*R3c7L+vlg*!e{>i^TS@X$XKY8Gj`##deapsOEu%kb7ZKkZM{-QmLzj+RuTC6R>+x(pwWQ+D=?F{Wq?T6Yn zZ7!Z_4i?p^U84O+H<-ol(W2T#x|9D6P{-S{^+lIB9{Dywp;5E+f^QCtM)T|)MkzQAZa&p zoyAS~*ITq(nJ;hFex==|+wiXUQq}w$?GwpzPT`!8*!wo1EHdq;a)lXzdp+U%g7 zs-eBS$I|(7x3PrxRxoveWngiN$Ew>cPF<^BQN2R1UXi+@Urj$xzNfIM*q2{y2{lRsX|3TfSk^;^)Hw04JX)eMRjkLtUV7Tg$whmy9R7TE1MoSk5leZ`5z(>_mKMV6kSg zI+7A>aJ960sb0PIUAXdbnk~|#o{N4{J@DS&)C@2(@3`ZZTOeA#*?u*&)f9p1Y>EOATOAZ>5^Cb7%*(QVG_U-p z73Y`#q;kgj8MCh`xVT_WP=EBVMG}XWGfRKfacNkJrLp`1Q>uMVt8|sUSi;Iej8tNOH8k>si zY{5`45Qy+~By0`%gQ1Xo;kVkXwos&r1GDr$>(grTto;fn&Z3KQ*&*95E`+3$mt=6O=o)mj1={nIjSz$ z5Gg2#Gz9BLjn*GLrR%hj!Blr3;7$$dh31c=>w^7?3TAbG{jam?MimtGJBu$zb)9WI zd2oup)DsMP=E+mnfY`5fqYJ|&si9EnJWnX(L5H|It?@T>D2%tNX%B>obFwmWlD&x$ zttdCUG?q%OO>Fm-ajev^YGmb()3 za|0<^KmF;=U7OAl;IZ($7-~fmDMEwMYALt@P>NDZAGj^SqMkwL{HaCIZ|xi zl924OYc4>;EU~SXat3-=hjs=0C|abbC}+y}bH``chxpUa9Y004|Kx+|3;xnvd*7oC z<OTrGuEEN?$#1qIGbMWg;3*$dNjH&sMI!<#s&wZu_@#4yY{cmwf8?&(^;fQOl8F3*k)q!9gQ(Tgk)9%uf3~Qp@VNXo5h-g-WN63{Czwsx%;uAGXKsClXO)WXHT z|JxtroPOG?dbNH!{xA72OcLU7)Ck05_3L`|zWbzIT(Goz=rPh>%}e45MY6{kS0D?E z=6Tl8Et)0P(pvfrVLYk&SJ!lf9=DwM%^%U&NVLNkhQ_*?eFKX__EgR1$}r85-bI2q z88I)hKxKe2UXFnZy_(|;Du8hZP$_4bRb?LObZ zfB%}6a4tqGE#+%j?Mb$b6i=?6m+wvrh>T6MQmogBHxxZ8!Yx>pJ8X)%3cQKUmLG^j zDwj8wW+!KtE*diOlHBu$4fW=qb)If3Xqg_9@Qb9t9xoz-TJb8% z78jC<86Xix1oCZ-jcA}uU}_R5F3MR{o$nE~N-0RUCft{;Ki{?1o-v}dWJ-41sBv?0 zE*Ujqo&21XU!88X1oe53ofQn_%N=~N z9)~R%yS6*{9$qmX_%t1Nen7l%AOgQl1NDPv)eimSrqVLQcw)wl7uD001$;k=1=@ku)W76yD?v@ks3Lvz&Y>Xxp$A-ph)>h@>k?&iHSA(rf}vY&h6Qi-u5c>GC?4Jd^?&Il{JcKO zjC%Vs&&YXJR_e@G35hn{>a^HxEC?`Zb@o!cYOg8BY=dcM+DkI=sD^Z|blzi>8V=gQ zpAvOz7DG?8igK-8OQ@p!f(m#G1Br=&3jJW$L;A^oycKTKA7~&dGqO9dQRi16twfvWY8}3gnj8rIfgG1*0O|wS55Z<=&!EDzxY7A z+u7P|*7&5LymFW+E+hiVv`ii|vuM_c(Z`qi(jOmOl3tiSSWkROe<{a)N?Y@Qwo^|Z zkdu;@66{|-prAHAy=+>F)z&o_NDS`oa<=6HEw74uGwxMZ-dA}gDpu27 zG0~&MV(NO6~eY*PAnn+MCBs`0<4g*Zp9{ zs8de;aipy##a)n`nHE0o)S}$XtSqZF*~ik!SMM)9IV*3u*W>h6&zkwuqA@4WeD1kL z>9!$Whd!aQFuPQya>?);Z!$;7y@V>-1HVbu?{w*o1hmjjqQh!Wu$e1NbOE2d_Ej`P z!kJS}iTLt;k>ZHWS63WK{6bIs;=|GpOQv7inkXUrrI+eSE73`EOvX=WJ(WB|ftJ^v zoKaxQbp?%#%!u8qoPD>e6Zz{Ba7LJ3WZ9wOgl?yDf1rJI8pkU%wG&7bn?X%MN%0*|%p0Jb`R9J{Qk>hw@KwlI3z{ z`}C|(I4RX_PCGGuU8%ISM_GGjow#4Bi_e9*r%b;p>#Fh7mbI28mbJE)rIfWUnLPgT ztY1t&MGybz+T*8;ns{TRx}mk~<+9fLn*3`gO_(qZO%Pp+<>e16-k@zURT<4O5&ynK6qYuV#v@_$cA>jP+A z#nFZ}iCmz~YQfM|2eGO3T~_pTLL8JLA_EJQQn7)*cS= zPDJEAO`#95rm$_ZC0Q!9=-d5WJHGkGc=EwH_jHlYGo^kvQm@bo+TG=)8CrUNN?CbE zwy)5_y5m)eLd$Cx*BWY>VkH7LqZReLvA2I4&TSJXPq_KK|@F((` zAD5RS(dtC?lbn`BT(At18D3l&t3-*4RgCOmoNqs{`t1i$^@FTWle+fMP63Sxs!5{f zPODu{wAc-2l1+Kkr7F&5LQsCjjI@b?X|Z7PWc`xKlke28zvGUspWP`OC2?1hEwtp5 zY>YF>q8V0C6027lk$}xy8mMU!$Kt8;nCe)R^m3ZVlfI(8ZFcUNKYeCcTOd6>Kmy1* zqps%k*faY_M`;#j%h;0Tkpn3=^@vHZQBAZ|9W-fs`obkbQ0;F9lE<~ zYuA~3XD*Djl|fsHn(w(p_+zmn+9l1%j0sP5p_X^{p-Bh#KVlwl`3uLpB?dM$x677j zPjcBUF1Ir=Spq2%J1bYn>F>U}BK2K~N6{%?oi86*M=U(htm!{Un5CcecEa2pKgG#( z-L9XH?4R!%B^2Xno*EzXu|3hs@Dc!0;V7*OZ*lf~Ay|x9iajlh-Zox&<}C~Dt+eS) zG+1iuT8WK{ulTd^92Q!Pjpn)1v`k+C(^`*>`Woun3{*32r;%`#acHoTE9Ti8H(K>( zeau&&qI!6C{HOREpO`h?qO~mMC+4aV1;qY5i7qNp9DW97s-_GH6;-l|uMz{EUhd+& z6E3^#gx{Q;larl$vhn0)Cj?KpY`1<>aljQQM(G*jsm3D4n8)fC+bp$a)p$rQ7FGre zTn4tuSi8rIq4ujOWL9fx3aI&znX!mGP>%>~*21`hj2Wu_xxck$aPs)sv)k)aW)C0U zEsU0yu2*}+V6F5g{IIOCe4u~I)brwkXq$cdgbAzrNCQOfLmJs2f`uifN4z;nE=O)r z3IeHq)#Nn3YABS@k?Dd39~xxNClW6+t&kk9p<@lCBG>s#xC zPG8sTAIW_3BZseL)R2a(t`6hLs@gG4vz&>ZS#6_pQxf$Hvja{h74$A0zAnJOHAx(p z?la2jYa>prDo3qGCBlg34E1oIY+%g4vC5OL;{imK5eqd;m&XwFiBp?OPdu+Sv!Z1D zt(Q+aQGZ2uIMYf>ikzOtDW{d5cKn2SmyVsXw8+RSOHX(D$q^1}KPkJpVZb>qt2M!y zl;I58tj=IC%^M0e{bcrl#@goDu7r#d;oXfI^hc&D?@Ox0nrKbnYf&qV(aif2I*JV4 zM#YmW4aXn;aIjP65}msdbr_d%F1rbf9WFA{9;fmpGGyhV#52jTdR$a-QT^)baJc&I zF{3UozkJk~5A}Dts`Jar^7U0+6=x4>Ya2wy`yf2ssdz%?6B4cDl5G|n>1c7sV#E@h z_N%ef;U36ITRxnd@Y6R}?#F_U*B?7Lg%(I^TVyxOEm;BvnUY|~jV2~olMJ_A8d^z9 z${|QF6N_lf_F`?~aEuRTC7k}=%!FCXUf4F(I&~-QU!z|kgp(NEwU~aWi!q+2pJcq6 z_cS*v2dBeM{LP(FoXJ)e5lV_{i8F;|$%GR%S?WUM6~(_sZ0`47-gR2SY5#uZz19>yOwm_wPp>ichdSTw65k}FcJ5>GP`2Mb$u4Z01O^};}k?%Hi+cJ0&M1NAit zzZ=+9Y56^^v_wzSi)cmGNLJPuR+~!8DLf=_!=0+htYz!;>A$y3oOJs7^LSIE7@O@oUP29=25<;x=^IdxO>JW z#tO@Au*7IOj2~hqrL51G@oJI^ay)@DYq;2#l2PlZG-Ex9E2IJZ!*UU#_^dwb3_>1r z*%4bIi}w}hTU2b?6>AFp!V#xUDDQvL*vE>}(#u}d2M;?Z|DwVD{V6Hlf+0gj-CmfU zUOK%0$jKRzlg}*9&(6-x2qYvrhL%=VmyKTS_c+c8RbHO$E6S@VgzH+k9?1CoT3CEp zR!TU*lBWCEiBY=DLQd=t+hL_-BX;qyoZ)F?qO3m%G*gAe_J3x7(6Zsd4F33fv{Awt$}Ip`8c6stsq znhr%EhwPEeT7I85&{kPBDZ9P7;l%03#pR&Csap@$^v@{I%Nv0lh7ay~qDK&LkqH+A zkVKZbzV_w%o!Q(AD%+Qu9#(;f88?H6T3`2)2Qj^gM7JE8$j2&BGRKd;EdAo4?OlJV z42KIA4<2^0`?7J9-}$A;XM65Xh7BG(=&ZJyNTi~0dUNaG;Y(8#Ea-kZF8^-hec~Z@ z$lRV3&1p|cG5k)4JJppeo=!qI5ewj`9HuV)$x2x~0}qn+^`b2LU0H!(!0wwncX@mJ z;>z(ZV;aGBNv9L8Izp<#lvtj6nifU_SB*iswKuTrXkeX`mr=D~P+tc*<8KjUQ znOkd7!xE)|cx|`O>#*8Weax}dE0)W|Z065=l28u@5Uz6g!^X*Xb@I;4cUg@@-Q4MoWvp;R61__*rgqt~WqMbaVGO>7 z|Gv?PE{P7;_Hkw^{(+g5%Ls)6 zHt%a^PN^B=y5zM6SEAihtnWX#aq=WjqOpN4%u%044{8M^D-^X9OC%>J3dVzxGhxM7 zDQv*1RZ8vhtJnYKxlJb(;8!ku@yo7_x8?rWY)#v%MweJGUl|>|nmEsPi<>kB6@_mj-mME7*l`GY<1o@D|QW6i5eLht1JqUa>Xl!QraG!s8 zd1l-6SF-&6Ec5A3{n=^dkx02hWLSDmPI}i8J^m{HHdQ8YoCKTk|{r5%u zqvjuUBmOJ;=#4ltqoF+NI7TSmEU-A!>DNQ4Iek_#y@dex_zm5(c0)(W)lZH(7ED8)04cq5lGFVHh@9lw0e2b zCJ7!wxK3H-3kTu&3}?!9FD|rU+|2%iTI#2tSR8kt4PP10^dCOhoJ9U{i0>R{6tRTy zvbK@Fy&j*<RSf2&TJf?J#NJE%j5mm z50bvG7};J>I_%(h{oGz0C^YqLj6Ni`lIjd;DQ=%l52=+K6Mh^~Sty&cs0`c|uNv^w z-Wg15PRkuS$}k>C_juFw=$Pt^q%ng$R7a$VpXs7B*4z*C(@VXKGUPQ1`c-B-w319b zvJ!8%Ka{mcj$vli)J8onk=<<;Lv^(c_1%jOg#b=F!v3$GJ*H;l)X20kgU+a*K4^sg zKu$1xT=mE)1yd#rnUOo8eXOoORGqBfk?l>fyHbm1omyR7R56~ajfAWeXRgofOi3+1 zby`hHe(_*mf+b=%;5WqoJ#drp08(MSX?Ropj-+IV*X>D?|5`&>UMU*{YlxRuO3g{3 z8Slu<%KTyO#tYB-g#7G=$=4MoH@6S}+1$AW&I?>~f}=A_zrOjw2XFp+tDOK&=kAal z##vZEjvzp>lRG7p;&UpqrY8k}TGJ{QB}racF^bO;_Z5HBWSm7DH6$f>U?{WO%p|%> z4wV;Gr8}p$=@)e^75}QYcm0Zhik_v4&8VSgoAlhXf-zU^hp%At)njdAU;g74#G@bU z1zqgXN#&kp8Z8`o1w%teTEWQL#e7&~aS=&)tHn0(^#S&lrMIu^XRrC3_PcaLk*-!4 z``~i|y(Ek8v)X#CU6h3)qS)F+d|$*@tX3}Kb0ap}V+%iPOK4kj?;k%KmoQ#W*>TAw z9bKK`#iQRuhZ_~NN_A|zcT!NF6wqDCDSn6DmST8a4zYcS6V|R+&i006l4EP%rr3(k z%(v&}hV!%SF6)xj6YWF)@kH~SlIE7Y@)Wl#HCx}_#l1|s3V++r;}#o0n1wA+3z;yW)3TT>ukr_E7F}d(sbGH=SWY@RAeqX!h9vEs^+<`S?>Pkha44x z*TITcEXb1O*OKiae^^Tkr6h;6YIucTS-HQvR7GJS@->Zh4PjNGgbkS0xsW5OR@@=@8)Dq%yGKkZ^+Apk8y<`UEaK3s4A~bc_ooeP&1-4tAMW3h;V&AHlON_oq;X)z zi&q9xO9N?vVo&hOvNV^x^U5re9i6Brfo`le%|dOOokPokLY;U~x%CuA{l8BDJ^boEiNr3M`>11NF7^9_Vh4S580eVyDP=x4Fp|D zc3UvTjk819s^m5OTu`ilLy&mRvUNx{Ujmta|R(8S~go z`S-uSIHmfOb?bN%DGel6UQOSzSUG_h65Yck^z02|n-*x`U3cB3d%L#j_sX-WwpwB^}jKe_XZHzk+(OLEg3)~tZMBFREyhW=|~TTGI=kzg}OG-7?C z;bv%!`LZn%C|o#fp)unQ{$v#>S@_S8BKJAfMzcTZ8`Q7bm0dm9@HZEF()*9F<=2-X zNLhWvH**#A2scGg_V@6*! zv$=WZRinpTHMY25?EHCBd@yhR*s;eoH;hjmS5tclF(EO4BRw*wrh1HLN`3Q9oHTzX zC(q|3UiI=J=M+wyIPsdR*#w;UQ2WICe&yB21+wxY=@+L*a6+bIWZF4V(Q1Vr^a~keWLdY(A%sE7gy9>x<8h$^uVXX@NespEuX)3^X0*PVjhq z?o>x{Lvz`cE@xtU%9&X~e?|yybF>HbU*Vt4>R$(0&m>AAltIRkWu1o0RL?nc#~gRu zn1Sk9pZuixr+nglMt}WtwVxzrW+tK8>{@ENJ+^_^?8~@IpKw>#3yZ`r^sd=6x-0Eu z?upmzCG^prb}G^9+e2k-O|I+_P1R#+4S#L*5L^D}I!}6W4f_YC4vGI$#Q>sE$|ApA zk96!1Wy45uFKoX^lue17+H2_9ygjxe>FYAf$}4Qi;qYZ&R^>;^^7Kev&hA0U9#8V1 zW2;iv)2?tuxu@U}{oc%+;^KO%C23I65c@h$vNM^BUUY4wahHCbu?}k@YuTNHmB}PO zFj8+b?iw=&95bon9*LzTlj#X8_S;f4Pf{qJCPv*jUKER|N3GA|g}!Qf%&aIMH1NdA z$^mWDPmskCNykDXJfN!L#DRm#E2a-L^L_>N60h;J#3I{7H`hJ599EajL7gU^U7Ra| zU%3JtSOXBmh;}o#1$1V(?y65IWl=?+^XKcS^XJUrA0sW+AJ#`$$Q;UQDBG5vrMpwJ zbKK6J;zZesp*^2?SLHAJRwv5fm?et+p&w-jQf;Zh(+Y|Pc?OJ{(*Gv?VP9^U|KyC^ z)IcEB?Q9Ac4rv(GQgM=+qx9eE!z}q)ndHU-!Mt#iBfZpXWV4kmc}p=?35=w3S^CB6 z97Jny-a(QH_-a*|D0VCH2L8y*G5B?B+sNU;;UiD;hf;!pqNeJ?K&mq}aMI|3sr^S7 zv(rXZwzX9zu`2YH4k=9u`csn2`nN_#AdTMHYOV#6s6s_&lC8Ft&A8jR(in7`#lIweS(B+5>9A!|Kx{y^?K|wt&FoVw1wAAs zvwy&-D4byYuFpE@9M(?-=?;1i(R%^2tXELeQrJ3oIEnLB5!2FFWuf-!+ILk=hME%1 z-6%;ZvH=+iXSdDJ8-`3DH~oYG1N3(*CT6!!Jcz0v)b#s|LG7leSf*{)FIW11n5TGY z8DS!#iT2m!f0&iMEWbS=+3;G;{ZF*;9VQc*IARdRt3<=a6ALOUioAjP8n)JQOHQab zCoeCze^w+jE8_G>F@RQzKGs^Y$Y+toqa46#x7gUlLB|oL1nHvN64Oc5Et!Bo>69rW zCKpW5AD;3=TS8;k$5UiJ$k8v=rLHNSzsZ;Ujm!cHPt!kkS5}!JJ@Z!I{7p_()llEi z>dMN>;lAM&RrAt4o;1li8ouOVW##2%!;*(ql$BLvdx^$Q^rWXtMSUTj{oZcRu2TqP zH>_r;74z&(Ta<%J-_B?-}C?lU)&y$ku zb}6A06h-nfas$b3i=A2{Q#y<;UKcB3id~jKn64`7ddtj0VKobmo@!a%1pHWx{FJjPmg0V6LUIq2WxuDK6!%H>751^5pib{H3*1N}KW~B|SZ9@?^LV z!@X3u3-?u8TYFZhw6emJo8QfQWmRrQkvrKURZ`uYn~C`zzA<`LsNV}|;aXz(V|bx( zZ|*-ll1pmt9>D7|fTK7l3u`pZ_|SM3|5U}5SyS4J>gtEL3~3+KTvJ(5RUQn)9oEp{ zLk6|9)mK$y_4Zu7py+mC@ykS(ns}IXTi?l_9Rn^s=@_o=xubyi&CxvI!EHwd70u3w zjxfs6>i&RJ{ z>rbP^EMFWx=D4z0`C?jHhCRiy_@zPd0>+tbeF_*;l6)B%ZrvfPRf}1TXPHOl$VHyL zzCHa0uYRpZPqL@Twq`OFd5I|)qRTDboQOsFk$6>}xPqR#Jd12fT6!1fWylVttGhza za=GQUu55M!V!h6%*Ccvn4s*HL@}vGQH95g%x1!qOY+{|UD&>RZgL>-!q%T{aBEWJr zzr-s6b-zqBeR@j4-_uiSg2hd@Danomo7?K?=}G*)tblv$_^zy;ab3Z<@>oBx3iI39(afjVAvN2TV9U2gdis;ph3c;wcOM^{#SD3H z{x}sgFKsTx`V>8mEG=!#n^fxeWh74KZ9!9+-{;RroY2G5w#JIeELX_WSXtpuv4%V% zc6PW9V3%)Nu2OP$x=K1rP)*+sB%ZMW>u=9 z`p2q7TSaGDtIF!6QnaMGvMMbg>;NO2&ga%6(SH*5+5spsMX{lX`|S3(s!gl z;uvM5pC1xq9JQ>p>tNsL!>lqLV3{AcX?L=cpq83KDU3ZJXW{oi1m{E-Fvb1?d3(&btp`XZQ?k3k41TnSRY>2IDN;W zEJQ}5YT~-9Th&;K59z1gbR9ADO}~N4nf0?4`9IQPnwLznDb^z!-+g;DZBofk*<>FH zVvn+B={vl^lHf39XnakYgFJ_UccOMQCPmi#?qpk%!{9ot)D*Ts;~}FNHA)GoypvUt z)Wn!oq-un*Qqry)1gCgGskr&WdvLkqJtTj}9+Z!d^{`hUigyslD8LvVXAD+6J7Y-k zraF>r4tJ6()o$yq#*xrh<$TmAh<-)Oifv4u-9rhOxLjz~#nL+d{Gd19n;>LL>#7(+ zwe3Mc$ZAitByqO~DNg7+B!!W>u2l*^&3dPv?pRkUl)8lnKJm`PZ32*ir!*_QWG|Dk zB^LidGQ1?GKuxrz5*Zoaj!D&d{0Q$d1{3hkZj~Qs=3dbTvavs zytb}?u9_sJj*})%)Jsp*i@S@u_0nIevhEvB6)h24n`gO#aTkcs4y6^u>Rb!5{Q03& zdy-s6%4n;Xu6RcYS?XP7&8ar^yK7#LI;+KtVdwUp(2DBI0y3fXt&uejozw&wRW*wa zu^H|x2~^g>sKo|Td3Es0$Lq@qT;nZ zHKa!uC@o&eL9k%rC(!10&v9x2$A*BS`QH@Rk3^ zkJ&L&P?Of2+)t}1$*U~Ls`n0v$#JQas3=}d{bP1K9P6V-SKmH@*?m6p)Ceu8%M_yvm_KNPKn# zWx0Lfs2;9wTzCXsF`PtiJ*?`D_#~Zu1ybAkdb|NOne47RlGqj#X?ZROSF#c6m=>${CSoX3 zB_Ziel~^bCvqgM9GjBzBqYU@jGgYnkz{a|BC-rMl?+3N^JNI9|P0yt6y&^rA=fNjk zuZq1xQ?DtzWVm{pK1rXT>nW{eU0Xb@WzUMwQ&q-z6hDzFHjx&TQseZHH8oaj97}?T zKWXZdm5K*kGQsq%IzCT)$Kj>N7Ka(p9MWSTP4yV;E^q!WJ=*&AxJjJA;XN9cnbA#8 zkC`$?)n8^tu-6#7?f&RvEIy>qlT8~xVz11og1p)9Rme6C^wIWUC?iw#o|e%|!hN;< z$Q;Bb(Z0hzhpF^P{l}snv%(o{9aJf^4tFNAC2Qx}+LWa3I%g5K+RIa3FIGEE?oWB% zc)@d>88ODIp7o7twQ0_ma{Yu{XN6pSHcJY(PD!Q+h`eS@v)4)`g_<7&lH68T+6Q`F zL$T^!xrXB2v!&*SyHT8d*$JK#F1uYX$`0hKYs%8ObI3*1Mb^mflx9>{h0}7p#m)}D6 zCQq<&NMT<4`Gd0Z)6%NLS(%yC4Q3WDr+D&=fz3ZCs2^MHb|m^vYi^m6*?4D0dO@V_ z(&Fsw;^ORsFX?{~+|BCbm0BtDOtVJ(R9T+XpcUqNeAU*fih@FKN_wNS*4z%3s$2NS zm6OGKb?q7@t?yo`tm0B}gcACEYq@gQJ~2(lcPLsm9%FK!8LM3GJ)$~uMDqKdB~P-Ija z8i$l6jaJ$>)HoK8r>M@h~A?kppfgsdbCii_CL_WW5pWZO*h}|8*=0hFw;CE zzl#)d$o!}TP(`IL#YO_?)R^iLb@W(cCD#!3*IL^%$}3u0lj@aBs;teGEy^Y{(BnQ5 ziQ}!TQbi*FfjnaIi8*wMOuj{tyE+!;nIk=8;V~82$RJob-5j2NmE@aZBixI>Y2uCt z<7I?n`wcI1wlPAluh}}Pen_Rle2}w$?-3s2cm6ZPEq$|7-7ctij_O;+{9I4wO7=9l zkYaEwd39_F%qi=ilSNJ|JFBZHCW!sri7otZDB59}N7ZHnwe6!s8tr8%0|pn@^b3S2 zYA;P`uc>Sp9u9hQTGTd=@>o1AUAxRQ05JmAn*C}LkGSjK>#C7hLW;S{9KT9p%4K>c z?uBeYNNGvHxa5in;qzY4%P zu$&@iYQc=Y7ng*?y)Pqp)Re*e*tGPj(#b~;zM$5N4qp+N8bz^`zq=Rjg`bsviHksC@&}C^!dXs zEkD{2<#=qIr&KN7gz7k4_LQiqE@O?Rsn>ReK(G>=tOSk$X* znOx0w@MXCML{?%HCs83HSB}W}RB-8bb#E=xON+v&D@Q~fYL`7EpsTA#RE>cVeUr0i za<<$rh3iG_MELP5^i(Vs>z(uk{Wr$)6U(SjknCTK2aDVP;BvzG0D|tD6U zJgdMfwW0CI7tbTZ^A#00HJL?_QUoFUL1M3}7MT0`alfRPV>Ny1qJk>p!kVg)P5n*6Z3}j|3&=z3FESGYC^3iGrult>={2i+q{foPT-7TTzyxTTi10;-zzGB z!MrM{Li}cKUWH#v_1J9{1zDxJX)cS8dx#+cnH|goAT|v;ig%d_4!KsS_-HXvpG!*4 zJ#yG{*p((j4heD46H~f!9bFoG|DY8L1~2I)!QLF@n;eA;GoATdsups`E{QSq=P>^l=csR4h4OueaMXQm zOp=&DUygb%kWp^0H$NF#iAX3vDN{?!NDt(=3(XP_Su)1Vv$xNP^P?n$gX^Pthj29B zv?kk;rKG>0oZHdlRKe;4Z!Ef2?`+j83Nlf(n$)IvCQNP}7sK$VC>~AEj>+|azIvD6 zVkV(S9%U3u4pG0Zi+g}i=%tAv_B%@@*AWO7m*hGN^`cO5Ff%nAlQtg29F2;nk0^2R zDt*K)9{LcGpSmy{=ku(EeRV*89>+Yln>lgLa(8eKcX8UzJMn9HBJN(1sB`~AsW)aL z7H(1{gRtDZ!mf#3pG4sUlG{4HGH>3zm*>x4G;f|hbKX2@K6*t?uh^4s zDL}1~$j=^@(=+!i<2gOkt&!7fQlX&)Q&`^>KM)tzP*HO7psEIW+f-J3@}JM4R;VN= zH6x>>Z1mM~Em&&%55lvDh#yNGsQVsqm1h4Jbb-tt>Utb}cMf$IWP8GSK`lKsIg%f8 z`Y<5WAGhiR(w<*5AHQx z#WA>))S;ypmSOxTnXkP3f)m5V>tJ^dF-kvU1)pcU$hshv@#u3FJJK0B&!X|}*x&l(` z}0b8Ihl<#p2d1uCquXDO`qd&~o3;$O6!^-uK=y|j!CC?HeCTU!IXG?TAHN)v} zn$6+b<9oB+t&v*w^j|)3;PU7Xv-PnXbAOoAHDAvbf5mQ)WfgbFk-Z?~7zw0j2EAGK zjLfuv&s&m`8{70%0hY`elu#^%PpXP!Ba?VVZFq(9ZIOVKBj$$=yFJcZ1;su01}ZAj z_m)I=@78@e2f06$x`P!@PT4$Bn^cl;`aD@RNgM8ffOff;`##@8kKr$bMS zUlKfh$naTx(**7_x?YdZfckW`ObJ)Wg~H4c<>kGz1M2P%>IMuc=8DxY@2JDRKofVB zNAjT{_tdG2I9uELx72G@A-S^-t3dvl(}k?5#k2fx-d~4J1*X2pcfHL{lybBAH_VUS zZ6|Hmcf8wZxg&(s0CnHj zMmIt3xxGzSo;l*4+uT^@#Sp@Sd3Xa&=u;>N}#}vHL1C`6Arn zo+%?3vK2{)#{Q8F1-7V(bw(yjQwPyuyT9ELdbWC$%biqVv&&bBbNzE$g3s|)J$Kwl zF4TYWzgoKz@TiJxed=~6>7=`}btj!YH~U69-JOI^5Rffl5yF#IS%fBOl9td3-5ny1 zzTu6cBOv4GxI95W#^ouZ1CEH}3XZ}kj>?P+!$VPL98g@J<1#vuy#Lg_opc1=H}8F~ z`>U?Hw`)0dPF3Bix^?~|(Kdo{K>N3r0e>SXu{Q)w1kTM7a6n>cL*sI2r7ow&Lx*-I zYLf+Rjm~3vY&ruJ4wQJP@B$ zvd56oIy3ME}TmEY1Y%dSkq{^%CU}?*P^F zk5n>Q&66dmX(DGw+7tgEPG4v7dN-k}7cZjF$D@?@}>r>U~@zbhOtM3;dCATGKumA9&Yh49DzOTM2slD{dx0khY zn;fAh7BdSO))V{Z;t)Mg13E^0>}-Zlf=h^att_SNEOB_b<`!Qvkh~VluusNHdlZms zQq}Eck$R9PVKSy+iypID%%Kl4H;QK*NW}n+Ndthf(3*MLuff^d8u9F^&!}ctVKE1= z!mQ0whIH>o(=iCXqOBrFq?0iCWekHazL7xqvDo=2@9gP#YCZx!pY4Cl5pT=V7zZuQ zYDqLhQ6vs1Vb(YxBJ107I>o7PM(M_!2wH*24qo}bd1aRzLK15 z&KZD_k|>ikF(KXpG$w8^_%bhKwo+e@-(`V9olsf9dxmQ%YpSr70C7@U36M1Zb2;l- z#%z5e@%!V$L3X0_#KEa5=2b0eP452*xJ*>fwU=6Q14FH~xfV+Lz4rdn)?$p#T;HyLd9)HI731`>wO80<&8 zkP_a%AIkr4^Dj3jM};>bT9hNfn^6I-mmaoj#i2|splq>kxC+I}vai~J(18OeeLd~O zlR&|EXnlmOI}DAaBSyjX9aCHD>-|%wxjkax)DDk(+Ejl%RQ(JDh#kXq(rSXfUz?Z& zU`}B&8WQ=eBFTr_y1tw#1WH+Hk}^1 zLzw@+w}A2`Cn+xb|FDY^I=i(LSO%cG>0PPY#a1#HzEvKH84?B7zR=m#v~{JPE{`fm zb5c*kAPhiBhX|pgE4hoN7NZ9yHNfy(f|W_}8RYgu-P01NKbfUQ532!iJ7>(bDrFB< zvYvl&PGv@Ec3yG<@I8}?5=zZ^$=Qzdaumm9@!SYb@XP|odZ8l7EnVAJC}-7vR`J(P z*JNOR#A^SHb>V=|`$kIDWUqHg^|Jg$ZEcJ4m(J>(ab9in!iwwe6ynYe70YUCQ?fI2 z$6v9;wd9I%p7ibM7c7a3&yJ5@(vrhtQk_r@dr+eUoGHS3%L-jkhl!Ch&30>2stEw@ z=;|O4O&jD%49)2Cj1_KKZxNVr4B41g0xUv&ZFS<3(B&fKg=VGsh07IV%jOoNqO>hv zKJZ83gxm7L2LmBt8~B8slmjV8u`aEWI~zH+?pFL-ts=>Pr3ww#8nyak1$Zqc#+CrzFc zi|`NRI>iTx#bJhl*%8j73!o26RmS0Qfkz*Jh-8!%8M2RWdIzAwl{YO_E1wf^ z+h_LRRzs(93?n;cEikJF!!q%SMw65_%NjiAqmn$T3~Q)n8`}DgJoctiv1iZeh_acT z*4DQwJCT=_^D<*VG>JqqThMkiK1s6bcsd{q$gL>Dk$|6~JOLYET?5bUKPq}puSpXX zB75U5DJyIM*`myn@uClM5JL#;^tvu!8|qBXz5AQlU%&HSna5 z_Z$GRqg))GRe90*7r4FN#yR5_Rpd`zFtfqi)G#oy!JVU4HkZ^l2>aNol=QTMqzq@J zr!LF5cuoEI`lh)H*&<8P1)j#ai<|4)n+j{2T-7z+WfvwH)2zAW<=!#*MwWKP+nE`aT$51WMm;Q|XB`?2^NUjlid3Bh37ZK2OcnNe6 zbN7SVFOPNdX)cGgf-`}2D$WVHlVi^s-+Tt-PO*1f4lIYAU?`Mv<0oO0XCcf$p7(W}pw*TnkwhyqAO)3y)9IkXw9q7vBZtH^n9(}NFgDqVHyrDCC2IIv@2hgf+0_;GL;A2Fcsqq1c{bX0UFw+p8J ziuhGFJMM`*&TWQX8Hj6u zThRLFxiC9z`djofushwrh&&U&^YnQ6ie1BvlyqIM(}mrk7@9y)vMDWwBADSCq6fVV zogd4;GY~|XnlmXmcs4qsD39F7C*{$mz_OIFUs0jq1Lo?XyOsgw2mX$4H)2;N9FZW)I&H>4U5GjyjZpTn#vU*V<{I=p7J96qj)Nw z#5$=Ny8O+QD!!u}rIYGKA-TkIaI@PHCYm!$vAr4#14+4b-gcq(VH6n?Xaf;(>b-*N;=Pc!o-qA~Guv;hsv(hL7QM zyjSr52Hk%E{wB&+W>AWGrze&bhsY;e*$<$18}Fo@2`+#$9L(1e2lrSU* zmPM@VgpD7*W?95Kmc=zv4%w3L%=;fW!#40olSMAeBI-od;BhI7s=-4DA4A=9hUCDq zh;`h?_?l%A>mUo{=aDjjT+z-F#ZpQ$yn`OL8}YdfL5@RhhUNCa;4MlXb_&^yo`Ka=e`G-M*SxAuTyZ_bk_&}Nw@~Y;XVWhOc+uYK&GGLI*qDD z68a+dE$mUil_}6#0xzatoRsJYXBh5a-*epM6(Vf3- zuoAsnWQ(7R55)kGN@pn{oHD3}7Q@wsJ0_es1p zzB+zJ{EZ2<2}=_0PB>}GG>tV~V)~WokEU-Dixa0ME>FBM@$tleB-JGSBS zTJx>um(1T;@+}iAi!Ey`n=QL7&sqLtt+)1BAG3a!JTZA)^50X+QYNK@Q*KXrDCLXP zg49K+x1}CUv!r#T-JW(N?eFO|=?l`gr0+`q!WL(nZo3lSJ8UQHmG&#`Puh=WEYG+i znZ23UWo~s8INXj7$4!n`vvRWPvVvK6X6?>8mNk$)CVOf2Q#pk>_vL(@PGF&MUmT@C$W{`bbeyk+bN^qP<0* z!BX_9;;qFm1AFp@l5b1>rJt59D?3@%yCUe{b# z&~>Y8kL#p6)!hQ?qj#L+yUYEo`!)9o_dh%iPrawj^CQpwp4UC6>&MnFsb62ezM-;V zQp1vlHTWKAjBmWK@y^C)8&8f-8(ltn*67`%PkCo~uk}9cJ?0%~O2_w-rtMAJ@ysD% zrVgwr`J=$`MkUb%*xA-Ts<=kp;j6`P{4f8;(Q|rO!IB*F6?q@Jgoveujbs*DZfq6S z3M<3f{dlZouGPZ{Sli#Ihhbfmj_P5yG|c;n{7Dk^LuHxqUcFSmZ;1(8sZ)Hd-%m!L znXHG?B@G6E=izNH?Nydyw!&fT^&9@8hhenb$g3B=Z=mr8n;te&rg51bj-wm{qq1a<6{h5)-!4EAi9y`^nT0AEhmw zX_(y8yDk*y?24$B?NzGB<#wwp)~T~s2Lmhm!nO0(_4?Jy{{DVvkA5eDJI?l=)m5X^ z{y?Nlo#PMtLu>sVYHLq0qPF=~`_&zG{ptXMsNy4)g?7 zx6|cv%YSR-zgomVSoNuqkgvnP+80`-_N*L1lXIHCJ<=0Wr}`q1fR>1OtT zoM4CA<@a@T2ZH{vQ%^U?-`Usg3#tBYf2S|l?mxjDCt}Jz z!P!T8)V?q%2&xhPWhjyd!M>ipuo^-RopNzTi4lOXCkY=XHTkQety^Rz~`LAru-`y94b=23ht6 zJNzL@?cC`z)!E2Qi#$_{FiIVko!hB)MIyap>gvMnp+IjW>y4kHWVV=1M zhRWAb2xiMWsf!|{Vk@kjs^EL@m~!K*(h9^-VMu*743r0O)kk3*Kc0uXz2uiE`eD?( zABS0ceh??3$8jQ0{;!HgA$~t{iJ&wU1C1Yf`BDB_{C40@E8+zu9c|=83eLY6bao-l zTKrdxQqD!m7{ncpsnR5vSNEahRX9vIT%QH9yfE_Pl2p{tiJEd;uJq(C9;W74G%WO8lOSIwws->~^H=L3|a4>U{`DkY{WOmAKy{|6v&nmls6Z z{{JC&74i!qWd!lUFz((5ABT$}r7nb2++&LUsBtGk%zKU6*s_QDrOH~Zk||kMObOT3 z2ac+!rB(x$3AdVV-H+(p2}((Fxy&K{m#Gg+dSc6C>34!smJ)Nsj}YJSA$~hThlZ$N zuAhsJLweg18o~47dLNQyb30@ysj{VWE}Sdh^V4PcWon{4;C9XJ zm1FcF%zZ0#dSHA^d64)-soYzbO>8t!9rQQAsS){mUHb#Q4+Kg*0Iz@=&Z zvJYX-ljRiU?OfDqCa!1el*RVmnIm%GUVpZJ$9+$Qq_`jSqL=a{HH?yZJnF?gZZlkq zZus2hI`RK(j1e<=Zoo4Zd|*FkycQbyi@6QYRe-&Rmz~%t$2`YG*h0k&#DW<~GH_N> z@n$C-dq}|F1D-d)+A(9!!OmD7P?8HUn^AF&wV2P1Vy03~6&M<;pvzK&L97-8)yYA_ zgFVm&?Bk5aep(Z-GREM9%~+g@8V@b23D7&6gr+tH_-C!?*wetU8L%rd6WVBPsK~!S zn|=<>g=pr3Jqzg~x|kMW4z&cfL@%Lbw48iG!TXP^X#+h?w_xRY4Q-)KbO-IAd+_#T zBmE~`MK=i}))3dzt@KmOm5z&ex|1HDujotqn(m^9=tcS+{R&N{oo;{#UxE-{K;wFq zeorscEA$~6z-x4v{y@9H-p}dh^d`MdZ$Ky?(I<2rT?+QELX+%91K18Btbt%c5K14! zvlb2K6uQLaXmUTIE9naQ4gHdSO#g~Ec>hKp)2H+V9iczdUuZWyOz+cQv35FvJ&FII zKhb-1jNYQR>0QkG-l44`L0~&tB;oyxMOd+AnIcj}nn)KmVW(fyBeWND!slrZJxT}Y zC-hs)B6o@mI!MpZK6*-I3I}b*s_r(CO}Ep(!)E%um|Je6`{-x%3%Z#e7dawVcUD_>AtL8Vh8e958J@Ufs(em}Uq~D^`)!Ni5Bezb{=!5Su Sw#}c({o^-caKmon_4ME0m}H~? literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/Chivo/Chivo-BlackItalic.ttf b/workflow/public_html/lib/fonts/Chivo/Chivo-BlackItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..382f5097531a6bbb03b3f2ee324793d8525c951d GIT binary patch literal 32324 zcmb__2VfM{_V>NBEt_nzeK%#3Y)N+06S7G*gcJxNfzW&C1QJ4kgphs-UGj>f9e%mU_`jzt(=En1n@H?qu*wB%mu6y%Y#_AIo zGs`PRjxK#U@UkDzPvUvj(2<$hahpsF0rC#~o;tmuy6M!J{`WDa_=z!LT3vNZ6YlF! z{&k!~>gFt-F{G)wlCjYKj1AA9SzBFm=DT|bp}q~z^Je0PYK}Y+zenMB!pw%&MQJW= zGJc<7Om=9_-09UXzVabpg$$#64b_X9co}QK^&*tFH&!>)e*5f^os3Ob4jlh!n%mO) zO3J}=jLpaaJ*%6VYnx^&*I$SFz|T}92|6@}1=FTz3;$qYvR`nAeJD@+uKgTX8c@pf zWREc!3t%%bmrf)Y<4z8DKLdhP4(n>Ms#-n=V118f686FUx!nGaHNkjO@ z2jgoC&b?R^f0k7Uw=uOamFa{JnOE4#G;BYs;67&L`GFn$EXx(@n48Bj6`#UfJf4LJ zv4LH<7lp$i)CJDttimC~p~qpvF&2jzhm+?p1NVye1zVH2}J240~Rbd3e?`GB#E83;dr zAn*XnvY4j}06{T^+12M95^EKggUy3yTyoSd45e zu6F1SUVkRHSXvP?pmTBhyL1L>mc0b9lI2vHZL zkM;w)fXay}-}VbCR$pa7LB~y%q=FgTI{)`cWv(8o|mO z(Zg-h-F&k-VBO;@9w7 zg!hE+Wv|P&*iH6mdz{^AciXe<1@^?y2!$<6vyKmWjqi8`gI%c*!-q_t-Q(M1h(fv)c4=k8&Np`|9gg{&?%ZKkxtXr_*PCSp3cR`&O-AdBfTp zZ@PKIZJSQrde6Ogzy0xN^FG<}>5^SLw=?!K4_x<*{08DXA^6E-!`QX#eV)&o_;P*+ ze}-@8Kk<`-AVdf@VU*A)JS^;!h0020Yh@3~&d5vUqvW&X*T`>`KPvxDQLdP(xJ$81 zab9UrrYW11Yn2Zuw<-51kEwL3G*yjit!h_@CZvDJ#E@%4Hif(xvNPnMT2PzR3Fvmx-lTm1N|3ZJpU@-JHR2l9t>@$`cTaBBHFB`uzMVRtTGff*zKbe*0B=aD1v-wu@ z^X9M2eoL06#`2KmCu@>*k@XGhSCNsC<&mwC4@G_vc`7P8YE;zbs9&OUqBlhEj>(VN z6tmx!WSePw(sm+N85gf39~z$!KRN!6_?`9$`yhL({bBn~ z`)>PLhsiO_@s#6~v)DP!x!U=t^DE~;=XsaKmE-@GZF0Tg`pET->yXQz5Rs6Q zP@XU~VM)S$3C|~NPi#tDo_JH@=EPlzes`&RmHQs|i|$?SeICIx%+u_7&a=yNEJ>5( z#-}Ff9{NzG0zWt@ypG7CWNO3`Ekm=VcPR8mtIDBwSbZuhKk3)tD1JQdaX!lbfE~I}tSm76mxNkf+EfH}blCUXM%f{p!u=H)EEac`1v(M;=ze*Ymeg zM!~`uGkSbpE%%Dw(_+kboBM8{?=rsr#*G_qqywZ0pos~$p{#`5|7Cukc}XKGjWYVFljFrN!)^U@!ly?D;s_%~VyZEF^OyxF-q8M54* zJfFv_qNhN5J9jvT4;fhDNcW$UEsq&FQ~9)f(1fC~RYlj-%a%uvu9y9re=FEx(_DIe zg1%qofw5KUs)6nZohmQQ921!^tZ?MQkTD~bqXuYWz^{UN0|DU?$jA(ddRP$~2ubDU zl<;ESi)UM6xk<|-cq(_gjV|t0C{32^JbIYpb}BDj&eyGsmq#dv^t5Ca@(6Wh0nRh0 z2=Yn(5Th|JQc&{{eQflP7Zz#m@{qr(R?24NR1~JuIk&vf-y%FUce&AM(H9%C^+t<7 z@`3`-b$JMVYM{@Lp-&s)4fEyr+&OvPY^w@FhlG1^Nvkr4GlS=WaNKZdZXJ2gg6K%I zHasace{uQsx?!ea9{*eA_5F{zQymSa=7;Y|ux*_u+oW*YiWV;1;Q!S&_^IroI0|c= zY>u54Z7yhWlC4QrhUdn>G(Hv2VUfNZ1N1CF`7XC{;jB5MCKb$?_0(D(F>|s1=;~Ki z!XSBI2g=8yJovD>@(j5-9(>F!aDMN`M~Ew0AGJMS!Pbj>SYxw4#ScSBY_G)zPr zS-xcPuKio|TVj^Sh~Hb5Z^3_*RRt!nJ?tfTvFLqT?wT+v`c3Pg$uHgi8o_e0cexL_ zCi00yz~c5ci~rrt5D}h*;G62=8F}t|Z$`cO67C0f1x5>fKs)YRVQp2b_`#J=$i|^G z{5^0=m#CnGL13*qRB1aMufDdv{hLspyzG9qY zUP0?OnD0oxL)ZJ!-hBt%awqTIA}>j9+e`GHN1f5A14~04lo$W!=D6WMN=QiZDQGW3 zu5t*5wu1^)W{(h0*gXTCG2wA(3i&f3|GX-`rZv&z>6<>(#8nABhr1MUs>c2q(XOO8 zTkG1o(S!4BsabKE;Y6bfG8qMYsggt}X25Cl2%pa@ot;XRD<_X!*`!qAAWv2avZr}P zOll8j%uIciJIHqXCq2A0rD^f~YKvYL+B3U6?y8jH_{8XmizY9d zYD(C7)fC``h=f7FYldzeqFj^$qM;-p#7Gy9_Wx?iUT1mM^hDVvZTxuM$joV`Y3A2& zzpc_=RvBPrGZHtY`k&u;yCiEp_^5#1(Pua2Wy8EhGK;tr2H}+1d6E!SN|ndxP&rN& zKT!9?)p2u{2+#1OIDJAvQe1>9I$XGG1b^A;|DJD7uNl91^Smm(GE^24o8-%kO|ph^ z3t#rQXiGNW8v**`(MzV7(4iL!zLKsw$?%yeEKt;I*Q3%FAMs>^ZQ>%?bDTS)mGLFnk&t~6PGXbewv?DEkOwPEGOK)FXrHDyPkMqX4 z(&Cc^$a5^@IS>59?;J1^pTp-+L83f&w_)>Q|96qREqu`(mTS*l_vD0i{=juWRu_WeW%!0U9!l~&HDUaY<9>+})g3BXCY{-vHP-*P`^Ny9hi+Ehz1D`F8cgOSO zq_{p;jYxGCq$?E8p7`QPuKY~7%t>E7blmNu9P+3hp4nGV7@l69XqLwmj2>8?vL)J? z6z5RK(6_*K(T?O;D}Lcy2ETQJ&MMI9U|vzyUM1R;pg@&QH|QnfB%hF4nf7NL!gfN+ zu4rXqx)MTed}bkp9Ity|zHQRNPbDF%+%}T6LU_SomMJum2`LVe^TK-;Pm2Gnas6~Y zDkd>4-fP2`6WIo6GQfEvc>q!j<_;9?K1CEVQzW_>u}EP0zyz_3l7)6eI0ON2trX=x zN2Y;D#}B^*{lx|T5Gn;V#X?1*FHsfFdB7iU6rxQ2Tlm1Rch_xQw|p63TG()*g8y5> z3(pZhg2j)41QsrS4_`iUIYA8gyutsXiSK>o-L=b>uiFZk zJwR+Zx*&T(tr{Gg8J}$r z30(lj`J3*kE%hU^M`U}P5td$=1(xETE~7EpZ+HoKtbsb&B8;(=p%*Cmj4#hluBuWx zJxZ4o_UFs<`p8kmSSRUK%pZ`*&~35Bwcy$ZU86!G-7n!zt4cSi-)cVPo!pdRubT&r z>oYbhYs_Xrh|5S3_;c%K$Jf?zo6XaE^ZM6+U3YWhtQfVu&iUvId{%aJnq0Bsk>K zPi9ZM?asQpk_HVP)NAnoqZ8?lB{Iq=?=!J~VW>*B&2{7KWmg^9cil>3cxjk!^CJmv zTQU;@yCAy<;CCwWJgx5~neFFu$v7)T<4M0o1fMzeX$ zwT}x1{|)(RPlP9C!=4FVs}$o%W~$&vFt)W-3$hgd411p4wb<=Unmus#A?R z$jQAfu?{lu??0~Q$5Q>rb>}VTg{K~Dx=ZpGis_F+M(_uYMEMe;$%B_WR1t#Nl7?@V|g0pD&|U0Yk*2oAeL z-hi=XzO!96Vy@v(xny2G&%f3@+&A3J7trZe{*R3t{fkllGgInk@>2*%2cv|F|MzU0wX785_fl6?R*UIm(QVm2$%L5u#m@e1GkvQw9L=0M&ON zRe$6@_{*7le;YMPc*=jAYyF4)wP&Wb*Wt%e2R%9H5eX4L?vJnDHQ*0$bXMYB_8Xof z(vr@MUZaC}m*Mlto7KE3Q+^vCU%j(f{^IeT3P8VwH$o0C`}<=Ivt8#ep*|8El3hIE zaCzLB{L{CppIL89d%ODiHDStd;i*7A_qB~UWeJT&J%N$_-x6K~UNO&a_Yy%=b!QtM zOeCl&v?ac_CV$?oiLYLd@7+Dz?M@<{&xCWulead8`_Ddc>kKHG6dsn4O@1QcBiY>w zIyH#uBBvdV7y^itEx7jWtmX|v>lB)mQ}0ePPK-;C2{BQ^Q!@vLC5>OiV^<|an$2+{ z?URKqpxs8++v(v-#7UJUyM!a{p$O~A;Fo5^@z(16c^fqf?N#;Rv&+J@*0_?2x;n+g zri-{bZDfIe-!j)eG@))&e7Z?quTh()78|Y~*NsDJw{?)`o#0O#Ell*~q;jYcq0R)+ zS;Ak4003;t_i6uNc?yzUr|17OcAeAxs^Ts(R-|RR%D!vM;WRnjP;)qo*J=s zMyMjDVM1|evN3}nZnRm91}nq~yU_sOa`=_^sLdX4ll||&}v=!%A6%D$B(m` zjF#Bw*{@1_SPD}K8K;LsH zhnyD~Ba9NsHX5@|r}N1AeAb62#}C!?+1W>T*Q(UH*S=^l@Lm2)q@b>W{8NA0?8P%h zUXck2A4oXiKyVQ+|L2@<3g!R#!2bzcVhn%04GxOF9Oj1dP>y^_DkqjDXS#9x*QxS5 zzD$wdzSaNpkp$(nsJD_|O$Xd*fFC&w54;aNyHH>BB`)(?(WN5~cRjY3t2h2$E?>0w z*h44B$oXvE_vxqoulqM)77uvSQ14yTL)qtiZ{nw1$sgUj*I(tQ zDI?(d8RZvA<my#ouQtz`(_0C9BIB(M@MC(o3w0RX_F~gIqM!p-DmnaVni}fbU&2KH3 zo?TQ?RO=7uV!|7(_6%oQQ(3gb6W@Qh+!mJby>t1%n<(3$bkwcya;F%6ytTYngLr=yEKNEtY%;1-lrD6U5#3pV_N{S*mPRvXX ziR+U+a_ZY%czf&af0uBj|DgYmK9HjtGYW}ygD>Dwig(4}FbcU zuRYD@};{T6a?(UPOcu8}6i?$I-9(VXMr8PS?MC+lJyK8?4x zskhql(%4k3GszTz0WUdUWLo6YG(PdKCQU!yu%YyJOJk@!Tpg*l%QyJv4;xPM473Hx zg}$PF!lPAQQW+#c>O!{wm=F!fJTti1E5tqO7 zzC`1yUQxHqfq_GyQK3Qc%Ft^d%ZcS#GM=9inQ51&Z>`zp)nByj*39aYp;M zz(Rl58(gv06~Pq8YI!zb2K#YFajf>^cPqB4x0<%{KA%8|B%$ozZv z?Yi;T@+6Qp?~McgUv7?<_~gVV;uhsER1UwyF)tbE0;5+BLkIg-Q4i3%*oDAYP4E#< z$*?BH%hKQOe`}~|OhK)^XHCCKeQ1c`ZRtKA5ET^{<$s+ADr0>^hV<`gX)W(Nzx^)B zJ4BSXn%XOeu@he>s&;8_>wlZN_xyeX2|BN|*hts_JF0(A)BN(Hr6gza|AC-gj4@rt zOQhUNbdO+gi{QEe2}=g)7p!>lAKFDLz6x^|q$t9|96i%RK3+IEGk^Z{>z|u{OHroN z6F*?MJTfsk2k-;O0s|4lg7B$Du(roA1kej&*b7^yZVv6Uxi&9)a(!Qop^KltAUxlz zU)}W9+U(+ln8n>4oOl={lwnS`lLyHGTs}C&1vqpCvGrxMQb(6pZ*w4AzS9NC%S&s# zMT5)Q2LDo0GpaidQRe(S_@MCxUk>`aqKQMtV)nuZ$XuovS;kxaZw=FooLi#jS@sm0 z#g9p`N=tFC9P?<>8;7i|fB}!CeoQXFm`!mqX-rI<7@+YJX=;GF+|=6_tg4544=EZm zrfBts(4XZG@E&pF3rCMB?2$ZtTFBUC{04(rk!06v)y5+4FYFmqw; zFl%~m;B^N6;7bvd{e&lQzzn1Y_>C2SMbl#eBOo!AKdV+ zIa$+W$tj|)4B$k9el)Mt8gW5vB&6(B93#l35%2ciiqJPl7p}2rHM+Qrh5C}2{RSrL zwpp!W2tfOMXS7y5J47Bfe0cw!My{{<=LRoqlM}6&xex{c2aVoHd68`KW6s5+=)Ej_0XE z_0gGqtP4I%4yk|VsQ1>f{hnMA(VrjlpXO?RV(k*5H*f@B$50=!5_y!Ej-r3{tiLGa z*Jt(o*^uA1mhiHrh5lC{gRnp~Ux@t2&amWz`WrNesdA!U<5FeAT9ARL&}TsIoZ}7) zi_MkAg-q-@JhZ>sW31+5jpd=kb1Lmgdxpl^zQ`*mOWt0m9%bDUkyzFv)9`6xFee`# z=*j*o#WE{q*Z#X`(R;GnLFbpiT`J+mcsr~`3}2*e6}2AJ3H70+!ElgsfvJKph3G<( zV>NMJk&0oU!cA20DL=b`P$->Q8W}Y-#`YB`N%^=A>~pMnc|&O8n=sxF{=`NC=>|-Z zk}9W48EdfGN^3UM7spx*me}H%8){2!Z(L(GcuGBb%QY4~&SFjx_%<+;@e%;ouVgL85Gh6@s%h$WL(#*CYM z-I5iNQwPiV>TbEt~*>=j*TR+J-S);k$Ers_la2jVdECm4{;bY5%ID1=;0d| zf+rep9EP#i3Gf$;RQWtK_l0jOwEnHFg%D9d-uud(MB7G!1cQBzy`RL?7w zWLW^@Kf^v?MkH+y9g+hPH*~m;y%>I{X<5YJ31X+>?okof+5Z{-y8Y8VlQJj$ym#-< zIPDR6fc|+XV0CHZjo!yLc{UkwaKl$K!uQu{$oDt&zO}0r71XliZOk0Y%&`& ztcabM55Z8R6jNbNG;Bw`>kMu{n6<*vaxw&uQYk#Ns$j&3f*IE6?Bt>2hxT?P2@fUO z$_hq|EbvCgWMwA}nUFi7|Ff1LPSckCDD~ynO9q^Ef_h-oNSB8 zOAO-%i#6HecBT%F*DU-m#e@>v@n4`C>)XarATbW z@!TEeJKn<~OxU<_Bk?O^$*|YM;8%s{mPzCPIt<6^luW6^G?>m!on~<$7%d2Lt@bhZ zBJPzYS59x=&fPmc@gLr_$$!Tk{jqaZaOJvOQR--C)09g6h&iDsvVFV%+fRgR z@AdzA@4Z}gum8>7Lu<#6Hpe(zQLQizn`!8jsiOQ#uy*H8&|{%dN`pHGc1&F%Rc908 zQF_EKv*^y$u0ihevTbFxv2xRROQq{iSZ3D@hxFQo-7zo+Mr z9HlI*Fu61&Qj?I<&!E1i9A(4x#9M{1iC-t|ft7%_TnE3-|28icHdT_Wim)bPPS9>h zPsp@PN_WuzR}ZLPS~;_CdVEf5JYQdVRo%cv^`E6=+f#DToC`Ecj{XE$A6itjP!5{e zg`7o?7Q)0C4F9ezhArCVT72u4FTZJdQ`7P$qA8z0%&(RuP^^Qz(O%_YNJ*M0K*ytF z4oKzYWBq#tg?C|Myh;}>2vZ!oJ}LUVlJOB<%?M7fcKAXw^-=Mmx=3OC*b-fC zNn%WoNhOw|KK!g&r%@SWBkiRYL!v3dTasO#t1&L>jm(ws#$$}YgEo@J2*_J+ThMen z7fNo%%DKRqz!aehc6o6wq@o!EG)5h{(BQ7QQ0`cH*tRK`%7x0+q3)O=!hIddkVr!Y z@Jv9AgjS3gD-#E?Xvh^~Y#Fyr=ec2}bE@VHnp0IUq=vsxbKB51Xt0g(&B82+2N&DQ z&he#WFBGr$VKQhd&1-oAy|^oIl*XB@zBu$4gW{wpN)53mNtxtKcN#*>ja(7w*>HcJ zD#{btYhZ{%<}{zg$+4{BDmGkcbC1 zzXP(R{v+iEU3fsuz}Pgb*N3rz;QY7b3p`8WE~K2eTRKiqjJf^xu;|K&DPa>5hll91 zLeish!*VsX+!tirk6fjPRs(D^16(xK_;o7>3!h^_*w?*`+wzcw1@~Ig9%(9vDCkG#0}#FIi#o= z89ya#VizHX)$$FOb5Z}@qEwfUPP#s^L#RUFB*sP5umN$6mnWxKhG8sKgiP#KVG)Hi zi9+K8n)ZoOc}~yF_~>DnKfQadd)!rgEnGzK4$n?>YAwBD3Q{mrIyaG5H`nt!#e7mG z%`M87p?%g+f1qP_k;V}*Y~E#xaXpPH*0#?x3auDk^dH7#V^5K?lVum!~@=S1-SB`GRXpayw|5fAh_Q{r~Jj%VNNZq8Q!@ zhej~aA0>^Vzu|IrpFi~tQ;#ol%!y7k4p)yab~HpKj_iQm)N@Qy5)S`=X=;_pgECtI z9OP}t{5r89W(2wJWcp!bL~($&hcYALTWH=Pjb~ z&-OVi)s<&@jh70|e>MHP{DRPZ@pP~_y(vxy`+vMBu46m}1h>kTLsPiwI-@Hi3%|s) z?x*75xj45g45T6Sb{NYp0fVgb5-{o|6Q}uMp_1&o9R|?>>+VK}WZ{>9@}p$tlKh2% zuyMpRiJxoRE$?DTKJO(!z1yCc2l=A(T#)8-;rl_^bk69CvbkVd_i>U-aBf!^-#)h> z!uaKqFo>@UU}TY8I$%IB5)B8$`l4LA&>+d>0thciGUV9*>^_5R#M-Lvv8wx=viYJ|)peGc zzZwizqFki;X2_T3o0GeG>lJ34#YvhYq?S%^_sk_jz2zqd^ zyo>cfi!QtC{BMw?yvPuGU6HyeLCa|S;X(@KK{>4u+p{DZ)$NSyoszmFO(eo@%Hnh3 zSr1=G32(sNt{M|+Hnz>}P6$7X77=|g7ALs)KKL??24N%!gFqMnT0P|M)*18f9&%U9 zjQMfn*Q^=;kAH~YqI~6nH-#^R6Bx^hr(77L5g1bxbxmuFF?u3$;W4U=a9pR-Diix% zzPYoj2hjS8g1q86(+1NTi^780kz1_MSY5Gon>C&mS@c;kU@on)u#Q|gu!$C0MDfR- zlY1DovlQm`K- zN4X?ysa@)XjlAPBbW1*RDd-83Q(PLp*j`ESS3oXeK6WJx7=62VZ2}({4AYmyA+}@E zIsnLCEv_c-SP3BdcGu+q7LrBhq5$ED7$c;%nbyi_XjXw@F;>RVcv~u`U{5O(U3)*R z{#1L<(3$IJ-s3UUnVhOfqwrMS%)zrZ@u=%!^CK}t%2@*TOI(AwQrI808syPd8oV^q z$O@qOFrY&1hIAIEU8WVAij9xfUt65eJ2yS&j;l({wuAytyiFeyn-T9#kq_U7*^AkY zrS7@YObY!l@0``Q7FMJz$>{0u#J16D0BLT22l@zh8ebDBE-R~aR(NIoU7Q#ET@qipsG$h?D`LNG@AUNP zMlfQXyo=4nqi2mV#VcAJqh8@by-5Y`bK@1Uf88b?Y1C>UwuLEjPexBr^>Fyd}=0E$@f7p z2`=A|Mgpzk$Wr?<59BIXoGh*Lpy^6XBIK!pi zRJ>yi$kkebcJ#)Kf)dP=~xfK3zMwTF(!F=wbLmr49Sv(*u<3~Wo1j( zd#sPRJ@IL^;k4Hyg60Br=nqQkZgPW^UvcHlrTT$aT8`r%(7h9Q;}zED_%ko+1ESA_ zIf!D6eMTcU5Od&e;_M<#w-_Q-f4y`@Pr)%7gKU>xKO=_4^X-dhV3S>G2;;ir*pS!I#A!Oo=gLDz34)!UCcQDe#3}K@Jr1Ug{JC-pkRU zi#W`{h+Y#;QC^D@Gm#|TY{9dQJj$0<(S2JV~ovHyPt`s z*}8pe#n!7xzdX=e%D-r$x29`3nkf{^^%XOUKyNXZ66eKNp`5rELsXs%17JpPqa>#= z0LF+rdI+r;)FYn<+_fTHab-W%pyI^no#4Ta@>6jZiZ-@o@jx+%7MK?Ds}z20Z|!M5 z-RJhGFlp*3;o@{DB^&LVA%nq9oLj?`yH+NPxO1iuRpA}xN)i_J@C?c<89YHI(>>l| zuV41DGdELVcIKza&HNLi(Ok1i6Pq0Gb-A?iY<-NwYb$$hBG%5$+pw^RHqYFqrT}mo zb+bShB#3<=JCH#k`?<_Yo{Rc8ms;E7f9s;g>JrO+ggza;T*)b* z$%-zs?ucv1wz~3Yq49mO#qG)?StRf-P(!_kxo_*ZfoggWGNOGqgmg4%$j(Isr+mOTsVxWlDZM_#yfm_veLCrn5 z(WwExbE7}KD`p937_LNrrJYfjBoO^oaEr5w2bUR^#p8Huxqrv9y~|KC zBJf{fh|m-L(pZ`!k@}?)#lem#QH_47578ED9kPpsSrZ2i5KX05kL-zqE3rbY&^u1I zQtM4$zEYc)qSW}N7R;hmYWhCYd(FE3IX&+?_c2X!-^Vnbl(FQC;@T$YOtj3uSluLs zyelnnnk9w8%dT?@#>oF0oD|@!SHdZm!s_L5it)A!pETojCo!Mjdd;@P9uo&tDY$;cbFoGqmz63v z$Mr~&zaYC#T$df=4!dS`$tsx>&BNW%*jh<#gG^d)Cem!8wM3Vu8a8n;;qgJaTtNF7 zl7+Zdmz&X)B0y5>O$|4Gad-gZXVIU>nmD5hOXIP(Tq}6Zj{fD^^5k7H)3nw0qy9v0 zchoz0;%n*k>H8i9omi`euLjVGb4NYwC>T&2QIfIEQL62ex0T1n)yMLIzr@$a`InQg zVbnw(0$hfUScG});K%F`mu%7mztrQVktf>GV=%t9Mp)H#Gg;e`OYZHt?&?Qq65*i@ zwY0P6X<3+b0>{XsWVfNe;K68O@6Na^^%N)pxNt?dw3)13p}}^kGuM>jV|AYaHRvdC ze!*(->AeSzyI`Fx|2dd$iD5G}b>>)=tjikm)YR_lXLTJ(Al`L=9A-JjYf^$e@%EQU zTxk~#$J93l^8R8o4bQ{8;OOP|{f$jE!ksq{9!wh~u(KKTBtq|LwDr`63BsU# z1pUQ*1PBT6e+;S-l+KL=*awc)IWqKSCu`#}EmnE1xRv0=!Fk$fFMcYpp0}sv#la6W zVq;b`pD*nsz-8hFeSRI0b9_q1mU6YaiqM_xK?tgqnUTHzqdKo=JcGR*HXejqry4-e2Dqj?;#k>4^a z)(l~5DD5?|LRe*e%Jl|wQf!hcH)HC^G*4()OoS~W6+ssK;yqry`NMc;8QIW9xwreG zTukWQky8t_UPuUqtmM$TC{bE|5?nSkoSG9_JG6n?5UeeN6a9q93$$L~@i|qw;_4o( z8p10>@D2=D1poH+#0t%Tv>p%h-{ObFhY7ERs2$S`{YLB^8ah4U>hDJsS=5uWf1UOV z!NYnsAwBp`4%+Kv@rPUZ$#*x?GdFuz_Ce<}*?-QrSY#WdXIXeRmm0BHv;kTx;XO)k z`Y0U5N8JC~zeJhf9cCkVbbA?k(~j#lX{S6tExr+ia9sJFAp$GsBLtHOgIX9`!RL|| z^0};&Bdu>nkBYcUI`I*&-T%_R=m2toa0`ZxdJreD)6%pqMC5cK=3f#)0@1_265nA0 zeBN&Lf-f`S!Fs46)}nR7Q!wU1>w(agN$*!td1S6rpP4=mxiJghJ#XZz@HVG+-^Ewk zx1znA3k(+qpbjz%AL`_aUuZm49<%u6+Wwj8Bll;f9k&9&hn~+&pKi3E_H`@U;jFw4 zS6c}dTg{$;uZewZto0Iy)1B_s3vL>H_1aOqXxRKwC1V>#q8&rOQMN>U$4YQ_yU(it zhjh^UR(MYP*Gu$|bf{vvfq;zO{n+^~plUW3e0J`X#>%huF0k=`^*$i1%$1g^cYC)` zd+RB^tRVNo7Xo#AXON)!t9J(NyRd$@7Ye<0!TW;z*!|hq<()x(>jee6zEEh>6`qj{ zX^m^E>9W0K)M!@!BrmWlnMABnPhrxGrKRdKuQAP}o)6*nTk zxTw&9Y>=iv+IMt+&>YSuhc~Az;mewQ??=k3-uEp@lFwcrFBgVPo$BAoH~jL8znL5T zhq)2Fod@7AvBo}KTJLVfOk%q+NSPJnC9Y>f+aSHzKqaH4%T}J|-(d-B7$PVQ?=Qt} zZJAQLs3pwe|3uR}%qY`gN;IWZnaF!QU>Z3o)RK1f)3i1qtzo+9fzeTYSK1roiP^o9 z{eNOfOHVU+qp==(Z%%Y@oD8#4R*cGt6G&ZOd4*9PDaVwEp@E)Fv*Jrl;U3!t^F7m- z3$eO?F0$1ud$Ze%NR<5T<`vP=Q)Aql7EdxLHQVQ|Yns^c3X)_f7GemTz!$yqMnRrR zyJo${Fl?GFXnQ%FXRlkg{}Y}xNf_StG=IiFmF%WCaJTGV!nb1F32K9uc>ZU8lx#@U z{E1&qd}-nrg6H|?+ggS7ZLNd@`*H(!3)@i#(M{p-aT%28Fk7`i)6&+g=gA)#g_%+Q zcOGctys35p_wcB-Ps_hN57XrsL;PGQ;oUlpPB?~vV4VH(?6xI-)e4BsReJc)4obLZvUl6V-HVAK>PvPhg$Y8${WP1J` za(s{URv2+dLa~gtKa%{V&8xJrl-|h&gLZq|E-P{dTJ%Xn;I5V9dW~?{%<<8BM@rdv zA?%vU=Hi^GS64k;lIkcNrVqF0{%p?~>~;6@*`noVt5@XY+w{>9A=;4@I%VjDIrH*+ zj(xw^$c(X0W7ede?#hZ(yc~fP!vpUHlvp2ql-hQTDPVuMLE2cOk_i#qIxKXQ!kHF9 zJ84EMoax~c&z2?gfqYXnw$S)r@Xwf3K)OB6(uJ9rXE)NAod>HO5vRNDUJ;kTUvN*Y zx5SD&T5MMAZ7Ht1VMeJf1bbUbr{6FOyIl0RN4s2N)1_T5I_ou79qn>?|H54_*wak5 zg&1Rmexx|zfM+2%;D8_3k2E|n=%9i3={u+INW)`;elhspE}cuSo*6L$U&A2>f!=z9 zcO->CTezaN-ahHgHrOCd`)Oo;qe%!i`tRkVmz!GG&0m*=Nm8n(!B=Uwdcn8Xgo*X^ zZND4&bpI1Zet7ws*0q^g>*h=K9H=K3{Q-FqcBy-fGNa1syXUI!)-C;Bvv%NGY!@2q zf6V`wkh^>LZmJ`rJ+#7q#XYnxlC;$S?Uw#_?4wOY4D6TK`(WQ&Z&@kV&1^lt)tIe5*nIo=+;hU|Io;5Ek7_}#&4%-iw( z!D|KH!;9U=A{Zq`-7OvwUTc_1 zl@`1XXE%jR4_-&GXmtwghs&W+_971HnzK-D3SMJOjk|-_GBybBp_R(W@gC^6gVzd_ zKNGxG;+@H%!D|((6nY1*L-5|-=YrR2Tz?(B4n=>s9d8&*Qoa+suVG0lA$T3m?W#V( z>j;(;auREr=i;5)i&-2~; zA)d}g;cgSF6>BVH^vM9U?qynoWikMho+YClvZG`@FwMl(2-I)E(aaX$y9Rg4QLa&> zV+gB84TA3koikBq0iHR5h4r1=w79vxZf2`JX?n6fJF7^rl5!CWT+ z@4&^xdyJK`IiO`an+;k9fVOJN)lJbvXeQpjszT`(?pVxptwm zuFMqJMMCUd(G`enccnJH3*c^4ij~vF%I&1~fE2UD59^VUm6i3sh0~R-dT7!P+1MeW zW}IuFy9S(_MY+voGw|ecA|kPq{O$EE_G)`;b9GH^Lv{0P``j7bw2ESvgV0T23|r%B zp`cb6Of%3{fQ(jr>hYju^O@FUg`S?#o%2U6kN#5f1qb(M5743$#O`5_{wu zA3o!gC4?gIf_0&S@QO2B1Xbm zhtkCR<>m1~H(ksC#s<`$gZS}*h@D~ssnae-AA&=0>0T{cgm0p!T^@v;VhEL(k86ro zc2Nf;2Z^2xz$Gtf!I>o5g8OwSFa07PC+rma$dHH|DkIS%;U-8eVgzi&xf&%&R^$P5 zM7lfaA?Z;B?TUwDUWe5uRm`n!O_q$mv36lMo440B&uy)3nK!>S!#-+et-YnSxwf$m zK@7feaagc7RL`!p*SFg1Yig_K*k{1hXChF}piRqCpehW?E+{&0_e2*#`?xOduw+(_DgiksBWmAvv@xtX`O4I-vT-s?X9(ofSBl* zj#yjYIDhW^7JD;j0Gy2d16o`5*VMMu*EQnQT3tWKKCKpLYFhvWwQK5Inra(cs;AAV zwO7xXvsi>v-MH8;)v0ZU1pjW+!!Fez{6AMGCznD+XTvoT<}w4OwGgI2j!))71}HTe z6bPuvBZHogYcdLoQSI(A5@tCFzlR1*t80@u2$0APB?#1%juC5<@si2g(OhSUhZKG; zg}0rWYBZ;kk$0MIXTwZkyd2AjhT}}JliDUq4_ZN00hSnLf`{p#yB@#Ei864I!%zy) z3`fcY{pIum#Zfa6(#2+WctZ+FssgxV^fyz&^9JwW%O8vt@d7eN$^o zMoayijJeHqnM2D#(f^8#D*;4bfCbLrc#{>2`R0XR=Wv7Olw=qSRbXsUg`Th)y^S#R zA;QtO)M7+ekNF=XRv(zrr?FxjGzxw881x%sF$WtD;X9D|xG?{li1AAga zFdG6@4TGXbu#sr9M#H4WvMM%?jb{_sL^g>{W>eTyR?P*B=d5DavHxM4*e@8J+rZYb zd)Z^`AueNUxty(J8@Ylj*$wP=wuY?AwI9$^1w|7Gv7rw}KnvzuV{ zAHsCsM@0REeZ)Ry+u5&hn$Oq{_9=TB26T+w%)Vf|*yqsKZ|pF;p3Q=R%|;xa14F+L zW;PF|*9^0p4+C5PXFG^?U=AY&yOrI>Uf~)Zju%5{xlT2|u|6xSPgd|; zrk=Y1#yov)bFFlzG&^|qDjVu+YUZ{EfA*C3o8LT_eq{H^&J)ksS>m}ozr37&mzQSs z2%fX$Lq-o8B=j92+8F*a1dZ_r`z0J#5jY}YKh$HT_Zich3$cTjY*s8qW#|ZnEoCsF ztbEWY7BQ!~wGp+b925U?MduaWlFDbnvbvU!?kG>s+iQsMXV*42(&$eRqdbT`1XE?% zV#)E4?H=^DZF~V=#h>Fp2^OISe-WWoSS{1YhR9aQw#j~xXUm7-FCx4w|3)!Lu@j%~ zlyS;A_*)2Dlt)yjCj4E4H2hVA zrQrwh7Y!yyydJR|f6HK&_H|vTu1dE_cSc{TAEs~AFVb()-=p7Vh&03*Y7EaAHO6w| zGsag9k;adVyN%~f0yp4WV{)6)z>zk9dD{TqgB|#Sr3YST6@lN`n!sDIvQ*ev6#P2@ zchWEh<_mnqdIk=$g1~XsEAT5T41B8nh-SFo@Y#7Rq0j?^{yG=&D`yuy71BU@w z2dc7Q1sas-4a%m1f-vCN4fsDIZYbdUO8CA7-fx2cham!(LEnd{n}@my;7AeJ3~oLJ zH=l!>AHc~QYyjflU{Es-RE!74iI_S3D)1uvI`E_@gOfoSY)7r1QR^^da1=GSK?X-4 zgCnSMnoSaAaR_nH5Kx1vPr>;qQ1&IbHh^m#IJSY~AHne+aQqXi4EzFakAT}B!R=8% zAo;%mZhs1Ln+A#Y1eb-V!9k-2_LhL(JyEg{wbpkgKW>z<&eAn*-p{SPaFM0x{n8S0dyd%a2d6gZCKPRn26qgAnE)L~5Y7Z4oCbvbfUr-5Fai2n1BlN+9)$NO zYJH1Z2T_YSK7v~9wo0{jqSo)=`Y3Q82ksNVeH;+>f$~$-nt>{J;7{o4EM)R0WO4>F z`4jMyMXNEuQ+@!B4}jxyQKKcW-!e$69Q7-39)|N6z^p>e3E*N9?yU)Ig_Mp1N-sdk zWpAU53Q$ggLeii_VIg!&E zK_hC=M}PH02a4Q~eL8UD!3Ij;UAh*tb6u%3k#zXl8boF#%LHz4JKD_`JUSn+X4 z?Jd~Tc1ScFdVLy_djmQ>5tP|kP;(a490C;wK*d>5@g1o60kJ>(7>x={E{S2c105Z9&-8(cJ&8nI0pQOfuCX^+12N;tCOJNm`HKRCdJnR&t@+V*&1633e_JNvHfOQ72$gfXB8fT#!3FcUwNh%E}`wSu^ zGB{9Z0KF9FeR$FnycOV{phXK+U#GfianE*SP1WXh^)*x~|iu+IF`7_Y}vq<{i#&sy5?gqp|fN~DC z&x(@hw9f-59f#5yWRq%8tfA}^yU}%kYe4%Ii+e8EYXV?PtEs7OxP?V17NNryUTA1FDU>Q849MY+PH%KkOZ=m2iP(W?T zpP=9*u!lfWhk^MmVBQVPA&?eDq+DPx0rua3-H0|?jZzx$ro$b{Pfq~bVU*DU(*a=G z2TTXL_~;+-j$^=fJQ&~i!!v#aw%tMB{1q4pQ#dg70u~J{Pz_(vz)Q98O&$0%!1rQ7 zzf1Iw*MOPY;OBvvB7_rs>VbU=u)hZETY&utczqwz{uI2v3<^$yf?c5C6#Vmd@VyUI zP#d}n($|8211Q=KihgBR<5&}T7*XR#Q1%jJp@l4tfx>uDSkC@~+~jS*{SaC`fPM$X ztTUj9;v~iL)1crCC^!xZsBNPt{URLj{wupfMx|WJ0uz=S~W?NbcdJ&trx%| z3Pp+j28h1_;vwWKacGgtz!SCLl&>5H)T1I)sSP-W{DrLNw=Ox116Vx3qX0()5=nFhEF&;~^fiqcZ6`*{%3H-PjbBFJxmwgq$_1;nob5fX#^$3Yk4 zah?EaO$7gwa6JXQO+|T%G+%?x1JDOW&qKhnA6QO_QPUTA4|IM7=sy5Dp^Cg1@36YE^14J`PG`C!l`|nvVd(^Prh>kuSSQ z^TvZ z=0@C*GO67`E-4TD4EPVhY9aymxF~7LppK&CX~^VjP)&K)?x0NG1;uBBQtqn5KcT-r zpgW@UFsM8OXulvkH^4%CknS^x&H}J_#48;%a1tCCpoK%wzzI-)7+N5V)RrEC)G6*C z6n%>_nlYfL0T?KUI)L&L7{;MbrC$2lKk?`*X7u23fS-#X>zXnbY zfsGS{TzwBHe*ntMfN};9FWd`1wM)ndjaVi2yHXnz9QX|V;PKKEWop0Yd1X2{w~Iv@~t z)Ur`_cV2`*zH$I|6d7#6jt0F9Su3b3K(<#Xw#w9gke5-9+YY;}K)Z1ibQ})0U?-qU zib5yQdXdbI2iuJ!@H;bNN-}I*0iU2K>cd&e%l8GX<9kT{BryCA4Cqy21aL4iys`LQ zg<~A(r&gC*qOZkhL0L9g9LYchcqhT{Z-7O8-rcAljrzr6dAx57)16K#Z5%qKSqlckEZ^A56%Eeqo4=*^@#a@4cO&kLJ z!+=e_h!ddtBf#DcYLGRFn(f*<-3e_<(YZZGr*Q~swax{jz)3)%o-t+qzX1yMeNKZa zYNg2gkHaI+itUNi&(@-Sz?&|RgL)`qgp53(ntI;p$l2`3+M+PR8jfrt9OE#d;4u{A ztKk@74M$eyLRJ>ew&3^*$JelfZ_&Pdhw}ksh!KDs2guQ=6Ah>tC=(B;2IPa;fb0Q; z6hKHpO&e-Pp{5Nr)5R9_IAldR1+{A@f;k20;)fuoUxU+q;Phv3`esmGKfrDdgJa6& zDE@TKDJbSqPH{-Im#-lqic12tse+c|_|VApIDC(X?k9@WYZ2KJfQ3eEs0GCvI}ux{ zUy*=ZDjnGe^;_D<#%MIg3W(2O@J|W^*xf)U~q24uQo`f;&5$J7O37|;0^fn#mI3JN-V~w zA4ZF>Mh?6Jp9=O*SYLnOc@7$U2P42kFlPN*FDx;`0z=ibGw!Elt^Hz_?}gj@`rGm!bV2(JXAM{Z?ZC8P*27JF!sbj6oMgC4YofBc7W8J_)Kh%?p_j2eXegwXQ z-@zPk@w#veKChF`d>2b(XB}0;s2IB*J&`;23+?k3$xaK+*#TT$<;YQ{n7@529I!hAnVNvW0*33g#I1jP!;a{^1p`Ast z-z(<0X9GFP|U6c_9lG zvRS_H3@a7tScYOft_SUVg>;r6RM<~*GxHHhbw_Dw<&^G5rLTuF!hVZjGyEsIsOpbhQ|IV=)w+|f6J|BTPROwVgrme2{FFczhV z#Mm9|KXaS?H~yLZJWppq+{otfbo>%g5&2HMzwA(aZQmoxg5)sbAUTXYz-On6av)iZJla_? zK6{C>AbAWQB#WhhJCCJ^d?(&tb||i66GT}+4kU}=gF8T84$xHx`zf45!2gJgav)iZ zJfN%i>?+EF4EGz*j&C0c4G&8Pw>5lZ4h>| zK&2D2axWY{ER64g91@vcv6{^mwlbxV%G`uL`!V4+Rw&G|?}MBpg=G67!3G{U*|!Pp zfYZ(baX5)O@G}dAHo>!k*17ggbS>I9+z~G62$20iB|ecy2w+N{igPK;fv<65E18`q z@H}3@oA?sGlCKy3F6>hL&ERG5GXxoo2D2gFkZve2JQrdNF&hP=%IIqJF!~vTj8Vp7 z<6L7~*vCWma{|0Nd6|a+E0@pYa{+4wV0|F$04z^~uOYx-5MiZV2FrZ}tX2^gx7+PM z+TXF?X{Lckkc!zP0zwy<7LbwD+04kL*p~^ZuT9b|2Wi zZ})e*zuo=M-Cyi}fA`b7*YE!0w^8cT4yUBCgR=i$emML)v5f5i=QgoFthxEtyY7GJu}A;% z#N$ss{p>T(J^#YSO)tLu>MNVK{O{{q-*|I(e`{Ok-X)LpEjX}f{;{fcYzw#Fv`KjzjW|^PO=s0? zE!)OZc^_ZR@8_HNHol*q5|o0Q5F}I!J;I-a?ZR0_w4y_?TJetJtWv8CRi-MZDO;5f zIw&0s4wVk89iDLbo5OaMhbmfCpqi&zt-4$FifWtctlCdqtzM`8Q2m{w($Uv3)p4%l z6306nA9Z}m@jb_XIUaNz(nM=&G=I>%sX5_fc4}~1?R2-(D^A;-{^jiBoa)@_yx#e5 z&ik}RZJG93?d{r)+7Gn*wKiRnE=Sj|yBELD>3(qWa4B;cbXn`N-{q`pj%%OmEv|oZ zea3ajP30Eqmgm;x_JrFjZa=s)cddJbdyadv`?cX0MXFa1mD?R_< zxzY2OmzP(HSDn}OUXOacz(f1<^8Dlb{`j?nLg`$Hv0UoH|WdttM!}p+x0`f ziN1Zl&-osjkUHVo2_N`{`gQm{;kVDw|wWBpQ|*9yYvZI2hs=5*?BiQWG*iWNpZ! zA%6?mZe&ImV}LQ%m}4wAb{W?iA2q&iJZ4gvf=ruDADFhA_Jsz7mWJLE`d;XFp{K%p z!a~Ce!tMxrCG3Pbz?^ArFfYgN>*iDROA!k6{{-R%1yeB%(=u0vsnb2g!QE4@4sj3B zTh)4g!luQM^-Rz+ywdjEGao+ljPQD+O+ zrMRQbt!+yDfZL4TY=K#ARzfErCb^HdpskwXDo<0g)uMLcdhx8fHPU;gw>sdi2%P-* zeK+29mv4<1{!T|fv=&wgTbMr!X3Pp4;$cx+0KlR)iHFH*Qky(+YgxC`%G9OKx0IEY z-HW5s`P$S$r<-!ia_`M8+naiC>dR#t%D%)8PA|XwGJkNx24V$sx4#KZA7TmkU`;X` zRo-6uAi+zeR++p_)>xjLWVPU)Phv`PQmi65DaDd(Q3r8vFE!t&$X+yaQDXDtsIa2u z5`A^Ms?lNcEj5#yTPFXZev0pmW(EJzFDxQ9HX~3QRM1~HA-<|wIkha<(;+B2DmB?0 z;~P+r(%M>Et1Kz>&_gy!cDry7_~g#K5x1wZ5^yWYn#D7Cq7M+d@F;FHdz!e#K?Q=c zRLMjyzoLb8#J5TAs^Uy_LaLi)GEQlgg@U5s!Ud0jG}|SblTxxd z{#X+AYO~1*LNmA|Ood61KAHZqbY_9F;nx0u5N)t;enp;jS$u(4m$obF`w4TV=Ux-s zU-9P#FCq5z`RaO2N=wEc|5$6=#uKx}1Gdv^pWCn=A^0A93p# zW~px=PIsa&z9Z{h-R9cX3z+t=>{Wse^y9uBnie{P|5E;}q86bWXC3i}u?X*N=I*__cypM#Mc$%y!R*S+SC~YaaS8_LN z7T;v9e5ICunWME{coyS@mk{amC!c1`60$jrmQ31|l#=M`U9R<~2=}er@^NlVKce%HqCVWzTe)B!^*Dg%|qb68f@^Lm1V^6}^AtS5g z5-j8rqCgj&q04I1MN8EK8QJPYWwYYCvN`Lf=%!}XElDkRY}T%ur>W_^iO<_`jkdk} zVOM`o=Q;U#v+MGb8Z%Ox7R)MHlBo#!wogy^_gx>@?>r|UjFxXgAT_3tG)woSE96Pz^AZUG++GVPF<=+9t* z>Tu5xb%+`U39VL{jOH|VhvF<1q9*2ci1-Q_z#Y@zXfpKA0|}QCfl~y4!CL%y(?HE zXpIJ~KH!Kb&umVPUe*zE?!*aEmqq;%uV@U3xACyB+urWTOy#i&>zB0*wiYd$U9_kv zKXt)WYx~Rx)}<-+Dba09D({*Rq||36bX;567Moa*9h;bcDk8D4-jXZwDg*cvf#08e zqO46|NH$j)%{0RhpA;_S>xoZ1AnMdGpE_-_}{{WIH-VCjlm?40EuCg@#)l zgxCuQbo@QrPs?@u`w!o%d$`+D_dZ09wK(Iyfro))C7v*Fnj~R&uyCjvc?$eOdN52H z#(m9e22{yYJxyk7K!Jm*Rin-i@Xt<6Db8Qi;o8AJ?pkdONa~uF=#>mwD-<%{JV!xy{tj=On_QZlIa@s z=XG0uz4eZ;`TmZEcH<*2aQ~?GI*nrKb&u`7Z%XxD4_r5pQ94UenY^;tq)m0qFLRz; zvsC+5g10ItFR`(D)rvFUuerffm+9>Gr-#hJQ*%7b#B0I+9sV@JZqzi}Sm5bBP2nM) ziV#J51Mlj3c7B*`%dY3SqFmT`Vdg#jG23Qdihc@)e4fyRelAQ;{x*_(hDfeeG#joK zy`kBpkS1bMu-O@`N2Z z84<}m^pnZ4G)I%qS}gh#vXEhpnkW*{G2Vd ziNE7#dp>|$bhb}}I7V9gajh7iP@e+y(Gb^%``pvq#5eib-U{TtI@>`s{sI&3B_5DR zO|p7`(TD;^vmhI)9-?*;yb-^^d!%{9a{atj(AH^r#EV(=uEIN7ZVXX6DALt@+F{}f zPg>CGt@m-x%^|K-&(+oZqR$Q1c;w6mcL*=hc&9Wj&}dPF-~g?lvN@8cMdB1?`@68w zwu_rC%;bq;A1yle4)a3vFd=G_!opo_HeGp9Iot!CYWexvTALC$oRASZg!Y~zJ)jkc zq$t-()#Q*=o3AcvE_7MctSN50$KbE`43D?Q@iR7Eb4$fobaD&#gys>QiG21oww>Gh z|I!CKH}E#w7q(SAY2L;0@m;`;)ez){@$p@@>ZayOo&jxt_F@~wAJ7KtBjSOlg%b}< z+@vtAt8IGlP9>lCKvVM!mF=C14G!qGPYAd$Q^>gRzL0T|hwCMNP=8KCGjTQgR&$l2 zu(qkfHlzS;Zk!(h6HjsICF%Sc=)5athLKuNeny;*MCCNP@H7vvO*izcarfSMW6#=_ z%7+JxRgVl9e)V5@-=9}530ZvqpH^O9Ib*?(f%x;2tnVZnC*~n(oj4IkaV(o?dNGmu zMNDhEq4R_2;5U+Hq{Rpu=ah9^$E~}k%(jYj^@?;&U|}Qaf~yTe;LYLGFmJ_jnkFx! zFzmK&MReUHos;X7fjN!6SCDFZ(ACfEt1Q&`7UnxGUv!CR@DO&2RV zz7#f=tnG7lFn2eny9PL#g`{nTwQ-WXL&5tp@P6V*eZ-Pa8II-3CBws#B}n1z6=F1p zs+(0)?{5iC$}7n8OS}KO#mZ)7;SICPx)zk#zMa47VWYRo7$2XV;UD4c?H1@6vAK2n z3~#-cP{|K7(UhTIe8P5};HvwkvKetpt*DTkm4d!ozzZLu z4@+%ve!(*;Z3ot zUEI5Uz09{Hf3WC2?N;8xOHZb3aP#u_jeb1Gb|3e0*(1pb>vUlu=z;(Al<0v@9N64@ zi}Hsy+ds|CT*Du?z0I?2^|XrMcKi|QrS@18h#?{m5rhjTReY=MSsnjXWh>x|%tBnP z`N9_%uaCWvr$~I!!*0okz4i3sryXnBYaUTdw_XTFn*ywnV7r(NnFD+df62CfI`6|O z>HL!*lG_gghT|{{DcZVIgy8t}BUa&iWJNeKFN|M6yaoPa05tuYdCuNSu5Djg>472C zbGwZfN@F(JZxn*;e-rT`eiFQGE{^>8azwx!dm-8EsPH-M%VE7~(LdWL)Rqd_w=3?X zzJj=J2^KWa8*$B+lBmbJl2*KlR*GDbDSAnv*hE^xs3zX}X{0(h*KJ~gkH!#FHhJ#! z#yP3U+^}g%Zj0?5!QW-F*OV!3AsM&#UY`(ACgbr09d67|^f4BN6vv7Y zPq+sne)2UYzg=RsX-GFG3H z#*TFtvXL5!HLOyQH#`So#f1<{4gI8TR<=3TbiQ@_ z>kTv9ygW1snQ`I8bFVAOYU`da(;N?)eWf@Yyz#WS2n6*i%n5IB3eq|Ij>jJEk^k-N z^2gMdbBJUSiLso+Sp1oZF&_ktVrGXHNg?t`#E=GFE`;J7qw3!7^p&;hsy3Z%gRnF_ z!)1c1R(IVzgRPJXQZJZ8Tw#S|fW~sipeT1IFI7>7Q@YM$MUp`i6sPx5YL{r16lu!( z9-r)@RB0#jAEwl=^qlOX4)UKq#paQdh4FaX3k5HXX9Dq0Z;_%}DI7*5h1>_gL%kq; zOQIAAd(TPlEz>wpYA^U*9$XY(7`T1Mx>u1(CaTL|6*4VZ?!S-;xi!$^VIQS z6&beApEbod=&D3EUF5fBnBRnV80RG{(>h16o1hjJ`MmPdldp5)wy5)h7PRZ2B~nZy zPNozxq=;%sdahPQW(M~?d5!p|F|V!AGc>oo&?9u~O^pd@ZF9xHk@+!UCI6EjV=e)g z1mta}2%doJMyp%$)G~FFzmf7#l27YxXe!O0H*IdRe{;^fNbl6v0{5Wq!r8A1uN0QI zwJvP2WKX$%az}7(-Fl>4CLE3Dxl5&rP9RV+ve@$$3Xj6j;POV{X zYD>Pmp}Vx^uZ!m;W!KNRF!kh=d2Ix}w0_kpSugl^fQ@-vk|kLrxQeWWWb;sw;=+K^ zz>rD#j*1FpRAZK!+smvznvx9HIHkX1h_xyeveCnr8~~gc0JT#3NsLRxtP@fQ$WenceU^+d3suZ$cajFDWV(0#6o$DS;48!R-g8u z#mKUYK*lRE;rB0>|&)ai*Z_B;yU*FfafGf^#+<3}%dMma64gS*| z?GY$R9!3sm$ZL8!`57i#u4`#felXj1KB+Ay^0}!l{rs$L4PR>WZtkM~=ke!F^hYd2 zu??*Rc?iGGw!(oY{NlvB9FQ0n%>4E#VYX|~lm*$FI2N)L31oB1Kww#|Hj2qxlNwPq z|fsuQs`v<)?Gd-~=e1j!P z6JFSuIU(6EF(%9ST&yqQnrBaAn}sjPm+4LJmd)kme^=a3JOT|~pus?6#;ia~d#jOD zHpyfaU4uvh;#+JHsmrvko`ktfKUtky8W$pac>!Nld3%KC zg}eJy>D_R~IthM2VJ~N&a~onS>~VRju=b!N`xDM#15LA$598CXvt7^aIlY84(SC;8 zQ2T+m+wuvuSndAV9)q1|=b| zp`kLyiD_i=-!mdJ4PowH(blN4$1}4cvw}6Rn?h= z;b|)tXlBf%JI!9oc~MoF1(9h3gSd5lxS>W@T<@BqE6VcLYSq~Z*+~&mMLjch(b;vg zijuvxI#qV6vo<~6D{6B4EVt;qiuxjc)5HLMggPQKJz70MjZi>fCBjnPEqp7Dk)k`~ zZ7q-0>FPGs>*|H2&CTLokAlTw?RX4hRKv4HQ{?HEV(@WOF_oK-A;ry1sc&(VCNYkX zcLyxe_|9+J#?7C9W;^i8%Ut`)tG2J^mN=Bu<)>9=X4R(T))hOH&UHeIZQE?$ekMHd zlI;ZcR-IqA{keK(O;v?1&XO2EkdT;`G^4sk;&%mK$ZrHKo)npSVri|X^~lA5o2FNJ zG2+52s+RdVc!rz&-5fjv;-Wg!)AAA$^TXm?_~FI{u@Q%jnu*$&m`PdFstcy2@of#e4+z+VJNLdt+$AO@0)w4WnsaMP3sc}^B>zN|4<(eo@^9y`1_O(;#gl{Ikv|( zRVS#!D|yEp8@xK&jK7zr9L3)Vnnf<>umT=X%vw;ARPUqrrj-|^Gm^bASlS;kjpFmG zuYR4gHMSr;z&DgD{9U{=BmG)>{ldchF0uN-mu$zuYTZj0PV+xyOiOlh%CPu22WmW2 z<<_L<7aM(*z9B?+j&Lu(S=dW{n8wCe+TL;IS;D=g(4Pvvj#Ivg^n!Vac@8g?S=^jS zGXGCm(;ucb*C)kHO)~R!Q`gR#wr19ell^Ji-W3(^SKf73<$9v2j6cc;6$Xk3K@;X7De{rF=@8TkDsKy)Zo438 ztV^vy#g>#A%TuccbT04lM|BzIim-TZV}dzlX1cj7ZMu^aqz0J9{7<|cFcI5h&)lMd z7K?f`_6D7|yg^qiqzHu*EmI@a6HN(u!BGw=s%fbX37I9SmD#GaOnyf2apEeA*v=sB*Bii&k`oUw}JDppbU<698!}wVtM=>3l3}Y`m+0q z`?52N>-o#=cTYOMU*UItKYz@z1AQ~uLAD7skI)C2Hy*(b(7`_3&#-53U;7b~tDaUn z^42DNy~>#37HTSr^;Y?|`i3ukA;HUHiYkfl11acNz@OmBiU6`UF%*>dXnE`}>Xy(J zhqQ9<*ctqZgbOAIgKaDHW+v=^33N_Fxk%_7Z4+YCCR|)1B96VcAZYqR9M_eYCqx!E z^M#rHv$E*8ex`5a6F>FWR`t8g2;&Zp2$PmL)}&){w--g^4Z0Hja^+(di-Z zi`H_O(MHlqsTXnGgslW=Z&j));clSc)S^n6=^Zm;nN@H|TK>GcKF#VsH)xrw-fhB! zSaqx}g{NR($`IRD+XKjbJ)d~ZlH6N^Iz!DbC)6X9q*bx-s*INe2Y!R+;{L6e@)=k6 zT}B{ZN5~zNe9$^sX92OCfi@G zad)r4-#hwhKq;PSA&nrGZJbi*^Y)0!XMj^ZxdZm!|#1z-TA3BpAjNBEA!#=n0pa{>C_CrR(i{;X0{qS6M8C;K) zysDJE^w6OAu%Hpt-k(&Hm0XqcNSMW7PBb9LgOsx3ThWh7^kVl;FCN|@;UP%EDKcjB zPlNdRRDY@J#?UM79UE(JB?%ZKLSg)vt{6z0_X*bl0 zk|_knBfQV({n3muoX@2l(=)@~hvr&w?-V?xy;H*|>l6Lj$h}E%pJePU)GtZkWACH# zJ@TH)e}#*tCGW9u@gQi%c(`Z|7&Ru$fFnH0m1B}LXKYN*OA0hDu3>$Wcvvm+5P8L` z^0>=II)cR<#3f%k&d9BnvGIQ)EBts^W&OwcfyD@3{7ahm zQRS~Thg-u_P`>Gd;!PEQCO7{DMfAoSw3eGTMk`*pQ5#b{?OvtzzWbfy@4w%wy#GE} z59H-#e@l2#IEEaC0XY<^qCx^eoCPQoNO=>YKHTc1=a^_+xQ0XZvv^WvPGdUl=+|VG zT?FHRYw z=!dTuXQx|Ab%c+F;U`Je$H5`RLo$!1gGYXpg%}45nJz?V84C@cAnVnbi0%}%O3XnC z3n2@QSPgt}w_02)j@Yt(6-%64v&~W=fEdxrQLI^9i^>;QI#9b9v@6=yLGNu zx>24MEo@vqr)>TT)NYj3)1Fxh>f7_N4~R7o)}a`VXt&sIK-x-7VNv}mr6Qy=_G0dC zC`@-wcUv=m#{B$L9+Q0c{0iri?70QWB~H0%mC4?o@m9jkJ?>dVv`Knvbw~}U#xBtw|7k%^p0XJ#u zRdK%u0gaEEgf)81SnK^KV;1!*{HmDiBz3+D@?qb7Y1|PkX*5;URu~}iEeBi}GQvGoL z`LYTDV>nGEQXw@eNv(3hz=X-^*CtL@f9)>JzOhxaBD`?krRo7!UsbJkZG&=cd~|2w z12=?5cQv@k%vvN2Z#_tlO|19kJL^$Tbz8i!~LPbN`d7 z3d#!WuU=ZQn7qyS^%Z|7ck_S4P0r@(xL<^~xe97=ZWxIh&p`j1aZ8To-xQU2$usA; zwIxEyop;vSHpm)4?;w!sStQ_ETtAfp%go zyc}#0)Iy0xks@3$<3b0)RZs;wpDcWaE3ulIdU&Ea<$9K3931UCXh){I`9cD>_cRkN z5%7yn!cG<}W~>osTCt5pF(Q>13`dQq=~aj0AvAh4N~)kSKAW8o-m36Y&UxaNTW4RB zXXq(%bvJ}-YJywcvsA&k*F==$^b4;C1_VSq_^2c9d*;4Z+nQE4$EPXcA{@*i(QeVU zmlv$c4KKWTGCU61G5$nitllH5OF+hms+ub&4JuI>RrjI4Vw$+D5`?E-jPFI=MNP=( zVoit`e<4O5vnoWC=h&qo50iw)t`FgXVl?pI;2}L28_$o>jPcNj>LU4pi{mkfetf*~ z01q;EV`J)+v};^sG}B9C@`A4EpgGWIagBD7cUMYE7`w)1-4*i69J}g9&<@Y(=SJ4w zh_;V06CD$zXD~)nGP1TuvLLHv>|w8$Eq$DEPZ4Kvj2mwtNWwc2WE-O=Nz~vb*_aS% zW6lB_s?b&#Ds*^4?o{1AG5_vr|41<7xqNT%YUFy1O4H=!n7A7AqCHa@mOQ{hr{x>d&$9f0H znNqrKUwWffsSZg%>6tmQuK@BASFLOjm3^G@mfuO+$Ek4<6jJc}-{2C{664_FaZvej zaY;Hq5*Ix1)yE|%{W#cOk+gn%eDa!&o;{TKXppKkuTmp4tZ?I?{884p@o*+efukVR z=RkIDQ~`HIg^tL>E6a2^rSnJE>Ii3uYr{2b1P}Ra+7%pCBRia;LM>Ns!*vZ|lNvA8 zto2Rx>n^T)RdJK;bY5HQK&vH(YSyaePg=Dcdj(=05p2;7>qHdaTtVqDKdvP9kj#qF z^eV!M1DyN|>R)J&7uk1D3r&>xBtDnO_hMbD!;GuW#uF53t1Hsw-XX2|PWh3|#(SLZ ziQpNwYF-drgq^vg#YM%oA89KBeUb6xRCDV*+*d(;O`WqeHL(rhHBL224LmQhFp?MB z4&r3H9ehJxN~y!1pYL;W>!wc{MoxvY|cFVPiNRgEs~t*UD4E|7dMIhlZqahSlwXBUuXm`GJG z@WYoLSReQ41uj*m{hNmvc-%nw%mw9t`cEEa5T3ZRww8*{1+g~q6l5GLKBYHSbs}xg z!`WU|o*2i)lDU6ZrFgAG)ELEzg8K4m#cdK%3gQfMG1HNY(c$^}5zh_`8^?%*Opk08 zqmnYeiSefNJOOx3m8aN=7=EHaA@TEy2MfNGXqBHY5bhb~kyyL;E_ieij#RxT!@0bO zZ<7p0s^#M+WH6|w`@htAYcl?uI&Y5m=w$QfL8}UUlbrd(lGjGDgOq>Zc+XBYe@AX3 z@nVNWGulXcfoE8RHvSLcd(m$|OM_5@C_Tbg%JUua=9Fp+R4ec85O%5rf0M~Sy1WGb zqC}X@wxNCn&q)j~$vX`wH;WNw2dBmutx?doTp@(J2*08YDk6qk4et#u9FeQRNH7D!Z_9lpNe{P zMM5RwiqJ}EyBPZlc;`?y|0DRMgyf~F5y~-ocNY%UdKHT0BM$5Cq>>hlor=7c!s7y| z1@9iP8r9(`7KA+t6}_(@2?hNsVO3q&bhiq#GHNM*(sNdXMp3KML~isdFXN6)+O)t@ z+mBhr9!`aL>%x57QNYY(dxQ+0MLwNkC?VG7qUFc;G!njSwnwppPa6JC@yYo?t>U&l z4fI_Ff0um%pD*eFZNgi&v}sfEx&i)f)xFCldgr3ej^Q>GnW^uV-bcXSr56&2W4ih~ z3#caPU3y#+cxZMpiJ0`#Nk+JG1m0d5w}AIGz02oa>L+3cXGaiGJ%W~dWqQQto_Ub? z4h7(oJIE*b(Pz0IJ^d_p!+RR+)q)DR#5oL`1epKS;R@5xXSz?EYNGKsw}HRxF~|Mw zx83J>TzHJejar5of-Cw2!$V_&)>EnnGv9D;bv(*bQKO0lpXtNTbS0~lTqay;PSOL?5ot6?wdYy~RJ~zmtZc z7BxjIJu~eqX)aAGojdKVDc7}6SCpf#d%el#5w9>TVD<}6hrN;QaLWfIvG>X_Ie`TI-tOJe1c zs59R|K0e^L7=Lk#Pr86tENqlu>*0kaquw|SupzS)`a`LG>Afmc#DpR`wJ8X<#0S01 z%UU&cjzXQLCFsrNAt}0$n3*^Ge4zQ#=}XOfF7syuMQNjxy6!%lo2AX^z0I-SX?9Ug zs5!T^QdjSEBgkO0xj{kCkgCZWVHO}agy;G2*fC{Bkh`GgTT^zfaOCNZ%j0r|#m{A> z`9-B$TU?TKk2hO$^+JDUrfnm_!uR*o+CJpBCw`R3V{H8ofe#cMuM_^4-o+4x89^O_ zcXv=JDmi0pz=dF{5cE<~L{2lR_}K}WCarBqT~cYB{&=S;B~5J`(wek>Ms2=k!t=}A z7p!*HmkW+{3A(|3k+Vv>PluOHbxx=g6iS}6EGqNKhpt^|n(_?s619w2TX-P844_>S z6t_jhY>2Fw6t##|vTk?Ji!Il?^ZdkSZTqYqg~{#K9>@B=hJw{~`K#++ z?O7LYTB1-n#!as7n&s|weEy1#dP`PYF%A)@{TL8i!A}ROEvGob;;F!ciLn>n)9}3Z zyS}m=X{=e62Sw$2k;nwlq5MyRf?j0gHUiePK^LJeD5OaUcho-T zK8ZV}a+h-3n!08US7#Q?u$@vC-X^?xKAYc(g*f>h6T3#($^VAE(r`H=Ph3acyzH)w zW@NbWjF9-?V3x{iHetg`d|DY5{HD&z$ZLG2owg!h`ffl4UM;^E}&FMA4MtS1xH&OU+SlL-NOJfnao6Xxak zJKz}w+?${2@9QkyYs(9qblKAiuS=iZ^i@9Y;?oOU^zB*jEqKm|Tm!v#gG`J3g1B%p zrQFu1eZ1R_7epre=S{D_M*Bo@80T8sCp9yRJ1bXJ1W)g&sE(@atRcQg^&vCxE=2`N zT&(xChFaAQJ`U z;8A1+eo>}>-@rfH7j8E_(>SHckI&+>Y){*s7Fuj4Y{##?i_)A}BO^{0ip1w3jb!DR zg0J>WWEgxJvF+bH8!33m4-Jm@kR)EXho=cayNG|XjQ>Bu{_iojHH?cD@g@BP@g7*Q z^i$8a$k!YXEgR%(f#LmO^0k5)@Lp1>y%K6M+};80>B(sNQQaYe&4B zb&Y(Dx5`0AQX40pAOfg zwO~NYPGIW5)lBpsz|qeZ;cqMM6rx>^NXInRgdPOn2s%5^XA!OTF~gK3fF<$bFH4AxkH^mDCHzHE=h5bXxoHBjs}@X`R)?!c7+_lOy7P{?*%k-|!h7>RqNau`IGEfD*XiW4owNKzgH zSSSsNRGEy86iPBWiS<3A0T5UdOqEE{CA zh=nkTMc~lytnOZSg48HnjKm4z>+kv#>4JP}$LD z7#Qqt>uHCdfeDPXYeRR_f;L0vprNz1t*Of}56avDFV;n#47StLYM|HAcXjr(4aAP_ z*w)q7-qh35wx1vji~_MAeyzE)r?aQsFgP0behK%yrtZ$Jr6TyjUc@qaB0ZrS${-z%EZtWcCYwH5Ra}^3(s%-N}F@H*je_sep>igE}pS_{peAMM&u+ zzfML@GZ88ALR^y~kpCGri3+G<89q;!)oJ8RRR&08dJ+Vh;i|>nq_Cvs2F#+d;vu<~ zvG5L4(}Y=0QtV6WdTG8S|6Is&*$kY?FVciUv-TjUN@sES9RMXXoA==!xelVC3ukgY z?f8B=`j;_Q*#U1Y&VCiW^9C0;^+PKL44Bv;SImnGds^H2MSZF$DKkumw57&nQiEti zbzA>HXK#-oAvS?@{!(AjLKZ<~MC}k~+a^O{?hHfIV7j4WaIh~uE^eTuzq4;}AaNL@q4LI>M2{@O1XN%8W6d3i8q8pDKLinp2{C>c;`4CCPLbHph(eST1D?l; z5mX}fW0J6^kix8ZJ8l}}l!1KaB$kEDWe#MS2e(?lCPOYonEOibp7be@&{Q@JvMPt9 zXW}jIm8=RnHH+1-T2{yE*=#n4HLylDmo;$#`IsBoP3#SJFP@V71G}Bw%KprrW`E%d zb_-Xs8`xdkfvebUT+P;UN4A@5*hB0Yb`t*=;1qk5J|6F7+r{>>ooo-=z+Pf6Bewou_8xnMy~^HatJynj4SSY-z}{qUvDdj1 zTgRQ*{ani)WDl?->~Xf9{fRxv{>biT_prZm9iGj1;fQ{F$Qu;Z5_`W0H3j7{pu6Jt)P@cx=u|9T!dF;U$y~ac z27Azp+A;Ax_?NEemef8T8aA@M-^KRy{csNv{(`pt9?Iy*7?m=1N5(y(#g;SJbI^z( zX2Y9#XW~u!FY({;-hcvOnlM{Fru0?LS8j4}ak$ap9fu)RkSa;F zSen5e@DBAaH3rRk&0eQ!r>C4RqbUvu9(=OM(ru|%3s9Ubv=HlgIbZK>Y z$YqDChiifBO4rw2&$>CfdAJ$evfK*Xu65hww%P5x`$YFl_d>T#?pxfqc`y%^hnI&R ztk>0kAD&>{ik-#pSd9H;R)m_Uwf5JcTQ0EaQ0#(5+t1>g)5rVKiqJNtGQ@m~DU!e8_VA;*;><8FvjB|(m4p4j-`__Il`woXI;Ge=c ze?`v^&}%<>9RjW&(eopW^G8;K@zsKodR))Oc@B867Gv58U#S4zn=itG@3T(?ygi_I zCp?!HJeU9;{CtrIrMND~^S9FYe+QfoFz%n>P1G2NGsdrnE?Mo{f&C<)TQQmBxQF^X^40q{u&uAcz?zkvQTfO-NvI0|T|A&HZKMv%^d2d6OpbE0I{ z;@SZ{@Eri zC8sfmXmH03aLo7=gX!6Oo*_|wWVb|@9=tvQ+V+6912V4(+CI?uJs|A^q;sHg4`?OVHTY zWgec9c}VmVHu4i^fNdkNy$Wp4vqn(dZT~AU?qN#-V}*SOG9EC z?Qe-Z+yoofU{ogocSs(EqzR>fE$QePP<%qPmLq^kR1BdtS<5+Q0LBl1@qJ)?hXq1o zO`;Wk2yP7l`?G+#1@d?mSn;2SME!piI&%&(`2aF`6*!KAOYeb8JHVx{U{N1|Q#&B( zzXI>y!J%Eiw2?gmZa!t-4EZRbN5PPh7j)?ZL~O30-UHGM#d&;PIwR}S8Cg?FzsW{u z90Zy4$<_W3jO8al`v}nXiaH--|0iNMcR=2YaqPi3_CmTpfc}Gkv>#9o0m^C6`Wqm< z4M=-IqnAu$C}=!@7{^0|z8%ni0rbxReV+{d8$fpebn>$Y0R3k`CqMfep#KKwM@1UD zab62=DfwHi3_SqQe*<(CqE^Wkz6aD_!1puoJ7fz70QDz8Js{Ftje8Qm$y@9LzkdR+ z_ks3rMW6Z<`n?D(3IVjU;Ktja_aj-dCn4EGp!-W;I0+1!f#DozHvr2g!16J$d?H)i zr=b5|p#LjbgLXlx$1x7_-n&FgTZ{iD^a$WQg?<|`uf71vHenPmB9?v!7I^?sw;Ql; z2R8Db^&Xg>cPkWK;8Z-8_RkZ7JfiMgF3isSP9egqUbK%c{a+l+Z98ZBbbGXA3HY_X$Q0g((xj3%{l@zNT0GtUJ#}J^NmN|0_^bd(rP61RaXideDhSupg zGSQp7f;7X?>_YlOxQ@t8DJvXhk#|6 zQ{Ty)BHG^o?We%0y)viH%bYqdj$`&kE*-{rPRW>#VNAau+HwWI-M}v?ia7+``T-G` z2DG0C?dPFG=Rx;*^xOrDq5o4O@s;QznkdfwUyS?=M*b6MqKIaP%*$UeYLd_?;5sDg zG3I{oN{d#KE*!-OkBfRBN$0dIoo8fi`yLQ~0mM%L@eD?|8zVd<>jG)rkgRn>z;aB~ zgB`%O6W62zSZRYs4{%qamEx&$fII|f6my)%yr%*G-7s&PA+s3JBFSR|8U^8gl20C{`s{6r4#)%=P;Vn;%F3*$#1~D6RqKeWIse! zHkKdy39u;ck^InXP&(QN{RFMmVhmK@=n5;LwSWiwW+<#W8oCk#8Cc;%rHF-e>^OK# z@y*v_&y(osfS#C7F=K^-vS@HU2AW}o?Mdsqv)~GOs^OkHMN2sgTr}gJL2I%U;vdZj z6wgv*eH?mq6ncgKpowdW1`gmpWrire7^ZaR2uk+@%3Cs}q$xz@KY@$l2dn)BQM=QC zi{zCFy~qY!Y9-k-MPX#mXGMHum9ChpXw^Wo$}zOU|LDU}grfxZBh6K$`M=Ba6wOa3 zFV0P_&~;iyVEg_Buq{ zd$KLks`nRQAg}W!FwiV}5cC}pJ?o_z_Pjj963s_I0nM5rs(Dsvvy(nDyV_i0a+xfR_5sKfhaT(zfQ=I#(|%d3H3!LG#fe80^~Tu#2jZV zGMqD!DXl~{GXXis7UZqE@tci2VjnW3OYxhF+~EpjN>|}GpZyPXyZ|^~LdNtX{FWkH m_%CElDO)%V96x}(sg%oNAKl!G8fyGMUB%XaiDzZ@FaIC+E;f$< literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/Chivo/Chivo-Regular.ttf b/workflow/public_html/lib/fonts/Chivo/Chivo-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..30f8143c83d3757121ed25bc82981c5afba10b27 GIT binary patch literal 50844 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/Chivo/OFL.txt b/workflow/public_html/lib/fonts/Chivo/OFL.txt new file mode 100644 index 000000000..ac2d55525 --- /dev/null +++ b/workflow/public_html/lib/fonts/Chivo/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2010, Omnibus-Type (www.omnibus-type.com|omnibus.type@gmail.com), +Copyright (c) 2010, Igino Marini. (www.ikern.com|mail@iginomarini.com), +with Reserved Font Name Chivo. +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/workflow/public_html/lib/fonts/Montserrat/Montserrat-Bold.ttf b/workflow/public_html/lib/fonts/Montserrat/Montserrat-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ae33a4538132c8fc174dd53b3ce771009405d7a4 GIT binary patch literal 29560 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/Montserrat/Montserrat-Regular.ttf b/workflow/public_html/lib/fonts/Montserrat/Montserrat-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b4b5afe6ee4b560b65b2f2040ad38f6c094b347 GIT binary patch literal 29016 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/Montserrat/OFL.txt b/workflow/public_html/lib/fonts/Montserrat/OFL.txt new file mode 100644 index 000000000..3968b2265 --- /dev/null +++ b/workflow/public_html/lib/fonts/Montserrat/OFL.txt @@ -0,0 +1,92 @@ +Copyright (c) 2011-2012, Julieta Ulanovsky (julieta.ulanovsky@gmail.com), with Reserved Font Names 'Montserrat' +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot b/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..0ed0cd462fb423e1e97ef9893340466813e9810b GIT binary patch literal 31682 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg b/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg new file mode 100644 index 000000000..7cd4bef46 --- /dev/null +++ b/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg @@ -0,0 +1,173 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2010 2012 Adobe Systems Incorporated All Rights Reserved +Designer : Paul D Hunt +Foundry : Adobe Systems Incorporated +Foundry URL : httpwwwadobecomtype + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf b/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..07cea17173147bf1f1b14696cdab6fc9da391f38 GIT binary patch literal 31388 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 QAuH}nc`kW6UU8THAC!^OIRF3v literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff b/workflow/public_html/lib/fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..d2bd820d05f7ecc3b52b386fe049c9f42ad63271 GIT binary patch literal 18424 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot b/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..5733b8e13ca4c24180d2a342ee31e10e29189735 GIT binary patch literal 32242 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 Ncj9!W;w@tA{{U6VQ;+}v literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg b/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg new file mode 100644 index 000000000..9dc3296c1 --- /dev/null +++ b/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg @@ -0,0 +1,173 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : 2010 2012 Adobe Systems Incorporated All Rights Reserved +Designer : Paul D Hunt +Foundry : Adobe Systems Incorporated +Foundry URL : httpwwwadobecomtype + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf b/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2fcb0e683d62b4ca60160dc768cec5f68cf6b085 GIT binary patch literal 31936 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff b/workflow/public_html/lib/fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..41b74b4605b7d15956752e1b87c2e51992f7fccb GIT binary patch literal 18996 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/15px-Edit.png b/workflow/public_html/lib/img/15px-Edit.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb28e558a9c22cc94121926812219e45ecdf42c GIT binary patch literal 688 zcmV;h0#E&kP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0!2wgK~y+TV;~0{ zOJN8EQfv?&5QK(?vK>Br*y7x|bM|ItW_(a#6cEF}!2Pj>cl*0KvHxeo_%}d>85lA% zGX;+vIkM;P-@pIgym@nb_wL=6P$@8gYTWsyN#g&rbjkluvUr|CrQm?==+UE_{sY0Y zXV0$Jr=@X$1dE{>KLa)1OP2Wmxrpo6o(LY0(-|0M&6=fcWo5++Vgqeo_wV1o|1V#@ z_~TX5C6UX(!2StMGS8$pX}PTYyS1?*Z(hFy7d3?)93!3z5hM& zRXM|=ugwsRpNhDC?+WJ$f@*_+sHiBxef#zufAZw%{|65q{GT*s+W%AgxBvfmeBs}F zxqSa0XNZAq+=^@?8sM5ge}3EY<;#yR+qiqe*#$L^-j@sgf11qy|86|@o1H1#PEd6? z0i&d(qzH(yZ2OVP``R-8KZ#`fKVL=t%S;*V60izF;MlQaP3tyox)5gL?6Oo#`qF(j zxBr`Ubp9_@S6}h3vlAS!SOGA!n^&)1{m{|UQXa&&XOLG|qoHx*v4{KrO}e`O7pbY8 zc@z_)0#=L+4jnoK)@W;MD+?6@0~>yRr4_2Gw;y|W{NJFj|9^qH`io=U-ezFQq@*NX zV6yB2YP{>>;vxqYL<9DGd@5_y)SjKSx4%>=CDk@VT6!~smX;RV*|TT&-M)SMKTxA8 zR4rBzEhncnQ%>&qN+qR}tzu%S3?3dHqU+bM-`&~S830v-7Z|9hh-S#k8!|93FaQ9v WvI@|L{{_7O0000N)`zh3@<*A;3F8-O!LjP-|?0Ql8%h(}ePy{mJl_yGW8D8l_KDdw&xg&3VJ%P;k9 zw}a=v7s$W(N}*KY=c6?7sEU|bb_pJL^vD5}q^@;uCV+H(n~j~G>7=fqtYpW?k{7uD?rA2-c@6v;0r24ErZlY`epszQtaB#9E0%C$ zB0*A*lF$d3yLMFU8{O2?&vL%Jv0nt3njB&N?#a-r+AT1s^@9)$MpSNH90A~Yd4u1! cR5Cy@JGRA`2gUt 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 Dsq^y@ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/_editcopy.png b/workflow/public_html/lib/img/_editcopy.png new file mode 100644 index 0000000000000000000000000000000000000000..b7c938a999b0e8490cf7d69ed9a6fd42ad580731 GIT binary patch literal 730 zcmV<00ww*4P)p!5HKmQ@@KR{(% z91K9a|NjLDAeR3i=d-dg{`>j+$M3&?feQbl>ShFCMuy)&;lCgZG6;x&gA4|$1qdJ( z9&XM$5nf(PW=1BN17~h9ym;}P;TO~;VB3If2NM+rBMn)GU%w!R{DT_y;oE-(fB<5N z3vjHeOmb)c1GN3)r>_h^X8;3;5o`bx6BEPTCvO94KS&2SK!NH30*D1gGf?msR1t^`Qt<;AdS8D12m6}= z>VFsp2>}EU3$o21TmQg98Du<^4~nS242Y@A0@*;l00G3ZSz%KR{cV!Q%gc;l>C|`)5v`y9W?p03+98#-LdpAOHXW M07*qoM6N<$f-s^ilmGw# literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/activate.png b/workflow/public_html/lib/img/activate.png new file mode 100644 index 0000000000000000000000000000000000000000..1be605c56c14b9b49d46d78d8f269193f1908316 GIT binary patch literal 750 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2igi2 z6&wl0^#N%B00M4FL_t(I%cYXvOOsI?#-Gj2HJN7FQZ^jRJ2ituvx1N=Gy6BXjVQd4 zj3N?@b`kyl2fFE|4C$g9wJfx&rCS4o+RVW=b#uP&dwzaT7tR;Wx`-Y)HwT{2d7kh2 zdW50WIv5R5Tk#CkrjExgQB)7Jnbc08V)3S-I93z1;-aqr>Yc!3pAZFJ1z@gQq|ha?3>3W5YUF*k)E0j@dHn<+#ZBG5+1TmUD=Y-Kmv%7(0U z-ffh-08Dc*?LaccT!5`?!-=6PtB^+SGYXOrdOMM13XWn>wlXe2kO)dr*pM3lu;)ct zt0ScZ34*dD3<$(^5CFUYP?43Ktu2HDVU$G~RawQBv|uS47PlZA4rNJ*vOrVoK`_lB zHe}8P6s_XOY++{gSg2zg;#6R93*6c^$}I)HF3=clM1M;^W`9htvH}~~vqiMy2&Y@mU?wyDZEa!w>e9XRge%okz gol0cHUjhHBUvhNKI-;$=ZvX%Q07*qoM6N<$g00L$VgLXD literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/add.png b/workflow/public_html/lib/img/add.png new file mode 100644 index 0000000000000000000000000000000000000000..bd17836cedcf4637cd2b605fede87f2b56f96082 GIT binary patch literal 373 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoZ!3HG%J$@n#q*#ibJVQ8upoSx*1IXtr@Q5sC zVDM7_VMejqnfHK#awV=2CBgY=CFO}lsSJ)O`AMk?Zka`?<@rU~#R|^Brh0~}d`?;!&L*Ls2I3vM2nJ8w6t-e7du#M;L)`@*FQ7v^bfbn$nbEZV0v zfyMekM}We=aI!TD(= z<%vb942~)JNvR5MnMJAP`9;~q3eLf%dWNgzJ%ENX3VFIXhIn+ooq90$kb{8heC2nZ zS_@b#{#cg?Se+;n@LIs)Rlu$&dW7}N!4d{p3sDPp{fy)U<4MVyL7$dh&H5ivWxRWF z;l*vb$*=QD4&86@xaEZ*5L8Fct9YJleICA*Xo4?5Q5B8k%ReYHyVNAky!i zFmLs&I7 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/alfrescoIcon.png b/workflow/public_html/lib/img/alfrescoIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a65ce4667ec70aba884232bd8924685655603eb5 GIT binary patch literal 1921 zcmV-{2Y&d8P)V;isSb?mjBwb$!?%Y+~{Od2r<|;H*LLv*Af_yW9csZ5A^XKq+ z7#W5lph9tX4W3?)GIaq0`Ievw9oJJZIGhSDL@*f3qLUJV_}e`UgJDmL?n)1VGuWz# z>@Yw2W`gkqJ`CdIHSvWQ8GcZm#s-D{!?XqxqtF%yDNjK=YFH&)uwK;LVBoBSF5(vU^ywQt?{Kyy>pES{P*``#OFrbhI@o@YU z4}E|_V)6u1}RNKG|B$I_&axAZeR~s;co#!(jImTJ~ zh9ajKVi~mf@U3##WK3%~KV_=kQ(-0~N1$m)XJ92o=b#dFG{@ADPV+&LLU1Q1AP6K& ziNGP_mut}zM1Kg0G%D=aQ3r<|hp%9E4%Z_k+gx**92~p8i+1U+eDXB$T8UeQN`=n& ztOlnCR4GM}Ht_KXUg*I;FPcKkQ=Y}9W%zk3yf*x?7t=HII|T~C&h_}sioe;e?4xTe zD07lR_4s0$yYHRSFIUh;iKtZg@<9;4{Sr|MNj04mvJor6&=tT_AK`8vcHRM>C!crW zfK|e-JN4f;9k*Ti8Lf|#+tebu=s2P_hSj>x@gH59JIcXnNXX-Y*}961x*AxrRn28t z&|JKZ$KOZWB6QpVk2f1K#gpI5?DZdU1RkR+3}P*`s%gfcG^E|ne-_y{o$2q1?48p? z$}*I+ot+EZ^S!_N{wBZ7?=giPJscF(MR z+sWvwm*)OL&3Kh9-UH;>vs}!8`SKSU)iQvA`D3u$isxE!S2Yx#HX>iZj`_3HfHDIk zko=@C`o^q2m_--nd|mky^88sUpxqYSSI0Llp0P;5G)t7kO_#;<7xaNId)H4ZSK0;pdu7jKy?Od-|e% zZe>MOzuMy3x4-Y1gdQU%oLDYJa(JEEGEdB|>bZ;)qAs%BPB$%q$7cH8Tq)2`y*}_r z_sF|5T7+@4oyAY0#)hSMuy*g)x^2Y%GQc!oN|qsu?Lppg^g??bu<(Y z3N_?pDkg&4uC>;>w%5McHF);;&_P3tp?oWlU_?E9`B03Uc%o@fQ^lPUkwnDVpjli~ znAW_-`-ev7LxR*)u_|FzMY2EHwYDk|OX<2nRK@T(G@rxT?%nh0@cFLccPNoaX|xLu z$mopY-N2!?+ABX@`-{o=BNwL6$I?-oZ1a~lHhEgAY^#JxX%;adJ`!2#juXU-it;P$rrrLq7x}@kl}{1)hwrAQB_UW4VsgGZkeGwwu-If1_BZI zD(8+x*7dB=zF7xF98A0tH;TlB#$|%9XJ30@`H!7SnGhl=?PR4^t+j1#ux}%Ub}JQ5 zrLOyYZ&q2q!?+L<&+sH8QJ=NOU|gWD^hMovu}P6&@?);_bu{jFspUE|Y>F;ZmKzM5 zOEtE;w)hUn)LMkS`QR1J4E4tj2I8GjJ^bymhoiCjBSTNsdlD{drZBF#Oq|VSkKabx zx`&SGN>7FJx){7=@{*N~?WDSr z1<%~X^wgl##FWaylc_d9MTVX(jv*DdlK$|s@VGFkDWs_c=_(8NIC?0aNnvA>l9)L6 oV1qle@~+v1Gg}gc9U2%JOpmb$Wq0gV0BUCNboFyt=akR{0IMw~ivR!s literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/arrow-down.png b/workflow/public_html/lib/img/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..58bea5165f9583760fffbc4dc675d4b3adc65241 GIT binary patch literal 8691 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/arrow-up.png b/workflow/public_html/lib/img/arrow-up.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6a98d9b10d81e4e85fbfe6e00000d54ad64cca GIT binary patch literal 8661 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 S68z2u!fC(TzJg!RhW{^F@;e9s literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/bg_dd.png b/workflow/public_html/lib/img/bg_dd.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8006075b10ff2ecd422dbe674953315bc7e451 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTz!3HD`7q*rHDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MV6i}jv*DdlGd$XzrC!WV1jkQg9FKIY-|RzI~lnX{`~)M x-=<*f!5y$#CgAqtwl+3{>X6?HF7XK@Feq#fb4YKhJP0&|!PC{xWt~$(69B1{F%19! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/bg_designer.gif b/workflow/public_html/lib/img/bg_designer.gif new file mode 100644 index 0000000000000000000000000000000000000000..c23c986f4ec73f1b19f858c3168fc1f4ed31e1d1 GIT binary patch literal 178 zcmZ?wbhEHbv|+GeXkcJ?`u^+x|Nj+#vM_*v4u}BBFfett^shYqR%+3lEw{Qqv+Vla zU--ZyEva)^`l+UD?%5x8E}MP5SF-MS&HZ1Dq0X~6cvvaLddCYdtI1k)DPU@aZs2B% zyi3-%nwXOcZdN~Aw)u7T?qAc6&HtQMTj~C+`*))JkL$uKj4OgOOuiNFnEYa+#pf4S eEKEHkGfOK4Ij63?nYmH&OQhhbpjkl-4AuaF!BbBF literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/bpmnProcessmaker.gif b/workflow/public_html/lib/img/bpmnProcessmaker.gif new file mode 100644 index 0000000000000000000000000000000000000000..406b654d5dfb251d7962625e10442e734fdf8e8a GIT binary patch literal 2235313 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%0A+BY1gp}=fuh~ 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

;aA1d6b8JB1LKROkb`T9 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

ajkUe3oIQm2A=UUjxcGsz^?}pzqYd$cBk?06 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 WrXF5c&OKcc8$3>f+a?4ZbkB$ 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 s5lZho-lub5zl8Zl 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 zν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
SwWQ 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%0Au6=|?1c2uLorC1iU0RNY_P6m)k#6;#KWbY8 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

Z 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�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�f(_s% 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 Reb3l8pLwN@a{<8W{{YIml70XH literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/bpmn_sprite_with_zoom.png b/workflow/public_html/lib/img/bpmn_sprite_with_zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3617c3df816e971cf476f6fd63cc4a97b116e4 GIT binary patch literal 67766 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/btn_create.png b/workflow/public_html/lib/img/btn_create.png new file mode 100644 index 0000000000000000000000000000000000000000..9cc1e7b22e80b3d02d99cf810fd957c61ef23e9d GIT binary patch literal 1254 zcmeAS@N?(olHy`uVBq!ia0vp^f*{Pn1|+R>-G2co$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~Nv&e6xjDKR8oHV|xw*MnI=LEHSh|@T zx|lk`^t$9Hm*%GCmB93-AoRN7)C)=sxdlL*T~doO%TiO^it=+6z@E0s#OfATS2H7H zQ=H~O^`>BT3s|oiPQCg-$LNEi7AdM>LcsI`V!{(HkONQpsd>QkUIa|of8=GZGcYhl zc)B=-RNU&BV(-oDC~$PTf?8`!N!C-*NotvwIHkN#*EC2}D>`y4nP8H6G{jI~(bU#D z2Hns<&H`_8gf?(4>2A7Sef3w{p5~K6MdlxN-<(-%Zoa*IH)r@T)epT8t-%`}5!Q_h@OcVK>JI^&KfJGL}=_Z>9; zYxu$9Uf{o;$DA*k#gA2H>Lx_XMa#O>JYp=Bd+cEK@u1p`2f=v+gpa6J&VS>bo& z+RIu^qm+qCKN40iTpH=}Y5BQbZ!Y(zB)*pnanyQtNNuI~?#W8mAF$^%7Q6ppo%dqv z)|Jzj?%>@2dtuZLza#Ru18*%}vG+2=?u6O<1hgTe~DWM4ftwg|~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/button.png b/workflow/public_html/lib/img/button.png new file mode 100644 index 0000000000000000000000000000000000000000..471e96df9ddb91fe15d40bb26b4004cd44a93c5f GIT binary patch literal 1672 zcmeAS@N?(olHy`uVBq!ia0vp^3P3E(!3HEhPT~I!q!^2X+?^QKos)S9a~60+7BevL9RXp+soH$fKtah8*NBqf{Irtt#G+IN$CUh}R0Yr6#Prml z)Wnp^!jq{s3=GUlnIRD+5xzcF$@#f@i6Aw46}bgK-3$yi_7w$*$=RtT3Q4KynR&KK z?|1K4QpilPRSGxtHSjHPPR+>ls47YguJQ{>uF6ifOi{A8Q?RM90veE;T9T+xk(-lO zY*k^a1UA|N*N_31y=g{<>lpi<;HsX zMd|v6mX?Cgqow*eU^C z3h_d20o>TUVrVb{15Cdnu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8)eo$(0 zerZuMFyhjbK~@!5ITxiSmgElu&+byvSi=17^xxx-4RPz+ zYwY+}U(M2N@0{8+;UZ(E(j=S7GVbfRS65c8swisWV_U-cjAMp-NXGWtP77{|czx=e zd&?(BYr&<3D)N19A3PuIxEL_aqT*Aws>Q#a?Ym2j)wojEh+F^ou#e3?&gewq&MD4Y z)i&-FirZJwqSLqWcb>RLc)+>iiH0-MO=K3?OFUTq{_wRP4NhI2uQw!0BaUp|YPzRt z7sr+Ff!xzK9Qv6RcDj31p2n9K-l^;Wyy5nY@+#8}d-(3L(7WB$H-0Ayxm;ASOPmy< zd@hqi#Ub*BijPw3@y}kYucsPu{S&WQwXN4bUrA(9%9=CHtRmiA^R7>uxu#{Kec~Pa zPHC1MJ13t!P{kEy=#MwQ#P-jPuWO1~+{hO$^Z5BZ;beZ5!e)lT zQZ0V#*|RG)?_~D3+OwzR_>X@p8J=@%q}0|1t8u9uJfX6t?YZXPA002Bd3NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lweBoc6VX;-`;;_KLZ2f zW=|K#5RLPtmwY{@B#N*;cs_fkn!9kTfgwwD2g}7v7n(8zGj)3umiIb(_b!N4RCMdS zvMKc1B84@s_B$qS($MHQ62p=>o6D&5NXcXczkg?HbkqKLzP)qz;hpMpwfDJWzC~Qw zf8&6w!^TOzhj?Rrnz>k=e7~Jux2<2(Ve$&QZh;wwtKAPd_P%~rTkd{H@oS&tslbIj zj`~YlUuU&Om((1cwI-_3=UkHLR;HU*4U(pn{8VUKu_i!4so7ycOn6diZ^i5LvyL{gg}1ncz7~HKo*S}4c=w&q-O~&WvV%@-$_!qn>)rWNS8v_z z5YH`r!ARsGx1!H(a}Dum0b3=AADx9_D*8EvpITs_`0rJ@7ku^_Va#a_;T5i zXFca#x6Zh*=8`05VbhyNbE~d~%&He@nztLGerE z?!(($x;an&dCoekH@iDe^H0`t?^U8VpEq?^-Tfpll4Yu-o9nXL=^xXc{}YqCdas!S zBU81+HKHUXu_V=o%V_7@AobnOYf{X&V?>85nfBNJye+$jwj5 zOsmAL;fLgcr9cgmARB`7(@M${i&7aJQ}UBi6+Ckj(^G>|6H_V+Po{#>6oaR$pUXO@ GgeCyi^dMjW literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/caret-down-w.png b/workflow/public_html/lib/img/caret-down-w.png new file mode 100644 index 0000000000000000000000000000000000000000..67299151abd1f3fcd0280a1e95c65da1c9e97edf GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjY)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYYs>cdx@v7EBk#mR$ddmA8a{`fkFnJE{-7{$CDEzSQjUV@DzXe|Nnp6 z{}xAPUERzDOZ}xXBx88D^h|EMc*T;-?VtiP!<_V@$vRyDRY1KAp00i_>zopr0M{2T ArT_o{ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/caret-down.png b/workflow/public_html/lib/img/caret-down.png new file mode 100644 index 0000000000000000000000000000000000000000..32cba195c6a2794cfc046be2db74b1bd1f7d047f GIT binary patch literal 145 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 M07*qoM6N<$f?R^`rT_o{ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/close-grid.png b/workflow/public_html/lib/img/close-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..e907aad861030c386ca2d6fe5ff4fc7ebe1d758b GIT binary patch literal 1588 zcmeAS@N?(olHy`uVBq!ia0vp^qChOh!N$PA7}4^49grhg;u=vBoS#-wo>-L1;Fyx1 zl&avFo0y&&l$w}QS$HzlhJk^3Z)QkDNrbPDRdRl=ULr`1UPW#JP&WgEjeSKyVsdtB zi9%9pdS;%j()-=}l@u~lY?Z=IeGPmIoKrJ0J*tXQgRA^PlB=?lEmM^2?G$V(tbhjO zrj{fsROII56 zw8T~k=u(Imatneo(=$qn;fCiGLjwyKZ2A?61^R}12Kq%{H6Z`Nbm3Qzq|nzFztY@X zxUt10L8%B|Vs%JyNM%8)eo$(0erZuMFuK!}K~@!5ITxiSmgE(^(Am+_$<@Ni0H)U^Ke;qFHLnDwHwB^B5~p5J5`u-dRcJ9Vy@sR~ zg z7;Y;tFfj3Yx;TbZ+)DcM|Gzym&juS`?-_hcj2nO03->TiV&qV8D@j$5Qx@<~Z{+$n zecsjvL4^j1`Ad!&ANX>B!GkH~M!v>;!7j;$V}IB@H!y8v3=!v$W+>gj#3Inud%~<) zC!#@R+5sj}hM7P4I~?8qwOey*F`9LAYMtN}eZV%ma}5*6zNS0e0uBcK4Gnez@d*c5 z6w>2d%)Z%&D4Nf568O(#a^}FbziyNMaB=ghI7>`$PUoAX;`7kn#E#=kqiY1yB+nD~ z+GoyTC@EKSU`XVR%VDro>0{a`I_r<&g3N0#7ACYFRnU&$FmUu`YW(Xkr*(-2w-(!{ zzky;Zlf#-XNlkK+xGlJ(jny+rYF3kvis24vP9`xE^MggKn@(O%;Ock0E7|pog-vB+ za>QmftAL45#TMlL_y&2fuNMy&I{|x*Z<~?SGd8x_Caob-Qm^h z`ny=~ZxsKSz$DDEFqYNOpk>+JmufRZ%8y04-#E1X!)*OS%>`<6ZU|q@*?qI3P{rh3 zb+u5Li(N#}yd~X=r&|o1)4tEFIXwCK#CxHFX+F^|eE-qlGo3+AxXV!Yjf0wf>LFKrotDnm{ Hr-UW|ep4?K literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/close.png b/workflow/public_html/lib/img/close.png new file mode 100644 index 0000000000000000000000000000000000000000..3103f63dd828bcd5d3aaeaff99eb786147fe35ca GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&N!3HFiZux8nQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jie`DbIEGZ*nsS*@ut9-`H9#w%kt=N>ljxcRF%UCs!=X9P z%eEihxUl@cA6xYt88!xv8O-;VCo5guQ}Rmle1zW{lZ#>#+_H_YA7j;ykQLk+V4H&gzGXcjnmUus+w9Sa;ONw literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/close_.png b/workflow/public_html/lib/img/close_.png new file mode 100644 index 0000000000000000000000000000000000000000..3c6d4cea21f65415bf88ce35ada4c42276f58675 GIT binary patch literal 1412 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey#=yWhUH6F@kRw^*8c`CQpH@+tIX_n~5u`@1BDVmjn}NZ`zM>#8IXksP zAt^OIGtXA({qFrr3YjUkO5vuy2EGN(sTr9bRYj@6RemAKRoTgwDN6Qs3N{s1Km&49 zOA-|-a&z*EttxDlz~)*3*&tzkB?YjOl5ATgh@&EW0~DO|i&7O#^^A3s4Gawx%*^x* zO-#+q40RNY3=EC*4S>i@*U-eu)Xd7rTmcG{fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPAEg{v+u2}(t{7puX=A(aKG z`a!A1`K3k4z=%sz23b{L1~dq(XdG2o~D9X z^Gic!K?X*aFt(|#j6NQ3mS5T|W{@;_g4?A^PKAbm92d48|DeZ)DGqLjdN#3G^4{bV z)2NkE;n?z+bC-+sm83j{e_X{^RTb7XY5m~3%qZYs!2gQzrnuw>=Gq0N(-Zof!uIg8 z|5mDMIN)G;;$eXN)WzPL7JRg46pdrF3S^MdQ~0K?Fq!`@|9{C228HNCHc0SA@L zgvMo?Upsg)_wSN+Se|jn$-TK@q1270O=9x$kssq1gz7rXl0Wsl{nP&>?&7osx8s>b zJDP0xzMjsWU|}}d(Sc=!1M4aQm+l8eY#b8IzWbO%b}+d#|F95c7M;Vab%#BrtvN$L zUOA|vv+T(pm%lIAI1DBU3u`v8u4G_-s%EP-qmolX?$?WjYu#1ZUq9?BPr1N$_Sb?( znf9|}I?nS>%~zJtiE!XESaFSk*MdLA+OfM=(qRsx$ZrN-FXahVMLg_NEf=`_6!EZj z2rgg=x@6DbmG|RNdw^99^AWj#=83`v9q$>ZrYl^1x*#Wy+vJJGm8A;tZ`#5N7g(Ja z4OzvM85m&7xrAT&d09_MpYrLePT5-eIz75T-G@yGywpzTiDhB literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/cmp-icons.png b/workflow/public_html/lib/img/cmp-icons.png new file mode 100644 index 0000000000000000000000000000000000000000..0f3a8f99a4822e53ffaa1be90ef189db721b4ec1 GIT binary patch literal 2452 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 A6951J literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-delete.png b/workflow/public_html/lib/img/corona-delete.png new file mode 100644 index 0000000000000000000000000000000000000000..1043f08b26fe0f1dd1af8053debf5e822d0a7186 GIT binary patch literal 387 zcmV-}0et?6P)j)V)drK@C(~k>;0Q~<6nKDDoJ8OS=0d)Yosci% zEaIJ_p5h6+QDMutc^lyeu!7Bqw};0ReJnKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0006aNkl#l9 zrqd!T%Pd?S!PWo|udC6FKbRP3zXq9qS+DrkVSF-ZE(OxDSP_;^;uNkHQtxbC@h1Jb zsKq6mtpxTX^hjFez-|jx<3d3{Ov9a;H4P22T05G;-ouF3ru9sUy>q@_bME^wFesgd z4nYBQR6w4G?KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0005iNklzaO4rZ#9-v5Sd03|r*Lwn z8{WoFjN%e{@Cox`{}Hmy*pF_sU|*SFPFG`N`TJZ9{Wy|zYC}+qI?Tre`tT(0y9twc zP?_=;+)IiF@Bs~G#t52l5sR?_eML?=8mB9GQw5p$yv60n$FRD=QIGrh zf?e2CV110wQ-Io85Z0xD&r;yFqM~UBF*grfEhagP(X@;3{rmVft}&7KEeNiUqid>jhrnOdPs0N~2YhwIoJ3 zUYCpVG=ts{LlcJZeaf4bq8p0OnWWsEar|SJd$0-}Nn;!X_?V?Ij?d}69U*DLH5{65 zeZgrQ&-Yjw{(a=;tgl5Cz9(kdhh?1>DKv c{R_Vb0MjpRjST>8zW@LL07*qoM6N<$f-K1vR{#J2 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-flow.png b/workflow/public_html/lib/img/corona-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..d2196458e689361587e2e31b012fae9ae726be7b GIT binary patch literal 371 zcmV-(0gV2MP)=s1Xtt5H{Z;}gGSUSYrxa_DC z|HUi96iZ^ZS@45j6TO z4(x2+%1c@BU!cXp3p6TRqldU&6n8moaKKBP;|dRO@cIvT_JR}4i^DcP+ZJdTY#^?E zdxgRmZjr&FXnO}0X7~_ep>U65JYj+qqF?t3O&&9( RBD(+p002ovPDHLkV1iyan3ezl literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-gateway-exclusive.png b/workflow/public_html/lib/img/corona-gateway-exclusive.png new file mode 100644 index 0000000000000000000000000000000000000000..451c2a744c52203c57042b3d2a8afb1bd6f42dab GIT binary patch literal 3021 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 b6yE~?P1-y6ydBaZ00000NkvXXu0mjfSb?Pf literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-gateway-parallel.png b/workflow/public_html/lib/img/corona-gateway-parallel.png new file mode 100644 index 0000000000000000000000000000000000000000..cdca84e65c233e166d9ea5782451d7430072a41b GIT binary patch literal 2968 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-intermediate.png b/workflow/public_html/lib/img/corona-intermediate.png new file mode 100644 index 0000000000000000000000000000000000000000..e778057fee117e1d2f749fabf80dbff56bf15b3e GIT binary patch literal 3921 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-lane.png b/workflow/public_html/lib/img/corona-lane.png new file mode 100644 index 0000000000000000000000000000000000000000..ebaf427c37ea3f078626cc897421ebf1be71a736 GIT binary patch literal 2973 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 z0002UNklF literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-pool.png b/workflow/public_html/lib/img/corona-pool.png new file mode 100644 index 0000000000000000000000000000000000000000..74d442245b53c4edc989e3b9c4f12a8d114fff13 GIT binary patch literal 2917 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/corona-textfield-rename.png b/workflow/public_html/lib/img/corona-textfield-rename.png new file mode 100644 index 0000000000000000000000000000000000000000..1b599bf3a4b98488a2f89a690bc63315fed4c2f8 GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`HJ&bxAr*0NCtGtJQ4nyr&mvf~ zQ^d0I?Xk3B9(jH0o=ne)?S3j3^P68z1WwdQL34v3 za$}1KH-*p#Xxg;)qxcP)&1^%0rkPD3k=t&wX%ZTVn58wQrq|o`w8(Kx5$RdIyqxF9 zdEfIKQB@Yz@x%iv3)l6Wul{1K%mb#znxwNOlP@4~7XTfPh}uVJ@3a9_=Rq?-$CGVw z+!uDSjJbXbh65(u?;wICGe{~!)H)<=?xVrzSTcCid5MzFX0uNffvP4u-zu(yj`NMjev05t%s z^NEC7kS=&%oy$yxw__PU7e0AQWpF6UvTVzJrLg1>XdNq}Y6dL`~4i4+Fi3gmAgpn&V8cKAJKldF`t8K z`2G#(1oz2v%#~{kZ?-X4Z{j@OhG0n8+y|(_nkeg_2dYRa1BvA7D4%I*nWm%CFj&7# d^ZK84{sY0I);3=*#Y$WwN}P*Q6H7Al^Atidb5j`%O!WMLI z=BiTaD>rmuRADfEvNG6lr9p81PE`GkZV~Rraynv1l zho+{+$=z;;*0#>eH)(VdJvJ$SgTLx#BcZ)I0#~#}9xL#_6XSlt!}5if?LPygo&S9eo!@$U8OckI}amzM{0A=sr@2*sZ)j0_Cs3_2h=ke?XX zIu6V(@X(R!Ke43fWR6w1OH0#438$IYXD0<(aBPlHTpVC<=YX%q!vuu|^DkVzt(kK4 z#bL*_Zjw;=N$@+Vs!8&C s%IPYJED{o3X3nRqF6F5uBeKDq|G*q`US37biW4VKoj!B+tRsUp01OC+)Bpeg literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/dynaforms.gif b/workflow/public_html/lib/img/dynaforms.gif new file mode 100644 index 0000000000000000000000000000000000000000..4cf8786799d33834c486c7da65d63f2edd4231ad GIT binary patch literal 402 zcmZ?wbhEHblw=TRxXQrbHTl@;%m3?lJ~(sc%%eX~(q^8y_wh&Xkq;-|Kl}Onf7{k? zlMnyC`|kglr~gYJjxf86A)i;q6vfA9a4Jx{*<`_a1j!nLuXo}K*_K7JFXF!M7W$lDz{&#|ar0mG4UqlTgh%Iw^ndCleAb?(eck|{m% zl1lAv%uKQ^d9q9sU75M~D=U*3__=1eFw1C8%hi-w>dY)5HNS^JN@AT8vxdT|90iRX zy3A@~o2%H=4l)a9?`7Z+IHfGDuFiA)#&v1sQ=+VVqQb(0f{#S`SVa#WVt)JX{X73p LpTGDyGFSrui-WE0 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/edit-table.png b/workflow/public_html/lib/img/edit-table.png new file mode 100644 index 0000000000000000000000000000000000000000..a41b4b806ab67a3762fcc1894daf01ee449a8b1b GIT binary patch literal 667 zcmV;M0%ZM(P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01EH`01EH{Laa2H00007bV*G`2ipf0 z6bBovbjFwf00J9HL_t(I%bk=#NKa&_6s<1oWYxhi6sTF zlcPrxLLl|W{hDrzp;fbQvi%_BjLc8Q+#_z{>ruJ~$LbSz%>{Sr9P@g$vHf7Gtg0`T zo`s(P#P4hb$753?ZeFiP>5i^qYt$DmC;GWE^Gqz4A)DKlT`rnz5OPL>Ap}AQ z{xR6!JzJ?N2SuY}b~}(J@wQj#D#bBmO~?URqaRJ$dD6zc1!ip)Lep~$@_*`|J-Pep!?hQ$uiU)3_P{AN!;EY1zrXza{p`g{yZ7&3wBzvf9VcJD zd&fXup!k!8k)0umK?h_lC{7sI|2IT6HMg|3wRd!OvT1kqHK}n+_II%=1y634m7UVe z#cgiiB&)YnM8wC3H9*#(!!_8_E6Qo>Ry|c48%96nPBRZ%=}^C;$Bz4Vad@yW8tj%b zaZ^{9^68WH4fd87*t&DizCL-rU~>s8r=>d>1N!{+WSJSnRQz}C66tf$+v6`G6X0UJ z$Z^i1{M{Nh9zlmWd&~L~4oq+ie8euV`|D+}iI z<8|ZE*6wgl<-m{?8!jn0E>!msY2i4)tm2{0zHUjy!bQs!`Gr|h5(`|MSd^sacvu{` lqPa*xl*eOdK_UmYSj3W$j*FSccpUTCYRhI-YX~q{0|3iG7$X1x literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/elbow-end.gif b/workflow/public_html/lib/img/elbow-end.gif new file mode 100644 index 0000000000000000000000000000000000000000..406a88dff55195c8f8fbb65c37a10280e9689e25 GIT binary patch literal 70 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01Cw}5e&gx43+Bx!j0#)d SwtMyY(nlWCo>_`ASOWlykQ)2| literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/elbow-line.gif b/workflow/public_html/lib/img/elbow-line.gif new file mode 100644 index 0000000000000000000000000000000000000000..e25ed03fb6cebb2a0f891c0730f50977246ddace GIT binary patch literal 72 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01CwM+e&gx43+Bx!j0#)d Tw)?qX<1KZol+K0jj11NQyrLT7 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/elbow-minus-nl.gif b/workflow/public_html/lib/img/elbow-minus-nl.gif new file mode 100644 index 0000000000000000000000000000000000000000..928779e92361aaebfe9446b236d95cb64256e443 GIT binary patch literal 898 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$lae%R5x_+pfh=9;jCRWxkA&~=x h2Yp#A(~SZe4mdO}wqloSIC&-M@bZAgN<174)&TX)MQs28 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/elbow-minus.gif b/workflow/public_html/lib/img/elbow-minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98 GIT binary patch literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5duiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$uiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/elbow.gif b/workflow/public_html/lib/img/elbow.gif new file mode 100644 index 0000000000000000000000000000000000000000..201c413e388369bf82b1a1289baf47fa3cc06f40 GIT binary patch literal 73 zcmZ?wbhEHb6krfxSjfcS^xx^&v19+iK=CIFBLfiVfC!L01Cvxse&gx43+Bx!j0#)d UwtMyYQa?4X6w5`|G{qRK0oEWJ9RL6T literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/email.png b/workflow/public_html/lib/img/email.png new file mode 100644 index 0000000000000000000000000000000000000000..d73df4334fbb76b054594ae38a39336f47096c6c GIT binary patch literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47zG1-LR^7d7Z(Q%AMI5|0i z<$*MW;q2-P*8mj(^8NjNfuxIzi@UoETqTeJ6oIP-GMt=%4gk|IDTrdAGPpu88$}n` zWP~wr^Wl0RTEHYo8QhNuJ=j>1hS90OKnW}f@(X5Qc}(ooU<=hB~L$ncqJ9>!Hr(>Th@D z``Y*JY5WoE6m)9-(o3c6lM6L=d>6U76zF`_64!{5l*E!$tK_0oAjM#0U}&ssV4`bi w9%5i>Wn^e&V5$pb7#N)7m}rlpAvZrIGp!Q0h8>}r%|Hzdp00i_>zopr0QjEyRsaA1 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/engranaje.gif b/workflow/public_html/lib/img/engranaje.gif new file mode 100644 index 0000000000000000000000000000000000000000..d235cf293e0f4130eb71073f435df347c2e31a2b GIT binary patch literal 834 zcmV-I1HJr5Nk%w1VKM+R0J8u9h>$R7U??~!AV@$!@bK{9;NZx}$gr@mprD|TkdTOo zhM)j-&?! zKy{|27X(5qun!y$XnUQ5JPZv%Kmrgr8ogUiSM)U$27=-DC^{B~g90fVwqQp_;$SEc z3O(?mP{<+_jNU*88!Q$IMET5!UC#z?2?`25AuAI_c6bN}W(5mB3j}9v2M7rW2!;SO z8chN?oiTR`V|!T#l$4f@2n`N0LK{s#J~0eh)%;}|LZOZ>as~$>S;+ARgFxy32GxsY0Y<|F7&Q^1x3ObKJt0>% z3i8gPo=fvIy4(pRl{o_lmrr6-wLS1^IZ7CZc@_V9c<-^wRJb5Ir$T-y%U>kox_%~E@p%}%OHwV}@ z0AJ7W@(P226;nYSa-~DzEBX*}9!NkzB~^p@B=KNk@#V4$Wx=#Kz$tYN0tbIbv>3yS zRooz;IGJ$gRd$7$2*&^%CNaP}0RFJnVhjYvo{}c^;YU=qgaV~*5gtKhU{7FaVi2+z zal@Br$#UQwRYGQmnS}K5LRwzZQk4yh{dL!sSY|`Soor&T+hSb}Q>K{R&`g!XSVRb%%j88z5<(7>0xq1Uxr7c?RF$S)X$r9_t11wh$epv&s_U-2 M_Uh}eEkpnSJEUJ@~ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/events.gif b/workflow/public_html/lib/img/events.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a0cd8fe974ed0469e242597d06020ba012e59d3 GIT binary patch literal 1167 zcmZ?wbhEHblw^=#c+LO<|NsAg_wL=>w{M?4d-n9{(C>lAojP^$ge{MfN$hYug#zkmPUy?giU*|THEj;&j_ZrQSB^XAQ)Hf`Fl zVZ-|M>({MYw|4E?RjXF5Sg~T+vSo`FEn2v6;erJV=Fgu$Z{EDwvuDqoIkT^?ucxP{ zySux+y}hlit+lnarKP30xw)ySsj;!Kp`oF^zP`4$wx*`0y1Kfms;aE4tfZu*xVX5e zsHm{8FfT7JJ3BioD=RZIGb1A-At50?K0YokE;cqcCMG62Iyx#UDk35xG&D3MBqT5} z(BI$R&(F`>+uPIA)5F8V&CSil#l_j#+0oI_-rnBM&d%D}+RDnx($dn*%*@Eh$k5PG zUteEOPftrrOI=-ERaI44Sy@R*Nl{TzUS3{KPEJ-Do=x_LOXtOegchmHS0x4; z+}IB?D1Xop*yw)jh!o$`@E zVKci%h)p=>T#tlBGWypH416B;w#vpZ_-|x5kR2z@;C5u8VgRcWyXO%Jx6hB68ibhy zw?s~Iyuh=~@l~$C45zjS9oEb#EStInJe2sg{}gCgJn3Z+s5`Plp+nJ4%2Lc?0XrXi z_6gz@sCTULaxq;AGUA12TCJc=koOC~h@9 zDxk!+=gFl@_m;A7b#O@XUKA{Uq%_{DV7yJCd>>O zk2rD@=B8a{s*MoYFQhtIO7m1;=E^Ap3Z!Db4zJle)46np5C^K*Z==re&74z e)?V)hMh0!6=$mny+*N?iV(@hJb6Mw<&;$U3kys%B literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/facebook-16.png b/workflow/public_html/lib/img/facebook-16.png new file mode 100644 index 0000000000000000000000000000000000000000..13b6356cb90a8501f22e2cc9d15ecd28a769bac5 GIT binary patch literal 629 zcmV-*0*d{KP)GAUy49pxXU>seynE@bx5PE=s zk@4SgrvI!=3?ST6XwUGEg~gKP^Y>q1S!Fp91`wM?K#&Wjg8{?_2q4CQjOG7%g}528 z0Ul0P2Bwc+z5uoUM8S(%eZlnecV8G-K7Ibmz{Jgkq5JbUh}}$IzkNK%#lpZK$j1)H zAONC2y?Vm{5I~HPg{zMJ|IcKJ%?*r<--KBNgm^8#eE*Hrk)PlFe#`Xk(|3knzyHAT zw{Ks-js&rP{sQ{@=byhQy4LqcG6WW_0keMq6)^q!{g(lT*Y|}$6ai@v|L4!&3`{>k z3@CQVSO!)AqQPPyE5yZkF&qaId->=I1Jms*_Zfcu_yxxx0HQy?`^@m?&yRBe0mc}b zyX=^-5TB)}2oKQTj10s8U`ktPkWWEA#s}K->=;yl=?MlxOV)vDkY1nxKY=0g2dl=fA76rLm}cjM$zYnB zUmR+{PX-oHWN_ec!QKVASo!W*%i$5p^6Td>oL+EDT>_@}&yGRi!vIJx%dg+R8F<;5 z7}&Yk35LFiASayt^V?5`S3tdt>TVUH|NgM<1SV-i1`+@;3!i6V`Rxt>?WY;?06hUx P00000NkvXXu0mjf5DO)W literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-annotation.png b/workflow/public_html/lib/img/fd-annotation.png new file mode 100644 index 0000000000000000000000000000000000000000..46b319190b1ef1caea9f5e0e66f54a8bcfff64a3 GIT binary patch literal 1428 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFso#SM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcp$o0y!L2NKW( z>+top^2{qPNz6-5^>ndS0-B+hnVDi`?&joTU~FmR;%w|{Xy|I<Q!gkn8Iua(|ZvxVISmL?a08u#OCSZ7*cWT z&2(=KmqdxSvomJtWSml6(7cW7n&_F8q`KyY$4RG%fGasF8w1{{ za*G&qi{+W>9BG>J`q=O5)~3E0=W@^KJX^gyZPsPW^K<@J@Bc63T$PsB;+M*@_yAj; zqjiB~=_JF3%m)nB3XEr}biYoR$s(H|VbaJuVbSyp7BAS66F9a6=0)-=UNqjDz{Jy# zrZ;tm^S1=<&ZjTggBSFBZ)GTRQ2rsrKC|M()HbEn4>)<6EH5y>I;dpv;JNwxgK-N( z9Zn%6!-j1kF?yFzOJneV%*r)Y3kqx;K~fH!UF6$`F`N-I@mj9@=TFa5t6Bf0oo2aH`pfrc^mYKb1H|Zk?r*$K{SQ{uu60TCYWjehP;j5665 nH%&xQo3qn8g=4DfZ@~lx6QgwP$)(?Rg33uxS3j3^P6K~WTNGRc84 zAt8hcyWQ?eV6j-pQHWa#_`Y8@PtE!!TYs w=TEmR61wIZi3cm5Gz0CXgh2QcrOWac>FoH0Lh$!0g3>v0+P zzyufq&+)tgzJUd>D_eS1|7SFt{wazDeTZ6XX4zK)IOPdg0n>UCAc)Olz}k@@36PWD zf%z3#Wy<%rkTVrPjtBq% literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-arrow-right.png b/workflow/public_html/lib/img/fd-arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..973cfcf7ef9f6526e50b2233f69ab5aa3b2f96bf GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP~H!H8Y=!GJNB|xFmo-U3d7N_Sz&i(SKggS$%zX2K#6jLYydTaVR=Bia-xANuLHDvXKX9_2abTFFqw(xTf?iix z!o;<%HQT!O^69Wm4%XAII=teDhy3-Z&fo)|Z8r&pf4e)WmeDLBW6S3t!G;V2-UEks zq@3Nn;_3XUC(5qRTpRSVaf|tk;KTmc9IAA4vKHqlG9{`%PvH5e@hsT&QHb#WTDSQ9 zcm5n!>b>T5pG)? K&t;ucLK6V5oPDkU literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-audio-card.png b/workflow/public_html/lib/img/fd-audio-card.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa79070016193140df01ff2c3d66c52402b7987 GIT binary patch literal 879 zcmV-#1CacQP)(UU!0>*nA%xfxLj0zb`hMZ|op1XZu`m3{7&D`_K6c^!%%ACW zx&SC4L=uRtwOwOO90Wo4haVq3=Qz%ql=9KS?K`&=fY$o;_uhTK)ND3SZf|eDw6U?F zf*>G@B3#!cnM^V`IB0XZT;s~@T;zFP_1^u(S>Tp)WB&SOW6bpNV=v5XZf>SlS65{i zh8SZILa;x8FbqYdQt?u$l$TDY{l|}&|2lK#wVHGG?DTh6X6HtimzR%}%Vk{G#dTd0 ziNpavT=jaLY&JXe;)%)9`g&W9IUluvstv(0zd*~A%ra!i;Rqn zpp?S%Jo5QG-ENm;GKuf|SZnb-k6bQCDwX2dv)>nhUzC*cZ_o1z`FuV#Ffc%~*`(2E zu(h>?loG8qzVDOE<;Y|*c%DbA)#B8tsgFzRYd*Sy@>@N@*(99UI5-A5zMLL;A@WGXY|3e0-dg=M#n@)>=B94q9ts6XPmH zwN}9xQ>oV*Hy6M9`pbT_*&FlMAD(~X;<-}ksngosrPu2c$1wm>N`w%&DuEEP74Eg| zr=Q$C2bB6-a9r1&T3T9KoSd9|r_*(mw(|`k*zJnw% zaqZgGFKYFA`IV_xPYNNjiA3T^7>04ZUf-=&tN-+RdvWn-@x|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFz?L_i71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxX8)s`r=obn+rF# zxFjeQ;Y+LzDGsSDNYxKYEzU13N(M%Enli|$0xRdD)WnkfqLBRj99Y-~WaO9R7iZ)b zC^!e3DQNg6CTHe>1T?`qe0{Av^NLFn^O93NU2K(rX6R*RrdYX}8yXlGnz_0-8@m}A zx|%q-x|ukeIyzb!Sh^Uxm>R(Jy5uL9=BDPA!1Sg7^_rNN8k(7znz=Ze0Am`9UQiN( zg|}5`F)+P`q!#5CL*v>prv%E%$pnS7RZe1FI?!dhDXD3Rr8y-^`ao%YP#i*3>f!n{B4CcQ*igX3z`!K!>EaktaqG==UyqPLk>lwlB5MVLSb7^d?PsZpIPq@c zkKqXFHrshAK*?o;>x7OS84I=T6}vW`sW6Fxb4qXf4^IPzy6)&_c_*ezL#rWUfEQWdCkUg-hv)skqy=dTfMh# zyBGg|%cO&P$)%eN{U31O@iz$Ro!zqO@v|?>XRQgk{47m_k z;444FGV^G_kz>zJx5r6b+_~1HDe~y?Jx3;G&#dBSTfpmgSgod&t#TjR)4b_@nUO0u z+|dqPTC|t9HILg$MEdeuyR#|kyOdsN{SgaaDK;r)NfhUwqTmU$iY4N_ZRWOnMNE5s z)oS51*4!HcOYWGk)fV07wf+#d@4CiyPg(mYm6=ap{#q1}7gTe~DWM4fiLgwE literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-button.png b/workflow/public_html/lib/img/fd-button.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecc1e54a5159afac2994a011c42981b7cf56d4a GIT binary patch literal 1042 zcmaJ=O=#0l91k0gt!@g#iw^XeO*V&Zl73`1wvMi8UD4F7E362DS@PC~EqO6{wb}Gg zKS1X}uY-Z;!HFW`!JEkRrl3#|rzqR-lKi|Sw`dF7| zkB6eDuGFZQA#0!ewYQP~XKHbgEW2?chbPc9F3A?8Vk(+~Af?NBn1Ql7clH&GP*iK5 zmd)XubV5*&?vq`N&(Tf7rl`oUW6H`5#9#{MH6u!Yd%8jcO^wo%A&HgDI4o$R^A?<# zPiK|+86~XJ!$(2H5r}{eu?!r2*02R9N>_CSvUkl44XO}46QwtU%1L7&jw}d5zJOO@ zIS%l=j|+x)o;w8mEazuf^739TD1>;yKLlzIO}ts^w2%>#HDBZur3)CF0>hL_C0{Av zLsp*Q!r`#1;rDw9!fVeNSa!UI-CI`>p{-b&i8W*ZS5clqMI5C`q?;+|W<%DnYh@w@ zV;tFJI3Me#R0m4Z|Dn3xK-)M2x8nV$u$`SVA(MeNDq0F@+;p$&$`s-jlrgfh2+h{3 zI95Oy*#%^R_yi9IBw5i6*Kn}PkR%~x*jP3cm=dEj(eP=SDkNiZzsLr8F&;>8Tp~D< zNCxAfSS-wjMNSN{b*_k%q7DsQ=c-%Wp{87S7<7|(7NMn`gKE-3I;bWsXw72@Hr14h;DQvxD%`!ap_8Qq5g~Nq7(!v=vG&CClsXOLM)0Rp^%28QED-Mw8qqr zCi9i&yLU1n5CnVRzI*50cMj*ic|yDW2@oOR{R+H$7ft{$RaCUAk6$5k3XJ;8;a>VA zAiEI0fS6OuG4Dg=K>2#CFnRauTPTn$D=WkpbKmF`!6SZ0m$0xFd z>7t=pT{y0UEd}b~G44&No-rN6i{~FhL=4H!E>!5G6BQktfAR&o^Bdo{ENp+Xu(hqC zX=Atji+ekE8*LZNAucZp8Z8el=TSO40juL6q5r|1a|>u+OcrxU=;s?;`vIZAGhQlK^&7E_<~wjN-QoftBaNBcDw!Tc^>D% zy(=>_kiD@(BtRdo^rbSH46@lQ*XeYcgOEz4kW41IrnAJ6!R+L~Rmz3gS-7qXTm2H# zw()s>o*fv5fmW-<4ydNH!Nmt7=z)XWrE{F$-Cx9+Vv*}Nl?sZc$@R+WYT!U06wrFA zs6JX^2ZU0+&JIQ*5xg#!*#VD0_c7!^ZT?tTKsFxdjmqXGCKCx?Xnh^|T+Vm1wiXEZ z4%$K>0))Mudacpmn{151?k{u;3 p*@(A+W-$_Zh&{kk9OC{JU;vsMV$Ze$w4wk2002ovPDHLkV1grtEKvXe literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-checkbox.png b/workflow/public_html/lib/img/fd-checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..a02d8832f6604a511538a2b37636ed3b2048b268 GIT binary patch literal 3081 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 XHFu1r0f`@U00000NkvXXu0mjf-v+e> literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-checkgroup.png b/workflow/public_html/lib/img/fd-checkgroup.png new file mode 100644 index 0000000000000000000000000000000000000000..4f191f073cce06a55babf36659334eb0e0f99467 GIT binary patch literal 3343 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-clear.png b/workflow/public_html/lib/img/fd-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..5e8e822804ce269ae1bb7331dfb47c0bf6adfcf5 GIT binary patch literal 3069 zcmVKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0003fNklR5`5OE{l6aZ3ee+z9_ic zx|t`yKF&}|#FtP_*s6HOIAI^7jjuFpAeKY0&!XXZalf3UEW!cDF}J00000 LNkvXXu0mjfWpcIy literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-clearw.png b/workflow/public_html/lib/img/fd-clearw.png new file mode 100644 index 0000000000000000000000000000000000000000..4d2f0e52d0218780ae46bceb46f3b76eae16d370 GIT binary patch literal 1181 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-close_delete.png b/workflow/public_html/lib/img/fd-close_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..5b39f7c210b6d76c759d3d02e319d666692ade03 GIT binary patch literal 280 zcmV+z0q6dSP)aEV&|U@_k+0SO00003xxEEP)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi00000 z0Qp0^e*gdg32;bRa{vGf6951U69E94oEQKA00(qQO+^Ra1sfF?1rI<@w2FJMeS?unqjp=JZu{(CSQbF;5&{%v)@3E07!la^!1EByhn+CTsR002ovPDHLkV1lGhZ@T~h literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-datetime.png b/workflow/public_html/lib/img/fd-datetime.png new file mode 100644 index 0000000000000000000000000000000000000000..97dafadde2f5f3be19062a8336530347851836bc GIT binary patch literal 3316 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 M)78&qol`;+0BDV=5dZ)H literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-desktopw.png b/workflow/public_html/lib/img/fd-desktopw.png new file mode 100644 index 0000000000000000000000000000000000000000..5b6d4ca1b08f350741790da5fa2359071bd38039 GIT binary patch literal 1311 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFz?L_i71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxX8)s`r=obn+rF# zxFjeQ;Y+LzDGsSDNYxKYEzU13N(M%Enli|$0xRdD)WnkfqLBRj99Y-~WaO9R7iZ)b zC^!e3DQNg6CTHe>1T?`qe0{Av^NLFn^O93NU2K(rX6R*RrdU}TxH`MIx*55e8JHOw zx|%q-nwYv8IawMTnVA_G8Ck;gy5uL9=BDPA!1Sgd^cv&T3ra$;@U{vq2Bz1L)S}#C zXk0tylt5WInV@jC%1O*i2f9o*B{eOvG^a#KA1JL4ibIG>eH>;1g@K-PNiE7OOHFYr z%Fk5*hpSa4Ztoi4bTU+L3U2Qj;?xUwFH#zWc>$QPK}>j#0&?JaGBppF5sQF1?pT5c zD7XLcba4!+xb0jAaF?7VGRfqdo89^L zo10w`h9Mkd5{@)=)9+s+o*h{C=KKDa?|GmwIDZ}tMumk9V^gK^WAwWtA zj0sO^8e~!_(3Jv(>jHC@Wx>OE485zX#}CuIRd|{tE$^lY#bS{+P&*Va77M6Ws~}PS zX{7>y>bl)7w__LvyiTXfJpnQ|n@wIQm&=SqLUDlY<XgC$BRX>)c#|t7F z9}$TN>8=O3naYy~(AcR~oU~eZGMBsf&pQYg{42l!LT(ve Tk~Lv$00000NkvXXu0mjfj8fj! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-document-text-image.png b/workflow/public_html/lib/img/fd-document-text-image.png new file mode 100644 index 0000000000000000000000000000000000000000..56c4f0bfc7e23fd06f37b63b8f613354d3bc44a5 GIT binary patch literal 647 zcmV;20(kw2P)^@RCwBqQcY_UQ4~G%WeggUSv2*7 zfFTh}Vpi>CQjUUH^nF6c>U!5!-bkJJ*5~ltLC=wc}1`XaWkQ)MOeb$&^g; z;=R|*WP~a{xbxn;_s+TJ-21fW>+9g5Y1%WIZsOnLlTxao#$!w-6MU`LVe*0p&9`(q8lb1rEW&}Ee>jwuS zJCn&^Fc@H=SQL_KwJQ6mR0;tGhMNC39Nmu=g|Rm=KAi7d(P%mN+6Ei{`= z$=+_ah2(fz$aFdl-}h0eR6v+Z3B+36I`2{ zi@Nan@KF4^t}8P?AnpJYa1HX=Y-FK-b_TPtw};&FGLp7!^5&Dp#VE5Vp>Bl#p#pm1 zrcVjJ?eBx7Bx#ZDx^5y?P3oyG1vF^pFzI=lrU`>)zRMWKa@Hh8_UGy8`So)775-x= h-#=#zm*bZJ0|19sO*yhc-QxfN002ovPDHLkV1oGJG#&r| literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-dragdrop.png b/workflow/public_html/lib/img/fd-dragdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8006075b10ff2ecd422dbe674953315bc7e451 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTz!3HD`7q*rHDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MV6i}jv*DdlGd$XzrC!WV1jkQg9FKIY-|RzI~lnX{`~)M x-=<*f!5y$#CgAqtwl+3{>X6?HF7XK@Feq#fb4YKhJP0&|!PC{xWt~$(69B1{F%19! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-dropdown.png b/workflow/public_html/lib/img/fd-dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..241d1e714d1ac76975d88d1ffcbc1a574b6eb5fa GIT binary patch literal 2899 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-export.png b/workflow/public_html/lib/img/fd-export.png new file mode 100644 index 0000000000000000000000000000000000000000..78fa97617797ae68c304fa6c231aff12b0da5b58 GIT binary patch literal 3125 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 P00000NkvXXu0mjf&$-IU literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-exportw.png b/workflow/public_html/lib/img/fd-exportw.png new file mode 100644 index 0000000000000000000000000000000000000000..013ad50fedfba3d22fef55827f8f04da2d115c5f GIT binary patch literal 1227 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#H3J5_p{t3LtBI+rk&~sdk(rs1 zk&z`#uSMv>2~2MaLa!-Ky`aR9TL84#CABECEH%ZgC_h&L>}jh^+-@<#X&zK> z3U0R;iTt*47)NX4x; zSND52Im#R_l%M=YyyeP-;$+sX;oa5s4k9d1FC;B6*&6ylB=_o#2k{rKTvOxK&E@m_ z;3471$;Er{tKA;T-G@yGywpYEUL@^ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-file-upload.png b/workflow/public_html/lib/img/fd-file-upload.png new file mode 100644 index 0000000000000000000000000000000000000000..db8b3aff55b713f39c78f69bca179b9212e140dc GIT binary patch literal 18154 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-file.png b/workflow/public_html/lib/img/fd-file.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6f4c51181e4f362287abd1396efb71c240d217 GIT binary patch literal 1322 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-help.png b/workflow/public_html/lib/img/fd-help.png new file mode 100644 index 0000000000000000000000000000000000000000..5c870176d4dea68aab9e51166cc3d7a582f326d6 GIT binary patch literal 786 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 Jvd$@?2>`kTC|Upj literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-import.png b/workflow/public_html/lib/img/fd-import.png new file mode 100644 index 0000000000000000000000000000000000000000..37f55e35fb43a01059f3fdc3ec0ab33e479610b3 GIT binary patch literal 3140 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-label.png b/workflow/public_html/lib/img/fd-label.png new file mode 100644 index 0000000000000000000000000000000000000000..306e57429100e1c5d81f4af62cac392801614d8a GIT binary patch literal 541 zcmV+&0^K(ly> z`*?g9(9#$!bPd=42lOzYPKVBIolt}IP{d(CtGGG_puOk{uX_33bn@m*s;$Jhf-9H{ zQ;)OBCD9?iV56?eH%XQkYjN%8#tgGRetg3k?xwii1GN@#3ujWi#ra5#U7gS_USsP| zVqAz`)}>^h>#A&$eHmrY5l~WB<*>KczIU6Y@$qy^iE&t0z8%*B>!& z?TqS^6wh!LCyv?FgBSo`;0`{H3UskW>&##|vew8RdeG9(h9o3=imjsnt>SX@vNnL$ fu|1hekE?zI!|8Yv5ND`+00000NkvXXu0mjf7aQ~a literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-language.png b/workflow/public_html/lib/img/fd-language.png new file mode 100644 index 0000000000000000000000000000000000000000..871d53d09ab6ed995579cae52409d5d3bde37f3e GIT binary patch literal 3398 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-link.png b/workflow/public_html/lib/img/fd-link.png new file mode 100644 index 0000000000000000000000000000000000000000..5cdf5a70a2d7f4ca093c8c92b557534c5c178d56 GIT binary patch literal 1517 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFso#SM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWv2L<~p`n7AnVzAE zshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Ys~{IQs9ivwtx`rwNr9EVetCJh zUb(Seeo?xx^|#0uTKVr7^KE~&-IMVSR9nfZANAQKal@=Hr> zm4GgVcp$o0y!L2NKW( z>+top^2{qPNz6-5^>ndS0-B+hnVDkcY-!?R=wxE-;%w|{Xy|I<8Iua(|ZvxVH*^!>0n@BiuZJJ45_&F zW`?(hOQ6K@^ck)0Gf%kjs!p1~yK#b%v{;T?*%Q;nDXu3Eookzvq8K^DLubnIwo5rH z5*>3?GQGqW=S*=+6gu|*O8J-4+23uiFMf7q|NA@D`>WrruYUJ^hGDyt;^la$%w_gw zK@R`<#=W-6h_3jO+HksHf4>6nZ$H+b29ZK4+l_hr!#<0~c&nr?5RazK)H9TU>>4 zGVA6ues5R$^e6|Io$XiUk;^(-BQfjH$JuOY;*;bzc5KU>>Y$rrcO=0kKsKeB&BUPW z)Bl!Th3D6<(>;9X>6;5~-z2%?FWhl7NZRq>zRTxT1_rZtb!od!o;`Qc!r86aJ4GCo zmZ;A>uMin{SWe>1u60@Gop$pSzpPgh);2kHCtYD?=4;N7h98d_J2{t}H2$eGQ`cyF z;g7GE4$CK|EO}}mpKfCi*cfs3*}_^+e!G!k{$b3;H&Y*PiF*F zw_9HH3NX>#@LFyv?=6XJ#XS!v$vvIP>6>AG;ze^>=(Y`ObMA?|v++$&e;3MBdtF+m zW-`l}ZLieqJ+5`NFH`5(oOj7kiE-}63vYjF&d6}E(LT?-Aby`_mg2YGhRz#@f|%bW z@=txLbYP$UQ-i?jtW|;0QW|z~$)a9M_s6W{G3nkQ&TIMm!ru@ptV00~q9pa2}ee9WbD33=_n{d&o}+wAV` zh`Mfp8{j;yUw{>G-}LQ|qxd=jo?>tZIA{rU7UwDO*#Z>+2gblGnlI9;SHKo{1tvWJ zX)l3mKqgXt46xEK$OAABuu4LqYm?uXNkV?me_t&NC3v|8-a>|qdZi2vF0y}mGQiMa z0UHG9QtMF2o2fj=CTd=<4w~qI=%?Xw3*ztwcn^cCEaV_Pr_f}&hRJZb9ewzShxR6B z$_7bErq6P)>*`^-2cxw_C{Pd9~9c0Oe(~P-^{GfL|d00T4uA7Qo#%=Jz`w Te%0YM00000NkvXXu0mjfB#VK7 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-map.png b/workflow/public_html/lib/img/fd-map.png new file mode 100644 index 0000000000000000000000000000000000000000..f90ef25ec7f1cb0fdae38d9fe2d9edeee9928ef1 GIT binary patch literal 804 zcmV+<1Ka$GP)mbpQb1@7I~O+ue5CWtZi#AZox@gcwb{Xkx^Rf;Ty8yn6DWhJV4kC*wg94<7Vt zlteKm5+jKLV^qM1yt2HO4YZw^&a^Wfzb_m+@y40e_0^+M6ajz$03Zl}fU=sqfA9W} z@#^~O(a%3QB{YI^J_A4y)M^1_vjjn1H`Mc5t@6>y50A!C6seTL>`UqQ7p$DgY@K|> zQm^as;HM{#Qwj<3}(>R-AM4&+cd0t49%y2X`UaCBJg8YmB)K#uA{Z>9n zOp8>WCg#&r06`o8oz6gaIn`fY2FR)ssCr@3rc|5f%`bIJO$zbt__PK3gH51Sff`H}0ZWac9&q~*( zO@qNscV0VSU%X#sYO9)Qx4M=(eR(m}UFhondELHSnO2hr&mMO3 zv6gmw!P2y#u0c!?LPO88NyxOTj>XWm>*77F&55fo9Z?)iynObdfA;SdwVRl$W~G3* zEGt!2+1T-%ja32&!XdoMS_mM#IQK#{6D_nvjYu`GlvO3XdE)qYJJ;7|k1|%Oc%$NbB*pj^6T^Rm@;DWu&Cj&(|3p^r= z85p>QL70(Y)*K0-AbW|YuPgg~7CCWEtB*GeXE87^%6qyvhD02GdtXS{;t$O0#wq?tL#Odqj5 zYtH?4E{1ROm+agaCyCa!PYsqnEQ%f?H2YcUCfbTxcu6mx~{aG_fZMWYWJ2EwD+m$agf8?nHvO}b@~qw(qHyQTE%n!r_v$RrdlhjoS<+#9 zr25;`xnDTT>nq!MF}!{Z_Q{U!J>Q l?*pFd$6_JJdcXYBju#2G*sPc-Rs#$@22WQ%mvv4FO#tblp-2D# literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-mobile_phonew.png b/workflow/public_html/lib/img/fd-mobile_phonew.png new file mode 100644 index 0000000000000000000000000000000000000000..08228588f8199a81096a826a5b0437ea5a1a32c7 GIT binary patch literal 1302 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFz?L_i71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxX8)s`r=obn+rF# zxFjeQ;Y+LzDGsSDNYxKYEzU13N(M%Enli|$0xRdD)WnkfqLBRj99Y-~WaO9R7iZ)b zC^!e3DQNg6CTHe>1T?`qe0{Av^NLFn^O93NU2K(rX6R*RrdS!dnmC#`I+?qg0VB)M z)x^ow#MITu$wkPRSOm;*RoV)R zfVuU(r;B4q#jQ6pHgYi;^0Y+@1`3o4-#>o5pt$f#ctK%ELBRbZju&p;yy?EiyYYM9M6GcpC$HdRApK+ssbFy{g-bcxdTNL** zZQj)4`GRd%TT`*~VeJ=^pUU;}g_K0iywoGg|5S3#lT#@R^FGeG_2A)VftzYiw3gV) zPTrd4>nf(C;)IOq)t>BP<6SM(l^6J>G)4bI-&4N1j`BPQRM{3XpKxI6Q`9fLx8!j^ za*WSPMz_9NepHBTmFxf4=`AN+VXDErg_SslFHN7&t;uc GLK6Veqp_X< literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-move.png b/workflow/public_html/lib/img/fd-move.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4ed0b829983484398549841f43e09ae4608934 GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^TJY5_^ zEPAJ2w#{P-?=Vw|NzIvoI!EXwCZX{nix*)G}_K$tjZ)i*WNxWMXez4RncyGtDX2EGQ)P3wXaPUeb ziBH|u$+zv`Tc_-&-wtou_-5h!jNL8!W;`{QS$%|K_G>|@$z1a}oAsZI_N#m->1}5E z-#7hQbt7}y%vFEZuaYed<5{owej(pF;bZ4+|NQu1j(@{Ww}01)B=~`TVDNPHb6Mw< G&;$T%(rUQ? literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-move2.png b/workflow/public_html/lib/img/fd-move2.png new file mode 100644 index 0000000000000000000000000000000000000000..eecbc4252d2798b9437ba3feb7728282d2e0b402 GIT binary patch literal 3181 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-panel_blank.png b/workflow/public_html/lib/img/fd-panel_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..7a135f4439abd2ae2fb941a4a904a9e4cace852b GIT binary patch literal 1138 zcmaJ>U1$_n7`-;3(HNUme27xoVN%2gcYZe6Y-Y&B?C$Jl7c*QC`BZ+(3eI`v=(X_3MGALNfQMHMMy-%s1Kq@A4-BqUkV}EJ24yk;5smK ze>mrS=lkw==Uk?{b4TsoS^&U~bV|;WG2p*jKP2Bz|9P#FVGmB^aWCq_CDnl-s-ps= z(x%!EvryHC2XDhR0IFysm&bXfOVp6bs6K}AOq;L)XglcHsx|;IRe=45CDAYcn4>8} zm*^v5g;VS}EE=g12lkG1=d_UlP0;Cs?Npm55&;upmGaC}mMeM^y{;>gxxdZQ)H(zY zNc0<1c_l-|kprnP!v!_2g{NAY8NQhlnuP;Yh~qhy53yV%$a7*iB62*n@z5liqxXqf zIk^#wtR%XKu`RM}sZ?T0O$>7SSzZtXmJ6|=P>>*k?y!YbFKD@qWd#|!nq%15Ko;dI zss%KJC7L*WlY(h)%3AJ5nMlD{PqkT|;rx`!Kt*{!)HFBIF3!TYe%~qV=7w#^W}%CQ z9E}`YU!xz&7UK?7F>-PUohnx`Q$!fKMPyU)-Y~;cM+{3xC3hXKC}P@jv1(~BElV^} zU<^YSg=jPxjwE7XA=bq6iI9+tHOVb8A(W6K$yjT+%$1QgWI_veMVf};s-$9qRNcZ^D&9)_r&Blio>2`;- z^{vt8UF1sqm6oG9@9~vy_>XRIb%~WFuJjC?9gF|s)=bZ<`Bt#2v!n1La5pto$IWLZ zmOeAK2fzJoOOKMBd%bpl@~0cltn~C}MXv6cm<`M~R7sQDS7*@0g{y(1Uq9Hl4UBc2 z9&O!HU|!Aa{@!S)ubH^;>ulX({~fRdGQs2Z3&+|of4n$V&z`wfd#Q72|MAf0^(Vhu z9tAD;BG+#oQ=@}m&F-ikpS$un@Mz)TCo$p2zr%Y!IJ^Qp_e@XC;GTc~TvYeBuT8S8 zDfDoBmETwR!TlKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00057NklGk>mf(x_NFiVK~8DQu0unx6EnDhzAh*8IG=RD zHq@}5lsv`pq*H8%u^%t7Qb!Zh7%fG(nh2M|nM{gKc5#-%SuNR)#%HsEyUBSOZ}2hl z<)rTyUUyaCIzELvRI(qzmj=dqRMEFwE*vSHY7gEgt;^w7VXThX9?HGg9{FA79T>+| z^k=OZZWU(hF=$mNPhl|fOzz-E#v~p_HyCaiEsWRE#udz!2wPL0{o&k9`3^*GM>i2} zH|FBAU6knxp5SLXwy&$3kKt>|a;>QE^ubj6pui&T<92a>RZm5)PJUI<$;BQ0RVNo% r$aqwGi-!N@Evjw)(Ka{uZ~PtrdWmceuVcZ(00000NkvXXu0mjfX+QSk literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-previeww.png b/workflow/public_html/lib/img/fd-previeww.png new file mode 100644 index 0000000000000000000000000000000000000000..e53fe7f2f819affa5d41e8d02b4b8dc0b75089c0 GIT binary patch literal 1219 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#Mv>2~2MaLa#GUy`aR9TL84#CABECEH%ZgC_h&L>}jh^+-|YNX&zK> z3U0SJ;?%1Tbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3b&C%BMkAZ>F)YHW=q~g|_ zsT;kR9YtI>C$fgSOcZrllasr}XsOU2&gkwCv6VVGtsx(oeG-K)%Rk6M3_?@Z=jrsoBm<;j`f7z7Us@|@klcA=z3()aC7 zDJ|u5H8U$Ye?42jPNCE(J@HuN@=s5$hCh4H$Qe`NGyg)sgs*cBX}@_^=jnWJPfl7A zuk7RNraBr+*4|^ka`p79MSJW@--K-8T9&co^wwJ;f18pc8rdx-r-w|qxas|Z@C`d( z`JCMQ%4W_1#U-y)KmEF*UCbU^AsqX4*{)`z;3*adgZ%?9lneY(br-g?IQXx7)qBTM d2g|=41`NwrHZrE2RZapGE1s@?F6*2UngDr_tO)=B literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-qr-code.png b/workflow/public_html/lib/img/fd-qr-code.png new file mode 100644 index 0000000000000000000000000000000000000000..41a84aa1d424088bc50edb767a4037d3c30f8c29 GIT binary patch literal 314 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 z zW!KF+ZHa^b7$yoeztj;eUv7&iK$J%XBpW*RjNa^-C~#>-EAWO-D)1QuRXO8<_2572 zt5l7j1%8&W_Ab{;ueEYpHg(^(MZO}sok_YnhDH4MxEu=f#=Gyli}f~N1^Z6iX!vq_ z^}y=A`QQW#2Z@>FkJSF=T=tpsbG*%wn0&+eR#9jdjIgtYm)l-;;VzqBS+87^zkWmVSX{{x$Erny;z%= Y-5EWVd^+{py@CrNLj94zlfLBjKgm*NlK=n! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-save.png b/workflow/public_html/lib/img/fd-save.png new file mode 100644 index 0000000000000000000000000000000000000000..d23844f37471b6e10d0e8681faf1dc7ebbf1a633 GIT binary patch literal 3077 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 TJ(v}100000NkvXXu0mjfTZ+3a literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-savew.png b/workflow/public_html/lib/img/fd-savew.png new file mode 100644 index 0000000000000000000000000000000000000000..e73020b7eafc34e31e0a658550393f57e10e7642 GIT binary patch literal 1214 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvO-#Mv>2~2MaP_L1ziKB_5lL1b>pu~_{0JPa9wJ5VJHN~wcKUV?lX{$`! zZgIqE9#n4%7PmnC;e=DKKF~4xpr}QPYM2l({eYP8gbU=rlYVL*FufN66Ly_TnHB>B zqk*T3V@SoVH&+e4nGHn_eDt<)S>d&G@#%+e9zD`ivaqnU+`T))zWImbABMRxF;B$o zTl4b#%vUsr9esA|2mhYQ1y5GRoK*O7uz!lm^y|}Of>YP}Cbdm7bLL~deMy|{D~p#_ zLHGNFi_*KN{WI6OGH-T*PA+@3#UX*|7OT~kU3ynFfAx;TqH)Zj`H9l~JC3hXi8y9B zukf9^2lMT4ubYdb_ODKpSFbq0dT;MXJ-?4nR$UA}=iV9cpX=I%!$Apt>sL8!ud!6S z)c3Sua+}Ip;f(ym~i;U&BG_6 i^3KlRtr1njZNOmkXytT%dAk-+iQ?(%=d#Wzp$P!F@T$oG literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-signature-mobile.png b/workflow/public_html/lib/img/fd-signature-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf1389bfcf768c53f6e1d730141fc86cd8655ed GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFi*)0i71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxX8)s`r=obn+rF# zxFjeQ;Y+LzDGsSDNYxKYEzU13N(M%Enli|$0xRdD)WnkfqLBRj99Y-~WaO9R7iZ)b zC^!e3DQNg6CTHe>1T?`qe0{Av^NLFn^O93NU2K(rX6R*RrdYX}8yXlGnwhyc8@m}A zx|%q-x|ukeIyzb!Sh^Uxm>R(Jy5uL9=BDPA!1Sgd^qS+;3ra$;@U{vq2Bz1L)S}#C zXk0tyl;{JQ`Z$yTg@JB%NiE7OOHFYr%Fk5*2bWbQZeN(-bO}^%3T|JR;?xUvBq%8% zB`uJ zdi~_k+0JhdcAV2&B-YwIJ$6daoNxaN+ye9XG+LS$)95kUr_kkG!*2ZhWh} zIrF*X>aNW3h{<)pBXh ztlMT9M|@bH&*i$Z$TvXw*hPo8x0yN(jIKzA_SV0x^jdAuyCSn{iSREYt}I4jSKZ5# zKB|}U_*Bde>-k@za$t()_7zzZ4102%4o?w}(GJq*-eW4v?HYR_;>nNZyqA;KHSD<& zbE4DX?-p0_681;NYp1SOkI0|Csovh`LOttW4g-c25;gC)oH$VhDjGdq{an^LB{Ts5 D@s9b^ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-subform.png b/workflow/public_html/lib/img/fd-subform.png new file mode 100644 index 0000000000000000000000000000000000000000..3b51be86e493e2e2b27c53e00fc2716df5d0c1c2 GIT binary patch literal 1134 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 B_jCXN literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-tablet.png b/workflow/public_html/lib/img/fd-tablet.png new file mode 100644 index 0000000000000000000000000000000000000000..1eaa9bc7e3dbb6b5518fc73ab14c97eb3271d5e9 GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6T^Rm@;DWu&Cj&(|3p^r= z85p>QL70(Y)*K0-AbW|YuPgg~7CCV(<$d$JW&(x2db&7zv5V literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-tabletw.png b/workflow/public_html/lib/img/fd-tabletw.png new file mode 100644 index 0000000000000000000000000000000000000000..262325452da4dd36ea46fde0bcda806304c6eec1 GIT binary patch literal 1279 zcmaJ>U2M}<6n3d-X*-~mCMGHsTo)lG5j%Dr4_gUo5~piK9ZDKTUMAJGZ<4#lzOH?< zq}imkgP~5-B!nhZZ7=*iAc1({v6?m{G>w;OpgxRAlVA@MVw#r6+0jAXkEo?3GVI049G*mZT+v-X#Y{8} z=#-@wKnCdM-0WQtrl|IBVK#?z+PGpMi`9J}wrV*9O;O=!)zOU^faz&afOdpgUH*=t zp&4OLg|wjNBtQ|4)m$)HOJ|MRj3Jv$^e7#!DuloSSf{I2$@Y|LgsJl?WbT_ehOWEd znFzBUR8E_q6UYU0h#d|XL7t~2iRHzRB=Lu7A;=3{kla#$7nP8t2=CC1iy^zYW?spt zqm8}DD#8>ob`*}QR4Qy`m_=@Z<7HX)IRqg6_WVdNE&LnkIB`jDm@(Dn^)*Abeg zq-+oCwgFOVgdrR(gr*_~lL<9RE-5JSd{T@j#ZXd+%fo^s34$Ouu_`jk7O-&>Yi?ji zx5WA-)XcYX(j)bn1+L{a&N^1Yjado$c~(lgT_BMKOpw>hCCqT-Gv}Y-x+k{<7cmoY zDsbV4z#MgvMc4DHz)j=|NiinI;xY-D-(2oG*4#vH0~^~C+lu#<8f;1+h3!vU9Yq$c zo&+{&M3;12uKU(D(yhOw)L6Fq>-4j=wP<^PzVr9g$p4R`e}CV3ZQ!rRPlu;wC;t89 zzXcmV-+TLJd^=jmEiN2=IMCZO)HCJvjz8?`{qx?BgS+RKcK^{~cI^p&{i5xkkNV}u zQMT*g*;vQufcWI%iOw&T;!5nwuKx1R*G_Mk&d7_O%^TaH$ql8u!tcXc+vVl^SMe98 zMjrG%`}jEgs;}q0_SrYj&s|zcudLqPG3Z`-KEMx(Z!I1h3yNk^qWWJ5Me*VUV-^P|}{x2z&OshBJQ=h&B9X6&< literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-text.png b/workflow/public_html/lib/img/fd-text.png new file mode 100644 index 0000000000000000000000000000000000000000..bfbc44fc7cc60a29b6ff0c06f9e9143b52e04ddd GIT binary patch literal 3041 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-text_heading_1.png b/workflow/public_html/lib/img/fd-text_heading_1.png new file mode 100644 index 0000000000000000000000000000000000000000..632c113b31cab0ef96ab467246632eeba734c035 GIT binary patch literal 532 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-button-default.png b/workflow/public_html/lib/img/fd-ui-button-default.png new file mode 100644 index 0000000000000000000000000000000000000000..c59f595ed879fd666d7b66458bec01205cef3e1a GIT binary patch literal 393 zcmV;40e1e0P)#P#_ah zT|ueTfsKWUfh~{F8G%%ZH$nn79-=!7ENn~>DR)(^BH9Mh*iMZ7297dtq+jwGzF+5N zq?Cd>fuUy9HXtWAQy*bG((h0!u;dc0u`0_;QkLbYx8q$L^nB(v9BM=7qTo+)+K)ef zffQ1PgKmor8K%3w-9TSbOmAh2MX$?{NFf4MDBAHPNNHDp#{)2oVT}P~nFP+OtuxCI z7?w!RA)0)^dJt4Hh$aabmWVuu8MJi;ypq8TD2RNa4LDDx%H{X-f*!W*hVZx~U>L)a zEKSEh@mK#8@3X@7tk&q{Yu=2X-?3(qv%SX}M`!0~vwIAHw(J^E-)ix8Cmyb^kj|P~ n8|Er2Ua{$Sh5r3F{s}MuqX3KH3nw`u00000NkvXXu0mjfK^>(! literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-button.png b/workflow/public_html/lib/img/fd-ui-button.png new file mode 100644 index 0000000000000000000000000000000000000000..32a4eeb711ddda3b9f3a16bdb395df00b8e7fbaf GIT binary patch literal 348 zcmV-i0i*tjP)xVepbmnzX;KcVDk`7zQ#W7?~K8 z1$YnyGsc($>m8&R$(4}zzVC0m>pI7E-J|dO2O)$xiZ07EilS2-$Ar~&z4tutpzFHX zwk;WxcorFCxs-D8g;fF>WKn=Z8$?xrb54*&0oF8)vH;Exvb-pYcLgY-5|mPcEC)wr zmSrhCrKuuNRaJ_tW?9w>ZeQBAy@h8Knx>Io3E(pf!*h}(7Yc5!4a0C@V*_Q)NA@qF u?MI&HSNfU06&kBJ#prrQ|Na|a0t^5k)SVSRSh3;&0000op+Qcsz#fb_@M}AA%s@ImdBeHk%bUSglroVDtGLXdT8^PcRydN}8rI;y#-o(*aF@ zcAoz1G3O5~5arcswJFQ;g;)r~aDl>lrGAJH!4u*PQp&^`Ldh5uF2p$`g6H@YU;y%^ V<0YG5kQ@L2002ovPDHLkV1iLr*2n+= literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-combo-box.png b/workflow/public_html/lib/img/fd-ui-combo-box.png new file mode 100644 index 0000000000000000000000000000000000000000..53d306e74332419caab6744785dae71d58ffb124 GIT binary patch literal 454 zcmV;%0XhDOP))n|hzkTCX z9LIS9fG22y)9G|Euj@Jj%d+0;mI#8N#v*l9RXmQz<5v|YR0-zuIe(#vlv5N1BuN6U z>+%@KF$i2#C}^4{C;f&z&zXb4fXDrQ4`RJu!*aO>Q;LjV8(07*qoM6N<$f;4Z#_5c6? literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-label-link.png b/workflow/public_html/lib/img/fd-ui-label-link.png new file mode 100644 index 0000000000000000000000000000000000000000..98bca0570b6a8ebfcc2f3335d24f766509fb6f4c GIT binary patch literal 633 zcmV-<0*3vGP)aC#f52+B>zYH zKERvz`y*Q`l^OlMfxULW_o?~4N%q5gGs0Scl@H${vTM~#)oWMImBuk#;gjhm_Vuk! z69Z~wOQ~Tn(C&_WbjO&19A=CydbPSsy=ahuH99bTDG>eSZoGcmdWz>LD-zV z69+XIIA4+&pb}EsFBFzBW|?A!gd>7aU1c=j;4e)z&5W(r-u9Rcnseeijw-B>!?&-`O|hcLL+KLG{+bviVr T;fpj500000NkvXXu0mjf=jJ3+ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-label.png b/workflow/public_html/lib/img/fd-ui-label.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc5ccc4fb5dec180abe03e6c1da38950eb744f3 GIT binary patch literal 524 zcmV+n0`vWeP)Wn5v|6plNF;K5N#TCKciZiDPoRTlv-uQUXkpE72b0M}6AcD~k9xh{;aeQX zdBwX_Dm57EcDpa-a`_H5Fonl>JQlw13){9kmSw%clgXsU;D{MV4lvXh4d(N?Td7nU zN~wN49v7)pN*^K-mdRxFd%0W!>xa3nAt11~+wE|R$Y!%5oldh*M+8zzT;@=&gIq&! zX!(5J#N0tN8Z~D`aFnkOf8=sGEoSHv9l#MYj+~P{fF%+M-THRBWk_-dgh>XG11&JJ zAsCHDTDVv&CP*AjhVEE{&1R!JU9Z=Atl@Adrqk&$0gFW&DLl_B(AYb&1L~DO5nP#cErGN#yi5bT3vkK zaGV7I1BKKBQrk-ip-#XE&qBJVE&#=!<%og0lWg(T$P*fZ4r2rvL2w+dK>$H|0YUE% z(6mP}zFMtTH!D!BRx2!(N`b{<;g0Qg3yPvV3Ob!mP%f9hbUGcS+wImPkw_&Li@j+y z8lOg^5wO35?RGl^0s$Bfhp=2ODOpV>lNH=RcDvniY#DHbe!u?}{R;Y3cG;H42 z$_rpO&B~RFb?|z84BWjrolZq6hKV92I-O2vx7)xLi^Y?qkx3yG3I!?A@An6LyGpm`Tq!g1nC-S^xvR9 zyG+PrGF<7|3l9M=@yuy6(x^WTf3aBPiN;6!Ex-WZ=quX3C7SgB0000hKooqttkTegG74AV z1e_r^phSsi=;$!w29y>O*PwKPMB#f_3LT302=OswAIhTG$TrDHqvh?6hR3{x_`d%J z057ls<2YW_(==t^y6(rc5y#{4qIMkTou1EUbb>Gp=QrFUYWlukw78aK35;(NEKJj! zH}9eAI{2+EiUL@grVvFDU?<377*-T#s;WX&Rg2;2bOI`Zu`KIhh-juL%ECO)fuS>E zzu#{e1PHwV(=<&o3}ZE-Yfwrdj^mX9<-rha&GS5H+x8|=BRUYAJK%=|A9lOl|2_db zNRkA$LUghiU|rTtZulh-+|3=%6kgiugqg4hkYJCQ+00-ZX-SHl-Li zoOjQAdC9%!Fuw1TeIBM%DiMz3l8Hn@g8DSnyQ|fz;kxcp*L9+4+OHQ-I79$fxm@nP zP$hnrBY6_*^F-?WXG~B73cR~8!1d4Z6rL;?`$}ZgYFPP5aMkN zIq7-cP7VMKz!HNN7q-1~z+w&nK@J#(5fQjXt=(>uzjDBKI-S6C^d8&@u*pHc-^VlP z^TQAPhMSyW7&M(ui!g&^Hk&3}E)dB8peO6hSXleq*w zLUFxbo6y1su#F|a-C~5d0TViL2sjAa^0r>^BJj63z?T360FIjVO@L|wGXMYp07*qo IM6N<$f{0V#WdHyG literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-text-area.png b/workflow/public_html/lib/img/fd-ui-text-area.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ca913d2cb6dd1c1d64cad1f7c7b02ed397869f GIT binary patch literal 337 zcmV-X0j~auP)aSaeBK0&?b_=dJ3xK4GCOOG?vJ zH&0O%9eEH0SBwL7T}P_d5whI({Yi!TzF!1DmOG9!GsYeO)$0h^{{n_#SPU@nX_|(z zETcG%Wv!};IOiWNClL2Ohha!XQAlc%B-#@oD*;Q!egTO0{51es0O$t*&VtWN9?!Fo j1)$CIeE%ijauZ+xrpHHU9qHa6GS*VevPJ^pFIf(1!pnwl#^*Q{BSBFS*+^r5q7WltPC<~HrSV^w5D zMa933n>SBRW$@5H!7AOr=A(F-RXW1L!lI@z(P0|5LsewMw)v4e3Ko9(`}=#XV^ddG o*X+(z=CAWoWzKT*Ffg()oUS#$6Z1LwB+z{fp00i_>zopr0Qyc}JOBUy literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-ui-text-field.png b/workflow/public_html/lib/img/fd-ui-text-field.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc1c7f7e1c0782a85a02b4ac2ce471c45465449 GIT binary patch literal 359 zcmV-t0hs=YP)1Y%)9Z(`{MD7^w_5NSLDjfGyqM6bY4$hXcTtes}{D}2dhW*__BE|XcMwWed> z(2-!J6!MwGsl=4mL_rXc<2bZ$zD35`CZJVu9AB^NdII%0jSWm(A7Hh>lehpn4} zX`0B?mIen7!|=-hH~5VKv@BiMf9(OZEGND+aHZQJuCNuF&DMEikBd>V$qa2Hay zD2k%6GEw^kUP)YH6eKVRk6D&I)OG!%7!OhX`)m9ZU;rd~N-dw*(31cF002ovPDHLk FV1jwEmwNyJ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-video-mobile.png b/workflow/public_html/lib/img/fd-video-mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..0da5939fe531b6bfe4521d6442203c43af51be57 GIT binary patch literal 1422 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFi*)0i71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#W8Gu}Lqi2KGd)8S zQ!_I|9R(u;LnD0yATrZ6G_f)@vobPQfC43;ZAB?*RzWUqP`iLUTcwPWk^(Dz{qpj1 zy>er{{GxPyLrY6bkQqisxX8)s`r=obn+rF# zxFjeQ;Y+LzDGsSDNYxKYEzU13N(M%Enli|$0xRdD)WnkfqLBRj99Y-~WaO9R7iZ)b zC^!e3DQNg6CTHe>1T?`qe0{Av^NLFn^O93NU2K(rX6R*RrdXMnm>QaynOeFyn*d|W z)x^ow&BWQ%(b3Yt(#6ol)BvW}B|o_|H#M&WrZ)wl*Ab^)P!fWLw^e8{FujJP7UdR0 zAAD(8O z9;=Kij#HS#a+@e~Gs_n|+Yl_}r0C#W(y+z0)i9CYce>OR zD-YI=osAK*oY)(`NHcF#S$cCHv&5A|hbqZdz9=@+<;_9t9~qjX1U!m^UMTpju(X-t zc9To%=`$;hWjmIzrIsryk9|@D4zCey~s9%J?@(Ffr;!3!4T=;U1 z0>h$)XA*&nx9w*>lHT}3vz4!k%k(+lQobl=o>zVfwG*7!Wm{%#Zo8ym%)s{5Kf{?f zjAzG$2Lcgh;f=417i`g!e#>Uq$9EhU=sPSq6b>+K{M>1!f1_p_sD$)%^>bP0l+XkK DajfB& literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/fd-video.png b/workflow/public_html/lib/img/fd-video.png new file mode 100644 index 0000000000000000000000000000000000000000..d720c4c2ee325eeeaa905f420c1ee40396ba66cf GIT binary patch literal 621 zcmV-z0+RiSP)H~fRxB2;tF_VRJSRU+_XBddoRvzYG(;WLk|{;CTD=woB_yBE`<(NhlXB2NxfU{V zH#%di2eEDYMKl_{Dt()Va*!l&?qPg9i97T2n7uNKk&#giP-AoJ6E-(KqFgR(h3RzK zx+Tv%SzbP>6?mQprGh~qLM04BaHIE5mWx z;7$uH9>$SlAsC4e1oN@a2|ULJB^1x4iu02b_)@QfOAur9Ulls8hm)tyK*Zws6^UUl z0`LO~-m`I$`!EcKceNTCU$?Ql+XR=tO)2{eP}vnSU)wtk+#X)U=hy2vdu|e28y}FI zxBxFP1j-CBsp994@33W#b{Y*`Fe9`hY#u6rkwS_o>CAlM2ie?4W{JeKLQK@ATa4`i8PST00000NkvXX Hu0mjff?pC7 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/folder-open.gif b/workflow/public_html/lib/img/folder-open.gif new file mode 100644 index 0000000000000000000000000000000000000000..361e1be3e4b28bf8fc4e39b60f66dc805c5b7835 GIT binary patch literal 356 zcmV-q0h|6uNk%w1VGsZi0Hr+uF-l`X|3aB(0h(w6oN5G~YzCli2%>Nbqj3wQatx(& z4X1Svta=o%ei*ZX8?}NRw}cF z*SJ91zii^OL*l_u{nc>)+ja2ddjI5ql%>6#rMxBRBiTCh{|M-*t|C#^)od5r&#KgqK#l_9d&C$`(#@6fD;qmA1_v`cj`uqI<|NsC0 z|NsC0A^8LW002J#EC2ui01yBW000Joz@KnPED|#r%*A3n_MSXmrTNSBWLRuZ5`jD% z4I$>5%|4%u+wanYx!-WvqBg19@AXd$L7T+NWicHSECzjlaBng%6CedNKYlKgl#??W z9t4nnG9#X!BQqQu1CWt1A*rgVA`}8OLK6zJvk3#~t CowKL_ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/folder.gif b/workflow/public_html/lib/img/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..b2fd81a12d520bb45ce681ad14801a3e9d2ffedb GIT binary patch literal 351 zcmZ?wbhEHb6krfwSZc;#=#}jB-)Uw#uSU{)Jbe^l-}ATyS+tzSG&^QF4Y6Q8i)F|j!x1&K1Kh;RD+Y#3{TH6J~Pwg z_V%FL+YA3+$^U=5^#7CkDNFax0iw0XmTtYaa__CZ$Bykh_2mEi&i_9q|NlSp|NlAv z|L;0*;K1qAr_Y=@bNTY+YuBzFyY~9V!;jD3e}Db?KYpP2lZBCi!Ja{f0SG{TVqmK| zFu%YrY|>(@5!KS@?CREHtr5{um^68c7E6t=mi+8FbG4XjgtX+AEM2C>RBRv5 f$IH#d!Oq6Y!lY~9Y@oM$&)yv&2M)SAGFSru#-z0M literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/form.gif b/workflow/public_html/lib/img/form.gif new file mode 100644 index 0000000000000000000000000000000000000000..3503f66a12a7697eb179ec961e59a729a8080333 GIT binary patch literal 990 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 QCUn1>bPAJP;k7&M4^)hr5&!@I literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/gear.png b/workflow/public_html/lib/img/gear.png new file mode 100644 index 0000000000000000000000000000000000000000..06f18b6908e35d76dab7ab8888b5431a1c9794ab GIT binary patch literal 1513 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xd_B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?TIxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf`)Hma%LWg zuL;)R>ucqiS6q^qmz?V9Vygr+LN7Bj#md~!*~Qe!!q~;t*wN6?)!4$&)Wy-r($UD! z!ob|r%><^`B|o_|H#M&WrZ)wl*950tP+G_>0NU)5T9jFqn&MWJpQ`}&vsET;w;19y z52`l>w_A*G>eUB2MjsTjNHGl)0wy026P|8?9C*r4%>yR)B4E1Sn%v{ez`zva>Eakt zacfGjcXv>tgq_^`S=T3-bxk)B(LcCgZQHUmv$auMvIHCL7sy|T?+81rqr9l;g}sR9 zbYFvRPr;)>OLzp6Kh=HzVv~MO-EVi?4~yq}-hZ~aUu`|9_y*IP|y`eZ4@Gu=FVBWvrg%@I0QX0zXF)dZ~#J6&!y_j!+Gi^KZs z+CIxK2MgGGST57(QrX0Ml6U{?M*>m|zx_UZ3GjXNW=G6A=Iys@-B(ZEXv(r*fBNbB zDu>mx7p48UwMi#Fp>vmyT5-Q+*!mey#e;c&TRnoS7^O{Xg7gPdoXhLzVsMoKsJWD&=`ClZs8Qu5Uj0 z;IaMVsSkcP-7sYBcw4sH|KMHWpA+W4g4XNg22*KE-ZQENT- z-~T^DiiP2X;kB8%yW|@u%saa{VfEE26RBRm3rFH-`#z~!7PQhR?X_w~^~59A^I!a1 z5Td1O_)7lyKh}5Fd7nO&=?Pq)&eD6O`Mq@V0gHfp|I&nyp02UWe_Uqo9#z5oo;~~QGv_ysa!hg@e}Tc&u93dv8_)i?YQ8daB?PO4JeFTp7cda(KAL@_aaV?x e;-WqKnRpmnIUH?j=N6}f3SUoGKbLh*2~7ah06FLY literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/grid.jpg b/workflow/public_html/lib/img/grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..059006101d353487b05bff1bce604b90e1cc8eb2 GIT binary patch literal 68246 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 QUDjuGP)e1wuYVW+50tc&ZvX%Q literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/grid_10.png b/workflow/public_html/lib/img/grid_10.png new file mode 100644 index 0000000000000000000000000000000000000000..3b0d06a88d4ef84168e15454854fb854c34f0f5e GIT binary patch literal 982 zcmaJ=&ui0A9FN^5W3bzhxzjVd6tQ_P>6)!!aZ8idRhCiOg1soqlD9Q%$&1OG&2|v< zCSE+~VJGo05CjoViimjFK`+A}Ao>Rg1Hr4F>Py#l9;|_v_uiM!=kxvf?o?JTjgL)@ zaU3^ZUNWj|uOw@9i2Yw4rXI5GEG;%@jjYp_6=F_v$QlM^&)UFMY&kpE-{Ez0t~A-BHN+O8n-^3xC#_K#1A)Kx(*NaC-N9}fd>fFt{%u*;DT0Q>u4)(b^{fOx0kg?On56V#jigMpy`V4ies=Y=(p^YQXL&-;0{DvQ@A#wW)ahM6eO z>s7i}l7DQ3uJ5)}&*^rC6zimhS4qnX5i{%H6$HwjwT7z5a@w~)p&Y}EoOaDRsT&Kb zjXlmvFkI{fl+7@?nK-cQbwt1lT62Ak{q_C>3tUHIZ)OeN2nwj-&UZpo>nxgfXWdpD zcIFz$#VQr>5V1h)ZTOKIYiw6nrRT&9SuslI}aB0F>g;$j~piq;Bl5{;#i?x)}d16e=nm5CM%##R6Yj!#nR z0}bQTiOx)N z91JVH48|S#bjCwE%$Jo%hv`E&R9P^KySux4dwY`??mecKd|970Py#l9;|_v_q~tb@Av(A-+NG5x-l_6 zIW7poM0r84^8I$QMpOKMZgU^;?GiKUY?(G#+X{(LaOesFWzSkARbn|?>+i{|Afzt3 zwK}Vti>ggM$x1L%>;;@H2(xo>VA(CgzzSJ)eNFuF=0F6lqlve&CNhH}X}SyBAz9vD zs@dBuJMV~d*T8J7asiJp3&h@c6C*5CvGT$E`+r-@g%9bSph{F5|EWp+D179 za#+F{C8Nk!fs8PM2t$n0ct%AzRmp(fC-P{a(@?8=sTYf%G_lE8phDPgx21MQqTwpU z`FtKC8Om~+Bht~9 @M^k+TokVu%2F#^CNEEFVy1_J&XL?eC7YtH|&l|4`2xpd(f#r}_RO4s^btTZX3 zQIiIsxSZ{xOj9lU5wm=olyyzyJjrz(RnIDN0T+y%Y$zBTcqW6Ujrkd*81o3>>0FCgoqt_# z-^FJpF$crS4}){g3G-E8U}fi7AzZCsS>Jie`DbIEGZ*O1iR@JE4IoO@WU+shaK5fm($)o+JK_GGZ$f z_yyjxCK!@ t$LfWuW}2*QD~`-#I>PQK)4;&YP=7`A$PJl*7eH4sc)I$ztaD0e0sxtfOltrD literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/i_dept_small.png b/workflow/public_html/lib/img/i_dept_small.png new file mode 100644 index 0000000000000000000000000000000000000000..7b1edef9fa96f66b39f0ecb4caf200f882761b27 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!3HEhbh*6;Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiaI=9978H@C0*Idoxs2ptKi3$RH^XqaD%J?cbxfJ()Et$0jxc{TR5LPZVlWoaZZi3=?EJZYf}I*0 z*8z{KXFQh0xlMRBKPBpyq)U#9^Jh_od%RxrPB%tybr?5BF!?WHtbDI8FrVd-k-|Pc bfdq!GCNYN}0v#$qH!*m+`njxgN@xNA0<%nx literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/i_group_big.png b/workflow/public_html/lib/img/i_group_big.png new file mode 100644 index 0000000000000000000000000000000000000000..6d80a62561aeac62c4469d873bb5350d1b0060a3 GIT binary patch literal 1928 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 Uek=Fw3t6tEvo_rfU|_HY0I(S{;s5{u literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/i_group_med_white.png b/workflow/public_html/lib/img/i_group_med_white.png new file mode 100644 index 0000000000000000000000000000000000000000..23989623b9d727ddb38493eb2df24982b1507645 GIT binary patch literal 727 zcmWlXYe-W86vxlqy?gk&-uYHa@A4TXZD^XBdAGJUQ^z!;S(d|hA2MfTB4SrJ^-8&- zlGFsJVA;zQ>Gh%1yo!a8qX`lUGBcc?To@=y>-yn;{+z>)!#Ri3uG6Z0Ji|Nzz$a6q z%;Q|bDM%#XqV~z(dd@tmH3c^Sy!`itKu>Q7SHvphIdXteOT%vNLoO#vGAq0-+)Sfr<263g3 zxcS=}$THAIE02}vYE$jr#AhMCMrtP|73~3e1|X<)%g9WLG%l*j&&dQ+b9dF@ z)8QO{i>=_ben%b0F#D3wv5eWRi|9VAH>p?S$x}S`W1W4kWo8#A|IzB@)KZ*+{}dJh zf$p(Trogtq9qL_;Ld^6Xa@{7Qvvr{|gy}PURax`hp3D)t%ZK69+x|U0&lYPUD3CSZ z$uUQd(TifWw6P^s@rYS+L1~g*wm4BUR3f*{ar@0$^n5nyM50U)Ur|nm@9`Y(>wY~3 zV<>|V)X2JMautY`NE_lkuUnakj6m5|QowbVbhig%2YeF)jEJtboEtu-Qv9+* zEr~@;n@G$_Cl4#6Fb)=1gJ>i{C)iv_wjPKQ5>)p5MZXBc;Jnzpl?52#m6#SkdG2ai z?m9DGHz#cJ1;pH|G9K4eCFtP000mO1^@s60000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz|V}X@YRwh|lvtVT*kHswHwXtC*8z~VbVJ!(+OqodJowphPPyeaYb+4H@ z^=s}ubMF1V^PO|9R$AK@6G6*?8E}KfzH{h@#c&T>4EoZc2C5;ReWTE<1dx`+!1=tF z-$p3Wzc5yJUk@Wt4sS3IYtUelqyswP1cn*-2B!F)PZ?x&Wf!QKO+p3S!8epa5x5}1 zB#mHdf*Yj`iirgIsvxeL#|cAYA@aa>+aq-dWBsK3iwBCKqtUOhQercfo5C zU<2k1`mLPFpCG5Oz%p4_1|R!oxyV6f{2}zfDy)E={c*4dOGZKD1>>;805bJ4IN&Z@ z=Vl1CefZ$@Ae=!GJirj#8tpDw+-`2+P+i?z&?acrmBho{I1Q-`@Wo_3oY}Sv)OZ*j z+^#L~!bOz9P72o~p=*{})*~7G&E&M`kUkls>@sWI~_J(8BZ4!Gjaj z?JRqQL97O2Qk7SDrKDVGG9;B;f6DA@oHwWb92#c~(;4Ic9HL-`p+kY(M*`E5S}3;-&lYc8fX RH+%p9002ovPDHLkV1iPG|E2%{ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/i_us_med.png b/workflow/public_html/lib/img/i_us_med.png new file mode 100644 index 0000000000000000000000000000000000000000..057ff2f10c058016e579489211e8033d4b7b4f74 GIT binary patch literal 376 zcmV-;0f+vHP)*=>+=Fjs{1=SDkFQ9-@BntP z@hSN7?d&3GgBmk;2QI)P_;9UAclF33iE;`C^f6Xc0ewfg@ifg-AdM1x)Uj!DOIvXe zH9%gZkBnAjivAmYttd&SxRgPpx1}uU1`I^Dgj!S(*>fW44$2y(>zi?BCuLT90R{k# Wgd;VNk9RWw0000zyhRzSRRP~0P!6l zevhtz1&z-H#C||*fF$-8i1z^Tadd^qzy?hd2rvV&I}oek(`d+m8yMr$$cING4?c}| z@o2n*Pvc%_V4#CfgaYR!5N|~j0~xdeh=1VI2m)___#+bk5fJ~v7mpl39E2Y1K%fZ3 zIZ&tW2I7Cn8bLNk1F0^TC w1X2Je5c4ykCnX{QFAFr8{UA}}M}PnW0F>Dt$4CPDF#rGn07*qoM6N<$g67(9!T}1{rUgjo|#X9^GKV64%d-24u7ON@|iyJ=5#SKbqKaQE(>tp(0JTo zk95a>1#Tu50b#M$Qx!anjFAf49K=~T6mr-k4FuR`Ih^U!VGwY5!M2fcqk$lsA=5^S zO$-hU3#E@7al5wFC}z#_2Cz{MQ(MSe`h7FP>;vMo2 z44()K%y$AAtR~a-o%v(6&ZGT}72*Q_ou)HzD8#Ten#iyveYsL4*Kt4bGSI>sLE97r zW;1V;;q!K2o7=LizyheOq}gHREx~^8i3eR*G$sI5ose46aHG@1*}*~HQXFWtaL}Wo zhGh{!4V)$#5)4cnX%n;rJ{wHnn~|`Ni9;c!`2=g1f;=Noor!pNaDsqFgbFY)IHQ=1 zi~`tN7@0Uy1oWAoIsjcgV?nCG(gs$A28VyuO}g(VaO`7Xkzi=QVUW3basMn}j4*h* L`njxgN@xNAZZ?rZ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_full_scr.png b/workflow/public_html/lib/img/ico_full_scr.png new file mode 100644 index 0000000000000000000000000000000000000000..48766e8148e20a3787001d0b699465bffad31f82 GIT binary patch literal 315 zcmV-B0mS}^P)P000#T1^@s6vnxdy0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy-AP12RCwBA%&BPQXJBCXz<>%q0gEd2&c*fUqviC%@3DOlnrYAn+6*zyQS`EFM}1{rUgjo_S|OXCsq=km=?H+#=V?9`XG9_pHcm l)y*>&QskNviLEzZ0mF!PC{xWt~$(69BDgExrH% literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_hiden3.png b/workflow/public_html/lib/img/ico_hiden3.png new file mode 100644 index 0000000000000000000000000000000000000000..904df52725c24035a2985b4ee63d26ea2a51d56a GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^{2}1{rUgjo_S|OXCsq=km=?G!NcNzdQ7&?EHqig fwm7YUftlft4~xR{F9~~rdKf%i{an^LB{Ts5Vqz)A literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_mor02.png b/workflow/public_html/lib/img/ico_mor02.png new file mode 100644 index 0000000000000000000000000000000000000000..81828d8659d9db1f15e8981a1ca72ac190ae9f39 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@wC9V-A!TD(=<%vb942~)JNvR5+ zxryniL8*x;m4zo$ZGeipJzX3_DsIgQI>_6gz@sCTULaxq;AGUA12TCJc=koOC~h@9 zDxk!+=gFl@_m;A7b#O@XUKA{Uq%_{DV7yJCd>>O zk2rD@=B8a{s*MoYFQhtIO7m1;=E^Ap3Z!Db4zJle)46np5C^K*Z==re&74z e)?V)hMh0!6=$mny+*N?iV(@hJb6Mw<&;$U3kys%B literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_mor2.png b/workflow/public_html/lib/img/ico_mor2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb394a079fd9c92aab000b36b57c228c64a5631 GIT binary patch literal 351 zcmV-l0igbgP)3KoCXQi3zo}-By$) zv~=9S0*|6cu;L;FPN1Eo^jv_}lF+RmGKDcLy2`9Sc@1ReLw0ulDq~DABLz~BfEYwz z!|z(qfErxE1=x!XMiw$qn$K18n#p=o4>ia^Z`{@MTK&#w3kvhQ3a&M2q!%)IHq%o^ zxmjNMt5N2#CkGHa?Ah2L#4WrBVX(YHuC0jA$u5x7P&*|)jM7SoPrS5Z;;|yFXy~}k z(lPg$@nqvWR!tmQ(z+5SVjgU?%(d%c{9UAL643*w#^4|BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrH1%J@9mK45_%4H06%<>_(pih9f^6Vt$;_e9EjmlTDN1W2J%^ z!y|SFnG-H;iVA06FElw5z+S}js=bPvjgMikSz|~uSAzv(C;vCG4n|`Qh7M^C2_c43 zUY;5TNhYogfp*p`Z~IBS+yzH2)R=5^QP{`u*kIvJBl)v0HyoJTFS0}70>=^Q38IFM zzG(-NZ`5o#aJNBMB4WZGBY9tAoh;@FNAwdmO5_PJGae3L68B1Gc=95?;k20sM~fR9 zvtsiH$uJJDiXWHQwz2GFkkUT!hqEO}i<_@7V9g2VM%((EQ*Wru@ zigTe~ HDWM4f>gGq0 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_show2.png b/workflow/public_html/lib/img/ico_show2.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9b9396a7108474abd4ec92922621f3fb940d28 GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^{2}1{rUgjo_S|OXCsq=i|OVC+#=V?9`PLf_pHe6 w*3F)?Y%zL^_MQFlrLE!+yYY&0RZ@A?vfMzgwy85}Sb4q9e0MW-XkpKVy literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/ico_show3.png b/workflow/public_html/lib/img/ico_show3.png new file mode 100644 index 0000000000000000000000000000000000000000..9c76ea58a971a4f18ea77dfd4d1a28afeb39db7c GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^{2}1{rUgjo_S|OXCsq=i|OVB!NcNBJtkWv53|MS pE$Te`|K!y(7PAf&FgGwTGx+~wQ)Zr~t_sx6;OXk;vd$@?2>?A4EnENq literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icon_SugarCRM.gif b/workflow/public_html/lib/img/icon_SugarCRM.gif new file mode 100644 index 0000000000000000000000000000000000000000..deb1a679e2c3ec413dd11a5630cc8eaf1887c27c GIT binary patch literal 850 zcmV-Y1Fif=Nk%v~VITk?0LB0S3{Iqcp2W=3+@v}@#Gag#w$yBTj67`YE{oW|s&PE^#syxijCtU^3|lC<2~+^oLL{QmsJ%FLw33_hN`fsyOp%h4l$De*Eh9USmYtrGF@&F^o`s}L8g{B0q^6&JYg&5+ zdoy%)pRSc72>{OcsOavZBtC97%A8UoO^7Rh#2n}Vpo+?#ESWIl^FpT4 z0bLA8>ChoZ6{j7l$jM+4qei1fheY*}vI+n>K&!sIigjZGuRrCWT`4va(XzNQhn(pd zwS$kjY+G7|yHSQzsXbLjrK5#B&RWF{DFuy7H&tKbO- zlF(7MdlCZzUYN@So?``?5J$SX+||QK92R{^gU|sd*|PDSVqABi=0u1!?K&|#bt=M+ c{QQlg0V6F0cuEV6v_Oa=3^wRrfq?)3I}$~^Y5)KL literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icons/arrow.png b/workflow/public_html/lib/img/icons/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..cccce0e751946aed434bd744a2d8fbf059863720 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^po-U3d z7QM*{3j{UP!xWAAJ}UF@@bmyN`-#$n^%{8#t}txk{dwMDq2dd+2{{~Q%p0T*xhy(u zp;5@#_I8Pc!=$tlW{+zb$zGyRsQ6M@Dsc)I$ztaD0e0stM~Co}*6 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icons/cancel.png b/workflow/public_html/lib/img/icons/cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..33c876b23a8a3940476e354ffe81f9fe93ac9170 GIT binary patch literal 727 zcmV;|0x127P)S&XCR(-5a9UMJ?X+Da1x7myH-=OMF``hLXxS=>7G@dFfQu*#s*%bW zXB=i6^}W|QcY2Sp=)mROd+zyu@7#0G6{xYP|!6}_b(_u zpM(emNGU1GfxEtr$eA8EyY?XcU<_~^4bgz9u6Qq{n2hyZhWhpy8=0?w3Sf2iH9>+T zUPHL;7+|l%Xxa_Cc`wpq_xSILuBo|kygYKy%|ChM7DsNni`^}*XW4=C?&8V)`s*3* za~#LBjx&%BrN~x!@eIne{DL+NKSn6ps=uBobBm5+b99ja$(6DwJ!zUyk$PlLMSa1x z(Wm~L{VGyNaTd%%u3A|Qki^LTf((SAf&{VZu+pEXy|D-K;SC5nmw98v7Zy*){W<%2U(xl-Vhuph z5lTcfLUe>s$QP8)o`BlftiOH{Y2Tnx$`|MaRe-n?-*>&Ev3{s6dH|-OV6T>{9Y#lj zQgr_|^+H9rvkF@%Z`hcf|A3inVX%Mh<1NNC4#!*i4mZ@_?ubWWnjvaF>OO8#ua$X4 znU>2H%%tY=CRez2HMKCt?c%)!4e2CE=b=^vBUbetc}7ud#S*69zQ^<*G2iT_$HWji z&XxA9){t(JzW{s#@A9R=fz+o_7XR}aJqV2!{NENlu?P4qzyNNT8~9r=WRd^?002ov JPDHLkV1fmNR7L;* literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icons/elbow-minus.gif b/workflow/public_html/lib/img/icons/elbow-minus.gif new file mode 100644 index 0000000000000000000000000000000000000000..97dcc7110f13c3cfb72a66a9891e8ab3ccef4a98 GIT binary patch literal 908 zcmZ?wbhEHb6krfyXlGzB^h$R6?=)rU-Z?Z#?|? z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$``4~=2xoOmJxRJ?YUCe?7 s4c<*mc6tvw4?K5duiX3i z{QdXWpZ@~^!zdUHf#DSbia%MH85kHDbU@w$y4*XmR1y>vzmpih{E$}o|KC;?;W0q*gYXG$^NPhqT literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icons/error.png b/workflow/public_html/lib/img/icons/error.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfda229750f238e5ea15ea9c6de43b9630a5e57 GIT binary patch literal 543 zcmV+)0^t3LP)b-Q zag`tu6obp!L~)B0F04hs!e-fWL9np!FIZTLT3Lt|f`$77+}0w6){1Cgk(Djfu;K@q znfLacmk$ORL`dN9PR=>^<=&eap|wUkpV-OjRHUJl8gxYMiagMXAt_}gDkq~vtrP;U zc9@+hfgq>$t_wJl4*aF=-Vgb%v1t(G)S||f5x?FkocMZf?mH@HmlovI=)HLX+f=@H zJW%)wxc{)Sd1^sUjo#}~WT*kxgpDQf_ z=WBp>izV$c&8R?krb){CiP!g!m=3GV{oeqv0>Jz|F2%SjxZ@ zxGsL|j9QS_wUo`+tf^tGR7!93O%@RMewtR3tzslx+}~C$$Xl0~4703ZtvFdN=!tK= zjZKRB$-`mmjcxlz2)L}~=IZ2h?+;>uuTkER>Udq3sOkj1T z@R}--bv0re>LfNdN^fnF-QFU)=hNov3pP6ZL zdwbCB?S=oZs*|No!)|Nor- z|92fYaNzXm(`U|{xqSKZwQJXoU3-1w;m7CizrX(c9|#ym!DtB3CIl3JvM@6+Ff!^t&HR+YLf&;Ka{(Y7A^YOg|-N+phX*N;Ud&U3l%DdeimW`_Jb1+ z<=BAJj5#x8Z^oJTI_J(0S_dwdbI$jD_nhwl>$|U{f`!{E`4n2I8pOGl0VZ#% zl%rQqH6gK_!}zBJzC_bl&N`?t1$Ni?aI`UiK!po^gVR_@W|RmEXe{8Omv5ihhj-yL z9=?oV|299q^&Up-UW>Zf=Q!sX$M{m^8u#3Fya5xlNleWp;WjngY;Qm?w1~Q%AYRQZ zDqk9!$}^7f%u@okZJ({(T#5JJ(^RgDj-izMMk5HUljwgjuY76fD$h8^Gp|rRgq%xe z;h`63+At~7(mSOFXj1G}TfGusvfEG{gYnEOwhtt&9Hev=yV4Ye&33o!D;gOBv8fX`z<*9rtp(~!$i1;i^1(Mk+Qqf4leI#r?53^X+d7ZIOd+5<^G ze*unjo^gz4o)U;ZJJ<7hW&sxU<)N3{Gz*gkCe6Z3_-3EuoM#;4nWqGJsJY0S?(vBk zWULi<-3Gh__R-KT42IRsKF2xFIL0#%#a&_ZuRnC9Q{Qr+zj^Og?5wYb-)ok4A@w_p z&}~ErS`py000000NkvXXu0mjf=X+i@ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/icons/information.png b/workflow/public_html/lib/img/icons/information.png new file mode 100644 index 0000000000000000000000000000000000000000..85c1876b5faba5f7af90b67c6fdad4b3d6306acd GIT binary patch literal 764 zcmVu(v^Re+QC2dv>+ zS85PT*?2b-#mvedY;HLS_$7`VEJS_vUX=JG9u7`nHNK^aZ~?&ubn4vQehQ!F6L>bh zgt^rux?8HS^tc{2srbE?MBl`+!kNc>Pr1%BcU-K**snOggySgm>quuD2$7x6XG!ca zrTWjfX$mm^i4*FjP^WMl=X&{p0KP6Hh-koP=*sTBp2x{MAK^E3Smg6BK-{Dx3nX)I(&_xHP}RoAokKf{z-79-zqTri*W7#Fn_5wN^~FL{ z!wD1>S=gpe*i;=rb8T?v%C-;8s$_$TBobSA^L85R&o3XLixk!g4`&wNca4t8o=XkK zQA|Zf=Ms1|9aEQxnxoin&=>+6lsr221I*_aR|Kt00002GZdv-WZP}~tRj*oB|LorIYr@vw({}!uwfFDhO(&LbJ2U^lzeR`sUwH800T8|T z00#d*{P_PLi2nZvyK9sf4FQ^mfZ|UUW(Ec>1|5)1pgh6A(Z?XlA>*-O!NF!$M-7&b z2M@Kd^GWGABrIrf5YP;mqG0Ic!oef1<ENsed*j@4Yk?RR_1qN#Xfm)wA literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/leaf.gif b/workflow/public_html/lib/img/leaf.gif new file mode 100644 index 0000000000000000000000000000000000000000..445769d3f863fff85bf8dae9e50ca2fbdd2d580f GIT binary patch literal 945 zcmZ?wbhEHb6krfwXlDQcQ_o~GuN3{H6Nag0EsGx6l|6PSd+b*I#H;qP!+!_A#wTHI zPb1o&CiOkbneseu`t#JOpR;CuEt~zKYW~Z@xnJuSzARt#t#2GZdv-WZP}~tRj*oB|LorIYr@vw({}!uwfFDhO(&LbJ2U^lzeR`sUwH800T8|T z00#d*{P_PLi2nZvyK9sf4FQ^mfZ|UUW(Ec>1|5)1pgh6A(Z?XlA>*-O!NF!$M-7&b z2M@Kd^GWGABrIrf5YP;mqG0Ic!oef1<ENsed*j@4Yk?RR_1qN#Xfm)wA literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/linhori.png b/workflow/public_html/lib/img/linhori.png new file mode 100644 index 0000000000000000000000000000000000000000..6a28defa7398849716c4e198e28cc46dc795163c GIT binary patch literal 77 zcmZ?wbhEHblw=TRn8?8JvpVws|Nk%Fy<=ctQ2fcl$j-pTpaWzxfaDpN8F9!oQAi>SS!1Chp z8wMUxUWRwqPBUo9Niy93&d6XX&C77=?O%o$yn+lYub;eR_`>*?;pU7Qur9C3+Zk^E zW?(p8?a82Cw~~R8+qdd0vyi9}BPS<@6@Op6WB>>t#;_$vkNsz2vBc&E#_u15nIw3* zEEyU8F<`@A{;<7ex&!pq%18@_FW-J(;?G|hn7(}d$)KCj!T_RqUfyN+aP1t!pLzZifGV|1kXi`WeXP zVqjurM;Pz{6bQhOVBlmyH5nK}$BX^J>}gvMGsHUCFz|9hl3f0rjSQzgGD89isF&&M z$FD#QKfxGb01}&-o58AQE5qtDcfkCKDgJQvAiYfAz5opX2Kg6g@I(BDU{61A9n3FV za}q@!gh6^)zJL3|@cS(r0~04ASA6~U11lR@?BDkv41a)n8QFb`L>c}t?fn0b(U5@z hz{vFfJOj%=cK`$FXO$3zzKQ?<002ovPDHLkV1k*4L<|4` literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/linver.png b/workflow/public_html/lib/img/linver.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1074faafb0dd1dbf711382f7c2280abea3dd6e GIT binary patch literal 84 zcmZ?wbhEHblw=TRn8?8JvpVws|Nk%Fy<=ctQ2fcl$j-pTpaWzxfaDpNRHyW>JpGn` n@tlx`fU9RSKR>P&Q|ntA**5>w#+lIvr`TM4-uv8xk--`O%`G66 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/load_big.gif b/workflow/public_html/lib/img/load_big.gif new file mode 100644 index 0000000000000000000000000000000000000000..11c23f8b7cdc4030e363b092e81b926a96bbe256 GIT binary patch literal 7364 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/loading.gif b/workflow/public_html/lib/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..20efc128316fa3ec6482e3f7667736017262d6fd GIT binary patch literal 37076 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/mafe-icons-s4e9dfa1250.png b/workflow/public_html/lib/img/mafe-icons-s4e9dfa1250.png new file mode 100644 index 0000000000000000000000000000000000000000..74c2155f52099efd61e43163c3884af79cb26fb0 GIT binary patch literal 14669 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 FV1g!&#j*eZ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/mafe_sprite.png b/workflow/public_html/lib/img/mafe_sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ea733beac5bfd6001d5780e30d6a62516a4162 GIT binary patch literal 392691 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 z

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

AuCdCt;_MOgx>7KrL4zDpo z5J)L%^fFxMqC3G{lu|@c_-K2d-Ip;v-!*Tgm>c+T_fgLNO#Tg_9^>IY5QQ;crWlN3 zJspQd<`xX7A!~fUd*r$$;%Q1EjQ)hf_P2ALkWHzcQ6uhFGE$*yG3Sb%?EDTFJ}Lkb zS*Adu&AQk1yKbvhas~;aLjQJO!Pxj&jSMdt|Cjn4KTFu4K{>{N}b`o z4c491AVx~OL>yxDRK1!vs!j&tQDmQXJ-B#yAWNvk8*xhQCnS@6`M$Vf)Q?4J!%821 zQxXJgCdMPjxk~H50!z|Hf%BthKAe`?DFurs5;@!DFU1ez=>DoNEgBUXA0|Iwu2deM zCBImms(3|1-yeNCjKPO>e_vb=t56+u*eX;m@Y5l%D=-i~LvM_Kpy@zCMqw?kGVO9b z-kH))hl^hk=z(sMl6 zx^$A5NL=+Q9oxIA&g%g@mUYk9A5F!Sj8|ZLp-t0x`=_&s>~}CIP)Nel>e#8>Q|C=OqvvhY(DypBRJXE~0Zxmsg_f*&p;)D?Lg{4_uk-5hW&N}~3XcTc;vEhx zo`t!}y`rVztlO{cO%EQH2N60oQ<#tHkd#x78NCxb{eJE2{7jUreWQ5c zs66)lqVrw4M9mZbArifnw?^C~WFpzXJ-?;sEZ6P*VOt6bShl$YkSpSWk$cU@Scg|> zd^vE-@#yAt{6!@^_fk4=ApdPrtA}a2N`SaB^zCi=I=NA=6Th;ss6wkb%lKhF|6UN{ zO?X?9)A=Ik+JZ`8Su#O8Oo$OM4_HDsEPvx{O~q)tT`|;HZ8G(>%J3KDP3X9O2;vD+ zvG>|W?DUQqOBZD3-dhNV(j#$ZmLE@fZO*MZ3V@953qP!4F?zz*4`H`cUZRf6oGkU2Trpfk1V z0*k$`Ovepm!q3Bu2=k6Y24ReVjJ3;_nXR^SLqE^v?cucVGeQ1J$(eZOLwh%g{c)rH z^q?@c2>O*8(#iG>nzC)_d!FL*$=daEs4MmhU zSsE?+{O(4+%%Q2Ccgqpm0y6>?cLW>>w~QMvTPS9DjJ6wIFXHi_0aTy2qt2C=?Kxgi za;Qr0_px!kf!7HP(K5en#P=)<4gv%2!^G?;MgZKir_Xex$C7r;`TNDv#wDfw%UwRk zhj^Rw$m-UtRji!{z}|98E7_}^Z^YEYLelQ8ebY|GARJUjc;@M-rgr!5Y|s6|4eF!1 zh5^zx#22>=4`Sd#ma<8Vl8E63@O?*gbYfh_&q>VgPIL9_0mja_*nzWTs7Mn5Z`U&C z;f*z?Q3pJxBzzec)Y2I{ayt<#V*jx0Cz4gBB=^+g-*zgE1r2139R)jJOG~q&lFH1V zze2`Y``Q5fxD_d|16~0O->q8=WXE3pJ-kJM_pMK;YVB(Sa^@tjq z*y|YC>lMFiNqXn&A}ocTAT>CFtT-H3e-DJOeR!rad8mvzbB;VZ zLLqY3zw{M31Ep|dQ%XlT8=;t2BVi&m=;!AN241xzwH6fyfbm3AeD6#*#f4c&emz>y zl}kA0`Lpcq;EGhncDIkFqT}F8(>6GTLlN3fy~qDGV89?-lnxO#Tf~p`i=@QVsaVtw zW7ar?k4+t|w*I(MZBwii+DSnsq6|xx;i0U#w+11~ikee@M}LZhczB>x_p_TU&pR%v zhDYEJ4ds!;MaYtGSPOfq`P(lq9NQY#*3BO%8(kaZ@VrS(qqm>iMZW}FuJXxc^Tppt ztugFaL-bkPC1tjHOR)|tB)(tq` z8lTk}f@L^Wah=<^3GeNzj)NP&&pn?buAcztk97;`*H1uOvhA4sJxjc6v&>y|YeBre z%0or9unXO=mEQMjg9LtAFzwv(UPLz|@#aW<`f6+L9`HrTRZO4`%=M?E;S)uun3I(D zH_rkMKl=3SBP77Xc%vi(bC{mn*R^!+T}$Moa{JW|eYKjS(%%+;&`Y#yC|`DT3!e2h zbV0gmKfYGvomp8*TheRaog%&Z^%N;2jovkvVFmGisBWnFMtN4NDVAR~`u7uFra-+e z?X8oy{`C+oa|2*A+CP0lBtKKPl_jky_QPb8(&}n?yQ6xDUCjN%!*|&{VOsXg zn^}G(0yS%OD;cV60sG@^IV5|9^P~Z;jZiTptyxf{N03^ZS>FKHQP!15NorE1A=&Ye#)9O-3CYtXG(qjG44&CBgYBXeaS)}KKkO|Eb)%#cQdXiz*U&ey$GUTed! zMDde_p?!o_HF{1gW3i40=T67{mC!fZgf+O4&Ai)aLHDw~x?Sp$^dk;C%dXto<*)36 zYI&wm-ludrPt!j2#Ltic_toX{Nj&9A*|w$^7UDz(m_i-H7PIOtrigy5Nekz>hvV`V zY&&DrV^?#oBNd!yI6RCfTe2-|@M*1HNx!*C@qhGPb#dA9&sBE4f#Wj8twI$2^b!o7 zEztnA9$UGl`ip@RS6k1lF8R-Bf3*ESbc4!OYM&xg28x>~);Ko%$)k+-kTPjpTRz|n zCHHnEu};Ar&DEcB;cEHp&*yj$do~hcw98Kp67qv>gkMz?$V?oRj~+_n1W2C3@W{N( zD24;Fu!yc12xmiLLviWz-Kb~w`u2gJ!`%Ygkul#sK-XlOWKD%uiq8)tH^6wW*Ks^dm#=`h1 z=qN8!->W*iVh#&s&wLAjB2WLNfc=e`Sulbd zP+rU`TeLkdLknL?SE_#dm0x6*$7;EAW5fFa$hH0<+5RloU^Q@R>JA02ntV+YseUD%ThK*nyc%7LovjljOH;D0u|62KuBN~$5zp z9|QM>K!A1I^`b|}Yt^LrL{x54QCPxX(a_CtI~l+8U9)`sCRs_t);k`i{d^lXz3-7e zXQ7x-LrYoMRJlV3rZk@pUcZH1vND`3FA}3{Wb49ixq~*5X0z1+UYMNKYbAdBJH(aZ zG_(;NpQ|e)#Y#gdgR9c!CM=hsUQU>eO1LjOCv}I5;6}W!IDt44w0}QY$b!6XUN)v_ zppvYnyYTzoUAS;SG0FY@R4`M01K^M)?6qE~INh0$m?+YIrA6GQTcK9M<9(Ad26ikH z)$OFYujSTF#~=|tGN|!1k<&Lx6cpsFV1jH=N>$3{45}suN9GT2AGu!a<0sThl6aC; zkM{TM)JxQO-rCC=I=a==zl-t-(=4gQfJq_&ALR@^cQ8D5l!ZPq)rF=+EpW z&jtD3jBLDYX6shwpM07qJAnNzFx!XGZPnOHc+9MAhMTNC=W<*6gb>-k1+;1-tr`Yj ze&9_Y3yG2Xn~_w&S)0^UJ3Z3|-^`yh+|vDf0rDJ@u$CGgt&etM_x(D5BKr^53QI4p zv#*``Eo9$k;Pd>7i$WVq#61OC@F-R!)MPi8#2i3w34B>)>NzDyBpDVv{`BKCMN&Yo z?NuCp;7Q!0==94!8Rodqi+5gXc4*#&5z#G{h!xM@B>GMg5~ItUoH*>GX|3uz8RtpZ?xSh0?WTWtw&^(mRXPNAbXw;QmXs< zD$XgrJujfi&Dmd8-uPRlDwN>sb7>V$Swid{SFbzL(LfG1QT=0LMa*pyXQ|iUWS)7u zdeiGYeT1nq>KfipnQr$n!rI&}w|L52w-L>?-v^?IOPkzHC0@j8dG|f{O9rl(W7p3O zFCP)!k2nubY30Y&eXo{Ua=+%US1QQ~bVrN~-{}pcizpPTNU&QbVa4vDR5RMW5k(H1 zR4iC>D{9z$ZS7(IYgK>p6`jn}eER29Q65F`K278S!=gcP?On|Iw-p=o(#n$W7G^~U zs}7Ny2y7YH#4M=>;=a=AF8X&voCiL*$=rnVi(j)Z#ZX*2C1L1(()K4F&eVS9tx0gi zAmflp%SuL{8dRJL4%&De_HD>3tEs^<65|%B;QjRlW_d4UdsG$#Bb;i(=_NZp~?ojo_ zBEG}=`nsv4nv+6kRl;}e|A(}%42mQA_QWAL!975*-~?xI3$DSP;O;VL2*Dvpa0Zv) z1ed|xEx5Z6J~%u7_x9WFhpo3&Q(ZGX_jcXeefs$Motz;1rI~VAy|VE+8LxlojLp=7 zO#|64geB=bq2{^nv8MvKDz}zZdF@P*y~W7)3&*i5Gop_U+5Zl%Uxcc1>$qovv~(7l zkCt>^n@?4Pf}B4^KMukB>W!4|Pt1^G`h~5Wxnh4BDktIl_Df7;JgZRq4`vMI(FZ*4 z$Cp6i)+!&cv0Q*f(n;UZ^{ac)9-(h_4)VigKz z-c2R$Loq})p&^2{jZ5VACuFDND2RVX)nmum9v~>3x{4oNbAqy_u86Ge+>&&q1;fMO+z#sX&%7EW z8~P8Rdf)YNo`VNRH@>0-uldeuT;e;MBvUJ>2~#pfN3wre=Mc`WsxD6+NoOcXK-X~p zmGnNBRe4-%!8C8*ihKziho~QWS4|ds?D=Z-`8G5!4r%O-baw7rfO?*mp@?6f8X0$K zSG7jjs!A%pIkQjI>6k~VN_iMl>13)=mQUgR97ZhBQvmb+?we_?aVqDnvoI2ypTTsR ztm3R3pibu6N|iAnal*a+KKXB1l|;0$&hy(ggaW$+oBmE?oZ&4^y?3o*m%yGMlBK5p z^;+G^Z-lL4S5)=e=5a2b#=WgaX#Za!eqk2K@k5)|Nv7Oz?(f#n}sCb>Ke=+2|Sx)+YyBeHERc0eKt;LkMGOIN|*~W@VxRw*1^3^bv zXI3gZ|Ml5tGx7)vf_6xaAcn`!_W0J>*qBKi#^X>6%gX~+0CmZeIEaI#BYE|1<5qu{ z&z2wD*{_#R;|i~$zXtJ_qzzm<=)h`@i=u}r-Nc59Z3e!&ThG)c(MJVf-p`*9Ys$9T zM9L_SYcIDzakB*iQflZ6{+9hLRwd=I66IiwK5zDY2Y%{SSZ;TWx4T@`dxeU=09KA% zg81djU%Vv0-_bvetCSxM597;)Bo@QKzNS5+4}QWC=dk9jJ;kFXSY@*Ktx$@nOST8v z9{1Jq_)Njo${+086LVb<@>G=mDpn>_J!v|9%%G8vJ{z&d$F2`=*ZDgt=r$D$SOy+4 z5n@qEBVM@;ZFx-d1;X_M+WfM$(^!%#bZWU&mE{@kI&5wS&XBOgY*(2SxH4_7eoXs_ zMt~4zs7CwuR@Y0;aqm?GSOI4c?tXD8Qpx%3G)t%?19DRI(YiEvOGvV z2P&X|yFb&!@%!T-i5%X4~VT{xy<=6JOxiC+X%+i(%-ik2{8e_Jj zw_i)sL{;zTDBqz)r{3P-LB_v$?>4*ev*uSz-fRKSpXgOXdEb%}7EhV~a?d`5WHEmk z<2{3tCoSzmZaQ+Kd(~X;u2x;UK38wtFgCa8( zz8>Ib`r^9*6#>4oeAkj6*yMXR^7_ULP8#K36DpH>gX;>mJv8(c&|#pGOun81;naFU z&!RNZ;^m~jX3t&FoJZMtPePetZs^=uYXvE6`8l}d@btTxF8EaAZxX#?j#jN3PToxI z#yNB}68812Bg>B{TQ&kD0HCFfVmB>Fv1B5Pm`&$**`YMLpNSc_dmTa>NKhQF8;wU~ zaPC>8Ohsu5{cWPvZ&WJH*2kd2)%LN_H90#WByoOM*7k&n7Q3cqO&9&h7Ctkussb?8 z5+Y&pZLfIt2pdM1)&KskR?W=Sab)wEjeXH?2*ik`6pT@l6-n3Y{+*IV=WK^Ar`s`q z(vlZ~f-}b0c->QYW?Jn?Cd{g=otd9Ey{)P+6Z9+Xvm=kuMdDi!l=4&HHjKI+QTGo% ziRyOzJa6~?9gLoMsHAU?_wJ7iax6!UoqlSQ|{3=!Bg4NU22vx5qYSHO6Qcb!+|TUT(AFZ3gBpd49Z{6h_!_mrk2_ z)h0HcFRRK|Y*9C#SiPlR6BDf5za=UEEYW*z`sifCJY1&#=UEQjKG(4gr#-IJZaAN1 z8gr`iZHTLXdZ#4Jjk~6_7kh=$>n4}slr)paD>>-2)Jzm)_U~@(X-S>yRiS+TS%(%{ zfX&62MtIk;4%bXKs48NjxnK$swXN7LYpKJfV>u>gMK76U2B|AV4U73nCs3#3VJm5| z%sXjhbAS)`-hyOHrk}?S6i-oB*#x+mqx?e0r&OYgj{Z!}JGO}M_E(Hdj+=`CVi#-~ zPJFAV*oWwX{C zzfhu*AU*DQxvrq$2xUgJ#*^m+5O9R~KmxgDxgl)V>;IF(OHeYjQTG&@-pSO?kEk&p z47GxOitJVX0&nj?87)-Akhy4x>;vJ=^inDzStZ__}$Dj85 z;c%#OW)f7fWTMjMO8(Ed$5Nf2{{mZ2fA-(7BXW=}Px?SaP~)R`R8+J_TT4vkDcQXb z-y~RU>)9$P$CiFvz9d2$r+%lZ78UPX33=QUUQ8~+=M~6B+3uDqVtLWv^$)5dXOVzB zr(_ERs;KzwNZ2@7AkOVgDD(|BFv+E5WS|;`cr8OZHeDb$^{Xc&kE8aC=tpkqi$ka} zqYdq^SDlHh`8OZu-9pp&Ztr-rNFAD0;8@WBnA3k`z}YL;m42(z95l|<4%Q(M~V!SEM`H+~=I zx}{xf6N7!Q<@*2U0slAjwP#*1q~JR$;<~VYcG5^$#_Jex@-CZIuw=2-zH<|-et=X> z6sm^@A3mzg>uKhxB8yW(p33S{30d$|xueoJ7kgjou0f!Eu-ntGaLH|}E$df0F??7? zt6ytJ=Ng=61PD?Qt8{lm@KlL9nkTQq{{2!@6W-{%; zrEe^es+`R|A4pkZCBhD?nfRZ;7ahfj&}4Znw;KCJapiTGOwnm zqfv><)R+P`3dqqb7&;Ga5@OWYFjNB%x#U);>PypdxS1*!+{j%(5LSJIw!vpT{|Ne1 z)dqGPY<w9IZRh;NTnPWLCNiK)xie!66X^ zo9x5i)F>iVMdki}M&@`&zZwsn&MNn-*An}qDoaJ%k-p1%;3Pbk{g%+Xx9`FuAz@5i zcVS!Lw})wk)|UZ$o8fI=O3*IG*Mr^4CNYB7J2fKbY?YNnsFf?uoZu2v2KLYus@!Q8 z1QUFn)1fK87Txiio;vbk!+BRaRC- zs2rZM=E4hpTE7bH1KRV@VRQqj1wQHjg~j4zIX|lCcet?~DG%V<+|TFK=?V*6h~JW9 z>poIL&bBjAH)1`M?@O!x6kx4*X?n^KDz~s+2&*ZaJk()WPtHsw&`AYF>oev?KH@>n zkib&5e^UD%@Be(R_Z>7goACJaXZy_eX2<}BgRNKTHIt?pX*4^v;r>OQLG%#|66@v6 zDeogp^<$&EU{FR=HCCUlD>rR)X$He1qCtoXH>#`4LFNkSrDj6D%ZC5T;e5R%ehvjz zDDbytbhBHWJcMCnH$pKu);#=)5Q4Q5T}avW&8l$rpUxz4KGqC%fUWxMH=8YSiR%;{ zt!M@?f+o^MU_bDn1}vk8lg1Fi^f#3m6Em`XxmEUuHcvvs<4}Hgz1td*1hj`23*x)f z=>tI-l|lj8@dlF{@{IqPYxagv6hQAButKMz}0Eeu`(X%Ty zF4sM8V{Hp$G4qU`uxBIkCDohXA*PSXoc=M>7IB!DULEUf`>ssB?R=9raG2T-eeLa6 zg~j^w-aev|ohsuAld!$IbpQTr7G&Vh7k$=f;D?*z-;wurx&F@+3;K6k0mi2I0-DX) z95>v9*>i+y`>Dx$%2tt3{l?r2>AlEr#ny$F?rkn3-**E|f^Gqi{x90oq5<2B38g~+ zj-z4Rdp1zwIO{YByku7p#=2fInevEpIcD}#hV=}`#YQ_b_P2g0Qyny{)E&Xy{cthz zp#0=yTyrp1TZxQ+=ES9y&>@PzVX(V87o#@FX6r*Y@Y>o0cU_p?*IEj^_vb5l(;CQJ zMSIWE`W>FCS&;t4I(GQB`5y5v=)Ap_H_IISdZxAU|5za46W%1d_Da5m@~IETQVEK=UK3NSQXJ(She)lKg2?w-!t@UT$(Y=(q7gKxEW z)V=&av9R=W1wQ*=8?oIqR0qWJIW9|w<4_k549F_%F*&a`yYhIQ>LM_cibh36`SH!3 zVMT~hjs2pLI^6D$E||;_d;7--^4XSs6)gPoN1n@NQ`}V(GbVn?xiBT;wbMFuj*gCY*K<2RK)tjK z{B@%D9b|b?jzcL#U^3P0Iz|@lyWZk{5IA89v8q*Wg>*cX=6>kHGnLN*_$H2wjz(Im zHUCN5%VojX6u{}@rl$|Py1owkB58PutBasz(Bxz^^qw=mXkRL@dE;~DI3rzu^Q5>` zvQD)z_~vw}u5*W1!hfla5$7eS8p{=#`P3U#FkI))EvUz`Rw+u>}z?-WkZ$W>)X;3_I-1d{Y#zEveB*G zaANsK7`}fuR^~cpi1>R1=C>d1sl;E z4Bieh!QS9Ro$>kQwh8Rj936vm@J9CM5`TBA3G1Afi0)3m^pha#5-DH$ZTCgyH|5%Jt^@7Vv`7$QV`Gz3QyB?%6gj{jyQ&Ra5--#q zz_7*~3!P&SWy>O{R0_LdkYD|A6%k`ufvAMAI1O*Lf z{oilD6;4=z&-*?u+nJ9-z&lpQjgIWs`$4fN;~ao5cTq`6`G(&~C4_SksUy|-0@3k^ zV^dV(+DD^~=@le%58SvP;Qw*xwA!42O(7tT&!7~X{(gIf8f%6o-VtulQ`Z~K)%r~3 z?Qx;=+{WI1_TsjqXM^`v*d|6KjhtvL=kf#s$JuvxyI{gdM@LD;PeoDUU>U<9VO|DCg~&@nwhlE!R2V#Ng&%b>Qz;*pk*Ki%)rQ z!mUl|7d>W*uHx(prkMul5sMCTf&vBX=f$pMdSJ1Sqfi`C-2A&U=b%j8JVP#iyxw=F zZ+A_dctD4n+v=d~^EQYmJuoc(x;7dHL!KuU{$3c6I+RtT5ds{(b1JGBD$4bd{sPhY^YH7K3(Jz zV`o3-%c8hTKBKQqKdv(YwqTh*9hKyuW4O&K^G{>(uZlxD-#Vt~ulL8L3^|?OUSGVG zGx^SB!nF7rCv(mC770k>s6-xnh0mL%!i|Hj$N6O-+q62Zm%YT@*wC_j@(zGMf|qt5 zr$v*_<<%%hkoQ8B5%u3R9SgVG$y~fG7oN}Q-IJL@o@FGxr+Dx7U}@KusMZ#*&kw1X zB(Fkk1(Jh4PuEk&E~aj7Za+Tv?f8zt?m(3_`1(_YLXJcoOX(ih&D1#mMn!0v#WN@WN<&F8@C4E-Wm&?95%9JRf(^W=doz;OB!S&JEYvbs5Y zjY}|tWc`!g{k>Q&&1fpeVBucc&2tuSd3$6LvH6+=xxx zo5pT%Sc5nZs^-zj>Zc1&UFm`8|YVJ~hTO9a99`ur6%W7m= z-I)v(k+xzNO@7Ro&c;+m3J5(Xgxt<8&c0Vb*Z5vTkiYhuluXdAkR;Hh_(DY6&pnmR z;Ew;bw6dCNi3A`hz{q(QKskyl*jya}n$pnJjC2%nT&|Z-BmJV{9b3Shhw5U4iQk-O z#G6GPEVxgkP6|vQ^`A@#KpD3X!n4B2z>BIV$vjn}t|cNA2_{b^msIN;J(LjOH{ul# z!*%pAS!r~{@4}1r{+GMTiDYWjHCt;yG1-eSQjibZ3Kd53p)J9BY)s7QZM>P71Xjq0 zQwpJN5o`ja;Ru@9mWKNJh}y|*=8kyxfHQlOlRH07OP}Uu9UkmB^G2sNvLNPVgGH2d z*JNhUIu8?Jj0{uG1Qw*5Hkh*e;xYw^=L`ILuea#yy#?OdEl)k?{8s8{uHL8QXJd01 zX*8n|!Fj|rIiCLMu9q0ot~L%xFi)~@jB$+MNS6@a^bU?sR5D9du8P}evg;}#W zLXB_+q2|7w9}5~GE=48#3^x~mvKDtFN6XeV%6Rf;Yhc>oV%*h?=SIknfEGjHU579> zoMq-G61+t{xB=&`j$BHBkDC9w-gBFU^Sq@{ST`-XSGxKR{H!a0-xjwXa0d_5r?MzAT-ofP^FMrIWwI2qxE(cy9% zYiio)u@NgYWhB-jk%FS(s3^gQl)<`nRy`{bne!AR!z^Y|J4n#79Md-6COO@kL_mwh^8a zI|~)IGr1)Z=&I%d>@MZtWQhg6vfrSLNyy7bqOk?=N=wuvcy9zW;kw>0G;IU|Q?~`} z=UH7v7tMYJ{AKR#4K)rPT_TQ#m&DzWQ{92G9?LE5-UTSt;U|n{G)GA=c0YH0{(kt_ zN*W=?!(9kJft*a#(|%5dfE)1;P94Z(#j)FkBC)~9x$DMRLnq3LI^-G($UeGPz{^~i2&~diT=3IEiEk(homqbPmkh` zb})U&a))UVJqte*Lx-fIp+()1A*d*}ePEZGzu_jt65Effv;MB+V*TT+fpX1I2E;LP z=XM$=B|f%X7tWs-KejYC{IACYI&cA;S@?M$b$_!~@7}N9aDT*w{seA?>vZ`Y&`}w) z9lnT$4y1iUcK_MGuZca&FqZyV4*3ji@?A$Q07ZgCQmXgdc%+b$%*O$V?~pA!er>DG z4o&|9&E}x^H#dmWGfW`*V7^~4dS1)+q0`{zI=tlo-^|eR(YSZ>zQIHrp)|z+dnpBv zk4ivfQ^3P`8qP`dfGiH(`OjE6jyeLWgSbbR$D5-D7cKTk=+AIuXi|2hA=Rw2TNmf! zIuH^Y#uRdKFr^8ww6Xhz`CyFc4Q}BtSacd<$%ay;Nq-lgXlA+ znsk6C)8q0cMaWI~&%yh_fR}Uc&QVM2T}aUDbxtRo@ASgr#sLzjDL*80xNG4$XPG$VG-cbl1%R+4Yu|Y6lBa65fMB<+94o9D1Ik0var@K z`Wnr;OA}-~BkFvZJ@ccuB1|OA#u=C~28Dc8OfUbm=&vFw1XqrnsrLCV> zl9^(;z}jpG`Cyv6pYy!Sm{W7*A5Q&v@GO#GG-tvBnp;aiW7L3CCZiv>if+nc0J%A+gs)N#N_QUV(|LF zKX#2X)91@eOJBL129{JH zV0TAui16EHC=R-@@80jTQwN9Ldw(dj0}6h>XcJUVB@y}xui2BJ!^_f$vkrSz47FJ^ z1?=?u*pH;W%m?DA#Y82&Q1@2VVkReA@}`FVVh1z!VoS@)I_;q*_L{2F zp-T~M@7WxVBCzq_kohI9OPv(?r0E;BXSju2A1Pv~67UN9 z0rY!3LGxPhyM5{INKdOv^gnpID!)A`^Rt^M0de+zfnJViSdTefB^p|yNi*AEKvY9lV-ZSZX^H;Rq73X!PYmDD97wqS3C7)>PUcBdt;mM9w-;&Svh!cJ+IUg!ai4ujB6lxLrTWc>5<{S2i9i)5J z-prlYn`?4!Vf>chx~~yvM08Do|7o8T_94iPlAiA0ph)C{OZ6n}L|Idz?-15^sM(GOnr~>3hhUPwe%& z&7evaQTrlq5Aa~B%o3vwIc9#y>2Mm~n&e^xqa7+IF$l!@e7-FIqPpWf|ya zFK2zXX|PmO3lj8tOVuvcQ%srnZRx$ZrDK<$d(63;R=x}xXJ{O?FW!IY%T+00D51&n zf=up#;>11a)e%42MEMG3VN+$Afk1P%ynW^zh8jA=e8khq#>4{>a!I-A+8b^n{nB!I zBkyHo$U+O!N|YXl?+DdX%fsP%=wIEVqKes%_@xOb`T^ZP&F$piwy30?k0?~)*a_yA zhFyq>W+EIV)#mt_+4Z$F5M{m0nE8ab1)_ZO?F71-(#Mj!ROI{=-p3m>90ur=$SdCU zcl&4r1Qh5-wwX>~YW(5-{@K|Ui+i1%6s2Th4};8mDZfQDDA#3_eUCy!!V=k+$GIC2 zm4fa;{5u6zhfDQheMi>vUDywy8CmK*3b28_JvkN?NTNW_$}f4j!*m}k_UeGK<~i!7 zp3+jz$H|*6HHHDiF~M(#KIJ%^CPHP&xtU(X;-O9l7k}$3zTX+c2=aeOFaKA{LM4Dy z;zx~{+rCXM9Y`~fs?i|#b*H-{|A&<91`P3^vM5B00dCvo>uqTTOpOaXfn#WRQQIVX zM!?upceiKrb#j)2I_RESfFos5@kh<}n>|G0UTSCg$?O+0*#=k#;o~VF9RM?aI;} z-*na=e2(p2H&qbc)5pUb{XB49zba@LA0Lry92pVril+1q7T2hpwLvaFTAMf^RyUT2 zT6&U2@J(D89URi-H>;=SkKN6vjD^`ZRL`dVpXPdx--l32GiHLNqKF5{L&)G0WoY(s#(;tn z#%JPArI1jNtJzqq(5Y!kfdy#DXX`mq?_9aIyLp@Hk%=L(q|xSlawH|l{g&oLh;@_` z?9cN4#g>#)WBQ#L*+ej3z2xlX^1(L`BFClL)UM>!z~1+6i`mj5F$xbBV45t^2mfdn z_0Tvd)vv7Fd;e?p)~ETCCy#v9r8n8?y58-_(^1OqejrDJ52Q)#xx!$5WhY6o-CH>z zlo(><>v*+3bzZdh)!d@w|71_72#^=*=FX-uARQ8N!wq#ea1^WRCqFUe`ClTv!-WD|I+iANW*?u*-+WBK&I9$we(+@#;|vvYU4}C8 z(x%Wh_&En}d)EDvwq(2YXm5{PLsgL55Mzq3&bTLEh$NGMLdeDSW4E+R;325D1LQ}z0$e(;7)RXhUstrA^7KV zKq^lBbpYfLnTOwVj@|?l2YqnjZ_*6}e`UAnQe4b>)0^uezMA1s#=kv0?^E{xJM3lo*$U(uh&V{0Fx0aT}LnEuF!8*aSfI9DhX)Ku~~u_m&iwD^y=JwCx3ne|b| zqOFm3O3ELNAR;KDks-uJ@-XOe=V6P*wcb%Ca1J~W#GV7qb5%T=3>W(iq*w@u4w*FD zoM1tIq;Y1$O1L97jkn#r-VvIlx}P#=>BjNdQV9M@{(#|J^v}einLj`7#Fx3Lq@`(N zbKU8d|1kX9AfnZgTm4PZrzQ^c_@RAPiPoHhXRJqqD~!dh@@bc~PU@x20I@*i*vLlA zrM!zhAAt7-on2??z+Mr5w!ZQktSBq`RGzf*82~A zjKYXMyyN#wAzD^*Nkh*plP^+>+VJ`(+h61x3WBI!f;MZj)z>mh4L)1X^xV|mJVsU` z^s&fw=I%)`zPqrK84OTAWk(GF1?j@=4=Dl)h3odGAkgZwt7k;I?e;f{Gma^g$jcAe z3Q}k|K)XK!0)7t5j`ct<=RXOnGyyY@;WV?gYN+Pp|T4n)aLroR*4;3$!%P}on1a5BOQex zz5(C^iDmZ*ZDR!6#ec<(_obN_UnaLuG| z-CTIRL_w)kutc4EvM09eaF*)H9sE4;gD^EfGyA+?f;x9=<9k(Xw*W%ZKXS|c>Yp~F z_5hta_nBg!F);#{Du?pu3_B#SdxO4=K`1nb@x`{JX(U&5{2b>TeOJse(#Gym6pitDrGNBge^okqF^ zt&0GvKg_>EvFfkqo|uaivDvz%LL-QI9IdCkKcm+f~B;SRB#b?@CD$Zr&PLB3yt zPtY>%6yCpU1`$)oX;lzcBN-vh-WHB2hqS^g1L>Ix+_4DPweXfFUt|b9QP`k&I`nQT z7c(0<^&{20rmpU>&2c)Tch($F2(jW&CsEv~fi878j+f2mqL&FEMouvNTj(T&cMzE_ zph@h=#3Z*Ld=awiF~(?LuB?2M+M9ECf*H;_WBi%ICPL5|%0In9Xv3paxhiwMq(JF} z*?zM(Vd=|KsbbM=bZpkCdgOshhQ%BgK?SHwX`UXJY4LC$z|8o?SvW}?O8FWwZYE=o zs)HZ2O2kx`@)szS(7s>d+RL%)&#tS8i?TTZ0T-M#81hpI)~pk=FQ;eAt##Rf$Rr(YeQO)PhUisWKNa>AjxQEp zmCt<{a4&noop8b0a^?Kho8{T56W95>#D>4;7o;<_hrjlRy!*blTWs5{&+vFJs=b-L zX(3Ea{=BF7L|*TGl4W6)Oh7eZn@W-%Y^Yyhob=#$i4Z;T8=X>Ojky*>FYF7#6$18tSP8_xn1^)4>$vnRs5qJ51kK2e=%B}y>uPQ#iV;V1#>$G+JM8r$WB zbSaw^P^h|9-5!Q~izBAP6v$7aN*&;ZBTa^REaP6n5M0|v#lm-?Z&SRSqU^VRWpOr8Q|GIJV)XtPO!a{kEy;Oh z{(f(6p_dR#fT8MGQCq7o*Bg9E$*S7Zxk!Sbn8F>7l~?C0W6tKKq^0E;V6pQz7->9i zvH8b63927{^nm(7R5niS7mvI8cOC*zq&<*;GCrvQpDF>ir!pI*NMOeHPX2$g%ImF7 z;+URDNb?HN3PLgr447$Xv`2FXk&0<|#Jh8G76fZ;3?b`-NWuUMdCr033frVZ(+St* zkz(f9K^DK-veuunHB9j%9;o_Eg7h4Xy(pXvN$D|uU{JVJa8;MP;8*mpku8l}ZtX#U zr!O0?_Lf=u`MS66qFqJYf_#|BB_$-MmgBtg9>IND;G{^FDn4O)Izj(b^+&N=wOi^P zvL`?5)1c7Ugt9-X0i65>p+y#b;kbj{&bkgNEHhsrprfjTCP2-OyP+W?tkk?y?S2WY zN46VRW++MfVcSI`mslmI+=;&W-CHn%V^f2(BkwdD?!pk7h%loi&-XP27W;D!?^8kp zSI>qrmDjNmC+5D6`g{c~2_CW=EzK3&Ue%AB3#v{0^VPfzIM43Bma&#MLt{1B04L2P z{C+A1wJ#mV`d*k)M&>NIZEG}*D5S#N_|d8>S?nd$Utcp* zINk&495w=iopd{X<|EHcx$F<%k`p^Ov|0{3nP{1yPUn#nxddvsa=0~JzGLu zNnua3?4rGZ8IbSMe}+M8^gj9doKywO&CN-Auh++5Q;U2ZRZ(hBGK@!dNTw%>P0EjG zxPOUN9fJVq0O0>#f1p%4p*>+v)*hiqOW)5rRT z^w!Dypx%N{ctn6 z9eL`%P;I8C@o3SdlpMMB^u^X|mdxsw;O`eguowB|_VbB-0q2?mly8{_fWiOnCk+c1NeE6#IPUn6F6b)qQj%mp zC%s&(u$0-QUL?RVj#C1GDLc|zct z=YKkbir5jubn7^aL$xS_R;?wkN1lH{4@INeCLC|ttYp@kO`k8i40%8`c7!rY86LxB z$;;_r758w zb$5(*>2O|@ciI?I67DIr?qCG6;3q4niewzE^9LW zB)RkP6HIk3ud|_0DCf6m2G=KN;81;Zmw;a~VE;&4N=M7&KZF~V#U18>hsH$}9ex52T2ejf+snNf&-*%(6ow|NOs+#nJUzjw-%ju>)f0Nn4!)NeV8Rex8 zTD9(?+I$v%1}T3{-H6N*Q2*CFD3x!VF0=D!*4z60x2Re7emZsb0+?08LjNxHAI8mZ zJ)ZS!d<1B%7}>-up^c+Pc+Kit^Z*{!r{12{n@Y2k#{y4psu=IpaDo(utL8gMzUxVuvnWOZLYvv0w99^kSN63~d znzJ~R%ay?Br(gQK!iB`Je}wB&$hU)2mNRBhr^2}RVP=d@A%iGEjc=s?)LXPOjx-!o;wT%iwZs(!G`2I z;t_T~Kt_DOypHIUZpZQ?^{)``g>85e8*jH7AGH6C9ysB5K7U{DLMRBJxF2`cI6KJk zhV{gb18wV6eE2F2J)&r?g1*$eZ*z+taP;)-5j$7ef)j^P`Q1>Kv=T_k%+?lsHRx(2 zm{w3;YeO-IWwQ)oqEnN2_ny*&nIfG6?5i$gBL*e@x*JV$T4U3G42DXdt{AxCigS5A z%`CHg>ho-0{%6F4EtmHgiok`5-;%7<%uIlj_)Ss6Rh->7B3qR(YgmD9=iUldPw>Byv_`L&1-kL4-ak;8pP-&Gz0+=mX7s*(dJ3 zJ@u1Xi;gVPS{uOBe#x{yI~i(l@u`Dr#FS<^VX=a=GzR7CA?Pb+rGFe}=N z3Kq^W)c^U%>acrI37j&hH&Dd>qw8H%N$j^Y&bXWOUisNrck@tpw>v-srJzC_k?Miu z)=O+Wux>E+34P`GyEsDZTp7-N#GRFLekvQo%MfTy4S@D4w7zpFy? ze0dCtLi>RV46c5TgE%%#D7`-NQVYBkOky9Ml>+f%z)%n=K-!i!JO+6?xWYTIg z4(3TP8!qu8UuuKgkefPhk_ZuUyeJ0Rx9*}opD6_MDR?bb);obCdr)v%-}}i#2vzB{ z%_ku}W1OEYR7qd0Hd+2evKkif-6r%TaRKjV1HZWwv8+u(Uf$``L^iJcWHs^sx+-PZ z^cdSDA{7gK(hC}M8_KmF>fiyefpK2TZ@hy(0NvjlC5z%>azo-@Y6>V1PPQLmcT1_Y z+94>!n7tEzVMa&saR70yW(#BMtC3S^==(bV$jM2UfQXibfCsD_z$BI>HuOQ}da16b zeevY@kJ(P@H_-*C;PFMw7D3&qkj7xY#!0tSVPvNdwX5LOM~A z+ThBtPzmk>;MD1rgnzjUUJ4&7ee>Nn`KBvi&e)K)t0^_v$RTP*16kL|kF4QTSp2JV z1>V6S- zn-VMYqj(S#nXE1)Sw%lL{VlVNv8%S@Z{Dw==4 z%2AiK|Cz~N{}4O7p(3q68q;em53MG%G2AGB;Pu7+L1?4bt^d8RZ76eO%(VK{u+xa- z;QF6SK=nR!R}f~dZk}eU)0DCl6qbf{%=oFJBj<8mQd~2v(fyoxLl; zr9+vYB!O2743lO~N1~Bg1;@M)4cd6ipu|wxREP1lb?39x^Ux{+o2jbu;cNggmOfE? zeW#5n+`t3Lgn$VrxD~u9nYy4JJim7_h|=$cenF%FI+4MkpY*(!Wb##UQ;{5Y&)aQLyP^n7 zJb-=IfprD&Wlshi9KZ%9{nTgjoxsVJ8g}o1eS@7QRsg}~!iGLh{rALIUcLXCo^`4W zJNrC0`rp4c#KRL0F691e&Vm>%<$p~x5}C5e+Z9CruM5DYd&JUD!jsr(=9?dVu=Owh zc!`?&l>zU4$s>ZUYgqZ?9T88lh#E55uv;4R$SKt#6Uo2s+W`)$fhyzmrHC5@Nu(zA zKssdoa^~_wOElW+w8@-mQ0PEP^WrD>UCS)$I{b|f-mznY5BG8(LSM(>{NS$2O0tHKowlS=v!wL)-ql2SARhtgZv+VK<5Vf}C9!kY;;gXMtAFiVpehy+ zJ{*UfAub{k|BvlkVC|)A$(`nK$(z)N;E7}aJ=j`Y1*GJvnBrkz^ryU7QMstkzzOex z<<@{59Rx~vKF`)6zp+ScB*I$JEnwX#;yZ;idD#jl2zt3qHs#S6XUy@yMR&92W^2yK zwN~`f~vVN%x+GXX#-a%A$@@9j1ddt;n==GmL1aC{w}=YEQKE=V=Pv`o#x9> za2;_x6wZ$**ope<9>ObEw0U?^h)JK$ZZN03s@yfZo_u`274`jR)84S(w6&#cOxAS3 zkY(+!@4S9G7GPJXlUZXAD$bpjU~i{d#8>-;t9O9uk8Vb=?D|AoKZIDLWsyj#wckEB zKlB9!dsy?f6%Ja-tsK4vZU2BH9moZfQ!z!M`+gPezdbO9bw`4SQ0Gfr$ zO#gyzlptw)k^LcH@oO?$U~e+sgbIBwB@seFi8Dtvb{zXhG7CBvwgCTGYIBo#%=G9)xI0wL>}7(pL6cFYA>m9rR))j*r(wByIL@T7&c89eNy;y z8pVYc!8B??7a%PMvNAi6Br*xGD!!q#T;5z%V(vfh*kOokR(yt<)<-i+nly-P1~;4v~AnAIc?jvZQHipJ>6UH8}V)IZtR~`5m|LB zEA!@a@AEt7oWL@6j|=q42t_G=()hgH!$yJd5dMgtOIuRNF6lic#{9=A$~O2mEp9ao&PQ+zfNdu+R4hX-c|wfE*P498@~tH zE73GBONM9D^2IBycUjBwl0|Ph`H$mIsI`x;L zNv#uzDch>*XNc%_KCK!Ev)cvBqFtRZPLE|qkH(TzSn?yJ)FC$NDNPHku!o{$&~1%XC_Mu=3SEnRjU<)x8s9qC6#afte3jm4!@CMz}XIQWZ_ zykyCuZe^tgUfrxyYYO0z4hgP&14h@wiakEj1y~oUiF=(Y;TyJ?Q9=-t>c`SqiL@$%1VZxP}v6lmFvR<9S*JqhlFuBVaW$R$` zAXhP>X}OUsg^)xIWp>3^3CuwZ(NSQGpIm5uvV14qd0XDq@q)h>OA>g7ev@%w5VZ^L zT<6-PAaMcPf*(AsFn7+beDFmNJ6=)!gpwgdGj;L{G7+oNIno7JZ`vas}wiD?`=}D|A$ha7J#(p-qmrmt4v{g>^)j|9-0!fqK zUz%kKy!%dVde`ibxMn}LA((Xd9IB0hcJu$notip;JpMuw-MFWTDL{dU@ zje9P5cNFS`987zloMx%VIz_%LuDjsjRs&DlA zBB5F46B__Dgxjwim@k}YcqZ`WVA!k)=EJo3%y)-jt^Ngvh`Q5TB00xx;mPJ;%%>vO z(19!pzunNf96czmX!(R<<$97sMB2KhD6_JCm=9cr5<8Yp3&XDV1b;?v*5=fzpZJ>g zN65Sds>RwO`-u+~DFQYH-={i1PQ8S=hFEr8LZiFCkEB(MEedt7+*7mDy*Y|R+fgA# zC=l}8!NfaUlClNS4|WoGe0g^T2lgcX#PL6a)6nTR#x9}Fg_<^;WgMi=BNlH;i~tw8 z%@Euwe-8S zV$;x|9JF^%k85LbTyqNEi(km!i3r&vN48jmMJD)WhFIA-JC0Km=C$>*XhgP+1IDJ| zf1*BBsupHiV@wg8SaJ)>%v5wF{^yg|Hy0}D2o!Q`!HW%Xx!SUiNQ@4#D}w<+!~rY4@p=AB;3dc7TQ z7MqOc0{;HA*|SS&%n)2dWzJHh-Q4)QA3y4YK?+v1DovEAHdW$v3XEM= zV%_Ph)*s1JxWA|BfnWZlHqnxbx8wXW>TWO{!p2n>DD*R0)#;}6XOfn7@4j_`1i6*Kq2mkkE-rv1iJbh($dVNMJjlsOxRg8rLmg`(0Ma)vB zpiE0Sn^f%7E&oeTQl1yfZ_aiq!@FGjCOjeNoclfK2_(Kco_1Y7kqO&Mqnb%USEH%o z4Cdm7e+V~r{Q?A^tK*2U$LHey1jfYCyFMioPwNA?IRfwZ_ur;Q9r)ysIGp8c=H`u! z_6#(G>LG3Co2x7hCjd+fvK&uO#=!-3$0A!RThG01`J4)UYb(PV>fc{Tn)snL08^Vh z0YXhv0VQp}hkt)JH9my~GWC?EhNee%2)CZ8^NT)fVl+5|*qY=izz$qp*Qi!{Vys>2 zBr3=RK1%vVI;%zx$=p&43P11<%Z;z~uj#EOS9Q$v~5-N-_V zwztqK2Z`2^`H_hAJ34sAwJuU0n7k@7P*PX|Ey#F2U2+`_F#UB5&s|n%tlH{y^ApJ9 zJl7$v$?ktKVY{AI=h&VtFRAdBL#1bn;r7Oi%O_D^by--q4r8(SeTUC-XCagVR-)Sf-uTgV@#e{W~GnJv+^w5-e=-Mum0J=Oz(r~AYJBjEQM zkH&TnT~h!(b}?NXL|z4d`cK1K6qnoS(#pQ5(X_eTh0Zb=V}Uc zy7V!T=?GT2wB^ZiQM$ttm@@48ywu6toZWbh-m)O)7stu5>}V^(02yfk&H;Eao)9sa zj+L*k0E0UhR1noS6%P-J=yXp8^MNQhb#Xdpvc+kCND%?Yck9cd*3(HFzZr~NREX#j z#}9!*Aw!I^Y5Z3+wwLFZv94_HT|q;dSZ;RF0iymrWc$kGE0y8ALVDha{^+{waK|tY z?K7$fX?!XIP))SZZ1j^CPSG#gmEH>9rN2Os}GWG36iO9+v}usJEqvJ5Mr?)SVthCp0t$lK4vdI%h5xHJ3r+BoOD z`Jry~hT&<{yd?kAhBx{jv|PPew^d7e_XJ0kUjvg-zr$X@Z>%BZyw|-`JV+-PAJipdOO+MzZ_+UorS#R5@K3z7z5uFq++jn4jK<0*i^{#SBOqy_A z8R;s5Ed?wM&8h{e>RgzHt3&IVj%Jun4IP(|q%e8)5wU;LnJ#4c&KB1=s2X3gEq8?I zTf=+3@`@H+RT8ILC(<4)eT&4-#D+gJ;6MZnR%Mzm5^dve4xFwigWF+#(S7w8+m3Ce4xW#@)P= zhKFKYtID{FE1PUgRJBNXF;s*>?Ji}VXw`)R_mPj#ZO1arwYc2^LWDvMh0--)Sgz#6 zIRWbicW0QQZOw=?COZK&4|n(usS$A0vjT?)Yp=HwABhduN{ErzxqT@6fQn$8%qqBL zKCe0%Ea|93xVgvORv7(-Qbmv+tqIn$z{wt3goZ z%93GFRx4B_+-q{|T7-#WCj}Z`NF!ltNJ`u4ciX2Km#($$p8ZY2U)J9*f{@WnpDk#H zmFRxBT;$azb4&FSq!HkHkLTO>EC!C4v{)k%ypNo}FPLMhZ@GLvnr6OcH0PFY14K~q zVU1=3(!S>!wHnpWW9z6HUP2`dM__63MyRzat1=z=*aK$6twCy6(GW`#d;^)jSEDu> z1y*ULPJ1=lm=uIa1zYdl^OS2R6%uDi=)fR`VDE;S`Fy!s5hCXYr8d-Jt&2m4847@y z*YD3eLLcS1b-}-QYBhN5L(Tj*yYTaEv5+KYtyxY3w`DkwnJ*BsNS3tZe45I?*gf3s z*IWk!>}Vzb@S1h1dxl4o8db&Y?Bi90$SyIOB~0VT<(eAGC;aku!a_?_0*%%g1`vwL zV*Pu%EiuUO%TpZ7FA*PxN6Y^T4c5g(1i=;0ZMoAzwe;jq?VK6Q6hyzN6p9arp`@%B zBDW!Et#aWBl*xa33xy*2K76X+8^4GjZGUEJYMJ%R<8m?({y&X zv(tJ1P;y*G2FQ}wA*|XxZ!bEbM<6|Fdh%$?%{(v2F%{$?;WFy8kcYi`7hozWDo69& z1qqm9qRBy9Q}I)?yS#rLsyfv-2l1?v{Tj;PfLGt{7+yrPc3xjPrOKEf{&AvmwD1+t z@K_>>IR8Vqa&=R5`P@z@RE%PQ<$*9a=h7`J1^zE3tEamqpZOwAJ=c|rr3L7oF7OdD zgVwS*8RuG~XrA;N%a@FYi6i3u=wrNKZ}EAjq}7ZMEz<}KA*bADg04w*0DuC z{InM0U@!vixAHUJaR17);C&aqXXhpFDj9ueL9a4@#5wyc^EzYAM&B5d)TQHXYa8)U z$0q=^aV(c9`~{y~bmrS@1?OVH@p`V`W*`;F@@23(+hDCA-LVpU+-_zc?l=Smd&_l` zWwGoYm<(?s%2S3EGC=e$?X@-ZnF{P!UBKsiI#j_p$yhdT+v zAJ|2q0og5*h{egnF;~yxEV0j(H}4&kE$_@ek$6l=mf18+zq;#9Dt>82?*-srKSS2L zxh}==KGZrrk^|%t5H5dzBppWfP~uzrBjAMKG`Yr&X74J4v*DytM{QXrN8me#N~3`_ ztZ`2m7aI}#OpeTqY7h2ehvn88v#}eepZzNy*FzHZQXEH4o>dVm$alnxUe{Vaw@|Ey zAp5HrENbCqw>xw*L%?Cf7JIQT2-+1F`!ZGm_p6+Gh+an~1ew%>my5bG_yCJrWwG0e z$2=svRWBRGV|68%cB>G_x6 z-jKR+`y=tDTT4Y!Hn2~$<%ap{%_ z_01nptwH+2S^a?lmNU?sr3UjTysg<@z>SMX3w590Ku50+xYAusY;^iT;N62@=P#A;ZdP5^q&Xqx%GJ`(iIlt9q zaq@2$KYX>;({;!8%YoXgdQdVk4_cQ!Zzpc=8zr6?JdX=h&6L{JM)f6UH;t;|)PKo_ z?iJnKRCfp$#5}!|koVi|rV<_~K~J6~@4MjA$Tdq`ej7Zt>$U$)9Y1!d@MqU``0!cm zI=^vQ0L108H!X{x{sTF9`9{2e+it9Fgb?*7rLF|xJBCM;f)RSvs!72gPgg`gW10oZ zfaPs>Fw<7Lwoe%4x65{Iykn+!{rz_}N~P?9ptMTd?=3N(IC`)?yHnTFNk4HF6CC>T z9{S@Fo%(t8yv2s>;B>C59isby&1fIkZd2}7EL(b>UYeXKNh$C?xX&_a_(1^Noab{i zI0u>pvz90#K0unefrecf%q{?p8KsSv*OoeyOsMEFgh>rP-Ewk-<=rIz{D+e`q=4a6 zYhJpo)T8lkPrq1pwqs*x@@Ecs2~N1m!rfG>ahcC?@u+~qks8N5CBNQ#j`-53`@w-q zZ?Ty`hUp#RaIIqbhlswA>Vv?sP`P<t6c3mnVnE%_2DNOj zT(`9VMoX3}9+32Q3D?gQ|1Mxzal%}Zlt#SjmjSx+$+lffH7t1b5}s3bP@#w`PyYi1 z6VVVhBy(?Kxt&d9P22-CvxeEfF-!O14kj9O8JJTNk9|9X5P`lNuDo065NXxP5k{}i~|GD|eiem$1$t2kQ zEoGwlBbSOt3y+{2x)O?nBvm>nbZhX0aa5wfYivjALP=;s6Q2OL9Md2hTIBN(FlU6yHB^fu}8?W#XCz7 zi!3I`TIBf-zrzmOu0JPAV2|c0vhH&hjqUodC1~l z31Y$8<-AHnf?tngB_6(z5i~u`qE#w7f9N!dl$0vg@U)ZwABx`68-JoW8D zqQVM;@4AO?8NxI>5_V1Bc>{ZJOtZ)~QnMya$tBt2In^e3U1-D==w5`-jdD(`i~wCR zoTtUvStDML_S*|oak#IXVt}%pKYexSHRqrNEiL|JO@H!c6Cgu2=?{R>&DAC+@e(0a z8nfD&tw}Q^i<(wVvuZha9YlBwsGTSpO!`r|OTTQUGJS5sG3COhO>X4iCcYkMx~lYZer-Gvd84YP&>VR2C!h% z`!R56PpFXaIE`-0lWV%1SsnOvQ&XSrY0r~u{XJ%?Fh^;VkES@UUH$VG5s`BXeye5> z1g}}u!wLFX%989~D+cv2q9%1(St7vow`^^ms#Q)o`uY|a)*p-Y>F+ts8ksck`g_Ys zi-kMJaD+-KngBV)xp*{v#$(II^_TkxSeu#(TTV73y?Ft6kE;iZrglIkIo6<-4|4T_ zqLBMP25HOmY(^Y7AOh~5Gl#^qx121Uv*mmn)>fOVa+$zoCE=kVrSwU7e}8|YU^zhj zAa#)qC_BxD)+p0ms#yBS2+S+Vb0g_@Ms9OAw#}v~YbUnWTMq?8AtAJ|w#HWhD7xA$ zEMKNZNJ$acab99P8tCZgJ7tVLiWoUL9jq!2sAch~r70@!JnnTH2J;xeg>0Z2!skHn zo=R=NqyOE-`;lld*>+303$ux%bcH_$+h4e`j#918fY;J58oqJj5bmRST z27oU;0qf(#n#WaH!i;mXE2U;Q>~#lDWK`E-vEhnGTohD8vPG>%@^*8)|y0lJj+(^=3ngr9~C!9$wl_JKEnh zzFkdgyaKyJJlx###x`tO0$!YIR`!t)3o42L$sC_%|Hok{7is*m@((m^6J$b<&Akxf6oE z;ccgYt8yAy)ykzmv8%Pz#|QuT-a5E|$HxbWLJK7A+cd%m*G-06LY7Rom;!B=gpKf)3r3UVWO4GR3N{G zBQ_o7LTM_8v9QO8R5pRO-diROWvw6kC@7K@OYzBuHgWKFjCILPnpMPXk>1jdiIP@` z3EA5)!2lgaRdeQ+7zDT3+hkJb;fyF`d-&yN7g=lTt`IX;)Z1jwEtYn-PF zRG9`D>gahab#$1)G!jgrLadS6vv6WKR6;g}LJUN~282Ds`EwALT0s ziwN~J_>W7tHZXs7K1dQ0PBVCQ2oH&Q;6Dfi$AI4Z2=>6#M&Ui~>71TE`Tg(L*jznm zZ+|g|F~TI6BNQvJS(|2*%LdH?^61euCuo@PE>9EP<=C&TLOk5Af2I^vwt44v?{#xnQ1%3df@|=^UQaK*joeqokqv#x>Yw z0BrTAewFYO1#bp0n|ywjIW-Wau4lJ(?yuK_;y&2(WN838I?wv!(6g0hw;8*rc$)x^ z!zU{~mrDdI1X$J-O=0+fn4*;oE4-w9(ZkOnmHr+UtS5b#WLUBHZ%~BB@jT72Y<)73 zzy)PK!os4W`Oh~N%8y;9<=LsnqvtLsAYl)Twh@GMi0OENHI6kt%f|+--3&p%kuXNb zGmPAo<>DX`YH(!2yK~^pAP*}Y;nG(qsAm@W?0nIqXKQYp2SR|rJ4<>xJm47UoePu# zICJX%kwHuPI}1sj>|mC=eg@^H8IKHc{Tx|hotO2rr@wj729zfdc{Qz`LZ!1=lhD+@ zMs~+)$QCFvIDwjvVwL6&Rkn&1oZU++#zQcf!XrinA_3eiB4VSj3_44LPRM^QjSK#y zOBsGm9~GW39BMofjB#UM1;LmIEw{im-x{uJwA!PExoMn+K}%S&NNm}zgP=a8j+!Yx z1`yOVBk<|;y0~3rgB=>&0pm|tZI6vC4C}T$fxg;+l{ui|)*N}m)Xmnx(s-t_XzAB5 zZ_9t=DF$v5MM^amW)}JD?_xM{NxNrzvT!hb;Z-&iQTTo9Te8?}4N5%rzsLzF8%zsKcu6cJDt(>JC zNQ#OOa+6o4iXzH!(s{r310)tGVljJ%qsEbtvDU*EPBbnp+fs)(ck&ckK^=D#FswT! zj=T~`%S2tII~-oV@HCly$vt)BlbDGl@w(Gv0;9RCN{#?ZI+CF=*+}~21R)b=pV$}7 zT7m&Czjr8;*6=6=rubhLuwpZS+7mw{iO1r;rywveo?!hxm+uz2R0Hwcl%sBiD}}Pp zpC2*d5ZnCMesH>`hNX6JRMC4Qec zC^q!veup;!A1xztNf8jmifno;vY`_QPiIT|L^gRgA#cb^|tZjVE; zv<-n1JqEu)7cmKZ;dQ8VH#ff}i7PZ!rB{;zQd6~?ZBS4thL3I#`z9~3eVDP)pLAk= zUZoj>>ry7RmTXJPg%cI@D2wKF0@4?NPN}CWwYt#G#0V^Rve>^sDvoxHqS)x=Tt-pHj4^<&=D*BNH5OIm?f?uf}4OH4)7a zby-~tOLM0Nb{E*Mg@yY1H(Re*T|Neu16n06;M(Y9Rz%PDs4O>Dz+SDz;#@kYqWw>v zCeob^HQ|{8C9ri@aveezetU_7*p{A3d29uR;VA~v{_!4fBi9XOLeZ=mAG*NAcpoR{` zPm$#WC?Xxo-d>&CIuh;GmU#uNqv{%q0ObYxm05QyDd$$#4Ji;L82B<&Q{aiLf6dkAdnv0hll!Acxt#)pqWy5tLa}7s@*?=&ZV+O z*c!Pk&NEBtiuLElvbph1LS>_#&8hyTFu=x6BBeRf z&7GK8Og{IUN_7!ZR+}7I{_-EJ_wyQS>m%e~qTa_h>?RYEba% zU{?^j;Z{lJm>xqx(8Z}H^FTgumgy%-=dnvVm31yT3dd?GEdslxgr<6NO4B4YVObL% zu#xcuLw~%ev?dg8WF@vYOM^p71}LaN^+6E)7@uzaRg7qeg$S9`_p@o$dY|JuKSwc1 zIob4h$H3)A*B=Jw>u%$_<0cSSp!IA76pI>5N5F~M+92_vZ_R42^wmMQVM0C<((h(m z6;Z##H|rn05?PC)UuEj`_{$g9%lcLg-bcOv))*EzBAB{U4~KctZB56*v>Op6l6oIX zKLT_|jn?@&U6nl=xN1_Z@Dc|Xw}-pb{VjP+N=pqDBiZCRiM@ceL=Q1{#|8D<>( zV&1a@LIsqJxI=fh4KFb|3cf(`cb%QIqW@}t*Oo@-Ty7&{2z)xDrlW)B)kIqcV@#dK zU_;+vrr!^<@0W1vnM$6Xp1V6>Q@{0O0BC-yxn87dsi0}IQ6-`;_+b0ey)v9fd2HF2 z%7+?-x2F5H+81$FHqzYFOwG?*@8EE6H&WW#2sPG(7Bf=TK7Skt%)EueNYqXPA4E`t z4EPKG^C^;AN_kbQ!_=^E&)ti&%gfvdOK*>jovUw{p@T9k{e3FRRx%!Syu0pW46>7f z6PLc^0xR;FqO!vhO=^g-#_I;4#2GnOv^q1Qs1)`(sr;d2MV9MOQ>`sa2q`WfDHw@{ zSgHbZX}~g&b#oPmrRaJcKKg>OfM5N`N3SNaLrzY*HsXad!5XLQ~Mov&1} zLIj6QC(_H-2TCeAq2Hb5r7!?5X`qv@9vT=KmaLVogkgt#N!k$gVqd3C1YxdiOTPYvbM z1_sxJF{_ZIUtE{f;@FSh;J?gL=h15vs0o?0)mIrYyAz+_qTW-? z97odTj~$46GKa>OF*=@uuXmDWtXEkSYVgr=aR>WDYD&|rVHB-by5I}FJ;cp~-*Hh+ZCRcU;jcjko5UR3M}w=GmQ?ZH`tZDbQC&M1Do>~JW``gG69R1kv{b<@-8sw%480E2A1GsW4}0tqh)>4Kg4)mzzb--Ir@)Wnoi1Tx=rGPnm?} z(pJY*%Sia&=%d;F?F#2}ob({uX@989uHH(jn_3=zgT%*!<7M`r9sr2wA&Pi0QuKx_ zm)a|r_Dsy!lVP#FOf#~xUPu2G@(ssk%^dJz+;SCsJt*8&5DkzU;M4#EpERGv5(1Bc z{k~^4;BEYXb`;VJmLVo#$=XsIv5B3Vo19kt!S=EYlQAW<1{pJ3AKVZO86p8A zZmUTZIK}0o^lKzSl}~P^W{np75Lo@bg#2jSI8)*s;`l@xKET|lH-CN%Cy6_iWtXSIYtXaJ%JT6aUOqPnVp zRvAg1dA~*7Pn=D$>kzZmTu*rj_{Wlg};b92-dGvLLfF+PFMhAde4c3Y~*1oL~C zJ}E^6+4EsrXkmeP`$Hh>1w%T{4NFft?%Qs=BW`QvVTJx?tF6ubCf;D^Gy5Nx0W=d2 z#|p&FmU7^$A^uay)C$xM9S5qoit`h^K~vRcZywOJDEw%oZcb>z)70I~_GWo|TQ0|X z_4l4wAS5g0wydrd5Yy<`uyImzaCz7+Q~9HbEYkVX8#y7oRO{Qt_d&Fz0$3zrAa1d zPFFdPIZIqU`Bmy>8?AzcIeA)_Xi9bRYAyutxJafhF9V9l<1J@34&D*1F+RPC4H$zY zyV2g6m4I9WFMINc*xQCIii8ZP0%dGKCd55}xF8Jzw?s+mbXEEd3bd|P2y=n=)Y0SJ z^FY8)BJWny(I5@`x##H$O3>KJkv5qZxIh`@@70(MJ73&y53;yf zPt>@4v_7358xP?(=9llDF5XhT5Ubk@B?j*DwZx(xH)L^09)6G8A0``<-Up76by9ZiTRP(awLSJ=skb=`!i?cr5p{H;O=s4{qAGX=^ z4j~$fWrO%2WBP+xOx+~qh{1~G@xag+_f_thN^2f$mU9c;Z9R!6EbdS)^17a2d23oZ*@@6XK zwsV7@c)EIY683J&tqP6F0)mzn7J7aRb;Nk|+9sN@_Od6kOyCy%ZPVz!s9X#5#*EpHp`wbRb}&Kic06a-R1Ye z12~H1{2`}0lKEq-x}@o>8M-AEXhJ1PW$kXr~p{-hszv|Y;8(VSutONki`J0#rVXBFmdj)Q?m?(;%3T%v#W0VQw6F# zL!a1ty^9el7-!o4%QWe-G+MRMJ*%YzQU?=;s$^OqASHv--4@mmKU9f}n&emQR^(`y z8KXA;nY?te(vlB5EZ+O(8tfT8d4p(XXUkHr9MRU_{cDb_0TGDXU!b7;j_-IPqT;My zS&Kle1;c#=R9WF+GuhXqZtZ}5gkAQvjf{`}ot+|rZQ>f*`So(g+OS%E`Z!I6`)~iv zCMKqM!GRqe2~AWo8BILv>WT5GP*z7VQnPbwW~F*ZSkOVP5-z!l6$>q|Nuixlg)lSI z13c?!0^Z!6qaE$WxWt`Iu*I{+!pSg}ZVtlk_MyJp;yPJw<@MI=_y=>d!7&ob*<8kT zx9W-DPX*I?dXV55R-7rXueIIWAKS&v(De}fXHfQggC6tP2o$m`z-TmfY!%}n>^ZSA zC5*iHQ3_ZT0|#L@38X)xqXG93)JgMFoRJaXV@Ce^fd{WWy8UeFF?6EAp?-aOgYH+G z7HtJAM5{XCltMIEoJy)%FN|Ermo}QdJvv_2D%^(-i~aPbsuLe^NLRIlO81gdKTlCS5%00mZOY|yv z80)s?x+KSEz37NKNAr`D1VO`|8#+78GlIGmD;f`2u%@?Oc7k$MpWW{#I8-z=ENGeO zboYhx4tcOBhrh6oL$zK@1m^7p1Cs!^{rMPff<0LOM$vQAF^pPVz`<1y$SB%lD*zzd zWV%&r7U+dwjc`XI`2Edsg{G{(1@clRuIEadCU7Q;|6;N@gycFQ3WiTQ8k?!+WsRX( zvX-M|Et`|78*6cf$U{R%fv@@uWtrncnDfJ>4p`2ylgzW3GnFW;4pPQJ2!B*cND~8y z!7fBAlOSUHuQc@TDr0{3KUlUGo_tgBZB4VysZ;1>1tjOUb8PwOna?5kA31vZS>rlI zNL80&KHb_Vjy4xYUng<#hLi+mJ{HaCfQS-Tcd-%RR1IsC0apG-508g%8v<18_WpC6hICW9Kfci=O6%Xp1xuW8eF%m zJys0J+b&b0>QyZYHVxU{|E>S}m0Vv&+*QvQ*U)qlv71U_7q}{j`d8fjqO&9zVgFbx zN=0#Tw1SE$+k5xQ{>9u!nrHIMVUNhLS(8#Q1J9p=#4b`@FtM~q&}#ePW9!F)Fa!%4 z?^es*;ET*4dW@#+7Sn8s4HX5}t?W%Ox=(qQx)YnP>+ z2_vK_FG|L2Cibd;b&h*i!XKw|+EsU8Oh~ws+ovyA0S<3J@B~pcqLUq9$-vR*%IV10 z4?w(!1{0|2V5@1)WbNDzc=ym25-%`b>giD}{vJ>~a zHr20Mw?h=jU1VA*h-1gR-h-8a7h;@)6^c5WgS#8ja40KRRj+&~4ssk8S6^14~0vG6``C?n-Op?)uQUtW=Rt{o% zF{)?;CNtWVGx+HzM5MWzi|pCf2rPrYZ|h0Um%{k6Q#oq};L=DW`xt6g49~_=K{~yI zk4KfSpCMwV@ZL0~2{ZPViq6jF`;byd%yJ0?&n%PyfEK0YZbSHKz3cQ**Jr82Zb}gP z&)rlqUC|+EYV*O8b`mybugg*4`wPpH=Sy%Kdj(70Hw}+}9n*WG z;p4^kr3mc7Kyu)z1woZkkRY;b3c??4eP zwDTRLoh-hW$2THlF9p`S`%j_T3dEku_-8RA5;C$nQ&ZyFvLTH)rOatI^(nY#8;s^B z{MA3)Z$ts}b7^Gq2NbKqXrX50K5rX|k<4PnXvTh;dG+V2aw4FNaxhJBOKKQTW(d}X zQjn5DV&U7oh|N|*J%+NsdjUw2XF$_#-v@_EUHxbgMvhzv4gwl75VGo3{$(m!%rcEZ z<3y)o)RJTqXvJHmk30FyEzMtoms_g4zfvuyGrDM8JScOZ#Y81-e>WE z+0rvUSL4#WL6;ZSRkfDQc^bDz3bMHT3!c~oSCmOl;|ZhY3vZMO167&nYn-Pda+UMF zjVo4Fdo#i_z7(i%SD)AuT5@mNUf}7iM#Dw>ls+rWfe;@a+9BcsdCXD4_T{=OmXAgY zwiq0C?+B5V<}YuoDKpl->p=0m#zs6b1l%x&U$gvC`tOJKaUSn@mjVuW4)?J7ue-0s z;+ci+SkW;gNJMICe3MyR!2+4{^@BrV4`Wiz*Zfep&DSB42V(c0;$;%|jGAID2)X?r z98uStc6g#0o$$KjH5V-~XnQn_Zvj3O|MyJbd`u}F>HCWvOnGE%^N@1xqJ42yNtY$%CS%@~3@yLD-;^0|$S@ z^5sCzioFZ z<+=5_PIp23{OLk|#^)x_VfI0Lxwz5tih@5rnUg|gy3saux6t!qC452;W!>a;{$288 z1D1?}XgSF*G!&vQ4&w3hEchT<&4c_U0 zzZ&bwWALZVo8;)p6D8bjBm21fHYT#<%Vhe^CujZDwy@mUDWPP%yZj%X?hJsJVPx_P zd#J~rLNVoxMbXroPgC%{bKJp?RKAc*NYe%8!3ocf++kzmDqhUuOQI(SQ<&fZb}U&h zJ@&fqYwX{X>*r;&8v%Ti7tKTcYtXS`dp(Gtp%$T{t5?=t!oALJ%=b>dKk_+ug@zEDn zJrx#F^|iNS;Yh4ZrTa%+7v&sShvO0R^)N53-HNr&D?VW{a0d$_&P58JvjZdY{c*4A zrDYYS3Uo)TI23pH+ko9};iZRgE)Mzq_tz&AU?w|=>-1lU2>Qt@XDt{1h6adPyd!q2 z4QZ`p_OZc9&xxw#7ik)rlN&ClNo!^tY=N2$P=T5)xE7h5LBzKhn7Zu4BnFzAAjq4) z6AQhplUskZw~q&>JujTsN2W`RKVyTixYjwWH(+TLQwf-B34ZE^~@M= zH-43+LOwSrd;kXXXqeo_%_xYr;up6S2>2KgESYh7yqQn|1o3|NR zo}AW^Vvax$VcH_lq$7jfY$*XeWlD|H>CsWD&B4jQ5P*}V6P|a^1tP0w5>y?GaOY&f z`~_D1SNowI)xXk8)b(n5OT^r`@yEz z;zSg^BQ;8yoJmgPXAc7lW-S6<>hT211)8Fmt`;J21ClugempM4czpbOtIbhwbo_r& z_0GYS1pE7NY;3$qPHb;%Z)|UD+uGQ6vaxO38yg$v#I~Kh=iXbtZ`J$X)ajl+HB((Z z{q%zmgo-1xCh6i|#k%b0eB&5FI1vT5JotS?175GuPF74iyF4P6;5k%0s0v`W@Dfb+ z&q+i^`@G>^m4Cy-BBJ6jsssW^&7}&E))TSPV_rD$&R@LD0lrl<2F<;K968yUBtxRQ*5JCrgkXYW2{>?dY1yX|_a#hdfSj|;DziFmQ; z)zlPSx54TteR<;kdJ(Pc;${$lXQbkj9*o?`B+3q-zCI+)#rLR-h4Nnrm?5$4@B4!v z@kqN;Rk7YE^ddw~y28qx?jt|ysduz9*9?XQ$riSkppr(^67hY*Z z=nS3cs}!0-rK2+l79T8%(0v_R2g{+=CBorcdV5p?&8GfN+ z-z&(@rD2DKLgn~V=P3zY?N>6s0V7i@ohUH&o5{3XPyG9g8MsMV+vv>@LY`V6$(~S0 zxG95fU45#=0*fdiwoe@5(Gx zrGgg$*iC=wv0|hk;eFD{gi4KzFJgGCLHU~Ca-v7!f=p~RB&-;t{lu7wYcH{2*<{yR zkdE?nR*6XraIXruyQvv?z$H7DG!*^0frbV z++YzBkw;!Dd6mBhy1%Z7m;P#LSBk6E_k(IqA{Vx~5lm}qhM_`Q+p$$pe_qWcl$WbJ zfI-Vvpbfo{`FitIXQ#lTs9G8utCg|nVO&HX{s6D(^_Z)Pm}`lCh$Th5(3L{}4Xw_@ zdp@Q~Ujx16qk;bXya)92_~Q&%EGZFrna<`o8&{u3(9sMc6Am)Ci2k;M0Tb5lK3$rN z{W_I<6_mQH_P~XFV0FGTKa~l-ZcSTHLp5T_JS$d2-37_P;S%rz)%)o8qh`p+{+Lr- z1jfTHW7Sqk0V(xXJ!C~3!QQX_b(&u)$tgP$4hEJq<&sLzVR;x^Q*rW9L)A75l+OP? zKZbG^O09LmkQXKvFRtW?ftiO)2%>a7Y%pQ1RS~2jMcci#oR$t0v&7VhKW~$WPUY)N z<&<~u&Q$LA;uO2QTtieOC7U^Dr3-Iw=EkzK*~_$8RvIaF66qgKPVllif3sP>QRBFP zOIzH+bN#ssMY%s0shTm68 z%VS8b{HF`Q9*D$|tG@890jVk6n!GFA2AtluoD^0MExgP{{EdsMtb8kQN{$!q3@qRw zuR4S!zqMRrjNe=5I|+B-E?Gx4e70J9RbXruxhmeNk^vc3gcWIHxvC-u67lUk7Jm}p z=B^${etdH4rib!y3u9=alSpe32_k@g?FG;4JdBSvb7*K@@G#;9u4tS zcrZ1T@1?geNCcAu(*w`kioj7{J3jXMn9ZM-7Z(0&QK79H=f&P`A$3v3?HH){4aD(* zbJ!nf4@iDvus~PrH7G6;+y^VW&jDqkdM~vbFDbz6Q|Co$0csQSedL*<-{%YKfe554 zVe{A)%HnSGU8eiDw|cExHR7|n@|D3%aMxltdNGNvXTM}j4@~-lyZh1p3QOc!N`A@u zo6@S)e38X@(D3tp#;ZhmZQA!kXwE4J)(^kG2MoYvoQ~!L(eLTr<5S0^KZtx+4&or} zeur1m-GhQXH9sS<)X#6E2AuV9AdfBjSHNayRK}C_^pptJW9WNFg2_2OxyG!)8y*=H zoo4qO(h9Rt2AtKor7Jk0lrQY=$Yy>X^!V`gOZelPeut1aL9qiBD67eQ z4DFcc3n1S}9$@jPBohupJo|Cqana%y#>OBtI0_<1od!Ezk3QfrOKCFQzy;LjvU$@j!A5kQHE zptHMcl^0{c$W~My)~S5#wWhncq`3TWH4}#*Tsb4;F zB5<|Zs6Asle{5sA-QUJ#?%=N?Ao45M8HQfJ(!vs$>tH|g8a#YHcN+5VI*&)M>F zMz{{OCT`^)7AGgs;$}=PKHfZB&K){8SR_M7+W*Av9b3#5m`R+~~>cet>i(s&1*Qx~(@4BruFs*oD>_A@L ziN{8~qiK7>>NoVSWg{Q>Gu&@VC()2`J=Zz`e;d6SVE;^vFS@ie(0ovIm0=1myvom> ziD`7~R#1rTs^y~(89ymt4E-E~xcEHr`sS$=-E&nTf9N1*rQPeUw;j<{>Ya7l!{Z(m zH7-@6!ZT(y1=BKYVt{BxSJr)bkW93LGZb?lWkkC9L1Uo3;Qg{PlB`Z!O^S+gP}<-B z?mX`{9`_g*z>P)*=G`J{olCkb<_&fIur!)b_c}l#-AT_-+7%{lt~qO85Gdr*yp0(6 zQqS4MKeqsQ80SoROmERxa%^y6Z6_8oA7^`7Kt5wPIdS-?? zuW9Ev`g=U2AS<$s5;L1sDLnc@k?%}$k=*{gLy~=uEm@4H#Yz8S+_-&&1&EEF7Ex`*PQf-AMTK# zn2wgf)nra9w_P+*RM{3q{G+J$|26qUH;g&MjHgbzWvTSEE^W?>G~1}>;B&wtoYC%- z-n|*x198J|kc1d)$)QfVNg6A@tLyVY9gRDYELL;!p$lSpS#NHi5a_p5w$I&x?g5-7 zyDwPOdLYp(HskOK+Axyi=m-9@3^SO^&&`hmB05#b^y7Pf&Ver&f4{JK+4RB z&Vt3dj8~dO%4c^M5ft^MQz3{SKA(wN+RoWHNTqh?t zLI(^7qkQpG(3TqRTGi#*ny^E^kMa6{~DdzA8_fnAj6 zO(ZVqHipeR2PaMn^p@m!_6Nwn3_@F81Ws4e`}fM3M?3!CX4`_5=tGMT~dXq~QCjz{+G&)shC z{pCtC(Tf8e&zfxHV)KYC8ighXM=d#zD|t>GYde4a1r+ovTff+*tlOU}3u#0rI8)wS zq#GY=iyIb}or(#lVF=UfX%u=>Ff_aeV`@PuUt}*0_q68e>g5Ul((zZURJu3Q{yn4Q zb#foT8-TNkXC}fokI*nJ6@;%-hYch;kvNw#91ED9nEZP0%>tJOSJNQbmyA6Wf3>%51qX|10#R8RrHkKu_&@WGjyuU&Js6ay#sE;Sl2Hz|jv< z-Cbbk!Pl)C1tdnL%Mf|K=Lh@se&JEk^Dcd4YFL@g`2C(+%k?`NcoSnd40@2M8^Nj$ zWt$L@GJBkd#bG4wOC6LdKd)b8tx9Pg5BodPVBPZ}$q{yd?x)?D0Dp#`KDrVwgTV$~ z!WK7#yGqpa`4|Ns2lTFdxD3ltUi>b5K52=eiWh>A`um-Ni!McHw^D%>Jis?f;PY4p zE+$se#AAnwdA5anl61Su)KAmn3nOm2bMW_55PW22iLC#~7mvQWmR|qYN6)(1K-$*l zDBsN_{`oDcUJ}+J7USznsjJSaJ(LF6Zr2=J2zg51dK1$D={=`USkmB5cCHm zNk*axTr3Ue8q!;Vvi=MbvAIR>CjbaDW%=w7h2CcrGov__%M&r8-!O6fzlkQZJ;~mi z3=tcTgwUS`kFHoW)48Ki3FQ(V;-ch}p^l@gy0Dn|8Xbgp=@b%bY*wAA$9RrPq}CGW zS)TVNzWNs<_6(MqB9d!xqme0}mm}4_p<{wQZSr8WT=AO_a9V}CZXFUWBIf!S&ncX> z%&LDK{Y2HGG?u2NtsD~>Ai@nb)=ZJE7NMEG8Pv;Hz4oVBE>^DI#==JVDp9{#z7FOG znm@QWr|fkD6OS$ZwtzD}pAV?Tb44)S#$*2VuYoAN2FY`qEvzAtZa`0^PTZ0ymbp+pg}9h4!XB5M9Vo^^Bs z8Z$AzTrT|l^*)!jF>LFdev&j2c*KghGvzM03s>f zUCv!*io;(N6uyCF$<@=CEmE2@!XPBLxqRCCAZN{#jj->%hq`-?vTt+^g;}+wZUXw; zdHRl>9$Y}LyAcIypr<*1`F^>cMcMo2c|2X93f{&b$>ceg8%=vJTV=PDCjw~kcA_*s z+OQo)seG?za7>xLoN-&t_T0=qvm0LkX-vJ1NDa;iJ9nr+gC~HjGQF?)3rnkjufqIq zQ1(VA2RjQP7h_|YA;ahPpr5Foo$v0ceHv?~+xgxjfJ?ft-(fF!?o``cc1O?SgMaAl z%I7sfB3=+8RZ9NLF6B86bNu>G_)w+#2aFkR((^Z3O;>%+x?vFi7XWx~gcda77+htZKIc4)65ml32*gg0lBaZbORRr@Nv+;d*jDlm3Xvx7 z-5>o_ht&Xu@H=z}-$e6pg(rqL@wAD+gT;^nu&$lRyvfr9w~(XMC_>aq z@vV?R_WO*RAXNU_*)O!A&6xex)1i=wl#wKk)5R!RD0fRmWdytuH)OJ%l+o<=tmX%~7fSE)?bO8=YPeOG%d6afi6(>90ceD14| z6_IezH6M>)!Xfpni+}JOG9es85dS{Y8K3Xim2$q-(`O0%&zdfi6PIlsUp7X~>h(qBaH?72vL+PpYAhE^ z#W1Mm4&tkB(>#1;%-=*laHliH!Vka?gK{hVUd6UkVL>-GE(r;dhXnG^&%Wi)xpO>M zhrEvwaM-99Q!223VX;P61ds$M znz=7e{^faa(W~5fDCdy0TY8G!SKpGW*9~Tp7Y%oEH3lXkfwA9#@3CCz;{VzUk>JWW zxS?YrF}622@z{g|6#X6n$)C5{Y43|HYQ}6*F=Rq_%#5orD$COj#C@*|<}Y6CA?)np zNj45p76R)e+PXfvs5NY!dii8R`rG<^2v|m(QlsyyAvt7l%n+CHD$TBe_W+a0Nfb!LSQ5FswW959gnHgb&igvMA2qyi{`(~e;uOqu zse03=JLdA>cA&dgRSs$Cn=cPbF7n=QBTQNINV1eVO}ORUJU1dJNs4Ih{SV2&N}0v4 zmWmN{9sKCUE+!#currJ}+(y8?k2;yiD=<9y7=>I;maJ3NNPsXFY!jJ56KfHrtu-c) zN|wKIr>ljRFoTu7FzmeVBG~TxPGuWl$JZu8uD9dY(__WatrdWe;pG3~+%HYZD50hPK7Rx|(E z_yn6uHNa{d!jS`gAe!0yVLdeYn~8J`p;J=Xs=oq*8c_5RXCFl(gFm(-)ji-jzM5=v zQsI^t14bwQnf*KLcy2cle&RX+p%8xg7sArtaVk9{G+TSg?to*$()V07um3ijA$EX% zy$$@o4hQp~E?}T8pc@E5eU^*v|2s%5_~u^nmE$;QNM5Gm|BmW;6KF^K4|GZFTKfC3 zS|fT(j-Tu2_T2A2Y_GUUrO1qqi|J)I7s(`@8%(~z@QP9&EZWj#MV`%&FWTnI9;X!X z(*0j_=2f*ExK`5KQDX+5rgKx3*IUbIzriJonxHch=v0{s$$eLOsbg>83G~H&WrUn#gB+Bd=3uy+C%t@xX`R zl!Rt;t6Q+Q>mD3=6+>Fq;b}o(<57SkaAD=@e6+ede61ioKf!oMgu~}k$@JT~E{Y6n zVu$<91JN2u$cAj$?LO=9RhE#^_~r{%EAY|BS+GZMdCwBKS1QyWGU(v;C4J2MNZ9<( z2%x8ybwkTVjH<379M+&dF#$ejjD-_d13ly4vyCq>$q~k@bgVT$e5?n+eT{r?@-wja z3+m2h)S5*oJ|yZM2z5viORIbO-N)oa{s-TR)js|0dqNH1(Lmmt=<5z%M_xNHbn`uKb6xzSybPlu}k?=`klAwu+% z@%*9}p`-O!2vvpmL^CNrxr!dsEa!YB!wTIt_EK$^#jL6ls<|3j#!UxaBcUbL``3MsXK#tkdbpwt*$!B*PemuA05!C!M!IAZ54 zDnk~h#BufKfY3GLSW0)apgX10Zc9--pr4fN4(y-JlI?5h)4UQD&4T)s{!6%YNdvpS zTNGAQ$_#Of>rwqGzAe_9hpIUwReh3%$%|<>P>mIEzU#rAv9<+^xz!Zo<2Vh}S zk4s+Gfp-k+9qX~;QQ=kdem|?U2oWSzpEXOD{p{VX!npGeK~YaN$@cH_#jp)+(gCmF zU`gR%Z8=E$=ibrkzVfZFrA}^Wd|e-C)N|%4o)tK0WamNk^&SBIK_vin;(0_YctQLe zj0DACWu6j}#$)4OBdnd=8y4zzb)E0v^p=K%(BK!T`y`)6lYF(Gz4aygJgd3J>isp+ zm`!3K>rxWmuax1OfrK*3-B^mU{<_`bXCsTlYoTSoRmC`lm!0coAv<~8xoD!5;n4j6 zA3MSg9XZ@{yYln&@&V zTeBf3KUhzsG3yqEIM00QJejn7DaYmqz1QW!34xtqPj>Y^57)r|YL6MjXaA=`9`tTq zSonXJQOGVJS@NLw(>0LbTKaz-;SY<#o^6qA$qr{Pypg!(s3TJx0Y zYzqe*EGq+gD~H3-3}x(Qro9SI%K7>bvBab9dV!fAla)Z>8|0pyLB7%OvTEvWIq`Sf%5YK0>Q4K@ zZn-XZTv{@&<+1zw@N9?P1LgU(mojfuk?SX!$fw~B^t3_&w810sQX*|8=Xr0@=Xgz_ zua@#G)wK8=WYhLiEEk2feEsNW5p~k*_QdV(`YvLPvTo9_nHVm=Z3#_Knc)#(T{ScX z_?tlpeR0LFu`WF6r=KxhWViR1_Q>i{H_&w_#pt+MH)qI3;(U-j>&yMA%d|C^9{|Iw{f^ZuyNzpG+t4+51@_2p|hATwRRM! z(7pw#HlY2ODQJ6Z!5h~sbrU*&ewm8JQo&!r9wIAXP0KODHo-hjwjT4=NHYoiw+QA7 zsg20tz6IA*?hIaCJ#09G5wa30ONrAhF22!(vV81itQ#_6n!13LUcOFTw}pHGlqK7q z%(+r(8@d*tr!A@|2o%Lj$No9#jlubmC4Qu*mE+!m<^p_y+}^=~x9c8Q>(;zDAAWMW zT;>19Vu1IB`%@Ii950sN-=gKM$aGCRbV(`71G-naHQfS_9h*3t9m zQK|DwG)A_oi!=3UmP4R$zO5+rAUld`XE9ZMNomK^9zane&|h8_vq`LOTSa3rpRgsZ z0Q7J^4}L+m;Ipv6?U)zO6xV}Cj&0ar{l-|RU(?Y+)1gG{wI=(KZvis-=v9r%lw9k@;m=6AC=U8^TvUCCp$m`ymm^He{@Mjmm*)TUQz=;B24fin_wG#iiN(#S*$0$Ay=7jv8G%+vow(qbsF6aLS- zR0R)rN>e2|n^O``WD>}J&>iP$4(vRkj{kjf>uaC7b){=+RYr5>_SXFsP;p%O?t7Kz zVaf_BxlP@zk(boxje&2qb@h?@&*rywVppqj;hWUes(GOPqNJLu6o*UTlX{|Dw%_M= z)IU>hGWBle8@KX{C%qu`e_ZEcK$6|6}Gz8L6`!E6=MasWW1iZ5RHGLMCH-KRPQQeo9>0D0vm_bTHiw z5M)YACjj>ip zdj5n>btRXfuKm_s{_RTc%u&0TADFpyRh@e5Yroq)aW~!U%}PUKdjov;wO8+=Y_{!n z7p>Mj!kxA0Z3R{NL*iUYd~z!xL&kb30ABeN^i=#Q%=VLe^2WH5gE)~6aYJs|@Ae6V z{T4!h`T>*@hcaKkvJEZiayLhmdMfGSY&NZ`rM%Pt&0sBg!C7DXb6bj&dB6B4>__j3 zFZZ{JOtJ2*H`}aC#MiBBu;hd65WxZO1>v+L-scZs!IpDk!2DY-S6nV45sQip%*elM zpoPQAlXovw$_Mc4Ki}X?_s{J=$4c(EC8io4_Fb?cTf%R?SFJ@x3Jbnh>7f0auMtBD ze14Fbh1A12($xhHcg2bC)jIiz_Z|;#Bj~bB$(@#Ww>yeeWwO-G_DGTBgyXGSfA7g# zpAyCv^o6(qj$xC+INsKZK<+>A>R$@HbrTKw5s97%6y?_xyj=qWdXx1|@E}~FGKlC4 zV;YryQ4zjVOlL0Z-5wfjaYDB0`Csfe4p=+Me9uyz1>CYE+%p4 zm`Xi4GRpYCM|8**n?jf19?yAObMtgSWphuCX+1&&LMU9yX#ZBQ-;6Z0OJ&hIqoZRM zqd<-$0s@2u*$KzN2&;*yFayeJ1_sqJt2CR){Wxj7kR}P6E}Yn`^VjOhz&BH(iEg=Lzpa+1ZCPSPJW9 zEs)UT9wNdW-E{sU7rt(7d3pXUmKXDXyvLudk0-iF-}gBq`fuj*wi$y-(QDmw8+t4AfkGa*J8s7zfX+zNpU{Cp zI@T!>jSWhCID6UIw9wAwh76sQbwEJrDFCr5i$z7F!ACuygO8S?b&c7ii{jU3M~l&E zJGpOm8*t!$A9THX?yAS!aClHDOC)&_b%#lIcNt4qk8+pdo@Ko2H?*Qm!HWv>!#ux#2*d^FU%#KBXvqowkTwm=(=0@j z=CnChEo9SwXk#mfgjnk?8M|AI{j>1<56!gA<&Q76hn(UP=bb0Xjs>=BzvFzjB!70# zoH?{S&sqWqD;yV5c@$MD3fFQ&V_$)-y`tzQns3(D7c+EDP!>Ezh6f=CYl94F_*zji zj&hgMJ01AJB)x_YDct0Kt`6h-7=dC6_7 z)i`s)Eh0sjo}qPBRz9*}PX28+pS!Q!Jw z`ES;EzG#?Ty+l1|3ljBxCu}qm$^O(w7~i8GKDrQ zF0+vMYa-p`F(KW99dj-P0hc^5gd(G8y~qm9`o(Ij!xg*0gGZFyr3FN)de+E#n2~bD zW80NmC!t!iDe;I^s_SCJM#Ji;LH|tvomlWSr~^7QTQ-ZaN&(B0j$C5-LsYl(ok zbucks=L68htT)OMqoIcRl=a3wNCf=Nl&it3dM6r73*l!<;^rRv6%;V^&}s^LwPDMF z!AW*ASdx65%MGB_LS49clbD(iM<}?Mu0~6l{9LLvVwdEL4LZSr42yvAt@KQI{~(TX z69`Ol(IzdXdV#wqCpwW5m^VA|9h2Z`$4yQ1cpS7)RuGu~H_wn5r^EG5rGv%fgy@8lP1pv{$hBBT+_?LKL7r|2xQ`+`oE|GWQSx9{I4zY>VFWW z^}p?{Z9*Un0swtzy)o+Y z;=h63p64EVJ{B9aUZ(6MyIU-=PJd18$c8(CEN*YDfyCt;N(!B9uiZ&r*jT{P0NEf0 zck0#IC3psyHoZEv^o-W)>;N?U*UL4smaj*Y(Rv1!!+MYc(^{P!A`T%&{mRl#R+BJ> z0X8Vj21Iyiwr#;TZ6KI$E-9hY*+a`23dIOc{ z{j4jPDXmA0ziPw%`ulr_8ClzL)=t2S`)D8}q`}Cm{m#-G2KLA2n>yTJK1$bh(sv7Q zRI+VT)+69M6vUyo2T(L_FoS)an3N6fs0|mW{Ym8UFw{GUs317}`ToGNTBLc0L%iJioLy5s9`e20t9z>rF5f3uBhD;iB|?}Czl-za$sk5O6MoLjbC!o4z{UZ>QhM$D zlST1KICh=ZmfkM^AX89G>>P*@_4~L_88&H|Umn#8m{4x;`Q3ojvzlLR$3La~r$@)N zZw6QqamagaF}DWqcgFRXM0>+$&HOJ8fV}1dy9fGxH;b%4-1fhTS1UWdwZ4P>KLYF9 z+e_B5@Pvu1l$a?ytw9!`nK|Q6bd)-*xbb={eBtV(29+Ec)9|(rwgRUH^hm@1kF}yw zo*}>d{P0$+Ox_qoyfgv69V0$FK3qABWMyV+#^(Iclq_6S6wC(78XJ;@S7{W`;BRa@#U&F?MJ`x=Y}>D#Sf6o9DiQ$H_>Ig z56mJiQr-E7!cLT*57OJ?1$1#@F8s#U=aucjslKm1A!nIiAc)QlB_@lB9Cq<=dG4(A zTPMy`)=F*jd03uwRuC9J&2nv627W;GyuaiB$P0eDdGz0eeH=Va2s*(&(~aXR{PnOo zL-Z07MsC4|r*l+n=&;HU=nBEY!|m|c`W*c6^cnm&w^xr=`+3x7Bk-k_c_g+tP`o-c zUv&54sou|fhheDV%1`$Yd;6^j$@`CKv9TeCl?k7Nj@e)#DfU;7FP&@_Gn3=d>(zI2 zRsNA!LbEt%A^QynFu6TG} zv{TF@Vn*b3s`l@cXqo;A;WEjegX33~dc2mUsp%Y2X)NLuezV8mFu{+P)He)N8$GFt zRL95n-pb_~VBI7y{jn4`8Afwb&BS9<^+@$MG~AZw?F7ujxuY$e{gQ?9<(l=b4XV*E zsZiJr5KZ-V-fW~0DiK2Q+29t1BW;0ynd^qaQ$%*XRECc)Z$$KTb;^?H&(zK?gCaO)m zZPU^NgGR{T`b+?6n1tU+l8o zF4z{ZyG>~jhIv}+NUT&L7q&aox`14Gz1J__r2Gm=6Ja#OAY4|C~l>rsd%U|#X!dMTRspZN9D zg7{d+B|cN5uQxppOwhq`zVGE;b~U|8W@AyxIK3J{Y)!93_Tt}Lj23RtX3Zz zfcMj%Aw`W{QB`#u`r*d(dkDmQqZ7!%9qbO4HLyc~xs4j&^G?FRpF~qxwhyv^CzhAj z=<28{)85^?q`^q2tEjXZZTqi4lfjH6k=oMG(=?wpO|Jn3^x~7W!608puFWX0l;x*O zbOT5045%3y!rlkaD@!{wU8g7U|9PVTbX{mzCGY^aDC_9EgAVe$RTMIjDrjNV$`yUk zVI1qh--*9cEA?Qdiz7KXxH5-?pEQ-0#_G{59ZXg#XYy4U8R+N~vUr^%GrXQ{w0JO6 zk^_KZQG>iVAlJ*?63)~G*cb4*RhgItEsUS&ugBfA&+UEmc^s%}8&MjR#i^P`w=eUw zvD;gYs0?KcKDcjBcia0rY3SVzREP-7K}yQs)WF6h4Ao=}Az?>c4^K~jdnS9XKQ1Ea zzBJbDrLE?HCZoQc$_J;HuXb8%6zTu0M*87x0hQKp$U}~{Pc+~`w}q4tWHnj78$kh4J`2iE%l&GCJ#ynq$I9~&^e@O z-NgAW+K#Jh$Dy%(m5F~|X;A4uX~@KQi{Rs}(sOc1Eb|0gken+E1C4->~7=Y9E+B zRt(shd4Vc*8=B}YZgrH~TzQgtC#=L0C&y{T%IJ@~RDw6meqr#YDG_mN4o$_60?nPq}2JJIZ>0)j#sg=c30F`n}t}P@v_k$;jwT5?}4O}qAAHWQL#uNJ##yGa~3AB zu_X>5Pt=G_%0%%@0#;fw_~{}@O){-385THT^c|CE;w?X}G$&NR_un&%2nj!Ln6OHt zw}Z)x7{yY&kRSsM{tKMP`Di~^+>0Fh536HhA$+`o0TD0;#!))zhS!J3OBevI11+7S z2`z<3Tjy=2d2(P|<1czp_MtdA#0tlk8%FHp@(8SajvUBC_-&SlcW{i=a-}lheZXbM z2=Xrh89H=qOQ;*;NZ7ioVV=T;p@sV`sH2W;84tdf=3;_I?M zA)h0a%SO@9>?+^5YSktMIr3`#9AqMW@8J>ajKs_g-$^D|Jt%15HfozHx8HqJEqTq%TJ863Zzu0wpdWumhhc{?)gyqx} zZOD9ob5)Ikd^w1Q=tWwL?_{#LN1fprOWzi!k1DY=nDF3W0$TB*cB2fn987L6rxSz` zW0BNm7fKh#?`s&Ngm%T|2#tU}J(CGH<_w;(Rds)gAG)*&e%PMxoMsd=e-vO)MiZ`i zEIBPT;TzmdLq=%guD*Mr$hvQj;#qEW6eswQ!Ts<1jj0?_v_u;^4{&Rg%apPB)92hCHcBuLZIybv08O=v zhO!8Z=x$PH0h0o5A*?fZ9}1?uYvGO`>#GL-_r>XI&O>MWpmp*geV(u{?%c(Cj3 za(k0Ir>9$p2pcYw;}fNDBzEK=sx+akJ1mxlb)I4}VJ9ukw&@p!eU~9-P%51F`bF!g z3s);$Ma2t+tx&JUcTPi6Ozf0va|ZWw{wgj%jtjEt%D>zV=UIF!9cKo+Q=G9$t1)G- z9a@Tr`|dWfm}=PGzZ^d|LQJi)AEm@k0k}$HtE=sGW`mD^aaHUM6vOL9VTUGyr#{{_ zC#pM9%NR?F{fg=#Q+XtY;rs6H5DgcmeIit-qEqJ@Oj^a>A9MTKeAADN9~8Y9C5QOn*q|bwnuaJpNj4s zOwb{-+uox%_7dhUN!tMoQdzC8t}q%Tgt&rXV?y-|V-Q0S9DYBWKcCTONRi9vCcfG3 zC#Nj1S0z2UR36;4<7@c({cJ`i(Q@Btf1YQG*<-$LPiMpb`Njcvw3pzh93wG|a5HLW z6)j=bJ37(n&Wak|m=yYPaArFB7xxaEfX@So)Tn%f0`sV-+rvbT3Egd*?G4V=(e4Zc z;6?@&_5fSMp%OBDgqjmkS&OGFT!P|f=Rf%wGk+KZcL$}YityuX-fFt9PkMX7QSs(i zhNM;H<%^5&0+finU)k$^z3hc5>M6s;eYghL%m>$R1TfGQ6UE7fqpg<}uevayoae6l zwSG}gd6?*bD5fTQdCk>4Y=J)lqMFlZ*mppIjCC?Nz4N!eIb@mqUsvPJXDyQSgqlAk zcM}R}KmbJHmq>l2Lk$PAK168CZr%z#^J9X!o<@ysx1;CAHrEO0jfO{fxbMB%HjI^d zod5bF2pWjmf*5nBT9)>@LmJP5j;ma%(s`@*ll6e`6e7ooi=LKJDO(qnP~L8N%awh< zp*wdZ;Zd`cGK?YwMLNxNm1y1Fy&e$u`#kH4C&oyao!yKM;d9so;hQr^ZuDH@hl=b7 zv^xkldYCvL8lrwRd=~2E2fzbHBn1g^r*7a#2v@671yY__ryW%VGyjr#i!~pXHc$9` ztCOWXib=BTPe9`pxf$iK+gLT@YtX}tixxR|rHYNt-7Ax6#fg($^4Uw+Q5;!Q=VO_+ z;vFT`oRuyPL_M8dY_mXX%uOZDAtP%{1O<%5>`vR$i86y?riQ$^JHaKE+$Mc##N*HT zB$k9HeM2wAP5erY9&0xTLY`uNO^R?vtlAq3JEsEOo)~P0&%X}NiW|zEiDWk#uYQ08 zf`(D6sEM(w_5r)m=cq4)pW7@FOM%SbktqCoJ-rOCK2v6lY_z}Y$#t94j31BaJ0EJe z6^IS)7QUV`NJ;6Dum$*fSCMhKJ+Fa@aqUJ4PemCScE>$;Ger$?-1cJ_^6O?BP@D3mm9BYxvb7tex#0@Yg2%lqxqfD zQFk>h#U`8KYEJgOQS{G8xL!xQ9eu*!K7WB9ZUf)LiGIM74u~3j<*>hlDUF%}*0zuw zO~PU+CtgP$Qocz%o);pb>w9)!A-*2#6Z*$*fAe_0!4bA=8PI*&K*(kEsZ2jF9KG`9 ze8(XaReLyk&@TR)@Q-b8G(+#l!!W#}ntfnKmdPK_iCc~|*AS8ENBC<~db36sMkyNlkmL`#YEz|!e6EQRzscz{XyN{-cGceS(QB_DK&bEJC!rn199PFvySeW43 z>?vjGtfIf+V4sd2ifgHY=)bu_gX&^S6rP>pslE=~^SplpUHjmjaYU$>d&B)H@{1t1 zSRb-}^!xoHX@6MW4|5L8EFvCRawZ)qKf(-6JH(Fa?f z6(V{Xc;#C%A414*lBT-eyf}gdu_x}YW-_J}|FPocsFe5*Y!Y;pD1`0)tGw|0q+5!s zH;Y7LGkv@()xQsd#Xz1vC0#NAlTpJe^Lny-^aK$vT?PxoD=4KW4ly;uFPr`%@_)9- z7l9aL$Byr)jEviu=<|nSu17PXtA|tDu6I*;XUlP4ld3u(->-ZC<&STeUOs!xYb(Ea zEocY-@^l4xo?rlw5I9>om@34oBiZr(L#6a9>mu8ci3=U*txp@g$yg+xKkr&t7M|5Z zMPM~W>7uu);WacoKeRbY+ONZe-n)Rvjl+KKurSVLeKtG;>W@O?rl?=ScV~$kW93tb zw5WvpU&R!%q06&BsAeCVyAF+`@)7v`T|E;-DQnD#BC zDptDJIsA-`wD8Tb5gpQ!!10Cyv)m^&-U#4F~h-eCdsu$Px_ zV=j7)Yn`2WS~4Y*)&~m2xTZ1-<}MdrVp-3>QD@1M zQpiOIi3L*hi(WK9lvN>z8PNc+(X83Ca1t9QpW*-lWR~XqFsc3}Of=L1f93*l%Hoh` zyD8S)xm?{ExKVru@h6xt=6im8M7st^8}a6uDRh_Q@Q)Tml8{_y@ifaI|I6kzUzlaY zu}Z?Cv!H#e?~zX-ckB22LhQb58#EJiFIe2&VA^b}r)jT~oHP+p5qm?^4}buSv~ zKR!}A*HhBG_9qRNorZ>C`HA9}emtqfBa6E7;Ap!*PF3aYg$B9sBf`?6R=kj99P$Uj znYdOjG`PeDF3pi!F18#{x@v5|)mpryL~G4PD)>ziv+xSh^2)xdE>z_Txt~Xf7$9lO z(C0;X#{Brgp2#Z#oRjj@7q)EIoy~Wyn+g9&QsGkzKv$kfo%~EMVh?1B2SqMzx9Yhm zS)u>|JmlrM?ha*o2aEa?8Xa{2Yi6w}HCHp^vGT;pB>aWA5!Lk5g>UbIQt>1n@>Y3c zJvuu@iVx{T-h=G{-2;>?46!8Rxak|3`H%Ttq6RwW!F^nh$hv!&Q=1Ck4bJk(l&Wv9$f8U(tE?Ga_WdCs#pR2RxpCuut;YF;5=&9 zyLC$@{$wFI#N7?w>|*dX+ZvPCZe8Xfr!VrK&%l`jV-c6$nmhrI7xhp59WoL-%ZOnH zPKtc8h`2u?5GSj!TFi?34x>%JgCr;ip-Vl_1{y@%fw3T&4Ac1u2eSETJ#XP~A9b(A z^UgUTSG+s+@WTnLx08H8r5550QaUootH!07wR)=O9uvEEk6BG@%-wPV)2?2OI^KE| zIu#Q1a%3Q5#xlK{|6@&1e7-YkoEFbYPGfe^(|>VKl~<)sZhm>=bMq|XXGdiyeVV{MbF zE+)54-XO@!se_TFE!SokSS%jBr)PRtehg?J630 z4G!vq>#%;(gB%Ul8cIZJRtOnI7rHOa2Xr}`FRmX!ACz=&Z&3dqV_zBEM$~K>GutsU zGn35B%*^bVnVFd}X6861nJKnoW-Er6nK@=$eeZ46*4EZ;?Jt$CG&5JDJKcRxpFWLd zxf)~jr`cO2+p^;0XkR;gz`QgN7wNZyLi=$3*F9I zEDW?JnT9p(Cx?fp1nDK)4z|iPwKWqA8t?D}LCP5vMpPaoS6O;$7Ir>2uPxmdzqjQ^ z+IF<&Bk-uAGGYdv)oEcbB1PvuIBxx}vDm^YhOB8)_+ffJUs+NK>!UCKE&SskJ=rb&#)iwS53SL0)Z}R4{5%$`85n{KwHRftxnS0 zJY+7m*P99AJDW%IGDF>v9kw_5+)6V)4S0}4`;+?nD7@zOy8?!fvJBGjGbefvq=3C~ zUL-jRPt4y!hDbaDUvCBA4dx~HM(gZV3g1M|FB%%#ho}81LoUE2=Gxu%Hti6Omblyv zCT*2%&PR{F-N<-zJz~8i>$HldwP>V4*ujCKU`yT6JL4I4=Q6JA3q%K!-Fr}_V z?X*dFhGwt; zS_k;2A0a>Jcutv1x6eKsefjM%>T-=1Ws{Kl={i67{fr_v%T>q1wgmQ@%q?2x(@sIKMwTY=B`+)NKTo&C;s+P+g){|B(kP51he!O~*AcOdS(gfg>?vX2 z->u|%cvgkWe;WzE6L1mr>+zm3 zxVmi$rsv5Dosl!pMN6`}(xStnT(r|-mG4_O1!U7&?a%KLn_IRA2J60_8#qLjsGLLMM2 zuBgY{1lL~b2F(b@B*1?=Xk27C02nJfx2oe;q%f{LBxow9w`H(LM2ne%j6d6wWjluM z<~BBvP&4-7v)&hNxnPaMDzE8RDdOy4q^0myy0{E}h~7U#!C=a*=>5=^jY*E&|Ls#< z{nJ9u+MHdaOrnCjYI6U#ntRtff=8Ko*|v)>m$D}|^n?xw2Me_dX?O2U%lQPdct;#} zbWmXq$HFAlutZl}05GRdlAa0+_dpV2yy_{o%gT8)f+Rlk`Qr|&Eh~|Rlgh?iE|_$O z+NNmoSz5#3C@^RIrj%I#$#md6;5&d1*KZmpW&FM5ML8OZ!c|EFdu5TZP3+-2vgl+& z3qXKP*NO6ZPB*XAkwlv?X&%DkwACV4uWdZM zY^0+LVF}bo6cpoiNFiV29h);-laIyG1nUu$L#S)G@Dp zNl{nJzg*Zl`+UDVJk5>LNm}ADYS5~=9lX;QLTyEZ$zF75!Yb4ESE!r+Q9-P5!fDQa zjS0vr3?$%R`TkfExfW(s_@VkXb9Dcq zoF}4GUX)5pSZc};pIau%w|CjgL*RYhWu_AJVPV|;t`dL@R8s)1qG{%w{2R(<&QiEH zqkUsDLLTCax9mF6DDj?-dUe#2sk)k&HX5(%ValH=svS+vBlMkrp3vY&FwU=@WL@+K z{8%)%AK#h%`sCX)Hd#tvPgKDEt_gwW@T3>HY*ysNSXZuCumvY@>`^p%FEG^X-sf&9 zQYhgpSFRkN&VYI>b5!5-m zts-u>vR^xM4y|vtlcZI%vJyW>5jhD~K000Nal}sIb`-_P@YQ=xyJoxEUUBp_M7F6? zgmj+|H5sSt{}DfeBW-!VMm}N@y8P#(99x%oU%4i>XvX>=Q^W`#OaBzEia!~EV{pv+&*`7uv;>s=)edD)# ztSYZC!Fk)GTB_m4(Pk^*rC4kEGYjpxUdv|Kk)NHknAr7^Rmt2-S$(sg*CVdUbZp1< z8>luYw8(Rt&ug!fWCy9}!DkBGU?VyyV7padEVh_02a|kmeMH!eLf1h{rhS`_<;cJ| z3p@A@W~n(YnkhP2u)0V{qr51GwQPb*;>?^A&l|fVVa@wR)#W|2;gX_1G)jZ`v(J)c zKC!dIN<5WC(+BelYTj09q!m|}V>ORj#!;g9+1Q?$1Kl(g%XO=?B;;)QsFPaW zPN1SC$biVDzDqg+;io;->Lf)FoLB`G3C zTe6^Rh&J*H4}K#izI;RxhrgZK)CH%W`rmUz@F!~Rz$aXVA*hEHvo$^Y87P{B)$%t? zTycuSzFwR0oSA=&!G?Q%!(}iIp=Ue%6(wRWnjL` z&np3EnP(b$^H3$eHRGde7;{@^40y2)VIx`A}E2KM7nWvze()2dg%l?qc@ zYA95~YHkArN0Yy)fIDNh$hzdX3gO0QweV`{Hp6Q(G*7cQbM|H%Dc)4xS|3iGz?v%n z^}{CT;;)WkH+I=Gxf%U1h~{X{12%pUme^?HD=99;Gic2Vcko%^s4PUi>DfTrH$%yh zRoNC&(QzZIKv9RMHA40SKph_35=1!lojX;@0v37g_l-qKT@|j^RF+}uaiZE z`J6a19k3M0X2pxu->o*6<`IlGdOzN5RjLnFMu*v4ShDj{(bM*Cn%G5>-fVk~>u?e7 z$HajoIsX?k{=Y1H75odW)bc2e}x<{E4M-^61g!g(trNe*lTS z&4HEB_CG(;C6xk(g`)!$Y@5B=$x_k0UVrEFjo!T5=8yf>HPStc;zapcP++m5lF`>D zml8t)lAu8}&@da5AstAm5P2hy`+daNK)^!B>GB|8a`Ht{$a<=$`e0Ip-Y1Dgd5SvQ zh9At}jjaG?==kcP)h>XlioUX`E6dn3((Ud=2jmIIYXo$)*2Zyok|21^*$TJ6mc&pi zDB~R`+2ba>K8P(8c!$aI-<9~F_8yF-Ztd9g$Cepk0*k2$ro+v^Cu3us+yFrd&Rbargg1?cJiHCN6jlQMt{fu^Xb!2*L!Y51%d9`y!rO^iCIzJdku zGqGKQ&M76BfMRzwHk7l02VJJQPV4D*V;Opswp;?$iVBoxJ{ST{ct7*Tup|lv`wpm; zrPH>OMW-X4Ezt#)U_=T0o$8@*0am1_@yTW_ofgN%X#1Zt%HT$AaD&z}`^1x{Zh4AZ z6O*@m1&TfeKkgki5Lfew@EmGOV+p`Udw6DP$@%Z(Ms;C|ZvGv#aWqsHk3-0DJge}f zr;LV%>XFrj`{RAn@0Ji~Zvc;k$-tOKts)#6WE!R_70nAPbRp8LT)vxgV_0R+5AV5! zE|!29BAPi%SSYG3&t>`o`0168Q6HA9vq&60@VSJRTC67TSJw@#)zoMzQ-F_@v(-zq@0@@@RMEO#O$mi-vx$ zZ9Y2IGnIfHP)4?ANo&trxL34=*l+WRNdi5@(lr}P$^;yO1FQOduq8+Fe283{n22Vw zvO4G-H9Zz#(bND)f~xNS~|jO@Q!Yrpz#q1y0xWOe`0m49*J3U@eU7oyL%W-tq{q`N`szeb~LWh468Muxh>Uo>oi>N%PO+~Keovv3@A0c z&60Ese2^9`3&T0K;|~5Z{WegpMi!h%ofG&x1XP$*?Uy1R5m&C3^T}VwN_W-Ait?dc zo90J#vDTF2km==azE&;|9$vt(IdWXs+wKPw=@|uL##17F0k?VgS|B?q4Jt0;G3d3D~#kFr2b$2JE8!Xe6#pXhZRN1xo7)gzNf7Otu zGI!xGaH$4{$*}}VLL(J$JmQOegNNgpiTc3fPeNZ+nyWC>GR z^OD$`xBCuoWcV#DGnk9A_C}FUXd6eY#ef}KxwKf8fEkmGnlAOo zD2ey=;e|gLpBdKYV=EP*egkOJNY#UmJ6L`uPR*5F)nIuHa$QbQ%?3NCIB=|>Wz;fC zmncU%P)}@rAe#e}?i?4NWL`#Ja%}pReAg^phC0B@5xWvk8RYJ01Y-0|WL~C>oZ?g^ z%F#VPJ@iJXkZ#FM-TDM zQ~7}uF_NEltP1IoGz{FRJXY>v)BDSq;Qh8acX1}S)vga)#F^Q9WkCuL7u+)t|Jj3f z_ADO&Xu|j+UqK}NY7GUM90KEB$$8l7xorGoJ}s@w=Fh(eik@IdRiPy-a@zAQz%0;* zVu0@Pzk1G z(}EOq)2T8t#9-7-hxHghz`aqEgs$~#$Fl&l6YR08X2%e_%B!fvq_mjlGOiwDN}(J0 z^+%WZ>#ZnR!l9L7{_y>6b|+;jLr58ydmyO!8N)^_DI>*J^f#hO@CXET zmTy@}JrGsjP40XPeMm#F;^&umeULjn^*QY?EYvY0H`BpXU0V~q^nj|$kim5IJBl(< z5~G@Z8UD}B*8lR-|8q-*0IX@b z>A;;kU;n$d)(yhOftA0Z11Mz9ZKzL9snuvAsX0 z@f8yrz~jgEA=ZLrp0Iq>y?+0o9<51WwLx4T~F_?X83@MfbowoQe*%EHtP{u8G1?T;8B^r zfq}{R?5s#~5Lx1ifphP02+-8FVmJ?~W?GZv} z%d@wWsv_%OtR35737_v*!LwxqJ$TD~d#`EdiYfCil4hJxRf`hYhHePw8{N37zkbaI zJ+xfGxD?Od(FmzveDpqUhJ)`8#vH0{)aeas2AoQ8@FfK>%mp!CHE}%}HX`lkWfrr+ z$|~jfTVQKnpD?V)!}(vAN#^!nA|E$sbSx~eUB|o!!J)YCn40dM+-o@vxy+9C_LO_( z5QsVPmC6N(qyg6u6LRL^iua-0iM7Q!z=p?@%0Mcxg zAg`}?hR!KcEsMa2bWC50G%71VLnd5n`|bpk(<-Au@=c#6=?&x0-lxz%rb)}(BpPeH z`liD}>&j%A1shG-s|B>T)4B#SYHFCY^mLV%&c!+%C`5*_nHie8bAwt3a9zXHX&F+; zRui7plz`=Wfo&#Na?lqgzUDHS+T?Lld?7zTy-4M%@as8e$6k`acWiD$N>LjmwnktU z93g4Bl#68!j1PDjrZbBWSAEh2)a@jMNq6(a|G{{7X`WHOD}zd8V#uwu7)`R8ofWte zd^!^O9CvWXkd@%lhXp3Zy3Bc_@Gy=QZnfIu`X|6Das;Ui;=?7HkjUA^otx*XQ`%bg zrb=|Ts)<|;5^CRhF_*PA;2`u1;@vxH|o zp_E$sYMyLPN{YhmP>j-DeIc`gv_?>j>rs^QEEZaqKxZod*PQGEno*kre$U;4!c-~J z6hUdGl$6xDI1#@`jM4hd-e^(E5GHHYH0=1tNCj@th**n*PlHH;cmRe9shrR5Fx2uz zRZ-AH2s%CaE(cggdZovgGl7sNDW?%oZwosY`SP@vjBgrg{-pooj*!=Hl7;Fcv(R7RE6v(Nj-Wl}=34x$3r7_^DkR;B)Gh-Fn@t$*r z*YyR2ryLgEyjrOn&f;j2s{xd3bJ3QM;Zj%=#zdH*)b+qLu`j^=75=wLlaE1ZpMfwK z#f|?M{;4jCEa}noeHtTW%Aiu|N_tmYc}JQa-sxBHZked&ayTBhYEJX?{M^#((WR2| zos2_ztb>fOpwd^gA^k)ikXp`ok@Ub-bT zAt#-y>l%1C&K22TPdp3q7!lLa(aGLk>Ff${EmWM&s*6_GL!GlyR6Q$(qKvyH9 zj4)J$SP(x;_u&lmqPis2e}y1UY73;U?Tq3?C8$zCPl`a&OG;RxQk$0ii5ytG6KMtu zk3b8la{7(;%TZCVu=`tT9}Tv2Skls=Y&CED8 z%tZTm4|S4~9qQr^O~%VwKU^Y=y4xa{B-?!@^t_+Wv%NS?W~*RLd7^<~3Y@WJXwYx1 z-C81%%j0vWG1#ISfMd-rA?S=dPC`H!)iDWN3@v+mQR3OKd^Z-P1>Dd1R0muSz?n#7 z-O+^x9_D;o0a9^E1Zi;)D^vWb@?OclW$afySVjN+SpGBPm&Ml1X#3EYepSH|h<~WuxQpBjhQJ^Ek4z*LD!?V3pe=WZq zGp2nG#hnes_2BG##ITE6N17EM>uwd?}Ak-wD|~*1aL}-d`Vg7j(phVEE=mRw$Sj>y~K@v zQv}V+51yY@B51OL{J(Q-Q`0Zv%fght(b^r_LLO z?>s!DsH8Q>q2@JCv^K4FF|o+ek0S3;6^wFxy$UA^Qxk*nqB%bQtPewB6Jx*1N^3M` zP^K-=#G~xX(#VEDaHhSDh#XiDv(QJgb-9v;w?M!U2FF*pjoXw4b+4f~F%+I+a!x_O z9+uRRVecI?=xX-I=s5&1XPtWF5M?ABdhGZmg{T=qSWf(+bpM_PGPKd)S>hSEJ4q*J zq(q5BC4r#cN}r#5G7%q~2-EnESb=({JNIX^y&o@O?0e;Y5?tLhsx+2|pJNPFnd6oQ z^knvw#hJfpd~95pEAF?ZlRj&Z*LQ%K!!cEvRq}XEmA(6ShSiAOnm)8ohDNr|u3rBxg9ge1K7>uXBcj;F^*GprD4XXz$ zj@yi*ZHYX!78s%dI!Qv>zEui%1L?Uowwlt;azD~oFCFtw8g+K&-CVuoz@e@Bj#k074zGNM3dKw3{<;4;nlSXNG`bP%9!MDWi4WPZ zO=&|gZekh?-JK9eI!Qq(HBn9l2H?V&C?ErDIyzR@1~yk@jrO?-PB;~AR*2#A@s|Au z`fRUE=YoHIC_plC;sv0`U&2t5lzR9kmI6$u5IYmF6R})1AZUG-`gW6=;o({(%$LpC0`NK zh&0|kXZ%njff30w~K=68Wy6~-FnDa$*z6jd-!z4K=mJaa@4U}4Bk_5 z*b5pE>#WEN3uJcBZZ@CS62It`(S39%ulwP2eH%k*w16R+wO;GIHFn=)22ueV<#Kb~ zfdVUMXHq^p+Fh?NF)4WA=m31enma0oL&dLh%3BSLYBi!fz8s;jMWdXd-Nj-Ex#E5m z81+l__?(9Vqk1+iEhT#`v%l%M6cQ4=P-TQsplV|HiPNC2(zB{MTKE zWLbgj5Z?3C&zr{0+X2;G1mW0sW(4Q}%FL{x=$zGOmT67(-Ryn4R(xjQsws@o@I68x z3{0`u38S!B##Jmq7&K=njY*eeGilIvElw3=7u2i1y3tY`Vnb_>Vd?ZZUw!)h#b2nI zHf}Pn!_$*z(%cejcy-#aJPWDi;;(UzuTK`F7znB7SbIOfa>JrvbT~x~(!Ao9?ITcR z1wn>>w9#0S{-;gA4opnvKE|9X%YmG9Ttt!Umaxs|KIU~QnI=PbkJqaw??i7vah9{2 z-#wpOG`VbkpDC2k42N@ z-Nh=*AGwYbH+L}tl9|eemR@4T$jB-G-F8`3mvKuJ_&00lp44RF=1)^r^FG%82Bvv+ zeZ)V}9yD}Vo^(jUziQrzAb-M;0C(VF7tt9G9gYOgGlW%?#VJ-TJ3U=r0y!Zo_xQgy z68bEZqXhfi8n{{tH#`#5Xin^oK}t;vInBO^66qCJ^KIPfdEWTGYvl73|GmQA9gE;? z4)Ue`or>UUDNckhB8v2%*PO31H2*c!1CWU1Wzs2QwscKlXA zt|J!B?Z3SN%e{_pYIU-PYQ$+!$~FjKG*0SO4TQ`^xp3Gc>-q|qrW_n+!<3NmMq|q1 z!Hh%8-qX*%%~P37QStWjl91M?uuPt&Dx69zjluS$V{QmrYV+!_JCNFT>-@{D9$V%! zQ8 zXj_26w);Lvk9@f5u^>c6puk}QWaA$M2+%M2Ql2|U@&5s6{ZEbo+!GM`*+V1d_C#|Z zG+l3uaBEu;c9Es5mETJ>CeE{&_vEqE{_LS-L`g))C;m$!Mx}~cVh8*;@leCb`f02g z=uRQ0QzIRT>dR9c-|Me*S+EMwQ0?}*_KMFuvA>51bouF?e}|WOwQ+5Y(skh~K5mMuLTv)b$wz zvP!kI^-wqfijb9b5Ht^5j?E%#S^4l-#8aO>&dDZ@skjwC`|zu7et(3IBu|G;uRV%7 z7oiWj?&ri&lFWP)z9{!`&hF3BS97IzM~OsRamedo_-nyYQVt|KoSCv1od|gh(C>@b z?I6rE7_j7S`Qq({l1fQFH&$leB2WyGToU3_ngfO*jUKHksA3S~z8vL_tCSKVk$a@m zmOJ9i3OTY%qw2-|yk;5DjwdK1Y-+E&f7BV|erVHl(RTcSWEBx<73;UDgZS_|mFL0an zw=~R(jX_++Hn_tQ+?&)2!!|3f+O$yF)yHfUk(cnrkk}fs2`#3A)AdULNRxw)>a_G% z@!Z1Arg8M&MTbiqLSkC zU8d@Cw?7~UVFf|qhTlmKesvXan|#e&-%RWmsoth8;NSe9`x2dttK^5%W;50G)~(9E zK|GM_)Z-0I?yJv@Yh7Re&`L|ZhuaCRFi7ii7+HjWQ-|)0Vl5usl?}qFLP&ns+C+4< zei}PVWtE?a%s<9D;e748&h+>bnDDDXblU_*zy?Zr7HyG3>b&jt@9pO>d*8ibp^ICWr;e6^9lBrneWd3 zdhTkPRT#Vpd%*ssF|5!^)lR57%ktZ4xfvqY_VbTSq3Ov169K_v(R5)P#)?}`Z}leV zX5_McczzLG7(K}hc~i`%fHUsbo}VA6M!$!*`TWUB8<|5IucCCDz8ME9PB#a5tW<@Cu- zXMsbA4yN2`j1400DNI+-=y)W#aP&WDO}l?Epk>jjEsxWHeGB^Qbr$+S&}E(s!&yZ# zR<%W@)lzb~&4^N|{5o4@Tup^LFPl4W8(H-j=(Mq{FBKA;{H`YKs|?@K*3*4*Q{?O; z=eAaEwW)Wrhh>+O@2ddWMDO7`=IQX*v8^go@P0BlyJ1~b5V36nf9;|?X!?*U6y5vv z{=sM#JFxdQGyIJCZ>k(OutE!+p&*XK#sA!zkOk&!XT~pQ+?F!=gy#HHvT^GR+N#Uu z+{TJ+-S_AVr=zLTw$u0~khFg2oat)jcc;z3&_JXIerN}nLV)d{0ga8F0|^Z3sAizy zc}9#&ptYn=hna_U9EG4FDGd&~D!R--fRHgMp8sn?Ahwq0=H=$5-bU{To`r%z>hVoe zB!b)xvl4Y)7%5P^qdENW*#~XbVaNh? zn}b_?bf{u1!uQQ^6P#8W_40ab+m@OmpFWR?kF|UB5hREns&VfW@<11*$<)O{?1YJp zZEEf1gr)9SKf1{=FGapdcN@t%Od>Th?8}3*@A^?o)AFNInJdVlQlm`m%oS)wlB{!j z+fml-|B8j$t+C_f|6PeCQyzd=VHjs`9E&STjT298-6G}O^p{AhHSzSNGRx8!zWJKX z$m+YYKk#SG!OP6drFN0*{!qd&Ez zk7V`FvNDRHYr6|^^5b0?oA^cHS-WPu-7*Tl=9Yz4zuu&C>mpsIxYNs%bUjC}oVAOr zCmH=(&AQCAm}|DkSpof6BtuI;Zbh$C;3Zs-w` zEg6D4zk205@>JFjzaehp2pZXfpC2gGzy0c^BMV4m5(x{~^I>pD?nTdzN}y)2_x)aw zr4g^GucZ-125CZYM58%uw(yZd{@qZ0SB`sVvxJBBobWkmA!v=m-SJq+eUaYy@`6{K zPTAWpQG&huYuL`l7HJRWxW4=0{W&f#*mJ8h{%9nDG@X7%QAOOG9EL+Z3Mo|D9V>wb z>7taT=7&?r5O!vx_1?qMMR$B5_=abS-?XFk>AqgVkp{3!;aBDfF>vz}<9@SztLD90 znbOQOBwyau*LqGwYwR}sx!F9Suc4t)NBEmU!`)scbI5WP3Gq2JBSKB7=Su+=A?nJ> z1Jb>P$ADvGb2GU&g>mS6(i7ghq8|q7uy%C%>v^zUU|*?e`?j)_6?%;i@oTNwWxd_dTqGhzTLt1PaG7%2A*?V-s0Q@|^3{AuVbs8ISD{VhGLpxKf1u-jGK>PwdC z?C%eQb1amnDzT7J)GuAIGMym}#j&I&$?t;aJL~qDD5Y(S-3rxhUs4*WG0IB1rDHcF$C{U!7q%Z6=ib3d>Ud7Lvm97LPP}wMpeG~oPQ24SM6S-5 zI#s8Wv+-|XU7pN#AW4tsA6fJxy=n>`8bUiEObexNC3?A0gYF!^g_Q>n# zxYrvD)gM9tazl$=4ZDDN=PviZz*WAt_z+PS^(mDlz7wBk7bwkvc;P}L3>yA5p&gu+ z#{`An83I)w0a~tE zAD%cgru|$MK95!@FTC#6K|gnxvFqM;2vgoC`P`EGf<|(`TH za3i8Q_^8MFP8n$d;kHV8EFd-TMPD!k5!In4zr^j%!-xH+5d%A04l;ouB=vxGlzue3 zCdrq6)>mQW&q6zeqkIG-B2FZRxzJLDaOc&|s2qr%oDs^L%}TMWza9Nmc~Z+f$AY2O z2(WXZIMYHp?jnkOva3-jEnd;?>@aZ%3O9INI|m0WqMB?WOD@U%+rJis7+=5Ge()ag z@?vkb$G0rk47;AKjv6KWdUu)r3$3)EH|sh5<^EtdA|EHIf<6Bf`E)N!F&P}=lXsomJJ5(yn1hj%!$`g>xv30>fcQT_{aCcWswXW4L@pY`rEs!9{u!b%Qzz`Rv_;KN+ok%f^GJI(b^`tBZGRd|t=Yo@$Z zhH=#yoFiKVlvarLn3aROv7G|$Gz>$vAMhsxf43i=O}(^4lQrxnVsj9ELYe$*jq2&I z(yyAP^ND3DQY&;Sxd>nuN@l|%6|r)5EH^<3ahj?;C&UtHO=fY;>|~Jd2LWL5xsqaB z(=4r$#{%68+>Z&=+@ajvT3yj=k8q%y7E$S#Etdi&k)F4ArMNDTwE3pH>(VPB(C!$l z2|%#oiA?TJ{CXTooydJ{R!^4%2BRXdx5^JY)HlbKIh5OiAXgKpiks=Uf#tw3YdG+? zPbtde1q8Z{CGXu|OFKcYTg8FZ0{q>755>S`BcqXkOL``nl1DAeh|mTrSE;WgmEGMv zUEJDCIQ7MWcD8}(7fOMqW$0T5nvig)na&HgTsjacgz@L2o~OvmXDmauAL=?PTS~xw z)XbXYv$u>@hbD0Ye_Sx=5mveMFbgEOZv|I6^w1Dldc^#uU~R6=OO*b{XyA3xZA_DS zSb|?$<#_O_Xk9mS!X#bn9C_Ai-z)stm38e|{vJ;KAiymt4B*njhQDiEK3n|j;Kkja ziRc@xU%@mWfr_bHBl}x;cKm!Quj3W#Z5-QG1{QXlX0KKPAX3yAc&QDsv=Wc8*UkBuUR1@jIC3|4)6+3ekgsYZu`L$yM(gus1Lz zf#zUH7}%G^{2e6~{e!F&Oq^3CCAIW=%0JPt=_f9Jx3`@L?hRrzN-){M@QKV0SY^D~ zu;W@=x11!tIN5>EC`U?eCvl&qP`E7gLQIg@p)V6|d;j1)+r^pep zO*Tkq?Q3PYs~*0Cd#dx2Gi4qDMdyb0Z*zP+3Y4j(kK_1OmzglV6oDXQ%|-6Hks{xo z{LQB!N||9PO7AR=M&P$3a>0aHo?x7kWJfFK z^WsPe9%ioedAG8f#)n6_uq#mxr)Ni6gfx)jos6*a)VFlwQhpFxEFMkZ-L8PSKp!r1E?)gu7_DL7OaiRkOvitb{9V=i)L$)1 zlWHlCg_t~gmS};jNOAcqrx8u0I6?axS zYZaUBIz>exMa3Tsf*HI8_&HcJ%+>3C=01qArlk<wB<}`1*}rrz_Kh}o(n#C&+Fg;NHW5Wif^Cq@L|uqh&2D+iU%SZMGS3uFGa|Y< z(`V};?v(2y6@e5L70VDbEYc_=fp&4+(=)!7w<*{AF6Oy;!^um9Z`S1lPwc;|7@uaV zIQbqjB57zdO7AB|=ot90f)>6l|R4?mWf7_ob!3_i~z=lJ~ovAotC8kJiNH0KY}* zqlxwlmLIKa#AOReh}5SMDYy4R4E-K@Ou20wrVOlwag;wQWpojU#VDJbz+#@u*dW(cGWa z!t~5k$OElbHqYHB=gwd`8?~R#y-o zX1J1?Ruqh+#@|$m5}IqpA5MjowI=TKeu-0Z^)m) zw^obEyE4w)P+;on=z--rsIj< z2SJ}4Q)JV=t*VWLhLZ^TL>~s4H#8sc8!z|Frg*Mh~=-t*l?GA4YC&rXz6yETnO$ zc22V#0@b3ewLrcyB!Xq>L+;ev`hruc?C&0rPq#u$Qa~Hf)2f`NioAqQ#vPC~$Rt~w zDh6rDoh)4+aoQ!_xOQP=m&xByR#%s_91*VX=_o;J9MYjSuO?z|d-YZ!%M_O&iF%91%IF}DSX`?78&pK*M z1~GRKAsG2)v+HZ}V`X{fHJcEp_}Hu7@-g`BD=1Di=@AuxSWB3fIr4M|j^KRAiP~#5 z<5W9DE+Q-beQWxCy{Dw&9BjQo^QvE{IWic$0Z^Reoi;xr$si-iUfQB8G}JI+hN z8zGNl^!YhEQ>4$^F*0zI0h}A~KtxtG`7gG+xC>xm>&FK2J=Y>z&|t?0dc#koP#@<+ z{b5KGq&WHFCsjTh5B=*>t=r*M=DGEC*tlyt98BfJOBI=jiFaFI+qR1>O#0DF47|m-Qu8@jv;hj+eOq!*&>_ms%A`LQUn)aTN4ucSDSqd z)Yw-L7QDiyGPCkOq-^GhMf;w)g#|>;e>4LNku9bhQPWIEX^7H5Z?DLa_mf^Y)PZM( z!~1^M%jV&^82cQ)XOM;%sTaFT9%Phy&tuaoC{%iLJ`@(QHKj*H$#ugwotEuHuu%F~-as$IKA(HDk=obj{4n%*@QpY+v*Gz13T3wQsen`I;VS zx~99QyHw}Yslw53f7qgnniQkYhjgPOKIqB>5R7w8^Qr2N$n>Je{ghk3800Q{QJOf3 z52@@9o}aH|8qpE8dx!|(WPJ1(lUl6lE#Zylw7yj_`iBac!`3%3rIPAf%Sc}&a6|Se zOLp8fxl#-8Nr*7|T*c8hx)vn2;dzR@^uIMcz2M!D1Peb%ttPA+S*OWVq8WvlgTF9q zw{~5LiyBkTbghvNs7YefR1agPxu`-84)HvSX#VQDGTi6JG$KhRR(D&@ z9~sL;4~?kEUW&dq#FR-&JZt@+hw(?^%pp!yjE*n^R#k$gwwKJuzO5qB`i3U3@nW{N zJh^SbnB@ri!3LI_l0kL>P*PCNVg@^`KpH;{{WofNANfciuy;%5-f~s8S5q zW)i%DsO9Vtxd*bME5aU~}56fy!V_buUG_ z!*(C>-P~T+fQbx-@?u=1JZ^1Hi078{0g^`_f%>?DY@Z%eUg-vHXm9+P7rPY4fZYak z8=kP5X44%7{;hzv!VJ_UV-~RZx$Fvig-ry|>!!la%?3%g(OqTG4EoJz4SHyU$wp*7 z%R`GNR0n9io-RVUqGSVg|@TX$MJZKxSme!r~+ojWZMcD7&vN`5^VwtwHpQ3U+V(?97}#JUwmN|z%U3hQpA_bG%ha&A$WYQ zroG2cNoPWhDbw_Iq#FdVls)yfSg7<|Jlt#8`ZQi6s*eys69YOMU4$>ZM%LQPX&5}x zT<0Gf)*R{+yRy9T*4s|LyOp>x;ZXq-=?tCa&}pgIsar}OR++wzufPw-PXEGV7s7 zLN6bxWecYU1&7cJ3dp+~d=zZ)HTSKW4QWlUoK;Vw$lif$0V=h}gz0N7h>{L6`nu{X zyYr#JH?h)6Qe+!E?`>R**sfQW%p{N>9reQ)XZ!r-mYg2@?FOAq4Y&H|PGfttlJv(l z0Y(~E!T1eOwv=>;G={!1xfStcyjeubo@s>8^=sGuBWx#$cX5LuIntx#5N8oYdOG+r z)HqE`wxl_*A2#Wkp0IK?%2v~Gsevwy$QKuk6miIL>-*y3@f?r4<8RBgm(;H;+?^Rm z_s!h9H?q&=MI~OMzTA}_zc!3dv9Mj|#jsX4m<~-FSETCckt`!GVt|o~w%QLVb~|mT z@?zWdqEF>*2MU~ZsYs60fN&Pe~EhC2&&3?sZWkk6`W)Q-~)hA;IX1OiwdWh*sd;iUN`X9$t z-zdE}KIs79(4Dgf1AFft`4`-xGJK;ADbW1Dl!7k&rDWmJg70WFyB!2sw)0e{L6%(! zn?4rW%S0VFxACT?WxGE+@4!EoD^f5gI|&;C_=M+%5=C7XqM7{{kv4 zgLgV;HGvg8w6t z23qJ{{MrI_D08jbCoc=9F#;e5MK%rNU)bFIG(bLc?=Fq0%{-if6L}tHlI6S_QDH!| zQM9USaLXs}itjMG#d=G`NoD1UR>YPs(6SAq=g&-^RL+*Z)@2>(e+gF>u&!lXxC&U^90Es5L?VgjqW1juId(Ud=moLK1$s56w{FcaGw+|k zr&^vM9(nZ9^zSUFPIi9i8Rz!xnTBq&hbBaNhv8u)aowW94|ad*`t9PA_{Zb)WSUOGIY1XdbqH5#H;h88jwLEpMPb=M|3I< z3%DA7<;X}} zqe_-DWNX?o=a&YnZyOoH@I3|}=dA4|yen}JI%oK!3S=Ft7m2edne6lUV?-EdBknsh zyV6gbl!=3*x%@)KUh(WcOY!c4;@N-y%6GrkZWA-J1*da|&%u$;cShOtSr7fy1Q1+e z)O=jq#_H0G`pIF^f@Jva*O-yHQ3Xo1bNgupt30>cMd54)X9l+<2V=lSRtz{9Ve%iwHRVQg+WXE~pKUPv z1tDk$s=NdZ=if{#xuQAZYy|p*=d`sz)CVhx=&0ALUc!9GXS&xP8Pp)-qrz>)NA22w zXf6UnHBw5!6fK-DOlc!1(0azDNKs~W<`Q|?zY{44hln16x2+#c8*{CVof>WXhCkN0 z(`^-hk)%I5vDzy+9d7>vd$H4nPz~ORJ5hA7J{--Sa-L)rjyVLHy-*+SM1{qdV(kM~ zM*E1T5nsF=Li7twIySCREmXIp0Cqfr72nSwv3}10=ed>aUR@e2Y=W`5LeahBgzU$l zlYTVrl(oAi4}h3rOC!w8fMl-kBPt$S@U~;E>w&CKpPFskJaf^yNV2tgJJyNsc;R87K=rLK$I!q7ul(eFIy7!;0fI^vp#q0^C$ENLm{%Hz2y>-E-W2y z_{#lZ1g1It8j54$W>wn^Yr{P!=E~-<#s2odVFwE33C@@T(Am(|4V%@anbmbDv_0(?6%@LIXCtgoKX zf9aXM=X{dxNX`7D9Hye2kSfk|_P1L0yIR;|6Go=$6}3UFEvA!CcTm@ek1aO&Es3Gs zg=JZTCq@e8(d=f<Jzzc&W8U_9N~8sX4HPeUF)r{Gi?@SXtJ#M1vD9NW_0vH%!h7m19&Fu z*Q=&xWoWvt$aQ_Qs#*T1Q0KTB7xuOny11*M<(+!^uo1FPpHS}uIcSY0XM5ydnxP71 z&6{xw7c5y&eG%zh8i@k76z=R;C2=+Q%?>$F$`piGT`u&xA_pEmC=qy*hxXj5??p(e zE)(Ma4h?u--)^-fRlSsS7F6t=DAmlULwzV0`+Y1vMH6J^yzcr;=`gq5;EqO3R^sN7 zBOB^hUD=UwcKj5ok>b>(Dy5DXQ*M8q-TKA7{@{zU1d8XY7!0iHLMx>pGT$BH-J7=) z`V4%JdL>qR#Gm+#m7%26HQ4=bZd<02JuEyc#FMnKgzEVvV05dI?OwmL&S2LB{NWQj zM_YA^!->e6I7X%R{UNvSK7ghEKBtRG#aoaOD}J%ojH8gZvsK-tPMSvFtFT?N%P@gJfGeK5F|tIRt!N_}}tp zWVaPM=u{C*?m<)|;#&7pWcw#vd*&4Iq(h}7M!F`W&KK7Crvg-(vZayyji-fY_U0~` zJ_D2w7qONd!lfPbQ#eAe1zun4+F8!=tN~CH=s?r_Q_+FOs6M5vdh)1bQn}?$HFHH^N7W z^K4YN?69`=KBk~4kZnecTr1(L-0~fdhvZs43iFz{RSMUG-r&i}-Bb!oqyGJqFR;(NG-6Av?>qh(7)D@D%&HDU*>eYlJ<;#Mh}m&J}!p zgrhFtuJxc=BirnaCv5tU!fzgCe?z^a!KPRyE5?SP!miFQ;~Hh7e%P1{i<}&qLc+6; z{#YSVw1BII_tS^{aC~aQ6z@B#m;Nou>em@SpvBI|4DIv$(({t$BKFDza^=YwhUeqU z;v&t_rty)eZh%C>!G-8RB#|)eLVEo){1j*P`#@|`*FXm6nbxkJ<5GHZ^pEO}!7YLU zUk!c%>%5fMe%kA!GVX&~yI=I{G96i>;K?fdEGf=&k*`SgN3M_5Nygy0yIf>Fw}h*u zK2SvgPeKNhOSd540XM-r8L{V6*qf{)C~AtXoA>O2TOB>ox*>gVMlo|G;R(9y=y$Lr zCqse5f`Sv9mbd+}9$-$T7pUU=7T)p~#=In)zlwHQM7EiP%U-xm=(6EZMS!FLc1_B} z0izwVsGa4T=p1TBcL@Ulw>Ae)D+u1~-!Tj?HcX`vI^mj5)_f|Vfe!2ka({30i9VJ! z&|+dTV2}H--m%p5gD$HoJ)KP!rd{H+l)6}C%WJ6O=+*vFnv%SF#d_NXK;fx>^ojrYxyhAMUtHwgSX-Wbv{wBAGIGLQfYskNIy2MK)9dgdlr zu>Vg{g>U?PdKrmX5PxjLB?*-s z=FS;9;I<}j? zX1!Ni-&ju<2cxt)v}{xxt`UFb;2?2wHO*o9#3lp#a&u+J7)tdc=B;c=gt;KUG?m~v z3grTuQ;PRc&d)D{hyY=}_q@`VeI{xKct|fcZ=B*Y!6!2p&s!d-6=70i6V9z2Q4n3sTYgWzpk4l)Z7#1* z9~L3AA1+-MrEiFv$K-5s?#`h|%%)2SvpQfef%kl4L>y13!_|U5)%$P7^cJ9h?3jGl zVH}X+-@&m*J_@b-3JKa&deQw3%#S7-@?O;W)@HdOa|+a?en2=Z5Hn z{(M99-gay>gXZ+7%H|3(UWXU3omBz*)oH!TYr%ZoE-eX{BE~8N^Z9=4Cl`H1*I4y2 zjjjx&O9T5<47^h8x#FC->NYy$9B`X_i8@-e=P)7m@51-f z3Bc$4=;nIM;keoHsWI~zx@!LRiZ8HL`x{*7JZ+Ffvwy?RI}TG*JXN7#y9+nTncaOD zzVFOm-{bEMr7M|R7*4)GRI_MEd-%{B&Q>&xPYlXHzA?(*R;!!l=xflFKmI+~b=eK< zk?&{WYZ%#Pk$nm7^|w}5tf2c>L({={w{cvzcJ5=*zumNH$6sX~snd1%``Px*0fBRC zRmcwb+AvN-R}7oWn}pTL=<}xX!^p1VXKqLv9~}&vr z;X`Hga-d{wzvsCb9-F>x8z;>J!6SvQL&-MndPqL?xS&pm2Cw1MVhgtyu0^l74L_NI zc_D5UEGZ(~DBvDglfJa_j@hNIRK%bCs5k0gn=>o?*J$pK`kCe>NqNUsXNkBMfP zhlDWw&?P_2ff`T-vJgH{pI&`%ES4MV&jH~k4mBA+D7FX=K|dxhy%D1Gnw1d#MDO@! zjsNwbk^JQ!t-Xs1AOV*f4C&(SIfDBQu_QU0)qU5Adw!V<+f4%Y+KmT_8mbY76P*wK ziyKREB}(W}TXFIzH*b-Vj+EARqkAP1(-7}2zbU?*pyet|vmhB4ZFul&scZKLKnAxa zt%dW{HzM+kNRvayW`lpkM}8|p|L?YrR@z38W+h;4Mc94DWI#_(FmD2D2yiW+ZC05)l=xb#n`%K1O1|{t7qw)rTUH)Sp+3 zK9Ii+Fk9Jm`$v$cD6&*t*FG7SQ3yiUt+-d^g9 z^-CvC_&nIo67;GM_xI2CDQdV`ZNsGKva6RK+f!qFtscU7*aTiRLwjr<9cCo;|I%m8 z&b{L`$sbn;QTmTUH9MU;pLuJVkAmAsG!<2rK(-Rvvs6M=OFO*bqI_FAErP3~GvOGr z5I{k@5#3jvDdCxh-PX1#@$D;0n*NRb8xMdu3TN(@QVitiUz~9qAJFPtBZ1H3HWiai zX4(W+oo*e!JT=)}PY`;c)K=kzHSB}PQ zGbhET%ZSm|=Y;=LOD?mdprnBC0aOc8VzcuX#?0OV(#VZqGx2^BD*YT#s#)5L4QsKN zO*nuBZ0c2*{4~{#bDR@h3D8 zA>|XTN&8$sS~7p3n2df_aSkLN@GZ2bKAoD#yw(FpZdW=>nEywMYX$P zS^3y!c1Ial#I9v;ohz=!ZV!e46isuWSh$XZOpc;?c;YUWxvWn9!B7|ut-OQl()Oiv zb>Mbjv%dUi>PCls%Q_WqzA^XH>d@vz=f-*yhu!9QyZhZYiQ2_Hx1ZF!k0p$PH{X|e z>=}~Sl`#nm*a_?(nAIMf=O^a0D}r&Ft#SB{@savSw`J64qHRS|(=K`j+9=0HMkAc6 zYimOKHPG!pXXR6i3{3vHds;C;&?I#+s!k)--v7z{D!VnmZ&h7$L>r+R6sQraSh#p} zE(^43imCvEn(PS5&S(`tc7a{4>WSGwnLg%%bwgh7gQUfu(;(IE_HdUx*CB zw-~B?Mo>}CJ$u+P>9Il(LTkzoOB1^zkg1yT+t{mh+OIA4b>*Y{rRW{Ce(Y;Hz3_M2 zvtt;Hk_buw8#rPu_l9!CsP9lyw0LN#onrME}?u8p_*xVtbLA*q&&t;XIfI}21LA)7)&lD z>o!p5lrTdel^Z{qg#VclCq#%zf2=YZF;DxHi=9ETAwWJyQi~)jq3v%wth^J0P4$B; z$wGkw;DdVyI@D4YfWtzTr7U&3X09OAf=$u=` zu6?m_a(}PPL8Zv})f8ds3k|<9E6CA)d#pEf_x|*6zOXo*TH(ZOP+otm4+w8^n8QFu z4HvYjDPnr8AINH4o_k)-!f|FZRXD3_>J${jx;T;Ahf=C>#hq-Y1iZkTDRiM5n=9zV z3trswoeo;)$AtD~>4!YlM>G_TB;3;*S`Ui>S~2L@&d{2#FD#z^U~AfxS!c=vMZR+$ zT9`KuI$dl&SDb4`j*eguZj~V}WT8k<^s-Q0mP91PMcf-pDX?duB{inbuFNeqMh(oo z| zCbIW&ImJ!0k@H0J5bTyzk^i>Az5cn?O&d~7gPh57^^`k$=zk=d9@i_G=q99g7C zr+@4e2ceQRVa%K;uXTpFtBgu;t>lT?HHTE%I;ANzO(ck$SrT$*jC91&l_cZRyx>#2 z*bV|+;D4%%SZ*Hg@h7uTL;-yLfr4J*W(o!v0hb-{Ju!kEaL6daG)?4-%4t(QJqSVC ze2+Uw?T_EqkkHZvy}&DqPt6sU!Vk_Zgg*ox3~mv#!D6Qr&ZZ>ilwn)`a|ZuwE&OlO z`rkG}_hePh=d&y?w;5YWEn@4nIa{}Y&QFe9r^L?d>?t(A*|T7f$^-aL50$Rzu%S*y z95S*dR8~+PE}P9?M4FT=15!hUDe zf=v#C*~lQUMiqB0FIT4z-YxO(IiJG3`vSoIAvf@LY{rwS4GJIz=P>iXTl!MdBh))M zU@1NZb9@_2b*43MAi8PRlL9i3>#$70Xy$?2Skh~{9)qD64T+u3m&DYVB1<}i_Q+#s zU&xfZ#@^Di)GB zM{4afWZ*?(csr+HbE%JLp{5f|Cr9d4q!5wlDfK1yx%{HoZkr8U~a9cRtojF(H1~W z4xvgTZ|}8+#<{d4{nVLtC7Rb06I{B-^S1uYkH^Hw?!2!w9GA>wN9+-<@YN|-f}SX3 zN)}fvyAUIc^@X&e5g*fd)M`n@;f;s27*IDT;qp%KQ(%rD+BL{T+p=NpdW%^z`H%BR zJ~f2#`Nc}pO)pNM11k9E50sz`7-}Y1Hwpyi+Hza?mA_()UYMU3 z0V0QFusE$Kl((?`cW35+d@>wApy9Wf}u zf5wfHW$Hjw&CECmjQJWoydfmE*GE6OSn}=FYBC7k3=C3eIcW^b zDUC|wmDSaukP6juK>^>IT8Ike6DHMZ<&p{}3*1x$&Gnf)5f(q%S4%{0oxPb_6ZK48 zda7xR9DjMK@PGDmrK%XGUGvE*m+RnDjW#`GtT85b9`G(yTgEO+z?KrFYJd|ZJodes z@lkDmFFP*oKYmB3azVkK5`0|oU@szsr;|Qqb%VIO;32sj{|^GICr}JpgU0KlvLl+C z>t%)-QS!+ND;(F(IGz~e&J{N0v5F=tkkeLl6dqZRS}@B^$n?`&vEAdRFJ0ZMLymvp zEb>{WMmqPBYl)7A8ZD0|HJd%yY;};APCPNXsPD-0lG?E)Ej%Sc!*Yt-rS9MIZ8Wr) zVDSW|+B)@*{ZMj2_Sq;ii&fK1Q)rJGa*KZ!Q9hL-0Nmgmo^$b+dE zW=UwjTRPah(U?$LwZU*s!{Ao@K9+a5RIdcj@W9bF@iHH_Xwc;Ph-V#N%@MV!7;V93 zTWL0o6=7iE$4&Wb@}%7`&HW*sq#uD5oB?)*&~T#PNoL&%I3x**;r{qr<8UpR)TnH+ zV1KVPnRZb0k?6Nd9MOJ=8=pnF9{E}7miT)`w?w_qZbgD>7 zM1~1Ispw{N#j-XX$V&t&<&SjjdK*UrBUBCT-a_^+T+jN%COs&q{t}d34GKb9BjU4J zzlHpVgLf9*{agKxeev6ZB2{S)l%@c|XO1Oa1Kat0?>oAN%q|Zj)8YP(FW7g5cq8SS zEvxD6f2!dQd&2d(mi>h^OT0MFD(wWH7K6s&X{3rrptJ%`^O@B0s+J;DYrGhD#|U?y zf9_p3MOOyAZ0cyNa&|FC*@ccU|3W+DzzZXb=+KJb{sD)_!QQ?TG>19}3X#(!NNuhnH<0dC0WCnbANjcHMs0uhhl~{7 zOwtgz{lk?6!%V-!-~K5JxnLE_)AufDo)MZrENB7sMT6n8YAgWZ-Q~=`ms4jkG)V2P6rZ7gVstK$r7CG7V&A;!D=qT!+noz?wC z#c0lOVWdk#nW zL<3PtycV1{oT)Oa{q?*zgtT_hjV9uW9>WyFH&Z6W!A58Is2P^~aoA@JPCR%}9$k5E za?eAHfc;Nq-;q4_so?@a%9Xpjn1*gR^R%#yC}3wdNwzTr>qJEP(Hedd^s_edPeoj` zZkGVE5CkUumY}5%O4nH1@q!y%+5^~b9@Z>BTUbFAxK>x6tUtk|VRxJHUFheC9~msi z&@=d0X?vqhV?@RhSP?Gm`g+4s00=FfWV5(yOYtd;I1BfHprq>;V5;RNgOso|wD zRJqh7S9Bg;DC*w@c*t$KS>hwHbUZHPo9R~+@Fu*+EBAYn@sdtI?@nUW;-HnH6u^F-Esb9>_+Vq(n7on?kHPskAWpC-NENWf=gR4>Yx3*^>vSeyf3=bSn!J|>zE@mkQTmpc6DMyBrf{JN(Qkz*Qrv4%mp`yc40AjC!U(>rX$jZ1-^%SFr-R3l|L z_0zHe$GHAlw*aa@c_5g06JaIxQ$$B=OvYM^ZKxuqtS(%DA^_*(2%i@?@JV=n!Aa0~ z)%4=JCvQE)*pB_tU6|lg!;1w~HF=eg#2WX5MSecyK}Z;_(Wk{ss^7SkubRg{9?7lrzJ6qPp=AqnaZZ=R(d`2O;%P{C0o7=b8y-K zP+qnw(hcFUA;#YFNFOJQR?3W13C9)${E}oS@fkU>tyC%;-4}M4WK$0_Uzj?vJ+>-; zh3@|4v~=!-c~}1#kl^Ivuz1b#OTE*Y?xCeGJ%0-+o%Pk*IAL&R(>v=}gaaS>@7=1+ zNox2K`~HdJ_u9Jor7>|eHsF39{fw zEU$w|2e}O(V@bcljG*Mtr8awj_v}4PuQ&j)`hU4z#C^TDcD%=7-40(NnPOSBVFCOb zVQEi^)0zQOP#!LwP!%(ly152JBM2>gWe0e8zbEVE<$oe-4=xS{hbluSNnM}cBU9U zo&*@lCR%gpo$O;*%%J!V$U8{{RSBwu9+GLDCMn{d(phKI= zbgOf2xOI1!AS~CVLSZUP-R0xM<6UL!@GP0n5pgH8RHG@brKM-=yVWAOz2On^&;N9H z7=6FWMz=s%JY5A$;Tjlc<#Amy>4=@@h<}|CD*5kTn|-EtHox{rjNe?G0gT za5&LRWSMS%7?Dj+Cfe*Su4HbaB1vb&4_+t+aGaKaesO<2$?8YM4NT{rUmatRjWD)! zciH8dtdNdVa_0A25+!ov&A&{Am+~^Y4=?hdT>Mn6KiQ(ft3CyUz3#QM_pB z=l=S#ff^o!5E`1e(Vv~q)Jy5r6&Nj|%kJV1?e8cB4_XYaPu4~ahSEOw{}RuEGjPIo zwEmztPNr4QKu#8;NF`*o*-owQlAQk-$x;*5aX(1JJ%w!M6UD~z`PHEzzkE(Rd-H07 zAAbmL4v>E`l)_kQJ7ciuW7%yg()tdh2zDs$?rY9=dh(V;Mx$COn6-PRrs3cSsm4c~ zS15;ub+pB}pDeZpEtaT9GCtN*tjtyDh}{-2MAfuCX2GDZ%$<35UQ*RDY4sW#6{U%) zt6!QcRDoQH{`F*0BOF0#Y7|ET*3?&F zYjg3Sg^8{J?Nq9~U|?D*@Zx0X<&m>Zx+v7-i^54xWu_pELw{^!vEvHc*08IL^dk2* zP);y+xrtdXNR%rtgU7Z! zm;7bj^XYfui#1;(WXwlS zzCth^1{w^3LGTK^JtUimevy*f;OC>5(n%&n3C^`h`e$K7idcU2HuKtKbxl~JA3?y7 zZ_ITwg@ulzp^!xtw@Z*W2h)v;2{&HNG0XZS_rLz^F#3+niZP9s!Z)oopJE_b&n`Nx z;NrRT3@KVm(yvR2`VErEgKvn}0Y*8ymskBaij~fn60!urhnyaNeoH{_hTgHpK`=+f z((F2@cl@;*BTKHvWsvDYuC6R=bSG$j-p9$AI8hR-9t+?i_LK)B7J|0Loc2U*eSg&? z8MbE!29S#Ep;o|LS(rg5ATI>X771=G^;IhX5TKnd#YPvt-_?B!i%?_Yl^b*GF_d+F zc04@N4b-Y<70F{pF62TXUqY9;oc|IJ?9|aAAjo?NT2V9fU9@bX2x?6;)}8Mta6YXj zSy-w{&*w@HP$5VEacYIbbexH@Y8g?aWPDnL7c zG?>g6(d`YsNA>qFD}5*sS7WMwHW%DVD9~u(0V6UPN|^#`5glAzTy9L38)dFK(57*x z1?{m--Hn+855oA}NEP1qM+LPR>2v?^OKG82#1sExqjHrdYkZ6E*{$sFP zt-rb1K0CB@J#lt;bL^Vmri1h6Fwi1;mD_jZ2^)9lW$;`w!na_AD3pzsl z%^d|=E;rU|vGAgBt-A;ZyU6Yd{Nh(kk1$%BYfX*|7rn(-`mZ}9r%e1bz2&bXYNG(0 z*t$z{BN_NUEJ@3`_q#xelR{qY5nd!|B$~H0coa^51W(B$5g;0LYCPQ$xRJ>~DbR`2 zMEOsb3kJEljPG_VG7>M^zT4?3lu<81SsQZTirPDdw z>b~(~Tj&Q7eLI>G@n~DKIM;Y*trh%Fk=aVR3QM-8~~WAFNKGo){ES5GBEoLR%*pS7~BpRMv}63uk??@RUQLqWFrB#>EK&g&S+(Xf6ZIu{QDY@WK;lmmDhR$XBRhcl+^i)7 zsT+;AW-BCRef?@C=)D9j6E+pd{XkNg`S3*V(!@b`vNqVwilj}r8V4$2T6_kYvNPGQ zVog{4(%arO!u!UNPZB}$Xw#YX89Sj}jq&y#)_wh9;1?dw5v3|aaoWT+HU`A)H^m*u zk@II6Mfl#>-%pv+;r9K_?h*sMnj2ps57q}+kgvi0DP$y{)$QCE95nn5zPSzCg9SD3 zX!`E}Ontw;JP8|)4W!I>dNKldi41DN9I5XU$H2p_cU)Ais-FE#)& zYA#~y@(MaSUKDY4`@>x|`x_Q$N%6@5-Ab@Tnb6UHIP6#m*Y>VKEPVAaR#ps#{z*k+ zhQrOmq`bE%zVks`l|LHQ1LA!giq#9qt+xQ*)LAqoY_a#JQcl%=^2Px{r;GaiUkY7j?3BI#&7De?XidGf=5j zn?KpGvaUSST(%JL|pkl{YfJNBkdgu9NaPMdpBVfG5JP5;F z{H3-o-Y6=v)zutaj$jGebt$810eA!_`dK(3Ny^16guAf@6XpgucwzO3k^sZ2wg5P% z)cl5SORuJzlD7T1^*46`uDhO4_>Dh>4*-w!exk4lbW8V^W~{i2jU;#^ig+jUsgg;6 zPGSn8&xbA3qbkZjT&9WCqZlH6ud3@d9X9~KG&!rWn;e+|cXqT=AG6wQ_U=46ubt_d z@LdK$!O^Nflxm=itMQdBq;b!!XirK@jg##t$k6hHba_9R(gtot2a*iF$9B6YRvlmW7B30wp(CRoiyNo(fPMgj67Ir@nH1&y!&isUlcgWX^9r$_hmY5zB zlVELM1@pCjfR+Qdy%08^LdMY;+ zZo_rNW;RdMMrNLjGEGauxOSRa+vgY5F(Icql7!S79>7D%=7HT1vU?UK47j&`Aqahj z=X{uejg2%;{0`fiK$-4W1g$=~zw$4_~Bp-01@r!)6+?GxggSRSh52!cGNXwh>He2{e?(ZSC;KaaXiNYGgeuKzCZ zZ=H5QFu$ULUoDliE-=7mWqhm^BUH3L`K071#wiwm8bJ6|0qwHJvk;mc^H5g6s#5q{ z(1Vn&wm_)$=Z|_^+n@|eim7Ki5dz5AWPf2**g$AP)q>uUgTK_@X9pqy%`G11Yt`S7 z=%St)`nxjU8oQ{PaPNDT*U;=EOR*K0(*~ zq2CapzT!zAUlB=_G8j0}=0o@g$963$l$$Vw6L~~KnFhQTr;(Vwt!%PWw~jN(wPKEH z(yV0zpSs;cr{9Hcfp0~Ze|(v-NwZzRgVJ?1BZBG% z1;Ju5J*4u%F%5zxxMh471t)+Q5+e5V%JAj(#NDp_gkTL)5(eC0eCZm&y7pd~wW#+m zA!>7fV)>V<2loo;AKp6<4Q$~zpJ#$;NOt?A!umpfJ7(nC9sf^W%~;?`2d~u!7yYU40D-b$*z~hXA%-Q zCG{mFwt8E~=?vAtdlSpUYi5Pko(0tvVzT~Hh*j(Z2IT!kR{CWj-tFvPTCKc_^;NMt zx+kN6;6_Ki8^aTNz_ZqL+v|o81q(*E+GWV_UxWt)<{%397oCNBszd6g(EueX!OS>e z+PvN!f|&!-o^@*09jg3^Lhs!0^h)^8=fen$|78yQZIQJ7QP14?omo{--I1yM^8n@b zh83>JYnC{1L1EErUZpJ-PfaUX_?TmD0W$bfg;JuLz^@H)MjJS{W9|*0$s9FxP{O5v zABEwP-7yPenMzJF>(NyKtJ5?$wcnL42kNTV^Lrj=%X+pZQO{YRj%5~IrbhP-1c3#}^dylo+bz>k|92V|(IXU_UqS)CSK9p9&{qFmc&mxgRb*N+bsjS zmHg;(LTC`}y{04Gl1#yu%CsK#zm6sEKa4wFWU+H2`N%WT=CFjLz4si9r)Vtjbm8L&~I=^~@_wWk9)2yRQHJ>V@b5otqeh z10gq8kl>#Mv7@`{%}Z ziSKrXlU>`&jy(X-&J$y~^xh}XYgc}5uV8sL^yKOeyei&_DQK%Eu!?U7qk#om>1$>C zP9xs4E*2dAfq1_3idc6=^fE_6qmb2MjaAKd5QtyD0K1v<6jMx8cGPwMaC<#s@vA~Z zkTrhQm^P;OwhZDJbz-sh9*aoe9d774P};S(5gR1tSZmfkaGOlElF zdweFdd@Xga@)X$Ukb7sV^%?<>k;bb}8g?6Iu!mSbYunMf2i5ewraxrFVipDw3VW5r z3Zcw*M5kJ5&m!C0`?+3lzuhDq_zbwYHv>{$^7d~u#~3jCPmP&kZ+=(qlJP&I|RL`2=&wAcguc7UHGuHw<-LK|?=?zi0IT(MZpK$1!xn;P2=5QU~T&m*} zsTjLB1i9X39|R>2luTKP$N>o6CN<{6r{tcfar91#|Aw-uy$Bm}?2`Y>!J!5d{}+_D z<9aY6Lowf=iB?ZzX(qJSRu!j=a*iWNqujcfZ8ZO(J-$1+JrZ%9Xk*h57kH+EJmWgN zuK)G4Zf&RFnouk>{ZWEu5huF)iBj%l;P2h8cg%V)9}XGMV=eF?qq15xTZZ>&-Jo#~ zv@U2RoCUw6>?FMovpf@3eeD&6&^|#LjFAZPUeR}RqHmp;U(!%?eAZ7NIdy>!TP)ezSWctEl z+MBVDfc%YFDQjJjH%b;d@8m=PnHRH5SK?J}X71U-*=TS4kQ4o`F#VvB!v`qW(IKPK zJYnxWHP}?W;^RJVm=~=X{_q}7h}|gq!!uJ~K&}td&gyQs&nLx+?qqNO34O)Q!=Pki zI{NHy`4{xUkdFztRuxLl9!x%PdB0P zzn%Wd-@?3MA_Ts~DuVq4PAKsOAVTUO^#@_UBY*Y#&|vP%J{=0dN*;<$96YI>LB(8B zk4rtR9v$UQ<)C-IV)UTjvxsljr2$|)dg9IZt-+UHUsD>O5FNae-X3S(=P({?@e2RQGJ~Kn(gp+l0N-xLelcw#LMm)ctSfy?Hk~uwc~(& zkYNl@xl7T}cZ4Yir_l+$j!QO5!l?N^n^()b>rnslgm$q;Z8-?78I`4>2kTWgNem|e zd48zo{+PzBi;+CR;8}=DX^Ma+zr3A&Ar^0SMLWG4q$we@lz^ETNH~V-*8N@YkwfBkK~uZ;>F|nLXaN9o9XZ-*k!; z0KH)(0gFKcq6u&#nm8;i8-Fb>;;~db6Hv?w+ta&_>o;r1sv!gXiE1YHDZ?^Q-hN8l zsE!yk0#Z8fcCm_>5nOC|FFOGVv&QG+lA=m&cXCI7bwR5ks%DBo+8`4q`DdqLJ5f46 z=pmWjn)7Jkq2Uj}p@Wt`H#o$?68fl=1GBJcY^-2c6KlipmsAMlYB0XMS477MS(o}5 zrE*6qoe%ta9+`r_j{?37gVk1`TXW6We;ba5@s8bJQg`lPBU3=Q&hU((m;u9 zBHF&qTou@+iSF_bd^HE_1WG%!V)aXm`%fLT56h4S<_7*#nJI?trADpVJR#;@eT`Yq z`>m!KJ5Nln#JNsy&Y0{!J`uHn$4cB*Q>`D!Y;uL`Xo-!@7%Q)y=c`+NlrS%Nywc-u z*)Zi2ccIeUj`?&DLx!Tq;EX@6rOdVFuOE7NtwXm|xymHW8AT&-!4xKR+3Um*eM8w{ z#>H)32^rkL@@oN!QDbsYFr@WO{Cu_|{JZZp$qOf}UkADzETxQ$dvJ!=a)qg~m+Scl z5KYdNLo6I$E)g-|>~&gyFqC^nz06t$#UzzVu|922dv)x8TyK}C3qcDMJS|%ZCaepXj?zA#jGB-}3oA{`b1QE*40F-}bOcQP6wMslUJQ2`bNU6fGSHVuCgD zNW$ph&@&MqprE;DlULiWl`mdQUmgnA4@*LTDvMkULO^ zx7JA=uQwB(`|#Qh{huxC)MP>EIp*kNaBDrAzC{V5!~@p;VV^{3={2!ypD!j5UtNGZ z7|+iQs&*gFQ_!4IVQi~6e&0f=|CwR&Yggcd`o4!Tfe*5_lcEs06m<(z+c)UF?*8Y@ z6TII$E&heyGX3#EoAT$BZuqB{UVW@t8`w0KV&cL}qJB@lbgv1Uj=&t1If!HM=-kS> ztiF1Xr|GNG5JE%<5AVQ5pN>-2wrau{PSwnhKl6NqByh$|Ax2Syxqjp|L(FX8o+ECj zN{9FU=07*Sfy?E2cTcBIfB+Xc#|{eQsQsyBx5X=*vy299`@5|zw%>h#xzjCE@Jz(8|1qUNTDw9Wyg%AGEAJ9PJu_b^RXZeoglZGSK z&uU?x~$*2aS>wPbw6xioMGU? zH0)7>?%eW>8OK>0xVIYOeXdCG#*IFV>vK&aWOhn0U!eQMLSJ0o!C~Z4ZQ7dmmL@=3 zhBP-fzyL}NgGxDwO?u-fmA1e8dItKjCJeehxR~#PZ`=~(X(25pq|Kcmv6=Mk17nQI z!flZ6c`!)+E4+*^zKXtnXuFZ~gX2Z@l2-A3Mq$g92m zPq-#(ql(XfQH=5GftX6Q>7#-?{+)~Eif!1$I!bZUns&49_EQGFoqaVWH9LGnBNG5_ z$fso`r7-?EpBccZTx^k){rc4`K3obEoo<*X4fQjTj7iFVYtI9~NRkQ7E?iu!{gNx@xr?)HgGCf9$m@~ybHETEp@tCKMxN782*0!GH zk|_9YDygDYGiDSi%<3?M+f`b4u)2NBk=1fNYn|^%2VD~4bDbCtdP&u;1uTlpR#w<- znH6$-{+1$n!gabinjjY3nj3B?1$M}jZ@#+5ADwlB8`ww?fzpV&@oFvI@`v7IR3-97 z7i|rYx6KjvTJf%IihESjvnu49{klC3KZHwFX0}AoytA$Zmd8k{1n<->or(WWdS0>g zkYw{)o7ANMA2jC$NtoGc5d%E?-Jx<2YAvY8aXI#$JD2)UX*otDfGldT`^VnZ7v#(z zIAr|S`;iru-bc2VMAcD6f<6*;ceEQV3GkT?YPr*2wYJ5KdWpjK=eL}(o!%T=UTR@j zeG;w^j0TVYqGN@?0eg85#Bjx$E35$}umnr-E0o1f?*A@Y-%l#ycx6{^4-Vsltlbdf6QPtU@zXM}=`{ z$Tdi3GKX;8K%7#C)L$%fpPGF@sU5{~Rj>3S4n`k89dIK4&P=Wdz!6c}_`IJ#KnHu3 z>^rA=CRL3@Az{u;s zTpM)@1pODRvF4dg}rB&;Lj|MSIZ08 zAv==1^s{faIN*%l>VjdvOKzJocmU@EF1I&WQoJ78A4P;n)za$F=zB^J#e`*Z-%=7a zp5VaCp&Hm`C3a10}TTozPMY`*tH35TRLN(tG@n3F6x)IvmfCt)`LnoYPSxX zm;7~2f`iV2`2>%Jd64_@{E5um;f$U9w*=W$tQS2NOKba&+*Z}iXbmSX3i0HO%+}V% zJjPJZUmhWpP?nb5&z!f=cFNXmLy2BSEkuNU5TC;nVz-h~;+BtY$E>~By~*wO+LZT) zbW3!qa%IKE76B7JQTgSI%3_qIL_I9P71Yiz_uvd0k4Z<=2nxn=a!C; zq|AZa?Atfqe=7t0W=spX#bByvO2LK8gI|)aJ+elnY7vrd6hqBmF2@u zN7$t2kTRxUy?&{Zgy{Z-@&069B?^8?F_B%+r@2qg1)gWCs)BwG31~?yrcke+ zK7Bf=m5Kqnr}H{fElo5_FZWMmei=Po@AL(0ZHEzvVhiLMw0oT1cKJW!UEklcIV>JP z@+FpqeD6rMbC3(1seZ^vO4=>gn+<|Z`ogEia^B`+odL;c4H+33bqYIhx@dA8if)6s zob3JC+VRtaxkGb-u+L4|b~G+?8TmPEB98y=j*peq!IzY+rstbOiR2j%rd0V>U`xvI zDv-hje-iN__VrlDca5J(9n>K4rA=(B*h<7CesALoH@$p zHPly8sX4N zksgyz|6}ROt#xYQ; z#Qok^t}Jj6O#MN2Usng;TQpZf9$vJO44m?isRB>9i;A`bpBAt|*CXVOth6t(OUrX> z9WCL_vO{?sPf|1bX!3KwVp+oW3tP+I#7}dQlz8OPsT_(QKE@!@@<8r7Qt0w=p{W>K zgG?A@?H`c_S0CHYl-E%eGaVBNmzW2 zn8*>JH)?h17vbPY$_}~j|IntM#ceO|u-?&nRAbPd+w8azz=dQ7yWSB}a!_E1O{W0L z4jvhZCC0B-$q#u4#OjCWJtV3??dT-Db>Et7=7y3@cXxJDgl%TamI3W^cZ~WFR&z_s zg%0&nC0dJyu~W#29@r}X0~%Tt9ubi|_lq?M!>WEe|qPk z-Zr)X2MzTrJ&vB5e-Hol)%B!EprGS=M-3Jh7C4hz;S(qe^w(j!N|!UWUi$6r&Cn>| zvG}=2F8K(WCx+2$GRkqO!6G7-fIY;|gjNCENc!1WbO(@!503~7n`#@S7e`!c)hJgx zh;r$T5HwMz@E{s> zAMi!z=$M$IPfxC5GvwqHePe?N&6*<$Lvy%q42vd{!KkHGvqx;zMIY-L z8^a2u{5A(J?f<|UH0l+9e9!uv6td*+YQt+e#bovEw@+#Dv4>B%QTyCjzNBhzxbE=u z3@5`!2z9CSj#?Y}qmIybSrL1uPQ6}q;o}CzJNIu31!4Yh$lpq)Y-n4*P(fV6)JU;^ z4b4^=BG(u!F4WlO_f)QbH>!T z(b7#u>C)1EAw?mv%K!de_t41#`oHU%-3qy{qbd2^;Ow;wbb4Zk(s??5?s6^z?|-;l zJw#4Fp;1y)LQCk0PpB?JSX~&}$+`ZlkpNOY`NkqrpX`qNxOZu|oZQx_0>6Y@bp@Q9 z0uN75S_lEjBJ0c*JMpug)ifWY{MFQ^h4At5uM+bRg8}UMY&GKS>Xz3?#V+4y%-DZ>q z6U+C-i{4PgL2PVn#)iNqt63Esl_>_WRy>(d+iaC?V?!{jdI=gMRd)iHC0s7;yvlv< z<$_V*S|+>M04hl?$KYwDb}iYTb26e>>5C|XhG1zXVF@OOhtuC1(F)nT^`wD%gg7{o zqY2Vh;ZCQk(3OYkd(IGc+BjTeub@7^F?))J>iWS={5UCyVvtSzm0W z<+04dCp+8^faE3=hc5ka)0`~D+y}S#*veZq9DShnM58}FAjmaOAa80 zr1a)|teoq^_vWniP@Ga z<+LHi#ucK3g%ns?MMmS(S~ck@nzqW8s}&m$C(+8SwYgV%UTpRvl%=X#!P{@PD!751 zzm?ELn^QM>i;Fy;a8@`gW^x_2*)G&jfZLW~eh;{GT8U=yp3gT}eC^Q#8+8Zts|qlC zZ1x1R4&kO?J%KkBzlP87D-kh*$jMmQppcO0?1q+wxEe49}gc_b6?I9VFc;<0u;RX5cT(}k$2 zsveanW|dHe%^{`DPS~2lXCdpc{xTAB*+H@hSfli~RX0j#;%;P7gi{f3rt@x*aVjaU zQK{**0p3Ff2+Yt5`9FbCT_UVbtzlL$dp)F6!AB{K>V_bx@5Gpx6rEY_@hqxAB^jfJ zxJ(*l)1}IJ14jP0bJ#_ni{C(VO*>lhn8{~~#H#TO>Lowl*}7k*LC)I)6$Mf;N$dq8 zGev5t++Tt(`1o4c(gSxRWs z9aDW!33>>T-CEo2Gq?Tnk9? zpD&bywuGM@JrO0ko_Gsvoui1R%QDr%Om4^ZmtD&||L?WeRiK+Vd}1pD%I?KxLeB5t zOaV^^8IopUQeaj))r#f$WQ)}V>O)GzaSSR|7$(>Z+Q55Lg)$M;R{wp>n<7**oBt5} z`SYh>d}{WOTT~d}QRm3^|K$JSV+Us~qT&fyE#t*A<71Wz;aFp9$DDed zb_{aimz$fz8FlA$8(WA16&|D*^Mdy(4wUMSFsIroNoCC}?udn&$^A&}VgIzB7nlot ztDkti&7+5O2J3K?p=T5Nn#roi1(>qLoM-ANq+pD5qRfz!*CW7<`<)5QEt-pLAPa&# ztjO84pIhJe@k~{R%}8eL8cEGs!_JJT=fBCQ1dOtcMCgfI)i(20d~$_T-?{_e1N;uB zi;0O>Eoq4$KAZQH7q1WXt{EH_bgeBd*%+v(Gn)_J;z?_1KKiO2t#?G2bB1i>rl&vP z+8B2uz`3s39Cmx4Yowa<4h{4^_ zU-2^kEZY5_?>-F1lb@52lXs`{h{9E;AB5%}?(Tju2lU-d^8BulrEX^I5aHnA#U^uw zu$8ibPEY#39YiDn_q7ziUu$d}>jDIe_yM5!X;qVSAooLXwf(S^+&TfLITZ83P|#E5 z0Mz|-(l|Md>4Zfc&UL=qyv_(ywbDwx4+Mmd24+?VC7`!WV1L@Yr5KHM}o@4U?FsQbD?iArE|EM`}SwGxhc$n`{J2qqW9(!2IHm&xYet zZX%Nei>~5WMbl7i5GXD{{;pDCJ`^}LE()--PoX~_x~7bg{^{!*{$9dRI5z-e^EY8B z9RBp=M4^%RZt>SriVwq3S3f>G0`yzR{_jXy0ZlvzQ7oMzzKpmtEiy8)T}dm4#mLXW zYcu2yf<_ICEZ34qDyq-4#;7PLnf(zeNpK>xcn~`D57D%RVY?9+!z+!`aJJtMg~M;5|LQgd0UzV^Q$P`^;yu)_e);Sa z={mN6=hNR`lj#%-;F)WKU6F)wB=RP-W^Hbhf%Dqv{kXQ9Xmi1Gw)0WLuOM+f120*v z{3i*A`OqogM=k6#@+UMXL_1_lhwT80Re(KN@9YCSGtoFd`K>E-S{2-CBE1$Tlcc{~ z+ERzYKG$iuk&GDyln3e^sdMlx;DrJ z9UN*Xk}0RsB6Ce$;|j+Nu$SMq%hgNCNFv}x0;%z`mT`*TL7D`JDbD8^`AY(^m<93zyBO?JOrjk0P;SfiLH9Ef7`VeJ%s{lz+U*SG7ouXn~M6c84i=OY#MR?|&faRl!<>qfELpEbo zukyqUc(G=vlZ)a4+&AYNfjmT1lBevZP>O^s0qCfxqt4nz-q(AYJJq%C!9Dw>Ks`U*hsuRktg!LnoSIxcep_y>j0l{6?7aJMbuGo zRZ-Qr0C(m_c!qa$_owt=j=?K-2V5!kIeFl)Q^fHR@6Q%Zep;#!3q{DgKbR_%1`cj}z$Scj zTy3GmrM4QOTB-ox10#w>6#JFtR4N^LOnF=W)g5tVJR7Js4AtMj#zj}zw!tJJL2GW# z;E*@cDes4C1Dcly$S#?V1Mo+AwX_1L9n`w$He04@Kt)Zhe}B9%S?zVX#h=i&q)@!b zz#=1mE?sPP{x=G{y~?n&?JIEDWck0p-YW$J1i+=y-B(@o5B-JHv*aw~C|P;{M(NM_ zeax!Cb$_B(4+vVl06%#`SXh`bE-volRPa1=3b!l$@|?{6SjNm5VD3Ay{9+*x6--Vm zgZ%UcckP;Qe9@^~^-QKPoiNYG=v6qMf7ut1F1_IzX0en&QS0_cPbR@GcLW>V{fPXuv|$5g_$iRjzIS$m zfbH?j2Hdk57X4-tak(x+TK?jzsYnzq7`4k0L;*7OmTO>SIpJu8)7C(g8;k!*2SPM> zG2U|;MUV2TKR}H0G$nQ7rJ%QT-u-^2RUjGF42-5aI^;w^a82tID3*!T9BBOWqvvd` z-I3aOnf0i~YLU311U7-5o_>W&87Qw}uQ zS=H*Q!DF`SyJB==wi}Jkn11T7QOOrKD)_Di_oYFap`VdWw`Ea`M~1XxSKG*6v&?)r z2_4f75!1`2b5*oGh1H;KKL{Gu3YuuPTpckJDA&3Lra9%ELc9t@>~Xf*YCTmT)r!iI z(F_C%!AP0&_TzZeR_&(!(YI3bB{Z!3Y-P+7%ksJwu7q)|Ctrc?th{VFVhA-GZ)rXyqkr{V+sP ztA%Z)rS!Xy#)Zb}^3SrTKRr&D;i(SDdQMH5P#|-_D%?o9-k&Tj*Qg*M15Z396^N>@ zw|mCpWzXYa`>qspDuAlIQIavKN0}w=b4-B7!(NJRAhz4XnbM_nb~B{(w*g~*Zsja~ z_X@w&7H92#IG;5Dn&C$S5Et${qmSloE#G0Pd|scL&`~(_el#m7fQ$+f^kQDyP~v8| z1+y&EGB_>iHrm`{!Yg&ygG(CR0aQ}R$;&2acAk+w6W~7$C5#Muvqc|pH7t|`*{yU3 z2A%>hI0|PT-Uxip`O(7|<=v*^er_w(}W$4vi-DY%e}|AQaw2s@@YzaZ%YseAp)aFCuK2YlP4}Dia)c=G3@P#>3cB*2L6w>{7X;Aw zg_Cf`@Bg+d+uZG_V`9I8I*>qWu417?!UuGGv`y$8?SA&au)(isyrvB8Z8Z7?+#Y*H?Z6rSn+5Q@)?!XwtszHq7F>r1$S7 zwP?OdNYicBM(wj9V;#x-)WtZ4NCPP9Pg}@BLE^}I$iWQKVy(mYk>`X#8_}ZU5J8#+ zG6i&h7tko}EJUrGs>Zln*zfc2qD-Av<g_S+f?eT?FKg(KgGsMwc8%1-qAb!Bten z=Njesl}8x2S_e|t6nP6;HU1Mj`}_5HpoPz3nOytHu_l?cH1r4S6U(H7jlczBrJT;8 zkcpw83%#!I$#6z0hrSq89_r*WM>EYDhL12e;{qmw4yzxozjV|EEUhZ^nmfoT?XKf9 za_BVvjWD~vB;mT+#}Ay$K6#!J8|CC!q(%LxfoyMQPa$OR0sVOXhp7~bCAP{F&;Xrx z(e-Omg77MPVh23mzk}QV*7;N%Z467-bAkopx_T)in6`g}m;quk~ik#|2SQu42PV zvjJC^a2Z;oPBuFn7q^!o4-ar; z03u}hR1`HeHQl;xI;GIMc8s3U8Hu^AnN5(RZ{X#Q*;hxc&NjDO#gF@(`)m@=^W!?u z7CLWhE$AVM1s3v;jT_q+w6Aa7d>1eM%ysqk;h>6CsA4YEw3Ljn(fK-<4@PALK&<{i zr9bF@BTTB&e4{{OsyA%j;6;*axElCS#w`DB!O{7pxIXi#K7jnri5ZS{Lg~bkLr}$7 zb%Nu|(NQKC?6&t%?m9Ma@LX*BmNDMN)x9OP7!da=lmk_$;i*xs@!{cK7SivB16lDP z2VF#uVa5!gAE!w{@>V;^6BUi8;?GyRaGwc->x1m=t2mG5QHc26dKSR!6h9wtCyD>v zlWC>%+Sj-}zF0#ltj!iZ4|oYVSQQ0sW3co?z0)y zr_ddq92|(+p)*=r&o9at)YsA-h;UI$^va9cl={l;xKX60Y3Mx4tShl%bE!4U-3uM&pO%iTG3D+(}(n$oD2DTUM!%(rP;!thwUV>S*6-S$U~H{gg-Y zb(o57sxv#!{}i}5F>$vYYS?ZqBO5<)s(&u*WKItA{n>C%K6uh;G0N+fzr@e#!9V^W zU1zcDo}w~Afj|HasDq-QE!y+!8|Z()Wo{rZ<~dqU6tig>h{nO&LeblG#fp$1`2)s< zg+2R9`%x-f{9k0B{#GLCW6y}*Z;O3sxOE$$=sg5?n{QKmu$Qy4a6+MTmCj?QGli%E zAKv*)&=fLSMTuVd=SgetXNC4hS@ZgO0#+AjE9V={yo^ONS~8LYN469*gq{7~E)ubv zP72LYOCbq=mm%^NSZnS_8~mva8pt9blPHY|;@{%E@Q6my&ws65 zJ(LJI!9spJrf%7i|57qa5EUnTwo4}(mdXJS16e)rIniPXfXl-{HmUjcG0NT%e~78J zR1gBk^q}7Qqmw2{PMjk%Ta6i8^Op1N1AML~3yF3FAWyVM!;KcadkrXe@qGw&`v_?7 z$Y(z`LXUs<8DGbBLb^27=MN&4WofjXO6tYJXgn4^*e?bs7K#lm#oXev8et38IZh_{ zp|<@nswcyWFZhG>U=+w^rl^c#r&6OZ49CU2V-@p^NdOaDLJcC4&&(of-J)AQ(&VvQ z8yEDsLaQ9l!Glhx3&$=`C>)fv(ye5X=VRb=^VYllMetJ-Uy z%2#<81)362jkMzMKifJKxF;oRvfVJb^P3q!_lzg!d#LnVDn%bXLSJz(-KYV3@2`L6 zBGD+z!>89LhR;2L)MLg@VAKFLifG4Q2wx@Mr@W-1K@o)mo;M5R5zV8XalP3nnJNDm zQYtumiV8t984*_O<+NPL7rVbDbP=i8hB#tR*hOy0|84DnheqVn9Ool;hDUT8ou9vi zs-tLdXt3o8HpHrZTm^-oWVybA{3E4KgRvjXA{H^67F0yxP0a*fQt2RF+HBImLu{_x7rq4NW>m7BgaSdr6yi^ zetu3S?i<&jZi_p$lY}LDw$anj(3tuYhMG0sU085ZZ-5Y4G?d`;`~GA}z0_f?jh#+M z5TVxBxcxJ`+<7bTnp2fZEf(wNyVFASAG$X{2Cw>p|MK=5dvI4+)k-^X!>Dz(!%T_d zH&Ibh7cZ|CY_&z)!9$>v#uC0HSkJID`$Wok90+mQt$;WM*DLmfv4N{!@f96ry@iu! zEi34j9@$<}Uj1#OZ!d%=?TTK+B9Lcc6Vx;t-!Ja$DweE#tiQ?4@K_28irbIp3X{;K zXRL2kI|1Ep%OIGc!?6Yiwy21ylUO=%M#dp*FkU_yZYI&6V^diXrP-}-8Or0;leP$M z%=|#mdrJeAL;idjIWmm3y!T?iJzPbxA6HN(c@0_#s1OZ8$Xy1bQk{CYH-Lgl#IblM z;G?E-i08?V-$G!XXg2cT>pO9RJ-i1k6LJ)@@XACf!bEwvLbtB#wLTYQ#tof|kK!E6 zdJfXIYp{tyX(Y>EHimy*y=nm`Dt|pYi|L{WWq+g4VG^56o$Wuzehc#g$^nr?z zgHv7S9iEDb1L#@s|2kmknS;*Lm=TGh;0R(%u!qe3n~;&gYGsOEcNS>z&d_gI2mS$Vv%IutS~*#X_Gh&724(`;F<* z$Pn(iGT zVsMC9=Hh4FNY8inLAox>LceC`h(Z#$BlI}shScHq9gV4~2+S_~7 z+N

V0=VGj2ov-g5NTAto9)8`K! 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�R+?c9?3y*o9H#Yz593X%8|T?6 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%0D+87WHSd5!pyf-qym7zxexgF=z3(cZ5 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∨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�tGyldo4qNimN z=g6g?QgP4FOdSGq+tw?P$HwPCTOf;$6nJh>VzO4;ir|56CTeJ1u_Epq`pGi%pjdUX z))W>VseAD{ghGE@^*kuJc!D8mBr38Y5|&wyayt{j=l!;=D5KscURaipr1q3crO?o~ zrlD06UsIKeWm(sJj^uMPNVA_C4^kM0k55Q6+=$dzLI>7}mEN-=eWE5x!4NnUDt{+GpQdRi${CuHL$zi~)&o z{>m)}3#D?STqZ4s4>a$!ZDnY_n@Mk6o2=EbUD`D_jUL*YakRJlmiZyJM&)vB<#L`T z^xiZJmakVPCL1T%TPmff#dEoBt1Pu`D}_F?(MQLb{??+8-M4FdZqlypeHZ=o@QBE|Qmv|EOuS}u zj)P9DtN}qncQGUwtbb_T0DNm!`69pxiHWdu?RJRnWYV&lfkz7&dM?*x6daxDf-Om`6bv z{l{Er;OmW`KEDFes!3g8&6Yh79{IMmt-_M572V5G&@#QOidv^F;#H;yl=mw2MS#gZ z&BG@yz`l*tW24d9ZQGjL&}F!On)MRYKL9Fy!6JUO3T65IN6s)jZ>pN(GR+H| z2MHRA7yYvCsifz0SmZm{vwl&!*DH(LqrGA5l(}$n&*!_T6)oZ>Zo|}Sb@_81H1M{h zw9`uhl|(YOPw*}MyW>iX$gi1{4tX)@ibR%>#6 zOCqwjK&uoAvf%w$c}7=K+$-9@dxs3)CoQFZ9?%PB;)Chj)(;fQ%*Dk*p`b|HbuL%h zwqoo^vgnM)Pba=yzkMIJ?>!2Kwk`#!G;>#cK+leF;Mi%HzjPh^K5B5L=aKzsWLpKD z8|~m2icTi^k8uf!nX)%o8y!1sJ~XNC4du#|{*13JfteG3fwnz{f*&fo@?IIAkKf0~ z#V61-O(o|zXquuUwFVuTtk3k3Z`{5QUcCx|jig}e7mP~fyr7Y9Ef_a-0UX(}D#LSv z!@>o!!Ih!u9B)d(vI^NFlR6n5Jbq?w%J%`gMZSFp^OvoMrL!lB`@g?*tXen)>NM{H zyAK?Lb}gHH^#1)vPbspW#L7~Y?IHp z6$^Tld$JGYQ>E$O&-YTaxN>Q0V+%vaOcUF-7IrWA{(ZcLaP`)Gnlu;_DEeZKgVsj9 zd+Lzi<5I-iD8G~EuTlNFw|oDlUatp%GeYgE;o~O>|IB5Gal|V2Vc5%GmcktL5Xx+3PI60b4C)p*qV&R`DROjJq z8gGg%;Zn~3fIEb(dk)jd$y%_px7lt0EnVv)%~WB$&v8iyH57I>R!xx9&YcSFc3SL;Bm%a2N-dy0)XGrD}m%qwP0) z(HiFJt$WbDLrary%__89F8dOV#@)R8h~K>XAa(e}c~(yv^x9aTL#p-{^1$*=X7kz_ z6UX;gD5O^u7K$+!Z{9C;?Z!Q}jAwDERjs0_yjMw~sD~RxWdq zGLMW;u3%6yDF~s#;eysMMN+QJLTifm!6#9d6S#73qhehmBBNDg?+Hayq#Cr2Wtb>S zON&Po&0nIG)EWIl2qX0>B&2Pt4)P9YnZTO&MG!U0rt}OJm*Qyj)Ht9Dd6<=)-jGPM zl7kcr2PsMl8jW@t#j?RNnREt~Qk#h5&0ZThc+?Ea;wiryISe@|(ZNYgEPHZwf8L~Y zMuX&3BMUD!7>onNHrn`TELEyGToz}^=vvgky*4eK8G&+a)A#2Iv&pV| zXJ@B5oL>L$0!?N_!Xw`;iH%L@wQ1SRw@vERCY4~BsHhmj$k9`0OJq_~pnNIWg7L2a zO>&nbBHu05>huG5uALv*)~_K6!^DZQ5d(V|SP82gIbrq^o_AK++uF=A<#AU3ENC(b zh;HO+1pL$bMbqE4X;%L|;M7xw_UWQWS=SC7Gi|mY2%M9H{d`>>W_9*+ER6xe@^{fO zKkZmKFA@QhDv(n2)L{C|zoAe87Z}j5yBK;8>eWfB*Xff-{yJqIIw5*nYpW%BmExI# zCh5Z=;gQRcV*O9;S^KtL?W*r7oS2v>&TUt(Tp<-S846@|orR?;dElr&77GHevbVFH zofl=C&5Wf(!y;B8<@#(~GUIL4ie5H)yhkWVF5xfcsmH*V`2d%*I z$%DpBokh{K$-&lkzAleZoXv>B=tHlHijM7bdhgl@3^HsiT+7OuG^_)=HZCz2OC)na zcnE2xfk;8cT0U){dabGo|82`P_)gNmA-~Pzix<&hY`&D|xx5LQ z?@M9r(%GO=Dq+FQ-vQ-StaK9{69dg!bcS~?gJAEG9ni)Mnhg2KfjzWJglr$*;Lmu=ymAY_=KchJ6F#QN5DjBrE3efY2`eOs4QX8f>of_>mYxA7kCpM z4lTP3hS&r(T)cK%tSt4xPz>nVQLEMJ5=V}nw$QDpJ7;favzYAa&sES2O-mEh$@6H2 z>a`g?t+ve@673`*W+^Tq3FHhV1|b+d!J@enL2uN<#$89q{!kzlVdGJguUYe#2>9K* zC^5h=ksZIh08aL{#Ox8RPD*WR#?M@|NU4yKF)vp^YqYwRsHJ=CUb8T=PK`>0!s4v# zG_=FZR;&gq$Nb`)H)>?Cv$Fx$0?r7yu&Bh8$m*ot(Xy4B;Fr-;#Vyigl3%Y*ATbvl z_1_Ma%83hjiqS)V(&cx_ryV1`VLy>VzKVh9bPW8*@i0&0#>7JV9|u5ud;(I~ z5dp_Q@S8B`-nubN8aLuo-(%c;@Oa$Nv46T)SSXj`0~?X6pvjVpLLr~;;^e6NZTyTS zGMOZ4ME~w0@U$ns4i16(4co%oI2~+WHy{2+mac^q?%b*gO#c0Mcpdf@)-B0!DOY#s z#QE5+1IM_Moxs+XmV=GCt;onfM4RSwa#$*rNSWWJEcn|}snYf7_JatVOb!G-djYm3iD8kj>)=)qa7=70 zDlJY-F(hNn-+zK&GQzrL3&_G1Y(NKwT=L+FbBX;%PIh7$W;rUcfn>WyUYH(C=aHH4 z#%-*v=A*9G{5*E*GL=%H?$h-LP0t_OD63a35AFOKKq_Yt+n%<%6j_=7RcnXeBRB70XS1`qv@7i5;i5??0M=j)#l0ll^knd}x+Tc^mLo&3lV> z+{SuY!6F{Y@iYIPo6pH!?ds&H9zO0*XM7;*U7Zmyp)dvi9?)jsMsRYlormEeHGamT zITTP9=vFSXva%RtH0FH@e-mgjh+8U`$>t(pmKOwfbYKSkFRf#VpueMER=VgSrC*jE zLxF2bzbyMt^~>^VQ0KpXS^xFR%1fX>)h`Rol`GVUGh7g;S0GSf6b<3{Ry@8gM>;#> z?*)+M3*jRmRpV{MPAdP4{jv~5JpOZ65a@FhOHZJW={ z8ns~&bZ@HwO}IpCM^!M_`(>pa?%vHa?3a~NqQf7lv!6HWuLWK|{yCWxBA?&k@E}1r zIc^pzUwyU8%CR)f(=G6Nt&tNdX4Eh1*_{JPIR?6|{Bf_iPp1d8QN5F8=-vpnD*|^-+b_%0yVZh#i~iZ)FUzZX8+#Pf zbp5grY>>bU%S-~d{ppp%p;>hk&(3crG3ryVdL1Y52HiDUfB~ov8l~-*^G?TA`2g#HzibtxJC)6SKmn4#2z=Jg2PWaTt5NLeq8qFtB3`1%t49l^8 zS%~Zf|B6u6OTI;JWaLNVgdamP10ac{dT+n$f&|O~~)!3_JH9 zfv5xxv~5yH+&D}6+=adhfE!QW!U>-?^7ekd?I(;LPDEh<9%nLCZs&LL)tdLZlbjH< z2B}<*P&-@tWsxUO@%+Yz7yLsq`J68v>kc0~<+kJCKa9|$eKTm}FmUuV@%LSa&cfB3_lo&%UAayok&wz!=Q8@T>xb5vJS(@}PRV&6 z6!y+p-Y<*HYVy2rRBw>q%;Ynr@%_K%{=G~DEWuc^ZL@kne!qF=0sJzg@B0%M&Yb+w zhhM&WW4=g{f}m2!;O3(j;O+OL+qnaq|B}n)gwq~p^rd$09_rZ0SDR7MG(t8fGM;t) zvTy|A?!nB1h^NHt;8~w^qTd6+7VXCCh&tF>EkVZvGik+eL2BsLGQIfAS0SL)n?SApbhdD61?hErPAY%w z@I!ZJXXg|6r}o41ZXa96d3v|Jh+qB^57Lb9`}<{)7y#h}W^%6Qxr;Mhb@gHqEb7yVhij(&3EG*CbemsI1j@ zh@?PP^vgoe=aoRynQ3gFwVQWYi7ffkkI5G?{mH|;G#|Rv7j~QUhyCuG-Ulsz_3P6PgTs@wlOLg(;t;%GVQDL|2 ztI$!;rI4eoZ`MJzN=prs%=uZH&czH(P;7!<>lh!DE6Nt{qjCH zgp{sKB(3GqlYa^nd6g=b0R=VSXm4-!!k)d(^x{v>9u!K{Y>|xWLL<&ReowzFWD^}t zF_})wm^e<{cys#dJve=(FYI5x016i_{K<E7&;k5hGe!DGI2wkeF{}RHTw1H0!rmx zG+n`>St9FUMbc!TJ-zg86@b zS#3npxwyR7xGy@lf3L1kqiPlCI%q7KL++DAl&HWKDP#}dn8WzKUlt{5La?g*!w~w` zp2Z)rSJ(C}F0S6XzYCj<^=BSDG8e*V;9ceBwc|T7Jf~9AUX&&=T7{-nnUene?ftS+ zWft1n$@tiwY}?Tqv{eBpDd;`SXo(RIcQQIgpAtNt7PhINLU%FQ<^9f^E%o0 z_RA8;QVYkqW&|1?f%B6`^^Y4oe!eXU67D<*fSw&&Ld%vdzYAz|bTqW>J{UT-Y79Z4 zQKYPo;Oy*lG_&)KxI(ahe z_J?w<#dvq)@P6Hz{IPJIvTE7l(4s|)?*^SOUq0BdWF~azHwK(+lqSE%4VGpUY>?5o z_XH~Z#e}g?!Z<$buY2RSoyZ?*U=AGb$Z_tJxdUf%>ZwPX-FJaRaHvn-qGyn1wK5F_wHUHo9a6xRN}ep&dPJ$w43Pk!O^=g*;i z-_g*!Q*)^6T?E^LiDjk0D$o35l+jMi=fAR_(Jb4K?yzwRteA1nG?Zz#*cJq$N4J5E2!^6Yu z#jW0UNIb}xK6X$fdUwM!n<^5gr+wP9oXJ46rZ;3qzbuNTY6-yA!nby0^0{*i!}L0H zVC(XA>(&)pu-?3)I&S7N==%IM)UHt#oE#ls@v4pR;8_TC>Cgro930^I>2vV+s;z`X zW|vfg6yCTv$il*MU}lqo?^(>GFT~Q~q#(KHtnZga+-8BI`jxKJ>gnSP{+THXGG*Jo zSFc{bqe5%ZXZScdF*z%@_=|@e0qKlpUD%{UUj#~#qW$mv?@p~78HWz&eLyOaOfBov z=Kh28`!c;r&pK^nNZUS0;JPX5Aba{{A;qhp!`;1ft>zJrFCTiF$>+%=eLtjPvw71e z3=9not9AC`Rf?3+jE+kHDbI_^EDD)aOh>Ll+RD_ZBDC^roNk5VQ-CYf@5<_Ri9gT` z^rFm#46?6ZmU&wQ(;gq}t4h9pt1~krDRJ#q3?vTYQO&1z_4jL8I-SmiYz`#n+#qQL;ZpetQzEGzbph^0vKwN#=)v$tQ?qbmnbm#WkHeZMT!>IISNqtTNn0~k)=rm zxE}bh3#3w*^vgm*HsCcNj=c_o?Y7a z#ao};%hZx6Ep3X@4C9M``r(7Dhty52&6_v-Wu@%)BTKtw1P}&FfxC|n;3_%}_t3CB zF$i1?Ycl9`5ww=Jr&x)d)Pmtz70+|-3`JGIYg7SID+>ivysT8}=KX$IDC>xUES*yI z$<#Hea)eQOtPJQ_U?uUY!jOmnWfVu*3&30B$z*QJl6qeRIAzl3f3;s0p_sV$3&2%8 zQs)@n!=uuMmjCt3f*c%dnL4e%_ZnpT!$b2yZAepT^rI8gP?|(@6Y%F+8Wf3Ha1Yr} z>F*phQvwY#`${GNo8po9Zw8$faO&SV4xG(Jz(l@n(!Aa*r+~9L2$)b*Tp_4fw)FWq zlSg?r>(u|H-e4q~RchrV@GJ$L(PThbpEe%>UibGjAL42r-LVpycI@{NaJ)`p2G{xD zpfuiSDi9HHrE;F<*ZwutCv}m)!Oq6v$o3WRA;s}?O%Zs~{~UXN2)J^2uk&jbPVxD0 zRm9QWRs`<%UWz2Fa@%$9)&@Wb1de-e1A=wt<(v)?MK zp8|uzc>sI-gtjN(J7m(}0%-qp=8jcd4x2EG@+|yO*zd7;H9Bm?$lA zA4t^-Wxoh;dR9k@BXFHTq!SH~Vqmhro%9t8*Q6TEJ$OF7qkC zB$uN=n(rlm$!5Ke_JTP&*f}9^XqqD9DZr0r1@LbMU9egQu$3EYr^v8HD&Up#Cw~N3 zqtywo-h@Wu;T#ekNyR6s!C*9y7BgUFY3YcR)s!q=Na^9`1~yif>3|?&k2oq3r9{~5KdpbZg>>%%rPP=S}Z9olS;+32T}^iU@!sCaY{=| zOQ=|;B-E*137R(a7Hgh;06YkR7fxk$xmHD7R&|bn#wYEa!qOQ6j*Cx(?fZ_v?n5Wx zc~CG#BhCV@&fs0M5|k=Y6x<3pgDp~2ovekhh)8(){51qTdjSsupTUiL4`J)R!{FDz z7rJ$9A?`a%1&%TvgfdQmd#6!u>JLrX=gb$I)qtfM>NoFl*~zfJ># zbpHT9`XTV|ru2t^t5+%~YU$MXuiSh9zx}xYfOQf13_-7Oeq=+yZ)aZi#l>&hao(yhWG6uXK972hR&%1)Ti?z;#ksIzzzWkx?*d z=0XSwdkcNK{y>`hX4+D2&w-<)U4>YBSDYwBlSN8_dAJoo?)c%OY#%b(Hg5>YS{;m? zIv-}uUjb#kilBb*6oDVyvIJUn9r`+1t98fgX9%2d>xV4Peu}j}1YDzXdC~Dmd)~JF zhv0GGOQ=<~0*o4z`Sz;#gar6&#YWJZ1T;;hfYkq%%VqE+@C7Qa^U%C;y$nH<(XD+8 zxcBHWY}B1 z{R%XxTk}2e16vl0z_ofEQe4dH{Uq?rK!3>6=Mb>(hbIv`93379UE26TgU_^@B0aN6 z_72`yy4MY2=|1|iTP{7^@MQogq3Vi>jMFNp=)ao8c?K)|+ zy5>tj*GW-Y%2dE8!yf^TiI0bqm#^~HN(K>^$2yo&Fe+u*$0Vd<& zB!dt_qYB()%*^%atU%oBi+1 zJo(R?_t@NV>1tLDiAl-Ca{B}V9*3wV1+Z$C2HW9-5R3mzUy7w|s#Pur+xNdGL;WR7 zK<9db2>j&UwUMm|aALqX<-n5*cuvrDGlw(?LV0)B zylMB~vu+zCCZ|yw8@Dnf#3#brr!Q%5=WJ+)fBf_rdJmll))r>8swwt93u=D zXgHT4fXWrH^XBfO=b%zCFk}3%?4o~kqbbIcd6c0Up|hq#g>q%!*q-&&4yPMY0q7iG zy?Hmhe4W3_RH>4VU_k8l&tGXi2n3ujn{6S$vv_qWg2vuF^MimtXPTfoi76?dBNBs6 z0b7+2kVn~4(8aSE6sEJYhb)o!?OHU-cg&;5&mdiue~X3@t=?n^aq-zT#A9@G3kIj7)g%^+3Y63-sfGIhKVq#VrKEyToWH8E zSRe!gJuFw1t>Q4YEvz8w34s&g7TL7(pt#KYM&L&fbXS~)fJu`83|jXXmT+qCx^ObT z3aZhH!U1=fnsYMMO}e6h1Z<>(^mM;3jlb2fAa}Yl|N1XSIbZ zHV0>pX2_h=%XpdpXp;q8p-?&y;33}tj^jB^B9VxblT(TBoIlzT$$@7Z1aPpW&I}GG z%fbK?qv!gK+xK$<##CaLc{x5P3UDzo2w0+CnD-%H3os;X;rQ8WFlmkt1;FL@l(ovWd%=bskY(`PS?TjG+5U~AE|LB4B$35$SuV$%LzsjNDS zmn*1^nwAeR;=7VpWo3PVAxsUv2fU=SBOPB)U%tvEjj?s_*an(3tP5#ra$0Z<=Y42s zIP@4a0a8+O$JIv1#*yzOuzBSoaCa+#HRkEa5Rp+~R)AUi_*pO(C?mgbU+AXn(bE^+ zxN-YIfq)A#PVj)%If1w9Gcv?)*O~|`bJJYIsI;>k*jQUb5OEm3goc5G-JeXZ4$<2> zd33j_kv>>jn$VulWgQVC#FX?fsy@sP|E-3#^={pNLJ7t4?xhPnX6($xH?H4$P&ZRU zWZ}8`Ju@`xK-_CkUnWa;Xy12K$nl-4BQ4ELvRMHaXD6s$wIZ3fSK-o)K;l+*{N@cO z6KRauZSo3k6i6x}u#%FKzYF@#!)L@2d`-+xH>g^%Y`*Wu&syq#?dJWuIdKr%`|6Ln zmUu#|oWMH|82kCiw&gKI2w}PnYDlzhTnkR0zXX0~u0YfJHNRPu8=pK%USXbk^de%R z;q*|ezrAe|CHAg^evnE$HP03esY#l%P4e=+dG+SKI@FqD*=)c?axKw2Ay23kxxi^6 zdFvCYY2W3K37-#c_9eiLDe!tVt3r+6DnUTtL)d=c1k4&gq|lp2kBDKouzJ%jct{Kn zDVe(xi3py)cm-JVLnsn{6ZFXoSK)HN9dIPxmS^+a0&dE@WjC({+^t1RXM6|nk8orZ zI9hC^C+ZOuMSzbZz?V_r2xM^Y&T#AQBiMiJG_i}zLz8+n3cME1aU=?#;pTCMN2N7Z zKXh|-g~mkanVS^ui@*E$1y*d>1!TlQug+}%>Evv{UdwJ>3Aj@WQ*)Dhq$8Bv_qD%7 z7i9u(NuJ;t;tJGDOiHouM27m|Ez6?K%}mTNhyReiU0~JbJuqY8DzGv$g>q%`8+BNA zYEYjpMK)59L!Ufv8N7P?5n42=LqTV?sq>fLx^nYwO{Iz^k@+FOMOmND1dctfu1AED zefz#+LXK`<9%W%}YCd{UPlzQ3!_I>z;E(aM!Dr4ys8y}fUtSn|^FD+=$SeMVP@hbt zrL)Ip6g?qrGU?&V{(&`7qGt~2mgGLK|E;`t4&Z0W+^L%)l@fI}I^@{Sl~KgTHJ?9i z6z&6reZ=h>K6yUr)lSf(LrcnM7qy`&lO-5TfLuk$Qy>&I< zE(M&~!#@nT$Yg&e@D@nEq4A!Ymgdl=$M8?+xTA4Df9gokk%(a@5o$|TZGnK>520Vr zc2J85JN*264NJ#8ei01251xc`R|2S0(V|gZm`AQ_pQ#zf&-T7~{jT1E+xH&9jlc(>BNl^&nK4#(0eu}E%78}1 z#L!Ku=)9mbFXLVU`qgO%?b|j2mlF0lOv^?7{(%qcpyTqRfD2p5<9+Xh!U9`}wJ+sl zP%ucv)Imo*CvZ~}Bk0?^6SQsH6dpW&0Z&Lzz6gG&4h@gwpwNqsiO;snt9X=ExRrEb zE0r%T_`Om&u(itVIE|dLz(3$F0?sxqTM#?v#?K1KpI)DSk?}C3nQUV=aHL^RWe#=9 zbPz$-nCR}t8Ty;L;gGu+XhbIaVNlTT44*vDKj6-zIyo#wq;>s&riY8NtnhXe%vy6d49{|Rj80MvVvf8joUN>&ueO$LFfdA2+&I3F(Cvc=+vB%Hs zUl)a|j0JK3S%z9+fCrDCdp+>MlPvczHFFO8|7`F6?V$4j$Dv*ud%Q*0p&!p4SYH@$ z$n5364EP`E>F+(otl^&tJZp~E#vcCx;JMnMadU3mdHD2)0RL>reS70S5)fMm@DCU|Q5f)|0RF2%v42;@U_PCmN4O#I5`_UDICj>Jdyk&~<30S3 z_H+*5DFp$?@F)zLDFARv<{S?AyL$nYbh(F@Fu~*QL7j_w=v{FhYWFj zUGYN!pN|nnT%|%KRH;>5u}J?-LUM{rQi{AuLQ<-J7zYZDL(wGA`Z}V5zu<7xaVc_0 zOp}ANz2yxNpSvYpAwSCF^U`peLTYjAL$;|1Eap{d_3}2CepYr;1^yjxd`JxYgIcNtfeGu^Ypd;i% zC=qHQkx8JdBOub7qby-$7*!bj$ zA3lefv};ghtC^wRtq)(qATl-)RT(eR@LOxHkK=Zf^O>n3q!iYmPBuix=5_0Kg zu_T%NuCtBFp@*-&47ucgcWtUv`c=ReoKz~+q&M}jcyFaA!EeSp+gYf&9QMSG2SMOy zVFYAuLqf6?TM?|M}{%9>yHzmrVnFIbowLtIia$cc^?iv$c&QJm7wb{EV{40gPH`*q=+ z;LriCwnpV0txWou>gxn+8g49900zXae(@=K)-nH=bNNCM)T!d`#piOC8X4-Rs)6(S zoyS2<7OmO3kI&z@xz@ZU${{^jk>`)``{_(7~Ugh911~%*)=!ENyU)w(UhC(fP3ONWksB=x9j9 zqLc8M6 zv%U3*4$UN{7yKV|urbpgPJU~S#(+K-_-cv1o^JB!ft|ZL+1s6e|LF_e{PpI;XHXEe zh4Y;+;D_t#NJiDER%ycHXF(N$UcNT9wXlh)QLXZGBIweh;}Xa@QurDg38^Xgu$(}l zQY$NaxKDcW{9U6@p)s{IYIqBUd_5}*^ZU_Jv1cQ~qd~5~cxpAVwM8_*ZSRrOP^PpS z@w$W{lc%SvRO)-EcU5XNz9-UML8AcE($dI#8Qn}88686&niL*Adli+cNRMp)yfrc$O9fLm1b;m%iN$+1+ahumv@KA0+t9pHBp1CN~u|17mwV$lm#^> zJ|U4~Y+_2iBXa+tyu3Ami}mx?(wZSh;?uB0Mfx$>CUO z6lxy1NiM?`DLb@oo^EPtMjegk!EX{d45M^&a|uJigi-bw{8o@vEk@f5)2mA!K7!FffxG7YPZef}CzO(NDY zF)%Pb{_0&wTxfW-o+@isS$=+;Ax?^%L%cQOSyd2;#DWv&{Vxf)+$0{KYhY|_?8I=G zM;Zm1cu-Hm;!^8ezHzImns{2cTZZUlsZc10eDm&OUDVZB{fH@K18LT79BgF1$MMK? zxgB`F5eB6bbqH#PpG@rYj~WH~#<{~S|CL|byFLE{`$YmyvnY*!3v^Jx$xQZ>A=a3J zZWNofWHo&J915<^PEe~_6`p_K{Y4ipU+Y68csd#OKU}~oV{4)=SX)^UvB6alA6)z; zG~5dJdi3h-=}QiopfNp-QMMMu0wZ&|+T5k9kG=iy$;!so4&2LEB8JP4m371f4|YU? zqb=@#<9hbzRVtJX8rr|dYmPZQQUv9osg$LOeG36!P`g(?#e&;HFSwL&Duh&-M_&J$|oN z4Nmy^(Mm@}Z67{-fEqPwLS$qFbnnn=OUKqt|FASSgZH04Q%B`jT4_8s)4;%G8QhmV zc>J8>7q8v&?BBmXY~A{Ebpc+#ehsDF%K$@qddAqneagAJ?MhCSf+8#eoJ%+m`SEKV z5T1dqn0iV^#G{(NXw8QG$Ip7sojVt1&6)*m+qQ*IpFUynkZ)cD%fs2(*}=(^C+W2s zHEs$l0UU5@ce8|~lna3mp3+UH60uk_q&F7Xln@g$IXR`u@{PL&*Qr;Z0uBxirXYT_ zJ%9e3Iw0G&Z-=j6LSWze#gl3_tAF9t0Y4~J(uvsUe8~1$e>G@59WhP7u>JZi5)uUWo>OuGgj=|cK|;MNli)hUbA#HQpg}nSHioHP-xnq z4(RIXl97@6OF3~KN?4^DcfP3UM3ZE0$u~1Ig9Qr~6#0Uw8EFC3$Io7cxWpvj<02kW zU+9iH*;;{#p)N5Bc*GwU{yNZKzJ^0=Y&kv-d(4j z9hx_CvbVV$6%$A2IT|YHp1ulxNv4wy=o=XPLb^zRQ3fh-w6(le(cSs!$`va-=FXW7 z2IQs&3>W}+?%bh6{aX#EfJ`QXqeqXzteG=lnXeBl-?V%7nO!R{TbLSxG;{MfIND^h zEGosXTe#;%M8?qhB~6t<=Qd4OJ$|`v>s+sS^v17Uy9OUW{$04 ztmSw9`p|)0Tdl|Wj6kz>Ga2gSasN8d9_}vLZ|eN+vF*X*7hRSw^KH_(Q%CUj_NEft z$jIosCMWXU9v&X_y^r@&*h>W3kSU8-xx3h1wJGalP0_wKAYB`-Qm*!L#^cL>6!r=x8-LwOq^80 z-tzIh@%^XF^xd|2>a^*wXyJmNx^UyhjbZ$RiQwzwU4PfnbE7?*)>#=wrV>i=Uk+Md zH+RfQa%w6J>*cxR{I$R)ix(|y(5q(;aCdhHw9-zWK225Gw;ImfxVSjjuwero=DYUn zg$Z6O=azACI4n7fI&!A% zz^=`wV&tLn7e^HG$~qZCl2iflDKZ)$mrjPClCC|gpqFQ(6=$yB@4I8iE?B!}6|`#A z>Zg9hvuzt#vCOCRv!J(}opW$xQP=J#wkNi2JDFr++nm_8J+ZBcZQB!T;-q7n9q0D< zUex{X*8Qq>o$5O1KHa^~Icu-|tmk(X?%m1Um#%n245L3W4nDK#iHJ5I#W9)P+sl-Z zoq_7YhQuI`Wa{Rb@I>~!Wau0(!^1n@r-xi7Uc$!2OumoqU$H%qJeiV^lO(Y}RxS4+ zQfMMtqZVi}spEL@?=ieW1{HWUk3=Nwj|l3arORtT*ua|`$I7$Ocw)uv?H)vV#2aEe6+7XM-(ndno}N+k@un4v?$Db2|WXdi|S?-81J2I*A|+*l){rNzH#1r(Evo!?6%p7W&Ql3JqcwSpx0Z@r zZwRhKB~RaV?b@H^2E+Vs`uFD8-1rmWx|kM?{V$8(Q+g)M+4!gRRb@}-D<#^oxk!A9 z!F7oZo8^IwXB&!ue#mQm+cH+6zS^=e#;qma+01VZB~iOVrVzQF;7QS;y&Q~iw$s1! zGANl?e;(}WkeN*`u=XOSQRR;^u1<9L3rBkSxKyoIoBy;tH-fY4;t0m(CKl^>N)A9e zx%6M@X@l_mQWdVhmGW?_y(@CZJT;=(sAYX&e_4^a{wf=NEAyzwT1W`Z)~=1CmT4;f zipX2m;D@wp5wmL<+5^+ky+mzZLT*_?zUTVSI?(F>+F}R~+M@KoTYW)kjeGfjnpSru z;gK!KT{&XIgZM`_R;=Ymcd(8Ic&3T|B})~dkUuhrh6Ol@yYFm1 zL)*H9ypN7yyq;rLe?P~X!E4OpC)I_V8=S@1Iq(P9)M&FF3<`YKdZc!JSN)5h#c23@ zzrGvpWCOkGxSn2{9kHv` zB0(B+9yGKU_z}$08RVnQ2Xs$_e6Y8j&(MYRkg-(0JrwxLiFL%PBXV43FAmF->*R#j zT#euP56R%BWQgZ{01UvUbud(0$Pwgp$Z($pi8;}6%%@OPMfkei3nNA~1qM{9b@bej zamDPT-(eB(o;VRzYHg-Z{MXxDdHN|Y)KOXW%QZAygWnhUiGgHq$m4c^0yeXz!&xEO z1c=RSz}btk%EE3Q)!-lgZO$M0>+^vUQBRf+dyR$H=M*}{u^x=S>OB>}(Yj8G^$Aby z@-lu;V!2S@p7_nQ{~aVBwGw2IgGy_&vTYIb(%9|^o4{Li&sv- zTjPQL)#HPH145&}tJ=+=Q90Y&ygT^~>2&4pTBCB%wvBDePz+}k8wo1>={p1b3AJKK z0jSdA7XXXl8z<~hG%QMmjY!ZFDK7c1g_%m@LLW^4v7811bM`iAqU}l-)f?IiK_a+ zkR^x)vb}_D_rW1nGal&6Aj7|}NTI(}*#VAJt{2+C`Mkc;*Q{#rzpwqDe(Kpn!vpHr z(eMQSvwQzn5AWP4_)i~xRt@}0{IAR4y@6;&ga6`=E)Dv48m&IE)Ltcij+83ov>H_?^{3;V zoY$z+sed8O;dBxZp|vo{QxSVxZZt+dG2-J}G!SD*JS5*gZyrRs_^zyO=t##PA$6x_ z8SLG5iRq98CNLZ8E*#u}@oO+gTCe;mbRz1Md^ES7WYzWIj6ii_Pm6 zGFI$WR%WYAWzbBBP}V2W3-o`Q5oVbG_J{N?Qr(fjcP zKQ zp}QJ{Os z;=)~CDd9g2Fbef2sa(rZ&bQ_1lFO*$^Fbs#cegaO-ByJf4J#^3A>s(ve|(t?emlKL zLWzVr+yj{Gy#o5k`mZs;$uKA)RWtfVO565E#`Yk|x~%lOm+Z=qH;pah)3Xs4r(qGk ze`83O^kwvkc)++W_`;^ zH`DQdesI(MVdC5;rt3QhYxG^mbqO)ry>`7FAJ6R~2gOmNsi83tLf5x|&FM4UZZ#Jw z3;B`MudBGEWISn9KC5pKFrxf3bOZ0OZbo42&=E3dwY+kzEqlK$!!Q=ZbU>-JR`A^T=ci}G>8ynd| z>6Gq~*e0Xi(#@+`L6nYHJk!DPoFj+8U55-Ac*b)`v-c1%>w7YRsb5|&0-7ViWwj}< zcsW|t^h^3vvl2-L3}3=}z=P{{opIs(hwIJlh`LMCpuHvj)upbv)rFKfY%) zm0O{BSR+fotu=_00EG&tw-W}kiH7%>-44V>C_9K{Pt5K0B(FW58($s{Tr(>uM6ZagA!6ius5OukmzZ$yW(qRujONTnS=y;oaZX?f~>I5V=$Euz$N zIz0ug=Gu9W1eiP^&`iXv96L+3f60`9M;x(n)-SNC9@W64$>R#PV>5-zQlZLLc_04X z>GFrk>2=MuhZQRX*^ELgVk?Bthj{On)?bkNT{(;VSP{iw7=Pa~cQ6%H!|-lb+Q5(K z?1&nNMjk?w&)DzD$tYE6E7vr`k0PJO=4evz}oRpVKXod;X9XBOI7)rfua_M zd*ih!znq2@k_r!HsYCxSfApK`9^ngW4_z*g*{9Az4K3)VSR`nWktO8)s-m(Iw9hCn z7t;ztSs*VLlYR_M!Bt{`8|6+cX|t?NdUT+E90YCM+kFm-fl%B@n*k4UvgD>ic2BJu z0mWtXBB~o6ylmZGs-{Jl1jrHG?nfpLWEV+e$fwDI|85iZ%j$-aaoC4sBqh5OS2x8t zaBonW3Rm|f!e51kd8G-ttpI!_DyeKv;sF;f%PFAlj^V_D;TOalQ{7&)(cE z!N9)YAuC%oC?Y*PdL$BUi_a*~x({W8AF*8J{}@bj>ews|csL96DbU*UqXmu1NcBth zia1|%N7zm!{2ruNz^~s^b&1Yf32%_%W3E&iLx*sjKU+*de)0FPJ8jou3Vf?tybcDt zVO^V`D*el20pDAlzz3F5M^mqr)pp22HIM~AHH^E|m;LYByy;9K^0IUk-g~-dUMEW7#Y1%h&aeua@OnfLwd5A|fbd zdFJiz2)Aq?3)1@Ie*DEYQf>Zfq7cZyWlIobaNy|VZa=cmuGzS-YeQfOEjw_J14yq= zAY`Jvs8P7mADhwb{=MI04|B2Ah{*Tr%2dd8kD>buHFyvHqMETlGu<5|#qhS!pw?o4qCe)dTi){|4JF1xFVrXi5I_3v_!)#k{g8JX8)UpZ?`yQ9`X2Clo}y zIfPNfD=3iNZCGTaW$TecYQ~4;>}PG_5I-w#hj^H?Jt`px!S4OKqdbZUek}|wW=g)= z;0{+3-#F1~;=s>)03hWz-eifS7W)j`#?5kpZF}u~K^;`9QA+z8VcMEy6<)c-7ss_s zqFEf0`g3$)`W#4#N=%GW4G;DuopO={5On&)1Igx4vbd|Em=vCxUmew43AW_Irw{-OjE5sL$*>@x=OFhXM|kIX^^&4ow^2?;GFy!ENc--92#8K?x!qI%6E(a0C2=Dc6S6Pbez#d@;( z(B>L$I2nSExL51_gkv%V@HH4Rv#%)>;&Pw>lPd$Yeq*FJ3&wcBsGh5fRm>T^PB32~ zY8~>3He^k|>$NHrh-rBws~@Q~!#J6O#yFQf<1XFCi7Om`^27ecADIVFuf2`U=tsPY zj}+?r_g@oiiCtb;qI`M~nRKii?;3KVHVZs_tXT#ryziGW$BrVNBI&=zgP1=20}1|H zQGOq2XDuhtjQGoe+KY`bRfzpn%XUE^)0;pSEACZsMC^kJ>X}HIIs{3&+^dZX1odp!Ab2;y-Q~3&7KDtZaY~FwuDpp$p?D8cU4fYa`P6Ec-S;`B$h|AUUw%J@QV<0mT z6(zs*oQ!F)o9`+ zxMFP4VK?pfLOc~td+s3v3+StgF1iwD-j>hr4IR7{v;op4=gFBP@!Jxz!aIgS&JOX@oq6e?< z4?5d6drIbC62$6Su80`#uMimd2~s~>W#M#N1AtG}xh<6V*$IE`HasYRn?D0mYg!Hk zAOw3lCR`~ko%at*J(ftmqwmZh1BJT3csfk`8gljZbJ`!RHAtZ)t!NJSU=f{!$o`78 z`=1lJd>lb|O1KK74|N=<3_8&&Tct;vCGe{V{OT0qOpfewnVQn@kBYJF@%^Z!I|y3+ z9VHffCPSA@n}Es6%I;}mX5}15zpt;xLf5GsHg#yy?*k#`<26B{F5dxk z0J@VtHeL?@@0DM;0DK>&vM4!P1tu8wAE-V#JvQb>fpvq8YCoND06#aIhpA`d%}WQb zJN^b(B*bE#dC<_vVhR9(i#d6p28-qu3;$_!fP(0(lHWLdbWLAf4C=|pFKjtU&P989 zC1-QXW}qPt=Vu{hQx+3taImONx@5t>YnkD<<;MFggSxDRVra_nuhj+s z%tF**i_O-8ZEs9gN*zFC16h!imJLfG4*+Fe+We61xS0U3;zL(n|4WO&!77UhBjgLe zm6nmRdA(zv&jQZFFRKncOLno|bo{Fo-vOU`CHW+MD_(}F^$ zPHWCrf*TsZ%+%H&@evx(SRLR0iCS({8;JIi67d(e$rUQeSTN{xfCg3{uMFx|pm7!3 zluC=8mw4`(dJF=1PLmy(Aj9%f5E4Ji03f97w69K27#zvk-=#)@!|GQ+W@=c4>uYdo zR!RxopMC~)FZ|9z2oRYnH$vgZ=9tG^tq1TLZ057Z`KtET+K94Rr)EvN@~(C47qZ6{ zE5XCVV}Vy6k>kmM84iaDyzNABFoM zRJWZW3+6)O=&J-AEab6S!h*mCJN=Gt39#a%5%dLJ+=ofZcl;>%(mwGS=Aw{??%323 zV5fKq{JRm2YFi{}8o*w15>`6oxLg22p8WZ-Gd~cduq>s=cCX&}=A4P>j=F=MDCKmt z5c|s{F3TBbCLBHPNo zBoi9>A_7m_>U`rVyzjqF6Bo5(+%?M1Ecv|@IV`_DrNZew`sa{zhWhlHtn^OPxsQU2D;P&eA$wj-Xg6sF&UfWG@Z>v1ejCd z13xU^-Q@b!4+AF{F5kGrmLt!#j1_{(u^Vj;Me(i#+S}B;mJ%AV^!U|1tx`2Tsq>Q+ zu&_F884bD}8l@~`;RM|7YgZn7E7j{j9Tya`AwIh#sd1vC93Zc@w4v@MX% z{=9Bfqixo%{KPM4uxe5RwGZN}<*3NtSNnSh&)aJ?_a`GZK_WB--8ihwq)bf88FaD` znvy>5mY~Ra#x9%PPeP6{062fY*R5;O;SEv~Oci(Zc1yHW4(3P?75egW&rKqFrvc6~H&2R>6iTrS6r#(~^4l6+f{TG8gToDO$eij*qc@lm72 zHz9O?Z`czG!5}ORwP5f!f{BHnqcGyHlonLX$|EMeDH@muIGCCtw=ok#$7k6Ux;Smr zG&w?DEn9(W?Fm?rn^O%_QkeC{$HhYE_iUOKRZI*w6LeV@>C@Ojj`Wf#YeYDzK zsX~1}!9o19lHKHRXzzNbA%&BTHr*%b_PI8{V}DdsG05pzj!c4Ax9e{px5AL7^!MmB zdqN058qIa6BPMO6_&jK_Nh&u|-k1(%*tQLXXlyhG(@Oluc$kZqo*Ron+&x z8y*5{d#qo7u>Rd>Q5Eq}C0>o#wJF$++7lu!0=nN=hA|e|Nm(-m5TVywZ4qlTMK9;Y z9YE?rX!NAyfvLZ+?=$*fx@C)0Kdx)@>dnvnJCPEl+*cbvzEM!g z8h<{pJ`@j)%?|2ayB)N|DN*V4FL0ZFkV*a4GRHOFTUmru7kcN-7>jp zE*76V$CI-)0xrf`LdGEeBNQTG7**`*Z!RHUJNCKy5$^@X$>dtPdkIIVOIQ#N+Yuso zX!aPA@4}bMr=?ppMWFW5-Nq%G`v3X#|6g&!^%u^yd=wZa3?u<14XY@on4Uxss+#i) zxnES=>R)Nifx{nOn3Gu;8(DuH6slEnpU`n?g?V@5lI{SAsYuofi!zuE$554fi;K8& zaMMDZfu7Q)Q3gyQ{$jo=6ZFAnO)4d7PPlPBiG|7tdv5Y3yp^coW?X2zJy|&^dKaG8 zh$Rzgq#w;;v-@hQ6>7|4y`d${i-tICcu1P1 z^jHbEY&kr6J>yWd-A3{S=mZ)QT^6U;k` z8wzlnNqHDF`&9`kda4u=d0bWTTLNDCG6%iBZY2Cza5v*HT^x zyIQU6S-!B9EGKB@G(^!72)Hu|P*LGkq_u$)xg_BfAd9zKQC&|*Q@^f75{{#>nZ1zU z+;fs0t$~nL#-3lbASq*l`~42XOvQFRoLcEaaxa#0bOSa>S_`{6Z*J`X1Vr&VIX z&iIp!m!BxJrAobV7AZl!20ldjF4{~MN6ta)YUHAmF^Aqi;w<6ob6`-2p=xr3Z4jYy za+1!LJf2gcKDn<&XYK8brjyoCaWSD@y}e!ERPNnBjIz=_I&M}oWI^Pn+8Xl2?zbXM z>KlWmkKeLzZ+^Z^h`ZoT;^bZq8dDshuJuw1QbeY9c3_vf^Cskv>mK+Vi^Ic^WZO_b ztSeK9E&|?2j}!v=I4cJ;O*cfClEwBl1R16uT>T`FhG!y7<>ItacL2@4O)hE3+YBD*Qybvo;`eAYO-SIuWgUvV9Q;ceOQmm@ zL^=Twjr&AT^FOWVbxa|6yV<4F2X#a>fTcJ#Pr3y`8K_37G8uzzu}kl5GG=wqJ#f%A z{9>HEhsX_cI@aYja7W^1TSK;&QBiQHSXk!7`8g(;NjczrCdvv6+2)-*zIWhK!|0Ye zeb8Du8KRwf&=anh0-kukupZ8kU_<$a`3^%=#{CbRdA&jBWwwNvKB-#qLiUV@iFDV@ zq3}Zm{#bkNyt|nDHWwxscsA|$aKKyss0;N9aux`S&le66(4SGSiXGdQ;d>AaUI4Kpvd?)CVQk`m8>Q zO)X|Dw>yMgFaF_mdRR*iF+mQ`f+(=ZOyQGYz(V`nGi4hrMdEmlTjKrWAFj3nAYCia zSY%pSvmS;My}35lw49C64kmu`oO&L+CU39h0*fzG?9C&$BcQ0xac+kd!-7E@!f?oR z;Ckw3xmGVnMpo9)gd2aM#WB|`_w&@LbnU(U`Ha{wjdVXO1-(X1mMoDR$&m8)g52D4 zTtSNLG5U2SF`AGMBSVa=T*hIMf+n5uLqT3LQx5+{!2485uLYAq)zyiS!*}fb;)P@> zfN;0lQ$}_)M!4p1&1y4D>8v5LMw&*usy}qQP=M% zGHn`lI1$#AUOSkLV!U%=WI?_&WbUlwLUyB3-#;^Vuu1H7`UmMb!g2@6n(0`296iop zL2Yf>ZR07xJZh~}Dg}c$7=}!Yl*SC6g`KtDmHu>28H&z91B%R~eujD_L;HfpXki~e zwfdDwvc{m_nWt%(Y@WeKmp*{A%DMhCP7+SUMM1AlYskd7KR~P@~R4vneO|vhb6ZMvkBIdP6Y&x{sm>Ip?pGQtDs;PcL@cS>v%n3?pk> zSV{t0TKUj0c)eUg(&sJ76QN)5@AFN98j=ufoJI?)K_e`HH&9;o;v7o!z+tv9+3LLw zAB+Yqnv}feGJm=y6oR6(cyPIA%*ys84fEdUpr6R`Z18ap>)P&{nGA0TaNX{P;{;QU z;W&=7=_Fz19N#pwATJI_PA_){kQ-5d-VbM~)unSA4IJHD$B|mBw|A@G@K3P+iJq{l zhl(5MO{k7On!Lu#D^f-Ecyg?@)~=;N$s{e3frl>w@}-Ov2Un_qUvB&Rdvth23^Z4H zvPwmMmoN57@2(z|I4Pn2;ByEH01tk$%&jm!{9+i&p-L7_hURQa_fNp7Rw?RZ7TmF^Hs`j7Tv*!-tEe2#=#iKF}ktBp%gUU8P^wGABRPZZNw%uWKPj2NHyG zY3GlB*+5{&=Y?}{V=Eof!ipc?pRdf7S_!g2J+STdVAnF_-2&v#)Ge&r&Y%X`6o(Gx zA^K+)5ak%BPV{Dn%0zu#5g)Ge8tCg*$9y!c7I5h}Em0I}iOH9>Tdoa?rN_WVgaK~@ zBVu!{Z!Gn+8{dxPiIMWA&lg|vnkX@BE*ifGGk8|;r0)5Ji^tcA})X~{&mf1L5r6{^Z$1u>_4IKSGwo* zF&K64jygCeXmvZwD9d)yS0; z#0hY-vEUuI=Z!6b*XY8>(3&Gc{_e-(!4e_vRcq^!lPuGbTU$ZhHPZcAZQH&KDKf+=@MmG;>65f{%YU?Iny5$w+LH z(w`N9MLVMh&rDzB19i9%ce9-b4vZ#kKswb87jBwWF;NeN&`;+%Gn-Z?&5AWAao;v- zruKPZN9N%c3p#X{HpI!0Q8SyiwHvaXgK zwg8iWLMF_Y*3C&LC5M}oN72gn@3V*PU)3W%B_x!u(Dx_D1fyYW!Pzx1yp~MisUp^D|P81%^&+aFp0rg zz%pLezbde4ynm2B_~+oslmT_d3JVLhl;z}NzMde1QSi;~H&{@Wip$HD9JC`5Yk<#f zAaRjy$6`!MLQ9>YRg z+Pyd()tUFr)Nju?cTmo?p5_3kd>o-7f{{B#=5Nbib_J75cdit|oKb;p(>^4Pf7~iH zgOF?R7PF^hpl>}m%;u; z59!blT)))4i%xt7`CHojq!nMGW2H_5gR9*N8L<&=Vka0FSVCSNGNUe*py_O=l}mwU z+suygj9~hdrB)eU4Mboiz{TuemnL;|7%$EWuCX+>AoYNfX?&jqrL`QVH-xdwT9l}KO=Q=IXSuBVPe zOK~7{XUUI#Y@>zu7Lce1T+yI6jFr8|cqv%g$lCmNi#V5O1x7)?9ooB-PmPD`TmZKA z#jcFNTVv=N4+H7;>{7D*B0pa3XVAjGbuAV4Pil1DJGLXXdwdw2<8Jd}$xId3@>{QN zfRzs%M$peeYUw(anW9{^zp!-fc=V3>+JDETcPK8Zfx3ejknAb~(gpe{%xOQN z50%qn;&M1`ZsCM4O`l#AIns(1TN$^yhFhbF02T6FEkW0RkX(dt1Ou`m;v@?zSFm?q zYKYmn#}9E^^wbGnd?uv)wKk^o1E&71KPbeRtGdH-(_f5)B|oX&2r~%uu!8HGSxA2j zpTYQ=3%S~F;}xsmPU*IgV>>q2gV>ip47IIkxOcR8T1_$4o@nkN+&f_jE~+bTWaTDs z{U^xo_mo^ur;QU@4h}ew9Vz#9qi;LxEJzX0wlS)!YmDYXy>N71ruWU9p;DY1L&WE38GxMs;6vaBbJZ{@x z3;TxR-lq?MywF7S{{HI+j421I!b*ltSyzyHLLV#Xq=D>5#J@;mSBK~48*dOn( zrW%SYb3uQk7SfiU`Bf3t90Ah3>gUgM+%Tm(D0u%!&xsdFR$YwL*h$7$QN&MHjWv!=*XIX?cKLq{7V(nOWLFv1`Yamahm z;d!a?Mx2Gw5|xN5tc5j?BM!}^HJ<-1U+?}V>YRg?E5svyyY7-^R}v};RIsZ^)zlKB zrcT+!U@Lo}QPt2tFe4#y;s}Oyq~#UFCk6k+xl4ua!J=yh1pHw#Hh2tO91Q%H$MHuP zD#q?CLzF~OF~aWcokr`R54D|@)%=KQ8ze{w2qS`QM`!>d{3%R|6#n>JOrPS-t*T2s z_#}Q0oiGU*$A}ImC}>z+X-an}uz#c@L5I7~eRvp=wcK*~zI5!R3y&78zrh*dUgLsL zDJr-=Fs2Cdi1;`j)=X0p4gDh}$q@Q6#{5IYgbnd(n{ZQ4<{)W?M;-(|+`W8@hZ-p_ zE$6+#C|H{EafX?VtaYAQ@Ol={7eEPDG#o5Y8{hn{EN4p~m(@}5tp)O*&e>80=TugL za8OrEED}QoA3D{nA(#ho-&7j59$WXwaK%j*&Nnw}b@G`oQzm>cax9SPEyx+gpD_?U z0-Fv>{!WWyZWqniN+WH#xf0xKFp0tKhLQnflj$jAKS+vQ7mMz_KT)F8<>p{*Xu(PLm-tTB*i>U?zLWg`1e)>ugK^ z4|pLN!GnCdEPoyXytsB)b98hJycP2qvb}!1A*G0cpUJz-7EOPuvAnvu_}7(5&UEvM z;dyi5)yqUxXNg%PaKAWA0^?byUQLkxb1VUHWbw!a-*m4D-X9exj>lsm_VskuFg@38 zYG}Do4hAC0JVpdG`*t+4)MryO7<56LEtMl~@wbjs58nV;ZO=ghLUG};qZSRV@WUKW zOvk-7#Snk@eI@S>zDtyb>WSoT#!OWj{dRW*y}zhH+dSd7CVVG61L1awik&|kuI%{B zbx3iL<-N5`guGrQ?&4|;1VU~>>tHX_3RFo@hs%9(PxMg1V+3C78YYKRqcQEdzc^WW*AAuA>kMEBP3Zd) zIML((<~RIm^|#)ZoNBBt%oiyHM8;hRhFYrf>=#~}JL7YHCClOQ2%9;5AB^rOl8fj| z`N5x_{&=_Ezzhm_^#fJ0%oG%&X-=m3wOXuDicx7}eIJD9=iWySbCQp1MfHA|h)Q^J zoJPIWUB8BX+7+DI&T}IuQI1UQn_rZ%O<7qP51L-LZ0y>2QZ(BEP(iZ8FRc3V*5Ga5 zK>Y}Xe$20~mz4^30t8%KpXfZ8=iIldzI2p_dv@J_n0OxBMRKw&Mm$p-99hmX|6u=c zCjx&&*Vr{drzDS-hvaLIOgY=nU>JK{H41auA>83KJm9XgA|7t(S2P5t#yYtbv-IIayP7To=Wbxz z-%fb-klJO5NxY4qAi`bQK79?J-{jxAN|g&)sb}q$oZi^!tosS^lmmTul>*3Jtjg;Y)iH#=K}MC(|A|ZwjT2+Zq!O*$7WMqaK`0nz$4iAm z7UbJRL9=tP*Qe_4%iei1KAn7b7u#vC_P3anz~~6gw8HmjPn)R?Wm-y47TNoQh&)(S z?!x+@$q`L~WG68(QR32>gVL$D5!dBG_X5TrQ@r~+j2R;C@~aE#$YcL+p1x2Z!gkq~ zO^crd^v-wWq0`^Z?n1_)-~K}MM+EjaYQ@0#(;&ZMtocN($Ew&0IxM-q9LCYoGeY0bWQEve%L#T3ZPJ_ z|65Q2=JM7a4D()9tA4(9087~tC4Q-Jq_6K{ zSI74Sr|`LtFZ`PTsu~jN?e3G3f!L)(x{g+p?1w>SQg+=>gU7!X>RRCqlwYH0BvS`l zY?3@Bx4$y5LcdYYu)ZY-l-tnt-kDGBmx+)1y{x!D-E7+U97$jO`GFjzAxwU+S)kFd z1WH3$e^1#wJRc*Gv-X!Q)F7fJi7R5BI{wW3M^K0F`tjXTXOYU|<$PS9;L~SZKY_Ac?g3Ze`=m? zn-)5@N**eYwdisE)}i~2vM512S?)v&PjI>3M@m;FmgTp@kNX|vCd?S7+Hw8SSsnN` zW)N489m8_X4fe$bu@hanc1O(@S_-YO;)UUaQBR;1GcPgXK&zM3l{Ri%f4$8fJaw{b zXqq1-NRjAAw8Z1dAKe-GeM=MgFtRi8Zj#FL$FBH)BLv)y!k%6ZM()*_hQ3K%-JXxg zAa|ZpL!)kN)>kXG$ZE=s9EcoJChQ||)Zb7XPLQpiTN^{CCh40$72}_WafkiM66bIR zwrkDyr*fz|BDh~C*!HOFwp#OnDwiZx{L^Q1h--g_A!Kc^wW?XB8TF4 z?ixf7LW%mX#&XN$P=SfStWMN4# zp+J+=P0H~1R5V#xitoXBage>CKl^)&EJSJ0!6T+G@fR6K4vZ-%iswQVw2{Pct32DW z^ADJm8=P)#?=@-k7jV&4lA=P4C0)=9jl;-;#z}jW+ev{fUfWKcmT^ef_t9p~*qd}5 zK7%Z%CNZ#R1~?Y-U>4%XX0yjJbESwuqtiJz7R)f;w-1;wA|8v-U}p__L*Ow5M99#B z(czv6pya}S!S7@(E@IbNCGfZIWp9@FyOr`alw9X*qu7Dat_UmOf8UpB6K)46^T0qe z@*~bAh3fIfuGj{*a#xMx*mRs1ux>g}p>LYVUvod#U5TN=e(_NIx9j>QcL{VlL$13M zBXgOZn^AdKeH#t$7^pOtf6o%LJ_KJ0^-IYB@;$lD&P^iI!k>6oJW~Q>n$9Q(xY_3%L z!{H79apeI%%M`Nvm<iTJrI0f7t%UJs5I)T-Y&laG_I=uxww6)Z)(P5VcaD zyIZ^1#iKK)j#zr!NDR;bR1P=&qI(Yf-GTgDQ7Vw@@-;X!7m0&(%vh|eOLk=dRcv#z zOEZ1}5qDn_iAJK^1Ij~6K|ZW)I7+L92FP^?qiE2d0Ozv1Tl2=^CTjY+_7+ddVi}CB zC+LR04m{2Ev%THxnd}sGl>^7Y#R={@&tG%$AiN1tUc@q~C1hbzN580^-hF(FpX(fB zfkldkCZy&@J(Sv3zwmSjlM%JiCVLD~|E^)X2`9U9@eQOQb!={etWZNPn=uUG)CG#U z+LBE>-|s#8oE0C~j{F8nqM3)@Wi>!jEH5jqFTo`xsaS%mPgTSt(r8d?RH~)$ zOv&0}lLPqE&H$jo@O2l=iPRwSvDU@HkCQdo&O>7CbH^xZCZ^AT3w`iGG z_L~?#egu*X01b*?z})J_kL=c@P#%+u!rZmx=*Gi1t6bJ$OKBUWpUqs0Oy*<@n9kDvFkb^KSh( z?Qbju#m-QOHELLVEmnv%ok-#2)XcEDdMV^3l*Ff+HK#$WAc%rE#!h$Px_{_mu>+lV);DoKa<&= zmQ7CPI-`^x5)eVUDGYCGiqT~=t0oWbUu;?&eu#f*iHHQFPyv!Mw%VAWT)92Sd)x*l zXRRx5yZfBvadKzdcI1)9el&TiYhF?#f4%{X3KIgwSG(LD{DiFDYR|4*{1e@52z**LJpOeT z6ZUXHd2X~n(J|NQv<18a94MFgTAgebQgVDXV229(Q*D^5cLR0Z6wDb7AXXHwf|Eud zwtdi|nm_e=k?F`zjADkQJ5bK|dkm{w*gQ88c^X}&VZe@S0|s+u3_FpD^n}3ku4;eS zrKl`rYZG6~pXI!-{z3a!tAR#l`16nek-8iA3)<*TsUr1e4*-D^GQUc^I0|b!?od24 zo>TI#GfcInY-W6@zO3GTR}D7c^}E0227;}vZKUugG>XJ)sS=`<0=QCv3TEN0eU0^D zq1DjqT#+h152|w-2YS;VK5BP&rQ!nN3tmS^bXE3&ydsg`14H-+#QFLkKMIuslXKCh z42W0`fS^qAEK2Zis3aPM!F+AyTnrTMW82%Gx^g;vNqL&XLVaMbE$Cp-A!wVqpjnbcf25>L05^I?6A-YbqW=7 zB#D~R8EF&e-!~L+DEk=F(-`c9PTME)lKxcl->pVZPb`@Ui0ah%P?wprn8dZ1$%_g- zjlj+;Tz*IesO%N_uBj;XNl+#fk&&lXKCggNv3WUn$iZ@52_wQ}h6bzOm+ktb{$QR+ zPgK^>I3Auy({KPV&b4=~Fr%BNddJ67O&TA)n}JMAk+mAFaUroL01y1G?>QpW+WNW4 zty|Cty0t=iSHwLmY;<^8pQ}W#uGcj03a*oF#6AtwG`z74mt)51+pl>M+`cUhzU+3x`|C${gsejvX zDx4WN+<5Y@pBbvTw#XsTmj{48qv7H;aPsv((tam^hSb!@7C9LxYJUF0wDHt) z;LgewVWC2-QO+f|->L0&EChcldbhx)(O@JP%LPzd2`)9OE*%CyqX-*7WJTHCmif@) zir$~ViLcg-`u*?M>Gfv4y}aiO9dvk1CcLiZH1=6GMR75#JOpDtaCD74Y+362&l8fO z+xvZE=b}F*CZXrWpb)X(@E+hKO$*MLl9Ke>MwdF0qr%OID|^?kkSu+1D!KaFf|<;C zVw1Ao_DX#Be~|Xh!IAWF++duIH+HfyHnzF3y|HZ@8*gmewvCN7v2EMQF(*O>FN6ZJ`C*^@#mvv>bvv24hw#+(IVPISN=i4j+Au+6P5k}d$EEI zp;Zk;5)XL| zh0M26L^bpd^Q)Aq{zdCiQ|CH^TDDq8?-OP)^0_48VXHrCX=pv-<#Fwu9~0!|8tAqO zE1ElPyE~E+E$FrTmK`Q+Z)ErwSnk>NymE?Ao%+n6QA*F()uw+U|JEZ6b|i7n=CLTE z8rWbT_ROGNc?j!iKUeA|EMMR9MYE+{x;&U~d~EPi)cz&f#hF3dt#{BZwx#_)U)EVX z?OjxHe73(3uXW3Hq#XJJf)UZ=Ha)+msBFJ$k3Hw~#N~89=x)6)gj5=ostdm=59wE4 zZ{lTqtzZx2@}=5pclJeiUQ<}_zKvyjvfV_ETHrAGpqW@Ti`1e11`uOS;rvXRoSJ^# zLMg6fZ`9lJ9=&GWy@^rt3`niof@(af4JbkC4LjZUM{jX?L(BxjJZlO}M-K&Y$*xX! z-L1mq20y2s?G}p!{tK{Io}bTuwnyJt+6-edAE&n1q~pz$w6sQe=b-!ZI$2|Yz z;6W_^tf@`u)i+Rno&Cdu{)eaz^7pBEg z5vi2Y`nd2+`MPygBOln!pwsq4r}zG*QQ!v)t+-?YeH3Q^A|nd+dHFT{fwxRU5VZ1e zhN=$|l0UrIEsT#10k1Raq#1Gqj9G7NesxKYyIYUDh*5-MRhG%228}*Ea&Xow`N=$X zjd1sxS_mREOI6u_`*2D*`M;4u>>oiWHXCuT_}<_k5(D;wuuDr!g$^n$PClKrcik&1 zuCr6GqqV%&x4z>DHZd+#sH1XRZlK)$9cx?4-u7m;WEYKLO`_M;dD%QW^FBWE{#x<< z_HeNPBk8GQ4vXm`oTy4n7*|zQ)m1`fvO;TXIF&(vL%8N*)LG55-KjT4tNJ)BD7tbO z#N;I@n8svEq|@e>NL}33?Ri(YWg;GOj3VlP`BZ(gWt%Tso#JpjNwgBna9S$ft-jd{ zz2(izX1$Hw6=XHA;24xYgwotUHVceK7^B>}ZPeIlg=6g(s|Ip-Tz6-t9NcdGT(W;R z=y?Y8{4e83%7}O5>y}YZYuYva(SMs*!~f%r=aI1g^Q{z+{_Vego;yV+pRw+{hkX8* z$MkjW|8da&^I4Go_tV?Pcm2&x9UQk`EcaaUmiW4qm*((k_LuUo`B-J&tML4X@`rkCZK+S@JLo_L?@A?w|>@@&Pk z<_Gg2)b84P)}7sIZ^cS8rX&Wv-yXos(PyH&cRCRIu!tWpmiBp!=RuST=GL>t z^0^E_vKxx{bNYGuu=`v%+sdA$6~*C`;deXuzO{Eg^hP~v>P~I7_bzr+r*oLvkvIC* zyYPxinxG|A*J(z>%}B(fNK9E`Sa+PThu z#>QCcX}7#3ucra+*ODX?U&FVydCR!lmq)K|)U;gJd>)=1qSaWs1{T{jOC#R?8pU*r zT`K1G|;sdR=U$IImWgJ3OxGE02UjI&AYj91>BEyn6+l?z`Cq zrbThm?YnV^!(y{?5!7wRM+4mVE`DobGD4Mf(A;Yt z7Ax{%fykCSKI_0+rls-_`Vxe~K;U7elqa)jQ8V29$&aFn4W)@de8y*#70EB544WmUbFq8q1NcqYTTow@1_1& z0#1H$0>mmfosB$t2$2@RvKmPbxXV?os#I%=>P0KX6QoULR^lrfzFc<9nTOzE%SJsf zDIcxRTCTXWylz%B(cBzW?lvP3#`#=;~<7=xz{=2x89a3nRa44c{ANVoSjq=T@5ep z^d)?Jt;etaNG`Wlwu+s2Jc=fv;6BjNx_}wLS87beHErs9?X8}2Qbq@R1$6`l?GOD1 zGnu3Oee=a{I-%CxWHa?Xv$RMfp?U%Y@7F=dXR^*dT97XEN|t{ZXU8$6Vbeh|6Xc9a zO#uJRP_)>Y<@F#u*0R#IExqE+uKPH80V=V-=hWbq2^Bh-^%DVy*<4)H}-f1GdS&q>G;A?R7VyO7uS&^qsBY4iL%AJWETy^oLf^axdmPQw~3wKi>DF@6JZ~2ekCa;iUeIMi8#SjF-fC4?Iam2i#%jy%* z7?7ODo;-wat;j|pYaNhVTWyAe)g%46E)1fdYpbn>wN@1j~Ui0N$-|m`u*U*n^zYm#>%nx_QxMDf2C*uS__~oNQBsXn8ylG%r1?Kn-=)X%UJ&T%+m4JVD zn1`_Rq6bc(Ped4RLq*<~dw2i%b|O|}K9X3}{UD;o4L(7{m}$RNo5Lp&TbV8o90n~j_3w~!~_xuvnQ?(T0 zoNCt}R7XYpyfNC-){7F-4`tGE8?8foxS^A+WWDZlGgY0*85m;S zBC^sL?!US0_jXaNI8g;gJBz|D89+b_lS)#px>jd-n%;Itv+U0@-|`~N1|*qQC;2+r zBe%|JN}M~9j2j%JdUh0aj=Rh+EM@o>EyL3U%A3yr{EcB&sHiB7j}I@b!gq7#e-TRi zy-vFPgBo6$T8$x9*hZF)56&MV1RfixA%rfMot6PUW{Il^5bOm2PK*b|Yw}cS*ZsRH z<6twGnh9q72MA5_Eb_rTzT?4oBj*P1exaR!@^vL8WuagZsigGq#yG$H^8=c_Aj^+F zl+r1Jw<=!InYk=sYWI|(GN+inUOA?-!welx*KEJl{D!H}V36QI6MO?AMu#fMP5gN8 zdk}=2x-V~2jKcYnX4ljrGS7VbO_`)a8x&C-(Win)n#1o89)f`R5i2Y)Lebv{T03&r zrN&J?)C-d(8xqT3hJLQs|~Dq?QRMgZ$#9Ne9U+uFfxHeJ83u~#Fo3zBub z0m5Y@#ecv&z%Y**oG8>BW5+8UxPT{6P`i#em!z8ll0exY7_XN!kv59G2-c7MnnudfhA-I4g9kGWzGyMDe zjN=k=b_Y~7-f~byGOf=Y9+V6V>MOx^*8U#>Og~HeCBepdMD$_j3*V2rIVEPe$?|&* zk}^pW;V3~imSz~mb?&}ZndM!j7X*@ygWez3Q9h0dfn&!G8@Ub7|ERcpcX|Aeh11Bj z=U%_19LWRG;n0NyxjK1Eem9rA0|Yesuk~(@Hp7nApG7H<&Q#xbLhNu(-rwK*KX1MP z^3wdusiqM!(qJ{HV1=6mhyH@@tARg-rBUBfUdlXL%XAHoQ8wO3@}M1!ix(%HvygI z?qXO7c5m2n^AtBFsa?c))0cuy5ssGt=@ZV+W*F4-eRBq~lkcpn^Q4VY$_-DuA&|?! zWI|;1aec^??Z5HuC{|9TaVprF_KYZ@1d?R4i(kA3s!_q^uh!=RqT-?I417cPBxYpI zyZUfkqaHp-LSBl^CF{2%32mcVh1%mbTb|*rbt~( zj!g8#`LrV>Yb85|=`Z#^N;c!t8U4d$n=M-(3?LtN9oF*gLKyZ_HBe*!)ZOf3?oXmv zueCtv?kf$3A||?uGDRiFC7Yn%8w7~%Ca2M8Sm{MhOB&y9c&~Gu*+nPUo6aB5=d|cLUu@*DJ}Iau*5lPbg!>iX;o)~(T+ko=KF`MbJsaDpZ4MI>{j{OC#hIj( z0moXc@}EYnsyg29(OmVlHJ>M9%B|lfs&w9mN4oo`k;|Sg;Rj}{KWD&gMEXj(aix!f8^jgsrTISo5+xyTV-mAn4D+I%f$Lpddd#+|1WVX}ILu;Ahr|J~09Xy{RO! z-HXa7kH-fc#I$}lq@$EnTv8IeZ6+tV-SIO*YHbciYT8k7L%Oj4fp?+^cJSrx!wr~* z2KJT#oAhisO~CB$vsijO#{SmH797AeNkOm{tfrQ3k3?+lM{q#p_qx@;wZsYV@LX)d z(#?3pZe{T*KUigcX7w^Cmx0+^TPH$cv2B6NSr7*?7az{Cm=s2?FCnl3p;*Zbw&2F;; z4o5Iibo-i}UBr<})y4#gijuNF_^(Qy-xMvvEXsD1-w3$mh-Qn%dQkOvnzPVUgEX0> zWDIN#Z)w@diqGa7GHMQ;dKH&Whl`Y?VS!-Xyde`#-{vNvUUx*`OPXX{D!mISEiK*# z!DXIjH(nqvx$?hRw9y4EbxSBIgZ_`5tGz5xH23F;ym95+DlTsC-1|k}d zJ@Dnlqpq>h`#NK(5J|nTV7=F0Fp3~1!X6M%(;W1(s!YA-A7s#M!1VYw{N(2BQiG60 zS42p-2J_DOp=+L^Uu|Y$sVvR&a>wG$$t;=2>s>L}jc82;Mt0i!^R*}_xZ7a7>9m5M zq}1#~u~FH$9aSz@-Ml@bD!~3J2eTu~lI+cmVAl9w75YRx^hjO1gk5&NUw==C3(7(zCk9^hHPx&d$pRum|AB`GTv*0J~# z8J^p-XL2T+HZ!?Yg7rpm;UTm=g9D|$YzJDp@5fzL=0i8cBkof zmzYZE;vzoFm*dunKPH83T!sy+;(% zHhiWk4w-D%*Z`+4fi&K^g(7^dET-coorTrfg(w0kJbqVJiQDh)$WpR$jeG$47Csw6 zN7x9gNven3>B;dQe>qB~tIzB+>O8dX(_Wx(*sT`K{qr!2OVlr~cc)(mlWj3r+GRHq_emD*oSDE5L39aAJ5JNOQ2g!myx9?U;Y1G!qP*6gFE1|-gt1?$ zO8=g5=Hi8BYX(|@jiY{g1i-f}^1qw8+B&s8U`eQ#^?+~d*95IlDz+Bw0n3e>b7<3K zl@|Sbl>XrX`U$t|9TdRCOeB#~E?6<)m(I1b>ZoigEl8qrLAWy#vzZsrNo%##!&uK)=Y1D z4LmxN)Vc14D>*M;`ZsyplT_@wn|eMxl*Ky8eSPKKd$+HZlvtnf`(iG;Z7Iy)J4ulw`{}cHqjccPX7K>O*R5L z>Z-xR>14m z671DElR6-}z4tw}^51*vAhDNxD*<4r*ZNld)k~dg%7~H;MQnmAr4}?;RrrWzw&ggjPrItfWND!dBtIfK#Jh98~}-928@=qn_gjH31*BsG0?-#to=m5T(v zfBkxW+YqLe1u7)fQW?Khg*ZIzxqe%Hc2C*k)a?O^{lbV#tg1EIH+_%BU9zRIb8tR`nHL5b&t>Ie(4O!!GY&W*T<%*6g)QwL5JYDTtOjRW1I5c zs+d?#WVYEOC{wB?g~Fn}nGOlo!(*@GL?jkO2YGtPvf4-nX(yIJ&reER;ksjhqk$aV zc%Ds27;HxiY8x>`&vV?=a=_{Jk@eZ* zh1QUymbz2j*w8WD865-EO2B$x0F}AiQFrXc4$onqfw+FSY($qXVmKR(=tU)_edW%n z{gWBaANQ>TiiiTEz$Z{^;|~S_Tt9q4*f%#ziI_Jnjn}sb(?}KiPUO%L4P@V0*v}hd z`=~iEFQDxB@|TtF;dyH{5R!KB3spK##`CC8KXBCF1}B=*Vy*{eqk|acZ!BY%de7EO z$M~{7e+OoU>j}b81>0-Y-DAy@Rk*juQ}f+p&XQ)2-}Nws(W_UzPxtR0J)3pf7F*2! z51NAO+Rlwo(w3ed8tlG#eB?Exw<>st6q(^;kgIyb8Mw8m;yAD<=R#r4Y$}S$Ev!Z zR+J)tHdlg+2{^y}uUz%F<%+a&2lL!1N(jWRqFC!~|+G9F&!3AZLitzF}At|i#{tjo` zV)OQBQM-tbm_8^j4`NxG`unHt>WimeV1*M4_GcY$Cz^P4YpZ`A|7*3>+NQx~nqBRF zM*)ZN=kYPnumf1i{34uEJqnj{R$A~ZZcH4clhN5vK>6#U>T)qoSKTwRCRjRb+_!tv zA&DM$x<-)saa4S_{pPl7b8uG$G%lI?Co~+@cYNwvWg0}uN^nc-Woo1>9eY`MG;{>! zSGpRlTnq%%|H|yy^d~LIxm~{*b8hbo^rC|8q%cE>Xd}0;HN-fj@anD~IWl$L(*{NE zx6o{F-yiO?%i4rJTo#yXa#;UMdX1DSrHq<5{ymQO)tS(VcW=!f?`|GY8JbE8fGE~x``8f$|pApJl1H-{@}a& zvbT4~xww1|C+s!WDsI{Xrl`yr?rRT-n)!F@Av!cCM2qe`@a2>9`<^?6r_+jA)a$Kp z8+Nk1%X(|}vPoZ{)&!B!7GRC=Qo%}}Iz}0U*3f}Oz{*L>p~u_c@23$D)2nxYZ_5vYmB zpN3=_7XFvF^SlK)#bY0ekR*^byAO7dBVO&DJhivCcPH{Kesq@Jz-}e1*93VtxBLDP zZ5D@%ht(5h%h0Fu45~AefeTwpk|v)@?*zx?Kj<{Qh`>$sHR(eqM)%gO6zVzs$xyS%4liU; zZ*wGE0nfjylUAXR=i+8rYaP#$ULyizeEb_(sh;hf&m^uB0TAb~+2$jJ7pX@GH?4%c z#=8VMt$2)_8dH6<^L!4MwfA=p*JKu!bsx84yaXm#n>qx?Mjn#U*}!8Pcxud!WSPqg zRo@WYmW10OZ_Oh9Oc93Mpa2SjnRgmn+qVWfge5le-~x*1M@jyx(X!vk{T2@iQpFT3 zjSUfb-qDF=BDZSgAmQSoa{0eM`80Fs+7&;BI)zUN@#QPT8wqklWPZq%&YP8#ShC^b z$q`sxBQ`7JhUWSc7q;W*6DuGMUk~K0Xh73naGtxcqoXCRceL|ph$I0qrBmau=@0B> zlnJHSrFuWM@Vt51Nsxgbn!M|5KP!(-v*i0b-_tM;;X7S4AH4LFWh4#c4Fr z=Wx^0)1%q!hvaxFas;hb8yJ}(`D<48g{xl96^xo2Bomy;GDeZUO5jn}DplizRYQ}G ztWF>)H^t`gWQKl7sGzz1mfucBMvkG+E6W_U(#pr_)s-rVz{Ago)?l-=#`mwej3~;n zSypWRn4GS%_OFw_r=x$JpJ-0gDcO{irsa_}mH+-4XvjiKtxh=Pq5;}u$`Q|Ng_g** zZ8S1rEbg5TA1tt`fjUof6T7tz_Yc#_6UWLJF16d1Yt)&=?U}49Ic&bvGMy!j_RxJt z3&2V!57uT!UGPFr%D7J&)sI@uUS-FJlh8i=*z?11do@4 zR|=5yzg&f~Op?ZhZ^fxNXfFa2Iq%SkJ9Mz7r5|(R#92$_J2S^&_`~_$)G;mB0?I>V znZ-~Lpj5eAm>Bo%h1>uB3R0tbt8c5F*iEZiJ?F;3-SU%NNhXT2@or~$h(|k_<#KC~ z>3F}C!J@zjU6NH`Icidt#TnJj?Til3qI}jyIbXLy%z%2UibcB%mv9O|+0?C-rAFUl z)_1N-jr%&Q-T3q5I`iamcY3)}Wvboew$H^jCB=4OS7T8l`!u)+V;!zBb@F_pBfeh! zaePgyA9D=x&77CPOhwwNLqb-Blv`g4Vb7K+u6b(5TD3(vZqz}y@uYI4&?B*06U*00 zSt?^-dDJhBR-&u?A3gxL0beDo2e) z05MtegwNf($1Oz!2FDL30g0yeR-F}{k^r!MDJ!*?`)@ zpy&g!gd_9B0HhYEP2b-9Q6JuQM2LW&gymnu=0MRHS<+oq>GcgplW7tlu$u9eN0*LV zzs$y#>myU29aR)9F)pvm^;${GVTgqs5ZCYh*82q;gptj@XBi~{i)k3u7 z_u=2(@8o0L;Nb>WNZlF;$%CW#X3j_du%(zjmY=2%-$36SAnANM2Dvkv@FG^iPY%G1G!TP@fXIc1o@qgROUok|p??YTf_5|z9RCUE zQf-lLPb}<~u5L{SE|O0L>+Q;oK0)*^a}GxE zEZj86?5@f}DxyS`E5$uLB03CAkocwAUc*ACm2&!~QxiacGkbpQR%iN5^1ICnJuBcPvsy;*`P)+N>ql?Q0$87Qruyjcc z!D9!M8^Z{J#vu}!O6YXetqDEG%&&1YYeXm7o*vDScGDsY1B2@rMLMR=yNznz=N&#; zS|N%@m0H6(?@ga?bV;9U7h=}IVdL`%9JbrAWU!wQLy<5djWErI*3o3&o$eq&7%Vjo zG}~Y+V;vX3sk=+PL=Q42r)D5^n(*;_DfDo{yzgcVVP|$98_@GC$<^dZv(f(bopMr- zbOFKafMun{qaKXQy~*Z*KdZw5Q8hF1ruitRq>?pxQVS1_+#{69E2{t(Eh zYL+~S=LWZZ(JqGd>KppoEAL5A*GrsXu9hb$mi)SX?nz~PP+MJtr@DLbXJq(V-nV33 zZIYFe^S{P-yFmCuvTqg_K`%0k9o4*hw#oF;qvpQSZbsDB*{#_P$^?f#O;3-@E*!w8 zcP-f;d-HuGMO&^sibl)$kKqTwKnQP169O=&(_9@XQ z_?s5GFrC*bKF^e82q|e0y+%G}+kS*`<05QLk*p13p;ng=*Eu=GvTz= zCqw%Jfr^D*n7g+3Ueu7>{q_R1!hy;WeA!oQ|iIxO%_gLvyjHn5OmZzpE z`;;Bryz)^|F(LB45(5L4g|o=1Z&fI(p?En-Yh)bbM4#@7V|>}Br_KiXa9{qMv<5|q z9*NUaBlDjc5M8=6`G7_hYm3FU8b!WG-~I6^?>ft4@Rb&j)+>+3S@bX@!;hkeZAm%} z-B7fUc;XgUFNdg5^6xr`=`SK6DqgEcXe-q zdTkPnQJn!tD2+TZQH5o*Cy}`ttE2uJFCMD$QWF8$Ws6d37EVurfYxBvL`hu5pUEdZ z1!%_Yl`!3w@Ct*%!|>D8-L3l(VyKHARKJr%de;R~tike2&E9y91cmIwX`6eGOR!qOqU$TPe&C|m0aJDg$T zK2zYSIB9z8xcw_7#q3z$3gQr?bGv;S#Tw0~W_MR$o#2{BW|ohYf2qn+6#h+KD_6t* zM$7;WQ)Mgp%|N+`hF|6WKXx9zG4y>9=0xKS5{$Ys9!Jcrch~&HqjEwv# zi}S@B9Litw9RmXj;pmH`>vUzdkjY>tZ$}WDK}h>Tw&gsWKP5~s*5$`R5aipbRC)Ol zBo9A7B!=9)bVf}OQ5**k5V<%f?U=7qmMnu44Y z9~aDB_RwdH?Okhq5w2J~^<`~jo1tqSzvsBvC}S#*;k!cuC!TQUDfbgt25va z+^d7V0Sj-qkr{{%8Mb`kg@sKW#U=VKRvV%F2zgwL)7M|+13!CuFD)(uOHhJ*6+oae!N&GhC#vs)620NNIag- zMh7x#HBloH3lJnEBsjno4bo;AYCqIV#Nfg4bR(9+A|iJT7cx7)hw{EuH~}T z(|5w}?`=}CAq0T{K$v2Y1Ih1t8(cQqH4G6E5rd1B`hX`qx65&c4VR}2O<~ZF31P7J z@9%)|^OY}?--hI8Y_zpP0gcz&ux=QgewQ|T73=+Y_4}5cvhCYauX=Q?PI-j+YJ+Ki zf4^|rZg}{&-DuEV8Hh?IF7$eLXb9rV>YR_|S9<+>cM{EuC{G!;COsS;E|O`d{9j_A zl9uW4nrc(eDK$n68e%bBZq?i5p6zsl)5(h+5U?2#@i}Y)j7MVN0{(iqUvCkTl9A<0 zC({C2?e$lBe0ik@^G$8!FKL|GD@$&GHLdWB5fkrsf z+skX<7QJ+5BP82R+`PF0o(BEAL5=We zuYm7c-*7a3zH+g2V48lL19*$=It-P3R$ur}BCoHxRiR8*?;LRo>kHME48-WA2H`}o zbQgK2CKbkt@2ZMt7PS$t?V8!PGkQZUcwfgyc$Mn4fBslZ*MOR+gJ4lY9ruUf_T(-+ zF4vk3r->1SGvlRQt=BF7%F=TCe*&GkT#h0R!%`p|vK*r_fYkb=-?f&iFJ{Y@gY_p= z%Min!E<=&HCWNG*s7%+IEDh|KIgM$-CK(n(1q7i(YbJ01|x>+uX)8aKPacwN2J_ay4#SLbG<_cGm% ztXHAZwN8zX*yzF;zr0?L?$Y3pU*_Vhm=?xk0km(8-KVq3F~_I*SF_(Ei^Zew;h&+8 z4I+jW4~unB0Z=xhUJv3SLT3%FHmSuX=t1y=uQ{qwDRR3>0r^QqQDUY=EFmtgBSO3I zS+ns*6SVfa;d`^tseU+zFsR@2@aW)NvTVNrWtbn^zq~G^4VXDcj&LpwPy2_({xg*T zGdHP%EMk^c82yZzgBddd>nXP+iAJ&!71S-&0-NzSN5HbG?s%it*SE2^6hW$ux3Zy` zyHb7c-38`H^&uV6Loru-pJ%2fcHFEPPUB@xpEoKn(v+KKZPNgzObZc`!t{0AJmn!V zR7r>`*RQylyL(rUETeGd9wQYzwjkJ!{-Dn$o_6X_ylF0lzsFOa>m*z5re1NWDk-j{ ziYhbFi!3_qGEOKmJFY7o&xU|su7@FYf+Dx<27}p_vi7J=v!t@l3x|HGhLa=3HnZ zEA>#%TR5tJq-lp$r5;3+;5k|}nrHH-Q z^rTXj%&hLfvn zX!xi_#sa=d<-(;LI4g~Wi0&$+_tmo|Ro+Zu#}YXhvgxkUJ18C*I;41YDfCLJ4%-a+ot7Eh4$v4h2P4xTzG+h+(goC5MO+R65B1ME>$P507&d>nb2!~& zLT8@3!LIMl+|%H&jX{c6H>asQTtU(#J3FhW5_|F{jmsK!v*%b*uF#9US!&GkA;g*! z)S*XQuHWhUgY(Z{1xXeu9O(f^k>U)lMB(dbQldXclhdTa&Q*WoM{T$hCMM4TLq)%x zA`~sI!tgQ&a5C`(yNH)T9`=&$8!3!a6<<&})!JBp4uNEGxVpqha8kK&_4JPJuZb8A zWMO=YC{s$~9rs{1WG%p4Qokw+X+FW*QjmD6?=cK@Mwy)?GV>JE3 z%6TC(=PZ-T8n@qV9{yLgSb2P&w-yxF7^KU1XMvxGUAh|&>tmDbWg8$XCk0GejhZph z&CT68BRegj;CjWp2trisNtB*k5(cuPK-NjRVs&wdxqlQlLk367o&`TAuXYP8#II2- zP~P*ypjF}K8G)O3B(#l*>Xy$PZ249os9%-&U;*0wWAoSi^$h;N3+_Iu^xoB8f?cI* zg+qyk10OrqqOg+B)~wAQJ$lplI^$Z^{AY;16YY$nU0WdGT7pQqC&%=Lpn zB%Zoag>KqsKFNoZa?V0-<~hwN5=x?DY|@bc&@LF8qnf~_lu~%0gtP8N*So?-((BLQ zxta`Qd{-nN$OzBlC^YgOMi7!>^n}Q`@5f*Krk@!lLKL#R zVg#5)(imV$iYd2%nBE%{5uMoZfy>cX5RuUnVH`^9fB@Y49Xtkl)z5i$D@U? zVO@U@GnY-#1O!u@T zqG+uWop1UWJyh&-P#W{k!|t($l8(`$gq&{$ES7yTYjozEd&R+%{xlTOdnI=m?$}c= zUOtA!YIj@Qh2$CKo=&(b5~ZwQ<#4j2Ldn$-7pk=VN>Vcm0n-NG;j6iMc~TN&Or7P- zRLn8n`#nBstRZ!=AY;1OM2}@8WkY47vBp#Akhj(7VTHxu;UB+qb%D>;-~JbdlGW}) zIFQo?^|08lSIsb%vFb}rQ4R9um;7+IF2o4rA9l*RuT0~*d2$H?Ax3b`zX&fDuXR@H z<)OjmSu@ARqHR%AV@_Y{9X?UnGxFkmYiAL|-FirZz*ApKS5nx0Ki8AL*_cToZO?{pHcU)=;(ZED@?0BXi zPj;-J&PdM<{9xmj>4F9npqI{+i{o37=b~ts55-X)FEZ?|Hs0SMHlP1G1Nno21n$nW zqodS3J#1eY*9zo<8}4L6^D^)OxwFAuXHE<6!O#==tmbrncUy9%DUyDBCu3`6OV5`S z7EI$eq+UR*q3&w+FbKHuF6|j4Vc&$ofEQz2xQwJrcs5%Ed_(oLW@)<7&YdnYblZyL zhlvhims$GbUO%vNYQR`W&i9rPtlD;e!^{ROXCzqbK(tb&XYA^IMQP5veP$1Vzkc=Q zSM!(&SI#tc%qy;X;EmRcjF=$A^VKK24ypD=9?YQk&NpaR&J&ji!O%y4s{ipGtarL6 zwsRH4gu~;}Z%}8n-j7zD9^GL)I0G29M1fk$|xYW%D$g!&t%J4_ij=61H zBNaxV=e!|KR!)B=w-hsEsgIM3_AO#S$&a*vZ*b}8DwRA|QD#iTaDhZHMGcprTzHa| zmYVRM8=3{z$-4N#L4un^3_g8$V-EiMRRf(>z6eoX)^7k9aK;+Mn!66r_0*FtE;OqzC=V42?eEXc_@$j zA!yO1{Znt!`7#fvc*)UUI|K*UXfQwDtMG$Qm>&;ouD5EPhCby3xFdT|&HcO0+VfSP z+)$q+^hnPGv^v}{0M&*#5GEpXrxwP*!|e7%t>XZEtMjceO=%Gd-o{ueGyJ(OH*Rp; z($LO=?$%vfg>tQ^aKXm+?O8sD^gLQ@(0IcSvNLrNQ!BS4+wmZMn?s49*OmQ<;g8$W zIBZ;fd7XBn65r1C&{gT0_$12;i}yBF`b*lhv6;opQtXcj2s*+*xt2hYS?Ck69?4Yb z{ccS8@#m;)nNHo^Ch^9Im}jShEyxd1`g=M?C?1`0*^FflI;q>Js$9bo3gvfGzQx|5 zF~8}gw3Jh>bb}WXoDf3kP{`k6?Cf$&+b#Vc_m2daqG=rE8j*k)m_mff<#!fT*<31fx z#37pZE@@7|!`z}46rTktBqxx;Z5}P*Xxl-!s~p`y<*y4}D~1)A$T!TkK8W?WTOFsy zR%(h*3|X=Ebl7TeB0(h`wj%fR{R*8q<+93rjs^Qi8m6;|kTKANP=I5Obj-?g6*tnv zSMf_75DH*}ujjerfbs;Q{0}W)XV=++&|a_yFPYC0kO_8IuK1Sm;o*51QtLT^zirXy z^JA0vQpjS)+R@1=m{p|NGZuUS-0!nW6#`4h0-F3mnK2NoPH#~gWcX4YG7CtkXs#7$e^_keVRYsI z%(GHLX`>2zHOAitzQhEo=~nCj115KYavh7tyB7WJ=P#k6A(Fb1E@SMC%%ocg`QIB} zcHU;|XbqO&d^?5mAb~62X@l7D@gLmjHgH5E7Smb38?75X7d1aVw{Yqlp_!YzuX^yb z@M|^LRS~}u)QIpv&IdO)gceSb`2kgxu@Ews=AeafsbA#iE|4A~^SvK3T7BJSBK}T@ zb=;zD1P$q3eLC!WcRU|egzzw0q1sLBL{E2sb}r8bTvdi7KliBf7LMUc_Wa}=Ls97N zFh7&uJRL@)qIDDGfE`_$l|UVoQPt5&LPbU91>%YM5;yNhfA&0+xT^+G5JXS2G~%5j zQ*J=jlX2o7D-g3^2pN#;7Dr-QxTV#r& zWY%L-onpOmhY&Dpgm6oAVPUP=ZjmEqhF$lkjQr1Nc04l|H4c|LT$kt3#I1ofJfV3G zRsCGwh~a?^ITRw&o1OT}hq6OFy*@1tbA*EW*}W6}ip!&3J~V}6a-so0Iz39c6~l%O zV;mB}@5`9~w_5PBX6k>zFL?f3zLj4q?nCebCQh-N0hq{cHt>i0QPy8Y+x&0Q)hblC z*G9mTWaU;?(~VLDjuVGy_txq-In>$et8dFFi2!ZK{XL~^zKSWxlXxx!13?mWeG}13 z#`E*-eJ)c5lA;j*lCAlmx9R%ZDF;&|UAr!i3oXdp6e^(*+6EI6Z$9kat#b%uUPm+u zqM)>;4W5PMnS6~-ISDO`z7FE2?`_U7<2sE>mIudaQ!tG>FrH-YKR;hfIg=%6itVqPa7)r2{N8vgH3OZP+Zx3Z+sE5uHC|mEZHoucs22DbA!nC z7S-AB<~P92uQKHJmx400m6HDls^{fHWYpxw(}8H>6FA_^55X5#9sH1$9{L?eF4YivrXJf9 z4rWnVLJFRAicU5$Iq=fqkar-S)L|v&a*LDGi}w%CAk`@^HR_y0Z8MQ{GIQz21JQ zsp&w;*B-pwj8e=*%4uw!;>I(*E7wpprF{ExRen9juYHV6Q+@@iYS{h`^L;;A3QX`a zHdtb*`qK=*aq$~;_|IXJlMWv_FjReuom5HEbVt~jxvIsKdc)+IThP5`Bb0P1h&r^8 zqe2z6Q;~ZFdL1!m7IBB+8(iYyUaM~UqZ!>+hoCkpAsRQ|28Cqjq{BVIg-sW_*c`1j z!DLBOygn8`CXllE7OH%s4yuuS1##32t1&))^QOzbe71X0C}q=A!SKpwbG2Q8_19`5 zs+Qg~KFxr-kPz{NAteP|z1814Qu9ylogADDJB~Bz2)G(D$)~>w)nFJl|#^8`1=D4S$VNPj5ysq z$vfcGUIYm?lJ1tasLc+@?FLa_eX0I$wV67ogYi;71zbJqqqz^PxB;nqUH)U6AgB$5ZJGN8fye-9MN5vySrVmwhlJ=Tsz9;W!P3`e#Ip zPEk3ss$t^ouP%L-o=#e{`+RbWazVK*wh>J1a=&piVf}-IV`x*IjhXd}den{aJ|mSj zq~-F=SK-65-CYhG0hlPJMt*STB&|i3*PeoLri%>7esy`n;QNB914HojHuTbmQnS<1 zl$8<51e(I1-E8{0s8y~c8@^1>Zve4xvLr+634lUETX)5ozf;puE`jfYonLDSUTeL_ zHafvc6C}OUVt!)LWY^~f>Iy+^1gC-CO^hT{k%bS{FN)?Tt5pJ5y~{*bwl$?j%Uc%P z^I=TmN<21dkiDxHyg=d+{3$zGG;7DVZuk6DU(QR3{+qZJ7Pe?Pt`RMA%jGZwAx9a; z^S+=jpAY-bMx?9zI=q*nOI#A4*!IMmtm$mkY2!v6(ZX4ANmH6ho~MPo*PsE1jf(>?F+|cODvmej}G|BB`kpZC7q~(opCm8$EQP z{D?teYF36po2OFsMtdwsT}WKIZU+{BzQ?>F%5EijGFXRi?NZWGDK{UT;TZRCh&JSH zn>q7CRIu#y`O>ZfQ)wPAmn=1u>whOP5=Ome7UZpLP$ z-w(bkkoBiUx%x_;^zo{SFn9x7jqWcHB}<4#;U_#MGTMeClqT-6O68j#xkD)E@ZZ`` z(wHoZrqT5GlKbvIinp3|%n+L$I$JVdbMm%N2vLf$G`84Wt>%(vdxNz3p8TKS!l|PE zjLK-j)+VSC%IIcgH!ju5#1Ijc0JQOQRp_69UvPNDp#1;nBir@+*a$c4?ESE`JaDW> zJZ(P9FWRI_Sm-yne{ko?R7mBp2PitwD*17&M2--JLHG;$?2dd)({Y{5mz=uBO{!a) zecu&eUjF&Gko7`pOX}oeR(Y?`)LDX9Xb^k)=X^F{2*~h$VQ+6QCBLD>&#Nf|85-H~ zVwNT1u~l-Kk1wbKgtJNA!KSpx9~ClJer+J^EEk|zeukqpF?5uuN>qEnZcVhCD%QRnbbOq<0=^;naRxULQyReZA zz(R@_#q*$Pl-bZ+j73@m586QmF)RB3NXww9K`&@ZN=6rkOqzACY}y=%UwRrut+MB` zJFJ~w!2C1J=`efOn8tNk>gM>|r+zo-xJO3T^W$`wl;Etwn}cqJ4z!k> z>!&>3@sOl8`b?-rO4p)RUR(bYxy`HXcNhlak+ye{otrhSV?TPn9jOj_(J*4nPi_L0 z6G92)cR4lx+cVXp@zXSJEYMozLL6pOR8UEuUUSY|y~{dp7_qfXXu*}&eseMXu3WIi z{sG@yJ{~uYCmj42jxB|NFp2L2wh2os#nS_xm&JlZ-PQ?JF8BOHg*g|jM)g_&Z;tCR z&}UF%Z`kig6}Mdm2m~e?%j=WvES_|m5jwp6LkIVf2+u7fH${!ggx75p~ z`zp;<`nWn^1x%30cudV>hz(Jt5^Z0!aebBRpqUuOm>2|tZLZc$l%QF z!h>rhKIh0_O#Gd*(hjAi_e@nxsNyDuG8jo)Ho^CT^no1x$L8q_oj6=&q%MyaW7*PbV&Yq^m;s{yfkif zx{r&|STHNV^^lY-a}44D``hUFsyc1eLdFAoyplrLa3!aC^wx{HtHeP`9Y|=egdqY><9iy=ty(t^$A=a z>~!i?sj%&sR_D#`1A~yprM`SA_Ool&>To@uCw_LdqigXlNElcf3wgCOuXU2o*{A`_m{@{lfYw~*%h}Y zLI0gK6sIlua^^8Ld2Z^f#VxcDo(Zrq2HNlxv@HI`2Vn@cZae_hziE?~1hwkScD(Hwa4N2b9?KdxnnnU3u?zd9bg*7@BS+jAN z29UC-_*k6EOCu^SM=wjqjC((sp-!#brWy6lHleyolx+oz!w7EH(77H@pIlf7Zs@C5 zbmy|VlRTy#^c9m-g!I3i6ofZUb+$0ZhltzFV5X;KDn7Z=7%Pqv3xeqriZZiB~+ zuC@*@yK4Ro+lN?o?d{Xv=iq};;LOy{1c-Hq zkd%#wK>eTG85-%M<34|S2md4GK=rE=>AbR?a;`}d!oWZapOWeJ0pHge1uWmb)N$mZ zq2Ey})-)^^PB$KxD5r7_sZGU^(%$l)h!I-OdV7TDYMHZWTlRzPv95oBcB&7 zl^S&8p=mH}|FbRRx=O#W%=GAiX!e%h=P|x5iraU6>Uy<>_4zndTr=*AdAhpkfe>nQ z(1e9Skb`5j8LRL037YcXP}hzu5PB!B8xyzH5f^S}5vofBH_LKi5uc@+vhv-bIb7^l zq}ThRc*ah8bpau-2kh3?Rz1MKmHg?!P~Ek*-`*>kEthUpWe!U8 zl4D*BT-T~$^dJE3v-AB9z7gRcJ-v|yP)r(c^?sh47uox(Tzz8<6#R=-CRN}d_1a-yl)up-4 zZgNH{((X_v+CrbiUW6=oX6PV z8XQ~WVW0$oQZU{Mv5}aB>bu%qz*glWG^^)lGzI&m)5Z%I@zgC3vE(TO-Y(jq z>agmW`qGLXC;b`b`+h^+f?9)Q4z`-3bUXUV=3vS-ezDkYl|AgJZjWtGzVAERdf6I4 z$I+2BRzJuwJ(9w&>c3O zMX>mb+%RHchQLti6w%bWANg#Rn6{SUuh>se_|f;Q=LaFgI&k%v`ZK=()f<03?4rfq zF9y@Ao<7p2A#N7#{b9U>rP~Oe)bAM2%t6~^WPq)+N(43!&FRzZo{@wt62`B%MC{~K z7IH}ZSxS2&uGMqac$aJfjs`s=hGnF@B8^a+dcvKw2ZjXgO1E7XWsaK%o)>;H5D5rmqlX{+yk#R;!F1TmE-ZrjG^Crw;~7cDVYQyTe1UAMk(t*FK}^R@f-d3D~>p!KP z=z1FYCLKW`h$Y$i$Vcb2o540MAD9UBb3|bq16{4sAyoESQ>bRnDconVcd#P9a2eLW z*|oWBp_8TRPY_^II4~lv|9Xyql83Du6~>PJ*SFs5*Kf$m=10UL0?k`@Q>g)JNBpd9 zRZc8^!QcHZ@aTDaFv7d$G1}cNC!{ZOEidd@uhcr|K2re@gB=H_`Oenru9f+jS-MbY z`Gxx>8cPJypzvRRiZ9tMM3{`Q)7#!VqsvJm#`uG|^t#>1ZCpRZe}?FcNK|}r>s{+d zg9!0aG^>Y_=N|r*gn_~K=c&LcL*e%Q_y9@ER~$cHa-B3zT|#|7!B;m+J&_wjCw$q~ zAPE`q>R#w>2kp_GRvT`+h;Nz>8q*?rXj{d-??P+RwDvC>&n=;lOxXbkz34Ngi&C*Z z9bGnc=i92NrCQBm_W?euL46_;vm>?yeY4F1YRnf-PP?M>%Y|6_7pNuXmh+=}JAd2! z+`xCeeA|mKkVexiXIf(5)ZNj)U!Pk8tQvw9RuZ|IeH`>ki3Qk2i;l^3cqGtrVaApm z%=$Jt*ZI@a;M*7dtt}q*g$9SPSEpC?FxVENQ#FoxBAX5d-i20J_q!KL#$WMK@iS*n zKy5-ee;9Z*GlM()PtmO(oaNN({whTJh%G3b&Ji}LeQQu3fG&~ zR#sNEc2ihiLK4&Rtaj`F;RL-4Pq)1#Io_M2QU|tMwBB2; z3k5*}WS)>xolN#TL}D9SqL?YXPCu1_pdnsRKjch*iZ6oT8*UM3+U=r$@Gue4kTMjb;VYW72lB#g)D*AEm610`Sj}uF- z?Ul{%7BzFKdU|)3S!;H@gh@=Svu)9x(NL=exyGC?H=7Oc(9`GXXkn^hU@%a-MurSK zsTRuM6T<`(lhU2aBfO|ZerDdA5rd^3^mkiYq13DgZ($g%zl7v}a017CFShcj9ciDZ zNX2U7Ngkh{L2T>L-(9t=3tU|9{-q;>%o^?zlHPjt%JuLEx`ja(%)Fk-_+(^gUQ$$M z&{0Uswst#N#kD^-jUSyr<2!%`L>!CNPT5tWl747?fkt0ScH9X;ac2x9vY$cN9#S=LK-JWxzgPCd}1GZv8G$nRQ22tTEh0?v_>73i^ zZ7#nPY--5_*)B4Lh1vxlzp#fwh{6aMF>~KgCRU7AbK+SWQN8J#+!@xyMt4;fIb%T( zG%TSX)C?ja@@)`~+ScDWQTHIMSD>B|c*N3jvF>ssL)ZEG37yNWK6f+3&m{{EcOwNJ zCZ+aiCnbwq-!gT8d4JcqCh_ML{dw4uOrT{`Ad0n*0f(4I7wVe;cc|e*wi!>_pHvv{ z&f`vKm<~mREF`Hf5Tm6ZBL25*0)JAo3N=tBi_`S#K!HPni%g>*pSm8^vR{=86?yBK zW{@c9lehNrf*<#M%ka-&b_ZialGp1T_vXzW_^|(2+pF+Fk`-SM=Yd7(KyeB!7DBS-stFaiy@r?~IA<2nnO2v}j8?Z1m0hEJWg_ zS6oZt8u+g18}VkRk@9lhDnx(24cZwoX!L4CBb}&Wgk9+Kr#_(~ftr5!xO>`dk1Bew zmo$QBAPlXD=$7k_P`#o#AlMaNaVTbJ8gxUJv0x-|#kpEllnjs^YpfF$DVuoq-`}t* zQT}T@(s_*6o=EdJw@ieNuJdS~P&KGr!|m2PF>#(>1%p-g&|zkr5SD- zA5g71qO0HEeu=lU`};!c^MmQhS*hqeg$@#M-c6!A+w7sKt(K(6D3%p{ z-)zb6kJ_R&x83!q<|{RXjatb_5Dr;4YWWCS&qO|s{9LgpKr)nY$2&KUT~K6N-Oen; z_8UrNl(gt+k|>fQ_0uB^a#CHw{yt82?#0xhv<7Kiv8pAg<%Y+hO7pJ0?yj!51QL}dcJf`Q*=MLDFdgLK~d(&lif|$8bSmvUP z0Y^q&Q*9zz^gM0z*AOjU$ZJj`Ur9Lv2DT|wo!j|nyhQDD%iKq z&R%PjPLmrI9=+CBoA-Z!IQLY|YTqAQlHN2@PM94SpRs^h*JYCc+M3c5i@sT|%oXi8 z_wU?hE2H=YB`*bKWC27I;bT}r2* zq-%!#iQsQOk`U^6umeF=D6}gsJ;hs1QRvKD@egrb4^mMNt`;gfK{A=0u~Ry3y7!;r z4GRTeLFNN91#H{Hay@wjDouOI{ur-ske&~ox5w#la6~|X%9iuJG%B-UH{1gmzlwkE zD!vw>(}g0?)AKg2`vp9T8fVR-Z`i$%2Hr?1XQ#WiD_A^U;-)N+&9#&9L4oDtZcX2;zuzUrKu-ISGtEws9(9 zBA@=61R<3TPqe#Q-j;sMbF@30d2WLzq|kKkGmQ6JZArJ;lpUvhN@=q9R^q4|Kdzjb zFV#ymxKeXV#*3p3rnoQ4VPs`PdV7=>e{4D8rHw%NK3Xa;+Ns3VwPoJpqn--37j<;xM0 z-4>iZtfMapuIxu%ey|UYBi>=Kt*uDCUZ}pLYTQJ(cn8qjShq2L2P!}MJt70*(UAq`ge zHVM38Ao898oO2Cy+eeGIX3#pt^n3TGHk<t7&*#XBE4k zA^m(Ec~`97AdQ!5=|6vPxCz1Y`IrTsDf5x8zwX>x zIc`m>SZdYS6Xln`9a4HQ3X4J`JbH`F!dXn}qn@^$hsB%;ss(~uHq&YhBIFwI`yw0C zi0q3CCW0X!(SQX&_)GTOm?R-L{@n!rO!x|+-#L-OzuWz2Sxy6x{E$sHBT^ds{?hb; zy9dg%R}63P|06y5j}FJ8x2}z*FqXTf_p+2g7i-(uA-lzpl|a+nUiq zuo)qnM3{mb?LQY&n<1rl;(|#-A5#&a>A@QvrN=W2*v3>Ot!e{x)3=*c?`!>ED4Jo| zFL&E4F-74qq(js4?I!D^)SG(&aL!BX2mlW{)=ynoTo@0e{39oGAcyZ!O0!a%ks+F( zC&bx?+w}hH*5M7vvKU|u-p;1jK&)9jEX`SiOFPzJ=0x@;%uM&$#hQp0HiH>IEGRvy zgKaiiiO>+@rNsif4I@W99ZPCFv&TMqKm!5L&MgZGYyzwL{7n&T(xrWUX5Cx#Ov}&R zn~1ZqM6q9*tM3UVWdkH`{@Vm1mt5Lvw8w8e@P&L8pB(&o$pvHw05(!{>!B*Dw_onH z6CH`*(UR#Q7rKvczXb$boG$N%7`|m8+7L_x%5f6(?31);pB#d6N|g%x8FS-_!!wrP z@T->tmwW`z-*SW2k#5i5p%C|QVo7=uFH8FVu$A;~;~e$`)q;xQ4g(b(PJUxKpoJ4J zP;b3`FUiAq_ub=q`tM}~Iznf??zw=+PNH4ohgaHKR3R1}bTe2+ex9P62Mb2i@>(n_}QPs^30R&{z=xdAU5k?7Kb?jCQqh$E@Oy;dZMP z(myv7;;3Ta*Wzi&Kd{@-W}$%S_0Ep6Q^;FTuhSVv!Q5q_3oy81=+B*a9E7&!-k{Q* zi&T&D`^B(n3(8On_#5y777bfw$|4#N5h1&V2Ml7mgA$wYpfAqg_ujuwXxBuf;|z)F z>Af2IH-8)A9?wAmhi16LIR_-;SE`XRCulAPoCqM`%;E?llKtYXRyeKr($05CcuO&?|nkHprn#^S;_CqUTx98y1*Uw)CNpQ zN+a;);y<2`g9%`6cc(V5U1201Ng8Zjp=GKus?3eoREm~v^3Lk^ZP0Nw87!%isU~%v z<9h(#Out!wM2*W8uKMkqWF+yZwqu;l_;;EzWDsH>u|af^R6i$5vLWE6$8$RekCr%4 z&V>byw(3S}(lj$qch7d1ztE8ILcXH3hPzUDZi`O^wT1neZu9NlqNWcwHGkW!JImd5 zbPIug_hVs95_(zATWL2N4j-zOqX`+tEe zjQtSd1wUNjWqaS3qI3uq0V^DZmZWNd-@w&n zk!5O<-qHpUQ=>gsDbcvd}5Gv20w|8LXeTbSjoCiOj``=q1_Ml05TD zeFFHSfbTea992=a4o^KuGjS4nkk#OkFNNY#xUQ#{HGP;GIoyaeI8g;qd z7x5WsgbS~VYHz1edI<-jHsf-3aq;EN5!gGcOnRcK2wAY*KKCzDmk%4ULPAmW0h>ElNE+xRFBhyNj3;j9Y_zY#nN$xQNhQ#SkBAjS^$HubdZFZIunZ|&{ zcxV~;t)%vkLgLZUpNq4T@E=-vS6C9Zg<^Ig0egl_c=F8%+1W`y z^OkHD%QUw3w?Apx4;1h1A1*cf@XBFL12SXs$eq@<*2txsjyzO&Uy$6kTef>jyh z3b5DoH&yXrreWAOeBbO)zz!lL<0V%{>HeR6V3|g^1Ul)( zzwisMTG!oT-NrQx*RBnI-2YY2dGG^L??apYVMNk|QzirM^37QUj@EFQ*P0Z2_qa8#nT@Mm>mn?bmJvA_M;tx!~972-K`gNGtJi zfA`Q_IJva=wE^E%-sX5bc(Uc#-Cnjfdp1WswwtG{3y?h6H~%3_hD7hk_aZ4d+%J*? zYsFw?lrN78u{K>V&)q0)W@X^s+1sNZ&$)?wUAMXP**7N{Y(2`7UMZD1uwSq!#f>>z zE9AVpTxeTIIQVEqE}1fb70SIpBuSkxI|^Bn@r73ucnGoDm64dLCc8vds*-zKjY;)i z4BmI}Y(MGlPrF#oo|ft?N3-51o&sNJnCGVO%7KWv$S1S9Q8~L`VV}VlqXys`#}F1K zf}XR>w7!>IMPthJ@}DxP!ovU1PL?FzohGD9U!f%eYV(uN6pjGjI`Tv*EN8c-p505Q z^n zS|~-B>!rsy5P;kcn=luwlUKWEau}~1y#?Pd-iR_h$etfrBuF%_=Su|}ymFHD#Hn%5Ou*cVLwL-g;UF&`?r zQZr}sh5^eoae?Fe@+AkUh8b1*_dB^9+eJd|_jZy&R0{7+HXKPlR$(lV_kNr6rGBS3 zOd;U&25V^x44c$Olp?V=8eGkfTh=bJRpAv_4Tt5?D-Z}=?kQU)B9G5qsmZM^F4~r4 z!KMNi9v#jrfV=v~(MEtkmCfh&0a#reR*g>%P0s2~81tnZg`YAkEX)k*5Iqk4YA&&9 zx_JU;A3fM%%`FfDkxc*seR=3sc4bdrgK?xjX;eO&y`Dght zO(dIR%?zbIgSN^i&Hd~eQITB4PuSz25ASXphHflzfwiAG%(O&-j(}kA^5x;;O-3`| z>Iv|N&-iY4t7V@rTEkhS@)7P82<+P8doMF>$*0|aygC5L?-P@fZM@Q+;un{g^*ypX z%(eRy?iFU`q_ZeKndjF!K6xWvfzvPcws;e^Cf#%SKC@J+G7v<-zw{rFy;vATb`?_a zmtib*%UH}nL?ul4IUSj312P)!Ih{X0J{!+O<%a#RV2$h&Hb}~HZAU5?=yEbM6GUG9 z^@AZLS|S*xfMb?Jn3(6j_ULc_% z|CvPUGf=^0(uVYV|0utDfb4ZdD4%;U>GAiHqTcBd46|-`TzGg66cFnG@ z-ygod33*&e57;x&tty9g8hwaI4~Y6z3Iah|^97-# z@fl3j5+~|W-kOjO>m}Q6$3@FCjWyI2BJs{@Fd+oXR|-<=cN&dg5XIQMqA8_j{)ig3 zuIC7{WXHjQ`((<1!0IyV1*wET-k7vT80OC+#)hbW#|*833%dN1o({9(<#h&&o>0NN z9Rd()OAnKh%9HLD64X0|j004X!cE9b3gBru`5?J0nKfm_9d5A~He3m}X z+fF4>GzZhTDhR(^DLx);d=7XrGj#awdAJY+=@W#7jRk}sEyG^j-prTb?l8KFp5{9@ zKtwiF6it-|?0P!`-aHPVplye)M`dUTg3i!?f-rlDIqTC#E(JWpF%jm`>2bEMC0QX9 zNca|%DF1*7d-1m1YHGPygs$*z`zR6cG?~r&_}oEZ{GgdDrX0xT`*e)xd3`?fJG%ld zrXD1@VV~>eFoV<{{iUIs^7iUtnt+gH3dkbFiGuw@HDByp$IKv?!vgDvtzY{ZHgwhJ@qq8g!N*zXM=O!Cyst6>_y`#Gup(#%i*T!yaSL)2evmk;Ikhn$jvp zPuFp>$Lk2L=_VPvtDD!Pv@(aO(ygAlq%+(cRb@cKk0ja%%wtcjUmt!95B_U!0))Ke z@MtfDC3G}f?E!ct0bm?iIPI%-AziV1stPegrF%8KHETMvT0i88pt#O+QISn#zA&XM zeuS6!oM6nDuA{)C`8JV0h?vqCobUs4K94=4xxVzk4=DH4GC z!?$;xY018CbpP~ofj!Hk(PQSBmZP&bzQUh2#L7fGZ+8X^mAEl4 z2dd|DO5bkGnsgRUpR3l6WMm|62f5|rU;D(hn!RD}C~k;dEf+e+(}X==)IIHtzB|sR zh{*ZAkD~qhE^jQ5O_-z)`I?H-bLI#L=R+PliLGv#?(2BoH{(w|D5SnG`$KsCGXqtE ze&n>!n(v*l3vs3C#`UAR=c<-rs(y(G#t^ZXOADXejeVcjf9vmbG87SuOE5N zy%#9nMr#ib3t#s0iN79y#Q6`)F!AQm9a91eeV!d|&&%DB+E3ZP9V`@li%?Y5!>n8g zLMW^~n{?2=G`MlJ=ev6u$bBAF=p}FZ_39a5czNyAN}e0whs*ru39h2=>Z{%T;O5pG zn?(ba3a(4$#9}$6(+fq&&|SA8m1D4TFnuIzkUxmp9uyf-`ivnKc8`2_IRj^%7pVR$(gi^e?sPK z3$sbN>>_1-=OE?u&nthdl_e6k_I!^>Nht+s{={vQa}!N)n#HY+YKFs?Bf*-B9}+cDZoAH3 zVOyqfjQLck9P5~Ba}eO$4`5AfeKIM>Mjg7H+%u2VV4(1HVP*{Ow+`z!PEY&QjniXY z;cQXwNXeHGsF}&MAUhX`uEKzKxi!sQq>s^{4m)FQ?m%CDLS*qXJQeO5z6*#b@DsgO zK0L+Qdu##fks=v-b1*pA{P3`j%JAqfhl%q|yYnr|a(fALbkby9JLMIplSyZ|{FPg0 z4@HW!B?miiY_4+f73Y;6WsqeIJ#%p&k`=BtHLCAdjgmt2x=4njpN0`X>83c**)8Z~ z_>=J?b6(NaJlVFJnpc~q>;I_?;8A7uV(t3lnO(^$DE*A=+OFw_nkvxs7I{_}^rzE~lJDMpEYroNnHJcO@ zn^z%Ecc7j6Zw*J7To`v1;Lz7o=fn#Gfq%kPVf%9jlNvMbI79ZjemHDF!(C7wF63~} znPYr)Ox}M>n>;!iIX!0dLQb*tD@u3T+|MFaCF| zowqZl{55i!{tiB;PkcmB?h!OU{s4=~~Y&aKu5mUE5)a)hVS6G+K*u;jk@H+Fm87S0RN=%AQd&hMi1k!X3xIg zu@1oZ_6=DhGvw+E?C`Z1Tr)%jFbKPn@1{-a1EF1NIelMUTZEA7EkGn2GIY_FVZUlA z9m@in{H|}@9M8=G^MA<)19_VPHP{@EqXB?p8{X$rdDuo@`$EZtq&K=^zzE`^AOUb~-!@r2iHDERxM68! znt!UZlmFJ~MOO%>%CyJdH#}3dOp$jXmMHbRsGcNSa@ar;>SzvmV9BgA@rhqO_-MqB zlg@?{0a)>d#5rgA&O;=UysBBSh0}W3Ec6hl-4))MUdL}OYw}}ph@>irt^0{Q>t3mc z3D>AeOJs}JNAc6#wsMXDozDK$S3s7+Y28xvWi5RLBy%J`p*nSxk5A`~zRo+kFFR)0 zq3N_t2Cg#0<$ntLtBg2{JEFI@dw70LZr206dl>p^sw_e{-NGbbrKuv|c7e^T-9h9J zs*hF)Q6}P3!R;QpCZiL27m=>S4?ZRYc! z;|_9ql*#Twv`W`L3Tq3|DgL7Sj;ECM{Ve;}xj{Zd^i3Ges7$tN-0lLS6bd6@?R5)q z9FCSzcs0A=l~AbkHoZ6K6Kry9-_n;n)=ecE`V@9{*>KAiX8DdLozfiSur>mI=80(; zkN)y8|Wpcubeg&s*845dVIebkrGP!tO2!j$wQjg*s_9n4lOhHe~?k! zO-xhRpwcK2orSje*m5-UwtP#}8QY<=9A!_7M3@VoE&kCfSfdaB#8X=w1Qxb%!j zBqI;V=ImO}U1}gz&y{uWmjiWM0e?!=9jcEB2>c5N=d*#<_pE!ntGzUFPU z9nhcQX=88VJGEy@vCfE{4i>o5@Kfs6R%zPFbz|9EBi(?Eo#? zhi36|k{^t)l}gqmIFajor$I65MCD!fK_!zlEl58rUP=Th?+N!3^GD zl}8YTfx;FGhvelKOfwjayq~W(kIG6}SY#~X7>X2wG8EWF@5Fg}xMMsT6kym8k zWS2st!1Zvlp2a&&ql_ncVu?wqrpEPai*qK=mc~q&&QF`WxZ&3m#~2#btwlLv`B>Cx z%ZzUqVGt4`P8&B$JL0pi#8YQ46#DymgGM8OO0ASECOD1?ue*I}ZvZdUR#7$$%(HbV zputT|OBdbU+>}4g`O0U)^zZmVZ;UGF-npG2BQu9T5_JmR96XSF=d~B86NKcn42yzS zFz^k=(im--2%~TtuVbfpZ&@OqHIdUgp%OM@2xTVCEfe<|Dlkr~QFC96c~=_x(zC+5 zV+*TEyaEJ{}HJ{&}-on=no6<+RclA~60 zgV0D8D~}2dUf~3eH(TU&b}6*ZKP1swRJ0WB@2gf$nu|ks6de@@)AJ^9up1$uI$@;;X2hR)Hvo$yQvP z<_8s`xrjzB7VrKQ3=o!4 z8XHA@o{}Xvbuj?5Q312;Nr9P2LqVy-wT$+dz*rI~t-DM&@>iS;-Ek&N2ATWaUeUk` zuB0HJEH9Ti*#R}z0=(6_c;f@$AvfUg^ZxkXVnM-mL&Y{5J7_G}F*^3%bkX;~{4)4n zRtV>C2q)rD{)qPFA%^1xB6to$-do~qwDd$>uR)D% z!Fj5nz`@Z0^$>SPGRvxhf`W|Pf`V#=MkCQ*@EWzYNUzs2es7JSK4x*SvTG1up;Ccy zs#&_r?_DWIx`f}`Y%;x+otrmItx&e0Q?eauG>3?gVCHtl#KpmtYcULFkyey>-dV3- z?&zRhMCBVRUEbT4^5G)y#3p?$2tt?FU+M>ap6-Z&hsr{AvCN{Vq}kuBVQsVPD|#~F zik914^3$C2}-Z!ITw+8$BhA*Byk(ivVi+)${6$Yg?=p~3Q-uRU)W*ryx!%6p&HJ9g^)*7}hVm5bl|TJ-I`t(rCT{rRWa(&`Pr za-+x3RCH?96h3}`DAcc01KeF)n4Y7f!bGaLZ1rZYW8YVm@4ogt9Ne0ksd8WPaCe2aPc~(b zAt#@OJ_Fu_>o=lR>z92irlw_T4jztL9ab&CzWKfLHHAYoj;dyB7tVyAR&C&>&-)2Z z?%M$MYS;M73$$$704^N+6&kkc1@C_}Sy;Pxru<~r0bW^|1!LUx&UVW0?Pk^IBo~ex zGja$BxNbifHyyVB{KG>DT+#^Pe{|1!sNbqL4Cvn-#*KLwULQIB4Ig(G`{X$>@TN9; zCtZ!F+qZ(L-!6uJJv&3k*3BRJLR4P;!{I|<;*9UPrQdxi`}=x2<>lKczqcXH)UI*; zNFdDjrE9lf_Qa1K`(m#RdIo;obr4cg(&d)T8gXkjY`0T>@BI9*26byddU_7HI5|O` zS`m+ZvETq-2nzIr8!@q5(*|`=KWwy9es4)~4Dt5^lf?{FV1$Z({hj9T;|UpAIS>{S zKshv>J(BJz1S-`^2|igWhxC1%#_IHd#3_|_&F?LlQZup`dt3(oq}o^ngnQgZM~|D- zkCf3~b0+)c_jXCWboDy4YuSte;RwH7t6KPDT`V&@2V!F5nI`{j&+nA@Pq)kI?I=i5 z7p}z&_406G+$8I_?1C>wz5Q4hBT6pX#tjb%fcQ;OpZ7LtpGC_jvIgj#mgf752>UtuY&C zoxghh<##@w*gQwoJA|RoqLZE zW5#63zWKfRxUisrx0kNkygD)>98T_D2Yp_62Wq$M1z&vh4)lGxBlEBCRa$!w9)nLN z&jv4NJ)~bdB5&ETpBpuPCOIiz@VszTvQx0=pZwk`<(lddA-d5MXDzxDp9q^)&V!A= z?vZEB|A||+ZZp%!e%@ZJ4q#el2Hc8?L-S^a(eJ({4;wr{!VwlenlKB3gZ!rJ9d#3_ zx~bh~P8iL#O1U^9Gzh+5wr=K`%h&Z2M-SuHESxDOrDt$gug7rNIl0W)s9r5d9{OT` zInd8X&dkXbdJle2*s=SN7~tnK$=S(ig4JBf_`TI?6g)gQDkl2&NBv(N`CRpgP@!GR zCeWyEEvOk0!uGLJuoDg*jp7a-IRzKc#tS^ZCn79lx*!O9?>)3uDYBuI;z3h;-qS%l zi1+lI6Q7#e^P2_Bn_!0oXtl)e&0$1lv`|*W-P8G;uaEl2{YO@UhA?p!k@IAnPIt+)VLltPET zG+^fRxr-)Ms*$F=Hcj)q{K5wKD;?L#DHi%ZjRPyrX`|8PrE|~{2F0&ZO>g2dDJm+e zIc@g*iJ;PU8~MS9AX+Uhwsl%^{Koc^0J5PWA#nQ48Q8jc6S%v&Cbw<%#1G!y9vdo! z(6k##D4~M9{HL$S#4UR3-S_<`d@&B(TwNac<)g<=!0I(?sL;s5IyI|L_4oCTh*kdu`OG10f~!Yt@aWl@n4T(Bb|YemA&UAy7s z7oL|QBZ5BAc?8TMtxjh&Ww{cZ)^XN3LUwMR&!!#w7k@r!igW80O`&$}`_h$5MaCO!(${#DkgWLZGwL+~@pb~OU6)ka6 zVqy{>8XO3dCOz2V#3!ZFHm<9opg>$dHUUVrUH=+L1fb2NzHp(JQvPKm())v8s4`3t^>uv+ySoWFGCjaLTrok^@!Zk$b{ zTP+s*7n)e6oOHT^=X-bg=EubgR@A5wPChuq#N1|7m?esdfnBXuh>ng1J?eq+5)tt2Eb54m}HFratGw?3J%WdG(Z z+rsXgaQG3r!D3_;&-->TVkB3rE#cA6BK&OyUs z-grNKC3gbD}na*bmC#frjrmF~H(Q`|m;h`VCm|pwdE9O)Rq6G{uRDvU-i$kd>1jq1C9E6101viH?ZKm@eOlf%MF5 z(8z@mF{yQi^*vJLfep! zGI+VWq8%=3K62`c`F#h!8P=KOUH@YIBNx5k>YVh>(h2f(H?5 zPDwJqy~#7fVe)$eDuM6qqy?Oos-(2cf$Mf0{d&l-k?wQ9p3aoj#4jf^U=6E_1yEc_ zt2lv>mH}^%7!A>9_Gh$dTx;}avsV_<>sM|jl*FI*EA*|nl#ct3UHm-i!i}~ZuY#QH zRPn`^UXrsivp|gsOej873dNPr=#YxHmzOf?)G4rJ#UB~az4iO^*6lshrCDw6Mr;a1 zU5&ASq35mL{qmvHS6cgcxa@Rwaxkr4u|n||-=U0xXMl%e&bEc)-u(2NHSrDVMsPoV z^8uVVa}CV-1@f-LXY6}=7aELr@aHkK*JsJo1jgq3z(&LFrgPBds#VJDl#Fcf^zj65 z9}hV^#E(mfO|<_toyrA%(WrIc7lon{lnN1Q1<0U8Gh}6_;yE?O5KRj53!XHZj5Y8z za?LP!6pHd4_|*Q>_P11dH$IVMwdU0A!^*wNN`ZsgEuR64+5iTn84`BcUv;<&r!r+p ztR~B=8Ckin;{t8r>*WCrLu#>->GU2k-o)HafP|DZkVNYxcURXH8nt>3u6Ywwf>u5o z$_q78(lWnBxAf^Q?OQ_cuI;5ZEt`m*?rxll7+tVgt)ew6Cx>x~Zr-uK&aZoZpO%r8 zJs`lx=L1|KzgHrm3G&P}h)+)4=;7iLI&It=@bZA(q_ij%QpU|vCNY_V(~vG5;$F3l6CG#2xYV zi&ju6%KO(IZZ66d^S%;$4ths@;llORUe#Ue$bytPV;Op&C;b#Z-=`R1YW|PKfHT1?`zqLD| z&6#3*LK!q|RQJ9g+PY&Ov0T95Z>NCXNe2z;M8ZUz>QsuRq81Sv$ThAT2?vj!Y-5)~ z7nx0AHL8Vzi@st^XknoNCV#UKzWC@pCNQ;0pALua1KxmB=Pp8%2IV`8s6iUksmbj> zd?Lgy*EHUrF3`{Cz8{!1|0mMS(4!O$wy(Dry!JwW7&mneY+v_7g{CYd$e&V5I{OqF zH4vS6uc%$Q9t}J89)`6)l&9!^>$T@$_rW8u=9jJTeE(kM-lsCnoZSLqMaf8j*oxY? zY2QMJ*3Hr9_AmcML4Yyu4TVu(Oo#4WI^3Q5B^E3xHH{OkR{I3RYP8ymAo_J@ec6!g%3WP3N4y8fcC{_Kd5jC)zZ>9 zXiwSaNNdzPGYbmxw(K~dFAH(;P$fI6@#OxKTH*SBYf3Gf36U`SD`Iqb^$geZ9VP zaL`T=EfQ23_6v~-uJ|D&*f%OQG5NExU(R{%`(^9-ComYHx>>ZzN1S8v$;sTs%h$PM zCoe$sop?|wRR=H*pTr5=0jUxY0xQZV1BmEByx^`B26%Y-eUq7A&~?+Vds=Pybx(j= zp;7}clOtn6*;2JS)p1{c&)r;}VlSciWnQivoAMWrY)s_>JXU-!LzKC6P8O4S$Go&ldk-1yVx%9Xg*EMpafPCW zf)`qHz@a-P*OfUy?Z-KCGD|9!zCLktngv!IP)G%n+qF8a`Fzv6X% zy>w*TExQuBe%n4yq9}F3l{*-PY>$s(;zYJ@Eo0qxKOYY@Mqh%_ zXtJiHWtb9^Q!NQeDRO#dj@o24sj)k-?>INSKu5elTS=B*sNK5HYOu)bFCX8M_&*oA zPRm}Aq9hN)Ah{p9-2acg>i~=DYT9$}7J3m;R1^zE1?*kH-eSStdySeXCNU=Y5~Ic# zL1XMDc8w->rP>>UfL%baS3pHULF%@9|CtLI%2K2V%fIJ&R+lYz?|bH)IWu$Syi+|> z@99V-GCS+q^0qCTiJCWV$k^1aEjFuUf{TDioMqh-qrgQR8U=|-$;#)^FZs~$d#OR! zLgXRgcO?n$lMHDjp!?ktKi7yCLpMifm(92Ry}ZfxKsU zsa>2}D|&Y6AZqT|z`zJ4n%{M3e2YYk#MH!y9?;m{4n_>@t$Og}dFts4LGdTf`twmQ zW6bblI`}(%a1^v~a2nvCNa5Gtzu}em$v`)79$+To`4KEIb5Ldt=rxH%B5%{8v3$&s zzG7Uzjm6@k>q5Mi$llJ{uz^iI=-;bz>b|4L-uayJlO`pn7$Ep+IFNpp>N7QP1y~jC z@AgXYT*}gqG8CI)mUSd5@E-D%~df$FIS+8YN z$FyDhJl}@hxldBp#m=6NL*BrlpQhM{(qjbTW_09Jy=wy7hVJ#DOR z$F?m>&HA8NU5`%fbQ{>#)7iLvZ=&yMKO+P##koEf4JN)}yFNeN2|D(&(4gk^GhM&@uH0|MV8J)m2_iCrTj z1NdtCczu;ZmAc>agdRy84WHR{^kh$O1N>QHpc{1EfShG6i(+)E<`n_;rETqmG#|afII6_=My$7lTQ; z>ELx{I&>Hi5`M`uutY#}40J`M(uKriUddEGdPqNMo0d%qeX)m+pTgZoQBbFj73k^c z2&d*hC@ab-#ZmAy`U$*CN-gv?>BP{aQG*PgM!iUW`1m;iZwM?m(XxN1E79J5%3^_b zbRN_QVH5LuEdjTgn>oOF@-=b+P9KAmV%}(PJlsQUk?WL>!BBPBSfB@oJ!S0d)6@1@9?e&6<*R$;4vac z>^*yWUbnU--@aATY^9dVLnEEgs+l9xzEv~+^o2kgQI&9&AhNWN2W``-J0)$mL`|D+ zgjm;Q>R6S}Gon(7n08XwGk!tjvC?ADv2nYB=Al6zu^$CmhclowB9gMi*w9eb#Ib=$ zV0$h?D-2sk=DE(InX4?cYU&`VZc#=4;?-*!;`LQ5G{pb?KMFL%Ggb_nZd=!=Ruyev z%RE2qb?h`m+`SL#%Ds`YxppfY*Jn|_aWYza@7#X?E7tz?q2RANaPwVfsC}nevJ*V+z39vDr4w|WC zns@c&q?8n}s9FW~{IUX4Qd89~S0p{^JUVktw3}I5%^KBV+j_S=O;j2ME7oj=2T!B( zTNA;$ZcPT4L!#9u9&XEz295Tt2~9^GiG-_KrLwS7nctj}NEm41XoqXCB;Tb;-9b~5 zV#ju^^1UGwBYnuPS|XD^4Os&NJym={A{o0?iXv%!yb!A+m2mpHI!s{{k+6ZE4`}L~ zqPBug@zH3~)751R^z;}6&ES;y=mIC=EJKSiG%(PJ1JHUpx{RTrevxT5#94co(~z^0 zB^E?TNt01!qymer((od}h*Gn>3Nba_CnfRk;@{JH#}*AV&r?E)TqcuCl9E$|(i-_? zLMapq2)%trI3TWeSyHLMs+OftojCV*l@RsfB_!i2z^YMn^s|}HN`7-bH7$)#NlnWv z4-s1gNi!5)O~sp)#=d>W)5+M(66-k|t+CId-@wSJa}gY$>t<-lq0eku^(*w~+#%QZ zU&g$KIo~aU`;Q}qC`(QwhTKTGf_6^xw(RIvBcosO2%HuEWSAm==HVp{XmnP1lc$j{ zcp^s33v`bz&hX}4qS|un1UUT8eYhTSC(k8^jw(Jtz?QXYLF;CXgbq??*@^NQ;ynI# z#NCG++5@zFP-T>lj*yC35%YxO_!rpgbza820ea+>^Zmou`PcE=uz45U2no;gC|c$* zG4$6dnG-wW#&#`|gC%ZiYCT>7z-?B-1Rh5ry=_8=v zb(U_tsB1W}b=H%;_|gnW&Ha@%4wyceM6;S9(^?Ecu3`IGR#%9Y-o$L>4V2lfyg0>0=l#tf+cEB zK0^U=Jh12P2YMtIZJid0?(&=}3@_F+>cwl(IsePx*uWN@i^}B&FfE1W1FrJ7Zr>HB z4=Vndisgz_3|Iht+waH=dnXr9T%X%vAKF|G30K|>yCd%1&8bL3oLs}ayr`nK=vQyR z`{X$}UY{33Z zx9`EOeV(%S?^ASymw5h!QqJry5r>1?y$jw6j!rHI@M&Wd)lf7`MgJc1Rhb$aiF$YK zAkch#szwBl4m-+4g9+5}ff1C+81?Tb7 z@Bq(kCF)P-l6au^*@hhl{wU)4Um0Lpzj^yky!D?$%6ku=!04fU#Vs1!mpI^N7}Td5 zkHcMBr4Pc7a;HA)P{F%(_B*Dwk~U+uUF_FCV%>Q)Js+H^$_{_OILX` zh;)=nl}-j=1p+?D@yv#Z01xj{3m4@p@k>7U>$mT}KqO*<5%^SeZ=6xtu#cZbNuNBA z=J$IXSJ_$DRyJ#7PiH{rz`4lO#8{*wl`vHFK#6N@N?ID9nv#aj%q!KM`;Q?k{62)- zc>u9-ag;fjX|0fSNi%Q5PT6xe$oElc=#4@rf!z!ArW0$s8+7RFFJZ(ZaL5lvZQ24I z6;V=hiWsdWxEXd=sBLRxXuwr6F;*EH8nQ-42CQ7B;NHe3s1lNrxPU9C=iqSoCC>|=BrsUmcK4F+Q+ueiT-@II054{GBk1lZ`PTRrxn*LNiWkKvB+?_B zv6eH4#|sBM7+i+)_$$rmZzF9P225a>nWi$Cq1`tD$OkuBbI za|F_on7R;5bq082RDM|(brpi6^kzyEe}oF^CffPeRFD>N_u|R7WfB4|YKsW)r9fAh zO?#IJDe%Wc3)ED;{6h zMLAc)=QUA-)y6KMR1Z@j{ZSK>+z~`P{&SP(*$WKI1j#v3L~N4c&D&evIrBG}YPQYU zN)}co=pL957N~1xLUhu z+pPx1RqR=g?T^{c)Zz;D@g8X3we zk`9PP>|_Kx7J=6&H%aaY_A$@#e=2#^zI%bbB~~BlzTZAFNbWgy9kGCurvhx2LPCr@%m314D){^!sDuTlq`&C9*fNu1&v5HQ1qI`alY>PXiFuj0d$6l|;xMN_a7@>-tN|@rG!@EDK@l?$ zDDRtySBpOD7MJ&X|y#;9@_Q|fF*r9T8cJaq=KEekb7At;|JNW>3`*#bRi+F=? z-^Rnk(0c-Cy78hkDotZow-y*0=uriiLVYJC!6?$eB#CIH33Tz3+|lxR!n15-L0^*N z%{HiS4HL(YgyiH@C@SFvRdjh3^9DRmo-cHgPPICQio~}`*YRFQlt_|0Ug#+(Qr;Bw zC8bg!)T15d(o0~pDzf%wS%H%CM%Y~;f2}YrDLIZ;fhs}-BFeJYD^`*_0#D_Ei4G4s znN%1BbpO#4Sia^jc=7Tz6!qXZ@g|uXn+o}$h0PIHax%P4{yC(VsnaV~k~@yCR9tim zm7YYK^Dke$5pq0Vze@l~5jX2;lr*rj5fouzr^uc2-hBP`{gcHaND(5B#Yu949T8HR6;c8QQ?RqP~pBA(!RjvS9W1zA$zcOSsQ z-&P4{9*eq8)A2;}%9Vj?=oNMaNQq0*6X`QeGs0QLPjW|r)nR$AX%EX5r%y*;=L)i< zqF%+K^Zzc_@xnsSX1DpxXGxT8blH768><6?V$1ts5 z)U~V&(bpg4ce5SZG>2gW`v@MAsEFm4=~PgfTn_FVc2WLgfuE0!dMx5Oz6;)?MaIxB zUXnWkrY|?e`)Gt+*chMZc`*eJ%SX>%;SDRn#H3P@qbH=u-bF^kdmP?{(F;k5@n#aS zxOa&sxubfaedB?R+7G%K7I;+c){R&!Vf=!wL)g8Cg0zZyjDe;JS$FXX@5!Fe7j~mg z!^A43oH(_ep)``*8J6k5gNhDT?ayOa$`ne4IGQS%(yCF6z#zrRNGG5o%hz2~C}p+9 ztPm8WdoKATcl^^Do%-qa9S7WtxagTnQG{LeFoRFn96Ao7s-jb|o4TY+xs;OJQF^U# zvW~a!(C=l$C7+nGihDQfHdZW4dp`tqFOE35R9+|$z{M8mLSpS0-QckA^FzNw!Y zaD$FRMQQTn_GsJBK_OVcr$};VC`SaCFVYm^xK_;uAGmt+)9rRN>M)e$lyXN##C(GS zXak=z$sK{$N9$o>ilIWcMQ4}&*DrV_mp0%QJw}LRsVQyHPMweU;F1xV{@oon13i!eyG|o*rk05x7RSaB%9sL&@=n?gjeXFYZk=Y(2n) z(dAvRgU2AiUga{$9dF8pVML203_sk_d4Lzg!)Y0?x9$fVEp+Nrokkrb`bMTUtVq-u z|Llt$*%hU$mtp9X&m{MZY(LuCZG=|YOev^Bumgh7aJYpF%N;qdiW4j4X=yLnRJJlB zmY7KmMV#1x<5YD-4ATs+(Fz2u%-71WvNEMx{*&Bst`ncHIXf zVoAI~J$R1*br=;>nFr1UKTNSLqyLB(GJ-yun&eIr6LP-*Y6y=^qx=KBEJTaiB=?Gu zIVZUxUo-o}=@? z%Q(pWG%3lwH~PXu@K5x+`KpZI0_93_&+xZ}*F}7KClD(X9m=jNtjR3@o@3z_+Wek) z9q;m*`y4!LUZI&2#Dh0v>a2u8SxesCV)sep!k*E zWt`*=6LA<)wc&hs{OMe^fxa%7m>5IV%9X&_*a(aa^r#vOq@<=nLSiDki%)>qxADRz zJaHruC10M{DW{F$7nVhm`z*AaTv6dvRv*n|z}V0TYSyp-`})>U*QzF1)vN}UE180x zo{kXWC23QRN}4Q9*x`H`6AMoxqv6q$NVxatiBNSdH7!k@GN1{sga3SvL*CG#aQ0#_Jb4x=5JBWv>ZsKHoRUv+cN$m+e~RK#xv1Ms zj18eVeK82WnK=P^ba8@8Ch9p!X{W=ct`&^L_btrL zggxt>`#f`L`-~*_FH1Jb9bh1nen2c+qZ9C*JG6$;gZn@O+j{xZ-jZex2)+)>)@&6B zmZ<%@Y71Px5eC!74HLefSEKTiC3B;MOVf((UcPY%#(|*C=AAAF5PaQ4Pt~N3>PA_wXs4LA{Vu4dA0!v69?5U|O@lSm!h&n>aLpZXMe~UR8_V#mB>h zFaL*&lnUq?vE_3vdDN5;=*#T%6HHptD69DOg8!rRo2iOBR`mx*6=RB{{?i2yvEC zfTCqnM>QcMUa0#)VWw=~taqqEE z@}(r^b>=miH*TQzePW3vYmFkOxk9Eq_tD!xVstdZ5qJudew;yQ1o+9bD6p%ie%=49 zYX?}r^`8=**Aypf+oGA;_uiu}p^E0|b2^)>m3aTxim+tyM6yq3{yugDS<@ZixCb?MPb91BGN%`uNqWTCiDSZA(z z)T6h;?g$Z%2DZ6bpJ~^kzD->r{8Q9}XgPsT8#7Stdz4TgarY5Cd=jN5Bo4P#3i$XW z_m{6;q*kw1;|yv+N*>qG)Xb4DVj%chh!C1p2khIKVu0_}L3aw@wru7Ijty*bhlx^T znLcf?8`;|GEI=A@LD;d^ZiVF%F+Sd?7^QEK1A{Dx@2PkhZHvy$;LuL5gn-KI#94o+ zYh?*JiBPLnF$V(!14v3LeyV7#>K3`IEc*S2kDtS-3xPu6v7B!*JnMPa-?QjR?xB7M z||ni zP!>5)^n>lKluB>1vea#8C^CGl&CC%H4mRs2=&W0#;VrBq|ntd2;;{YS83!ww>1fdQX&1G9XJ1b&qEJ9;5dtQbt(@@A=|vpUJ@WGGA5HN zAo}GiVJDNecc=p?Ra8A-kmLAUdHbTr|4M2a<+;fm>gSQ#)X8Oql40JVgcl<4DmjNF zF*_ea37zu~7P1Pck}<`nDROCQY%HW=PzMmml#~>d>N~-4xP#Lq{N6)>=0n}S*MFVF z#p65f;r?E3C8;~|-C4gC;3aF^edH!ZTFNsPm?bPDoWW#sx_y)>M0?5M_Z|s;u^#&2 z6wjidgH$TUk&!AyG0Bvq`O2ry(fk4t^j0_r;@=|tkL)dJg;`)8S?HO4wDIj@?=&D3 z2jKTC!;YlDs5);5dqC&}0+t!&_z<-$q`ivQNkUuUAEipUqRf-rBLY01H*7!16)mB| ztcaNl4BL@OCo;}AhFu_39@05Ch-U?ubNKh>+X0@Xk}3Gnpalaa@Tfuzl5=*gItQ>i z`p&3PN8`Nfgm2Xp*d7ZLkL9xjJ$PP$ee(jJ`7w-Wf6_(OiE^3bt^@@iarHEvfIZW5 z-1lc+J-cg;H}8ax&iGnOo?&X@a~c6U8F9Ca5iW%B(8OYr5GXpw{B`W8^D2olAogYm z>bS^HR!LOcr1Kzn_2#W`XN+)fOnS01S-2ubSbvj~Q@5Z`oq$WyJSC^X_tJ4ZxO0O> z@f$>T6u);=M@K@3T%f!+aemPZQc5qLMXvt#>seD1lat`DEqmf@?5vmZOzGFV`{bb0 z<5nt&c^rx>I~z9&8uP$c4A2Ca!oY7HK3)C!oGGq< z{l1Wp5hbGRc-W{fAm%J91nx!d^Q zcuv%~p)Kd}_gZ$KQt9UDeTuQRw{>F}0MIbt;;euL2jI!`RSOo+bDcGDlxo4Ubz=YE z>s)2CN>bVi_-n^L=+vP#zjEpKObyFw%l_Q73+mM;;EYBMbaB?$^Xn(i)=c?){G8cS z#wZpoTPu!}jNX(A8UPqs9%~Gy?RKXVE*q`)1|@ zw*_C3`KJuLc2i|lqq;%cR!!m5S$~*6d)kK*k7kujVC$YkFm`Bv^o4JOU*I(r`q8R@ zlY4b$&Re|fp!X>{_V8`F2hFm~8;U;SoW!RL!>f3y66d!G`onc=*Ay}WGaLEEHaOfV z_k)-qIod-Nk`fqIWm6Lo&v8{WLeiGit9`q9$KKe`un4!HQ~Pz=w`m63{yjp~f1zF- zOE}_l8alLTLF`B<`2gtAr9A{)3xT`$AK|bcK#EW`WRk1sh{y5uO`A2Iee2QX@(-Fg z!ECJSx(5f};Kt4Re);Z=Zo;y3;bJhON^LBhx(U1cKrl(GTU3ENx9`Bkt0B;|i32!c zXUzZQ56O{3K5H8{Z{#Zegmo{A1zLz;;1in$wk!7RKFG?_(%jq@e#@*}zm2UP$yy1Kg9F`Qj(O!0+1U$pi%502bHj2aldY1G{>3CWG@hc24~J^7U&>Yt@)b zn{UM-H!m}bOaP9{ECFA?ejB`c`O58|Ei0KTH^cZFArW-GBXy`tPaTvxKX1Vb@# z56|O_wY^=%iIFW@`n~InF+)_NrhFw%OqFx}dv})Vilwj|Ej4|Kgm?S-Yo?}Ejb-cC zZ9@yL0>sFs&73%A#<<~%QIlQ8eR_6=*`JSRW8c0L-lyQfw!aTBbG}*3t^H#m`zrd? zvO@>GD@KfL@Ps*%(IW@J)UiW^jDeqiTMH_s3Vxb56J|~w0~Qul*>8Sc!Tap}lNqI> zqxmtiD>uTZj0}%}nOo>PZ``sQ`lG}tuVmRDf5NP(V_|Ur9&qs3Ddu9}wTclVyBK^; zHKE~(Zbos{T|1mU(ZezCr0MJZX196j6d^PcW0>l%}n@Z#Rft0-?>f`(xBF&S7SMzm!W(O=E|m(pvG${EQ<9=5WR@7#6s#^SoH!T2QxudA!S(3eL1#$6p8R){XXXk%pB7@20r$nIP!6sht&`X|5Rt9tESL{i|* z8g=OZfh-lYWT{%RR4rL5XvtEwWT{%R)KUknB}-NF87*0=mMrz-T7@D@{g{@MEcNKI zGXkZE#*n2Jr)83*>gwpg-lNAfgDjPf5gt3^4_9x73C9a5v`p)@MU~1>9fxtNrj7`z z16bxk)<{ib$WjUH>P@=^DuJ9sk~H#@=h4C=@XAeCw{;Kn>f!`*KOZM#AgTpk-pNug zT)F~3{JL5&HVV^7K^;Hq4}O7HVd1y4;InSdYCl(Q$x{D02Fy6^EbI~u&l{asl7lcpEy_IC!~~6&*RgS>0<4mWNgiu?8Iq+^v#DFF)Ii(d zdaM?7S(Bx$Wp&TbMa!}wGy+xX&TWr)ei0QLY7M2(4ud@fbW+4QEX3(v@u;P zuP92nB1`Sv%}JOBMGYck0{(jD1mRkFhN8+7St>OmAh)bu^`pW?S%>t`^JYSy?j7@W zIm;DUYG$L*@R6Ns1b_IH5E$eO)Y7E1Xb$H!q%(iN+>xc`oZ}P#ARw6`;D=8l;ca|+ zMunNFsbJK!YSsvPAz<3@E2wDhzytHJg#Ro0S7A;w-mMj&r zYIQAHs+KHOOO~o7OU)w|q$Nw$lBJdwXf0W44hLUL1feB@&=NsZJR*pMx z&9P-`HiMC_Zp9^n7&*yR?DAPx`0C5aEQbn>6^Y=B$)jQOj(ruA2x8ELIg;^XhQOrJ zgWy8IW%%cSmvCBs^4Os;ebPuUH?Pcov+#G`=iiMLhX_I<7V`+0*|GNsTtv`6eltth z&|A9tPw4&NF-#ma7!Fl5B8UOKyBNgBzXw0`nb)uQ84UH);|MDke-HB){SM=X4S?bO zdsi$X2nEhzV`D=httt&AoC%r&b(G}BiUhi@ibVvmZreXFapXWDMRMJie_)u)XM!QJ zXTK-3X_=lJ>wWqH4C>RZ;t)Zs*sz^H=O4_B8qyDzt=bHy{Q`yc+sxDi2KVa;*Fqv7 z`bA8|B7#`*!))fu?|$WylhfEAzM7ux3x0vuXt$EzToH*NR*d}vbR8=x&N-Uc30P`?p0m2_fPx#zD@rbpnr3Y z>nEsV&`=`!Q=_YlLCDM%!LEEn3`LS9oVa=e1|yu<+udyrP1q`em~As}=|6Yw9CS!w z=uv}HVMvF4{_kB8SqNpB{6;Yp?ydhiD{`wr3?)+nLK#ioG@Mul-_wgKkh)64A%a+@ zJq3?692j8kqx^w{GanrqwhEX_2p4)fLJbbtkTWbAgGUuJuMEAJZ?50{7zBAa9+A!` z_IK8$Svvyv=I;G1&}qClRJH0~!-pc=5h?%M&EGz(TZ1u30tunUl>aOgBS1^7S@V57ssVSVkl& znhCs3VB_GZ@#jCH-mx*brmGe3ZpRf+mJ0~V;pcHkRIww)pX&J8@NJOGj@x0tN7^$L z(=EDk38Qt=MfiXay+DBa&!_))Amjlv=$3!r6Bf z@S}>+8C11sB7%5<9abSIY}(Xls5#2m=vtxnB&^1%i}UvDzrpl8it{%!V5x*a52g!Nc)35gwfw5qra(ef8%_8}lk)JU z5B^U+mK5a##I%2ufz(kNM`9@Ev%tSvNT-v5E}Se*izSAV=W3OPMH;TSItILrf3{~8 z;o3G(g_GTBo5fH{nmE!tNWa77`MRpezM5@fxsBZwoBb<*kovyVZTEuQ_4&Xyoa zC-tAhpPGJVHJmv8p>C+`UKobTnl*x03pLBg!j3KO-SteWSm4YZ?&1QQzVB^=t8F39mEhkzjk`+}>RE~c3h#=l#&IC_@y=+XZey9{Z#y;n3< zBZ%!Z@cGZi+lotCFE`r~XECB$ZI?e+bTm?(j(f?J3X7Pp$46_O#}!~Y06ATSnOyIZ zx7AfXON+JTmAzspR;omT&PWpS?@N~}U4p9!*J)lj1dydrr#{-OWeWMw&x0Pa1MN+p z?L!R~kF9@8(S`E|Hsgo{!E@eYTzI`a@rsJb4l%!PFl-G**;pa+vDtldUAJ@lf%RzJ zDRXRz`v~HZe;ysuV@}*g>HRY5!2X-h z9b0->w||`f-V-4PA-tx?Vf2y4V;~tcB9t`42}xYe$bN<_8?M|K*UA(X4=x%TWBGwQ%#{&}sfKaXPn{79P9 z`&AH_uxe3sF>ujUcrldGpShXh5U7E;uY;AGL|}Yj4ntuI^Ph%?2!L}}s=!)u z|DMYc=|aO_1L}x0pmz!kb-RhF1rS653ojvnIT7UhJ0XaKnmf2|aG-+i&l?vHB7smB zs{l7Q8~q!^RCv;GzBTJ^Vy=BGy+6|eUYLkfN^2pY`VQg5zc{W{v3kx2ymki+jMs6# zjf{DISfr=Xl7>%6aQ=FI8zx8~HGFeqGqBpuI$J&x92mzzg^;$r-YqPVFzCcUn!42a z!8b6DhZ-zGf;DB12{d88*k?M6V;=wUBQS|~isMTdO_v`!BH;ob@uhJ~l~ zpob#omViDAN){0~4)qBMb-76bZ}{Ais>8N^qWbGpEA>rvO5Q=~8-x>oi65pYvfUTy zu53zj{pv9Oi`(9zhaxN{(fy+%FVXH)IL!3K?4W6UJR4>&PgLMP6S5%@=`wMFI6uhV zWrrg$eW1m6ji&=W*04SdxVq;e5tFf0z)cZo7|(>+%RiRB;XZ^eS*4~wpG(mt5=!Gn z4VGgFQcT$UpgCgyO4VB-`RPI$Ue~V|JX~f2>@)a|HbCod<6|2^42&cGhvEOP4)){E z0`PFjJg^DTv7o_46?-dXBqOI))t8lcAVP(BTYzmLpDZ#(!XJi_p2Wz7A!X)<{aX7+ zH8nKlok5u!%ZS33l+cU6oLG?=ImtE8Fr7{M?i`EQa(b&Lw)L7hF?Q$74z$aL$YrCPfCc zCQqy?^W&9k*}gIjMhpd1czHMc*twzl!FcXv*N&hv(`oA15u0V!Eu-ezx^}1l30EHC zmfS}EyVv)a*hsi`Ol|Pz&U2&g?(ubZ@O4-2Ai-K)=;aZMpSIBs`_|Hy zLQn*;MRZ>MYn&@-xbyr`-)fTO?#C(kOkiR|-KDU<$40obk&Q{8pMW`n|C%WktH~Ot zgTPj%3`79hR@)m^01WBL7~+b@0rm!*01{Hu_u)befdI%>hc@knbQ}S9I5X4CF|vIP zh#1PlURS@sj+HJW-p&Mvg_yq+P+HC*SmL)!dunv7S_RO|@hM6ML)@>9^q`orJdWP8 zz=7?EUU%~|Oi~3BUnQ2KOE7iUtb;+vzV+P*`_}sc6<4H|dA?(1KLTdMtsL=0jC7n>aBu2j(S5lZbQ@iOE zuI74452o#@oL-zWynpbTcE9bjJcMa%UMkcldKhoeT&lV@S&dI3S@YR3HV9r_Tmd9@)jMl5#28{-Tkitxp@OK~8I@ItfO^CLH+{(o5F z>-wx&$@%$KQCkjK7$IiQ5B$^F{;l(hg=%h1^oW&T|6#YoLCL6J)}TpYeEB!+fB`kK zC!82cgQGrkIPsi|d(V&n5h=|1nu~aJDvZdzu;tVioGb(?s?r~;^NzWf+kd~525!D< zt%YrcHO*$$HR(mrRW(<5>@Q|O5FQ?PCkA(#j={l>i%UwisgvQnwzAm!GN*JFD@NIC z>s!q%Od6v1JuwEyBU)mjaU}#7cN&iY@Ib= z5b9Qxai~4czqZM%|LTmElQaJQBAD$DLoR#h$;>e2qM@NV+U*a6D_6@zFy}1$=5J$v8M;JbwU_|316teXMn=LF z3e00=U!N}5w-qy32AM=p53@JS0PwF#gj64G`}@j6mUs0$TJR6!S-eYzzo$7c9zd-7_Pc0CfW$M?Vn-x5Kj+9RC0JF1+qnkW2yemf(LGB`nXde& zq2XsOc8!#~(uq*coc_e|LmNlz5~=(mK|j4Fulpk~)nL|X)lT2{CY6mWY^{&U z26=c*ho7|j#Y)oXHtR)_ab~`656VAgm{;FWiFjfk&qG=soM>cc#2x=UxGK*j(x_L2 zQ$XVLQc9nnpLaW~Z?)2l(;D*mVIrDybQEB}$Ea6on0r58$rGdn#yvy+J+4@;F&y9D z-xl8Ye%$6=Tly(FGuS|4&;`g~@%!+6U98k}bDpYzoOH%FH8v)RijC!%#R&Lyb`o$U zHd|7T1buyZ`T2IcKRjo%Sb?*HqG4N;h#E8$BP}Bn>1p;|9W@i)isSuUV1eW~_j|rf zu_h9k2RS`+`q&H_iBJZg8K9L@idgk|@Q;m$yKJ_)WGet18lp^$4wKbJM1-y@t<7_^ zCX_T)z0umjzwBQ*DtTFP3V~Imi!6Cx`AeL8gwsf=+vS=%CJv6ZTF-L`{ZxseVy=<; zCLbj;H->A8`SDnkGMxAIcG4b3XxW2l*T=)DYBlg4Q1*u+26a%^IR8wl(Qg)B>+qXQ zGKF$|eHWLbqy9ldJ^mNc*;hBK;oedq@O+~td3glPx3(0ME?n$+A)lky!hLzxYe(I+35+eGzMFTv7W_uh62dkDT%tHMU*L1Zg{QufYy5iFnvf@9 z8(Hg%V7O0Sk_wBcBUaJt@ZuUs%tjS<@0EnYN(V_51xSbALr$|Q{y?tq8 z7;D89sEH8m;&2bZ@Y_m$!MYI^3*EeFRPYR71`<)e=^e8_Sp$s2Y7x}Fca&}b|IY}0 zR-6A1LLZ=8k1!86=M{De;Z2VV3!Est$d~BAZsX=@w_~uK`ZDOLzgPZ86g#p%+1dBa zr_4i`ErJPnz8eiZBL68moFrQeR zjx!3#2;y8I?$?wXz~c*vv`HeRIO^-f>lLTO_IIaEcgJz~|AX@PNV0!4=8Xr|`;+$n zt0xH}0__zz;{H;ks9E!1oZ+k}cGv>~`{B|zT`qV`K&cerExghL-twuy{*zw3c(U&1#)FxQ^toIcC9l#wI%GS3Tgse|BGO%%quX}a<#5xWR++e zs&~qq<(O&ufA9br#q}Pen;n-ONyyNoo!!#O@YOAh+(%uWJb?7rb}y(ep>+fdf}u(^ zSy6D`v4dz4v3Nz9Pj}xm=>d~9S;Cy&Rl#~Q?suG%v43({Qi?9I2V5&JnBTcG!%2a^A?Dwco~oc@3wUJGk8m+LTldqn?@=T9S?ZN){m8un`PoW z(st0Q<9h#ZCMpEY9(a78^M`YW-m{I@UBKkog1q=pXpEp`T?=<|Njddr@PnjzH?Ew-7+~qEn8H93t(H zk4=oFUM&z&rFN$6Y>dUfAi*(FaXzM+q%ysS7@dFT@=_2hzIU;_i(s>xCOw9>uu>OJ zi@kiHdB{BB@;QK%5>y{0sL(I@Li|?yCVp^X`FCb&@_^7Ml)$N($*px?o zWTM&Qqbs_fewWVk*1V=jW23Pz?=WNfHBEoHs?leZjT-_+gkw_merIfcr(=izJ1GQI z00^FCZJ{8f_?EQ2r>eI0ylvHcKmRMxy)%Z&eYLHf*+a`OI|z*`#m1`X zJFLFfTTWB@H+t&3t+lan&MK}yE{{Pp+*gW_JWnMi0;8Hgq+-N{n=1Srv4@gD5-PW>SOG%z{ z;R$vY`UH$$6Nyrw-n`YL3Ma0zpO1hPusk|USZh7GS*~|MA)`4h3AOCn=$1@zjC*(i zA9PVs(e3EZU&4sbG3}GL316k*hf{>BUpj`0HUAWZL+;=bo1*1YPee_W$)125hBep3 zzkIrXwv{uNA@%3~IPVWhXetnR^13|%I@h1`WV-WMx&4&7r(IF)8t-Z!BI=`c!2#(h z3n6Z9ZWB*-+WnR%0b>+rUN}M&$x7zbCIZ;Zt=;_v^#7B}&{dq+VRe9=LcW8UCvT#% zHH^D6S210j6(OEq15L?#8`I#~nB0QhHVQ#qCQrH~tQ%RCHk%=ScoCLHjSOVGqUSd0 zs8!&GKQK z9EOSrCfq0Al&q>zgYu=Rb*2mfWqK~PrzpDk3Fg!M&zc~)DOCO`!Qr$@2 z-iq!x@=S{eqda4;1D~xDm>V4b{FoSac^WQy)J`(4CN+BdrHa27QwtyQLtUR@Qe?Vw z&g%c>8Vvb5{TGoHz-Q^-CWE$l$gPfTfN%^a`aT4X*GS~bPIqIa=9Td4zexs2Ry<|H ztS^={YGJ?H*Lo|d`6H{ z_!Vqd!9C|e;o9jYe`f4wSIxg4;SEMh5L?9KP)W6IWbllr4}+YgIlEq-sX?CCzX+*h zCK@N!`abzQbO&69|Bdbd;|UA5_l$;2 z`X@$G|AFgrhYux;wHqbi8G>XAfy^n!Zg*$FKP+({8OY0QHQdOuTJio3TQuHo1RW>* zyHh|*kMH}(w?XW0&J>vg@*2#mYt)rm(e70`+F#=Pkd54Gy;=W^v1dtP`;k3d33mo> zoOGZrs@_2*;R#GD=l=wWZI3L3Vnp!l=lRx=wHLZRve@bUztB(d_oi@G{TdqA!=e33 zf2fhHfC^i2ZS;j4#%5~{Mx@*|G^E+l=w_hGP85fdD%kZnSMZRAT8A!MK?Z6Z*_vx< zXUtLf*2$NvUHx>K`tk|bO1^1o7Y^(CLX+SFb9862naAW>Mg_OeVcER-tbS=j=zM7A z>FI*3Bj3s=?2!D;6CGJT0d5&cRJxLidh1{jL2!dJ>KW#RgcN3Y*Ks2a78GLd!T2iB z7$!45c$tHIV^Yc~)5;rIm^s!k5D~Ib^WeS2F7RSXwDWnKe+w3b7c`DS6uQh6wf5#Z zC(h8K_v=YDDqkf%z(7s^UD2nkix=C#EQ)gzKcL|NXHCnrg0%;aY~*hUvpP&{A-&k+ zEeytj{6&y0jZ{>N&+WmwA}$yMC=|DhKg_u2#TYAyM(jvJqa{~EJ}t}1A-vvh$2U7R z?*^pF{$3B`iTCpOa&;U~L7*}^%7Uio2!U?cnN)WCOzxgCrbeww&$=}?HkO8x18J+v zhf0lRT5UyaLJA{{;PUS{mX(UxfN*MhwjJQQcmGy0F7LghDMh^m$(|P$BSDPRITUS= zH4QgjrUV5aA40N2vEg#Q6CLA9rUXqn{z1gT&(Xrj_Qf9AkPHCez2s(+6pI_CS1t+0-W)^Rzw}38fyhIX-=y&Gg zgdAUNP7c8%X{h*Vy>?Urid>1zAT}P}DTlSuxwHkK74&oYifsPv;Sw3R6qIv(R|!pa zVzdte5uv#gPRH-zbI>g$T;+TR7>(L zjYKKb&CZwa%C%Q^WN;G$Xa4P$!K2HmA+Kng-B5@5#N=d*udlB9oAESAFWy!9uaG^$HPIVd8df(zweKbER=%UYav z!Lo$A%Q$u?fz^ko=;%b6xkQ7A!3za>PK6cmC`_EM*W*042-Sb@${9hrFTAt%gB3D@ z6W=<{Zz3R?T|)lF-NK^VeSLv~z-)W0T(wNa$=+hsm0@xsp=U?$h+L)I z?eT0*z<6se2AAI2AbWeHS+<@0ZZjevy>9x3yF}UkL`A`hzXqkbbj4~D4B6T_za=;FZFT9 zL^HqdTk_!H1UU^&q~vAJrO%tUw_3ye&0C7mi;0|IH|5jP4Jl91P$JQPg&q)djaXjVnV&lEVT?S_J5skE!}611Octemul`Ga((O+L>K*!;h= zI_eToSJw+aQW@FgTDJY(<%c&n<;`tuDkgNCf{)z$-o;KJcPtj zYvx%6Ndp^TRw zjB2D}KK}u6Jb+h!b>Xs6tNd4G`+jun7$Q!WdCpVTT%Bu>siMp_JF`ZSHjcp4?EcXl z>2-KsTKa7+_4=mID42iDi1jo;4Qdat{+g*ESnJ8hYyfVqKLZ@r%xl*w2Kd^t#NH+j zDr6>L7aoWbpBc&V7eaac&nQjxKuJ9tERl1o=JZ%{*|whxu^pVm4CHaWhSbSu{+KsbSzg=k9co& zFubo+s(+pm9D5o2XP9Ke9VNKm8Tv@z=QR39p%s z`h;hNCw_qa&ziA;dPF@pnp`yucx5Hop`y=K@UCk25Vv1wy>l&MfKM+Ghr=4A1zWN502-Tu!?r&izEt+(qli)kmvPb6WtJw> z`8}*%^VAezr`$KwFokQAG6-2ir|oi3^yoap-%?<4qGDkEd1w<3(a^ouk~9B+3t+b1 z==A9j0pi~H9+B7}aN$A|>T4fcvf z*T#tc{wX2hK(SbI#0~X=JnGs|4|>BP5b)H>raO1~)d*+67p3=kxm?d;V)kEHXKNFJ z*S_JAT*;cVJPHX+T(n!=ofJHg=;&SS7|2}3=!?~}pR80Z4*HER-Pky9)1p*G-xqF? z&2`Og$3mvh?_;aF?h~z!1q||1A@VDwRFWEi+tq=YlkCq45<=mx)vijqkC=ix% z^9BSl2L^w?FiND7nSl9q`Q&e}Fs8nG=N_CdHakyO1|~ucjCexew_1#h2)m%v?wu21 zM%q_Z86PcN@U|$D7VSPCp1(8TE z$Y=eI)PZCzRX`KKf8C?tV!MKv#N}o>N};_Kc;{pdqMCBPf8rV4_patz$>g?Y0n!*Dr*d-grRN=tY*n!s^dEjeg=-Dmo%plY(!Fu3rap*?Ju(2RU0`OaqHF z1G?wIIJVVBF?uu}CtBO14y13}b3hE9e^|zRnORJNGkW(&p69b)oLlVE<8iP+XDJCY z%X!;X8sqkXgnU->$Mz&GHr&B>`**nY`YvnjUvo%24F)uU4(EQj^v74V3$)DhKn=?y z`ZxU!+i^i#d|l40O6DdHi-CdCfXT=r!r>JG*z3(HuM49k$F*K|>$%^ZPDkA;*sQ3v zV#_G0H5(&}d3+kLz)5cMtR+W7OM~VmJzrn`7+4(N@Pq_)_37%|_t*P0qY*L9=0*p> zf2oTVN16MoRMElAWY8`yU(IU&PN(&4EGBj7He2_%f#fFJiIU6?Tq3d}+<#W8?RotB$e%+Ku0>oeeiCZQ$x910 zeyLX*4LxJvXntfe&B>bFCn2ko6XEplVn@D z^e?~JM(ahp zFQ68mZCUA9&&0%!ZP76DD}s}=Q-ntWKjSU!?{V8Ko+U$?fll_3oQXr7L;*O&_UG|p zW>GAJvvmRngSH9vN{ilfbr#fg?ky@x=jpue-`w-V8g32EpKhP2{t*nbW&5COy|TKP3;W*Z1xON7o{bW!_Y-TjkAEiM009T=lZm;E zqb@&NlO#&_Z7cGV70xeM<&;eG$zNVA1&VprdtNfL+`mU}K^$bMf}vM_L6aP7}N zePf1Q;JjIF!17jayT`S0-MY<-$2E!8;S-tN>pKb%78k>PjKzmu!z{Tkq{&f!ker?k z10=Ke>J+ENt&%X%z)zC=Gmir%|8 zzFeRYb5{G-OjPh3K5e}AV!Y#V3MZr6piL&M%V~{z`<(lkg{Qsz26&k9n{hc&d-1(( zW^z>$3*YHQImj?Ls`)eed?o56H)MbkuSSeTJcrj6=;d_m4;r2}qLI;xjkN2_{?4hR@Eh90k94t}` z#VuM4j8RWTZpA87Q>9PIqJ&gU1pMyqfhFRL8XS**qn&^56Yancxt6?c`>1|%e|Nr+OLo6w}799$26tNcb!XIUN8A;9OMi~-K zgHD`OF>VgZAt-#Bf6FqhG&DIMp!}>5)nFkuM8Y5)!Cs&P*Mm{mB zrFV*ChHMJb@@{pNn(Ky&lGC!)O7dWc4q#T989b!3?yV}^)O38V8m5(JK4nwsaP?(z zr~(Z@ped-Zrh^0E%zFc(L6};zxn^O!^7eUep>VR*p`4^yQ)v3kyOJ>}d_5cC zy{0Q~E1^lNxqNpU7^ch^YH@e~t4OpZk&Dl2PogIJ^|Vs(xw8|?K2vr5$05ye!+Nyv z{_4OClfc=PX*8b^`>1AR&SoTE;7~C$GJ1ES1aGF=Tvdnz@9psv zb`v_f($T`gcep6BA1g+Os^rY!PiV=ab^WhjBvgz<2X}enPe@l-Fo`BV&CHKcW_YTg z8pH=(s|mm%Bf;;F-?bie zsnLYEVAb@NC$$q9ew=a~Ex5-vEs@FuE=k=La%*S^ugB(c6S4c<#~f z2>0wJKY)uIA*BA@ghF!X!18vt@v)qqy$7l#fq>9wB<91bCN00RS=}&E@_1Wc8>^Z& z|Ajqg^4pt;3L2V1Y3Jf5kr@rb<0S2!T)Z91t*R86(rZKFyb@%u+&$zGrPO>ZB)1~- zIhGV}tb^>ghAI?fcQ-a^7QH*Z&SZ1(U^^q362yp^hzR z%iZz$GPpD(0swnG(ZG$VW;XYA1kj{H5zn7AOrEl>f&1W{r>`L2jvv=-08GbY`)56m zSt-aSD_f+N<`x&788UZkMn3I=4YK65XUsiNoG`!)45>7sxK^|kRVvgz|G~q#I2C}H znkIx~v~sEc)C}2)_`dW*_yIPVzi$8;eSP1V_eVW59Qf{XcaMIcGN?)zc8?+{BC|J7 zlg~=cH{XqsC$S@JM??C)?x~nPZVqkG@{8)>>GO|#BcLL6sBCco;?o!4t<>G)#n0Oq zu$~at(8RICrdk&+u{L8aUvaznaiP_X4d|%siDzatx_YR)d0lTFRi55f;T7<`J+n{e;t2+s8XF}c$>mlZ z{tZm_qv7;HfGb0hi?!RF%B}cc@VQ=}D7F*eh;P2QCN#iYT-xsyY9;yfk*av#D#wtm40^l9OwISUuK`2Q{U}7K+3RT}Z zMIE{zrX=)&${4qP7X=|E29r8D7ykleZk*&Vp8O8^8f-+l(P6;jW5D94gye{lmN_$y zQQVuCqZux{hbQS40;|G(@6EjNMY;b%C#Njwi}20*J-she%_m$R zGw!0yD?rcj=>PG;&1SEJ_vEOJ)M7nyL18N#(!o#_izs4Brp0B-$F;gHBBMju;Yk2b zpS4ir2jKbR3%}NaBfC2mkwd;596JE`o~{2q?z~%3i_JvnD-qIHj0(Ox1*D`$$F|h?e-KC@jOtjJb2IK=j;N0@o3g!4g530?WwCM#`=G4P6c6k-nMGyBnVTszGjs(BFR|uHlwV%+{Ul`q_RuwFlCGS>D9i_GPnJ( zJCO;z1X_OO)f!ylwjkd(je)-nW|dy=?SaElpmDz?mJs~=cEIJV#;Ptb6(2sn^#Yoc z6q@>Y93I@nYr5MI%egvXSx0Bu@J+z2FXS=@Kydo%={;|DM69RlO#S zD&cztMr$%rTKf*!ch*6cZe3KZzpZ)<@SQ|zL*8F`mY2ztgt*!VVSVc0BJT*clSxJUc+nqj~s`_)# zkwYeRu0YIC7$XV{#0!2R(kFJqH%#_Z&=C|zR@J;s17C(5luE`%u}XjjtvL?8&a3X_ zRx3Yp0Ee)l)~FdvNf0zL<{vehw*t{HC(`x=ILERN>G=?07jC_SSq$1XkL%ufY7EGf z39@-93r(mZ0h8!ca zH=ca-lz2BTS&`jvxfW(-#m4pAbTJaDEKB6ZM@3dm$r8}CzhO?oa;!PGW7E)dGebeHqg-TLd9I|cI{ACF}w?h$)I2=Wj zlA{syx?FSnH_kcFIwVnqJ<}kjXGAI|JCR1rEa2-)RFAnZtD-MZgg(~rGa~@LSzAl% zvq){uC4A2cci? z@l=)(DpOTjr!5zgAVv50X!ix!8?Ts+4|537cc#AIf-I`}wSK}5cUye$3cqt)zmB7O zcAvEbvO>u!?hw?|T(=a0;fiW*IfwjW{q!9&;_ud(e}{B;RT)Vc@yASnt84XoZJGSF zGg#Ry>bU9CR$dyH_GN~E#4w57f$=J33sgU7kSUMoIuP3QXc+nn8TxZM0cXhm(D;l1kx4Fcy)frjCaTQ*57zqq1iXE_s z={tgbu?5V5)}YSQrUKX4JB;tE$(ZbSaaA@b0FQhpL@PKIK0ZRH>c}im zWYyw*AE*1$>MKx}fh06%6rS&%WN|W(;GrRXz35oG1J#YSZkJ#y&O79;$obwwMs*N+ z_!m7(a|nPew~*omgg?sTW#sUnlMT&^>cFg)!t<>$EZlT=M|BdtSY^x-AyUZB1OYAu z?ccAvp7rt028!$^S73%zQARt^@h)`+wyu?tq;h&gsFdyXlQAWbkiK z7tuk^DBtw3*%$T?B&M|#_5;bUwYL3e=^QR-0696(fomAg} z(Za}@lBT#p)luIzTmfbNR5u8KwVpD>|F!u(2Ix5QrbBW4{9!}76s$F`&>#Ee9d++UP0}qtKU%K<;%T%JyKSg1XHcsFu7XnK{&3l@yL@EXMo;u&GL!{g8 zz=L|c6h^)x6nb;oDVRSyNplqI%bfHv+NkvlS5)l`vUYD$ucUOtdb|q7i@pdRWE~dW zhjJTZ>=`7|qN8-RSq9_N%Q1QhZml&s(h7fnOIZW7c`U~k$_j1Hj4LHBp<-}mZxw)}{aM!PE3j(k|`j0%Gjg+<4PTjkx9sG;4nfmHq@Q8v{(h^?W;aPwzS7vGYKt3I<_P5O$~fi+l;9$^y=d$PFm-~c9uGa^M`VVd|X3I zVXqU=ivp^{731(%vd#c)?iahJWggz`D{&VqZ8#HpZG@%7^X87GkX2dibloUE4*f%u zAx~9VN_mR&8FWrA|MHmp2Qe!t>W4gRmueZZy8-Za386zI1Q{X$16+uE-4y-d!kyB` zxAC_w4?&8&E85T5^?>! zEeaBW&ig-vZhEJ4P{14xDd_#N`1y1-;bplbD3-RFQM(ai2w4)4DeWfksXv@TVcXPu zHaOo~lRAxzmDA;fQK8`+;v25~DgEr-n=527F^!@wwSPxqq_ zxITvQOs%w1@*`@KqYl`vPwc5=S94G&{lep8VCH1oZ;=w=wQSL`8zU$QQQ3U0;b7)@ zOp%wf5F<-l`3@GDW1p-@vEqF=fs~~9#0ZOJ7&Tn_A-S~)Bf|~@eZ!R|FToaGUJNojK^fP%igQW( z2{iBEq?XCMGq;LCVF^bVlE&1ug0N)Go$kwYYw7GLAK)+G#yPK`$O+@6PGe~;Oung< z8HrmRw8uf^*T)W0TD5w+DQ_^Iu;zG&+g8(i(!E4qlSq3G~t0+`vbn= z=OTwoTqd?+?Se(CtuUjqqGR?*?%?Pofi)2+*@|l&-F8qpu}olTtm7P?8B$dAx4*=B$$n zbb=4XoG2oTJsWm-Nrp>0J%hY0>OLDE4(T&Fi}~-=u7oRI&q51qf&v|_jzOH=QsH8J zPFCDfHEzd7j`7pMtkPmX#v7t2!28K_pv;;7ALqi+JXXzSKnUwlP(~|k!vzb-*}@;F zc8<^hwANx%)RKp5ZkQ)KJ*f8P;NB(vVbnZ_n3o51n)_2yr+WaKTh9nrA? z)3>ljw)U_p8PUL#l4&T|Y)_!m95yI2x?18sp2L%lB6^w7A8c0?OQVTPr&v|@&B7POv+Em$z34B<8~v#Uuy!Z){hHr9p?yCq9*Pv zt2?c@Izni))d*|qlt zYlJW80ZGW`3wzW;i1SOV-sKl+oI;eGq2B`S|C-kQ zeP6HVx(l58nQu!g(g6_DUTd(K^UOTvR$Lr zYnwTpjV5@j)T{rxrby852{#p}g97gD2KAKQ+pl>l+U3FYZx*kKAXu6VIxr>$=fjmY zaes1BdmX5mgFYl>~+f*CNDNPBS|t)r##qsK2@mbtuY>*lq~m; z5_Pcb@)a;nGd1e3XssprAbvbgz>tmV4WAAg@?+mUDUaHT)l;CAl|2ZjmZGdp_>F8} za221K0J{nH(K|O6z4thRl7|@)Oe}^3Lr7y5*|C|EA6W@bilqX!2Em_~lZ2>Mz8lb9 z$8>@Kw@lU#zy$@-k9aL0!MYHCfF5B?43H_8n5!b2{5BW@1cUfjCfZUP#v$CF_KA!z z#wSzLBcaDfMf@p=FBaO*I3k-FVJ3099hn%L4f4|tSM>jQz_>jS1JelZU{K_wikFHE zpErqQ^SCHuw6edCFH(^@OE{J6{);qe#hUgvh&kvTBxf*Sn6Ypa(hLujn@JA|tDYGf zqYdTl0Y(V$R_=Fmst`_Fv)P6$GK?628S^PKs4bZZBH(|Il=>Gg%)Kfz@k!aczf5y7 zZw>L-)v(PE+MvVtS+x7_!Gjz&4{^NRCsHPtr2or9GGzD8yerS{{7SKQW|r{5{_+2j z2l`JZ^?5z+j)XH{&Kr$!a3+r`E>B~2=!Yh;VxKt z-LG5M53B;J!jqp?|{m0`zRCua;&O z{V^kw@$u=w_^6n4+IR{qAJ!!cXjF}+d(NL%qIclHXP}a$C@ImIyVR^oyY_LIW&9jE zXjTS6q@SPiN;u-hEJ@7UXb<`+IUVe!D$(EAj{Ik;O!4aPkqzgsiswnVnvS;S~@Yn8^q#k!)GwJah6oq^GR=SEeC*T^_H$uGBqU!d^>*f zifAFj4n9mSyVC!4tNX8H=mj&e4D54}0q#o!P&UB!B|^ZKu8aNadqq5n{P4HIOeD|+jM*$j|4m*U{f@Z>;ENqVg=kxl4NnSVQv9g7xBR@m8pog@ChF1EMJiy$0QE6TewX^*XRW7F; ze~BR{h;uj--#?e4L3Vwr$&(7!%v-*tTsu6B`rTn%K5&Yy17} z*|WQ+|4FA(r_xyWcWcKtm5 zkCw{cPRhcc6Z=N%Tm50YU|tSHQSN{47CyW4f`g?A_#@tL`p9|B4J`$`48_|h%8gQE z-+?dA-}wyj38^qI&Uyx=%@0m#U*xx^TcVVr7aei&Ne?LPZgilsE`eJ^9?q4`U zz#zu1jt=41^>b%ex`7<<$%&G)@+HrFRTb& zhJY9sj-0bwi;2>dv%~@<;P=G8b2`sou^84!J>-B{=ZA>42E6WDT+jh$i%`slLba^$ z?Mq|%==b}A-f!mI~Or~vG98Y(zusnRMVX3KEKxqSN)9XW58RvZ98fW38 zb~6kKDdN|NP5#lQh{4khsQZWGAFeaGBblxd2S}| zTu1jXhg-TVp#Y%&op#2NdpNY3Q>>o>Acd94JGwsGQmdBrDHs2KQ+urH0nTQ4Ro&1H zBf-h65hjrAJrMsOwM#eJQB%+lfrlenI%|9oj!CRBN> zTAg`(D{kP#S-Q38KX!yIYfl{)zJKK_j)-@Y>os(D#$i+0=raH9hKY&!6B~D+T`r3k zSg(Pk>j=~s-M2|~X+gG5Pn9ylEI@s}$vFol2M6!JyV=}dFLv1RGu#cHEtCi0p;0W< z=;B%~Rl(>G09iVaoLj@4*O<6@Gh<_0uCel!?;@HrtB`Z}E?I6jSKGC5YQ4uI_hvDM z7b_0-$5Z&Nu9r9)U0#@H3)NB7N1VE04ROq+?OWX=yYhKKgkd|DOq+)CDQ06 zjB^`DM$D%L52y2#Ky?z@f+{$wZKKr}zo4K%Ln#BrR=20(<3*?a`?K_g+#HXODRd$A!yTN+{040l_ZhcdP9bmmRAZG))F3mJw*0x~)FAw`L{-)z#GjA$*Js zX>i=5(1d(N*q8fhWLyq+YBdgTOPf~FAGIvc08r~0c6gZM`xiL; z#U@`c3yL8AaL(npy0ni>6JnHAihX%B{CJ-0v0MSSXx$1|e46LnqW5bOXRdIPt5`Zm zLGyO_djLWt#=QwF0iKlL*{0U@5!cM*u+*`w%JQAGrdYSr``1imO6}5uhW)~%rsvq| zRz-f*8yUGUVY~aeI?@|>QR}@^u)mB%l zGL>?rdQG~=?W}geZU{{{s${f?ERM2wkk7U*5urF7R-5}*TF&(kKR>279~E>c9-gNl z)^1k2txhylR8-zJ9r@IA!8qgtBV~u-q%z8WaA?Hv5Q<@Lbc!ukHH|h~9t~$n8Z(8*`#Y2q?&sJ3wPYtOajl?E zCDWx2rK@b1@1cXJr=6~PTGdb;6&V%voxym24k1Yv=kfwj-w~ePUPCwq>)=R{de;*ys+HQAO3+4CC$tEir<|j-~ z&QYZhC5=Jw5g=JDuvGt>0feIgij}BqRoJ-wp220dP`bFI$}70~|Ilhy@N8Z)u6{pk z_+7SGus^_>YNE3^^OUV*h=1MKF%vwb*QmsN7ux$xmwfgFES)y8@gzkgStJ+7QOlrb zfO#ok@kR|PrTC8bbRb%sKo3SH>i=Pl`LIb*dqfWm3=BRxI?^0{9$uXy`uSr4iBJH| z@DLpb$8zuTGABlMX*<*L&+jtd=PP{0(37w#rmP{l_ZwhzE;Bi^==uU=AmQQTdjJrk9M}q-M~93Y7``w+v8ocUt-o3X ze|A9|vW=2fa?P;e=$5J`3E}5Ve-i_Ql`9wB5$124z89cLj*I%|vC`4ad7RM^GM}!& zVj9b!IKe~_XBh;xRbf-&?7n254jhGikC&MatyzGd_(7j^sK>VG z^%#0_;v+b6(_skY+>hkKUXFCUh#?(~SaXaN*;eBK^{tw!g%P}TmbU&H4VvoeB>+n+ z9tV`rH*LNQTNk2*8N!bjaWk5fin+WU!zsN+Pj^R4Pf{mVrzVk%()Wy`v#*t)qLhsh z%}}mO8vajIiev5+f(Kxjkgh~7uRM#zl;v|^B+l78RZHTp0>F<(8N}{%5090Sl5(+3 z(Rk-GYvi9a(pva{WJ~j3X9>=7C2~%q87v%*tl}ZG--WYtH+?DF&m7W;&aFC#lN4EwpWjF`-T}Yynw_bQuebQwfHQ~p?YW%UtkxzbWVLKqkHVG5R$q3Tx z$`Wd)Do-zMl}?2*fo7L;cFQWumHcjzaupUwM@P0WM0^&@tT7?0D3D^ zmJGB>u1`U1o6ZvC!y=dv5mi0C-1vx+_PL;%y}f)bhiIxT*xd7wCw-V8uryeAXHX%osVbl_E{bT*6byfBoHV zWfMQMC%_4NuZil{{*WvmJs+sPI!Bg z6>DK#K8Vu%ynDIDskq&in3a#!LW!S@ES0HJPY~Lyw0F_U)KV%o?mMV5x^OWx{z}bm zRKv)VdYj`D)!f{u&N%?yN?8DJwI#;)q8HK8=vWX+SQpDA0gu(q~x$De(< zt@4&Zz~grQ%ln;j+u7p9VPH5Pv=R7t_$EC0+FS=`fZj1MMwC#HXmr1Mkn=05fs~}( z&xY%-ljg?^&B%yfoT` zy9LD`_f=P=S14}VO6DIi3gKa{GjqlkEI^_R6-OW#T2>ZDAd6$;q9#v3y+3ql4=fYF z1eT4rcTw+8!IHkl)obTtu-Q?}VI6DGh z(-Wm|(e8~X+STCI;xVJ#S)^z;^R)aY4eEA;wX69Smp3;zB1mqWox`uoHM--ci1bDq`a8&T!uj}BCnNy*iy^o4baYHKEr)d(hmZg2 zzJb4jkpM!x9<9{5RXk^mkOdoB%T`c*1+1m*Hd^bk+xr;Z8!ewMRyWjZ^=4(|WSzHB z<+BS(SU6^VUtR*X>RtAA)9m=GHukD#0oW|%(bj=NW3JbXx>hW}r7(b+nwkv>2}xGa zZxpeAwSPz{<7q6Z)R~cTydh;<-gr&&d!HXnP*89Q2ncC}fr0Tb-P3DkruunvSi9AY zDz4L-fAlv4(sMtX$h0Jr-Ae5V7|&wXaJ69If^ocg0kbtz!|2hj^ptsbw)_5bT-KIC z_>d=SVhmhsq_4KSSkbfSYvB`b`*T9DBN6cL#^JM~TvSggl$ss^Xg+0GGw5O@#f)sf z9h}aA>*#iu^Cj$&5x+mXORVm0Xx|z}%F4RHRzRtTZeGV?WvlNbec4BdZThN5NVCT) z*+;N)V%yC+Zyrx4dv;>t1n@p=$buychIO54Vs^+>qZb=r`vafF&!9Fo1W;n=c{tS# zV)kh{^&EktbAWn)4X3>*sEdwv|J zoTNOjXSd-4k0xz;n0I=FU>VEf^?LOACkRTuxvu{3oGo)tAJb!Iwk~7Ov5lwGyo9!C zhYczxAuVgb?qt6?X&O^f!29b-A@AaK+h4EkJ=%!8SC6Xglhjz9oN>f_MU2UR$$Vxp z>j}i$J~Y&6%7QHAUp8W6H%?PUfNXK|Fl^MgscC&i)v;F0Rhf9HT;Hjh#^P)`PIyeG z*k#61o#uY=&|eFfF$=_2)8wWQte?Lnr6$2rw9pUE0D=g*4T^t$hk?fI?ZwFbOdHZl zNX=yzRZ@ZX>2M2v`jX49*QZBW>bt~e)ad{R8Y~;?STGscS(#lDsZ~h<`Gr(~hptz? zqv*lp1?&CKUrKU_`IHQDqcOo<-4(Y%rNi-y;A(2?Uq1> z;bBANI^yQMJ2xc$Jf}-?1EV>O4ytaLSWANO&iW@j26$*hB`SrfNQO$SE|owtf&0w` z`pfHc;C{z)UlCAHzMFHQN|pYkqTU)BQfe@ZIST~J+>jwC@zRICn<8xvWND5Tq_Ghr`>KmyP+6+j(vh_89d6@-b zKXa2~AxCK_`&DbpB`|T;r!SX@Fi*zqVUZl1t(huAU5yrZd~czG7eS+sJx5oXYi|N{ehfZ8qc=ZwDu`i8R5(1yFw-#a@GB0d7<$tbZzcKQL zsnOMX4(8=Or%HK=1Y*|9NbAEeB_nh@eba6%tehH(jZjfP59dw6gGOvJk#ahJ{DD&! zRkPi)mw{tme06^EZW2eJbgK@@3|AaOgI#I;Boga#hr>Ha-XYNB=Xo9Q&u1{OWe6o8 zMhzG-R?bm4zDt|VkOV0uc584E(sw7kM;@F)%vYn?9qiu!$>KCC9a+9idCywQ6#t#0DnfKbNyNzup(d|Q@PX~9C&FqgE9*J031OY#(K&yl}FooP69GrUr zTjiJvJ;T8O(8$1&6b!-Gh|k8ATJcAZ^VA7{@kh%1vqzfyt6z9zU3<3&+g=awSNy)>vDFJTia7)`CEN=l zbQen*{4><<4>y%=1k&DC?y|*XC!PI#v`(zE1)o_1|3H!)b_ThD?HwqBFa!yC{Xp01 zER;OFIR30Op(J^5iepn5SLH;7(jyauTz1RgG8!W}_nmxQc|C!IbL4PNT(}qm=Mxc0 zg=sJ=S|_E^p@02&6md9`S$uAX0OwVRv&&FRY`L{2Tgk81?-%Y1eorV3Sqd@=GVq`= zlHIk1M(6YvBXEnJ4bD2&M&JONH8#6o){k?Vaw_1oRf;3qDe~E9Xhp_+Ep()lO;Qlq z=nx_{nh4XJwH|E8d$?WeK^ON&j#Piw#s*>7sU@~IT6A>mposCxB*B|EzFkF60dV1L~80e^q%S9(Rvcv^vykO1%9`?$CKGb94Cu3mWST+>(odYy) zBw*)Hk`$@Jh5|v98%*g`z+iGC@RFTsV%q6_!?(7*+yUEYwFsfbQ67h;Nid=Lm%#3Z zG-?RyAfvAUdtb`VL%uw8g!!y9ki_!N0#we&U^&5Q{>|A!l$9MBxxv)fG{T#n{({#L z!|pLqq#TS_yV5Z!1S!dO%>`?)go3wWj{3*iYN^`A`Ldmxd}fE^K>+>uzr2(61~@*6 z32AagVf(n)L;u_KCTD&=_q)5l3hcG-nrPWp6myb0hgW>NGvz;MIigl=hB~QD%o}aS zhYy}UdnM2@s#d_Pny-5HFASE$D#W59vZ(6Q>55CUl&AS6rZ0hPVNR2a9Rt8x9bzlj z8fp(8H90I@0QhM!^Wh>;k9c5xpJ21HmH9vbto`GL z6c)cLU@ZFi>_;h(?!CA_-@JrDCe7{lDz1U+`}2RyTxBNz*US~9XmOomsk-q&pb8c$Vt(td75zm$3jE2Xp>&RONiNHX%wmjDG`%;oskd|PRNQKNK|g|wC=q+ zulAbq-@(G}-ZrF>4JKuzEE%70zM&ztDS@S3sD_NR2x*S65YT3Ycla~@idVH62=8ar#&(xZ+k~L2!jEL_! z>*?to99dVfNk+MERS`w$}RwNu&osa>9 zguDd2(77tR+rQC2upx;DDMuvLjA^?+ejkSWFxR7Sh#c(BHmEP_cgEQ4@9%>H#pZy? zEY5+!2-G3vquOYij+LpY)Q@umJB6>$o73?#3plj`LSg84Bs~B40PsH!Nfh=k3q!=O zuaK#a=L;tv?97ms?q2>`g$RnaDPYc|J!=LQ455t^c)t$zF^Lk;gn_nu*>t9W@Q)&? zqF_e?7F5W8L4vbg=e%P-sAfAC-Yk78-h?gh1odY6`fs zk~EG^oHx8a3d$edDDggc9)7!l8q&g0M0{8`WP5n5yb9e$0J2WIbHv8TP!_O;6gTUf zkkYI(0Oj+$1!E|*0yaFi2MjkEY_j%`L#R(P`f_b!F%v$gs49gt|Kv}~{=!&FJ!-Z% z%{Zf+-tJT{UkoN)uGG)d`5iupuAUkl5%IbkLaSaA9EHi)|Nea4H#v!b!JzX4C>4qf61$XwRKzX#mC`yRtLW^nXxWXdcw> zW7a_DYxdMRzn#>$LyI%0tL3{>mPVPdK(@AffG`xMrDVVW+Yr4zro^PA;PSbAQVc-0 zs{Q^jf_s3N`@_lX&Bv=#qDAm>TS&;SS9bSof$kk2k1<@ zSe@zd^K+D2Z?=hO({3F$clX$hg*?o3>5Tvs+8KQ{L7ADFtjdaKVnhiskzK2X6MeQXW3&5#HS ztF2|sSbe=eMy-2UDperl^8Mgis5p9cS?DE*xq~HxY`Kz9&31=_6hBzE-D)iV5atsF zqFgAyn=R%;spxdDpMWBRnAOP8knrQ#qD&x|x z2y~-0mYef1QlD*TM>=_sAptkMJ2>a z4ingf_zx4L0t*iTf~ip#Spsgm&D@Y-66KqUJy2jHliUiWR{0`x5B55T$AyG(Q1A!A zHuy03w6mili=qjTb3-|9I9C*LbGgoGP{$>5F)>K)4ca74Ucq%4<85Q-Mj8I~VtUoi zUz&R2kBD@&En0HQ4H_e-*5N9+v^zaH86pu!fLyl?&VZ}i;Yyxg?=g@MOq~ncnie7} zB?Ecus|qH&@CcL`#4eTuunWyt5w{FphmmlnOxjAXH*vV)$i^Vj)!ckWoP+ z3My)Z*>Or}$Ui7OVAeZ5xv_O(dU~YzZv=Voy2Oh_<&9i$zY#WD#tHUS*@9BD5VRQ&cIU*t<33S)e zP^mBPKX(O!aN~1wC%U#TtzQ6j$pi3YffDGfk?Mbv7f&0Lb95Fx1!>ITaHVG6z1U_x_f@ z0jtX!ZRG6TZdWUy9^9);=FavDRSCia!;Gs?%Y>bw{Un;?D_BLla(?uqDHU;x{Mo^d zA=21rGiZUc^y*3`sfiiNR}Lw!D=TKkE%(4P$>h?QBv5zuZ<9`Qt+<%?`fW2k?qc@e z=bK0ur0FgHn|;B)+3*f@aIMG{MD0Rw>dc|Q0wb!_f5fD`weG*4)tK1o5Q@x>v>4XB zor#b7x;!6A*7%Sj=*;xpFOBQJiZK)v6e#5pp4NtA@nxvY-~Hux1PzYXE^j0D5=euN zma0{o_Jr28GZSNTMF>z2BvCQZr25u2AaIuNz+jZ@OKSwu9q-3*?HJ}}+_&N55b=3_ z+H?Y2lIfgw0w{;vKT%LbKJKYU%eh@IxB$`$tHy_6oMa_(Iq;Qg)q$!V(-RMNI!`PUJ2$%nJJwdIXe%|h88^o2(9!sueHWV@ZuSQn5ir?;4DO8~ zD=${aiDj_hx_aZdd5m;jwMuDq6p-yfXj)q#)lOP&cx?w`0pRaBH}{vg%ii5~uY;+0 zh;X(7-nZ1Xzol0oI~u2_4uo~x6n@}0t_*KH^kv6LC>S?{jwG-vi@ZOz$-aHhnjF znDaYi34x0D1*{h>Ve{l*G#ZRYBn5dkW@2K^n9v`fCkpxff&%%jJ7b;Vk{llerPP0} z>gNCC_sCbiZN*!yTyfuV(zLG6NKbmB#?H>(%+Ieg(HAOLbMhY-TM~j)&Ayb6L9n$m zv@}wQ&rF1gZN@++xcyKruEB0~VOFx7`{-XVdI-6PBkMJr@gFg>s+t^1#Dd_tT~9MY zOtOB0kqrTZWO>`Mwt?dIK#`oB8b2a250kGYd*AwMU?lou2J(DdIA|16RF)@F4$yE- z=IZ&KIABQ@Kor>ZH}wYwR-3xNiwHWdwm8 zkNk_1kbL-i-R}V&>(=Av3cdeF^|C~SlheK7>6(2}6KlfcQg27=G?UdF)nA0@uq}M@ z?(YN02?T9uUv}@El`Djz(Al!FdmYrnYcUaI+m+`x!3;=(iOPQn5ay>kuCp#Qxm2MSC`>>L{T(Bztw2Wa&nelo8fHb zG%usO=7N9orkhPiOPXYAVPgRVlzpJ0g4U)xm;DOIRuLFb92qAla%4vvPw6#nFj<8h zGL+)}MfxH>{3M675Ygsvo=fs(+%Mo{yroU4eXBs&Q{tZy4^2WG*PdU0_ivQi|6v2H zQ+S1hwWl>omZJ8F=SbHE$$SJ$-P~NOUdK2)J^93&lg6wfCuPj@VIOd+l526Hot3ZY zg_Bi>uF=`s-*060skOMhmYIRy>HI06ks09}+k7;>hni$tbVxf~dRUBTp|3C_I`HFhgI1Xo@y|!s0-EA0%uH3;&hx z>F(9*S`X<$qZG&U6H_{{`{(Nul`cTBNt=}Mdf~wCRClcz3wLDa=)%-?OXWa5~!|UoMAQv`AqiT1v*jXwmE93gq)j?T!pa!vH ze5T|`#aJ{=1T!}-s?WKw`3oHJzU$--w))ZH=B!7ee*UDa)@eg0%PIgIoErz%f{TmG zeZk{RQK@I6&t1cxs-lzbAJvIQ0!?u?WaZtvaWubNR5Ze@?;d02e$ZV?14xlB2Wuyq z79$HhSXe03nn6fGqupZyWJb|4Y0~vp17_ZijxaIu8tRzrM2*LR=~<~yyP(uDG!b?4 zG#rvY36E)Z+m@al?aM9>t_v9G=(l1d#`prhgGNkfB7b^!$6F3~Vt_+GtCXxV5)u-` zlOZQ}?FG7hz8xy%s~Lo>nHdH3S)Ny;mTB+-Z2(Ux9L~EXl~K4ti>CG>PCMf?s{mU% z4t5W5%^4bm>NXO6wYik^8gQxlg>1x!Zp)^>0Xh*KRHycjICH-uN`eZ*^ON1kpKQ0J zklIliR`#Q!isn%gmGJE+f6F*2Cwe93Cd4S$1nT5mmO89v$H0a}zNuE+RNXqHR5Z#e z6;%QW=S#R{7Pkqk+ICK%t zXZUpT6PH;*pUl=HL}xVr`0MBxrmdBEDw;xrkiFJG;9cp_e+5oyaN@6bxSM;>=*;DH z#3GBui6$EjIa9pNwR6k8P^;8r`Gr=dSPfgH*@IsqhmBxYxIIw94kzVvUDHRpbJ+Ex zPOO=itBf|901Y136~E+FsY_b*+LoL+OW?=C5N?aX{aW$w^;!(?_f%OBw<}gWtrkm> z8kj3=5K2r9MfCfPRduZS=?D(NV8vTluo|-05fV5=b(Adl1t-!R^kMH5f39O8IZD{#^ zC0z0FLWs)7c$9}TyV=l7IoIwT~%75`Mh+;Ba3`Q#MSbx-WhTIK=b57gPD|{Km0y^CWUBLSvM`zkg=?}zyGX)3*&SOG`LCCBUMxDZ1-H2<5 z9UAA*n!z`$KL;HNOroMkc zC0SN;hAWFofVkeLtArlW`D`P@=ix@!k*2w77<7s$liLarZ=*-z^Wmxq8^g@(919*} z^uY0~=5)VwikW~f4w2XKiG`Q_l-7E?8$7sp2;cq`Unlo?Cc)U=`MYMbtD{*L^PL)| z=!d;&ne08Mw_S-^wbBvL(;@ol`52!zL}5;SD_gl}=@@v0{&zDZ(TFrg8pg$kA7uF# zGH!i2T)XJHT6=Qzg$qzVy8r%Nix`c?lboGyN-`8`jzbIduodKM=kO1hX9s^*WSWsbgZMvw4tQ4(@j0=Jt5M zS9!A6s+8*p>&{#YbV4W8BRAR{u-=}%D$AM4A-Sw|Sy2vlMv*U;oj600k$H#2=714d zUz#0HMwQZI;M|6R<^cC(;8+TlakEr5S4_AY{zF`joRtq zAC{6+m`^1z6w+s+jLBB>K4LVxtLj`Os@3he+%D$@;pG-OkU%QY*I!_=O-IfRxz=a{ zu0=rztGqAprsfh?aGJh=ZU-6%m$B-R!?@|yU^8|m=i0s4Da2;Y6&wr?Msf8|=x*cm z=i?r|EFQm@+GZx}V{b&->(y240;JDlUuBHBEng1MC`;Y#{^Wj?YlG{8C&u?8nJpFN zf)9Wc7hyFu9Bz?svVlIT04QiRvWQa1#BxGXdtAkP9Em5BhmE(HnD)m+cRESD;4T{& z$nSfy$2mK>`Jp^t;Nz|E#XOyPL|^T!@-AebPDh;jeEowHk^Y)xKba%&u<>I|R#nW- zZeJS(S^J+yJN(0N-RgaAr@M06m_eD$(*W9ph!pV~Ghoe6q%G0M1tTkzi-!S0CdF17G{&3G%(Qe2vI|$fQLG-Lb(4a}km^+Ct8?qg08u-TI3=8q{ z$>bAf9>XTfMHEsJl0={#?gHq4VkW_L$9-YEMqtK*FDWml_SGE*nkwLiV{pU#G-9f& zZES(C)@lv1i5jNcsmV!G=2_WJ&)bW0Ah3c?ty;@ev%}S<5@=be67YEgc<|+}0&^ua z5n@VQUQgEd^xDm>e+cUh_J?CMf!N+gv&qcWisXN=Q5Z}q(vWgdVs)O6XU#x4>i_}* zq6m>tKxd`JPX8Q;)I~4Ql(yV#XOCUW`qr$I@RrNhRJ*q&F%n8}Q z7AUg5fRv0~cVZ$R8jr-5i$`M-14k2~uvxD#VSWNafJdm`0_WhyOizzMk0Clzw%a(B zeez`rY1ka*auzd<_;xB?z=y}`{pnH-lR;-@B9omKf6{>Y?axh>pS~H*HE>eSFQ8Iz z^y}9zO=4sQ;E{3Gn$G2~ml|xteb9eh=dpndWZ=j8!VRKCgUxBNSx*&oJQ!7h$Zha` zb@X~@u?GJ4r@%KhlD`TG2^sR|&!7K_xpjkI>_8#52q-ztr^}Y0`{q_mMMzC%vdh)z z_vAWUZL}3J8xMy=!DAWpSS{CBlXag;-g1*vPvddf8yxKoMWM^f%YR$Id>FB-9LRpR zJ(@0ddAXS$PvtbI)#}AG{T%{2LI(j|M}-+_Ku9xI*e~nv2g-Bj6wi_#LTj>SSAY#> z;iJ~W(Il>BtzK7M`ZuPRM0=#ViJ!v{AUyi^vgg|*r$&k9@AqxlOh!$OUfL=ne}$L;=;xlCN?te6U{AdNrVf-3E$bip}`rH()LwaYaizP`)x` z`C6d=Fzb2e>5~c$G_GSoh0HOLb`ecLHA)I3je8%Mr)ITZow&3*3hEe-!zJ!stmy5{ zXQ(^hp-%6zM%{yL+?9ldJ*4@UTLC#Tn0)ZMlxoD)W{w{&7wvc7k6Bwl%ubIUYpo5_ zM=BC9X(qet)V9Ehf~- zPr{`3u25r8PjBns4*cEw?U6dqy1Nuq8viB$)&59`aGJqAgZ4?aSdq+jUwL(ixRv|g zo4sI&8Tq_bx%{X@;HoAhsmTesB2E&@A%K35BYgLG7A2Hl+^ZQZHf3}8M|QEXMGv>h*2NOHwL%2SAc&Ek{)L{ zXnk3JC$Qp>(esWa^R3iUS&3CN)n)~<^tpyo?iZqs{^!6iovG=)IQ~Y{^RKwBd;hqC z6R?+c$F3q>o?r-+iifSJK(^D!Q3=#ySS7I{II3Ts*F;445D=iiAIKj-h>44q#~(X3 zKg~GOutY?_ASMVnzlM3QTsfb&Iq#3UT3GGWe)y@{l;`h3KN0ZFy&Zed8tyVC>3jC) z&noX8<-Et%S2R1@1E&o7Y0jP4t{7wSURdeznlqX+>h5DE=e4_|(E2$iV8+WK0!9LwXcnI;IRA(+SJuOWUo{S zcXmuPHeN*L4REOc28Z5J=XY z93du+S-cT0tGI+%MNMgnQlD6I+8yX`t5JC-s7jk! z>2YxI`Zr>%ocV-eCnpHiyOZs9R9ZQG5+h}CcqhvrXm4Xo2!9-PoF5*h^mM?ZJi=nw zl-WO0FE(1`O`%EdcF+f@tT^>T8VI@$kr<^(Mrfu&b7W6!4mZ?T`?tae?Ea9MCH)Fa z#Ngew~Zf9lC87~>`V8lNcLq!p4!=tL$3NK~E^gDR9VX;>|Tmzq~<(~)lLXqV(_ zZbTDYU9xm>wv?8Z7EzM6a;`=b7Fw=V{dI7BO)BVq0*Hhp3MjJRWQ^f0Odc~ruEPDh zG*g$tOx1vAE;6SedP7|%^*%^WpyK-7Ax06B3l>2N6p_Nv~p=A1Z?-xgrHuxEjqNfvsheQn89biUI+b zqx8>IYMXj9{$R>Q=@59;4?Sguu*;muK&SfUs&tW~EbC>Oy?tlm%p?(JIpFAq>=}6g zbkGs30}3u>e2xad#7?=*{des|)U@iTX<&HJ{BD9`h4qzj39sgiH-S4cY=%ce?(ksS z53sj`w()s^b6z8raU@(%RVq~3J=tlrU*H@{cWaC|c2q@j%isemWpxq?yH7z(FXtzx zEAz*-Q|J(lvLqQ@#@pN4ZWk-+a%Tk<*XNg-C@%6yg8GEb*7o_bbjY-d`YEf%78I3> znVyUnQg03B^&CVI4<{?ZVMh-SGDOJwjJwzGvOi~NigEshw2C2i zL`J#H?Mkr)4YNp>68R!~MK@q$#+5pK5W7L|I~DP|+Ef+wi);gVE1n!VDirHsSW%(C zD007=s*`^cG@!rX1fp)ODldgj(Hf0sSokPgXgE75eFZ`w=^Yb){RU~>m^mPC9HmM`3@`kl-{8jd9ws2ENrOtMCdgiai=P@FUdOO*})e%XP3riYf8ubpmz_YpTx_19&Y((y5TH9v@1nS`eHfqV5f(Dj9$%}I#t|3jT zhYqw&1W}ri@x@~cmVkrRY7sN9IRyXx8^f2vO^|T93aRD87o_=000MnHWT%c%$>fiJ z5~%_fxBoYRxnu3`wE&hjV=JrS57m4%>KBL#yph1#I4B?*6Xes&7gjHqz&lqlZ1i9X zyn*h6%ZYh|&j&QHLN##kK*g6jLHdt>`iO#I@2FIr%OlW=jery5{M|B$@O{z$xZwLn*VKsn58W)n+^5JRs%jQ?h4Gr4t%Sc z>--OIB8Pn4=-Tri+fAE%V-v@1w-b$X&8X$RGP}3Vhu}ZPrF}zIoPU&FS^D#wl)7ba zx|szht(E>YNE#?-NXmR@&10CTDhk=1deMA2+u{^lV3iRHoVT8ib~%NEKIIH ze?OM8kLJ1hAbnWyDRPYGeIdWjk0I_U6dsLVM~8C4j#nD^t&J;#UwR>8vE7%VZ!_esBQQg@uK`-7b!GCEO=^FFxLxSusG7(yMSPpK7oF{f!l1s7?7w}_x?|b zggW<0j+2=Rm>ru1%-U60AQbW^o(A2ySlDf8y$T^o5B7C^z`X#2PIJKb2Be3YyK!LM zNWw=Cf_RegMYJm;9UfTZtH=Nl)a}=9K_sL7HQp)MC!vK!t3?7@?y@U1j5FWw0 z+naiLb6n#6SF6Cm=VIYCc30us=R$UA3cyGUE-vSq&5k#EaNs81;kfVG{na>7wQK)2 zAA7Cf)G0U_PZv)HP0?_fDn{nJb6pH0V!s#t-oIn-4lz<6_d1vce^=`81tD=$nlNEL zLpGa5)+&J!x+0ROLS?+jN+z6AD7NQ%;;#%b{u$8w?(Z+NB)?BWw1gt$e89EN32(J7 z7Vmgq^1E!nn45J(GFDgm_nw*%Q%@pY$Mmo;FBq46-3%L~({IenAUYO>gv#8BXk z+4r|u{CK$vjlYOHMZ+ubI>r!dE6XCM)DgdTO*TV3jzfnMB|(JRSsh-2qCEdVR4^2u zm>Fq~w7V7k#xQwZX2NnJOrNG89dy8LUIi;_<&YAhi-g_ibVCXYEy;bZ(V_Ao!*Di+xy+(5)Ro_&}2(MjSyH8k|Zu3V* za>E1#92t2D1dxVlMKPkWiiEouclII`1(Ha#+j8j@-{nK#p(fpGf4a6!vPLgVoMdOz zMf*BO1wt~;+YI|z*H5M+RqmIv8T~C=p;7%R5e-l1yUVQe={0n0x~uJq z?H!{wXfn;1aVj}Hn5qe$XqHV?upyByiCL~dRKts>S47&>n<9tXm=w7=k3 z*zTG|C}-4I$DJk+Nn~^EWfu=FMc$HI8kRq%dKnpJdUjaSi6oXLaoJ2RYP}t8gO%{C zBH-avteesNLibNGU0oX;u$G%UU`jRam^V^HNu=qf%{_S%Lxq13>0S4S5XQ95UU7o| z>m8j1dWDhr0C@oDa3p&wt*;y+D}-{uz$g57i;wsCV`JGuZ6&ceZjx0DZFSwOflr#X zPMazc)|7q>-tf7U+-Q~>WmFJL;tnYt zGE87Y>JQo8=$hg%vg{!&80?pMOj=X_G&tdi#?P`iVq5>TdL`&5ZM76;}sFhrVcNw;PgXt{&_$w|t|Ob4mc90Y*4 zM+%LBw8Ss*zrPUJn8Tu$2+BzovL)e@d?gE~H!nn_AWIuerF=m`;1YO&pgH*d5y&4r z!8SDZ#ZM>z6e36uT&tgM?+e!7F6Bk%k|YPS7}FQ`F&K;;D@JZykEs>%jgIyV^ll)$ z;r=yoh1$u*fj<^wjbwAUT$qMrw3C3ozOCfUvPNNw;m0vf3D)L`kx9;<9S9G0kT{MU zHlP*o))`3D182ZEk}XdDPtdxx&ZA72^P{>u2JA262x|X`D)p9w;wgOrKCNwvzK#A8O}6DWuVvX8#M zTeXA*6qT#~^Jfr8_*YCDlYmNThpnT6CdSnSToTkM4Q=ikP;h4c+VT8Z&qk==Wqf#6wT1#UEpG~T;v)JKgeK$$S4TMBe;Te zLj}%b@CO74hTVP)uR|h4N7ab+D7m5DSVk0x=j~cTKx{aiY>S)beo@}W6jsr*jKQ@x zu|p+Rb7p~jD!?4gTn=;`q!F=1Jbc?l5h zC=3ix&Cr&v!So6b4yQ*g$ume0$Nx6``!$zVT{Su17LG!=sHoudC%c{ExR4{F&q|4( z>D2K&*ZylEfe{%_VP4j6Dt^4BJ;nvx)M(RIF6@<&ksH{vR|hX0p2ioJ<>UGFr#G_? z-)%wXln65n+!#PG&1RbU3XVXA<1U_^FcCB;`(t?E_}zzxV@Y}r6B%o71YW|NVH%y7 zjWYQ+;u>c3pQ3l#!nNNUk$l+-i4=tt0dsj&*JS9k=*hLEA*Tw(l*6;i+!iJkS%uPA z4pE@1xkrAIC1boJz=1D09#0`WJWRcfhuz&A_DX%>+LDyku?f zLTHnf4D}IvEe=v?SJH8^d{anK8|X+DPzD6!Rl-zOVnHT?#(}SzCm*gnXWfiS{Go_f zxg%3s)88u~xrUO2KG=qH0@IDMQOQ8`t`*=!%ix&=^<4^CX&(r%n&)}ZeSf>#$s7C~wJoVSE|1=K87lFt-m~tiR zWy>;-N;2&4HBg;qel*Ny{{+p;`>&lU@V;9W3;y3f>~6b6GS(LxSEN^%wVqY9MBu4lp3Y|c5;|doW2gnsi7f2^gE<3P|g;+s^IqE=Z0Ih_%PB!OUv8L z@!ca>r4C!r9Hq<+f<_;CR&Q>;g}{2(^~{s|m0-rJaOw^o1?|Qutn1OjQ9BCpn{N9V zjETi37d$|id)wG@rg>EFPk!f$8@Y;i+AZv6@Nd;H$DnpM;eNY3}yu#5RiGO_-mI>0^b+Rq@nnq z2BUSJzVdv7Q?;gib2_1Euvuj|=VexKe{S-3Fg{pGHOTiz#vp9?mCRxLVAPM(^|#xY zAMs=!X$%rZxLP01k%vZ9u!-GB%+Z|(;2eB13B z%knk0n;d_69(4rlG<1!>|KRg2!lG#4V7xpVb z`!b8*t!>X_&E@`rpV94#Bw(#f(%Fst?N+K867KS-Y^%n&KjymK-5%+qB)dw7FVkSo zuvRl}*4W{ZP*7bom}il+XB&swBS@^A1B}PrE)NwewK{wIa;DvATwFGd-|_N|7FGE> z%XXsQUmg^BgN~+d;}>OW^lP{UL`FTjoAv1RCs4Rm+k1o4wg4xa8M8UX`)GY~Ux!(D z7A(WnClo9jDa+)pC5@bx3^e9>!&!4CeRaszCGYe2^h*(;=0>c4!pprD;@LQ-(P?O< z(Sn@Y`|pCV-j?g$ zH^0g5WHcHR7?o!@%DLIOC07Qkk?m`t4C&=mA|u zLc&U}C`_tIu3natwn6`-MkbvU9QpV6`f#Srl_><`D{3=a*>*{wIRGiufZ-2VIL+`qhg{d;n# z4lzqdvw;soU|K5X$I!D>QkzkK=-AB6%pXdbl9h@4(myzUPfHq)MFOo8P;J1!E;@8CD;mxLM(#9Q--{iw>Nn6a~?k6qf9L~#^S z;$&#;F3EZ9=?RYy4{Aj3#|~xdpI)B1#PoZ(q24Y!K@baGUpzG#@XvSi*A62VCPdn# zHqVM5-`s#frB!e=jc#=Ry4RL|Ro>WPQ1$i8vGHu6{=apS{*;bjK{n4>bBlukxXWKZ zMY@SjQ1E|x*h3MII}1a?_};+t#q{9W(PYd*>)6H-Kwo8SFndTH zYX(Xbry*G}FnXb=@1PNC1om*Za&e>;6?%9}z$G;NJ~YG==9z)#3nD*fL5vb-^rb)= zfTmd7=IQ{C9mJ-Ss->6>X>{s`3)T58dlpEB3WDd8-sp=+Yf}B;LyaE(8YVWd@i^NO ztQiHW*Nx$PG&SB&XilO#a@jC$ylAYc3H=J$1s=Y4T$M&g1!J>} z$n%VI-0DG!99*b3SB5}Iw|i}JyaT#~F=tkY28R<2+^y&Xe(gA8hR!{d{S?ozvZ1@V z`0}bBw&jxxou|=yY#ItcGSX)gtV}PDM>KGSJN%j)g7=2X(#kGEtKCtUX^7v|ER0Qo z5%j)!f{=KTj16n2pJ59>E}~KLRuDB0kCdcHsEJZrp})~gzBLWB4jMWsMC@M>(OW$# zb(;Qr5u*(OKGeUC1l{5+*#l;If)0Z3uzrK*qgXOf6s+uzH>A9%(W*uD{t{2|`+USu zPXs;4Ah7sQV}}&Nj8ej}nCojO#AxRJOu)o#toaN*Di&OjW(;C-6qZLua7E8PjpbC$ z23>+t7gW$yL|5$bp$r;+O#ri(Uhu^H|GcKMM>P9dVk;REkD-c7lz|7*&Fm3QI4-6e z93=zKZYw>CEH@5ybouhnJG7e;-6z}?`i_rOSsquNvw|n=K(eNze zaHiPXqE6?S<14lqg?I0~#1kPOcs+JisKe`nP_|6hhuQ7f{aBJrEGC7ku}Gf#JTyDC z|5hoMY-%fH(Hje3hOU0t5N<(nx4lDi<^wm}xskfrUm-=sCKh-D?xFcd3YAYb ziafihcYZK`X7Hhi2g7xAva!$gL9KN7vJvCs;9!klK^bK3T%Qj{T(*rPDPD#t5X zYKruuXx+f|a4AN-a?8QZOXp(D&&{heY6J2WWoYG-eK-f;j^EJdM!%I49d@3 zVD!7)P(owVk@eP_A@gS;$CvEh>vdC=ixc{PS%%KBLBe2@@EjGtY}HfwE*nkM_|+J# z>vK7u5qjA0#k0Xl3i;wnNQRNwOqhNbt&xPY!68Jv;PQ!J_*`ao(Z)n(5cw)ZOD<- z%N3NJ>B5$k!VA$qB3FL>=rWIA!M~JS=~W?B{;egFKJR&I>S9M=B`+=+kp_GAW!%W@!E66}t8T(wNK@z3s8m)iDV_E!UVF{N3aWlS zq9a(S6t2$vRMCxf81l&f5I~^irtfD#AVdMZG-k||C5?GrYVuQ;J{&_Vd~<@k^X=qE zg7rzt7w*1!8c$*>Tx+%}?Q+RBQZ{|5T<~aVtzqC?4@~3ijpy zq8X+RW@>Z{YwY(j)AOm-c-8xZWPWu+ER78mLiA~zuL3_}ECmqPYbh-$%KIcbbKN0~Jx6{7GjF3_tjw{dBlsJQZ&OcWh z)RZ_#0sSnl)ql)EA;@raV7yB}98V}tK}$)}+Mo@`IJ0i66kL;Mduv(lI5ngGA!h%z z|A#1E6qQH~;8LG`Y0&q$8uo^~tievjSo@zZe%{UJl>kKr9YY-})Z%BlF?T0Ef?80Q|k`>;3CN2=e9Ck#Q%n*RtKguhb0RuIBr0 zDsglw%Lw>^ZiIIMJ!2!$@xr-QZvt{c5wnK( zrg&6D`c5*1e0~fqZ6$WjtrP2}->;Quv9j~0pP5A0+?j@1E43cCR}(xLH6*=sA{f4L zQbLl@r3TS))RS?Ir|+OC&l6R0NTf9w>ZERm__0 zS2;Rtl_=)rhvuJXiRW}3{O;?vO$u9$r?2WchZMrP+-|}=jt8+T@U^?C9Uh3(aC1j_ z%92+h5(UG2k*%>qx3TX&og6tTZE(bG(v8vs5_V}AD8zhJ@r4qJk8VpXm8={DfKvq& z40@^&!vB!JNN>`0QEkr{Mi7Ozn-^ekpyHv#C^FIIEXcps@1Fr@wYfy-J0E&!`RP++V+VVFaLB(l_l$R zJPehj!m^of;CUpH%5YPnhr4%AI=Sw?!;5Gb+GOesoE5Y!whlR>WY+Lq)Ik| zEfhh+L?;)KeY|C2}X&UOK z!A9e~LF?{Rr&)xOCv*33pv245D=53W`|5QzztHH(VaB-?oX=qc8_V;grG;yAdcG)K z(s2K1GLyR8pqc4zbL85Q$Gvsa+PL1yd<(`_QFEp>`E(m^LTq30^lJdfQ8o)WMV!|LE`~fhQ^HcKi|W{!$E-SZXJ~d zkC0IIv&)-PDOV)KI9^FK4TcJm1+)0c$t@+LB z18RK>9U#;$15K%R_uD@ipjTZ7`r|eLe%A&xk=lUUkup3wni6z>Y9h)h8WdsEL^Z91 zDfR{I$86ZtJ9PxWf#l<`TPq-8F$}N=0IF;WB>>cN>jGfK!2uL3MEXgcK{)RWb-`bM8K){{VG1`OX_oqhp2;#iZH$*qi#!;j#uCG6@-^ z6sslXz{4*(QaPSo|fvT9TjYxikWl1|hIT>OD`FAV*h)_sE#5ycG(=_4<)c-gNFxa>AfHcdzP{P(@?f=@ zj{O#FM^0sswG3C4AE%hM`=A4|;d{BVCyA;vc8>0wFZz^q`YUwww0`j-P< zeJ&miEh{$bhe&D97cz@q1LpO!U0njwoSg1)xqd{qY|v9#&(uu@$3-$(KlmYfMN;N| zcU!Fiazm_6GhD4!rBzAnKKr(1i!m&KZ-b>l>j46g10bVUrADRBg#4$s0SSVl{_Bp@ z+NPT4{^{ZCF|%&RUvcmhXO7+E^$%USAR#+#_UGggaH_4(cCYZGFRYZR&~(Y}LcS1~n9Mj{YPE|;OPu73 z1^wFUu<@@RRxn8$q_$DfGNcu-mpdTp7JpA=PnETfNX|fKxXpI<*U|Ko4%!{*T*5`tOFWjhz8<*0i*vk?ZfI{<{ z^klJKy}ld0-gCj>M6SEZ_|?77Uc3@b6xOzaM>y&r|X2^wrJmTO3L z>MLaMx=#h9bEb#}@4p4wS5;k1uDfG#?dBWi_L>Kp$)t#U^A~&vZkUeZQqCW5FKy4y z&p52SfC$!@~-#N_i-X3|VnKvmE{o9QDA5$oel~9EfMmY#X zv1nv)c|<7ka@8ZN5{hSU>3#{UZBM&!_d5#ZCkJImYgKZ5hvJXsjY+1(SHOF?8It-aOQ>{>(5`)J!NmO{bOgnz#_7&{* zZ+Q1k!xCFoHEEHRG6hz9ljZE+h!};8Q^y$+cAGE7XR2YYl`(mibmU4c(O`wjSJA_# zv28wPt}RE=k?5;?Ek_quJe|ZkmDpjwrpj^Uj>rT}J2eLXU*)|6L|aYvH0l>I_aO$k z1jypJ@$WeNIO-y7*vx@F%S;I~48v^z{bSy~%6iC@LsXdfyraUg2TeKrm!#C9^7EP) z`kHlZi2LasW5*msM~Vsto7^|T@wR;%9I2BT6>po4pTlnQzSyX)>9P07x4%EMMw@g)qdC%4O50Ce~T8?u%!x$ z$`);AoD1=7)d^PI=_tPc)e@mf6qS^O^*(=OoWYAy4xY8ds3=Hm1byf4y1;QgUb?)G z(Gy5vvw6&2*_^~mNKkoR{b5{-tGht=J3Ks?i1()^dH%jEL}-I*Chv!PkYTPJVoI0o zsPWbG`zvGjM4H)3ohPg8>x+d}YMt5Pqksdy&vT8_T7wl;qqbayerwSELes29aQmSMgci=J8oJOQgw7mbO@Bd{3U>udQd>( zcMSFRg6?}YR;qOQe6R>pafLd9=>)EevS=+iv`hzW{&bRSp4@Sg z_#C@(ZNY?@oNXL#Y!sfqykucIvpHvezwP@zfC$$PwLCiVSISg2VA!FHWDaKt`L#`w z6U^%>!GN^pmmuQxHioY5f?=b!i<;r819X=#-W6(tSMm2CCCJp$;1RyRleyKpKr-`->PW!%Ger3(VrnMea-tmhYfz!p8vPGpfW8 z1&jcU`BX;i8IKl`<`}!UCrWgxhEdBPQj;QKuV=e2V^9j45|e3QYKC7_E8oB_KJHj- zHS3@s9N-&03mR}4M`Zp4CQsrAHW#un(Vcese?SnevxR{g%R0YWapEL7 zrZ?lZMt8O~`73$L3`+LV@AQlB=N?;JZlQ>UJ{<@(4}5^KEFHFjMUE)xH`rjSk?oqk zPDjq0cksZw`aRZ#@hYoRO5as8(~H!!ds^Bum#dAX5Z`+aC(m?P>D@T`z6^l-5RtBI zdw`%mYpxEPnjzmhJO6d!e$FU-K>@n~R{`WpqV6oZ>JceFO7DYTCQv)tF+^J^<`V`` z+cD`=yqMMV%ub0@QSs4uODKN0UbU8@Da?BCsd4yQZPLr925ZzVuS~2ge@_D^^*fOH zq?h-vGo(v*vK>t5ulI`{B4sU#CEmFR5|ov5Z6#4v%T)yoE+<$nx>5XEqP~*a6Q-hk zlZqGveVk45Iszuf&=^{6@6cKEdZ?gaaKo1iDaBk_$6Wol$M>+C#hP$bf^5x(9F;im zv)fhb5acL?F7rDoH>2G$IWdGZ@yTy;<=!^_UknI7k$O{eKfw$7H(_Fh_OGA^-+ZA6 zSiLDvyp0rc%$C94Ub~yBgVq-5c?8&y=_D`auw1A7JWwJrc)It>)XkvKZ@j|-hgxOq zH`-vZ4?GThaKkF;FPwIrKgQ%F7mJR$QlP>$A=LzEs2MC1XAun$pNaEK_Upf}A|Mm) zdFHo7y?YXqQ2R6W1y%5pI3Q*4*T7w$?q1A`;cL?+_8c8{AFOr^fAD4d3)*csZb^++ zdg7ST9>Yg>7M5X+AC`{X>|yJksa8Xh7D{tr~oqy%Lx#r){4MDIo!F5!kM>x?=*g3tmM%lh?v=d`k{(5hCImV*Q5R$N!**w10T_zYHdeYT!Z!gN=q%v`#LQQqn(mc zR4gJGcM?9Pg~)wF!JmrB6ND%v>;j6eIbqT1!iL^>8gJy=;&=i^RI0WMq^}ZgN|^y? z$0gR=F#83>WttZ)lO#VH7u%tWKSg&Y{JUKoL4uI-gE2Zy(>mSsjvyj%lkk5wtur)E z#!Io=YL@SwpAzPgjhLX4k9J6A)suAUpWQcFg+oLJU-X-Aiie(SuY2w2bJdppm;>_9 zEnQlt+5@MM_SE1(xv5|I93RH8$ETEvr3|S@tHlH4x`iAd?7Jlx!!l{8-LDW0?U4 z@#8r8@ES40Po@V3EeD=;sY?Cj;NL0+!6D}&9YzN*t|Zo~SW+e&Hsg3$3PFaH-M~A4@u3eZ&eaSW8SbDp)O5wcLd|ux-}Xt!!|N!XSoJL4qqT$Y&J2lMdEvW(>{r7A z{K+pvzM83U9nM#=(FitvG|+;-)4Ys==R@E+@T2=f`0-64{G)ngj!yR50KV#np{RGF zUwIFAuM&xW6o?Dj;hAdZzWvKktZ(+qtAj z%}k=n>p26uySMDpEaELZ&zZvo#flFm7e`tHSgu-WWLh5y|!wm*hl5v7U7 z+Uq$(J^gy)^z{2Idtj*-;j_#e$VEwM+f z)5hoty$ShPwrei9fG4JJfF$&o$qB`MS}=Y<@Kk_n!;}N2mf=Zy#}zDqU^V@o9^B$J zp2_*|H&3>+ZUJVY9T!JDZhN{7Kis5;msOjm=jo$2K2n7n-}Gdm*H0wRJWhOw_{uDL zF8ed?bguXB20YY`oA_!T{p8gyj)_xnZlBqQAsDCUYV43UPy1XS zIunhf{Il9!vBejo*`x_BozK=v^=n(Qs;yy+<5xA6%vehGHq(r!fIj~9dwPoT4K*wu z3#TK9vInZE@Os1l&jWF6zXRFfMWJx!8EP$c{yIe=*2dff1Rraaeb0<$ntvCQqY`6l zfCYRLdnj={T$J?MfKsq@_ZbNbuAJ6&q;efBV$2_%jp6Kve&2yjao<6p%66@5tT_z>3RcsJhJETO{W0Vy7m_zoi`SjT-t~sJxaK6M zTFki&e4qWkzR$)%`ebjw=qEbd^(E>h=76y7d-qD1b-f1IFxVG?*b-k^-_(4?nINK+ z3(gvcYI`Vwr*)@!`3x>^ZjGIdC=8z->eXJ}M||{Ji~c=L1Lo-I@u3B;#W4#h0$%tP zLr*j6Fk19@Uz-%_Wa$fn*T zj3qYV3YO_aZ}naMWZN!!2Kwf(Y>ipkQ>EtR;KH0RWi3wXCBV4$(k$Ef_paETiKlm z_j=J{C(L6CLpmuh_zn&+EKme?s515XTC{L}aK5p)U7eZ~GqLT&>5rmtZI4J%aW$=I zCfg)rRY~lSqdsr&^*XUm<3aUqq5mY7ezwX{+Dv=1xVox}%gBJ&aM%hBla#T5M9zlE z63qY7qjHqR?R@3~Q6AmPn)rep;rCR_36HbdyPm`QT#VF0Wu>jxQ(RJdt;x^XJ3imf z%IU~Jbb)2o7MeOqBq6~0@uATrhsAjsBF*V)OY@7Ws4wHFBS1?o18wJu_hS9`_A>MDr%?z(4Z_=z`>;OV|Y2P46vWanZGE`e0QF!n5Ul7 zwKg=dP4#_F3NSdYm6vy9bzc7m!Cdj(_AN?7}!&UUy)=adb9&p7081Rl(; zEVj(oN1fVFP*YDg5$F2>U~aWF#}Wb2Cot%H;N>z}4p z(Cg{ZDmt{0dXA=e|L#Z_x~cJ7&iCe|lv*LPdyOW&@OOV3wSh!m2zX|G>At`g>~N+N zTOA99z{x8uwY)*g(z9B?c3VMx;CX%U{tbQdbGAu(`-@kRcS$qn zX=2E&H-eqC8i(V?0)cUO^M{Y&b71ATKHi%hI1ZgF$IXPm7OKpfTJLN0^X&i-9kqq; zm@C>%+d|ah#9_D*rhxV6P_X?2!5o4S_Su9F0PNjpfcee0Zild&+(11Ojv)o7Od!0K z?_wzEcHo1SDBqUS+>yi2ogs$j^KS}LbpzZU1$@eC3SXCU?w*bKes`8~_Uw3QV?vYM z&A+wdRP&=mot5@M`Wz=rfo;+8K8Iz#?k(~#f9Z}SxnoM9;fF!S8&9nB_XFv@$GLan zGOFakTr!$GtS&n`q;=yo<@1cry_E{%F{oyR{Z(iJ+7*lig)T5qZn$`W5^byT>1+b#0%@{ z66&*PmyHN5SL!VL@Aicx{70z#1&6V7wpb2054WEC{)1jhB~l3kd;LZSBk^SjI82yC zQrByZ;}l8KlqN$_fdHwX=k4Xr2nck!dA>cT41q;N{6#7n+VdNYT&R2zyz2^>`^$=z zc@7T@^Z@3pou_U8Fu-kgEBF}6+!X*A#CrbFs_35@w-oN!0Mob|PKVRELR4&Q^?MN8 zRvnhi0nlK#;O*)CHUipt7SDgCC#&_;C|!WVEJYu3o5IJ((UIltVc8(SowdtpUwrAQ z#o^qwEe~SyK(f~5?nv%rCKm$O@x@fH(uD(h^hs+l%~dnz{~)KWF310>0SG}bKzHZ| zAgI0O-U7SEO6!fJ%cKaOmT&vPK|zKKB}zAwoZCIAtQOA%0hAG>fcXyA!1n=*&liL_ z6ib2vWP3SgIN?9JBl7w@JL2+tvALcvMUy08!b83N8)s$#pbwIgs7vzauEI-VRFssr zb3e3k{XSkSa%MF7>^HdlJX|~?5$TJY?AC*35E%bd8f7#+rHdeNbGNF@RWB6_gOERB z8YG2f2KFq(Bb3Jrl($a4T18|x51US0j+m>P9ehkNq>Ac2nmB6oeo|aq!yP1OPXIcB zsdlHnfol#%V!~EVVHM=V%r$~V5_IIh zNA~&G-P@PsYDKZz#$INsiOSuSGg7`FJe&fD95nE15ds%on4VAu#i{Y&VxWuCi9oMj z72*K>6b5gWZ2%h@JA4ec*6343vMw_)Z>ibk!RWK`ZyzUz^|2GfgX(GHi%$o?@cuqZ zSL;LrP8-UUXrvgKAM12}@zmWdb45kfW*Y)J4rNBW50PvM?fx(urkKclsN3^C6jJms zAs_zLtQ5TN$KYJw0!RT|^wVJV=N#*4xGAL7zN5%HRIZyIOLU zBQ}<6_+3#{s!_iQWTvmD{Ku($2Zt^; z8%dtB`nwa94k~1Y$yE(EX7&mD?^4j$h=NkBLbG!T zq}4r9AwA2+!a-okmQ~|4Ph|?|8d|MBt9Y<$PC>9}3i&>5k09r37&U8XfIdQuq#_Or zPX`5GIOlv(?Q3EckwqRa-5U>2golT<@#((}nZ$?z9(gnk11Kg1GqN?Nr_Sg7Gdkmf zmn(#S{*2b<&?lpCx4ZSXB_`P{*-*qwdLY?-BQTs;xs51(a+r8fo_$wCpR3K86z3=S zdFZ@7wrHJ&$7NZwyfm5KW6IWB>yO+woZ0@=?r3;dtIT0vE-Jk5)FOWv7gqdKnJx0$ zEb=`PC+xX}Yo_pgr`#|2>-USPzr(r1L_ohHS$R`<&S_zv_#79yf9ClVlX`Cpuh#V7@h&d<0B1#d7%I=&sISk zyR?^gVNn5_#BeANVnbxR%_!YsS?hMo&uEw~*HiQi9yj=eNvdqQb@x{Q*YtcFb8eB% z^QRzP72cNJTJn=fS?+cS0h=kP-ePKnJkOcS^Md6bR99`hwV~AwLBZ*Qd*a$DB_^r% zkchrN@7vKK3*cR{nCzL}-ll&QKw56?k&Bg0?OiJ-6#YmTF1?*~TO^aO^|+c?#4u;R z1Nvb|!NOLzVSARN_Fbh+YaEAGHo6U`oLhmqD!Rc#uOyi^{K76_z>?O=`Evp{8~WjF zBoz6=MW*a$^-P5@drD!uJP#_{ciuu{v<8Pwwuk!{n}=(H{OgI-mw5+5N@VAdg=D6N zl`w1>2X587pUhf#e2Say>~O@?Wg_UCHV$lQm1%V!S@da(blH{-n&{PoynmgHS+u?k zkIo?-&E=xxbEYw1E7Be~?*1G=$-;j?@^@&i6t5qw&Dl?E{F)~vDb2d1LT9>^0Je25 zE3T3tOJ|=DS7F1172bS?h>Xotr-f%&!J#N~I^XcasnP9jNbrZac;QCN(=%s{R*WPp zL5nvX5dx1`IYi{(859LKl%-Yc__BTZhTZ}#MZkF{^=v;IQyom8UsVc`O$Jpi08w^W zu;go+?;&pSdY=-aw~2(MRSSCF2}VIC>Ap3LE|(TSAbL&TXLFEl%JJL8?;a2nt6H+$ zh@>nkVwRPYD=$^2YX*6@S1;i)zB-5(F*(s#rmFrEO3&y3{anE)wefNO6Pr?$s4FY% z<;AlhEt{j_R^(z{|BxZd?hs?t03`kuNYj!W?qBk^m>N2%JFtPvDWhUPT6X;aUk@;f zMuwVn{Nu;XyDYOcNAanJ1DJi&VLU_ zgNBl6Wyh(fpCY{9U4bw4>4-t&Zg!ic8w{BrWN0Mpqm};V(;o5cf|#9Y6L_paKt)4u zti^%<{V|TYZ6+%#iv(acODvYEPzzW==+inhDpb%~3MUf)i0e!Pr`LWI!4@1(sp(8! z4exi5+u}m0%1dFNB`EAkHQcf$<5e{-#e%mU=ihd-W}ac3w~Ng^0Cnk0QC!) z#@oI>=#={Tc|X=@v(4@8b;CJphl%Cqh2}EuRHSDay1HI(%;|4dH4WnPx3Ygu`0spwaG^! zKAiR~@d1@d)j+`M32{_J3O0>@OPZ&fHqg`-zi?8-lRwn&Q z_HM>VRm=0*@YFhzj8IhFVbMUzdI@cO6tNCJj>fP$etdwHxn25t^Okv7bk~Xm56zCR z{-ix>yfT2o;~pG%?20brfH6dkc2c zL0a}PjV?bVF|R!IA-Crdgr4C`d>0Mp>v6)7s-yqWh)OZJnzV8*jc?(%8eE3()*dDw zA2yW64Xd`DBB>upr=Q`rCg5t8j9ju8&BwI9Er=OG*3XMxCFCYfyhb2{BUq;iH_bei z7C<-U)zw=y3T2XOWZ7Xsv9%%b4}Bj}q4fJYJHH=YEAn@aVv-0T)B&FwN=ut_qiWY? zWm3^6_~u`z$=4ob#mnfYbj#o~NnT3_)qJAO-Ja62u^dohCv!JW)uCMbL*tGwJXr>Y z_2(p3TflVUaUcYi1?E@(cQQn+CL~=WJ%bM4CkM}xQ%)iV2IDuU+MH!8 zJD@JA*Q~G|TC#`LrZ8W$KmBgkHkGTMKT8=bI&nCj6q?FvUesW{D6QS=Hz@OoUg+iBh@2SWN!4ZF=6qCBBsAa%nW7M<$ImBw8)FNcF`$zbyR>OA$ys7g@} z;2NS($l|L7fk0^h9{;9ZE$;V^DAlU_7A!B73&j}{)rv77pA!=u16}rVtuYZu@YAzz z)b@l^!5mbgfKyT+)^z$O78cmFf~&#FsZry!Lzyfoe7Og1b*e28PPVnJ%%l=9Xzk)e zBQ-40^^v1}7=b^PSDz*L!MRnISg$qlCKO#TQTs=7kBVA_2wq#he`=r8VY3?ZAlLhb zBAl)B@2>7z$IlSSu%M5-g-I+ZZpD)q|Lou@m0C>QmWSv4fW1Lp$YfY!%^1r2HcXX4 z<-q)Y6Li~Mh5Q~lN_U2JUa@kU`Fe}$q-@{E)a_`3W#J;lK9Y9#zAE1^b2Rk57m*;_s;zok9}L#+RItQOZjPU5Rbg*#S~C;3dGA7Y zaXS=DvZO>zs1_Ys;=|eUzOJs`=t_%+M&zQ`{Y7-xj^a!%n$$Asejw=8Bm?ulCr_aM zsZxkn^)8FkVJqhDc>2|0yNigPUc`8tmHxFWDK&Cn5-+m9l}WE{gaC+NVm0=mlVz4+ zs#XTLJUn*(}a)u50r$K4<_W?~{9R~nRsdJBb)0g@P^*JWI*jh1iS7JT0| zpOfx^qZ%eb;21}W2C)RD-}i+e7y-n37QlTX^iJ^cypOWd;mO*a(IOg#{KjM5p-Cu+ z+CzEA*K6Z|7U;vA=&d`LWB?;bo;M{10~@~kJZ*$?vDMfg7n4g}J4Zy>09D!f)9N(HA{r?W54eKR z4m5>8(8xx1^7#C1&-TbHchIDg`1u29nS(MDIjkq`DO;6q1^8chMDFP zK{et{Fw6$F*3z>{NXRKJAGiV7@a1|kptA1{(()34fmQ*x-!UWL0RyY6tToD9k1>=2 z!kpdwZ+5`+t#I~XXIi+kHyfO2e$4TYwHKR#X^>_0!=C7d)IVa3e-JD;9! z_b;!h5*hKj21@`uyzC5k|7YT)`ZAIU)3-^e<+_qOG?R@n;Hom)RJ(3gG?FQYX zDm^dg-C;~arbo&G%p4qws8O?wt&Kn~x06-n(k0sib`073(oejU6`3-wTO>JTgTm7LYCg7j>()QCW>Uk#N;|YBk z4ZO!#=0oD8;)5Y_+{Bi+6h&IXN+@So)0hM1Kb#+3KL*L9Bl7p*m|CqZtD1<+&HRM6 z_FxoGi4fYzz{>)PPHkjjLXE)>-O34=VPBPwA3yQMk&zg3v(~e+J^Ca#Q@)%a ztQO0s-2t!{OlVlxUcNzkp}3nJkgPHes8rOR_u_;LR$J|b5q%bC5pTl+^8-TD4CtxMW6|?z1Zn!nS-kscr6pD3@n>54$ z0y!PPBW}`Jr~%k{WCH>qYCVspiOEeC@-lj(o_ zhW@N*)CuF_%AVZvbA4YHQ0MZIk@-u3c_P`QkHPmqYRFe+?H0ydl5)up&aI&Y#n`=_ zqW4eR^!2sNmNf3iH0NHaRX?gRK=XtcXeL|&iI4{ftdz_XHN^QR;{ByS&yEZoj9vv=xPde^Hmmwv(e^I zR(h^zD0Cqq(rjC(Cli2sW2H(^oX|#Ya{QYnt1zi(;5_4K!ZUF&ND+r2DLq?ip-LUS zMwbVC(YU!qq97+{2@932@iTu6K~D&oi%`&GM9g}S@6Xhx9>K`qRI#Ok_pT?}_FO1b zSk#Cgce;T0SrZJiN`sayi|w0(Mx&{6mJ8BM(4ZJx>Qz{+m)jIF^|k4x{^%YNozwUH zf_bE02=|1dNSsLF>=*y3(Eoq2!x=r424S~3$lKoO!Vi%tNp@ZDai5#_Q8=W>nTf;u zE}2(7XET3FP$xO-S=K==L?>oC27~JEx|>j8^zjBnvGr5n5mjyNUtaeugiXcY-6tPe ztuMt*-+m_wCJX*hhtsyyG>t<1LNBg@j!#cE79U3!h%BkuAdL_8`@-ll#%9IKId0$Q zD9??wh}GT z>Z;RX0|*5(#@x(t4^emqwLJJOtX7W35FT;5Uv0Pkm(LtRr^3H`GOwOAAGhUwJ4I3f zPj4&2sfJWugYE^ZOhFZRHJ^9@^Qy+VS3!}BC4E2Q zXIO@Bt#Nw5y0(HmxV)0rQ(m5~$$bG(=<3E1@!q&!ZgyL26n3$p=U4lT@4|EW0<-w1 z??PO8f?hbM+`ElRNUS9ukLrWC3P28FkHUm{J%H3-2s!S;2t4D4gF6-*x!JUJB4T4> z-!D2Z5rGl;d=(h7OGU=fRA4y8f%af!8E675tPCmp#m)q%=+7{ZfgwFeyTwNIaOqD$ zR9-5krU=31uoMJF1E<`m7m-r48j{oJ#WJntzdvCSvA}?KyuA`GJ{zWb4N;FuMMQAArdCzrnb z0Io4PAOvTj6Cf)h00-v~Hly|_W2}B;WQ(GMayd_zSd24UrOt4~m_Qs|JW|qLpl4dK zx7p}uCKUztIdq+H@U@t}iB0QwxjSdI(BEe7`{he=07q$awffxtrsd-EDO>2ZK1YcE zRXbBi4VD#psRD3TjH9D`SNj>O^Og74xdwafx1hz1MF08MOicISK^J@L?WM|}C?D^o zq;FL|KXrb!x7q0nwi*=np-zvE03t!cMvV3NKYjjG+wm(&(ofV!RY_}{KQF2)KjH~n z-&wT#K5N2sB|vQSX>^)3$7f)MK9?Nk?5D2%v7L~E6%Zl^AzRj2{d{cYZX;&^c4j8B zI4epJG?+Zrb#84m?>pC6+a(922U)Z&8 za93wfWwyMA)3jDWa+{z#ut2_=F6>NG#$~;h9Q5L6xjZcs5E%>Hw2Nq0`ziaUeAT6v z+!p@O`R)5*oAA7qOVYlw$cbdTnYKi!+@m<*o05gWGs5$a=yrdEQH+j_LfNFHxceDz zx*F;qpQU>wllS9=kJ;|p&Lc_5x`oGWhnJn!2ZQzEP7>9&j(VIo$;K=G_DU1VniuC- z+S1@HsnvBWpRZFupS<=R5tyD>BKCz3zvWqcgv`m8MHQX z=sjM|Z2)s(1JM7@{>?6*G~HguBy2jJaBTYcE$h8R{IheV?ggC3`t(1PjmR(f+nF!| znvg>7`#h(ckNk(J6B*Un!qEC`^L>=Q*+T=UxkmcF>lx47);6EE>P$k3u9Whqn5NC| zzi7)PF%=KSD;Y!^{-pjCB!y8*S9Ats>nASUm7$8C<#+q#Y34$; z_X~ftdtOh5m)qLD((q;mo~DFq{4ZC(t&5|$r~he>-Ug%latE$K2Bb1-9raVDaA|}3rLQX;A6E-i z2OpHp(>_khMXD02gIPa2lnp|U>kbFIyMhj5a~m(WN8~mgHD~MD96x-Us8)xC)%F8S z3yglZK}9sHQllrGm92ghkaW!i?(v@cT?{pkXBVG4{)PH#(Vkn*$=)pB&v)=dBSg&g z8dK+8yA1G#l%R>fvvi{71U#Hq!av__^;W-;1+76ZV|bqr=-V}uIbaybX8>K{T*mzEXQ%bfBi~N$`>|~eP7P8E~ld7PGmoQ#HrJ}i-{Q_K=o#0 zxI5A0av+g#MOH@nG_g<2J!Y};2fAG}!boK%GJT3dI)Q4Xbudf8(muGg&x8E5rG82+ z?*qx27Q=>=n_YCURfn=xXMCCT^*nQ4Xf?z1dAF0bzn}kc4W@-Udpk5Wbvt0=MNd!A zZ*^(__6GMiBg^6r)0+5sO^#-&ulVSvOZctJQJ*)pT-)*p(BBxI=vG4;8}Epg4dGrQ z4*S2=VtTo-?3E;1;^yl7jg0SMF-R*UEi*HTK_-{BmOq%TLvd2KiM{S#?T1N|E^)># zGq!U7g1YZO&Vwo zy?9WP;b41-JtUFa^71N~lq3@H_wB!rP_Vl?b~L$0S@@GSlj~gSpH`aYss9v!sVq6A z@C9`|fRx8M8MZ4$jp^NNVgIVy(CaTPfg+5J9Hv9&=OE?&+1-*)=m{#rYp(xpZhrG7 z+2bV- zj*5;gIXH`&s613`SJZESAQNAl_A(-F4qCVQB#pF0WiU}A=rA;NWef6}?CT1dN6xl0 z7KVE~TCsgAFfx*B@_d|^|F%xPzV^#a90;(Sd+#MB#UbjM;h#+}i`{XCG`G+mB@l>R z;F7-rShOA@HZBg6C1290ub=ny9X$UjNpW8lw2SqiOSLUOJtcy*LA_?!Pq&~%w0&wps;q`<*jljm(~7J;-xeAXyDqn9$w6KajM^XD{rK-*85_xdpNPzsUFe+e zYjpY2t+ggfgQP-(FNBV*?>)#fp6BobTbw*t;vDTFuR}KQ7svLs1OywL^8$on!p?b3 z=;Q}ui4#|Hjd7(3&!{v42j3!b^n2Z3Y|q%t_U#|egpEdP-ot*}vqUOukv}~3xc(|{ zfRO(AC>r(ZcH!eVn23M!X-3YVQ%u{x(s&(?DOc}GxrczH>$NX|5xRxn*{q+pE)SMv z#G$Oa*Ep4Dhz8m>pik3jdj&Sz6wF1#?VqNE@>b|O82Csckjm6YCq_#0_Q@m|H^8& ztv`1wjQx5IoGU~g44^P8N z%($Ha`(1tfpA#QcisN_zsP9SkH2rz+uQzh-xGwu?)pTwEKGo3_F2Vh}|3Lq~o%)vnL}m5rNQ)cwPtAWq&3m z)SzuCWND=oADsOplwbG>l_Z*-%c*F`2O$>aGb;2x38CV~>tcywRxGFO zY7@S^P(TG5)6`Q3k|Vej2p5e{{0c-{Y&!w=Pg&HrLP_voDEL&avzyzN&))?)%<7r@$JDwnVj<0K?No+iZ^?#oQX?J)IH@ss+mpB2dFbTLHoeBH6U-WCJq9P+*na>Uo zT0wLJ;ULEdCpS$twe!1+S4ZCL?E6Pj0ge+FzVUhXJm;h7jUjA?pNGjVq0nNY+*U6w z@)N1mD?m2O?i+v8_`B4x5)ecdA4ol;lD}H|MQctjx^H z?@i^Zq?6gam>$!nz$U3BIA7GRST4n=cj}2Z5J3%jmQ`+F3Gn{XIhxElZSa1+`GO&Z z7g1PKu}MTq$bbNwGr_5>B)=yThC-Y>j(obio2dHbI7u3npofGd96u&v(t?e(S(Y`1 zAOCKWO8)Gu*E~BUu*dgcH!uS8p=Tty$YOB=@63ZCh0ayy%Q4bV`#6PChutTzI*Yxk z&&Bm?aHwXi!&KR1h<8I!u!wg+Xzxk+r_TgrY^4JFBgP(*S<#zy5SFt=AuZZ*S zr;_R2NA@cX#q&U{&NSF0g+F6_Ql?hF@Rg+#$#L#UxCwbG|KOPYJA*R7?(`V_*^Ltu z6RSyh_>pjtMH6UJf=K(0AVVX2hMCHvW zkg_uKQw;;OJMQ>)=!Tjcu(ckRi~G}_fX9Js@C4cA?}A6l$j8?XQn=4L4ki|O|5A4s z8i6lVBL1uH=wi$h`SJY(zzIw!ZXX{u6E{~@Uf|XON<3>+$kH#Vv!~P!`WbAdR=1B# zPHM-G0CV99az2@Bp1=9D9`*_VAum0Y;=P;gzs%2mq$r(c9s3eJX-*}KI{Oloj@)%c zY+VBQi`#$T!dFxg-+zMAp_{$#*SkOAP)V{6xo6+eG-7$!?w|S&pg@E5H+ zNGDcVq(h~qSA1Pg7n!15@Fu=HaVNQZX24)&+qdWS&KQEo4V-BLjA6Er+}U@)C-bb0)ulhtdMt?pU}Qg+JUl?w`XYG?$Rz(ec{Y0Ug72RmG@kPiVL`&-Y^nv)}r;lv_x4y`iDncaRt z{iNM`TYVBuL)=Lio{T?FwtWb^bh8k2%$sn9IkSLILhQ$S`>(Z$6oyA8T~cKC+u-;{J%~Jpj~@89_;!$u|V+`+Rq411^{Q!K@_`YdBa=3bd+Hs>H(~32d=FTx-EC z3nZ3M;$~5i&ec21^~V36LlNI!DOH^R?rV7>@0Oj^KlKGbpQ5t|YWn&+P?$VQ;js$3 zCj=UDK_?02_yICaYgy!B92wG`{Ml?6UZ<@dpR|(`>%T6E-CJZ9LqFnhMEM%+P9BO3 zj;kp5Pr|;e*XsAWP=yT^SLCsPb>;~?fSP>TVn-zG>+KR)qx{%!P{&i+AMS+@w_oSKbpK9c_5(TW41E6H zu`)hht_Dy&OGz}J>Yd9d#f{zevH%WBUwMKM_(^}}=GO}g_N!oHiBK;5qf-3FqfDQ9 z)E6eJF-pr#i}Wk;1ZW%TV)`9X_{j%}unDRc;S-v=ic+TwN&F^H#x^=#=pXx7ABbyQ zx+yzSL-Ly*02@e&>IUGCOaBKlsW%5dom`%uZh?6l~c}Xgt4t^~lL91nx%F*NX<)tB;H*ZoUH7P}f>e#i3 zDkVRaX%P_OCSPzyz-$C8443@J9fU>UGJgVM=qdHDcZYw-xNx(JHl@ZEr|LA0058I&kj?^{1#r%em)BQr zA^~@YT(J;D$;0U!ZCauxNl}V4&Z3|8Ic%nKm34J>b};{5#*=6>#=uqq$}0tc`q-uz zQMM{m2K>vSiv)xi)^5(VTE4bbu;hy|-aqyYz|&{~0s^YJY?i^0cdz3n?jjOm$-}-aZM@a z8;dq25AX55uK?uk4e$)FI0z&4)ySb~P)>IWtwsZLg`j--K~7E%0A((t2zX%#+2|!+ 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 A>i_@% literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/mafe_sprite_old.png b/workflow/public_html/lib/img/mafe_sprite_old.png new file mode 100644 index 0000000000000000000000000000000000000000..f09c069833f6ab642f13a3cd1b6101c304ff5719 GIT binary patch literal 59867 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 P3Gt{aYb!M>*hc+-#!l&o literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/mafe_sprite_with_zoom.gif b/workflow/public_html/lib/img/mafe_sprite_with_zoom.gif new file mode 100644 index 0000000000000000000000000000000000000000..5544317d6ecf3b52691098838c12432e266c44e2 GIT binary patch literal 74105 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/mafe_tools.png b/workflow/public_html/lib/img/mafe_tools.png new file mode 100644 index 0000000000000000000000000000000000000000..4201914ba7a21f3d74a244f4ee2ceaeaed07188b GIT binary patch literal 18255 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/menuParent.gif b/workflow/public_html/lib/img/menuParent.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e375622ff951a3a3f1ccc668061e81b9c93b411 GIT binary patch literal 854 zcmZ?wbhEHbOQz{a2h@&qVP zFmM<%@JmQ|Y*@g^%E=?8;=tJG)Wo9VlknjJLnFJO0!M|%0mo(rQBEC(fQyeBCb4lX KFcA=7um%9T95sFb literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/moveUpDown.png b/workflow/public_html/lib/img/moveUpDown.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a633c43a6855d33843d2602ea9fc32ca984215 GIT binary patch literal 1368 zcmaJ>eM}o=7(dblHlPrLLFT61u1IjB_tDZqFI4CktjmhXkk!9vdp+o-+{f+?XmJ_f z#)y)@{Aa0Q3YMW;HZ@r?Wk8%m(NJ(eVj>ZvL78l7HV09r8>?>_MgI^lxqIH{&GY*` zzvmh{O_6Cnk(8Um>P%+g`+37e)Qap>gV=-ue6#yE7ic125oAT2#?4j!!&WPL@xr)Gy z*N7a}IdF$yp?%E$7Lh*GQc+E{_$h-IDR~Yq4v>I=rDZo9U>i7z3>cAhUJ{&R*BAn? zhsb^-@<^1^Q3+dkk%o1sPEFxN0bFQ62^~>TMC8L7oX}#p79+H3LPO#PlF-2$4+64@ z-a4|%TDFl3ct*r0%L0jE&CShdvlivWdWdD#G#WLCP)k8hb_dj)q>3|GX^9dU zL1uUkjxoADe4}hcfYL`Lu)-!SCvCI|Gz<&41&l!PSV{3fhvWZ4S#~p8lB?){^!_KY zR2>v(tcsTSMv(%8t5d~N38Y1&-7+s$^L#_Ri(k+}%hnstS7td*x4S(=mM zSnnpb4BrwP+XYqtnXRO-)U?XI>i_8Sy_G7=4sj;kWp_#F#Qe8)fa%Q}zVAUm0T3T9W&gIm6{Bs~CduV7Vr1IYb z38$y~N}_G^C!UGyoSlod-(KqphkAN?R&UM@Bz1IjjJrIaK!4s?TwD}Ze)_UJ?>aR6 zhP|ey=B>WI+U*nJ=*7~u1=G1*t$S8XxyQ$LS?-p@rKj5x`jbkoSq4DkQhb+lX7qKg zhP&b5>A}&_(ZsCz?Dktfsx5)Q&{8W>DvDy>+zHUQRydlCb_9dL9eJFezt{cBCd^&GRZohT!Tz@}Y_}y+4!?331#fdkE ghle9KMJOQ=dg&w;IhnSHiT&&BwhHU}X4fl!17K17;Q#;t literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/moveUpDown3.png b/workflow/public_html/lib/img/moveUpDown3.png new file mode 100644 index 0000000000000000000000000000000000000000..9d99626b06f49fc7f398912d93d4bb80616a24d1 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^AhtLM8;~@ry7vP}v7|ftIx;Y9?C1WI$O`0h7I;J! zGcfQS0b$0e+I-SLLCF%=h?3y^w370~qErUQl>DSr1<%~X^wgl##FWaylc_d9MK+!; zjv*HQ$u>1VKGd_RELgIHW!d|?yV;i|HgI|gvs?*3@#D+OU=j02Oh;y0yvi1k_-bk- h;SevpazY~`gJqpcP~p=Hn}Oyqc)I$ztaD0e0sxxwI{^Ry literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/msk_us.png b/workflow/public_html/lib/img/msk_us.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c5eb640029e747917f5910654c37305afe5434 GIT binary patch literal 1138 zcmV-&1daQNP)$%Pl+EpEK|rStdSe_IONz`#hRCr)UI zvY&TV;n@(aC$NhW2V8megKz)6ufBVM_}S;*@<1UAT6^MzjyT7eXg&Vv&PqJj7^n=E zUHag%^2*1Q=b!(O=56}3EZ!bF<$ zaH+LOg`yzaKL$F1V~@Yd^&WlG_W0v(WkRvSM92eSI{dSz`AC(~(*qy?Dj?QI$i;vH z5abSWJ#ix4RH(DWT4Wx>00K||Iw*2)#pe+wd>%+P65PNr2tb#cM2o!w_jX(!VZxP! z28#z^pxa%dNl%>P6gH2bd*Xz#6z9=_PC~fAoB-*35iaHzcs(J&!Tff*uT%-cAO;1N zBDLtTf$WJBNk)Qw41*lFsqkC@;&sR#fqMefjEK#iSZshjp&`P4krr(sT7n`gkp-X@G|Uqx+*QG8Y{&siS+4zHPk?+wX>)p@ zfU^=es4hFfq$9?DmSKnj7iFGnz}EF^CL>_w#xR6|x(NGaCJj;ci$mEHz(VN~6QMrw zUXr4Xoi9(rk#FQ^9O0N61mx7vHsep zxD$`R$qZ%>%sux$;L6J%CO8{_zyJNWZ$JFHXRvzU_~UPK^Ul66U_hJx!e{`3GI`dP zXI+D_wc2{{bw4PeiD`;k05gtl*{&BggUJ(>dtT0Y_4Q8>Dg6nH1NXmrm+pK~HyC0d zY}Mn158nS$Bd1ejaqz)c&y)>MCk~VcK-0hl+n+B3dLWJg&onThPLahWV6Eu0D!lAW+r3nI*92(tEmjs{`%Nv!p98jqR$cj+y8qr+Z=i#$NYP8~DjNnaR;E3m z`2o=II%ss7T*t4u`q6gpy|4b~o_)6@)$tU20y&upaWcOKjZT9GcY(2URg8z_xq$@7 zTl7)})Tsyci9uaTP><}+yI&e#fBoZQAY*wDG5`oL02TqV2Dmo1dH?_b07*qoM6N<$ Ef;x~S1ONa4 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/object_permission.gif b/workflow/public_html/lib/img/object_permission.gif new file mode 100644 index 0000000000000000000000000000000000000000..1bec8aacdcb41c0a4c64910cb9167694ba8c4fef GIT binary patch literal 163 zcmZ?wbhEHblwgox*v!CSY;64b^XJ;y+Bf_oHuS2b`y7?)R-8o0o7bM A^Z)<= literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pager-next-icon.png b/workflow/public_html/lib/img/pager-next-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9614b5fec52e14f8612811edde493658cf4c15 GIT binary patch literal 562 zcmV-20?qx2P)>Y};qclkI`E;AFTj@sMubtUjt*9yh zA|hFqy%CXPzyiBe%M|dc+RyX+ldi;~s$^NVXN)-qjw+V^k6{R*m*@F!BO+3>9N@?p zb1tiGKM|3$8s)dB>RYqwc@#wC*iZ~yEUcmWY2Soh6HyL8nE(O!3CyDeP}NiC+*9BX z_*HuV5%~(>ocop}iCwR23vie5c>Jf)XuJSEMhO5g7z`H9x%aC28n~%Fz#8xUXJbr< zVnFK;05F+MzNcwwfvYG107j$H-!x5M0zaYz*p$ixbUK~K^ZEP|cy^!flPcw{R%<_m z@CA5s-s{rkGduO>^UQpZ%r6_Y59Rf6) z&4a~a;n(Z3h_zNXtXTpc*ay;WLJ-pBjpO#=;v_?Z>jKYF{W$ z!Zr0i%>ahp`{zbgHH6RuhIPtA2t8F*iTynP2dF@%vGB=8=>Px#07*qoM6N<$f@BWx APyhe` literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pager-previous-icon.png b/workflow/public_html/lib/img/pager-previous-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c5837f459cc92b25d55a8b420077f7a78eb9a15 GIT binary patch literal 544 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 Eg4&3(*#H0l literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/plus_.png b/workflow/public_html/lib/img/plus_.png new file mode 100644 index 0000000000000000000000000000000000000000..638da82071358347e99d8cb14b21c84905477f8a GIT binary patch literal 1471 zcmaJ>ZA=q)7{79*1r%Xs882?;b|7p+|k-XuSk`$rc~(`-MC&4+DUu2yMq>H zqEtlSg8{baoG~dFaJ(Q)rR!6+%y0H(rp!_Q~GBmz7z!j$PTE+G0Dggt!}ZJtrJ5O&j6)f*26%y z09DU88Oq!I+8|>905IS0a*J+zB|)}y+3G#@14H@ zLw>IjuF=~OJ7-~h{)!f!scxxq(Jk9)+zXr5LxwOR5d;{Kg2I7@pg@F;@GLJOofB>i z49$j!+l}y}qTF@|WMO#*(yI$qG=icKhN)4V9>dUekQPC;8bo?A6{;ij7@;kK<{nte z#(V1sCs{t1OR|ixPZT*qqX~sV>QJGY!rDjX|sJ6zvZt9M8`p z>~_Ky6htaWGd9u)OB`yy-%D7@VjRcHNraTBayP z6z8$t$5`v4*n}7YoRpblcz+Y)E$7()G}|=cU%ZyGMfv8i-oj82&cNr+0m` z6p+c^sEv%Ig|e>2UNlcX*^&Hillk}E{^WQDG7KGo;(3`D!1zu_?#Yxx`xMc6 zs(f?5Y)`V35;|D&qbX_H%o8bJwe{0UuP^ruEQ$3)(_j}heZZlwj6ypyhA(HNs}#Nt z)NDzYx7})pw*OYKk}}^PQtHsmxAv_ZZ}fGUKY40RkrH3i-RC8Am8P=qDzCi?BsrX` za3F#Vt=>5OM8?pKUtgK1oob!5m8HAE-99r%puLqaXGucIs>H<_MS9 zVyjG3Rk2j;d|&>_wt?%nk7(b6A_Yyyt)s%F`;)1IWuxa~(Oa=({OH=d*Uy?-x1BqE z1L^d19dZ-*?x>307kiG2JL)^zt_-C1Szm5{2kcw5w73blaC!_bz}Z&Tt~Wk2zBQqXa8~ND z5?qg5+SV<<2cjkWqJIIK|CH@DRE&Z7XSe2b!*cmJ=gYs!W$xdgy<-5E|MF}vd}!u< z*^2znGG_9QdEP#Ecnfv6{qU)t>P`83`mY?gDINtMs6ToMk4@Qi4@%A)6B_Wz+@7B1 c^qOVKz^Cpn+e$&()x?!*vsRI(%4#G306*0JFaQ7m literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite-s947c1ade08.png b/workflow/public_html/lib/img/pmui-sprite-s947c1ade08.png new file mode 100644 index 0000000000000000000000000000000000000000..d7a38028652357e40be6ed3b933c9e558d57baaa GIT binary patch literal 20291 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 aum1Oc0 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite-sc9cf09aadd.png b/workflow/public_html/lib/img/pmui-sprite-sc9cf09aadd.png new file mode 100644 index 0000000000000000000000000000000000000000..f307a538c4169572b4a752eeb1d89501ee3c5331 GIT binary patch literal 20276 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 LNkvXXu0mjfWOBdF literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/arrow-down.png b/workflow/public_html/lib/img/pmui-sprite/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fe310ef4231bb40a347fa1054a7f446005dc6b GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt`Eo-U3d z7QM*{609N2vOGLI|2>b$zGyRsQ6M@Dsc)I$ztaD0e0stM~Co}*6 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/arrow-right.png b/workflow/public_html/lib/img/pmui-sprite/arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..cccce0e751946aed434bd744a2d8fbf059863720 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt^po-U3d z7QM*{3j{UP!xWAAJ}UF@@bmyN`-#$n^%{8#t}txk{dwMDq2dd+2{{~Q%p0T*xhy(u zp;5@#_I8Pc!=$tlW{+z_mmM2Re$u)78&qol`;+00jp`bN~PV literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/checkbox-on.png b/workflow/public_html/lib/img/pmui-sprite/checkbox-on.png new file mode 100644 index 0000000000000000000000000000000000000000..f88404e6afc55e8df88e7fa956e6f8eae4e37460 GIT binary patch literal 580 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbMfmH?j+S0L@;;(&&Lf{ZW#mx2hg zuz*ZpVPRooV`FD$g9rlIA|k>-HYX=14-Yp`D+dP$6BCo5pa75!6bAwz1IPt3n3B3D0JZulPh=gB!bilUo@wK3U z|NsAQ($xBTuI5znbnkl%fApPXy>yJXKQL-YS{Y;bEbi)K22;i4`$e%HQ%wr&%5UX3 zUU*k>(YB=CA)%ta=a{_zmuD}H1CzwgUF5dqJRPdD)M35(ojZ5jf~I?wSO4=9bvefV z?`);b({rEZ>tByfb6e~0^ZZXu*IjPrDFSJe_I~dNx=*#lHKHUXu_VKd3@85lgWC|io6AvZrIGp!Q0hRLbtB!L^X_+~x3MG{V zsS2qTnQ06R6}L+JPV*iy;Ba}rPDzzVzF9L}RP|EXhNtXLBJAE;^DGvW%DDc%di!F9 zg3Ip?AL8k3W2?W!s;_N^Ikwlh?)h?d^5=N}sG>!@$7#G85>c2wxwoc-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+ zWN*i1Q(*-(AUCxnQK2F?C$HG5!d3}vt`(3C64qBz04piUwpEJo4N!2-FG^J~(KFFA z&~>fIEHhHF<5I9GN=dT{a&dzi0p!^#Wt5Z@Sn2DRmzV368|&p4rRy77T3YHG80i}s z=>k>g7FXt#Bv$C=6)S^`fSBQuTAW;zSx}OhpQivaGchT@w8U0P2`H}sH5?TBaMSaO zp@9Gl4tdfC)g?(nt{ziNJe5x zg3Ph<%uP&B4bMy|$pC5s>p=*6q-LgP0DS>8Odk|j`q0n<2EIN#^g%&DdoXGVNnt!1 zT%*B7QV5Wwcr^Ge6`2@MKK z$9&nlPWcEQZMwB*-S<^-rRJ{-I}D%w(D~UVEwlPandUFI+mpS0He7bCTOm+vmo~A` zV$MUJ_l(gGWG*+{U4PS&XCR(-5a9UMJ?X+Da1x7myH-=OMF``hLXxS=>7G@dFfQu*#s*%bW zXB=i6^}W|QcY2Sp=)mROd+zyu@7#0G6{xYP|!6}_b(_u zpM(emNGU1GfxEtr$eA8EyY?XcU<_~^4bgz9u6Qq{n2hyZhWhpy8=0?w3Sf2iH9>+T zUPHL;7+|l%Xxa_Cc`wpq_xSILuBo|kygYKy%|ChM7DsNni`^}*XW4=C?&8V)`s*3* za~#LBjx&%BrN~x!@eIne{DL+NKSn6ps=uBobBm5+b99ja$(6DwJ!zUyk$PlLMSa1x z(Wm~L{VGyNaTd%%u3A|Qki^LTf((SAf&{VZu+pEXy|D-K;SC5nmw98v7Zy*){W<%2U(xl-Vhuph z5lTcfLUe>s$QP8)o`BlftiOH{Y2Tnx$`|MaRe-n?-*>&Ev3{s6dH|-OV6T>{9Y#lj zQgr_|^+H9rvkF@%Z`hcf|A3inVX%Mh<1NNC4#!*i4mZ@_?ubWWnjvaF>OO8#ua$X4 znU>2H%%tY=CRez2HMKCt?c%)!4e2CE=b=^vBUbetc}7ud#S*69zQ^<*G2iT_$HWji z&XxA9){t(JzW{s#@A9R=fz+o_7XR}aJqV2!{NENlu?P4qzyNNT8~9r=WRd^?002ov JPDHLkV1fmNR7L;* literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/error-64.png b/workflow/public_html/lib/img/pmui-sprite/error-64.png new file mode 100644 index 0000000000000000000000000000000000000000..06306e8d07986df6b6f12789054df8933833f461 GIT binary patch literal 813 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/question-64.png b/workflow/public_html/lib/img/pmui-sprite/question-64.png new file mode 100644 index 0000000000000000000000000000000000000000..5bea98888cd8eea864d6a7dff214b3d463b82ec5 GIT binary patch literal 7428 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 W=+6WX$#FwKfVjJO;T{~qGyVqld~s0# literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/pmui-sprite/warning-16.png b/workflow/public_html/lib/img/pmui-sprite/warning-16.png new file mode 100644 index 0000000000000000000000000000000000000000..dbfda229750f238e5ea15ea9c6de43b9630a5e57 GIT binary patch literal 543 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/process_maker.png b/workflow/public_html/lib/img/process_maker.png new file mode 100644 index 0000000000000000000000000000000000000000..89fed39eb591b2f07b2115e9b2689de3efc56b0b GIT binary patch literal 1789 zcmV}Qvpr|_NxG11w4GCozv4vyINxinP<)HTn?=L`K|Ox z78kqSZW;tZ9N1;GZ;O4afNUHE#9{|dTz6Cq44a`^ex%x zB^LUqmHNpE=A3+meZTaeHFt26jRzPHhWez!#a*G&$`69%()0Nz^!M$seJ7P`=Cfqj zmcu!{OIp5P!e+q=wHTK_`TD)Fl2Xgt2@$ z{f5zBd*~-*o^)-J(DiCK{a6v3#0(BNsTpkK!m|c%OJV8 zLzfkTJxc!Cy?Gn-jhTr79!g@aB| z;MC~zxguA+WO%Pe4+DU6ouMU0hz0N_7Ne0V>5X(~b0N0E-@8D+a{$T)Y7OY;j=9H* zIUWLf7xl|&_GYSlv-f0iPY;&pd`sLtb?GzohB1QAQuMAsa(yk`c_)3Rh-yfB3-rDr zA+*Q1^{uc6HW$l@PbTDV1-*$qXi=9;N*4*yzEgQa&wPoLrQzqVj>CIpK!RVOxDI}W zIB!e<^ls5BN#6dwg6KMs>sG!C*1tgk*%~hM%(4#+=%t{C zb-K=bC0N~9u<}|@GGZ+At;It7COQI7&q$fZ_So-$xPr6t0L!%Pd45Sp&?n>|Qsw0^ zatB!?V^ycnX5gl|J$gVF#bi4sa2eh@Sh|Iftw@B+x(f6q2_ea*^(7K@`B3Vgi_S=D$K7zSqC*0eg=LE8= zGXs5cgg);&@=5b9;RV2Yk3bs*a*6c}S_{la1g;3c?=zp0xhNdHX*@ikEl>Xf9%J5d zuN%SJq(XutP|$07CR!Oub38XoZ?j(U3G{4K;|{EUgVX51L{)>Qo>M`z0nH?&7 zFf1j2Zrjs&QQD(92ScwTm?v$%7~ooSbz@TvnY$7hI*W+i7b$CH5`gCw(9Ap9b#A-XopItJio=oyWksi9e; zdF2r3jTP3iK^LorzBJjPs>9ydE=JSiSw%gaHD_F+p#Kct*@FI+1X3{rzPa!`{(H_G zN`iQDgWMn0>e{(6*FwP=uJz}}i-c0- zn#_?a)U(yG6n+kczwtN4O|$p2LmMb_mM5(_-O f3XTx?{wu%$g8Pyk$S8JD00000NkvXXu0mjfn7w5t literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/refreshIcon.png b/workflow/public_html/lib/img/refreshIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..c72b685b1524244b8e15cef7e5d7d2aa7d869e42 GIT binary patch literal 3010 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 Ef}$jup#T5? literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/rules.png b/workflow/public_html/lib/img/rules.png new file mode 100644 index 0000000000000000000000000000000000000000..70fa7b2ec97104f24f6c5494ce138e2ba850c325 GIT binary patch literal 233 zcmVQf`MVRRaJ@7P?$-Gw(xeR<(JWpcE)MIz`>@brj)$& zip+j)pWx~4?f?J)A^8LW2LK)bEC2ui02u%m000GMpeK%GX`X1Ru59a;TeVoPSv84M zmrIgNJ5t9n2?UR-fgzX~I1L&EA|j}^1}XuvM(7eml0tzZf|wyG0)rtD6)qe_Sqw-& j9&JzIfRTG31rl{A5`}pRh-e-FjDuT`kdcy;EFl0p*WO_q literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape01.png b/workflow/public_html/lib/img/shape01.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9ebab34c3cb21df503ecc75ecb1e555993e0f9 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^ra&yh!3HFC#Y!IoDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MZTUcjv*Dd-duMSWe^Zxdl>7vVu38mPuPrqm{MbK} z?S7$+(wZ-#YM11$+HTimu2L1|5zz=(;Lym#$^~ZBE_(M*t8v|P4g-eN0G^%V`w|U- P1~YiN`njxgN@xNAC+;=F literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape02.png b/workflow/public_html/lib/img/shape02.png new file mode 100644 index 0000000000000000000000000000000000000000..27887759b79427d474ac21c0cc1500a50788874d GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^ra&yh!3HFC#Y!IoDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MXsJMjv*Dd-duMSWe{LsxfuIZB)~z7Rb&FcIIGO}vnD@| zZ_Hb~cI|{;Ys!RPgo;RL1T1i9WMbtK0W*G`?zFCFkzhE&%XQXzs%j+AKn71&KbLh* G2~7Y!{4xsw literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape03.png b/workflow/public_html/lib/img/shape03.png new file mode 100644 index 0000000000000000000000000000000000000000..beb37b686b516d3916a53f8af6e905c5906931e9 GIT binary patch literal 441 zcmV;q0Y?6bP)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzTS-JgRCwBA)IC$cfCsPvu`3Y!0kJU< zO8~Jn5I+Lq*Fbz6h_?dqZXo`P%McbE;>g(EQ&>54vIk*=K%3jAg%}Ex!4S2 z!ePL9AfAT90&D=}yE#C74C-6Fme@co&}ASGSVHw1;Ic#oh}QwJ5CdfZ-=SE- z2DLzxfjR(W!D?vS!YxUoAc*hnw=Ti^|{ z#Eiz47&Ae=L`$H^1WmrQ1Z*Hne$m*HUrf-#jh5gM6STOdB{&7LWCx8c*$uK}4G_Ph zkp-Zr*aWiVI}kU~$dVdRjR`9trvvddYR3f-FGenfLCM&kiopg7rXX0ok6dZpp^`-} zpyoWqRs9|TVsjwAOhFKV^q(cvkO29}1cP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#W=TXrRCwB)R$E9EQ5gPrc4l06*Uj~k zmf>Y9GC`6IrL2eOVqh04q6mr}!iVa?h=MYbdMl6~f`}*xs)s0o!YD8(LM;W0kgNw4 zHBBq>vZn4%yKCP$9@m}OS#Ljl?Ae)f&UeoD-^Marw}@si71##s1`2_6AOq+Iegp4; z7eFl#jJ1g+28k6Y2QCAtG`sZzRlr@dmy*e|OyCo6bB+WgZg&T05VxI?WTPO+r-j*i zvA!Vkp&T(@0XzkgqBND=BqwerYXaONIiS9mf+Nio7T{QKNj1flVwRrW}6?xS`Y0o=f)Ck4Um*@e{Mn zf`32Kg!Yp^v${$sZrN#);#X2=>>G`JJqXS&<1vl`_Zdk%23?W2u&8O|T=Nz&<|2P* zC29Tl%sn94$d-A5)TJjW+5g}R41ey>p`o97x?lw=xf-5;Ak$mQ$2 z1XP00L$>TIW|6vsk(B8Y#F0-*@*dKD+=72U=vKsKo+qobFp6txuCn+rm(pNmjHE~x zZYlc+UgSP7nv%Q=Bn76I^7mY4kwOYvueU-;Txpslp@@QGtPeNIUBJf5&@y}`O=QLe)zfq|EZl0ziBxAU=1 z_mL(JGgDFzOs@Y^V|>-byA2ts8I>?q)#glC=#&SemQcl6q77BRljjwAN$rE5; zT6m3o9p`wtu;)JD^=oE=ER-M2lN78wYm}I|;yEK32Xv_#7<|pMSaxqE=h{a8YuYx` zkCCIG0S8(|<82jD$qTy}Ss+!>2l8||lf0ASJ=MIHF-Hf7-|+}zQN&8WMM>fLnBmH m@2(8d!+V7+bNcT3FTemIpe-QTF`07!0000P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzQAtEWRCwBAeBooufCsPvu`3Y!0kJU< zO8~Jn5I+Lq*Fbz6h_?dqZXo`P%MeB!mM{Zx8W1-Eu_yy!@Dzyafp{)9NhT~}azK0@ zh^G;00Rz-`bAb35)VFvov4L8k%RnBmgz7iIWr+$9uLEKs2Fd`)CtIMtL$QPnYJn&N zbpXhM)zG+wTardW5aA2DD3~RjKwQT_8_)vs4akx}Dh3m_lMq@i{AQ)sXd)$Rfa ZFaUS?L5X=2^V$Fa002ovPDHLkV1oGJqGbR8 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape06.png b/workflow/public_html/lib/img/shape06.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb7648ac15eab09a915ac28a103e285735eba0b GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAnN?apKg7ec#$`gxH85~pclTsBt za}(23gHjVyDhp4h+AuIM)_S@)hE&{2x)T3wZX?SAjw9L)7E&GW1y*- zN6b(#xpBUb@nJ81GqyN0Hv@T>^Mz^20pcl2rUgvxkTaT8k;0Lnj2^E$9_G_|6j81@89zms-E#rNK3f!^M!mf z2fMNX$N#3EKXe*gZ8k08+M=UmK0hI%LDyJ_$0|toKP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzH%UZ6RCwB~*1ZbCFc1LX^b9WU4mwp_ z#YNl%!QB_|1$-n2XL0rk1UGSW6`d;RE-wD%O0GyT$z5&WNKLPbIgMJX-B8myUR=Mt}h=n(6$yiGZ@E} zY;tNirh7B>a3KUOwJmmQ7qmJ(vq@-j9Me6_#M2U-U)yRrbU~}*GrPtmB4oCIg!Uz| z^B!m&2ue!Y_zcK@!a?YKd#71o&jqkWKMt+7Z;vDy_{vJrrTYo^3ZxWr0-;jRg}eag z&ABW&{hIq`v@=qgPwQxk);z;00000NkvXXu0mjfpN*ss literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape08.png b/workflow/public_html/lib/img/shape08.png new file mode 100644 index 0000000000000000000000000000000000000000..f48e892187c5eec352ee3b6184f2996a48253346 GIT binary patch literal 576 zcmV-G0>AxP000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz;z>k7RCwB~);&wZKo|$`e=co&1+m~u zDMf@zQ3t_6MX6R4x+^$X(8a;8;-H8i2nvFT=ob(~L7|JdIEWRsA`XSRXj{Z;-{K`S z(ALZ4Qhned(*gWIzF$&%B;6f%S0( z`yoXKVyPnfT|__E+C_TgumaWsP7Jn5m_5$oIbE#i+0L|rtw{yT=UHx#h}94UJu((g za}|IV+E6W>Wii}A;BA(;JtDkGp7F_eNUFbpa_BXqVy?%*Ee29rif%^)Gb&W}VjBn;U7B{HBZJAf8H0t^7dkFItVf-4^Y O0000fBSU+ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape09.png b/workflow/public_html/lib/img/shape09.png new file mode 100644 index 0000000000000000000000000000000000000000..1ee31b0e7ff12160d952b3d9d2da8bdd4877c65b GIT binary patch literal 459 zcmV;+0W|)JP)P000>X1^@s6#OZ}&0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzZAnByRCwB~*1b!^P!Is{%Qd!wAA^&S zS}0`dqLWS)myAwMwv&IEn|A5uA}&HFot)|t5JbVrK?Jqf)_3U(q@nNKyJrs$nv}j@ z?vmb1uzT?Zf@rGjsqCsuU4Mi^V4!ke<*mwi*+>pV`Z$t6=mCHfLQkL!HGL5dC_)1p zg#QGbAY1~#LMQ=}Mg<;DSK+J`iXfC!P+t$cDhfG(7QQ;J!Oim+Hmfrv*+HnUt-wiK zfzI^^hVK&-)K>Wvauq}h`4~;JR^`#!LY1@68&$TVHtJbqY|-7@1P=Q@a6bHkqx2+DXI5V6M36M}@q6PO}FfX<*he4xodew4YcZ$Cv{a{TbQTNdePX@r4!wwgD-Hi~u+4T_G#r zvT1P;3%G8-CddhpyhxNGXF&Q<cFtfZ|Vp0RZm*d+oDmX literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shape10.png b/workflow/public_html/lib/img/shape10.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3ec2551671114e3e6843d85976001b8dd2edf7 GIT binary patch literal 396 zcmV;70dxL|P)E>gNeb!;9nU$1A|+UGWfy@ZsvI& zA$-0$3(sJ8lVI<1^m{o3y)IUjl3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~Nvsq0ZzU8K*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*!%z0q%bfrig>y> zhE&|@xn%3@6ex52W3{f#nl_b!vRuxWwk67i#hg;JZqJe_zI5080XK)#qJ=MbU9y|I zxx`uoq@4J_RQ#HE`u(koelO(h3eF$)|Nn3OLPNC=SA>cr5)DeXwe}xiQ$3=$?qhD< z>SnEJf)81bs!Tc9S^SfCdqvr|TNPJ7TU4y+73BN!vaFu*_KR63yP7A8`QIpr@)x;! zaQ=gpV(#+-P6~H5mnrc3Wb(ewu)G|7MDEhOmGf^We6rhA!Sig5$h)s|<`y$m;u*T+{$qcVQuS)_hFXJ^2IMBt^F7e_ISEl(4C)xOC z|93fHH!uPVoO6p-eNdSMDm6S^{an^LB{Ts5t|p(j literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/shapes-toogle.png b/workflow/public_html/lib/img/shapes-toogle.png new file mode 100644 index 0000000000000000000000000000000000000000..06700a80146360f828becda7dcbcccacef14a0f5 GIT binary patch literal 1188 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|81#=KlDb#X~hD#E>34K5C;EJ)Q4 zN-fSWElLJPT$(b-ssbzLqSVBa{GyQj{2W*)24v)y-fM)1rW~Nvsq1x~&CK*#8Vq82HtVM4(417gAxE|3FH`l)%q^j-u^*kLDyFEKDMig~&?hE&|@ zxwO%nDN*A1$IUvWdEJw)d^6MTh@QpN+vXs?d;!Ou-_pO7XUQxvv@+^CzaVl z-8om6SnTh&(cdF8{T}mt;kx&q=aj$SYk2>=?CKy3M?uN6Rv!vl7iRWEHtW5LaAeNk z)Tb-6px-F!a-L*Mx8b{u%Vy@v^55EQ{?}Mfv!pb`Fy+LAt?o6adssqyzN|YZllj(m zdij*^KMzh6UYoZ;xO+ac-$u_w7Y>PS(A3ko)R)_;5%6tC{Bu zm)+hYm{@Fdt2)c>xcIz{Hpw2>X5E@?@{o_M!qF^6W4ZIC$K3imui3`^|sFf!EcbaefY^7t~S-0*bub6Mw<&;$To>z;@J literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/sharepoint.gif b/workflow/public_html/lib/img/sharepoint.gif new file mode 100644 index 0000000000000000000000000000000000000000..d32159193954a6e9e92ef509ce96405ee6bd3073 GIT binary patch literal 1652 zcmV-)28;PeNk%w1VITk?0Qdg@tdxQI%qhgg#N1{#&(F{BlQc`G*~`C=PLM?Iha>md zgucGMHOBOxpP%~47w&^LtGK7(;o*t4Soy>;H>c5wmV&{mX$N(^)7{4K$7j6DwDPkO zb*eq5i+uUnd3nR<^Pwj1@9))$N$Kh7rp;nRm&dK4j{DJ5W|CI<(L{{MVAsgE<7+l4 zmd{zcSM9=T@$vE3wXpK!#OIG#y1Kfuva$)i@>;v+?WSA&%t!LXQ+J$boU@mUxk}fv zPOQ^w!mW4ANix*b)K|>)R#Q~>_xEeh_G*Wi?!Hv(b~^`!$obW327SZ$!$f z@|zyf($TKH$?du#>)NjT{QUU%`0}D2(^EA0;hFMgH8F&_$hCd#;KJRdk#NfLo43b? zgoLlJui4qzl(}*on$q!{CGe6UvAm_|$9wn53z3_Hsi~>eosR9Z81SqVo5@?%STv!b zq4~xQ@|rAgZf;|pK;?8X?R+}NrwPn=l6s}3rKZJt^}7!G`ucvbMf9j1 z$jHd;uOH*%0fj#hxHSVPrY@|QuaXOvGTG*hE@2C~{ z-;>|p-=vd$vej<)#|PZp-1Brb)W)NArCo5l;{deqzl>V!;INv+R=ssUtf{59ifOTq zc!bR8^|})J*lFYG)F7tf;FVJrpx^DkF!;YI%2_yQ#p=R*K6TLc=GB~(larE|kj~uY z#jtIYzhCKqGNH?0y^(FsfIz^ET^_LN(}7p3*zUo?z{%k4$=1H9#*WWoJpK3czB(?7 zs(Z%L$Ckfg(!itfk||)lRD+eFaHc?guRltUvf!C`c9NmYe`@oyf$rDBz>Z?TihID3 zY2Sol0IKYcpM4m?^NYb#-g#8_$p^>F$L_|n>ejfjmVm)_N5g+s(tks(j)3^iS;MlD z@UR@Z#LV!NBCE*V@WMa2(ckpYVf)f#6_3wKt>I>=%4o0JY_!^Ow%SOyQJ2C}$jrc( z!Cma|-~a#rA^8LW00930EC2ui03ZM$06+-;0RIUbNU)&6g9IlHU=b-Dfg%Onok`FK z%qJTRjC`p_@4^K!PY6~SL8yk9lPGBjiBM8l1WOBQ5Q;!xj~JDS48GW~0my<71Qj$< za0$&WO#K>I66g<-9TXr1dI^Fh&bd;&v|;lFN`#p~S2{dIXs`{Q2aeFO!oe2DwIbGL zY+G@wgn@jTh6Vd@qlHp~Ix?y8VF4ExE+!T*<6?o7I3CHmiQxxf&5jy%3rY2ZSPn z3|){T&k{tTK>`VqV8#J7b|8Sj4z&;w1`GlvLI4{Lq^YKwa?oI$kVV8PrxjIH5l9hM z95W3p#tg8~9e41-hc1N9FoG4x6*LuZ3q=APe^;a<1fq#bRTUx~_(8)0oN@}qf9F*y z&?LRF0KixTK>-Ct7BTQ(Urc!a6a|^%F_eTuE(+AldVNU2%_n6XaRfCjC~@CXPDwxB`z44FDNI6a=KMdK8+B@WdE~2vh|OhFD_z?YBp8sHg%31OPh{e>eUB literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/sort_asc.png b/workflow/public_html/lib/img/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ba61a8055fcb18273f2468d335572204667b1f GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*bWaz@5R22v2@;zYta_*?F5u6Q zWR@in#&u+WgT?Hi<}D3B3}GOXuX|8Oj3tosHiJ3*4TN zC7>_x-r1O=t(?KoTC+`+>7&2GzdqLHBg&F)2Q?&EGZ+}|Rpsc~9`m>jw35No)z4*} HQ$iB}HK{Sd literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/sort_asc_disabled.png b/workflow/public_html/lib/img/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fb11dfe24a6c564cb7ddf8bc96703ebb121df1e7 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX(Vi}jAsXkC6BcOhI9!^3NY?Do zDX;f`c1`y6n0RgO@$!H7chZT&|Jn0dmaqO^XNm-CGtk!Ur<_=Jws3;%W$<+Mb6Mw<&;$T1GdZXL literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/sort_both.png b/workflow/public_html/lib/img/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..af5bc7c5a10b9d6d57cb641aeec752428a07f0ca GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S0wixl{&NRX6FglULp08Bycxyy87-Q;~nRxO8@-UU*I^KVWyN+&SiMHu5xDOu|HNvwzODfTdXjhVyNu1 z#7^XbGKZ7LW3XeONb$RKLeE*WhqbYpIXPIqK@r4)v+qN8um%99%MPpS9d#7Ed7SL@Bp00i_>zopr0H-Zb Aj{pDw literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/sort_desc.png b/workflow/public_html/lib/img/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..0e156deb5f61d18f9e2ec5da4f6a8c94a5b4fb41 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3I*R8JSj5R22v2@yo z(czD9$NuDl3Ljm9c#_#4$vXUz=f1~&WY3aa=h!;z7fOEN>ySP9QA=6C-^Dmb&tuM= z4Z&=WZU;2WF>e%GI&mWJk^K!jrbro{W;-I>FeCfLGJl3}+Z^2)3Kw?+EoAU?^>bP0 Hl+XkKC^j|Q{b@g3TV7E(Grjn^aLC2o)_ptHrtUEoT$S@q)~)7U@V;W{6)!%@ u>N?4t-1qslpJw9!O?PJ&w0Cby24_rK{}T?N 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�j7A!*UZ;VexLz9@E9yz#c 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

-~Ux5S?4 z7H!6C&}uvH8$iXQ{gbWX3%&JJCc~08xVgP78nk()+twBx{|tBO8`OgmGx7syz!1em ziW*;^#h!N;EBwP<7PkE;!OTwWpC z7F&Lj%b=^iM-AiNwBdAe;&^CBdbDO|1Fo|Uxb$fvi!l#<~Xq43-kR9@>oUsM>A2Bn&}MbQUWO()ag+ z1-!YPTc3xrU=YgGRXcA2hC$QwXGn2ZJYmrwwuP&$<#;DGswgGI>=|bT(LcN7unRX9 z+^oX|?g;S*G7bL7s>8v)G5P2VrN3g}F~R)bwTr%fJT(|#ha!iSnNdp2RmI%Dz?_q! z1g21$R}q|FndHK>J75_`HC`;VC1jLbPRLQzU?}f|+_rE&Xle1{4B3U;wpjUMW zyW)k(f3PE@uZE2j<4`Mu<3y22&>e5a01HcV`gBAl>Pjd;mnF!7$Wh~>TT#l&Das*A z$XWKAg7RY{F?g2#K$3f=;#GaD!gP@P(h=#`#4S3EbN`TlagbJV&$h23OfZ%acA%}c z1s881d#|8|f+Z`Y^kaP8R++~k+Nh;%$s1Ex)!<=buw9QEw=atCNNMShlvYF70otB| zdj|g><6)449dm9(IkC-{;~E%zJl}hWoZInjIKz)MK7br}jA!@}@8?pU@&$@lb^obN zr8tsG5RZsHG`tMTW(dBtQh}*qZOLd1Ox~W+JiQ)g! z!r#>`4=)pIYkz@?eK*sVdpXH&rx)!EZ^-@SFpy{s2aW4P{xUZ|yVr~%wZO~1{gSKC zb?5nvP6Da76$sGB(SfWxsJG%v0Ati;9N^*UV6M&J$%h$KSzFB^sZ2$*(l0$ytVg`3fcf-ErV4htgdAToQjOT@J%UTTI=Rw(t?Zvk%Dg{P)o$ z#;(spE{ph|n^FXPPp{-Jgn#~8$KGBAlIN^%dNYHFHe>x7w#3cV+QMJTPz3R%jS#;{ zHlU2vYS?B^PGzM@06mwkHl!PMNcSC#+#qd>F3WS^5Q$nCgCDp3_fu3)3hcVO`!s9~ zn(g&3`@es|IsL!(sQ_oayRtFSU-`%6&_jCGhJc>*C4wGonr)ISD3$V=Nw#c2cT-4QaI;0Uw)(VoJwvWLJ;AN56j0)jZ*tF!K~&gb;p6+L-37EGKTZC! zwY43*@W#f?{D8aGM|p5?07R#kZ*&j<-`uxvCx{6s%l2Ik53~wUs~vjxpm*O)F`fO3 z?jJiggVb7M){@^Z;A#NZlV>u(SXa2CsR>hg5kn%is3^n;5M`989nYJxH_LJppkN_I z8HZeU9XU5zG}^x)XWA46wVUH#>1=EPirl?$WX6p*G(mSyL86@F1CPz~=21XWudv8% z#ZLkr6d(Lzabany4`V6E5OUfz)}w2E6(B1Mt*KMg;*@`EYkGR>0Z@zn z^V>TS`!6tm!6xsS#)y_-|Vn;2S5`{OoN(bqHDhK^ivX6~|}0-Fr4j z`$fPib0WG{h!lO(VIw=(EkG!8im&->w(hneK^fnuSCT!z;pM@rAuq}08hme%>gk^bn4f1LZT*><5CHo&D5hkuDNUBdqJah)31F$DJOZbL_dG;}Uoyjd($p z>27rd%-#7}$M?Ue15~v^E00lhQ;wL|DIrRtt+3dXf~R%az|0A}wWVdF`B+L1a_7Ob zD4qEhHbQhZ6#N>cghJEck88?uF%Sh87jXk0+Q0xIOKlrI`$hLOVwC8T@{dC54uXNd zYg`T1Y}k^^Urk(^-rruh%tz$_WmE)FiPy2);6{S{8rU!RaaMy1>~7$`-S+^`K) zwc_l7bu3_Z<%INftacYRz_g5?gcbv#xEd*%@C%i;-$qy7@X#DCn45y&Ibe5oN28t0 zfB17`8wGD1J0eW(dNW|(RKK{jrNmB925@bh(l`s$_?tm&1T&~;(c+8eC#CzY2n@iE zN3^zTMK&V9MZiReN5(GUe0|!xR|?-Ba-I$~{qu0~neLT>VIG#EZVpco@VhnJ|ERPm zg&;m#=!Y3q9dFz6w&AlPsOluT#~;-QXoxXu=4m3^CLEh0t%zcxBsa`*SKMQGA5XJn zy}f@qXK3!yv=mX76&!j*#zZS;GF_k0iCzoJ3(Uqu_7U}HD7-#6!Xgs^uU&k0gJF@ z-RD4`G!XguK-=fOFoytwn052G5Rscdk3ECmQq|b+I)Hz&I0ulYc@95>6tE`Hdr)G} zQC|U5hCx|34#IW-7y*0Mb!76|Qp%Xk6t97%wyBGIxzZQrG}`-c-oo}18iAqWss&hX z_*cv!vvK*asWH%DCK^!-E)aN*Xf#%ltIIGU{ZZ$_t0=z#UI?<}dCwQ==nfbo6MZ-~ zxW-LX0~+Kj>s}rdUuO(-?wch4o#~VAI2uaIG8{JGO!EPDiiH~+-3WTimpQx-!)Luf z-DarcF*P+;W*|67&$!jOmjw*47rG)fFlze3F28?8`g41jZPJY9i!kUu`C$mR=t1H2 zn6Xt2R(x>x=de3w4*-QV-Yv)ospJ#5p6%mO_UX7nbqtsht$cL)zVjdQ*)v0Pv(YFU zdCkxMS)qdt(7!)tKNk(2-^Q7UX&;E{kYYpjkU;7mwMcdM#*F&2jtGezZZ&Tw4MUc6bguG zs%$p4o4nZDG_cn)BSa3|9@hY%peV~~^x#Xcv4_}m{dsff6^y%2#Uh_B&LAx>k7(ZR zBxUc#bE-tUhWP21PZ57cYqLs`%;Twjrz3A54sLXp%fJz0Xsn5xL*#VSWq2sk_-}b# z1WVKu7a55h~Ve{NCS ze$WnBc|@Y^>y2MGEb60 zP#VNpKyR5hX-(=sChFhd4PJK9_Vr@E(&jCC+Fz61X#;_b#3AUj&#`GUuFOJr6cI(#hW-QCw`Lw3*M3COVQ}L(c_- zkC?)-ED+n#F4)`t2DU7xGy44`@hLd#VSV&8uG8S*V0xPRIWu1}#6!9)&p2xHcOk5x zWviW!v>==>@$CG#nP&FvzP|n>Y9`{ATbP{qou31jQ{meEh{vYy7TmWwdXH+tOFwCE z7(8mEy0UUN_)t=w%R4`AiR(>s*LuYia4~uq zEU)(c_@x={+mATW5B@hBi1V`zU+*(BKGfUEwfwa(Y)EAaM}cGBG%`s{^3vH8bAa4X zwdrygK(u?<&S)NPjz5#Wi*G6!{$je0W&_E)f->BMiK{;m*Z$$Qy1-6dlG3BnDuys6 z6Ir*vjuoHyEc#%nDt<5>G@zW4l&>@By89Mb))4ndr&sW<<7xDWrSY9jY@$b$Rkf8F z9T?l|j<4~9K=AVEOQ3XWgmBkyKdv1;x(r1x04LqHUDn{sf%iA=gs~fpa!-GNuHq^u zhX7!R$mOxBtE<(3Q9dBo4A^ph3{080^>%V{DyeWY2Zp(J+BNrG#(nJ}bVR+g7jaB^Y^ z`dp5dN+&=-0D_BQU<>p8K>_sf;isqeS|Ct~Vm2!T`-eeYWhsPk_IlYA(xK{VN?KYt zMKJR}#1P>08ud>b58&pGSL%rA%gG~)>+7!-`W#m4hakr77Cs7*&K5T|vI7;4(yA&1 zfN-GO;r!v;TM+Otj&i8)f&-2Yvb^<4TT>G{W&{!1-H#@A z7OPY#z`(_gN~4km&<^JtZ8hsynHrtj&N)i75XaSVG+WMmFyf))2y5+5#9AQftDU}o zM*$c%n;(5ISZlSz)&jv&z{Hn|fvx`Vt}jSMP9J{M*45=7+;ha-0|`qP#?p&ubhN(`E2JQ6QWE?wuyrX-xdo!k(>X!lB-6nXy{U>*?kr4G^f6$QDiKEyqr9fdL}MX+Vf_5tG(4 zi(?5ssA-CeyItt9R?K~gT;0ad*Ypi+k~i{1U3ZZh?Q|p8_`qL|cA3jb&?OanslW8| zLOg2Ii?eR_uSGy&*HNoArI3(I_2ggsyf~&yeB4d+wme=+{zb?yml*j1R<540VsgGv zN@hl8?6RfjOCtIF8iAf)``A#C5>B>?<%1}~+@RR0rc{uTtt z6ywyA+IStB_A5I(EL>Lj6es!ZZ@drUx*HHnAKv`*=fQ_M4jC<2DKb&CsuE7ylv-r0 zp)bB4J}OVioFtE65F_v>Ahz2ID&ZlMcw^W8f=f-+$|>z31_$+c8y3A>U(h5}2^fa| zM1h^uNgA9?$&OGPbWD)h$clgj!A(E_*J4%Ku-;+#0{MtxKQc!$#&1wmA5Rm^`z`D5 zkttJioL{cUr5|N1u8th$jw<%q!=Zm9A|%8?YtlqUuMd8~GEE3yL_|?Q?*ADD3kM&I{SbkE=KD2zc8`4jDv+(};Y#jcaAQ5$i7SXdbJ50p?$2#{H$w8YKQ=VAE-o~FoZ zB439I-vC!-+CQh7zn65Vcm+t?8|g{50!c`0q*j?0Fi24ds*t|_g0OKfe(@*oG=Xl*1YIU_2<#yuUey|<1(Dii02^(6={DF~l5bIJ z{UjQbv?8dr zejwOn#n3t@Z@QdYo<7+!De=^FOuU*Gn$qS117Cek{NR7`Oi)=DF~KQ5$` zuYk#^S+EZUwFfnWiAr10vSPd`yhfE{kJq64WXp_ho{O}>{C67(I+{~Et#nadNrdbO zQdpQ<^~mwOfl*}?s}XK8ol{6^L6+#rAy2GY;$o+bXNkFb2ZPhIk(v@$=qiXOrU`Kp zBaY z-GM5AmRP8~EA~54a_`ly>|uWr{cZ~)BJ_A0mY5ctY#MVPBT+*hi|`hDvO{>E z0-8`YxGW7v-H=$UXe!3vCQi9kVJ%~pDUr-bzcaH#8*0L<(_3IMkN|nfsl5<6iZQP5 z)sJd8d2CFci3d%!_{{wbh>W)D=~;|Heku~g3pLPssPM~;qSju2N)3_767x|1OIy?- z>KL7wcVzJ`3;GZV7Az84J_7={k)HoR!z?aQ*3VA(;Rpx(W$+Go3)uGKE48}5$KDV0 zJqD&o79k?xD}NM<$pUeup{fQQ*BdE9-daIw5+TD@Em-IG&T6x$Ur%xP8B{UYdmKph zyP*bfG169d>^I9ar`71e%=J2x9Jr3~W`C|ns-s8VLWv4$zr*uv0oJ(n2mH>p)z#3_ z>gNlYa>6IqzTWE>4`j~WCly)2(|Q*G4xn$@zF^!#^V_1p=D0;p+mB zA^_>zSuT&mmaSo_&q;C@kZ-sFJF!SfMP=5epI7mflK=&dAV~&@p3|I;yu?5?%k}1` zJPa%>#mA4&4>pBZ~ zM=j0t<|In0>)*10-A&R!N*G%>FB6)jqM?D!Tu9EH_ck^r1#+oG87d$zDW#tgp+JBF z^1UH95-e_<3k#~ytjC6@X}afvDLZ$HpF%ne2$Wa1M~n;&A%OrSHNzt# z>KYnQ5Oi%faeZhp(BGpVEXy}3QA;@#RO&fY|6kdRS zt^sK&sV!dnCHj~vtyVyyR|*^fpaz_%P|ov>8EF#38S4=Jd$%YwAU-4dcAbI<0)hC} zE*_X63V@`tl3t;H*?#-m?dyiB=wDBo;-asCgznl9jleXWoU}SEQ#_}PdS;!w1;=!A z@9&B{=jugf$D*2ZfaRqCK2&aIzAdG%Po@4Ml}?>aEw5KffB6h3l0QBzV+A~%BZ94- z_$|(PTh@hmg@w1}7%t4Yi3ZkywzGxkXgFi=A!0UB_pDvqc8?FSrQTb1DZL9}(s&Kf z?J`Vg@nOdL7Ej`9Cg36l%*-_!;*6yQ*P!WvGXQlXNK^B(l#~=;gT06fH)1BO9!-D} z4V}5*z{$z!tBzv<@CddTd`$8sxj-OcvnE|QJ!bG>WNI)(Jb+=gse!&;mR*Xij88=aiLi$p`OfCD^3}f8Lz4epwfgRasF3fwZ#J zQo^Rz z-^W|m)&nQ(`2I*50X~}TE#UHYyT{vqVc)g*ZNdvIOxNe)^eJRkX!i^l4>e1Rr|tUw zPNiuE`vYrNPno*4#vY|tPhr`-5B^1PwE5ELnmlr|#-Pppyf(wA; zY(U6~rA3~r@EpR<)JVf?r3LfXi08=YV|8P(8kbe;`o7on@E7W#G-HpS+8+W~L# zo;!56aw9o{+tUIq54joEkC}Is12g}y!Cj0t#&3`<^MO`c&ZM0`DjBC`lWb=RfGx^= zp8pduWcnw-+uJ+KL=&32!L*cu2UeyAwnWf-f(N6NQOBfheBV_l9SrtnB)1$>?es38 z5x91?utg|~h?yTu$dk}+=v>)%HJn3{R1TE*QWZEG@CU&%C4dsNWJO}*JG<}N*=Nl5 z?|KqrF3DK#;^YD1=Xpi-sZ(UCI%{@K#>9^%r0~5v|2_j?5I-yn*wWAqfF=OUxN>AF z9U?^v5cQ%2NYH?Bc&%;|l(@LKoQjH!v2o$4cTctl$>SiVB+-$kjYsEXoJ zQe2GJ4~XM$P=P|yiUind?ZSI$d3hh`B2dJU{`5L0iQc5>{VhK~|2wc>{K+H0L{K!1 zBDlD-lK|MMnFtr5*^#+cGIL=12#9BZ8j@xmvL}qBY_HeiLs4qA*ZX$yc$tU0_nj86uE$bK_X4 zGl1{dMEyLEAgvB(y8x*1FZR59fItslcr-sZ2QjX@Sf~w$5DozXxxM~zV>ax>07m+N zp<^e|3qUd5td6ZnA8#HT7bmWufCPkZ;0_7{9xudr3FUr9YXDc^_uI=AAKRi(;2-wW z)6-)5c-|p^(T0^UhII|V3(OCvvIscLVSoeMyY|iPNC$4jneT`Yv>AxJd3An4`nU43RGy}DWgN1B?Bj*6eZvum=VvXTnOzv4?tmJ~+mfB;_!kqd7f z#6%S|%^3vU^6#rvQW^zXH`4O*0R8+f5aj@8v_BCl1s}Jwb93W2Ha32xnE~gZVRf@t zMGas<(9i&N2LROLo>yJ{`PXa_n?0pDz|cxFZg_l2OiUC{lBHhyY}Df|r=SpCN)HrB ztXl|y;|3}y69AG_R}P`eekdGvf=9XHd!ewPdU{z(dV2c!b3Ze%n*g{Wdfqk?D2M?* zQcVGmmowGXBLB`2*>WqigB}psd8O0KUT~#PCJDG`Xlbh>F{-OiDL^26ObI-oIQO#A z0KGU_T}QVpnK2Hv#Xq%1j#18(<(C|tR2??yEyb$G%@+7)2NX=jbU(Ok#~v**iXgg; zA;^$J1UbcEss(8y2O(5RaoBfZrd6nFxw@IQs)cWVif#YBlbe8K)~$(eSDuA2)(5&O zAHHHKtXWR?M^RMA9gD8S#2~%mZ_?+NN-4}YOhNf&$5mM9lJS_XoV-h|t{-Y=I}o_- z5M?N#5cE6{T;gAZk$kQVeos}JodGaeDXq3muM+PGCqDN^Q85-{wN-S}R>=Nsasg;~ zSJJQdqExM$P#8lHO{a8Kzf3V;7ZY}tZC9iA%G}Ti7Hu{JJObE9LkpS^KMy%Zp9Z39 z93n}127GXrWciajgV1*{X1eZm(!2&2EkH4)a5L%z%k z^BGAg8583yB|>jl%reQ_2qLRT?K7mpg*iqEL4FsT?kzJ`s5)FIv<;_3)f$?IoGSgL zKL$a`RCfQF#3JUPkQgHUk78bu$e|td%sFewOsGrtztTtP!F;0pu5z&@FOt_ZtkOd4!ASk3!`=J@$exin;})#UqMJ7zSOmteQvKw0;GDKcSiV1 z5EyRI21b1Zx1Vb4!2+Jtqq+B0BEKQ{SrHSXB(w6>4i!Q%az=(t69`b+PGNezazyvx zYpruz(IBM8H@~yY2HUGknyTg|7q6v-W35;rMX`(^9Of_8C`+#xxy1z6B*_*MF0$o4rWy`r)4GFA#K^LQHFy zLfy26$fYH8;^3)CCoB;+W8;hJ4Jxm?F+w>S+ZC2CnObVR(fY2N<4rSzhv@%aSz)Vp zS$wt35a1uNL_}nJ_ZwWymWKI!XVk)i11?5TlXy3o?CuAL##gOO(%V1tI#V(=lY*d4X%7|uo^e6Ke0rx#LUqlU~e zh0KYJ%<;lQMl!xhbL{E14k@qTFjtZ`d?Fk&1T_DY*r-C)jt09ltRy?iFKXa-8ckI? zg7g8!b$xE)rpmaXyVt03Q&-QDT3*8qsjCcEjxSO53r4IO90rsOLX|FZxw9zFk(n!d zC_NUnOGL(())s4#A%ru=6`gE^w!^(|45pdkm`E~mKl(QQtPyPCmQElJfsU*qy-&Dl zRC}Is5G6aN6X)tBj6k?)xUS=Cxt5;%N!~hp0aW~lFQP1gq3Jq z;!u}EDGu-*s$j@*@&(|Kt{_2Qr@m_<$G6#kurb2mk`N?Dv1VU~b@e8w#oS}2#qc4l zI)<@HgvHGA95Bw(l;A>v!!~UkHg$%dJcLo-YFxuI<5tIzhr`VB9f&uLq;=27ES%Cn z_)hc*>j9Ul46HyC(hL)|=9J8iA&+?55nHwKYGEvM9Pq(K^xiii+nUsu=9!JP{Jcm? zn~DeZlMR&oC4Rx>YuoI({{pYygkwwj;rrZ?-V=)rEQF4zkEwmf((jjpk&8adtOHlG zv9S9d_jiN0LuF)W%7fD*G^G!pvi>YIIw$k@tRoB)!1;KgAhxdy2CH4OeytF7U@V(C zJx(VI-UZg^WbeTYml&GHDeO5;N*3dV486$+A-8e%clpecluy0jQ`nn&}w*oTHe`+af-l+t0-4)-cYwI;XC zeP~F`rr?Qd9mydDQ^$}cBT)x(Hk&KuvRfyb?_}(nsp`y&#^GB!8CjuwEgU| zRA`7AbZ6vl;DHO3_qXzy#A{8BB}G3aDivWSGpl>+Cc>2S~Y7F z^Dw{cT0R^4f9QJ4fGVQ4U3k;o-QAti9TF1KjdXV-B`Dn~9ZGkXbSWVX(jg!q-F=qN z^S)1PqR1GLX z7|S;gsG8N%RRPfL#j@thdo}Nr*KIEU%%b-`y*S0kZRF0+a)pLEGT~1ICn*-V7NJ0w zf-Q7?PmwMr{^O_|D;E|0Ye}ZpuQ4X3HN#jdvil&RA@)nwA0)L2JJIG`l3 zdRn*H-FNJ|LPL`1YswzFr1rtk%xX(tKNU2>Zi6adlj-_C}R$ z-Q6raw_*A_U{-S~J?ihr6Y*}w%?3oCFf*oG3qJ(o2-cDa!?3_eY0vMNP+orv>f@$G zDURR_=6by|$In&cGgx=fUI&@Cp)aJ-KoQVpCI9Rwo-dG&R#MA>Ah9Sz6 zUo&>7Min@P91)c^2{3Q<@cwjLNiWT``YmU#BAMCJK?L|>aqQ>QMJ{{%?=EzXs$q&y ztzg0_QPj?U3~!()Ql{zjC#_=bijh&_>-03;Fc$R;1Se`OC5~^o3+L4>BROvnvlPZb zzq*9xKeX8KuJ^lH^)3N60kB_ zmBNpPOL_aHqy(dG`H0Nk&aT$y%ey*lj5`j|yG%SRQMe6m1l|I`~*G&PHjsZbP9bp>p?a6cz8z_{+^wueJIJoo(CQVQc@qP zIy*b}S+|B(yY6pJoa^PvF)JRRoyNx_ zBD(YLzLf#roHJ`2zNN$UF5P+ImB}F_xV)Shz-=_Nw6rrE)PQn*3vjW6!$X53$6fpK z7_NvyM1W9L%n@%9tFboeG`@ckRr*%FaUM z=+A}4l6^QQ$2H>*9(QD>C(mDe2Sj+R=LFUULbxTgiOzq}>W<4j?q|j@dhGwEs25tW z$yX$y;2GM~#EKtaBpItad#0*zkA-Ju4lRdHfo5+(j-En{9zO<$>P#rUWyDpK?B!b% zfMLASz;PVYJ419zZ758@MNWlS(IgO?4?RP3gb9@_b5KvDHn`~u>MFx}`zU>#6%lo_mTMY`o=34FM)lpsB6u42DZTu(mlJ0B#>|D4Ft?tIS zC|_qI%gE?Vf+az|aa|qAtTu!hP7^M{f|3{6P8nf#kM!rxg{pYc^^yS#uOk`WNta+R zF-{ZZ7jw6yx@t%%JIw23I^3^k#<;-|x}``t>i!$LWeFw%Y)`8%)svN;gfT-w;a`U7 zh$>W|EK8u&p$>r$fS&QB%ikY6_#}8R6c* z%dDK-8qI>^Tct%xuvAkpTZ&2;q{M`CX(Ns-ze~@fl1hZ?a+Rb>-l2R$Lx1HH6`2pc zITbvLEjqGf;7 z7pk!UikAyds-~CmSB^&U{H#cUZ>^Bve!KnA(cATy@q;w0wQjf(QFKmZ`U*8VB-SRF zlrEh@x5HzRpNakP*FruA{@ors!$a|{^t44!{&k;olEyTlY=7ur!878Pu6YyY!XS{J zc=85SoA_@1i3nLBJc=U_Naji{E0;ln8ZJ#ml)`cq%7ZHy^(X(H{KPC34(I^=G!>Nd z58>fi-I4K)m(eXG{h%fL6*Ne0{j%bTkkgX=tg2nG&gSZ-kMOhIY?Dtwc~0+$^i$w| zZ(1J89iRQptSS}xm4^iD)bq}^VJ()9Wmv}6OMByGvey zOzom~Y);{&w z>38$vVe@{r3T4#mB#s8l_XWMU3A##=}Kg#qExsXFX@wcwsN zXo`54NOotY6|3pFReK19NjzMJE2+&c*+73k`Q>-cXRdj2G~>CztHstJD2dC~re8X7 ziuXPqEvLCoSVu|JW1E7)2kX`Ml{eaor7~K`(NG0}N@$I&uHHKvwyR zA!ZCG<5nqXs&DG!t4kAn3u{T`K0`yWwp+gN^!X7=jK9MgLa)q5gG;Dsi&zWjd!;*u z2xV!?JjpI*qb*tI4+r^b?lw~Y$HyK6V)!~^P^{MEFEk|j@gPG;Z(prQIu@NzX!ehq zJCmCE#zIfIQy8o8CKfHOmPM{Wl6U_`uw-oA@it9BL)5*M_c!S8iDY$~Bisr76~ZXz zsxMIJtA{OJ{Rn*i&2wXD7;8(S6-peKFp@Q4T$I@#phV$&Ey_ELE=)byOUrI%m&Ob^ zs}Gh00?g)1;clNNMIfV9fml=cv$On~k@7#9f1#&1_GWWYY<``)>9K135DFKFbvE-C z-P$+c1py~_-PL6|In)om_a=O|x9@W;oiz^O@3uf^GHXO%q#jfV6=Vgnd-T5KeO#`< z%>Pzc)87vaE#{7XQ+tTiAzm**w@Po-W|80Ifa2t3m4l4*v&R?b^s<@Q`AcO) z1RWaNi=_!Nm6Z!dm-CarLt*_St(VMrGvWBo?>3{$h)z?EwR;@0ejTsbp=33n<+SOe z7#z>`d%{fO{JBMQASiU-p=el|AeQeZ;uYd{cqozZHlSLKV4g|X3{W+ zlbO`ZzgsYdbm+^z`!c6@xUX^M#v{_fv8 zE>uzSZkMsE-WOh=48yNX3cr8;anwXnLjS9tHh1gR_O57A^TCBDG?f{(P+lEFWPL{g zR2C~mf^kzu(s^&98|jH<{n}L>)a+8mF{yl08MCHbyl*b^8L<16XY5BUqu0xeq+9Qv ze`9Log@$K8v=15_DewD^#si@RA#ru8mzY0lgx)WZ0tpZsQcP(@2!#4a_l z?w3x9^V36KxTZdhF#0DoZ&ayGm9VfO8UbcL<(c`ZmFTtR8vmciRHLBa%AUD5i`TSzmLM$|^ zt$1<07G$7kF;o@Z&t3gV_nsUTA8&WVtM)9M**D(y5wBrB*8;Pq{!;VZ2L|8`h2p0KBlAcTf6i; zks@Kuo{=eOCf%^(0>(f*$KS zhYr`7RG3q_=r5dT-rsHaL24(=~$sFfn8 zGOI;Er~j7I{-NfBo9m8F=n2WkAD6v#(=PNQ&@7~8=fz{Dql_u+EI>@`JzLc2#1mG< zE7S7t3Yg>&<2v3ENgs^C)R-iUsE7Wnh^ZCn6*0k!Y9o&CAJzQs@cWF7YI<-vz3-fo zQB|P(7?0AfyP@a$Y~mD&YV|UU1}bw9mRnB&{S!qg{VXAynpt%qR=J8cRKd|pGWA3h z4hTCRbAga##yzc8l$U=gFW1tVJB}*UwbWa??nR(Ly{@3k^*bnw4NJ%dw8aDe>=OGZ z2yIJROQ*H1rd42gazcWr;qK%D&h=PTS$S+?d_3UssAYZakH6#e7X=b%H=vy2v7UHe zu2W;I3P|5?YH2%bCt@STzWS`PnoSZ(Jk0lCDsNwjaiIaEm}eR&1wfV~vjGJ_uO zcD7N_BA5vL%|Kc8S+E=O>SV>z09ZDyLOGu7Sx4H>o1^7)xGzHgbP;7qAm~47K)c%T zP5=UYeUzPLI|5I}WT4Tpc^c~|39c+vJ!|(IE=wPt?B~*QyUg-(l6Z1aA*s;=&L(v< zy?WL?-lKE=6>piw^74=6<@nfAZqU0Kemd3Bld^xP1CwL!0Lc*teaZoO;y7)%gOCFU ziGR9%q_^|c!CaHQp`nL4;|?U)-tTcVVA~vhZm#Lb`$X&%9r8w2MqchyL1`&=)U*#~ zJ>YMi%>dE=!v9(MwPF->u#I>yI|5)oq;xL`nsLvg5ou82i-K&HO*wmPczZ3RDmX+h z)@*o#w^5(5dR>8@0-n=Ks05GrO z_0umzk;8Hbxf+8mmU_s-Uu8XC{$&fHsd%GhvN=>yV`og#di@6*^$!=KQkQ}2esQZB zbNlZ1HHX1X43HG|xFKBm5(@g4$3wbIPwezbBGTtqU?4uWSE3^oLWmHvo<4p{kK?$| zWz&$dxg`n62`sM1Ra1zND!8)xf9OUQj$i&ohL2>%LHhz#LieFpn7$5U+l6WLuv15j5D93Yf zDDXSYEez@cT2cFcNg{^UVn7ZhG0i?kY&ahz&%-l7|%T!9Vv4Z zkC~1^mhV4W^&TvYFi&`)N-}wcg;^G{pAfQUSN<|U@vW@O_4HerEDK8w^g?N6B;th+PxXXs5!rI+pUPUEEa&Ms$% zg^(m2bvkOs3s=vAmMVS{-t=OQ8H1&HL4S{;_gTWun`%h=2&>$du|@*+dI+)iUZ#39Di+NCHoZ7D5yoE3 z=WnCEe4r~QgXSjI&D4QgH*5TKppSbj4kc(W6z430xRJk$rC}0Nd{fwt2(k6VkX z0u~92Y?7}_e5H`Uo9#GUq2T9TeC2yVmaB{yuFu}vhW0Rf1mX@4r~NPYudM0Zy4(3N zU)Zzb{9R7I8f*c=)A1sGZ*L$%gF$yIo;NQd9u9Ip~w^#(rO z-<6#FS#CLj3$Xc_EBZXTX8ZK>g#il%-*7R|4zw$o(S|ce1#pjL3>SaU^P~1n*Yvsb z`gZY8iRfj$@0xjh6OBJU>MOK_IYo-c(CJ6EW)%8*at^V#b4+4GdE|n%#R9l3RJ6M* zjAv)l$_Q9>Cx85Qt_~n~dmC`Ee#nx3r!(+54RcwC55=eR(6H0Z0snf=QSL-o=$6Cm zo|V&aiB~y`zbX|D>=n0@pskTm9UFsdZppjd9JDuBHy@{A9 z->P4iq{eGJO~0M|nf!sE@~jyZkhg0$AF^-pHG1;DwePc!MU(pv8w*myg~yhb&C+7( z*5XFUG7!RNbvG}h)#xLgrdoaySZS$|N)|Y)5SdDYKr&vlz{qRA;uEDvy-;#C$QrcO zCnJ#2?&7#!eOwA@lGSb&Cbzu^9Yu9r(jKnasU+tdXgUu8XX&(mJrn>8BLoHi2I9@f zJzs!p1y_iDGVLNA}LTYUqqdsmR zKME3(k6LJWcyNe{VOqD>u>SDZivn|`sTuQgzzqa~cy7;eKX2e%ke?3;T{`pG_{xWg z@(cs{BiKw6=g2tFH^&e_-5FRHMyoI~Ha5T)Anmf9_l(@;p0&7#`noVxyk#hFaYQCG+#o@`fHqyB`7A#y`SjYzxnH7(jH!dT-t=GA~)a(MG z@q#{IU!FbK*OhS+)5ygH|8ls_qZ7N`fEnxZWVBNafMwR=6@M8IO5YCe*Y-G^M1^}4I z+rs{t0R?PIxBAG)UGrkPTthA(E_y4{Ub^n;+j#dqRS8qC_(i2a9146w*bp7>p21}` zbm_a8od0=j0&xT@f^P@z+_W9>0(d8#W&b_)>xFceM1R3P8NA-^w-dBxY@>j}F_U3| zBcl?)#w%(18N`1PQBeAUl zzvHULU!W{e#vSZQPAxBw_)8dbu#I**dkzBzO+?Q%wj)0SQmQ|eK6$3{kH+AoVUe}9 zh^VjU1|YEuX*di5IuMq)kPh2&C2n_G3=)RU?88!6nQH2|Ad%4p7{edgK z>m$u`2*03$Z=&gnl|O#~7i)-R;GqI#EIHU0Ko4QOh^904KjNd^<{UB+|8mz>b@B~? zPK4;8LJHFYMe2ryfo6{vF4(SH*9>H){4u-T3A@cPc^|FH98T@EVxRGNnngJU!)db! ztILYdIfOgT#syY&howd&%`_-T){UmLVi!J#$~OcgBqT_%UPGf%_Tm^0n=ohY-q|i6 zwU0dMe4bj}aROrWpxZnuPteZ>WS9ix9@Kp7SehX0N8SHC!8h{SIMuHu4Sg_03b*V9 zDN{C`YuJ!b^}aXVo$dxA^q@^F+IUi9s?8B+WTz&Y6Q&zRMeqv8G!J=1u22^JKyzS; z?wQ33bRr9CcV@mHoTnDxN0c)#FIK6J3PaixS^mO9dR~(4pZsVm@1skZO%3e67QtCRAwJjo~SWm~Yu}YWmh#?uAf9JcY zf09K3^A{!e5bDH8L4k7c7Mk4oBoX5d+4D{0ztzTywv=V%;|MK^9g0kLb<3tjDBh1m zXP6mp@a{w-lUhY=CZX#18?o=n5;q&Zo%=vB8JPe4Ua;aE?N% zLj_4%vW?{2S3lU~yW&5L7Ch8OJC)G8ID0?z_|j{29TLsdcM?rE33p>o_FuaCy~V-J zjA=jfs&td3UbGq#uQ>=&Ior(WIL>%sb+wu(57Dc`J4ztj?CGvKi8Zy~Ud}V}Wpqgs zus8`DKtv!XT)|3p!Xj4~3^!1v%S#dbM%3q#S&l51CSgeLG#G z#k)akOM4hHd>rlE(%$9|#3E;_ftu|yoo?n{?s&J-BYGB=3ga@jBf=5_IA)~yBL>|v z&(B8yHKg|FL?N7h`sq_bH~pmQv!{As=bo3D7XJO#NsQ(4a3LP}`{J)aJ$5&UonB!# z(bmk6pyjTDB{n4D?#vRToFjHJmAjYOPc~^fH!mX6{b~vrYj)Q^%{bNt;h zn6QYhd}v67wVx&*JGo zFBx;Sv4>{ z>uFM;c{D>Pxw}J){Rx`t!+Ix6zq7&?m^u@E2n_|aS>nNn#M~MDDHk^}y8k;0?ZPtm z=K8R4tI)w6$OlBBIE8`nSL-qU$889Z(-QF~ByTid2xd%z^ta~=q~z~m+e)K}Lf=C~ z<-JS~%Z+OFNf7>+WW4Z3luIFDLj)cdWT5iIeVA?d=5d70E2`xONL4 z5-yQ>eRqdjPGw-0g(tb!#>7>-RasH7FvRpBaia&yEF1Od`vSqm$x zLZDd%1rCt;kB@7x^qn`w@sH=^n#F(BXkT`^9WO2i0;G!5ql%lKiOf-f#|KE7&ny$~i)KPAwz`=uQKCKQY37S=B3&6ES`L21N7G8UE&v_*_H~;2GRD-85#^ zJLh}LAZS_(9aXA0y64cuZgdIL^>l4O7&~NDp2_c+=_R(wGB-E3=xF$HAghv77wS8W z`IYc81p)J1iA1eW!B1dJV#9veVd)hELRYkP{XT!4h@n~0;QU`((tS|`_#~+K#;SKqeI^` z^pG)~ydl+h7LyRcF>&i~guw9<7$CL&^FPLJ6>TBCr*-OzVtgxjQ^)pKuql<9aVw83jW=BchWGapk}Wl|#;{p{v0g?|B%==jH z?`xycz;~NkNobz3EzniQL_Fz(iPpAwR198`1#;oUWOkPxiB3qX*xmL@fA*=#>^!i* zl4bFgNUy9Mxn==H9rs-?oOI&gFsKX!L&2!w<;Le{eWisBUFCKD>c2;oPs?>`v$d9%7>U{zKnX4_o~^y5CoZx5N7Zh!YfjCnacaH`g-X1AlZ+J1r*b-6VDBLivzImO0 z@&5DOtu5ca(APAcJ#Kn}Cw{%$c5zn#T{L&1!Q;@O#);w`I$LS#+_&W%7?p3Uj?Sa6 zymJD$J9K_-kTFroX*jk0UFvS2Dn9K$uD5dCnw%l~oh@3u-?o!PXv?1=)Y!sd`)bED z>EvpnL4~$SwTUf~mqgijC#luh{^_z0qhl1f{vz9Qx)&Ro#P%oEe_p2$y8D%=#O)UO z2sffEWn){ah?BQ1O$B}Cyn2G6<^mlHyMo^8>qmj&7^t$(P#=JQYhYjiz=PV3zv}6RYQ#1TXpD`F zVu1$61<0-+d~y-K;sUkGxD>zB3gNal7EmoOHrc1kFvW6xRxZU0iM5mfVrk&VGUX+% z0EjEWHo@?vmOS`bQgSj|RNXlAuSy{-G zjZ7@!NJ=PF@OMa+2tU+nzVJ z%-PrypZzWJ+3NkPXgXgnHP^~_dF zs0XtDJNnFLY29s<4NhNX%spu?3XcU|Lvi8q?=K!krm{qDcXxO2ra=G-Z`Pg~YKZCG z`3?-B`Jw;S0Um9XnLA!1?uIuOq}F498Y*S_3P{E!$>U3&Kt=#^<8co=qDMNb9(OR8 zHoxuk7wVwPLLtY)|Kdhq8LkEiDT`~3wlk(fi`X$8eJpCNu1LZ%=ACZdi+e)rg? z+vT+&Dc2Z-`K9l6<+=x9yyps8IYJ{d54NvVk!|Y2|3ND7jv~D z0#<)*a0|1uNedbqagC@^OFdKj$KbZxt1)08Ru6FF2%85$)31{#Q%TrV%~{`8xx(tRnLW^{FJzr4(}Ql*(IC50tOWi6P{^Iix8CD0xqsu( z%pDp1?RaDSyO10vm>n11dyKx2=7g(;@rmN}_09>j`=XVJ2mYPnvQKS+meMXDF_A6V z#CiAsak%;&j5OPeMd^QW_mJCIv?~c8fime7yzgT$`{v`gdHzAp4U30)QP%eInSZ`c zn0A}iOIe`aW>bWe;82e5s)=WXR@4&@jQrqrA2Xq0slM?Ps1M*_A_(2!&Qv!UrfNx{ zLCqjgt5Qn2@M4Hd`#poT(vO|%v5AMmt>3D%L#T`+v?`9pA& zPT)^ndq$Yoybzg&-VWTf;t6vfS5{-B4I#D{7=!?Ajym$=7C zCkgVZ4I{o`bp@T@=A3&lFPOu;Gaz+;16+3fGD4+IwJOxf1aarEq(`3=wM*C0LTkzD zRvDyN0|?+7kbmXG9k4y9?DPTsUCje+QP3lo(gCLtjKR(LR5| zF%gMN&T8q+Ttb;Of~)H%bNPY)1}=LBo577m^KJy=^$8y?y1aGDu{e_IQdOzWQ6`E& ziRubBuhgFzu?Y{^1rN@K#&JB4!7MwEyw!V~{Qp!u#Utet8X;`*=_X?J=Ob6Q??(+^ zM?v5}6|7ccI82mFmiCs2ccX^0;nr<_7f`$9;iq_FuNABiQWeD23Jc-svEZZ`!&+sf zH5IIwQ25naed59EbC_R>9RrWkM>@4=Qj0}`5ros4tu;JgoH1$5oV}*cSPmP<)8kOT z@n?TEKL*w-cdo1+=GOHjoHL8H)}YVja6?{Q|1J5guQr2{d+pV&+X|Nhe-v``m9O@_ z2uncjf9C!Z|99kEyUA^Pb_zW`3xdVC8z@;=IOz^{a~LIU`Z{ulLlKvGQ9H~W9;HbNcO3**^d0pVDRh6&gSxIEzE3^%j(ks!Axi&-I896K>;Gz4 z|3mkz)9a}-gwzfndDm|dnlH9EQ;h!jVOMP;t8Ti5<`SfXPz;$jmP9-t0HQ?bl#~>S zq%YbQUn5ns6|~_o5N_&)2>;3v7AYshM`C()fba9g7zzl61zhCNhcM0mbLmZ?WRgYF z`R$sVAECsk_5?(fVb zk|YVGI|}-tMTi$CA@}>k8>GD(X67L9); zmsPZUG_+W=m?1f;hno0GA<5uUqEKhgU0IgI@5B$$k;_;@2Yb~~g~MAF)0PbLm#TYl zp=$Sf)1Sr`o{)r(BE={~7fwYlMkSSeu+chX;>_<>dZBj8jF6k5KFp%qy^V`lkUs_? zl1valv9mX{NhgJBI$IQTw0Zcf+QJjc+#^9G5Q+u!;34URJ7B)r zzM3G?q-F^>_m#cU@Eq6sd)lJ!?@J>ivqdHKcj)HI%5K?H*aN9KLZ9lR^hcOO%CRw} z3NTH_B3Kfpszk?yx5PA$y{1;oJB;TVS@O7U9)8~6D0f#WJ$NCaG#9x$9O8?-gooDt z3RN@Gi2T-p@pL=L!c#rPtGoL6w|=(tbc1BetdJ6ia?$TPtEgYv<9%Ym z!m58#WTgElp^p2y5LPe6<@{DbUwrfGlS_3z(w&D0vMyvrIX4a`AJb^3I9i-|gc z_^C|RG3EU$49{gT`I2|9cu#r*EiUwTMFKAql~zNaK76+uYbW3gyf^=UX#N)a;UnQ* za=8512$NC0kACH*(W(gaBG;qgc`Ct)Zni*6M@5Sav~(`4c~AL=tWuc zx$>AW@1x(Z5B72x0@0P^q%_oRTj9H+i=#&hOA)PV^#`Qw6rXdDKKQLf)?Ti;;Cl?U zW?~Qno!|RAWJJ#nEbMs%PhSR1{5hz!1YOeQ)4IiggGb6Y_i-1Ask#?DU)sqcY}WlS zykt}CWqWyEC!2b9W#gH&VMz@#hvn2E2ye5T?jGcGRNszHCkKw}X^|SB>zpx%SsE@h zB6L9iO8r#-MsN{R1g0eHk_v2#nn#$epAZOhv_Dn%SAR4-gNnh2uPY$?!GF{%za>h^ zUGfWH+JY57MDt9QJM1uNo0dYqnQlvV8U-;Zc6w!?W`nW}$Bw^nIpL*wDRkAqAWoWV z1~Z2+Izl1_-m9$ogEPi8Pz3xw5)8RY^H)#RL96}I69b>yhR~s=74Wl(gW|^x!9S_~ zzXBX!uRQe!nA#u2>e@;peK*d3SC%s8dn|}=MjXXU-|Z|O{Uy82PHi}qhn2OW;w^YZ z-MO5A%?#_stLBxSfBoAnOeQ?EHI3%$g3)XIc`7z00f~!BLg}lz8qCkGqLjz|)$s&0 z0*1l;Z3IW86Fp-MQJV4QX8L4i)8-O}aIuNA4J7;h6w*ggH>NEf&9||YaeL|cy)4wp zRkA*I_>4iAF~}obWjv*Z@L5N+Lf3?`R7`_pe0Wnyl}m$*oSeJ}Il@;VqF>;ZtKbA^ zt^@tCA#ixA)WsUYmq_B4E0@Yvuex_CpK)(Q&4xH2s2@4Qh9IV`TWgWyORgnm~AEs&}ElV6#VzmVNgt z)l~VTverm>)IbEPN9+kk%b!80ciKMJBjI_!I-aXac(LmC=av`2BbfP}d3FA^_J1X9 zm~xVgP;k*;JeCB)8bl=6(>gT%K4r?{lk9nr%&H~SAA{ZEC)o>r;Z=c1Fo?UQc+XAOwP89~ zHe$YV>YFDt)I&vMTuX4Fz=(P>yV%2cPaHkeY>Y%a+zHjVoLgMsc#nx+rHbdv{cojy z5TD*~-~B4oD9!S>!+IP?Jh>Feu>ppA*NgF2G-E>{!r##0X$u>^GMi0T#aEUyE(hU2 zYUt-SvwDqpHPzaK==$DJ)2rs9)-3#sF$R4af{9rPU-`jS;`0E)zs~!_xKgiSSA0F_ z-QHlA+Yl8W zFDW}{3kiO2M<>A9`FK9+B0vg(0HhaYSS`?oZ_=9^Xg!)tNM5Hg3?RT~L|0H)qiB@mz30fHK}3k3B%4`#n-BqU6N@FLbX%E~cy`c-m} zPnnsS;!upSadF1TJ**1YOe`!F*M8q#IjppD$uqFLv3;oSW^2Culac}CsUTrXiAT)$ zERO$T&fNJ|jyVuyxw+}vlC#%r~ zv$~R=q8@Qhg8HZ1G^E%I>?YU99=I(&%a=IixPK#;6bQ6X9qJu784YYZzCAQ~xkn9V z2zW{0`n0&HO9R1_l3-)VmhKd`zITqlASF_i&+C4qEf#6_hj6_VqAQmZFC7&v*P9$!9iXf$GX~#xZ?U z(a*xgh>M8}pPGM0oZ@O~SoFkXPX$r-$I`CAo8Wtqlaz!q1_@2^P4)<~>XTIluSnNg zFaqu`dqG=zF3_0pAI%TcKABqb?gPNXC=?CyIyw);hGX9@y;o%#1jy#U2ScSHLJt6& z{oxp|f+VBgbQ_3Xe{^KKNBw^`qtCY%gW2MJfAo>mE5j*&aMJoT;houA&}jukXXIav zbk$S*FTjVT`QaH0sYarq>PzN`qBfC;n^HYA;r0ge1F4>oAK!_!tNPd1#+Od2NZDj+K`Oy(eP5xt5Bnmq6{PX@Su0H zScAWE6CBsV{tZJSfmYBaLJ;c-UIIG3iHEG42E|8TG&y2rjBV_eq;}K#sP!v)A&hRQ z=FZp+{8f1W=eLcj(a->sg95eSEWurnc!dc~#inHM^ZHMq$1EQ>>Mc0RGB~nMHL(pY ze$X>Q)QgS$oj8t1L(F_&I-u<=u(qOCmYixOOE3kZ!Mg=hwL1jv6hV8C7XrF$`Zt%a zG{|0}`L6%|DngolykavMWsMDkPQ5s2kEFN~KXEsz_pHi~PhOfPJ?+RV1HoYa8hT z;eldJrnSvr9sTJ1?P^{|A*r*F@%a>lc~9WNLVchNa|S{1paB~SoaD%KyHIW*h+22o z)B@3~Ad(eA8MT%CfwB`C@}C4%NDoj&<>Je7$y|L9kP zb@_V0R?PJDV^*dB??#n5Y_R{NkJBh;kmhJj)FSA4JS6IW%?i6w@u7pmI(y_S-JE!0 zGlj=MM%r-9;&{f(1lyx(23ac1K)Gw;PAwA_pH2lq&O;{3{Ythg8 zQ~xH_e}c882we3-=YD@r&Vx!of`lc|{bMT9ap;vZKqeU58+V7ezl(L-Wn*JwXGyfN zqd=KID{qy#Nd{5Q861UY@hF+JgNgrR>ZywO&wmAV~!Ywt@?A&#?yPIYKnr0wC z{ozoUUPz*?O0x7#phWy!UVdFuQNc1lhP_9_QZf^npPvt8bF0}|Sq7v81g}7tS`88v z(;KqSFW;F#fDXu9zN?qLc_yS9_{#WWb5u$jMDNt_eLJC7NHT_e zc|$`(EAX2gFa3GfhcDBZ8Jhd>7TZ}9>oCwpWig!K-z1n=quJ`V<#C^sdIVJ{0Hm{#Sxs$>GA zo0paKkV4NqL5h~mYx}lhs)x&b=)I`JVr@OXk-v?c+)yT%2Q>zP#tl;v6h=8U)~U4n zo_cB0O{7>3EUszX@A|^@#F`UmnFfam!3(tJd;MbwtwOx5AoU{t8eWZVUE$}-`^$Zv z$$gJv3kwU>B+I*Udi7O2*^oKA0C-~3ZE#qQtoEBZH{GN!{#lD#pNpZ|Y99MC95-{y z%NaqQEz}}BM7yG?fXUHAW=4PuOm}Mwy)}9T?0=_i`;I{W>Ta+(A|k?CUvn9&3Kr~h z|MS&7u%5^CB$K|3;XjZBOUpCBXk zo#Q5I?p@hhx*G7#S|EwB4y4qE2v#WP?&Ya#U3~@`Uk)&#iZY{HgR`~Fz+@^eFW=5` z(-wxjC&DZ}+W}LbyoT||19`l4^^}b=eHg9%n#|Ai1~9!lSw|aiWr=2gi!-IOSi@;) z^&?UZzJUgwDex}(=LCsZXaAQcx?NU`vLji~x=yVyT`_6uH8nV4is6{q`}_{fic)Ps z;K`_Pw$O6|i#@TG2WjqI~vLdaOyCJeR0nFQyy%x$H6(r9DpA`$V-h z;4Bq}&i7w40)guk+2Rg#=DL;6+H4NS&C%ASJ^u6$>`!SXYmHTlpUy7$Svy(3*^o#y z*nmY?gG0%)k&$&{uFh@NGC+Qf)`gX!K4`VyJ zdCjz!`S|&DLxaF15AlnxkqtIr)>WE%<9yO+3qs&djGu7i&|Xw=19un04S(QA)L) zR?a5If^U1TvW4RCiq~vGT?f0N&7AY-^XQvo)-$zO{AQdN8gTyfyc&^W~bM$L0uH2={b76VDgN$9vg=$Vn* zHM)u2vWy6i>F2~dI}4dXwY8I04}tbOjtq|4wgZ>->y!0`RM~&7I1jfMo_cZLR^w=I z3LE$a1_l@qH3FBuJnv@eLpeKK^cC#veHz%2Avd?VHAV*Vz9m1mSQG}cgzlIi?7Cee zjBOHFLgy;i*}#5o22^KNnE;`fy7$qG*XFW%E-shj_KWpOle9qDzya1<7V%ym$Q7A# zQ$8aN&wl!Xcp9P0zY=7*I8?W+7Ar80(7Y)R7yg_Lg8G}r@4x7(h|SRGmQsbV3Lk2{ZK41e#s?0qHKHy{*~ zB1zGF8kR2yFl!jPN!9hvdpu+i0MT#*wG_F9)BxcZ8I-MC-*7*c~dljFLl#<;1V6< z(d^Am7f-NtnCorhQ|}TwW%E#6U+Ld|ywiXPhGk1O;s>vz60qUwJ+CC#FwRm)z_8m9Wp&tXqwt|7m;pox&bffQm^L7X(Ie#_KBvOJxQ?MHx2J7<_B8>|;ZQ(#b%?_HR zDocWed+flbUa?$Kp+%AfFvaL#P)eIDwHh2AW&`#T`c5H${=x_FqxjaT1@C{M1kdaZ z;lk&RUJU^3P3Cil3C{}!-FB6LfZzo=X3uNgqz>+*^WhXT=eF&5qe0JCZdp@LRf>QQ z{zoKZkTJtfyO5X!)dCVCB)j zAPC!{9opxPo~G)@oq^gKK*ccVJfgNmVm7an(*h@^s1kufaC9=;jVg(_HVC(#;|Vp; z!ug`7m^|q+}O**n25927|NSDOhi!%TmyspmdB*c5sKY-xIz2lg@DDfNpmbR$LK5<_N^B1< zTYl+(EUCz!VwN*X{ds%%rzGmU$D`ZAME_80pFcJyWiWowk%~T}G$xkNLOh`(^iz?4 zd}9Ck!;`Fjj{9E98<(;204b!$>dg&$$&g6Vlm{&*wPKW>fsN$4d+tO5Rr;p=H5By7 z0G2W27OBAzd;QzaM|HkWsuc)gmT;I`lqRL}hKLY3X?Wt+0cQNf=?`mocC5=yyI*k% z8f6smo2c>MAtiRyOS-so(fZD4(pJRwowQ=3Tto(b$-t(LEQDRDnWNLjT{8w-FP_ z2*ehi2>x_Pi`1A~C)HvQ#CrJi@rvB_Ot!T;w0fd=)Z-q46rUf1N6Wa+VS!bLvVSJ} z+bGY5N>@r+&nMAGWu@q;Z94!o_?-P5g9sBvp8Rk3eeE4Lb+guy3SU?fDk|0c^cVLL z|N5>fP$X#g|BgL8z3J_zJdvo3TGr^Cl!1HIhYM<44)LBCyu`8QTbjOStn)^C*4dIW zZs`yCrE3e=rlh9%<~~VI@YT~8zA}xZ_FXqCA!pmlwx&0|E|dD(M!24(S6Q#6`MyaW zTTFw6_uBRr*EhoY5=G7=U!vTPQB@ZAbUr9uI-U1cGo(lP7naTsTsr<+*`JXCBZbj0 zkfZe?>7F2x>N4{=3ejdzM0#%}2Cw%)lCx-5MD1~L%aP7exlpj3i$U2;0s$^q z{QOJ{k%Cx#NPc2)&9h@7i|A6hNe@K@U2l9oPLXe?w|$qJeVd*rkX`(lD<3^F$Gb91 zgd2TNmy)oUWS<_w`(V?v!pj%7(yfu1fNEX(^|Lt|5K+8ar4! zh*)?007kr}ZSuF!vR+e*+8V>Ecp;JxxtO1+JWF(2o1Y2jKO3Wd+IrHEcDU(E@vY zmFiFmAo&203>ehUXWp#=UyI15Pjbw9S@~mC?|dIFDuPMxz)6mklasSjIa`>8o7;Kh z&tuQiCxN0+5d3-zoTg{@Ii(mF7^-JyX9ZcMGNQ{tkW8V;<070F&To%SPH&~o*trm_ z_`Bfe32^P{s#srD1#$oH`AF7u1LjKR*7)^-?)R5~YdGm#rejNuMk79R}p;7!&n92Lc|vp{MgC&7RFrbu7U?xqiNjMSqdXG!9cLKQ2hos~5^OyrcHJ zAa?bMO}o>pX=jT}#G#|pFT(nEykYFOvL_6wvgHM(Syui=&IvC9WG?e2m$Q&8&BZ&WRCOhAo}{gkE!Uk0 z;@`K(XLZA>&%_Qv17-LhHC@{>)?>cJY`CAi$!C!(;4?Ub+&~R!P(+@NGLw{n!QzX% z%Y*ctR|_Im8N5Urh_t3zSf2o5y9)Lb>m2-_75Al`fCaFXS5g|faIO*lsjHmve8x$p zGvFfliWDEDE^qWS;`=z^r8WnU^VJ$jn_+RZLiOf-aWfCyco23lMPq1NKlQlWXo zDmdF~VPM|iFzpQ0LQjp2{u$2z!ZVs51Xg8m)?)RrNud5q0q`gq}U)bAbY z+C`xKO)l;{fmZIlQalWpIrKEt)#LNIcQe&HgW&mE_<^k&{h3lw0xe2-9#;>hrluJ3 zn5)64)O9vPnv22jAlzGAvvTj^sZhk|aQ>{u#;2nlr~5@U^shwq76%n%&1&YThUT$d zQ{w|nIP|ixLzpRav{FIZoqE*Ozo>I3LL=B}S6cWE>Bt`v3djZU%`LGo5ogE{%!@#;JbE{+9vo=zN<0`X$q zk*l(0QJD(9&0imC>w~Y9@3{4j!*8162z~n)t6y6ZOSOrkm>4tbKHerwhH#Zcc_WB7 z(~co)Qq{3*3bOT6zc%yC(HB4e*!HsCEjmROr6EFPA(`y`pe>P!Vi*?pw_@fdT~39K zrtzQdSaA+8vuQj6z4psk2J!WC%lG%J;=E_Z;tA{So47j(|JbM9G>fJ8GJVjrnujnO ztB9y^pr>*28mD-w$m+=YN4O-&CMpCXmw8I*t zPs}6xAlUs?Fy$8!p^4G9vZq2mZjKhUsU@B^q~<}NlB`Pn(f=;EjpZ>v>MxJIv-DCU z$t^Y4Ee;Y-?7J%MeRa3;7?@l}s*%Er8906kY%7d%6NaPMnfjzOQAd!`7$Pg0%?=#{ zNi2x@@HAkb!c#6yZfdacG7XNja!WtA_HYW2pEmK_T$mD)!m6}W-&32;$!y{z80&>5 zdX|(1TO~Lu6!)p3L*kbi?MI01!+yNLHeUt6)+&a_2J7A;WS9oN#s3AuWiQOO(C zA+Y2P-1b|{YS;a_ITDVQzzI%h)y*sL>uDH9fb5seN2(Kw)I}v}o3XNvRwbmowbmyG z8NlZQ;&y`b$JajAXb*HH1sj`#BK z3kb#gbvh;Kh*v2bMtnSb7o35OCvG!;IGsnQr2e@PF*XjoNmUGiy!+?`OhNGcj9I0K zfdU}WIo3_)*CooWNDM(yUDN<|`(1Ww@z7eD!_w2>WOLYK8pP3Y4^#c!JtFnXGG24v zLIb2)kQI!}%v>zAu&EwC@KxoDL<^pi8uuX_^Q4{J_gy=t1j zlp1MrW0hYRIA3KMq#`Os#r-xeE*V-IrYWgupC2MfS{=O(I_QzYpp%FXpBcUHDTnSWgCb=db zzrFkN5Cjh?eW1>(s=_r%Oox27CR7nAwFR#cBk+?j!o0TW5PYegmg!ht>ZmQa}UapA`&w- zs8k?~HBu{V4y@>}mj4M4KNqI#no5m2-SoQC`ysGdZ62W*d*D4hgdJbOvrlyK7B17! z564&YE6a`Qb@Bn23L^ysLof8dLcsrxF8^~?mK_wXkc0iZNGL(MUok+Idf@>oj#!1-$yI^QJ0P@JJ@9w1Q7uL zx1AY8?g#!XjzS(jlfjBtpkC=Lrsjk9k-^FC)?a<$#TIx!1v~}7AXwpLgBLBjBU<3S z+Oq1oClHm1S{H|reCO_Z`BkXLxxVM>%i=P{V~(6CtC?cFqbjDKS?jl~{E+3Dqp9MA zAD0jn{e2c44%Y#vsiM6bB*LYtRtifr1i#aGZW+VO>yshKX^nLntCXbh&$X;d({XC) zUtVH3nt#;?JgMWvX}o=omnP}n5R$Vj_Y$xFib}a}VemR%Y0G}=vvi73J!F0Y#Pu18 z48m;uI)I?Gm0tKMlEVm1miX#8ry*o<;z|y*vAdyPV&W0xwq8Ppg#0QG)>5k3p-g@} zpRT=1x_7#0!br^0LXxJKPk2J`GxbHbuI(gw@P`xaY4LKtYfLyidALCwyP0ft&xeqm zCWmU_RG0Mq;foSD-TF3CsObJMhqS-S^U@F37ln5K*G^L2Qyp!M#OzZmfW%y+QlhE1-akM8~cUdW0k@jUf0JnW0%Z-lQzG8eeq`aJR&p+wmX_K8jK`rVPOi< zb=#>RG$PZfQq4KElLIDhkYZT{nJ2U7ub0~2ZI`Ndfz^m9rT4k&*)sTrdGi$p*!upS ze$h5^u4{Y`uB#$F5Ab3%{|PJ^{4lX{NIuMz&kwdhIk#Fcr=;ak4t(Bf3yU4 zFfF$fEnQ)l0LuRWi6r9Szp7+(giT{)XwQcrhiqex;;E2rJ zzgB5$CQ%R(3j9yrV}8*l=tMxQNd<7I4i!y19~!kTgFaa@#o@=b9yQdaryPkvU4)d4mHYtN(9l`=OK8 zo;}&9&C3$cpm$GQVSsbB7(FzOjM(b-Qq3~G zZhtL0<`C{>ph_MgD8FwinMMdY@C;gTN;Qnn%wS`*x-d~e^r@l0k@9=1RgVl3)s1&% zYvfe$Kv~!cJWpOxE^%{l8Q+C{CFZulXDmot&D`;F+ZNbQ;s^#dKDl7xYsmNU55o$A zA|s=sp894KS5!!iq>qo;E8-g(-n!bdJWxP#x*KAgT}k1^AU%#eEo%kccx51yD_^lNX(l+BwN-N-F<;=`jKm6M0mLPX9NE7qI{D-wr+JV`I z3*2aa6O|w`C2;81vFb-FS6o`!4vbnNB4x;Ue|{%!SQ0te0rf6NGp4RZ5vcRPDVJ*~ zxZmso4d9us{Iup33_h-vm#}E#Z&ujN*H+BfuoXtRS^?3|2;&VneyWXspepfgDi0!Q74wpIgQ9}eSBhq z4^$}(yapN*DDqc4RRwwZw5x7G;8v5L;I9^*CFE(7JdcTXXCdtcyp2@U)dN7*6E6>!WscjGx9*&AnNcg*? zM)nN~l^vkrB8&IxQtLgAbGA&rqV_VHJ5A2sp|R5I2Jq=^H>+C2Y-6K~>jLMD9k=Eg zeI5%|0pX4y-lfze{%VhV(=exBQJm>Nw5Sz@&yo`oYN(5W6jUopS3_e`-rU3_w^n=8 z%4PFu;G#UMff)q?>92~QQKa_RF-s>_jiF)`HrS^TB8Fa&) zm)hSL&4!DR#%~6Lku9fC1)}*ltmN^a2@s;X@bfjTu-(l8LmU)@FIGwsuMz!d{Agh{ z5F@pqv}D%BFg9;1{h5tM9^AvqGtF>M9pL#$t7)bX;KdgiLmM+2cIBedugQ?w%w!~P z81c8Tv0-P$dn8Vqix-`Hg58B$V;_*idGa2)zR)^D)NRBz_;UJXdvQezE>?n)TbWd2 z3Iscyx$-`~g38Y-DE){nmaFV<3PoQK)oIUy4-AND zWR^VA(a3_OR*zH(x~qAgSISF)h&HN%P~7fvoHb*DrXaIfLibS z$)i2vc9+Rym|ASV?Vb-b;u{k%h>U_z4-4#78{Pq!AYUuxBV7~yYKqF>eQ%^;HPN+7 z#G^zicbH*#QMvJ6T=D!X1w+w~x~-l8D;34kI=Hd4J1t8?;QUdELC2ScN3 z0xe*iLx7MTYl)`8{~Vg1Er%!vm9l+)?^O5g z9}y!$ryZL9&HehYjpEOKkOtEytwMm7bU-6G^0YlBL-~+C-DI6kJ^kGvoesI(Pz;+_ z6~7L}9|DRF!t#0}@=`7aIY%~bn_d#ZuM&u1o2%lBWW2WMkJ$kmE*vSxpN!#(ao>FJ znqC5Pp`%Jd_}mD_@TWA;;-Pu_>9Ve6kxp*>om?C>rN_Tq4j%$48~4*@(qWV&k@QR=s5uk$2q)MHZVum)#Q8RDAf?LiGl-8TEfevC|X=&k*C)h=onC zIJ$DhPJI@`{;jM0TE5{8H23Di&wj03+v~~btLtitU>@4 zU+f_HvuV}*2VfXqIj%gmxB8E|1)eu%9wm&NpaJ3V=F5n>$dm$hi7_7{Cx6-`lk{P2Eb9ujOD&b%ybRXv8vIFu%z$A^PoG%wqa9UA_! zXMK@y%#_>}GEc}+xud~b`_p2W-s?_hQ~8N0KPvGg@O5wuw8O1(u!g2ANMz<53V#PM z)7^2Tsl5pXT4ZZ&gf77UJWr*q=1TU2EHf^E(n~&K`;YdEZKR#B7r%7ZH}I#THs$sCXE+W zxE4H1wy$%B^F?F+x)>H#hRk8?6n*HVn__c!D^Q@w(x+n$L**`tcZNMIP9%&W%8CUu+Uth;@dE$ke*&(~W#|pn>Z-q>W3K&~sPI9Cti_UqbOh2g zNV;Em%;{v&tJ$*WUO;H_p*sp_baHgwqBg$OYd&FKrzNbfe|pZ}C0EPAAY65TfGfn{1Ylaf&P1zs!C#N_L4;^ejdN zPVPI8u!ap8iQ0t@Z`?G+sP_k?d=H^;*Y05J7wZpI6#R6Jz3xuo4~_JAxR?pB8XmMA z*2Qo;4fS=>0+Qww2ITgdm$z82)#QJk&(j5N-#p#7JY7A(##ih8G?fD3KTr3pZFsTS z?lVEREJ|8r*jLEn(;yp)o035=a#jUJrhJ>uW7j*F${7NphC0~r^x=6=PFl~EYEyzE zt~l_kMxY?*1AW79KJgM0o=W@>N>l>@P`hj@Yv1i@|D#s``o?PP1-h;e#XO&mgV_&`ZJnwvNiLQD7d zkn0pD;(yfL-TCP=qrrGV0@bjI;9qf*vhI1W+?rH}bA97J+tD67{XNrUIV`^eE~$EV z<@*cU|DUR8K=*-{s&iob-rDv5))l>a@Y_cl)(r{{yx%^)9IAPT?mu8H?M)uCpcch$ zY$)oarB7cp=*U+_`HRs8ouf((u~EPW!(D9TnJ^MhK-w?kKHyWxaP76x?efC6bsS3W z#^59`+E>c*NujyTr^7cOFNB(<=}iX0yrby_(ys@ripb{AJ+y1y$l=yvT2-i;e8`@X z{0qPQzQ8%0VWP{Y50aTYs3g0h6TX#}wHEZx2Xc;OlBLeXTJPw3^MOyvo^NV*x+X>c zv5G>2&b_F<##FuESd1BJpxSRpkEx}4Aucha%xA5}{S#nJo(+XI2I-Z~9A#qC9t$Ra3Y=M{X=y9!!8e6O) z@lvNlu)jR&uL1)i(yfS<>>tA6@H#5>)0H$lm4>qzy7GELy~OeAhjO1%f%_bKv+>ho z7^hav7OX$v{&rC^2Zs_Yw$rPm?H;w+Q+HV1g;ANVS9gLKGE;qTaPYtTS91_z++j}P zOmombjL3wq?)YdeH*zJic^$)L-0U)GBvJVB+aqUO@Mu`~cpX0_HG5@i}erViH)Rqn5Bx4 z!JP$F>>>Q*(@6J2o)%vmCB*g_M8n_!-Ue=!Id?20$Z?dF1a?4ZmBVuLBd?)mT2)u? zH`URdJ+UA}zgU{>yJ`q>=ow4jr1 zry^zbDaXs_Z)Hob%a(^GS}o3L2}5-48}pRm$Q$E311(pQkl!B9O|#Oa%XplDIy($6?R1)G|t9={kpT75fHHjY9$(F7L#L*!2$K<#ubz zSwmMqs2){3tfaOwTqZ11EH0pe`!m48w+9fpb5#?ff6auvbVx2r-oHC%IsUrwr{jTZ zl!=!r6gCpZ5jzw)7FQ#6gl1L*R%YPJ%y+DLBExT$LeBWG=!?r2P2bPQ1pPReZ@-wu zNg%PC#aTkj0N7cm;R2q)SYs-}_{6^xIwy?r?#bA(Aue|Fsmd-=v25Pg(uhiiqiR=5 z_Vw57y!5mwDP=fTGOJ~Gmt=d7bpr(g4W{M*S1<0DBSh+p3N|)#3`|TVwjLh!?`MCM zC3%ob>gmm~$ae`qN@0zSiF?XQN*<0*t7tc9#3ee26Qv_Ye|$V{gvkHVZ$uR@I4z5g zKyAM=YKho57DFpGIETM*-9I*gv5OVYZ zsPHlJ5h`FBW?z>8qr>UEo8aav!rK0I6@tTI-isX=6a*)VSl|Yr;#}QkyEz(U++NqA zVd{m7u%d13_~>x(@bI7ja}yZ@BS&(DKNZl8NMNoi?u zd=v?$LbnY=E>>=u?hzyJ4;mUQ5I=0xKN)!zhx(|Zh`zo}A6|&X1xfEKNLh0jrzN;S^9>Kl%Rz>BFpfNmxMUFh*5>f$BjVp zR}Qir;Vmt}Fb@+DmE*uKKRmg1Uk(-97_+mdzK8mIh559VIM5B`$xEv+;-l*bboKf$ z4^n7hlnn_H@dRZ1ECj>#NOnrI6Lb50(F(wh>RG1K3>gwPCH+8R&Fv@8&~tAByL4?s z(EQjh`=Rt@Onm&nf;TsqXYfDH`ZZ3>YHAm`iK$_`TlLj6$?Px|g_h-^5AHMLQJxMw z!qsv8-Qk$|-tWX6-cxr#?ORf8wj|)ty*|*=OBeUI^C)fdTJ)Yu?6ZK7KFBFS^@0Ul zoCcy{1hXkY^ie4MWe>-_AW^QH0xd_pj3i`KvY@P8B23xMN zqle?kNmi+6vr9?08uAVerP*bj4lQpVKY;iPS>l0z`wK!tofnbC z@ewivf?awgQ!IA$v{qOym6g!RHvFDa9J%TB(&|>qCPP$Cc_AhS;hxmpq<*=zbuE8Z z>YGyOp`tVwYbZIwz zXt*wQ^%m*|D;ktd#Prri%kD;!!S}{SOXy*Q(<_e#Vl=cX#BmhMyKAdmjoMcbt-u!c z{kjuZEsED;47wi8jczfj4HeqLn~9zKKD@e^MgR%icr0uV&W)5oKZ{!sEe&pfA2S## zHDRnqr6|?C;Ekw{tTYRVa|?;qy^;MIJ$Zi>Ln@A}lLSw25IS=s|buc1V0=`-8OYZoYC#8w zqSg@jdQ*tlz@RiCq@0%dc&y<`)}!b9FK79qNrn4I(eo&S4|{P-e;&`K${Y2oO=sr# zD|AbeuOGy0wD$G%#j(x}OAXhwcX6=y_2y;%b#by^;I>G`kmG-uTJ+Z2Rh9a zZ)i4UT4OFJw6W>N9RBPr#LsP}B5yl2v6n9!KjV@q(8|Jp!e^y3mr1%`2w>N~)rLjr z#Erj#FktOL`41qFFV0Y>U_ywBn__24qe&Y?QO%$I9eTSTnlp`9U{Y?`{zYQ1BnfJ? z>c%Eka5hJGwpzc(H_Is{)|c1Q$(GA-P!zwpeC{$f);|R)-yzV^k?I&(B?XByofvZ(%RM^NIG3;{skBh3Xz5^Oz4}|DGGsJpb$-ytEp@ z(Uj-<`yi&~zxLcsPUP$PuEHMMa3@G~+!zw6Z{?I^*&g6x(}HsqlfQLeWJgcBB~Nmp zTkz9yQ~fyypO7^8H5k}be#DsC;r5awGLcxE}HH;^n;TV_8GhsBVNB1$t>?`;p zthWBViufvmi?X&6C!RdmKhw1n&i>Mfh~a-8V3S$!i4vJIRDtdXP&`^d?BVsKEpik5 zvB&L!Q%Rok%*(c=6{0rAV4@Dagbz6hJTld9eVq(&%oq}(O4_It#JKQ+A5MsiXQe_L{pEGL)fGJKzl=DX=GkMJFF9dloX?U{S2Se7W<1g_TRd?x*#f0lxowI z=C6-Te-|d3H4ec9Fs7RUG${Lc)w>`5v_7A!c15yvy-&_O8F@1Or~aZd?6sDwzJaPl zUQkrex!A&yCKPdO?s9~pyzLrp#JFDVw2=($08#|oBlfcFH{Uz_|8i3GOQMHmL>=7h zv0IMvdfjy>FPUjMZ`m-C_zn*LCISq<-G zxJuAyOR%Y*|5=(ev*f;A?QQ9yCCws#<0hy^6P)|wmKZZ*HUy1sYX-C8yI22*bNlm- z*q1PZ@S@R4KVQ#~`IOn{8tr68o85|DrzCrl30k(F zHSxZXrRLQc5^~vy*e*GiL?$mJ3Qu44$CCnk_v@VK!SLLKwey_`E+L_&MamYAGQyK> zAz{RP2Vdg3JOj}#;a2QW4=KS*7RtxGLwK05_f?~;)f~V{uJvv zzHMnwV0cVg^4HaA|Fyo^CfujkFrv*Ge^`f+Ir?UB55Zu%&iZn5-RX;#JsK|8C%tc5b z+Vyc1NwQUB^dGq}mFtE?t{?`8K>W}&5-TuMN%ABOELAZfjuun%|5vWo!IL0yAc!Dw z`s<@sd5|KV=nf^8hzCq=wV~KpuGf2NOMT(k`1kG>q>Miuj)65i_{c96a7Txu#5ec$vZTet|wmSClQpRzOB( zb@g9FB5;l~QH=R!ux$X7$dfK2i%*;NqkDQRuQ}}f{kTf3_xSGTk2C0oF4qYRRn|qj zI=oc99D;qt#EG%UrRG??HhYIzSL1!A%83zP+-3F{)$6C7c*=rNNlU?HhM+Q1Q#*V~ z=;n5>l0nqpJ~|m;4X_Qp*cciA&4N~{;YmyTOD9pa5Xd_u<6R&*TKvbp`;pCE;A$#+)YWpyRz3XpDh=ypdM<&Q+LE@Xjq~)#}UWEjotET z;p*DKkwYit`u7JA5<2T|3tMNYg7p=4ZzxAl_6>_54boqbgT$vtOo$|@<9h$R$`F!4 zZi3{X2roi_727~yGsh40RPgi=mm$tC;dRW`X4GH$4>U7(5(j-0rWSnq=4 zN*F^HuaTjlFl?(vg|M4=lYvhm4Fqz%I`R+|3i}s|S|g7i3Pnwb@0ZH<0s+x=@M(e< z0GagbBdI%Tt91kazn&+hZ6CudA2n?2SSVGfZ|zq&^qeV19LJIX*LyS30LHjH;RYG2 zq=${|&A(+n-wV&QvdG6KoX#x{xJ-F;x==}I0-!NJwad9wjC!`zG;3O=F5r&QvqN!Oj!K;t>cdR_BcMm)&wB4SXKx|BZI=?cwTmS&!E8ZA!A|n_RL=8y-@DBT%?w z37awU^_~L4vaA)%KFg5VV%67=cBzR&@7+DDZ)2u?w5U7G26G%C|0F2FQZhNp=syHV z_g$~gMT)>!?^q?02@^xOC}74&s%_Y3_|KTJj5li=U?4B+mcHiA;fW5EH!hiI1;))_ zf=Pz}|9LLdh=c|D3bpEHIxnJe%_mRV8D(}Dev6)MQx8;$jd(gml_}=^TWVnwyh5Dac-L9>p#mi)?s^A$o z+uRMuwZ4&o>UHr18lNG%;f0!VBTUHsYb8Uj)v)Av{>y6qdS{2eNIUVk4adATW-Z#l zQkmZ=nwXGYl=xX)k(YcXxQ*TAl6)0Ew(ViEqT%nj0t$;rxMn8B5+>v;IbIt4I0=A45?iV3rkx383$AUO=^WBGUC@el4i^i%+@`34H*pCPqeYZJaQ-#>(}T|6228*LzS z;%Z=+s>sC@SGS77Zj7&^ljMnuO(_f?R|4EjFSc$UZ zwNgd9_xzeMRG^`ualF5F1k>sD&CP1rCVbuvW2>$hpF*RF@USO~X+6xw)|Pnw*ve#y z`n7Fe;gt9kVeDL4x9V^lnm-=}nij~IqmgslXuR}mY!sZFo_-CzCWW6zKl>Pi9Z4@5 zCiCv|)?n&qP`)zT=+4PSiUAnCs@mE!rDcT|DHNZ{YvnRq^~3-bKGD$oV(Pg~jUFp1 zD(W1}u{j|^0X~-SHI$W&tq|l&@QCh3qT<6JMQ4=R5w9uJD^OMI7LV$cu_m zC6~3K`E}XA4OCfXZMRgnEo^9OI&LjkETwS5E-Fr2=J;Xuyk?p>Qu=Cz-gzgiUnLe z;4jW2n?JVjvczQ0w$@p5>em1UqL5pxn5+u&{lkMkv2Qw&!osU;&>MTrtI{7Ij(k5H zxZJfs_WyAr7fsyQ+aEgeW)26zA)?DhMJT8=ECZOM!xkDi(SmvExit zJaavmD~N&b1Z$50%8EN=8PEnvRpik<4ehJi z_o)7h9wa_ygZ8$lT9Xmq)JrsGK;HTzSuz8% z|AKuT)_Z&VLe!u&76>a9ZNU2PCXiws(55|k-tt#|`Ee8(>f)g9%k8ti#N)tu>mD=- zf#eduf0)vdWr{;-6Nj+dajSKllXkDi{dlxdtiHD?zsOc=`hsnZA{Mm3i=os)Jc2up zi?r*DzN}S8_wEz>fq$ZV`p+!2Kt`HEF#;cMMh8T5n-r%fRT-vs#xDBx#<>qd?d558 zG7Ab!OGWq}xcXd0Xw?z@W?w-%QKVO~Qh87>(^zRH<~GMmKiw%0QXUx2D!6-WLttMd%g5fw$xWT`GV3_B2m;;9GnYSS3yOVqAvx zgiWoD^g^1~j%4VF5_=J)V8{^*pO!wpEjrWcTZhNNA$9U5cRD2^pDKtHQ~Q>isOv~J z%6QZXJ&3$%RtJbN7-|KR54j&0Q8w}!nSYp-Lta$9Lad2 z?t<2Tzsh!73p1cl+C1D$cW6%SJi9Lg2zav9qa#3G866$<0|b+ek7QSqP9s8f3i9dJ ziJgT?>3KlOJ$QC69<@%5gh7h`O|4{fb`~I4a@0!LKW+5l0D8o40@gD(*-AjiAY`DW zWdUS#Y5|X6QvPeleg8>(1^NsM%3i zGe;#6MQQC74f6}e%ck+LM_CVppGM7FE&51O;FgNbQh=`_6BWW^%AVnj@I#Ai2iNZ# zl%I{L8SCYYboAGsNtEpB;WdFl7u;E}jJQ?TR;sF< zu;M>5DtTR;PFXRQ-Dnc;QWCK`eF=Nc=|}d*1r`K3Sy?L*t)_ty2@rM=ohZr$Xv$;( z?FY`cG3(KV1$1y9$E?8wy@CTy!O00$E?#W)y!7;zf7*=w7{iTq36+$T4%`ag7R6^+ zxxoJ%U0$Z-Nw2tAm6yqS|5JzEaZNJyuWj>(o+$FT?U<&>*fAEn%bJXS+ct8We^a_uNDBsUXKrY&to}G;a zI#T_&xGu+x3~=|WAR}jSNeKMTV=^M;Ub^%lNueKmH%9q&ccBT^6=crHuwzwk*RT;v zf9VH`9Jw(KQMtqFpNdIIJ`rC~GboGvBPubRG{zB@TtnWCo&v_s9yIdF!TSJU=wz78-j#vl-w`5 z_UEs6B)Cp@-w+A^s93^DL?dSkv{#s7*mGYq_k6}Dv~UBlLDl@XZ$KFc6{=q2wKq^z z#j)jiQLgn8l%T3;XuyYbz%(pI0T5q?h%ZGTHarMQr#AD6$!-_<)AzS*1(?T_RGhh5Wzqq4YP|jgzj?8a5DGF93^r zA#%50%>c=0nY;pjN*7`dQ}C9j3u9AecRgHiCyWSsuHuLu$rP9wJ@M>ua{IRIqHNo? zPA5s(boS-nZ(bLvVwl!i&NbEfsL&rTVf|y0V3Zki9k9n=qep^ct_MP(olK`oU6+3C z3+29!q5zf1*LK{ffjKY`QXf?1vL_BfEoN+@KgFBcG`aZbjHujjk7=km1$D8nv1{*V zd~@*6m=M~xCSS+(pbWU=$HKZIDwerV)lA7c2P6f|_KUf55(8El2?PgK=X9o>w=(HO z=LdKPHF+3|PA*1__t4r;ey9)v7?s|8QxFJ4x(mw8!H43f&F<~#fC0M_Ng9l8qZafP z!Fd`s!S$kUO)LyAup(HT5-xTW1FXgzKWAos#>J)GQg--$!>>;4eh=9cMVXmfEt4V@ z6xHd~V78{N)KjUq7b(D}3VSp4Mjny+JZBe1>sUl$#Mes1 zgWL!|l8#!U)tHM!A&?zWi0CGkNnHed^vN)NF)Sxl0HmKAlHflk-D+dw-*icfoO@KX zFxTov`xYBVJ)dZjWBRP6SO@hw@dCC-^WXV0EJdq2M?t{+<~cYc)k8bF5f=!cf9JvmpmXVeUy-4Dpb ztc+%V-b!XSq0+Z-4ra;S)rIvgp5H;jl^MKeJ0cHg*7P>Uzrqh)r3r|QK*NKBzVH(| zCjHyxzPvI5DNbD9*)vZdVxxeHQL5De!S%%BiN&JfZwEk?P4S(l0i0(>*paUrRm-!_ z&tB=^p|#RJFW3wL%9KDW2Zw+|0Jji6z{mn{zc18b0@X8Ce<~Mjl;!^6H$W(b6A@gs zMhswc@Rug}@DOmT8uS^Y0qjIX3zUCY;sGyk(P|CT=LdugUTaLCkOIt(DRR_>MMe9X znwlG%7+JtH$ngTKX7lc_Q|7m)`(W}@Ol}U?BI8-}o15QlZEacE*nCBZl6pLPc(4w8 z5@bo$i4}*trzCTrg2tq!?2r%<5dnGSM&#v@+HtSI$IJ9Pw1}gFfy+`x6a%61MHV6w znOaqwa`EsCSTuOkC<3orqL`ss_K~VzUz|;)`YhN6>^x0ueB?)*L3E6ap#xi^m+(N| z?oG^-_2%o#Q$ZMvr$Wr|OY%$KO2u~|&=!~o0Pr-}{Fk9XVchWW@HqgTvf2W+UmQ4y zuz)%?F*Oxd4Bm_#A6UZ!yn83WILr`%e8XD;Q>WUaF)uIA84w8zgG8jHAb`_EVp38F zfb(nv6QNd5zzZ5VIk{ANVgVqie!C`JIY>GG)uU8)>l z_usqal#PapDy6E5*$nW$p?f!|8W2k75P-unGVp+ce^WQHH79{?%g)Zu%Iy?3SX5`= zJw1INaInrd9g|;+;cGb(+G(&O&ebKB|A!OuUt$R37~t+3b-xiPyy(!Y`(|z&D=?i?(QTv(9Exxk#Qrgh6BTXkid8E1 z?3~o7_>BhubTzw%tG*=Dy))p)O_*@9AI`h@T^mClfoxd4aUjsxu6m4P;Xc_-C^t;n zz@Z}rrOkJ%Z^zdL>6MB#WA>r9NcA@pykbDx^x6}8pY=+v;m}1$&_TuyTHez&+(?Iazv?~WfgRY5QFVPk?Q#BSo~!SjReZs`6mOhHF;_zkrURY zKs05ZAL^S3oC!?p^j1_oE;ZccFU!0&8TuDJnq(BNte=68+c7M4hcQd&C#7LRqp1C9 zjmY-4KgG6-OYrde)&(4Pdjn+{@v!VWf<42j=e1-1NL_RoYvuJX2;pnFc zfQ-tKBf-OnupQ;XRxj`UHbd^X!_WQ?H|mj7Kq9@^;%#E!xLn39MOj(wcU9vp7L#M& z?nnP}E3rILy~CkQyxOs?R`^NS@kkcPRX<#|%}x;v;2vDdVwc4X$t0%`in zVFZ2Yju0>(iuaWuW(LLRY1%>RKq57^`kRlZaKOKx1y-ZFg&X z(3l5FlMI@+&R$8m3L)f3JIs%Kl-W;BNKWjM^U{i;U24^S=N zfm`wq8(Ube;lAuU6+AOfMH)m?tu$39tab7oV@~H!Yj0jN*t)~Cb_~#aeT4)S)NH1J zHYqiCI`mc$YTm-z3;!_7+HcE+pDO+x#8EN=s(t_8Ff`TZ0=N`QIO_{i&r>kHOnHjP zc028!T&X%dZ&yo1W1?j`;Q!C0Rw*pdpnBsr z5*Ycpf!+Gril_X;DEN;Mi_)D;oeQpbLQc+0r#x)OEBQN{-yjg^OUbtad6~A|q=T>8 zGk+c?QM=>j<(Q++Y&1YY33|WVeW*P33N2tkR(Ru$H6-#zHOkM46Z$AMMqF;RSb8V! zs&m@Vx?$BJ)$myDflMO8RZX?fmG7NZX7xYLN4eT7UGmtg_rDoZ@N4fstSpw%zzPbzu@k`>s#jG`viwt9{Q7?i z4!4=wDsrA3L3nuKZR}i(fNyKK*+cnCGkTa(kXIMXJ>;)U+p_I(io7eq@-7LyQMoQrm;x;)+LT)|6o8_p? z?M9*2oFFLH7-2|{NgFq-j~?%QRF*=8!;qN>f*?N}Ky6hk!6G%MnH*P2ze-2@Sad`l zqH2UCbOFrws+yWyQfzEDK@bpXp6w-c9P9~|Z=_q^>UlfHf`o*0UX)UAfVAS#A^4Je zZc&P3$27Fwq8LDf6J)Re+;)+N{2^ zmKLyRLMUo(166V>tc;+H`L_yd20lLnzns_@ONlrgRC_;!UaMNR%4uJNUq&k94U|m` z0$%O}-BW@}N^#lz~}yk^s!N|a`?HioK|}*Q>2i9s+vD^tZf)DlYzr@dlp3D7n+YW5~$%TovZLRyH0k z>Aafh-u%xMVb!gvCHW&_!s)B$39wP*Y(@qa>&`m)01QHT0&Mvg9~6sX>Fp+BSooiB z-%o%IA45U+vkWj>L&pPO$^3E56M1%g=J|w)BgFQ-;<6T$?LDrTf|kqUv|>w4O%kV; zyB`7F9Bdg$7F*b3B@XKmmsUp)IxYcI*~{L5U_vXLZ~99W-Tq+w-vx4;63jgF)ckR? z(nZ5{(}#*e*$WLc4~5?c>Bu|pzF^|R_CKp_-uZtnG=&pP>Sg`_H}#{%1AOOBl1K9M zdWVv$hu>oFD!L{O44Q&zofu*YZ@Q$b-Hj8`9DpqC?=lv|sWXF0m_gqdq52hUGMK4$ z)d#+eI68{Jwl_z3#VGBzC*kPD{%MA~{mvuu-s$^!9A@wYckVrBq$EhlZf;Y$<^&-< zQHVS>(F1myQuCt|i)Y6{k0ymhekEHi)B#=8`swBEa=?QO;~6Hs!ec+r{}y(mSol`v;?%~066==Mmc{I46T9QcZppk(t8Q+dqw1} z3UMQ|K)D=Q+m-z>MgAot5tf`{YeC zs>pgLF~NT)MB(!_#y2-5tkjVWR@7i2z1PR%7^L6C-mI7k#nohxmwNlK(6h);;0YNw zH$MEg;qFS%#HZzK3OZOjMT{`j-83EN?l{Ow(I8m6Y!I|bTFio3`U90 zD-qxpgP|h<)JTNkT|OvC3NC&@SR?2PJB&I%8#IoktO4eQW=Kjq7n{h)P-W>(9Puan z->dZ>e4R= zER^Cc;9xM=l7EtLbo61VQ|{dF8uAG6y#C+PwYsA%AZ%S1eWeWj9@q@=Mk}WH@TMu=IzG$glK#+-B1s)%P9yC}9C_+(e}wpoY$Ys6!xUPt?&uflh4se5No^Z>%w|gQLg6UOKvO*1~%d^Sgj*) z%HpWxx@=xno4Qw@ZSgRVV?Mw@`)^TQT`6#4`!PT9fN|pj6F}fE)X1-c0RJT?ZwQA! z&KDMwv7p{?9-O?>`%fky?qU`AMfPj($u(Tvi`hH7h&L#k*yC&08H39xsJD@2_MLAB z9yu>fA(R<9w-l2yeY8HX6qmJiQ4%$-=xpU@k|{EhHhw=U=D>?9=EG0PxK|+;s6j@x zGTW1}KtTAbN1wVqNN)nEKYeC+l&U3H!k@a<^%i{~7vhsL@Yo80?RAo+x=gRmQvs2s1Vw@=$k8RC4X}G% zDYW3wDD*_s2eb#Jq}Vh%az5z#k+9#{boJUIQ5SeJTz?^%=}7uBu&jN@KxfR#e`cu6 zCUri?&w$)t7nI%`h3&2&3V%lna9E&P;*f4}CjD}{{`a$2$T(FM7vMZ%#aeG3sN z8cI)2Ca^(wu`1M$z&Ij!vt|rXuMg5a*QZ8P2t_cIc<)dqE%1APRl$H4|3auEE%AoJ z1s&hFZeWq&$LGJeRTaY<$ zzScKY0eRknWezf}0P2EByVtY0ArLAIZ$w%yg~pOcocn;_P~yvzHD@-j&4B5SV_v_3K%44C$gnz0(v4PMp;Qd1ZgIsCm(B&eOI zv>3K0Q(1SH^ zEs=OF8!Yu2IebQbYkySCicX1CQ`4v{F%B_>MIA$}I4K*s#UjXFY=sv_Tw93Ebk=rp}qb}^?SNw z#Vg`M&Pq;8?fUaKinyJKjn}c6e^iG5%BUC(w|?k;ZeY$_NZ?{zr$Bu-XcKDHEXK)0 zIc64WRdb09pSW{h@LAg*LIw&7=GB64F+e+V3;9hP^bp8=atWcfqDA-}cRJ%(aoIUcya+k^RKB6xzxh1JH2+vAF-YC~vXYH&)V5guf03-UhaH|bcxtA0gM zE%(e(p|CKgx8`*%>CS!xjkweDw9}jHTX8nAc?w4J~={-dA5k&JC+x<>MBj{s+#9}7q$s{8z@T6~NA(~Dsm^;HlZWpbY;PH-)A2&JQ8OR!wD(ZYfN z^ZeX(>%$+n%ixRP*7xWQizmq0K(9{Azx+uwf(7k3Xi3~+IY5eLd)x1Ad69JgT+E0@e6+tsmvm7Y%m{;#PCP8JDn%L zMhjsR2|YYataE14FWC5{83}Auyi%4M8NXrLVl9%gM5xq?wi<+D;m~M(D3A|0#6Vvh zApFk6iwwHB3NiMwmxlVc`ypK4Kq90yI!r5f+3ThbmD$gpgBV-l7vT=i7JGP=&e5#*P8nELH8DMA($r zW;?1qKAg_xJruCB3ud__=5rfCMKe38^g*9e)2L$@rE_3lN;3g#mvg z;wde%D$XdLxifz-KXW5o6?2aWGF$sOTh?>Slj)Fr*lX`r5__`N=W%m?qC;q~`9x#& z^a0`2(!#)v+Rg+wAZy`|x0g|U!Q?ztI-f_=Um*mh;r3eH$7+e(H;c3ojBe8^*uU8W+n(kymv!z#nr{{JP+&gjxhKjXw zz?vI+#2EsbSeX_c3&E*On9v10x^9jj67myX#S*9GFijPf&6O)}~6gU^4jF_N&M zy9_oCMLjy!+5k7sff_r23s{)q!jOtMGcyC^4UuLGEQBKs#?+-6n=-qTGVAKm;ol_f5&^(8BF{A+EHvFu<(d2g z;Fs7Gf$qLPGNNziaj%R6jO~{!GrRyv{dccRlUmuGdwPWX1<&W3cB*$Q2CMBJu#=Q~ zh0RkEzU?xXA8!ix3swJiv7|l$!i)!*pMlinZ3o;J1&;N~dXAE+Wx|WAoUd zb&)bZE;7(mYXGk5@l3kSUbKq5M5uPFSJ$brSU`D4&OCxw<%P%3b;&@$eNf&RAeZ^6 zz3`N!$^k!qYW|V$A7HH6$#!Y{)Qe zRV7clVcZZj8p9uTk9`kk4VU`Y$de)2$dE;5-=P!Xag_mmrVYX^#NN_Rcf=A zdtltjAIbJiwNbICFXZt!l4w+E1p|Qy#(>2`E|fEU>W>`$7WWlXvd&AtqN${Z^LVU4 zFZUZA%q$+q?yIEbM(a6JGLyTTqhbpq06~M9p|x0OF15+pz#H3c=eF=CwN+hL#HpbogcU287RP$q#{1O3)xN z7i-%c0HSs!o8->x9gdF2D2SD8Dk8crd?W4WnpszuE(|1K52Y>qtrAx`uus8cB*Tvr zwma*Ac^OHS!p=p5U;EhrKQcJ{j=1Z0MQ;)C3{ZyDzP@lUmgD|odS1-%1I&e)jtLUd zhEmv1@gCR?zAldH_I^nhvi-CO!2czFHCP!0@+6q$SpXlkl(hNxdaZSuaJ9NEiazH6 z3v|4qhyz_dof!bzISBwiUl33Zx)Fd^>GY!MOg9X`_xAQ)Zg*!4M>Y5dbd7w{J8+(2d(;kEY0vuUtrgg(cu|E3T)Py&sB0Uc7en$^_WK zm6Vj^yq-JDKHt^`ex{2Cf)EGZo~Pb`A(6}8X%Nf{xXIx_ZT&|z3+QHV^QNi*7vvzo zGmMZq4w>a!*ZU|i{v|Ajh^ zguiP4qruae>N4$}1|O0=}6+;o(5I@^q`6yWM&xe$VS;*S$#&VjgujJ>-&H| zTSBg>!J!(E*W5D&_Gl|&2KkeE_m#$Nu#~rDE9R@-Y(4wWbrjCB3tZpi&9E>L(<%{3 ztE#eBRM+3nBAD3-kTK&?dG;uv1~KS&PE5co)CM z?^#$=gX&$X7_5p|0vC>ZJSR`1+GVwkw35?aR!i6gz)k-!rvx_F-Q#FHsQ<4eqO}Yw~Cc_}x~IzS~Fyv>Ot5jNUZTz_32UcwyleVO~HVm$^D| zG);${A!N_+x?f&u)TDj6^ydHWi|U>}Zb^#C>|m7FZQk2pZO>~oU|xetG3AXL*4Bm} z5l_@Nh=6tRXT?@oRVV!DE5Uh1s4<@1N;3*B1H)$B%6FqaKM6@GAKWlZM_9<%YZvB25EP&uOhD+J9&;|n#U+Pkh2aHlB3&Q(PB0%9hD!^zYSX7PpB=B`bN)1I z%Gm%Jq~u;EwK4a_?8}FR9V$_&>x|@BP+0cr1V2rwXI5sN_JF*8bUv;h)yzBl*X4cN z2%D$->FO#iT9gvrM->h+a{5U3TK}3)-cjXYmNUdg+*_)T|3@uH4ue;ST9q9HBrZ&& zVLeGw4k}@RjGR2z6Hj(w6*3HtF<2teX2i+U=|N#`aQ$bsD)i6ua`8dRjJsq^i&dwn z5~c}?C^@QIF&ThlAKd^}lnxfw95nj2oMeO-1SPJ2_;SyLkSRkKneGS^ke-BYj!gNN zio6S!oX#v4MueWs@k7rvG5q52WwTV)93|P;llOyZYLgytg~O8wdZOyd(jvQ>T>ax$ zilBwH;AMSBXN`0EDiPyqSyh$~x~Baz^?dU>Cwrhf56_M7Yr96Zd}?}FH@iGf6zn?# ziI@&SssU^pZimgf`6TCjYKG;a>Wun$LR`WNVU#V zxnzfcOlMf5gji(kUQR4`b2!f6DM%wrb3@l>>@jRB5e*yk4TOhAh8|QO!_Vjwm4xN) zEyfh|0zw6j0rruyeq=uS1P5dFCQmXbK@uRg8dqMZ6ev1FA*PsfuBn4^H8(CiCzl@T1{^42C35iKthYImCsnICFU(?qE`@d;KW&Wf}Yv{qF@`5%HtV{6fN z8Gkz?2&OoMQVaKUn(s>5XDs5frj)`edNkaRr88!=HjVY)#1i2Np`LyJHdY-Oglc{F zH$x6e)hP*3l@L+&vRRff@3~O9_=L|FD~nycmmFQ^qA*(dJEEcKmsoOFdl(MU2Gqm; zm9@6JAmlsntto?gtWpAaBw>rC^m1H~zB~>(5Wj*?gT~AnLqj z1WlwXP1N7cOTOjlZ1M2_PI%|6J_}f{kmaL`l7nid($1L}$$%9UIhz}ZeW#Q{8P`H> zTzv`D+AZyDGIW<1y2n2BjNUUkxb>X_!(8UH_;OOS@o63UJq;Z~sA-KV*eYZPYPHkk zX|y$0#w1Y@KLHz;QyBwyzGq^1#^;u}guD@EkX7WXGhJb5k{e%Yw{XzswUB=uQ1~U$ z@U#{cb%Hf6SnS)u?yeZFX27N6nZG%Ebii=mv@Nm;NPrEW3sdkGWzP~_vbk;ivfoBrJ}gt61{R5^abKb2@NN@ z6vWhHIX>Ix?PS9W06x?yhaO->1U;UKlz~R^A+7JuQwcl#wo}dN@C0 z6xCw{_2h7R%8O}jT%9z~8KP_EH%g4(eNry{rM)6wdoU>z$gyo9jRjVzgDE>emEdNn z|KnpTiOWo@2d!t>chd4kSbe(*ZpQD8IujvsyIA~6ob*_J=s#3ItCEw)-jWB0Q{u@)!UdemJJ&W9$oaU(~QlU+VVTkE6I;X*y z<3)w#L?5U>ST%B{T~qWR^nL{{p>=(_BN#-oRQ_Cpa)*XOh|Yl>RUliFJ?meL9T}AL z+XP!JTPk@$?QAz^16r%gPeDuU<>*v>o`YaQG+3}UkX&2rZiD;#JJak-+QZ*%B){G8(xN80g6>c$&rK0{0LFp z-P|Pt3POsx_AV}QKD1Nspq4?KbHMeTsIEOrz+}K|+GKuAt4d*nG5dln*Vdnh!%JAA zHjJRh6+{8*fO@V6E-aRcM>r=)rNiMZ2`UWw0;U(L4B81IqHZ}%OAl{o-3zzvsY2y_ zIy7_I9p80SV`<+!oJnMz=?ns@L;0f4?A-lUvf`Wk0z#~QntCoD8Sw?$(R94f> zkrG|!)_UJ`caYK75}#9NHefDqvUIn!URBBDV>X|mi;n+`^sl$BimD$NXqvp>@?t4M zl=)Ndn2vD^SO2^kLQvsbZ)T(tUT|SQ46nBdQhzMHE7o$+&@Q`=W0OgOKN@T^vqmWqL-6*<~i`6G?PU4d2UBpZK5t!$u0) zC*3bZ{*045F`2_?T9; zsP}=uErxmCzH&$~%cF{I(h6 zQ{fI$LCe%bC>=l+dzeTNS$d<#W>~gYP_BF-L+or`c`qk3K}>+*y)?#*Dg{iiuXE}i z#XYbbajqhjNT4ZxGEF)neK`s`-r-%h3=D^lP*V-*CDCcaEE*AO>tN+x8*5NW*db<^ zT)BN&C1VIVE3|u)B)Vkx$oBavvre;QV(2fm(1dBNjGqfYlZYMQf(2NTvRWolGqpfY zE`1SK*H|iM9Zg+mIZ1HDV1B`tz`RXQwSLIOHImNayc?8oP|k| zf3PYlF#;^M2E2JsEXeN<{@}KQosBj|QlTI_mxZoyGl83KYI>vM_6o*%t2chu%Vgh>o7&kdf^nuF2ou?i z*s&3D5U)JR-@o6wtQy!*cSq`1;QaREVIo-qTXC0UC2YD5Y-aXR>@LwUG5J>T$2U22 z3O9t_d9|qQlk-GR8~*UP3}6}om&Q4M79zWuvu?-@tmT+pVH#O&d@a|bKop;4rxB|~ z8^{dNFRP*x2_h%zBWJs~Mhn-g37fP2{PQ<_aycSu2fp*ActSQGfkJF5Z@`H(7#!v= zWZB2)smHzY>V0h}%*Lg@N`Uc8DKVQ5V$(!g!7!EoOAn=??ORik1aM9$C}VgurI0ma zF~G+j7;c{vrdxY{W?$dG9bfy8jLz^_eErI>(V{~b4u(ik2vEQV2V+cI-6&Vgqk~B_ zp+hNZ$As#;E2i#=PZ2KqWwNTROXiI6C+eH6(wdq)E~ag6 z6%b3>MN5%Zi)S8swjDaBJdM`YPz`L_)CRgK#sW3pqEcPF(_d)Qq6+sPm8w!ER&Mi@ ztvCx@nsoYDkxRnpygJrI!39lkgX}6PHE&^+muat9kO5_TC#P0EvR);7*0QF8f&|7? zqpYkxZk_=ZK+mdCIW#k^%*31X0kp`BHPn5Zr$wLMa+5c0vrn+SJsYB`dh>l}gwl8% z8+?BZ=bbgP&RdDoG!nn_oGaMsvzjhuClwWhmDOkBpg^Gg-24Bv z50BhQZ!=#Oi7=5q!0Tq!65FA9^oUJ_nsT}xYf9=D^mTO=QQCAz6O_h+HDqv;$BJhm z9ZyWic9v<$4B2cqVTcBigUIu1aB4R8-ZsfH^4F z=GUrM(k{eHP3`;ugGL6l*vvzHO5n-!QSy6}^ATk4k%YqnIef!4o`RK}9KY8dr0Po% z#otIy9tCs@qsd6TBSynhv3>3D1y*2fl`5u-z{ZaM_%kzfv_M?FJs}~08TXt3Xh%S$ zMl}{CG6rc(s}&uw>9Ga!Tdp9KichY9Qdtgu_Rr5yAwE9L-Ur|g-@nk#LqR3>(bGpK z+}tqN)~pP#fb4ythF@Q{NJ(lm{{Gdke;c$aQ7lC}-XL{pdp5ywD|m|&SqZV@Qfnd* zjfzqxL{2{u#-Id5u)zojJ%76dvTd(Q^%_)o ztF{Wo=N{7mVpB=aH)|MZppNSTdR+@n;BaZnP8`#zEjwMfZM|fsqSCA+Po7x2{md+y zt@-!w(1k{2h5Ck|eP^;if5phmG$?Uj5)^la+>invGN-2MlIZSfSh1PPctghzmFpp6VxG;*x!a0=^r1rfpyjo_PG-k(vSzb;CH!C^uweaBJ zE|I>SaAb^+`=pe$L;uoJ3&Yw7K$2HbfZh6g3sTg_1RgBAL*bd#XWQG$om*|&rNY-A z_~@bs-(N-H%g8pxJhpv>M z)e0IqWC0550tppDnJ(_c2Pj*hZJR=xw7#Ci#;R8hxuEvafDGSbNp`652+x2l3ijM% zsG1B&$63GRPg_BIMGTfhfeJI7mAWg51+_+mmGN%eu@f9`HPDoY>$?DfDdQIq`KB>+& z!K0E)JCKHw<3~j;g_tXZnwWgsy_4cfPZ@N?Y`s&6*?XpZd0Y$W?G4aB15Q*>W+k}m zvJi!Y>w$6@C1EDW(?2V{y<_Q))XS9k@SyErdYZW8Mjv%2<@GvKTnr13dbT0UlQvl) zGiY8VEY7@?+v;R2-GZ5@j|jZmFN+WmTrn`&>!d*dPuC0{0Y9v`_;}N49wja=ce(m$ zy!}(~g3haz>a1T_IBI(p88%)<$nNej8T_5-_wV|Iw*2lli}1ef89ycI-akVSKi{cI z4&{mxtGgyrB_+MD&Lqo#7TV?6k;1RB(RxcQEpLO&XqO2L}$WNu~m7E09=F6uGf96Vs(~u+Qeg!>0 z2M$YCeCW#+za#r6?7ALwP?nqPLnuLJ)b zNgS$C8ZGR8)HNO%$%cyw4l2zRvhk8 zkO;Yh%(H&%PgaKxs4P{4BqjZH;v@XgmDp?k>Gk;;jq%Iyk5>)blE15M=SB_c1!V`m zoIL3nUxpK3uCIlwF6j2ofB1W^TPQQU_*93Ws-0X(C2VwhbIQqY#Pj*wlqZ*zoJ-rU z3q00O?NuuM$B4}`J%$9p^o5=-_|H2BZrUu|%ab4M`r)>t-+clsftECsGP&&uu5ad) zJ^?`)@X%hla3ju}-XwsP*A8#p`=?PrdcL02S(ufX`HL^7U!J9F&`TfF{sTPd`A{ja z5b*o%^Z|01(Y{EFHtvx+cK`i$Pc2FhOJ3~GeJ&aEZl)O%P#*)%4DMOxzobE(dn)Ka zB26N247_zFZ$GTb>+|2npXx1g+j!$;KJHpkd|^C8nV32m631X8MiV#`z!;%8|2wD;b`BIVNC-~rZzj&KeS$BDfw zjRc@D4OD(Nia`AU&0oh-*F6}BhXxAVtXV&o-5!0zAYtA#CLVtr?5P2vf>W!Bu-vHi ziNG62`07$%_bwS9s{a{wPMy=wYLNiJ7Mv$SPrwpk;P+@@K^!9aaE{Cj;{eS3zH+|Vx0)M_Sw1A!99ZefeJz3xqxed%~GbpeOK?JsU%&Q zjexO%|9PCyibQg3*UsTNYWBlJul4e>d{4>wCb;wR*tzp+;(L+0#SfgmOY?mMMF3-^n_BaV_63B%eaX~k#C&jo6hP3#AF zVa&hoqEAn;wps@XbN3`Yuvz#_@ue&hC$KGI`yJ=Hx82X%?zM%O4KA63ddAXXdS;tJV0!bvNHOC6#iLL-u3XCF7b z0I=)eXxP}M#Qr9m>>RHAHnIES^*u^dE@HLZ#0bQgT?bJ z(ooYwklSO?9legzMPPKg)FqnX?&F1YqBRbn0XO{%bMALC}mG&hz? zc}2@X&=_EW)oZubee2eFZaio)SddBHqxyuJ+^rM@nW(co6#O9Xpqq^Xg4uGKc~$U- z{$6^~A(t~=d+^boTVhDD(c49dWkrL^g5K)n1)rjUWld`2=luwHC|i}NdHhM#vS&{F zu?5aW!sShBYxuZHVY?UDU@H{R940*i&Wu&1wDakQ`HafH%KitsZ6zal3GY1{6^wRN zY0bH{j)ko17tj_f+@|Rk$kf2JPU!F~57y6DAqU)&#Vhv&j4?NWD#m5s*se6+h$@7lF8gf9GrYU!gXFZ8L_L2VtZd?6Q}(lDC2sK{Bly;s7)xn|EJ1#)uR0IJ)cLb zB&Ivjhl{?l*=@>=;h}hCPR^8mn{w&lAbeJ-n^38u2;cXo(b1oH_3K~?dnwrYDC;_( zA7sVWi5nfK;Bfp^VxU14m5Posiuk2;!g(=+#WQ%UPBbYDOuyskm^A4yaD@Sbc4uDq zE8KYvTnbK3p|b7%F*{JA|5codse`|Mjj|Ls&k`Af1sMc27X>gGkVAmS5RE(_@M$#H zt)4L*t@{9v7zZ^lDiVpu=5o_7q#}^H@SB&Gf}J=PWe;czvg=|VG5nc(19l005wZA= zF#g(n1RXyWwX(!mc0)w#2rG(?jEbcmOBJBzQpdF zOdmoQXdIvTt48#ptI(V7)@j)oxA1tBhs5>#I;8;sJF>6{om0(UwCJyob&f|zF$FV_ z{IZLD+sNaX*qJrn5(@Bo90zPi!OW2{aG&-qmzQbLr5k#D`)Bnmd8CRr^|pktbJsR% zE++*_T6vLDasK{8czPQYXk7vge(%30z)$s9$qZSOktL1@c{X&udWg4jsIf1F7Tug) zR*ozBMdUAAM-`y=P4=6)rjMWt zW*%X%>sAz;cz?j7$ctEML61-6p;HviI%Kf#)Mmx)*`+bZoUQ$x`j}jPB?xq{6@WY0 zq@q$_^n#4c*qyRre*Ph_;(Wvk7ENrRRSIlYjeh?dv5+Zml*k_-=G6(9G;u3h;)Scq z0h{s@g4ov}ozs>_tGi*l_{%89$tsQJ%t!C>@zj~S@bFSQE-qJz(z$q5#8d-d*^Kb3 z1PQ_0eWczT2UPbFyM(&k0e#>d%lfRIfsh~>w+4Pv8bsfU4xZd;exaZ{AM|Hdl^ocz zrJJ7jY{J9!DeXD<8T2wa@k0Xev|T`Iv1jZGRJ90AirtGGE>n%8fj zsY%S?VfW{3Kd&|cS>mcnTfrHN7J}OLhO~;9+c3Gf4x#lD-BimL!^J2G6LyX* z&P?bhg9aNrB1JC}#FDE*Mu${6+*y^UC-L$bqnjk^`}=B(J(3PZbUvN=X={$ho}!c@#Q=piYb`(;X2 zI2XmC+f2sFtx@<@U3J#~vu^Wde}T9lL?z&XwL&o)J!EIc^8T-Z8$bDj$)6wNjcu-> zavmpmMR)fRfm&JYt~{vmgEt;?2$F@n4+>zAf)Z%F^5aB%~zu+Wdb4 zgav#0FV(rZD?(CJ6)DrEAv`S&?x9OXmPOTx6DZ!b3ymcuLe$Wq4`qG$;d_$gj*baz z!c$L0n##)FYbq(3B66Ho8yE;82w*K1$kl3lP+Z)OfXK+j``>!2N~%nH5ua$A(#JgT zz(~ULLn)<@D-^kh-g_@gs?6!DS#`^-Ixg-ZgrcLbK1nG>NXUR0Cr_@ey4(@ndaVxk zSQ94G*`GMhG6Y~i2-mkk4SEA&%a$?d-~aCD+S;5voi4(Vlr$d< zyz1)1=K=zf4QXk&w*mkFwK@=qiSyv^9}`$rbznn!`knJ6lf>rDqg?>*xVF0b(DxxB zgXBp`^Py68-sw{i>?kh&0SyhOgz)gp>rbElbW>j?B69<%tv&jk(KuS3lCrQ%005v+ z=#Z4O07m0zMO|I)_sPi@&-vDC7fni9@J40j{zqeCCL<hxJRQ2LS*DPD3$&_N3YN#JbVN+nh@01<~-ad!;Fj^mrf}$ z7ZiNhI^;`F7N@fTXU=>EN(FO5!mPMHfoK`>rDf=-mLXp*-OI>ktH9Z_UxQ^$t#PBz zE_&+JdzE!{xq*amCr+RK3?|drE_SCdn~PCc_$>s%R^=WZs;{x)qF@yrJ@JGnItQhs z+z5jqx!ul9O{Y;<_|0XF{Mh5L?FJGTH)D^}*)SnCb{fLNM}T1%)YqRxS=moeD*aAg zxUfqy0A1z|pk*9Plj-cA5)JP#z7s0tI3)^Co%pgrxCgnA za)65-E$#;>ix)4ZCX{H3&}( zaM348c)|dCZJ1IGaM33aQVnp?YY?6o;G)+c+=E<5Ilx7)LG&h*N}23@lJdc3rLiDoz z#|yD5rxf`={eL=guS0pASv=e<^Wj2na*I@d$ zb{xI26d8W$_$!)kdgX1uo0+Qsx?e&`R0NGaQ(s+ik>~|u3IM=(?l%qOT5>RXP&j>f z+zRO=(QnF9KmXxRPYC@y$UN_T*~-dor@JjG&8cXeKQ)bJm}0 z!nspNp$sxh4RBwQNsv)SNr6mn4-}yqHeQ20V@p{50s50-8>pfTk!HXH&)_C^QTfL50U- z4f&Q%{;pdJgqX7U#6+b-M-W5Xx+hLrr9!mV%jc@tESO+D3GZ{UI9$p>e zjJ+Pj}FQZN}fTuKZKg-AgqA>^h4t%r6eG~hxA8L zPw)R$b$9<)n?N+e{6ByHS7HLnACHkV!VqxYUiRdPbG-c96kb8y3xg)&yihot+n*>J zIOB*of-?>eRyT%&h0U-Y4me-J)xY%h^c1u`2t>4pJw{tYiJ#0MfyFu~$U@=jvTE{3 zsFXZHN=j1(ArD8Y!=&Xk;PRSCC{*STRs(16?T+yv{=qu@i$y^G6Z<wi0HDm?sfBT~GpM3vd9sbi7dCmXCN|K$C{5`S%-$eiEB4^L<>c44AZv310 z7!Pu`dy&%`D^lA405F7VYamd56C0K^2F6Z21BccODFB*ifhV+-l(b%~RGnp-)$2YM zmWj`+auaHFF|LzY{8htiwbJh6>|^##6(&<-rH#|CLoZd|qx1sBJfTo)WoBUM$~tMQ zVu#P^1hup_&&Vx&ZQ2fe_qBKXr_DA3&PFdlDM>+#plAXAEfnF1zlD-2;vWG4ZP=YJ z_6eqT3u@sd6XM&%t*=A~evz^fmtc#wWNP%|cg2ehvL6I~7^O?46> zv3Fbv=I1kEDZ^d8y+4m8ap=g4O6k@wW@_Cnb#>n-<%y4ePxluZZOQ`msIH31y;OBiVHn!u3x_De4GPoe3eI&^P%}+ z)!qPe??V`|uKUaQ3!7?ZLp8N(=MTvN#?^zrmn`q4X@hn_GTBjs3e} z7V$=9>sO40VQHG`tM2hjdaQ37&UQpgeo}COgr12I64@$rtlzuD-0m z0+oE0K9_h6nwe{QRT$PTiciRU95Qs+1XBo{>pZzUbAVCmj$A*!>A_9$V+=TOV~=L# znQolE)8+T+VY~Wb{mCiiZ$j@s16ht*(vfN-15K?6hUB&E(jK zdDES#;}Y0~{QU7!jQGv$#iz@A_xLkBnnLabwk+L`kyWWQQ8fQxn(ZT0r8!+cB^j`b zidzdroXgyc^8MIDqRMJ{*|>B5SOD&w^`W7)A-Ak5)u_jVH_reY%jpvcl(fY^VG>kS zKFcu}8392BtoXIhi`PV&35+tj|W^qC_HiS0QW{9uHMY!KX z*k9JRzw7xYg^>$ZCRY`>A{IpMe7||URm9W8`gL_qSyN>}A?QAMYVg^3V*vFo^_{_R z8i=^?mXdbx?(k11`)P(&!lj5`P1a`SGs6w-viu+V7&Dey241=#!*z-%2A+?&xaG7w zJpuyb@`g+41-qj@drTbM7_mQKX zr+!BDn92`E!`|8ydV%`#?=6w{YnMw&s|6^Fkfh?xnUQkqNG>NJpO?h8GriB=&Z5FX zomybj?U<^s=@VLv?IyLhOuhbHOps(7VlhhRrWWC}Af&;sFZ4`Bt`}R8A@(h`dcgUM zJ@mZ$x9a11Cp12bL`vQyu_*&9s)#sGp;J^8sm@_0@M6^y#5gouIk8L{B@^ zb*g19kO)gRV!m*9R6^wNNiu*#Ez?JEcqEuM42QB*r&&$DH<;7A59-WpNoZb43X{Tu zwpa}$dhGZ?9}$)iIdMhpq0tXlOO6G_zA6w{4eYeY1!!X<(j*0C5KCAc(f1Zh)s?FuuQMBE>QY4aksuuk!XbwMu#m zU`s8}h@|4IYW8{ZocfVIk0M(2ws!yhI+HEi)TfqHKvaS5Q6Ma{6uMYF?3}}B8K69r=xq^dI zGzbIIF<2kz7Yj6Y^i~iJIbX%nma5!yno~HtmoPZ4vg+n-z{_h-b|xq_GZR|^7#<#u=A!fw2=iq1 zFUpTkCq{8UoC%}XD2eiWjOINtok+tb+uutnw{%HLElO&W#IbmbEQ!HA=)*C>?qz2! zdA60?9E9QUqxp`wZxb4`pq$B3R-0`s%VAIU*P<0rk8k#zv}iK!2p}gdY`bsGqWi1l z*dr$&x!U{ARa4Z_&}MRp(#H_@%eLIU*F((`wZ8c@HA7z1w+X%#nl$i39bi=?Tg1Bte##L@$X*o6LCEqPo0E8y)m{{#l5I~nrH^@Tm#_|ij7ZI zS_MXHp7F>Kj!>D*)!yTWIu$?muVr4NllUQ5Cm1b8&*`#cA68tnsk&Q}QX4hiq?Y*h zdu7}$2#As9fLrBG(9y;x$}rN)y%>(xl~^YIiu^eeI}Oo(XiH!&4R}4?CiwE#0d2e zB`&|}s;aypXK=T;Wv%Lb^6=vN{5gL*0jH!nwGZJ&Sc@ixJ?HCGVT~zcQS)OB%2^Ys3&-!C)z2p1-(HJ; zLk$=i`t<43@bDSkmgOa{`iDR?=+*1OLP7ZBb5O3IPJDvvob+*N&QcMA*;UWKC+CSUI{_>A(yS`VQ)Fh&r%z+W%GOdsbJ}T5xzg6U zz3;J7^?#+MXj>uKUUu}H0lg-*J1ZuXjM4(nmc3|dYI^nzEG5OvDIz9zmkz0+Vg5`b z;tC`ax3*SWN4*>#*7E$hgmYp*@ZjeL?=SbIS!p{S$+$NE+`8tRk(MTA{t_%J>$}r| zhCYF|Qj-IDqxFNOd49|L_wNJ0ZXxieDwP^$<7PI&)DB_EktC3Ylh;^hJm)*SEHKf@;RbOv@=)Y$sNq<5Hwz z+y@R04yLEAUL7uqh|8$URG8zLofCLAYZ8DZIDRd4v6dAyF9~K!Ao3u zKLi;gI{iL!CA}sIQd_*UV-Yu*5kNB?P#b#QxN&0vpuwNKYqC=7J}Dw1B5+>Y#%87% z&g^QLuk6adJ|mWgX!zJ8y*apRjEZxVgCI=jYu{uCu&n2)F0{IgW$) z<8vYhZB-a}mBmuKJLNJ5RubPy>y^_}l~0e`gv8ev8yTtE4a#}1kEDy5JsX;yK3yxy zw#&m}u}N1G+b-)tZ0Het^@Np|a0j=Cj96!9XAh4kAmrP|Cuz3>@c-|K z;#McTb9Ppi2hTKVK5Jcmn!4Ei9{d1ndrHy8v5`SB*wI`{A*F^_*BDVh6RzwwknpUf zvlB@^9SCp9p%?)mF1se#;srpFYULo1L;N$uLnP$7^PnRK40_!;X>eB5j;Si*vNMxW zhG*HZt|BliE33fh>aup!2>6I6tHqXyo?*ZJ0&Qw{TJO>_2NiJc*)G8~yv0yAr=I(+ z6}9HjE-XBs#v-p%t(8O~*}qFb`1U=LF-IRRcBd|E#0ZH*7#Hd5>FdMqbm79Mr>Dtl v=Y5+}{WoPlL#qG&!2PiPZa9G5*=)sEzTa1V(xUjGX53&?NZypp8De9ZrR1e01nfHE= z-}n9geQ$ouPJG$bv8RKgsIJVIm?LYzdw2NBci+?3GFf)xQ~^(!C0vzlL?u+Sh(Jb{ zXHX8w>io&uXo#ZPd$oK47o>4PG4+t_`Gj2EB4~;l8gVUIDI*MuXht*Q^pk7XX`rcb zdYY41$x5PGZEV3tQwtM$WudI_Dm^j`hFpOV=m^We)lV3X;Ku0N2yh`TsIV{!2Kf-=U^E8%L70URhK(>V5`;?^|x5*$PN3k^vYo-A_M!9HK zaGWNYzAZtwwrCA!vrVL7j4N9V46$BGO-D)kxT~&jc{@0V-sSs2VkbXuAtr|$vtlb` zaHU=^lqDo>BxBRgo92mT7qhb_Hl1110?8!!LXs8D@a%&d07()uhJ$58K^ZYl6N-?g zslp&kirnGYpqPpzAWTJKkP{POJ`sj7c92U)n^@6QDmpT76RW<%##&-ME$9}BEFxR` z7O835)WJs0g4Q}0t|i|lR&AZjKuat`l3~2bzBlRS5s{C#-O?>Fwv>+yB6pkU`s?Yr zG`SOxGh!m|-Y=F`x;krx_WDKYa!=q%``S_#mcVIWu2H{L>jwkAwTq*ty665s0v_ya zJY9SN17}LB%1Rmh*H$cp=WT0yN7n=O%HL;$H-6kh6B^ZfA4>>C=m?pyoj)E^1ov(J7`pIf@WSopPer)PlHUT**8 z$^pW_{*`uzgm@zr0S|5l`~ip!Hf`Of?ko$O0R udJi4?Zus1#ALjnt)~JlGFBRIUwodBq(d_o~!yRY6A3-KHAznIs{QEZyJ8<#< literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/steps.png b/workflow/public_html/lib/img/steps.png new file mode 100644 index 0000000000000000000000000000000000000000..d1e2d87782e50461ce7c2dc714a3d27490a92ae4 GIT binary patch literal 239 zcmZ?wbhEHblw=TRIKseSo-?C%!<+c2Tem)WQn~BO%rpO;E0#{Z^knPJ|Nc!|&OH4e z(|>5no+lfw{ZE^DrfuPg<+q;%cCFZT`+w`^3vD~z9e?zH;o1K$-@RkN0Th3-FtP)! z(gDeX>||igd7#>tk~uG9)w-P5`(8hpVx+^vRQdefB8~2e{5MvIbWCp*+}Y*8cK*as zPFas|&K9wS6)D@hShhLl8OU^QidP000*V1^@s6{^R5m00004b3#c}2nYxW zd=X_!arnRX;h0R4WS!C*kWUMCujhTn;+Uav2f zAR=2WnM{hSOeP~rDcO`#O0wDPYW%atGhX0M9LHJ9J;2C*Wwsb|`*KBdUc@-R-WenC zbZMG~<2YLYfKs9bz-%$bxQmB}#9Wj&V?tp~sPp&?a~+k literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/subm.png b/workflow/public_html/lib/img/subm.png new file mode 100644 index 0000000000000000000000000000000000000000..95228c17d1633f21a6532b2cf00b44da6c0308c7 GIT binary patch literal 1826 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/tracker.gif b/workflow/public_html/lib/img/tracker.gif new file mode 100644 index 0000000000000000000000000000000000000000..2d83cb7306f07d95276fa65d8ab08a7326588521 GIT binary patch literal 1174 zcmeHGjZaf|6n!m4D-lUS5^78~wGuE}!UD-k<`Q7$_dfcXN~%)bG@qK`=stFd!^w2DHE&XcZV135@`Z)!?Hpbh_Yjqqh&kBV#Aqf@eG+Di9tt4@MZGg<1#AerR4ru^t8^ z%1k(D9T2vkcA?ud(PDo%I5gH`M__vP(;=|?Q28#LE_~dFFE1f-2SXR(9{4pHdptLf z$q4Wi|2)N``w!W`H9zaE) zCg5pkI2iOlmmk8BD%2lCYtvY{1zk>bp2p{&AuxH(a|ZLVd%*w}egq+)2^a#FfD?Qg z3=NhBM?)p}3|Iyn1D;tCDp?jB3!eRrkS9W@;vTKB3cLXR0U`GZSrRf@Ep$5Qb+d%r zA|xziO7u8r!W*W!{rg}w!(tibxM7}Osi?pQ?|r4$<9MxCr#&ZhHPp`@uEwc0bU4x5 zi_sB`j!v|;jyoI}AHUQ0$v5q7xOo#ZGb_<378bC&DhU3c^8XXH?N5n_qRvy#t=(en zCnzZ>&4#Uvujfj=G;Nn5;ET(4dW@HseT5NkqxelDH(^WmC{JuI^-WZTY)NKqQc1Qy zbXJza4;Xl`dDp7K@=Q8%1azt(k2 z*0VvESh3uYV--8ZspdSz#p)w?_yU&|D;U$<}Y#)Dfp7M>34- z5+q;8uN9R^w)>^)k6vh`Bob{fCHebjo3|amS2y*HZFg!CNs!4BrMXQ9B#zxH%ZqIy H5%to)yLr|q literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/trigger.png b/workflow/public_html/lib/img/trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..6c8218cdee71a2c6fedbdd41bfe651afc238a92c GIT binary patch literal 4707 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 XA(&CS+Jk3C00000NkvXXu0mjfys2Hz literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/users.png b/workflow/public_html/lib/img/users.png new file mode 100644 index 0000000000000000000000000000000000000000..b70f90da3a194cdd9b92b08acbf28153358feda3 GIT binary patch literal 1145 zcmd7R{WF^f0KoBwDxukSs;hHn-R9iTb?e;KM$3k^#7j%2r}Z{f)a$$@UK`SgkUV*$ z$RkoD5g`a7^4>&9B9TfkuF~kZVCkx*b=_{Sx9z&?f3fdh@cHE%8y6EAmg56>1AhR( z=V9T+H0dz@dIg*yRnHccd^a~;MY$0QPTNQZ+>qe&69zjPbBX-wD}megm0#B; zxoSE?TlsXB*)sVE+n+;~?s2D>M*F`yqmfiw2;#mO(Lzr(uz-*=C9 zto!L189d3uRjZXTrm?O`({H1AddI=uYEN&!ZINC8)yQUzpfK-FcZOvc50Be6KytiDYvkLS!&R16GFQ7{0Z&Fc$uef6Zlk`_T$Y%Gdh zo!n5KV_e*vQ0QuyD!8AE<0f^mI@{%T5?3RJZpoLGqe2n64a2tly|vOM870&woWiwc zch5NJ!W!k;fSwQG22J>aP+IM!DN?qKQTlp+X-=<)Rb}0@CgU_|YPpNkn!+Oa81a)I5Ul zW;6eqWEjE7L?V!d zPz5H2Rgyaqxkttx<9S^zR^B}`B6MV6ce;OGQaGdXhu6fCY)Wo*Ikj z^{O<(p2?8zI7#~_s`wm4^l%T6mqx9R>7qlMKDw&s2v{DYg_--Uu*oh7e!04L<94zjnoBg)l%DAW1t)}yQnXNte83vl5- DgMS8^ literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/img/zimbra.gif b/workflow/public_html/lib/img/zimbra.gif new file mode 100644 index 0000000000000000000000000000000000000000..e63cb8df6da09873d9316be929a5b506b69b1418 GIT binary patch literal 2037 zcmV%i7Vs?U8cI$j0&N*u1o& z?BmYs;mh!5M!~(d?U{SNwx;oRRKUWz>fXia-o(1Hp2fkp=+(L3)xP)i>+Y3z^;R#; z#<}Bq&t@o`b?;>*d$!^p$9zr3})xwOBzs`X4J_3-8NVn5^9zv;@a?{ib@uadg4 zoAOdI^FSW&d|mtb^!@$&`uFkp_3ixo_xkwq{QCFk-NW$c*7)@7`StDT-NWtU&FtdL z?UHop-NNYH!t3G5?c~q>{rc3+yZH3$^6T9F`}q6%_Wb(x?{QJMx3kK{xby7Z>)^@s z@8b0B;P2+s`Se}<|-tOkpxVE$W`}qC)`TO|t>DO&@8{L*;mY#r z+Vkz;_w?-g`1AYu_V)4R^zP#D>DcMr!tdwQ^zPvN{P_F$^zrH0_w(uV?%@3U`Sb1H z?BUD&`Stz$`S)ZPF@B8@k{Q36%{rvFh+3w`e{QUXy>f846=bIKp@8jv;#;>-v=+n6R z`1JYq?&`Fc=+Cq2z@+KLsql4I>#mXV?cTGyy1c}`>fp)h;mPaa$miU_$iS}jRyDk{ zpzh|<*w4J`-^j?T&BoXh^`lwZp!&!@sufgl6uBX#M;5_w(%RqlW9IiTU>M z>b|1ut&r8#)AM6M@MJ^v@8t69+V1Amxwo{rxU{*tw(aE3_wwlLu$0Ngx%u|*y0Dt` zI~lUFvgq8wA^8LV00000EC2ui04e|~000R805c7#GGt)Eg9r&$QK--$L4*T+87$~7 zlc_9*`f!4jMophAg0f`cltxfSNFddOOp``rM^1fIiiD)bV}?wIj37y4)5h!8(^^ZHSgx9?pceC^`(Yd7#<8Kz*>slcFz0s#?`NCJS1^Z+o! zivn^x#v1k2?P6x@rEX+zVXK&y};Ou!EZGDM;>`-kcTE9;Jb__4{Pv-#Cb5F z%ph&FajFtZw4p>O0=(D)$!*NSvdQWIVIvUjluRD8z&JzC z4Zs0M(D}%0V>%54u*c9z!?8yIHZW1i7~7mW#u#Ueal(+mgbg+$#4K>z0)ID03qcnC{qKm`@2J}%3PtWehU8Q-8`6<8J^69E5bhr~?*Q z5Jwyx5Mn_L@7(AC3ULquKm0LRK#2Suh=cpgH;*YyAx05!z!a)sKx-Iq3NWzWD5e00 z3R2L3)BuAjDhLJ&Zoma+P=y2#NRAJf@B`uy#wxynBM&@-3owkK3}L_nU93U^-Oxq? z3Sf*85(!2lkbvRRltjdSEPxpjkbntxSOOCK5QwG7K@p4i17sv|iHj&fDY%gfS$N@# zU<9K+98iK4U;qkeOrsjtxPoSsq68&a;ys#>gd{|v33{+29h<;MJ0_tCQTSsW`ItvM z4$_Z*+@lW?-~={E;U9X40vn>B2PsI>l9F_!6gDZzN=AW_k7Pq6C%MT@>VY43aKb-U z$;wu`@|CcRB`Z;>%70KomblF2D`~0AUcT}gu;isLhbc>867!g?G-fMrIZS5ik{{UM Thcu^2&1zcnn%JynKmY(c5v-XF literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/js/jquery-1.10.2.min.js b/workflow/public_html/lib/js/jquery-1.10.2.min.js new file mode 100644 index 000000000..8569bc49f --- /dev/null +++ b/workflow/public_html/lib/js/jquery-1.10.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="

",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x(""); + this.iframe.attr("id", defaultIframeOptions.id); + this.iframe.attr("name", defaultIframeOptions.name); + this.iframe.css("border", "none"); + this.iframe.css("width", "100%"); + this.iframe.css("height", "100%"); + + this.body = $("
"); + this.body.append(this.toolbar); + this.body.append(this.iframe); + }; + Preview.prototype.show = function () { + jQuery('body').append(this.body); + this.body.show(); + }; + Preview.prototype.close = function () { + this.onClose(); + this.body.remove(); + }; + Preview.prototype.setData = function () { + var that = this; + that.iframe[0].src = this.srcPreview; + that.iframe[0].onload = function () { + var pm = this.contentWindow.window; + if (pm && pm.PMDynaform) { + pm.dynaform = new pm.PMDynaform.core.Project({ + data: this.contentWindow.window.jsonData, + keys: { + server: HTTP_SERVER_HOSTNAME, + projectId: PMDesigner.project.id, + workspace: WORKSPACE + }, + token: { + accessToken: PMDesigner.project.keys.access_token + }, + isPreview: true, + isRTL: this.contentWindow ? this.contentWindow.window.isRTL : false + }); + $(this.contentWindow.document).find('form').submit(function (e) { + e.preventDefault(); + return false; + }); + if (pm.PMDynaform.view && pm.PMDynaform.view.ModalProgressBar) { + pm.PMDynaform.view.ModalProgressBar.prototype.render = function () { + return this; + }; + } + } + }; + }; + FormDesigner.extendNamespace('FormDesigner.main.Preview', Preview); +}()); + + +(function () { + var DialogConfirmClose = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmClose.prototype.init.call(this, appendTo); + }; + DialogConfirmClose.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to close? All your changes will be lost if you close it.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmClose', DialogConfirmClose); +}()); +(function () { + var DialogInvalidProperties = function (appendTo) { + this.onAccept = new Function(); + DialogInvalidProperties.prototype.init.call(this, appendTo); + }; + DialogInvalidProperties.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: true, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "alert"); + + var msg = ""; + var dt = $.globalInvalidProperties; + for (var i = 0; i < dt.length; i++) { + msg = msg + dt[i] + "
"; + } + msg = msg.replace(/[,\s]+$/, ""); + this.dialog.append("
" + + "Properties invalid elements:

".translate() + msg + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogInvalidProperties', DialogInvalidProperties); +}()); +(function () { + var DialogConfirmImport = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmImport.prototype.init.call(this, appendTo); + }; + DialogConfirmImport.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to import? All your changes will be lost if you import it.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmImport', DialogConfirmImport); +}()); +(function () { + var DialogConfirmClear = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmClear.prototype.init.call(this, appendTo); + }; + DialogConfirmClear.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to clear? All your changes will be lost if you clear it.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmClear', DialogConfirmClear); +}()); +(function () { + var DialogInformation = function (appendTo) { + this.onAccept = new Function(); + DialogInformation.prototype.init.call(this, appendTo); + }; + DialogInformation.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "The variable is being used.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogInformation', DialogInformation); +}()); +(function () { + var DialogScript = function (appendTo) { + this.onSave = new Function(); + this.onClose = new Function(); + DialogScript.prototype.init.call(this, appendTo); + }; + DialogScript.prototype.init = function (appendTo) { + var that = this; + this.save = $("" + "Save".translate() + ""); + this.save.on("click", function () { + that.onSave(); + that.dialog.dialog("close").remove(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.save); + + $.ui.keyCode.TAB = null;//focus button prevents dialog with CodeMirror tab + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 940, + height: 500, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + $.ui.keyCode.TAB = 9; + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.textarea = $(""); + this.body = $("
"); + this.body.append(this.textarea); + this.dialog.append(this.body); + this.dialog.append("

" + "Press".translate() + " ctrl-space " + "to activate autocompletion".translate() + ".

"); + this.dialog.append(this.buttons); + + this.editor = CodeMirror.fromTextArea(this.textarea[0], { + lineNumbers: true, + matchBrackets: true, + autoCloseBrackets: true, + extraKeys: {"Ctrl-Space": "autocomplete"}, + mode: "application/javascript", + viewportMargin: Infinity, + className: "CodeMirror-hints-custom-mafe" + }); + this.editor.setSize(910, 350); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogScript', DialogScript); +}()); +(function () { + var DialogFormula = function (appendTo, fields) { + this.onSave = new Function(); + this.onClose = new Function(); + this.fields = fields; + DialogFormula.prototype.init.call(this, appendTo); + }; + DialogFormula.prototype.init = function (appendTo) { + var that = this; + this.save = $("" + "Save".translate() + ""); + this.save.on("click", function () { + that.onSave(); + that.dialog.dialog("close").remove(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.save); + + $.ui.keyCode.TAB = null;//focus button prevents dialog with CodeMirror tab + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 940, + height: 500, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + $.ui.keyCode.TAB = 9; + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.textarea = $(""); + this.body = $("
"); + this.body.append(this.textarea); + this.dialog.append(this.body); + this.dialog.append("

" + "Press".translate() + " ctrl-space " + "to activate autocompletion".translate() + ".

"); + this.dialog.append(this.buttons); + + this.editor = CodeMirror.fromTextArea(this.textarea[0], { + lineNumbers: true, + matchBrackets: true, + autoCloseBrackets: true, + extraKeys: {"Ctrl-Space": "autocomplete"}, + mode: "application/javascript", + viewportMargin: Infinity, + className: "CodeMirror-hints-custom-mafe" + }); + this.editor.setSize(910, 350); + //add elements for codemirror autocomplete + CodeMirror.hint.javascript = function (cm) { + var inner = {from: cm.getCursor(), to: cm.getCursor(), list: []}; + for (var i = 0; i < that.fields.length; i++) { + if (that.fields[i].var_name) { + inner.list.push(that.fields[i].var_name); + } + } + var others = [ + "parseInt()", + "parseFloat()", + ".concat()", + ".toString()", + ".toUpperCase()", + ".toLowerCase()", + ".indexOf()", + ".substring()", + ".lastIndexOf()", + ".split()" + ]; + for (var i = 0; i < others.length; i++) { + inner.list.push(others[i]); + } + return inner; + }; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogFormula', DialogFormula); +}()); +(function () { + var DialogInvalidFile = function (appendTo, msg) { + this.onAccept = new Function(); + this.msg = msg; + DialogInvalidFile.prototype.init.call(this, appendTo); + }; + DialogInvalidFile.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "alert"); + + this.dialog.append("
" + + "Invalid file: ".translate() + that.msg + ". " + + "Please upload a file with a valid extension (.json)".translate() + "." + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogInvalidFile', DialogInvalidFile); +}()); +(function () { + var DialogVariable = function (appendTo, render) { + this.render = render; + this.onClose = new Function(); + this.onLoad = new Function(); + this.onClick = new Function(); + DialogVariable.prototype.init.call(this, appendTo); + }; + DialogVariable.prototype.init = function (appendTo) { + var that = this; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.search = $("
" + "Search".translate() + " :
"); + this.search.find("input").on("keyup", function () { + var input = this; + that.body.find(">div").each(function (i, e) { + var sw = false; + $(e).find(">div").each(function (i, e) { + sw = sw || $(e).text().toLowerCase().indexOf(input.value.toLowerCase()) > -1; + }); + if (sw) + $(e).show(); + else + $(e).hide(); + }); + }); + this.search.find("img").on("click", function () { + that.load(); + }); + + this.body = $("
"); + this.dialog.append(this.search); + this.dialog.append(this.body); + }; + DialogVariable.prototype.load = function () { + var that = this; + this.body.find(">div").remove(); + var restProxy = new PMRestClient({ + endpoint: 'process-variables', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + response.sort(function (a, b) { + if (a.var_name < b.var_name) + return -1; + if (a.var_name > b.var_name) + return 1; + return 0; + }); + for (var i = 0; i < response.length; i++) { + $.validDataTypeAndControlType(response[i].var_field_type, that.render, function () { + that.addItem(response[i]); + }); + } + that.onLoad(response); + } + }); + restProxy.executeRestClient(); + }; + DialogVariable.prototype.addItem = function (variable) { + var that = this; + var item = $("
" + + "
[" + variable.var_field_type + "]
" + + "
" + variable.var_name + "
" + + "
"); + item.on("click", function () { + that.onClick(variable); + }); + this.body.append(item); + return item; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogVariable', DialogVariable); +}()); +(function () { + var DialogDBConnection = function (appendTo) { + this.onClose = new Function(); + this.onLoad = new Function(); + this.onClick = new Function(); + DialogDBConnection.prototype.init.call(this, appendTo); + }; + DialogDBConnection.prototype.init = function (appendTo) { + var that = this; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.search = $("

" + "Search".translate() + " :

"); + this.search.find(">input").on("keyup", function () { + var input = this; + that.body.find(">div").each(function (i, e) { + var sw = false; + $(e).find(">div").each(function (i, e) { + sw = sw || $(e).text().toLowerCase().indexOf(input.value.toLowerCase()) > -1; + }); + if (sw) + $(e).show(); + else + $(e).hide(); + }); + }); + this.search.find("img").on("click", function () { + that.load(); + }); + this.body = $("
"); + this.dialog.append(this.search); + this.dialog.append(this.body); + this.load(); + }; + DialogDBConnection.prototype.load = function () { + var that = this; + this.body.find(">div").remove(); + that.addItem({label: "PM Database", value: "workflow"}); + var restProxy = new PMRestClient({ + endpoint: "database-connections", + typeRequest: "get", + functionSuccess: function (xhr, response) { + for (var i = 0; i < response.length; i++) { + if (response[i].dbs_connection_type === "TNS") { + that.addItem({ + label: "[" + response[i].dbs_tns + "] " + response[i].dbs_type + " : " + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } else { + that.addItem({ + label: "[" + response[i].dbs_server + ":" + response[i].dbs_port + "] " + response[i].dbs_type + ": " + response[i].dbs_database_name + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } + } + that.onLoad(response); + } + }); + restProxy.executeRestClient(); + }; + DialogDBConnection.prototype.addItem = function (variable) { + var that = this; + var item = $("
" + + "
" + variable.label + "
" + + "
"); + item.on("click", function () { + that.onClick(variable); + }); + this.body.append(item); + return item; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogDBConnection', DialogDBConnection); +}()); +(function () { + var DialogSql = function (appendTo) { + this.onSave = new Function(); + this.onClose = new Function(); + DialogSql.prototype.init.call(this, appendTo); + }; + DialogSql.prototype.init = function (appendTo) { + var that = this; + this.save = $("" + "Save".translate() + ""); + this.save.on("click", function () { + that.onSave(); + that.dialog.dialog("close").remove(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.save); + + $.ui.keyCode.TAB = null;//focus button prevents dialog with CodeMirror tab + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 940, + height: 500, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + $.ui.keyCode.TAB = 9; + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.textarea = $(""); + this.body = $("
"); + this.body.append(this.textarea); + this.dialog.append(this.body); + this.dialog.append("

" + "Press".translate() + " ctrl-space " + "to activate autocompletion".translate() + ".

"); + this.dialog.append(this.buttons); + + this.editor = CodeMirror.fromTextArea(this.textarea[0], { + lineNumbers: true, + matchBrackets: true, + autoCloseBrackets: true, + extraKeys: {"Ctrl-Space": "autocomplete"}, + mode: "text/x-sql", + viewportMargin: Infinity, + className: "CodeMirror-hints-custom-mafe" + }); + this.editor.setSize(910, 350); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogSql', DialogSql); +}()); +(function () { + var DialogOptions = function (appendTo, options) { + this.onApply = new Function(); + this.onClose = new Function(); + this.appendTo = appendTo; + this.options = options; + DialogOptions.prototype.init.call(this); + }; + DialogOptions.prototype.init = function () { + var that = this; + this.save = $("" + "Apply".translate() + ""); + this.save.on("click", function () { + if (!that.isValid()) { + return false; + } + that.onApply(); + that.dialog.dialog("close").remove(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.save); + + this.edit = $(""); + this.add = $("" + "Create".translate() + ""); + this.add.on("click", function () { + var row = that.addItem("", ""); + var cells = row.find(".fd-table-td-edit"); + that.setInputEdit($(cells[0])); + return false; + }); + this.add.on("keydown", function (e) { + var row = that.table.find("tr"); + if (row.length > 0 && e.keyCode === 9 && !e.shiftKey) { + that.setInputEdit($($(row[1]).find(".fd-table-td-edit")[0])); + return false; + } + }); + + this.tbody = $(""); + this.tbody.sortable({ + placeholder: "fd-drag-drop-placeholder", + handle: ".fd-drag-drop", + stop: function (event, ui) { + + }, + start: function (event, ui) { + ui.placeholder.html("") + } + }).droppable({ + drop: function (event, ui) { + } + }); + + this.table = $( + "
" + + "" + + "" + + "" + + "" + + "" + + "
" + "Key".translate() + "" + "Label".translate() + "
"); + this.table.append(this.tbody); + this.msgError = $("
"); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: this.appendTo ? this.appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.dialog.append("

" + "Please add option and click in cell for editing the cell value".translate() + ".

"); + this.dialog.append(this.add); + this.dialog.append($("
").append(this.table)); + this.dialog.append(this.msgError); + this.dialog.append(this.buttons); + this.load(); + }; + DialogOptions.prototype.load = function () { + for (var i = 0; i < this.options.length; i++) + this.addItem(this.options[i].value, this.options[i].label); + }; + DialogOptions.prototype.addItem = function (value, label) { + var that = this, cell; + var del = $("" + + "" + "Delete".translate() + "" + + "" + + ""); + del.find(".fd-button").on("click", function () { + var a = new FormDesigner.main.DialogConfirmDeleteOption(); + a.onAccept = function () { + del.parent().remove(); + }; + return false; + }); + del.find(".fd-button").on("keydown", function (e) { + var ri = $(this).parent().parent()[0].rowIndex + 1; + if (e.keyCode === 9 && !e.shiftKey && that.table.find("tr").length > ri) { + that.setInputEdit($($(that.table.find("tr")[ri]).find(".fd-table-td-edit")[0])); + return false; + } + if (e.keyCode === 9 && e.shiftKey) { + var row = $(this).parent().parent(); + that.setInputEdit($($(row).find(".fd-table-td-edit")[1])); + return false; + } + }); + var row = $(""); + cell = $("").text(value); + row.append(cell); + cell = $("").text(label); + row.append(cell); + row.append(del); + row.find(".fd-table-td-edit").on("click", function (e) { + e.stopPropagation(); + that.setInputEdit($(e.target)); + return false; + }); + this.tbody.append(row); + return row; + }; + DialogOptions.prototype.getOptions = function () { + var a = []; + if (this.edit.parent()[0] && this.edit.parent()[0].nodeName === "TD") { + this.edit.parent().text(this.edit.val().trim()); + this.edit.remove(); + } + var aux = ""; + this.tbody.find(".fd-table-td-edit").each(function (i, e) { + if (i % 2 === 1) { + a.push({ + value: aux, + label: $(e).text() + }); + } + aux = $(e).text(); + }); + return a; + }; + DialogOptions.prototype.isValid = function () { + this.tbody.find(".fd-table-td-edit").removeClass("fd-table-td-error"); + var options = this.getOptions(); + for (var i = 0; i < options.length; i++) { + for (var j = 0; j < options.length; j++) { + if (i !== j && options[j].value === options[i].value) { + this.msgError.text("Duplicate value for key".translate() + "."); + $(this.tbody.find("tr")[j]).find(".fd-table-td-edit").addClass("fd-table-td-error"); + return false; + } + if (options[j].label === "") { + this.msgError.text("The label is empty".translate() + "."); + $(this.tbody.find("tr")[j]).find(".fd-table-td-edit").addClass("fd-table-td-error"); + return false; + } + } + } + this.msgError.text(""); + return true; + }; + DialogOptions.prototype.setOptionsBoolean = function () { + this.tbody.find("tr").each(function (i, e) { + $(e).find(".fd-table-td-edit").each(function (i, cell) { + if (0 === i) + $(cell).off(); + }); + $(e).find(".fd-button").hide(); + $(e).find(".fd-drag-drop").hide(); + }); + this.add.hide(); + }; + DialogOptions.prototype.setInputEdit = function (cell) { + var that = this; + if (that.edit.parent()[0] && that.edit.parent()[0].nodeName === "TD") { + that.edit.parent().text(that.edit.val().trim()); + } + that.edit.val(cell.text()); + cell.text(""); + cell.append(that.edit); + setTimeout(function () { + that.edit.focus(); + }, 50); + that.edit.on("click", function (e) { + e.stopPropagation(); + return false; + }); + that.edit.on("keydown", function (e) { + var cell = that.edit.parent(); + var ci = cell[0].cellIndex; + if (e.keyCode === 9 && ci === 0 && !e.shiftKey) { + that.setInputEdit(cell.next()); + return false; + } + if (e.keyCode === 9 && ci === 1 && e.shiftKey) { + that.setInputEdit(cell.prev()); + return false; + } + }); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogOptions', DialogOptions); +}()); +(function () { + var DialogLanguage = function (appendTo, dyn_uid) { + this.onClose = new Function(); + this.onLoad = new Function(); + this.dyn_uid = dyn_uid; + DialogLanguage.prototype.init.call(this, appendTo); + }; + DialogLanguage.prototype.init = function (appendTo) { + var that = this; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.uploadFile = $("
" + + "" + + "
"); + this.uploadFile.find(".fd-gridform-language-upload").on("change", function (e) { + var win = window, fd = new FormData(), xhr, val = 'LANGUAGE'; + fd.append(val, e.target.files[0]); + if (win.XMLHttpRequest) + xhr = new XMLHttpRequest(); + else if (win.ActiveXObject) + xhr = new ActiveXObject('Microsoft.XMLHTTP'); + xhr.open('POST', '/api/1.0/' + WORKSPACE + '/project/' + PMDesigner.project.id + '/dynaform/' + that.dyn_uid + '/upload-language', true); + xhr.setRequestHeader('Authorization', 'Bearer ' + PMDesigner.project.keys.access_token); + xhr.onload = function () { + if (this.status === 200) { + that.uploadFile[0].reset(); + that.load(); + } else { + that.uploadFile[0].reset(); + } + }; + xhr.send(fd); + }); + + this.search = $("

" + "Search".translate() + " :

"); + this.search.find(">input").on("keyup", function () { + var input = this; + that.body.find(">div").each(function (i, e) { + var sw = false; + $(e).find(">div").each(function (i, e) { + sw = sw || $(e).text().toLowerCase().indexOf(input.value.toLowerCase()) > -1; + }); + if (sw) + $(e).show(); + else + $(e).hide(); + }); + }); + this.search.find("img").on("click", function () { + that.load(); + }); + this.body = $("
"); + this.dialog.append(this.uploadFile); + this.dialog.append(this.search); + this.dialog.append(this.body); + this.load(); + }; + DialogLanguage.prototype.load = function () { + var that = this; + this.body.find(">div").remove(); + var restProxy = new PMRestClient({ + endpoint: "dynaform/" + this.dyn_uid + "/list-language", + typeRequest: "get", + functionSuccess: function (xhr, response) { + //default lang + var item = that.addItem({ + label: "English [processmaker.en.po]", + value: "en" + }); + item.find(".fd-button").hide(); + //lang + for (var i = 0; i < response.length; i++) { + that.addItem({ + label: response[i]["X-Poedit-Language"] + " [" + response[i]["File-Name"] + "]", + value: response[i].Lang + }); + } + that.onLoad(response); + } + }); + restProxy.executeRestClient(); + }; + DialogLanguage.prototype.addItem = function (variable) { + var that = this; + var item = $("
" + + "
" + variable.label + "
" + + "" + + "
"); + item.find(".fd-button").on("click", function (e) { + e.stopPropagation(); + var a = new FormDesigner.main.DialogConfirmDeleteLang(); + a.onAccept = function () { + var restProxy = new PMRestClient({ + endpoint: "dynaform/" + that.dyn_uid + "/delete-language/" + variable.value, + typeRequest: "post", + functionSuccess: function (xhr, response) { + that.load(); + } + }); + restProxy.executeRestClient(); + } + return false; + }); + item.on("click", function (e) { + e.stopPropagation(); + var restProxy = new PMRestClient({ + endpoint: "dynaform/" + that.dyn_uid + "/download-language/" + variable.value, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var name = "processmaker." + response.lang + ".po"; + if (window.navigator.msSaveBlob) { + window.navigator.msSaveBlob(new Blob([response.labels], {'type': 'application/octet-stream'}), name); + return false; + } + var a = document.createElement('a'); + document.body.appendChild(a); + a.href = window.URL.createObjectURL(new Blob([response.labels], {'type': 'application/octet-stream'})); + a.download = name; + a.click(); + document.body.removeChild(a); + } + }); + restProxy.executeRestClient(); + return false; + }); + this.body.append(item); + return item; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogLanguage', DialogLanguage); +}()); +(function () { + var DialogConfirmDeleteLang = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmDeleteLang.prototype.init.call(this, appendTo); + }; + DialogConfirmDeleteLang.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to delete this lang?".translate() + "." + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmDeleteLang', DialogConfirmDeleteLang); +}()); +(function () { + var DialogConfirmDeleteOption = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmDeleteOption.prototype.init.call(this, appendTo); + }; + DialogConfirmDeleteOption.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to delete this option?".translate() + "." + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmDeleteOption', DialogConfirmDeleteOption); +}()); +(function () { + var DialogInvalid = function (appendTo, property, type, config) { + this.property = property; + this.type = type; + this.config = config || null; + this.onAccept = new Function(); + this.onClose = new Function(); + DialogInvalid.prototype.init.call(this, appendTo); + }; + DialogInvalid.prototype.init = function (appendTo) { + var that = this, + configDialog = this.getErrorMessage(this.type, this.property, this.config); + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.onClose(); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "alert"); + + this.dialog.append("
" + + configDialog.message + + "
"); + this.dialog.append(this.buttons); + this.accept.focus(); + }; + /** + * Get error message + * @param type + * @param property + * @param config + * @returns {Object} + */ + DialogInvalid.prototype.getErrorMessage = function (type, property, config) { + var conf = {}; + conf.title = (config) ? this.config.title.translate() : 'Errors'.translate(); + switch (type) { + case 'required': + conf.message = "The ".translate() + property + " is required.".translate(); + break; + case 'invalid': + conf.message = "The ".translate() + property + " is invalid.".translate(); + break; + case 'duplicated': + conf.message = "The ".translate() + property + " is duplicated.".translate(); + break; + case 'custom': + conf.message = (config) ? config.msg.translate() : ''; + break; + } + return conf; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogInvalid', DialogInvalid); +}()); + +(function () { + var DialogRegularExpression = function (appendTo, dataType) { + this.dataType = dataType; + this.onClose = new Function(); + this.onClick = new Function(); + DialogRegularExpression.prototype.init.call(this, appendTo); + }; + DialogRegularExpression.prototype.init = function (appendTo) { + var that = this; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.body = $("
"); + this.dialog.append("" + + "Enter a regular expression which is a search pattern which matches the text entered in the field. ".translate() + + "To learn more about regular expressions, see the wiki.

".translate() + + "Examples:
".translate() + + "
"); + this.dialog.append(this.body); + this.load(); + }; + DialogRegularExpression.prototype.load = function () { + var that = this, data; + data = [{ + dataType: "integer", name: "An integer".translate(), value: "^[-+]?[0-9]+$" + }, { + dataType: "float", name: "An integer or decimal number".translate(), value: "[-+]?[0-9]+\\.[0-9]+$" + }, { + dataType: "string", name: "An email address".translate(), value: "^\\w+(\\.\\w+)*@(\\w+\\.)+\\w{2,4}$" + } + ]; + this.body.find(">div").remove(); + for (var i = 0; i < data.length; i++) { + if (that.dataType === data[i].dataType || that.dataType === "") { + that.addItem(data[i]); + } + } + }; + DialogRegularExpression.prototype.addItem = function (regex) { + var that = this; + var item = $("
" + + "
" + regex.name + "
" + + "
" + regex.value + "
" + + "
"); + item.on("click", function () { + that.onClick(regex); + }); + this.body.append(item); + return item; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogRegularExpression', DialogRegularExpression); +}()); +(function () { + var DialogConfirmClearVariable = function (appendTo) { + this.onAccept = new Function(); + DialogConfirmClearVariable.prototype.init.call(this, appendTo); + }; + DialogConfirmClearVariable.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.dialog.append("
" + + "Do you want to clear this variable? The following properties are reset: Variable, Data Type, DB Connection, SQL and Options.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirmClearVariable', DialogConfirmClearVariable); +}()); +(function () { + var DialogContent = function (appendTo) { + this.onSave = new Function(); + this.onClose = new Function(); + DialogContent.prototype.init.call(this, appendTo); + }; + DialogContent.prototype.init = function (appendTo) { + var that = this; + this.save = $("" + "Save".translate() + ""); + this.save.on("click", function () { + that.onSave(); + that.dialog.dialog("close").remove(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.save); + + $.ui.keyCode.TAB = null;//focus button prevents dialog with CodeMirror tab + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 940, + height: 500, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + $.ui.keyCode.TAB = 9; + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.textarea = $(""); + this.body = $("
"); + this.body.append(this.textarea); + this.dialog.append(this.body); + this.dialog.append("

" + "Press".translate() + " ctrl-space " + "to activate autocompletion".translate() + ".

"); + this.dialog.append(this.buttons); + + this.editor = CodeMirror.fromTextArea(this.textarea[0], { + lineNumbers: true, + matchBrackets: true, + autoCloseBrackets: true, + extraKeys: {"Ctrl-Space": "autocomplete"}, + mode: "text/html", + viewportMargin: Infinity, + className: "CodeMirror-hints-custom-mafe" + }); + this.editor.setSize(910, 350); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogContent', DialogContent); +}()); +(function () { + var DialogUnsupported = function (appendTo) { + this.onAccept = new Function(); + DialogUnsupported.prototype.init.call(this, appendTo); + }; + DialogUnsupported.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: true, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "success"); + + var msg = ""; + var dt = $.globalInvalidProperties; + for (var i = 0; i < dt.length; i++) { + msg = msg + dt[i] + "
"; + } + msg = msg.replace(/[,\s]+$/, ""); + this.dialog.append("
" + + "Unsupported element.".translate() + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogUnsupported', DialogUnsupported); +}()); +(function () { + var DialogChangedVariables = function (appendTo, message) { + this.onAccept = new Function(); + this.message = message; + DialogChangedVariables.prototype.init.call(this, appendTo); + }; + DialogChangedVariables.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 200, + resizable: true, + close: function (event, ui) { + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, "warning"); + + this.message = this.message.replace(/[,\s]+$/, ""); + this.dialog.append("
" + + "The imported dynaform include new variables and existing variables that require changes.".translate() + " " + + "The changed variables have been added with the suffix “_1”.".translate() + " " + + "Please take note of the changes to update your process logic.".translate() + " " + + "The following variables have been created:
".translate() + this.message + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogChangedVariables', DialogChangedVariables); +}()); +(function () { + var DialogCreateVariable = function (appendTo, type, options, var_name) { + this.onSave = new Function(); + this.onSelect = new Function(); + this.onClose = new Function(); + this.appendTo = appendTo; + this.type = type; + this.options = options; + this.var_name = var_name; + DialogCreateVariable.prototype.init.call(this); + }; + DialogCreateVariable.prototype.init = function () { + var that = this; + this.var_dbconnection = "workflow"; + this.var_sql = ""; + this.var_accepted_values = that.options; + this.inp_doc_uid = ""; + + this.add = $("" + "Variables".translate() + ""); + this.add.on("click", function () { + that.dialog.dialog("close"); + var pmvariables = new PMVariables(); + pmvariables.onWindowClose = function (variable) { + if (variable !== null && variable.var_name_old === that.var_name) { + that.onSave(variable); + } + }; + pmvariables.load(); + return false; + }); + + this.buttonSave = $("" + "Save".translate() + ""); + this.buttonSave.on("click", function () { + that.save(); + return false; + }); + this.cancel = $("" + "Cancel".translate() + ""); + this.cancel.on("click", function () { + that.dialog.dialog("close").remove(); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.buttonSave); + + this.optionSelect = $( + "
" + + " " + + " " + + "
"); + this.optionSelect.find("#optionCreate").on("click", function () { + that.buttonSave.show(); + that.content.show(); + that.selectVariable.dialog.hide(); + that.dialog.css({height: heightCreate}); + }); + this.optionSelect.find("#optionSelect").on("click", function () { + that.buttonSave.hide(); + that.content.hide(); + that.selectVariable.dialog.show(); + that.selectVariable.load(); + that.dialog.css({height: 452}); + }); + + this.selectVariable = new FormDesigner.main.DialogVariable(null, this.type); + this.selectVariable.onClick = function (variable) { + that.onSelect(variable); + }; + this.selectVariable.dialog.dialog("destroy"); + this.selectVariable.dialog.hide(); + + this.content = $( + "
" + + "
" + + " " + + "
" + + " " + + "
" + + " " + + " " + + " " + + " " + + " " + + "
" + + "
" + ); + + this.content.find("#settings").css({display: "none"}); + + var show = true; + var heightCreate = 180; + this.content.find("#buttonSettings").on("click", function () { + if (show) { + heightCreate = 260; + that.dialog.css({height: heightCreate}); + that.content.find("#settings").css({display: "block"}); + show = false; + } else { + heightCreate = 165; + that.dialog.css({height: heightCreate}); + that.content.find("#settings").css({display: "none"}); + show = true; + } + return false; + }); + + var a; + this.content.find("#buttonDbConnection").on("click", function () { + a = new FormDesigner.main.DialogDBConnection(null); + a.onClick = function (option) { + a.dialog.dialog("close").remove(); + that.var_dbconnection = option.value; + that.content.find("#buttonDbConnection").text(option.label); + }; + return false; + }); + this.content.find("#buttonSql").on("click", function () { + a = new FormDesigner.main.DialogSql(null); + a.onSave = function () { + that.var_sql = a.editor.getValue(); + that.content.find("#buttonSql").text(a.editor.getValue()); + }; + a.editor.setValue(that.var_sql); + return false; + }); + this.content.find("#buttonOptions").on("click", function () { + a = new FormDesigner.main.DialogOptions(null, that.var_accepted_values); + a.onApply = function () { + that.var_accepted_values = a.getOptions(); + that.content.find("#buttonOptions").text(JSON.stringify(a.getOptions())); + }; + if (that.content.find("#var_field_type").val() === "boolean") { + a.setOptionsBoolean(); + } + return false; + }); + this.content.find("#buttonInputDocument").on("click", function () { + a = new FormDesigner.main.DialogInputDocument(null); + a.onClick = function (option) { + a.dialog.dialog("close").remove(); + that.inp_doc_uid = option.value; + that.content.find("#buttonInputDocument").text(option.label); + }; + return false; + }); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: this.appendTo ? this.appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 195, + resizable: false, + position: ["center", 50], + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + this.dialog.append(this.optionSelect); + this.dialog.append(this.content); + this.dialog.append(this.selectVariable.dialog); + this.dialog.append(this.buttons); + this.dialog.append(this.add); + FormDesigner.main.DialogStyle(this.dialog); + + $.validkeys(that.content.find("#var_name")[0], ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + that.content.find("#var_name").focus(); + + //data + that.content.find("#var_field_type").on("change", function () { + that.setFieldsVisibility(this.value); + }); + var types = [{ + value: "string", label: "String" + }, { + value: "integer", label: "Integer" + }, { + value: "float", label: "Float" + }, { + value: "boolean", label: "Boolean" + }, { + value: "datetime", label: "Datetime" + }, { + value: "grid", label: "Grid" + }, { + value: "array", label: "Array" + }, { + value: "file", label: "File" + }, { + value: "multiplefile", label: "Multiple File" + } + ]; + that.content.find("#var_field_type").empty(); + for (var i = 0; i < types.length; i++) { + $.validDataTypeAndControlType(types[i].value, that.type, function () { + that.addItem(types[i]); + }); + } + that.setFieldsVisibility(that.content.find("#var_field_type").val()); + }; + DialogCreateVariable.prototype.save = function () { + var that = this; + if (!that.isValid()) { + var a = new FormDesigner.main.DialogMessage(null, "alert", "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores.".translate()); + a.onClose = function () { + }; + a.onAccept = function () { + }; + return false; + } + if (!that.isValidInputDocument()) { + var a = new FormDesigner.main.DialogMessage(null, "alert", "The input document is required, please select the value.".translate()); + a.onClose = function () { + }; + a.onAccept = function () { + }; + return false; + } + $.ajax({ + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id + "/process-variable", + data: JSON.stringify({ + var_name: that.content.find("#var_name").val(), + var_field_type: that.content.find("#var_field_type").val(), + var_dbconnection: that.var_dbconnection, + var_sql: that.var_sql, + var_label: that.content.find("#var_field_type").val(), + var_default: "", + var_accepted_values: that.var_accepted_values, + var_field_size: 10, + inp_doc_uid: that.inp_doc_uid + }), + method: "POST", + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + PMDesigner.project.keys.access_token); + }, + success: function (variable) { + that.dialog.dialog("close").remove(); + that.onSave(variable); + }, + error: function (responses) { + var msg; + try { + msg = JSON.parse(responses.responseText).error.message; + } catch (e) { + msg = "Error"; + } + var a = new FormDesigner.main.DialogMessage(null, "alert", msg); + a.onClose = function () { + }; + a.onAccept = function () { + }; + } + }); + }; + DialogCreateVariable.prototype.isValid = function () { + return /^[a-zA-Z_\x7f-\xff]+[a-zA-Z0-9_\x7f-\xff]*$/.test(this.content.find("#var_name").val()); + }; + DialogCreateVariable.prototype.isValidInputDocument = function () { + if (this.content.find("#var_field_type").val() === "file" || this.content.find("#var_field_type").val() === "multipleFile") { + return this.inp_doc_uid !== ""; + } + return true; + }; + DialogCreateVariable.prototype.setVarName = function (var_name) { + this.content.find("#var_name").val(var_name); + }; + DialogCreateVariable.prototype.addItem = function (type) { + var that = this; + that.content.find("#var_field_type").append(""); + }; + DialogCreateVariable.prototype.setFieldsVisibility = function (type) { + var that = this; + that.content.find("#var_dbconnection").show(); + that.content.find("#var_sql").show(); + that.content.find("#var_accepted_values").show(); + that.content.find("#inp_doc_uid").hide(); + if (type === "boolean") { + that.content.find("#var_dbconnection").hide(); + that.content.find("#var_sql").hide(); + that.var_accepted_values = [{value: "1", label: "true"}, {value: "0", label: "false"}]; + that.content.find("#buttonOptions").text(JSON.stringify(that.var_accepted_values)); + } + if (type === "datetime" || type === "grid" || type === "file" || type === "multiplefile") { + that.content.find("#var_dbconnection").hide(); + that.content.find("#var_sql").hide(); + that.content.find("#var_accepted_values").hide(); + } + if (type === "file") { + that.content.find("#inp_doc_uid").show(); + } + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogCreateVariable', DialogCreateVariable); +}()); +(function () { + var DialogMessage = function (appendTo, type, message) { + this.type = type; + this.message = message; + this.onAccept = new Function(); + this.onClose = new Function(); + DialogMessage.prototype.init.call(this, appendTo); + }; + DialogMessage.prototype.init = function (appendTo) { + var that = this, + title; + this.accept = $("" + "Ok".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.accept); + + title = that.type === "success"? "Information" : "Errors"; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.onClose(); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, this.type); + + this.dialog.append("
" + + this.message + + "
"); + this.dialog.append(this.buttons); + this.accept.focus(); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogMessage', DialogMessage); +}()); + +(function () { + var DialogConfirm = function (appendTo, type, message) { + this.type = type; + this.message = message; + this.onAccept = new Function(); + this.onCancel = new Function(); + this.onClose = new Function(); + DialogConfirm.prototype.init.call(this, appendTo); + }; + DialogConfirm.prototype.init = function (appendTo) { + var that = this; + this.accept = $("" + "Yes".translate() + ""); + this.accept.on("click", function () { + that.onAccept(); + that.dialog.dialog("close"); + return false; + }); + this.cancel = $("" + "No".translate() + ""); + this.cancel.on("click", function () { + that.onCancel(); + that.dialog.dialog("close"); + return false; + }); + this.buttons = $("
"); + this.buttons.find("div:nth-child(1)").append(this.cancel); + this.buttons.find("div:nth-child(1)").append(this.accept); + + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 470, + height: 170, + resizable: false, + close: function (event, ui) { + that.dialog.remove(); + that.onClose(); + } + }); + FormDesigner.main.DialogStyle(this.dialog, this.type); + + this.dialog.append("
" + + this.message + + "
"); + this.dialog.append(this.buttons); + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogConfirm', DialogConfirm); +}()); +(function () { + var DialogInputDocument = function (appendTo) { + this.onClose = new Function(); + this.onLoad = new Function(); + this.onClick = new Function(); + DialogInputDocument.prototype.init.call(this, appendTo); + }; + DialogInputDocument.prototype.init = function (appendTo) { + var that = this; + this.dialog = $("
"); + this.dialog.dialog({ + appendTo: appendTo ? appendTo : document.body, + modal: true, + autoOpen: true, + width: 500, + height: 400, + resizable: false, + close: function (event, ui) { + that.onClose(event, ui); + that.dialog.remove(); + } + }); + FormDesigner.main.DialogStyle(this.dialog); + + this.search = $("

" + "Search".translate() + " :

"); + this.search.find(">input").on("keyup", function () { + var input = this; + that.body.find(">div").each(function (i, e) { + var sw = false; + $(e).find(">div").each(function (i, e) { + sw = sw || $(e).text().toLowerCase().indexOf(input.value.toLowerCase()) > -1; + }); + if (sw) + $(e).show(); + else + $(e).hide(); + }); + }); + this.search.find("img").on("click", function () { + that.load(); + }); + this.body = $("
"); + this.dialog.append(this.search); + this.dialog.append(this.body); + this.load(); + }; + DialogInputDocument.prototype.load = function () { + var that = this; + this.body.find(">div").remove(); + var restProxy = new PMRestClient({ + endpoint: "input-documents", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var resp; + for (var i = 0; i < response.length; i++) { + resp = response[i]; + resp["label"] = response[i].inp_doc_title; + resp["value"] = response[i].inp_doc_uid; + that.addItem(resp); + } + that.onLoad(response); + } + }); + restProxy.executeRestClient(); + }; + DialogInputDocument.prototype.addItem = function (variable) { + var that = this; + var item = $("
" + + "
" + variable.label + "
" + + "
"); + item.on("click", function () { + that.onClick(variable); + }); + this.body.append(item); + return item; + }; + FormDesigner.extendNamespace('FormDesigner.main.DialogInputDocument', DialogInputDocument); +}()); +(function () { + /** + * PopOver for PM Dynaform's designer. + * @param {Object} settings An object containing the config options for the new PopOver. + * @cfg {String|JQuery Object| Element} body The content for the PopOver, it casn be an HTML string, a JQuery Object + * or an Element. + * @cfg {String} [class=""] The class name for the popover, useful for applying custom styles through a css class. + * @cfg {String} [placement=PMPopOver.PLACEMENT.RIGHT] A string that determines the placement of the popover related + * to its target element. Please Use one of the keys defined under PMPopOver.PLACEMENT. + * + * @constructor + */ + var PMPopOver = function (settings) { + this._body = null; + this._targetElement = null; + this._dom = {}; + this._class = null; + this._placement = null; + this._visible = false; + + PMPopOver.prototype._init.call(this, settings); + }; + /** + * All the possible values for placement config option. + * @type {{TOP: string, RIGHT: string, BOTTOM: string, LEFT: string}} + */ + PMPopOver.PLACEMENT = { + TOP: 'top', + RIGHT: 'right', + BOTTOM: 'bottom', + LEFT: 'left' + }; + /** + * Initialize the class + * @param settings + * @private + */ + PMPopOver.prototype._init = function (settings) { + settings = $.extend({ + body: "", + class: "", + placement: PMPopOver.PLACEMENT.RIGHT + }, settings); + + this._placement = settings.placement; + this._class = settings.class; + + this.setBody(settings.body) + .setTargetElement(settings.targetElement); + }; + /** + * Sets the element the PopOver belongs to. + * @param targetElement + * @chainable + */ + PMPopOver.prototype.setTargetElement = function (targetElement) { + if (!targetElement) { + throw new Error('setTargetElement(): Invalid parameter.'); + } + + this._clickHandler = this._clickHandler || this.toggleVisible.bind(this); + + if (this._targetElement) { + $(this._targetElement).off("click", this._clickHandler); + } + + this._targetElement = targetElement; + + $(this._targetElement).on("click", this._clickHandler); + + return this; + }; + /** + * Sets the PopOver body. + * @param body + * @chainable + */ + PMPopOver.prototype.setBody = function (body) { + if (!(body instanceof Element || body instanceof jQuery || typeof body === 'string')) { + throw new Error("setBody(): The parameter must be a DOM Element, jQuery element or a string."); + } + + this._body = body; + + if (this._dom.content) { + $(this._dom.content).empty().append(body); + } + + return this; + }; + /** + * Returns the position of the PopOver target element. + * @returns {Object} + * @private + */ + PMPopOver.prototype._getTargetPosition = function () { + var $element = this._targetElement instanceof jQuery ? this._targetElement : $(this._targetElement), + element = this._targetElement instanceof jQuery ? this._targetElement.get(0) : this._targetElement; + + return $.extend(element.getBoundingClientRect ? element.getBoundingClientRect() : { + width: element.offsetWidth, + height: element.offsetHeight + }, $element.offset()); + }; + /** + * Returns the final position for the popover. + * @returns {{top: *, left: *}} + * @private + */ + PMPopOver.prototype._getPosition = function () { + var targetPosition = this._getTargetPosition(), + arrowOffset = 10, + html = this.getHTML(), + htmlWidth, + htmlHeight, + placement, + top, + left; + + document.body.appendChild(html); + html.style.display = 'block'; + + htmlWidth = html.offsetWidth; + htmlHeight = html.offsetHeight; + placement = this._placement; + + switch (placement) { + case PMPopOver.PLACEMENT.TOP: + top = targetPosition.top - htmlHeight - arrowOffset; + left = targetPosition.left + (targetPosition.width / 2) - (htmlWidth / 2); + break; + case PMPopOver.PLACEMENT.RIGHT: + top = targetPosition.top + (targetPosition.height / 2) - (htmlHeight / 2); + left = targetPosition.left + targetPosition.width + arrowOffset; + break; + case PMPopOver.PLACEMENT.BOTTOM: + top = targetPosition.top + targetPosition.height + arrowOffset; + left = targetPosition.left + (targetPosition.width / 2) - (htmlWidth / 2); + break; + case PMPopOver.PLACEMENT.LEFT: + top = targetPosition.top + (targetPosition.height / 2) - (htmlHeight / 2); + left = targetPosition.left - htmlWidth - arrowOffset; + break; + default: + throw new Error('_getPosition(): Invalid placement parameter.'); + } + + return { + top: top, + left: left + }; + }; + /** + * Displays the PopOver. + * @chainable + * @return {body} + */ + PMPopOver.prototype.show = function () { + var position = this._getPosition(); + + $(this._html).removeClass("top right bottom left").addClass(this._placement).addClass("in"); + this._html.style.top = position.top + 'px'; + this._html.style.left = position.left + 'px'; + + this._visible = true; + + return this; + }; + /** + * Hides the PopOver. + * @chainable + * @return {body} + */ + PMPopOver.prototype.hide = function () { + if (this._html) { + $(this._html).fadeOut(150, "linear", function () { + this.style.display = 'none'; + $(this).removeClass('in'); + }); + } + + this._visible = false; + + return this; + }; + /** + * Toggles the PopOver visibility. + * @chainable + */ + PMPopOver.prototype.toggleVisible = function () { + return this._visible ? this.hide() : this.show(); + }; + /** + * Creates the PopOver HTML. + * @chainable + * @return {body} + * @private + */ + PMPopOver.prototype._createHTML = function () { + var container, + arrow, + content; + + if (this._html) { + return this; + } + + container = document.createElement('div'); + arrow = document.createElement('div'); + content = document.createElement('div'); + + container.className = "mafe-popover fade " + this._class; + arrow.className = "arrow"; + content.className = "mafe-popover-content"; + + container.appendChild(arrow); + container.appendChild(content); + + this._dom.container = container; + this._dom.arrow = arrow; + this._dom.content = content; + + this._html = container; + + this.setBody(this._body); + + this._html.addEventListener("mousedown", function (e) { + e.stopPropagation(); + }); + + document.addEventListener("mousedown", this.hide.bind(this), false); + + return this; + }; + /** + * Returns the PopOver HTML. + * @returns {Element} + */ + PMPopOver.prototype.getHTML = function () { + if (!this._html) { + this._createHTML(); + } + + return this._html; + }; + + FormDesigner.extendNamespace('FormDesigner.main.PMPopOver', PMPopOver); +})(); + +/** + * @class ItemRule + * @param object + * @constructor + */ +var ItemRule = function (object) { + /** + * Code of the Rule + * @type {String} + */ + this.code = null; + /** + * Type Shape + * @type {String} + */ + this.type = null; + /** + * Category of the Rule (BPMN | ENGINE) + * @type {String} + */ + this.category = null; + /** + * Type of alert (Error | Warning) + * @type {String} + */ + this.severity = null; + /** + * Description rule + * @type {String} + */ + this.description = null; + /** + * Criteria of validation + * @type {Function} + */ + this.criteria = null; + + this.init(object); +}; +/** + * Inicialize ItemRules. + * @param object + */ +ItemRule.prototype.init = function (object) { + if (typeof object === "object") { + this.setCode(object.code); + this.setTypeElement(object.type); + this.setCategory("BPMN"); + this.setSeverity(object.severity); + this.setDescription(object.description); + this.setCriteria(object.criteria); + } +}; +/** + * Get code rule + * @returns {String} + */ +ItemRule.prototype.getCode = function () { + return this.code; +}; +/** + * Get type rule + * @returns {String} + */ +ItemRule.prototype.getTypeElement = function () { + return this.type; +}; +/** + * Get category + * @returns {String} + */ +ItemRule.prototype.getCategory = function () { + return this.category; +}; +/** + * Get severity + * @returns {String} + */ +ItemRule.prototype.getSeverity = function () { + return this.severity; +}; +/** + * Get description + * @returns {String} + */ +ItemRule.prototype.getDescription = function () { + return this.description; +}; +/** + * Get criteria + * @returns {function} + */ +ItemRule.prototype.getCriteria = function () { + return this.criteria; +}; +/** + * Validate code + * @param codeRule {String} + * @returns {Boolean} + */ +ItemRule.prototype.isCodeRule = function (codeRule) { + var isCode = false; + if (codeRule === this.code) { + isCode = true; + } + return isCode; +}; +/** + * Set code + * @param code + * @returns {ItemRule} + */ +ItemRule.prototype.setCode = function (code) { + if (code && typeof code === "string") { + this.code = code; + } + return this; +}; +/** + * Set type element + * @param typeElement {String} + * @returns {ItemRule} + */ +ItemRule.prototype.setTypeElement = function (typeElement) { + if (typeElement && typeof typeElement === "string") { + this.type = typeElement; + } + return this; +}; +/** + * Set type element + * @param typeElement {String} + * @returns {ItemRule} + */ +ItemRule.prototype.setCategory = function (category) { + if (category && typeof category === "string") { + this.category = category; + } + return this; +}; +/** + * Set severity + * @param severity {String} + * @returns {ItemRule} + */ +ItemRule.prototype.setSeverity = function (severity) { + if (severity && typeof severity === "string") { + this.severity = severity; + } + return this; +}; +/** + * Set description + * @param description {String} + * @returns {ItemRule} + */ +ItemRule.prototype.setDescription = function (description) { + if (description && typeof description === "string") { + this.description = description; + } + return this; +}; +/** + * Set criteria + * @param criteria {Function} + * @returns {ItemRule} + */ +ItemRule.prototype.setCriteria = function (criteria) { + if (criteria && typeof criteria === "function") { + this.criteria = criteria; + } + return this; +}; +/** + * @class CollectionRules + * @param collectionRules + * @constructor + */ +var CollectionRules = function (collectionRules) { + /** + * Type Shape + * @type {String} + */ + this.typeShape = null; + /** + * Array of Rules + * @type {Rules} + */ + this.rules = new PMUI.util.ArrayList(); + this.init(collectionRules); +}; +/** + * Inicialize CollectionRules + * @param collectionRules + */ +CollectionRules.prototype.init = function (collectionRules) { + if (typeof collectionRules === "object") { + this.setTypeShape(collectionRules.typeShape); + this.loadRules(collectionRules.rules); + } +}; +/** + * Get type shape + * @returns {String} + */ +CollectionRules.prototype.getTypeShape = function () { + return this.typeShape; +}; +/** + * Validate type shape + * @param typeShape + * @returns {Boolean} + */ +CollectionRules.prototype.isTypeShape = function (typeShape) { + var isType = false; + if (typeShape === this.getTypeShape()) { + isType = true; + } + return isType; +}; +/** + * Get Array Rules + * @returns {Array Rules} + */ +CollectionRules.prototype.getRules = function () { + return this.rules; +}; +/** + * Get Item Rule + * @returns {ItemRule} + */ +CollectionRules.prototype.getItemRule = function (codeRule) { + var itemRule, + itemsRules; + if (codeRule) { + itemsRules = this.getRules(); + itemRule = itemsRules.find("code", codeRule); + } + return itemRule; +}; +/** + * Set type shape + * @param typeShape + * @returns {CollectionRules} + */ +CollectionRules.prototype.setTypeShape = function (typeShape) { + this.typeShape = (typeShape && typeof typeShape === "string") ? typeShape : this.typeShape; + return this; +}; +/** + * Set array rules + * @param arrRules + * @returns {CollectionRules} + */ +CollectionRules.prototype.setRules = function (arrRules) { + if (arrRules && Array.isArray(arrRules)) { + this.rules = arrRules; + } + return this; +}; +/** + * Load rules array + * @param arrRules + * @returns {CollectionRules} + */ +CollectionRules.prototype.loadRules = function (arrRules) { + var itemRule, + i, + max; + if (arrRules && Array.isArray(arrRules) && arrRules.length > 0) { + max = arrRules.length; + for (i = 0; i < max; i += 1) { + itemRule = new ItemRule(arrRules[i]); + this.rules.insert(itemRule); + } + } + return this; +}; +/** + * Add new ItemRule object + * @param itemRule {Object} + */ +CollectionRules.prototype.addItemRule = function (itemRule) { + if (itemRule && typeof itemRule === "object") { + this.rules.insert(itemRule); + } + return this; +}; +/** + * Remove ItemRule object + * @param itemRule + * @returns {CollectionRules} + */ +CollectionRules.prototype.removeItemRule = function (itemRule) { + if (itemRule && typeof itemRule === "object") { + this.rules.remove(itemRule); + } + return this; +}; +/** + * @class ModelRules + * @param object + * @constructor + */ +var ModelRules = function (object, status) { + /** + * Status Rules + * @type {Boolean} + */ + this.enable = true; + /** + * Items collection + * @type {PMUI.util.ArrayList} + */ + this.itemsCollection = new PMUI.util.ArrayList(); + this.init(object, status); +}; +/** + * Inicialize Model Rules + * @param object + */ +ModelRules.prototype.init = function (object, status) { + var prop; + this.setStatus(status); + if (object && typeof object === "object") { + for (prop in object) { + this.enable + this.loadCollection(prop, object[prop]); + } + } +}; +/** + * Load Collection Rules + * @param type + * @param arrRules + * @returns {ModelRules} + */ +ModelRules.prototype.loadCollection = function (type, arrRules) { + var collectionObject; + if (type && arrRules) { + if (typeof type === "string" && Array.isArray(arrRules)) { + collectionObject = new CollectionRules({ + 'typeShape': type, + 'rules': arrRules + }); + this.itemsCollection.insert(collectionObject); + } + } + return this; +}; +/** + * Get the status of the enable property (true | false) + * @returns {Boolean} + */ +ModelRules.prototype.getStatus = function () { + return this.enable; +}; +/** + * Get Items Collection Arralist + * @returns {PMUI.util.ArrayList} + */ +ModelRules.prototype.getItemsCollection = function () { + return this.itemsCollection; +}; +/** + * Set the status of the enable property + * @param status + * @returns {ModelRules} + */ +ModelRules.prototype.setStatus = function (status) { + this.enable = (typeof status === "boolean") ? status : this.enable; + return this; +}; + +/** + * Get Collection Rules for type Bpmn Element + * Example: + * PMDesigner.modelRules.getCollectionType('bpmnActivity'); + * @param type {String} + * @returns CollectionRules {PMUI.util.ArrayList} + */ +ModelRules.prototype.getCollectionType = function (type) { + var collection, + i, + itemCollection, + max; + if (type && typeof type === "string") { + max = this.itemsCollection.getSize(); + for (i = 0; i < max; i += 1) { + itemCollection = this.itemsCollection.get(i); + if (itemCollection.isTypeShape(type)) { + collection = itemCollection.getRules(); + break; + } + } + } + return collection; +}; +/** + * Add Item Rule + * Example: + * PMDesigner.modelRules.addItemRuleToCollection('bpmnActivity', { + * code: '123456', + * description: 'This is a Message of Error'.translate(), + * type: 'bpmnActivity', + * severity: 'Warning', {'Warning | Error'} + * criteria: function (shape, error) { + * //Validation Rule +* shape.addErrorLog(error); + * } + * }); + * @param type {String} + * @param item {Object} + * @returns {ModelRules} + */ +ModelRules.prototype.addItemRuleToCollection = function (type, item) { + var itemCollection, + itemRule, + max, + index = 0; + if (type && item) { + max = this.itemsCollection.getSize(); + while (index < max) { + itemCollection = this.itemsCollection.get(index); + if (itemCollection.isTypeShape(type)) { + itemRule = new ItemRule(item); + itemCollection.addItemRule(itemRule); + index = max; + } + index += 1; + } + } + return this; +}; +/** + * Remove Item Rule + * Example: + * PMDesigner.modelRules.removeItemRuleFromCollection('123465'); + * @param code {String} + * @returns {ModelRules} + */ +ModelRules.prototype.removeItemRuleFromCollection = function (code) { + var itemCollection, + itemRule, + max, + index = 0; + if (code && typeof code === "string") { + max = this.itemsCollection.getSize(); + while (index < max) { + itemCollection = this.itemsCollection.get(index); + itemRule = itemCollection.getItemRule(code); + if (itemRule) { + itemCollection.removeItemRule(itemRule); + index = max; + } + index += 1; + } + } + return this; +}; +/** + * Add Collection Rules + * Example: + * PMDesigner.modelRules.addItemRuleToCollection('bpmnActivity' + * [ + * {Object ItemRule}, + * {Object ItemRule}, + * {Object ItemRule} + * ] + * ); + * @param typeShape {String} + * @param collectionRules {Array} + * @returns {ModelRules} + */ +ModelRules.prototype.addCollectionRules = function (typeShape, arrayRules) { + var max, + i; + if (type && arrayRules && Array.isArray(arrayRules)) { + max = arrayRules.length; + for (i = 0; i < max; i += 1) { + this.addItemRuleToCollection(typeShape, arrayRules[i]); + } + } + return this; +}; + + +/** + * Crown Class + * @param options + * @constructor + */ +var Corona = function (options) { + /** + * Call Shape Contructor + */ + PMUI.draw.Shape.call(this, options); + /** + * Define parent crown + * @type {shape} + */ + this.parent = null; + /** + * Define Type Especific of the parent + * @type {null} + */ + this.parentType = null; + /** + * Define number rows + * @type {number} + */ + this.rows = 1; + /** + * Define number cols + * @type {number} + */ + this.cols = 1; + /** + * Define Items of the Crown + * @type {PMUI.util.ArrayList} + */ + this.itemsCrown = new PMUI.util.ArrayList(); + /** + * Event OnMouseOut + * @type {null} + */ + this.eventOnMouseOut = null; + this.init(options); +}; +/** + * Define New Object Shape + * @type {PMUI.draw.Shape} + */ +Corona.prototype = new PMUI.draw.Shape(); +/** + * Defines the object type + * @type {String} + */ +Corona.prototype.type = 'Crown'; +/** + * Inicializate Crown + * @param options + * @returns {Crown} + */ +Corona.prototype.init = function (options) { + var config; + if (typeof options === "object" && !jQuery.isEmptyObject(options)) { + this.setParent(options.parent); + this.setParentType(options.parentType); + config = this.getConfigItems(options.parentType); + if (config) { + this.populateItemsCrown(config); + this.setRows(config.rows); + this.setCols(config.cols); + } + } + return this; +}; +/** + * Get Parent Crown + * @returns {shape|PMUI.draw.Shape|*} + */ +Corona.prototype.getParent = function () { + return this.parent; +}; +/** + * Get Parent Type + * @returns {null|string|*} + */ +Corona.prototype.getParentType = function () { + return this.parentType; +}; +/** + * Get Rows + * @returns {number} + */ +Corona.prototype.getRows = function () { + return this.rows; +}; +/** + * Get Cols + * @returns {number} + */ +Corona.prototype.getCols = function () { + return this.cols; +}; +/** + * Get Items Crown + * @returns {PMUI.util.ArrayList|*} + */ +Corona.prototype.getItemsCrown = function () { + return this.itemsCrown; +}; +/** + * Set Parent Crown + * @param parent + * @returns {Corona} + */ +Corona.prototype.setParent = function (parent) { + if (typeof parent === "object" && !jQuery.isEmptyObject(parent)) { + this.parent = parent; + } + return this; +}; +/** + * Set Parent Type + * @param parentType + * @returns {Corona} + */ +Corona.prototype.setParentType = function (parentType) { + if (parentType && typeof parentType === "string") { + this.parentType = parentType; + } + return this; +}; +/** + * Set Number Rows + * @param rows + * @returns {Crown} + */ +Corona.prototype.setRows = function (rows) { + if (rows && rows > 0) { + this.rows = rows; + } + return this; +}; +/** + * Set Number Cols + * @param cols + * @returns {Crown} + */ +Corona.prototype.setCols = function (cols) { + if (cols && cols > 0) { + this.cols = cols; + } + return this; +}; +/** + * Resize crown + * @returns {Corona} + */ +Corona.prototype.adjustSize = function () { + var width, + height, + itemFirst, + margin = 4; + itemFirst = this.getItemsCrown().get(0); + width = (itemFirst.getWidth() + margin) * this.getCols(); + height = (itemFirst.getHeight() + margin) * this.getRows(); + if (this.html) { + this.html.style.width = width + "px"; + this.html.style.height = height + 'px'; + this.updatePosition(); + } + return this; +}; +/** + * Changes position + * @returns {Corona} + */ +Corona.prototype.updatePosition = function () { + jQuery(this.html).position({ + of: jQuery(this.parent.html), + my: "left top", + at: "right top", + collision: 'none' + }); + return this; +}; +/** + * Get config Items Crown + * @param especificType + * @returns {*} + */ +Corona.prototype.getConfigItems = function (especificType) { + var configDefault = PMDesigner.configCrown, + typeShape = this.getParent().getType(), + configCrown = configDefault[typeShape][especificType]; + return configCrown; +}; +/** + * Populate Crown from previous configuration + * @param config + * @returns {Corona} + */ +Corona.prototype.populateItemsCrown = function (config) { + var order = (config && config.order) || [], + itemsDefault = PMDesigner.modelCrown.getItemsDefault(), + itemCrownDefault, + itemCrown, + max, + i; + if (order && Array.isArray(order) && order.length > 0) { + max = order.length; + for (i = 0; i < max; i += 1) { + itemCrownDefault = itemsDefault.find("id", order[i]); + itemCrownDefault.parent = this; + itemCrownDefault.canvas = this.canvas; + itemCrown = new ItemCrown(itemCrownDefault); + this.itemsCrown.insert(itemCrown); + } + } + return this; +}; +Corona.prototype.isCreatedItems = function () { + var isCreated = false; + if (this.countChildrens() === this.getItemsCrown().getSize()) { + isCreated = true; + } + return isCreated +}; +/** + * Paint Crown + * @returns {Corona} + */ +Corona.prototype.paint = function () { + if (!this.html) { + this.createHTML(); + } + return this; +}; +/** + * Create HTML + * @returns {Corona} + */ +Corona.prototype.createHTML = function () { + var htmlParent = this.getCanvas().html, + htmlCrown, + htmlRow, + itemCrown, + itemsAux = this.getItemsCrown().asArray(), + cont = 0, + i; + this.html = null; + htmlCrown = this.createHtmlCrown(); + while (itemsAux.length > 0) { + if (this.getRows() > cont) { + htmlRow = this.createHtmlRow(cont); + for (i = 0; i < this.getCols(); i += 1) { + if (itemsAux.length > 0) { + itemCrown = itemsAux.shift(); + itemCrown = itemCrown.createHtmlItem(); + itemCrown = itemCrown.attachListeners(); + htmlRow.appendChild(itemCrown.html); + } else { + break; + } + } + htmlCrown.appendChild(htmlRow); + cont += 1; + } + } + htmlParent.appendChild(htmlCrown); + this.html = htmlCrown; + this.adjustSize(); + return this; +}; +/** + * Create Html Crown + * @returns {*} + */ +Corona.prototype.createHtmlCrown = function () { + var htmlCrown = null, + classCrown = "crown-container"; + PMUI.draw.Shape.prototype.createHTML.call(this); + htmlCrown = this.html; + if (htmlCrown) { + htmlCrown.className = classCrown; + } + return htmlCrown; +}; +/** + * Create Html Row + * @param index + * @returns {HTMLElement|*} + */ +Corona.prototype.createHtmlRow = function (index) { + var htmlRow = null, + classRow = "row"; + htmlRow = PMUI.createHTMLElement("div"); + htmlRow.className = classRow + " " + classRow + "-" + index; + return htmlRow; +}; +/** + * Show Crown + * @returns {Corona} + */ +Corona.prototype.show = function () { + if (this.isDirtyParentType()) { + this.updateCrown(); + } + if (!this.html) { + this.createHTML(); + } else { + jQuery(this.html).show(); + this.updatePosition(); + this.setZOrder(this.getParent().getZOrder() + 1 || 1); + } + return this; +}; +/** + * Hide Crown + * @returns {Corona} + */ +Corona.prototype.hide = function () { + if (this && this.html) { + jQuery(this.html).hide(); + } + return this; +}; +/** + * Destroy Crown Content + * @returns {Corona} + */ +Corona.prototype.destroy = function () { + if (this && this.html) { + jQuery(this.html).empty(); + jQuery(this.html).remove(); + this.html = null; + } + this.getItemsCrown().clear(); + return this; +}; +/** + * Update Crown when the config changes + * @returns {Corona} + */ +Corona.prototype.updateCrown = function () { + var config, + especificType = this.getParent().getEspecificType(); + this.destroy(); + this.setParentType(especificType); + config = this.getConfigItems(especificType); + this.populateItemsCrown(config); + this.setRows(config.rows); + this.setCols(config.cols); + return this; +}; +/** + * Validate if the shape type change + * @returns {boolean} + */ +Corona.prototype.isDirtyParentType = function () { + var isDirty = false; + if (this.getParent().getType() !== "PMActivity" && this.getParentType() !== this.getParent().getEspecificType()) { + isDirty = true; + } + return isDirty; +}; + +/** + * Item Crown Class + * @param options + * @constructor + */ +var ItemCrown = function (options) { + /** + * Call Shape Constructor + */ + PMUI.draw.Shape.call(this, options); + /** + * Define Id ItemCrown + * @type {null} + */ + this.id = null; + /** + * Parent Item Crown + * @type {null} + */ + this.parent = null; + /** + * Name Item Crown + * @type {string} + */ + this.name = null; + /** + * Class Name Item Crown + * @type {string} + */ + this.className = null; + /** + * Width of the Item Crown + * @type {number} + */ + this.width = 22; + /** + * Height of the Item Crown + * @type {number} + */ + this.height = 22; + /** + * Event OnClick + * @type {null} + */ + this.eventOnClick = null; + /** + * Event OnMouseDown + * @type {null} + */ + this.eventOnMouseDown = null; + /** + * Event OnMouseUp + * @type {null} + */ + this.eventOnMouseUp = null; + /** + * Event OnMouseMove + * @type {null} + */ + this.eventOnMouseMove = null; + /** + * Event OnMouseOut + * @type {null} + */ + this.eventOnMouseOut = null; + this.init(options); +}; +/** + * Define new Object Shape + * @type {PMUI.draw.Shape} + */ +ItemCrown.prototype = new PMUI.draw.Shape(); +/** + * Defines the object type + * @type {String} + */ +ItemCrown.prototype.type = 'ItemCrown'; +/** + * Inicialize Item Crown + * @param options + * @returns {ItemCrown} + */ +ItemCrown.prototype.init = function (options) { + if (typeof options === "object") { + this.setId(options.id); + this.setParent(options.parent); + this.setName(options.name); + this.setClassName(options.className); + this.setEventOnClick(options.eventOnClick); + this.setEventOnMouseDown(options.eventOnMouseDown); + this.setEventOnMouseUp(options.eventOnMouseUp); + this.setEventOnMouseMove(options.eventOnMouseMove); + this.setEventOnMouseOut(options.eventOnMouseOut); + } + return this; +}; +/** + * Get Id Item Crown + * @returns {null} + */ +ItemCrown.prototype.getId = function () { + return this.id; +}; +/** + * Get parent Item Crown + * @returns {null} + */ +ItemCrown.prototype.getParent = function () { + return this.parent; +}; +/** + * Get Name + * @returns {null|string|*} + */ +ItemCrown.prototype.getName = function () { + return this.name; +}; +/** + * Get Class Name Style + * @returns {null|*} + */ +ItemCrown.prototype.getClassName = function () { + return this.className; +}; +/** + * Get Width + * @returns {number|*} + */ +ItemCrown.prototype.getWidth = function () { + return this.width; +}; +/** + * Get Height + * @returns {number|*} + */ +ItemCrown.prototype.getHeight = function () { + return this.height; +}; +/** + * Get Function EventOnclick + * @returns {null|*} + */ +ItemCrown.prototype.getEventOnClick = function () { + return this.eventOnClick; +}; +/** + * Get Function EventOnMouseDown + * @returns {null|*} + */ +ItemCrown.prototype.getEventOnMouseDown = function () { + return this.eventOnMouseDown; +}; +/** + * Set Id ItemCrown + * @param id + * @returns {ItemCrown} + */ +ItemCrown.prototype.setId = function (id) { + if (id && typeof id === "string") { + this.id = id; + } + return this; +}; +/** + * Set Parent ItemCrown + * @param parent + * @returns {ItemCrown} + */ +ItemCrown.prototype.setParent = function (parent) { + if (typeof parent === "object" && !jQuery.isEmptyObject(parent)) { + this.parent = parent; + } + return this; +}; +/** + * Set Name + * @param name + * @returns {ItemCrown} + */ +ItemCrown.prototype.setName = function (name) { + if (name && typeof name === "string") { + this.name = name; + } + return this; +}; +/** + * Set ClassName Style + * @param className + * @returns {ItemCrown} + */ +ItemCrown.prototype.setClassName = function (className) { + if (className && typeof className === "string") { + this.className = className + } + return this; +}; +/** + * Set Width + * @param width + * @returns {ItemCrown} + */ +ItemCrown.prototype.setWidth = function (width) { + if (width) { + this.width = width; + } + return this; +}; +/** + * Set Height + * @param height + * @returns {ItemCrown} + */ +ItemCrown.prototype.setHeight = function (height) { + if (height) { + this.height = height; + } + return this; +}; +/** + * Set Function EventOnClick + * @param func + * @returns {ItemCrown} + */ +ItemCrown.prototype.setEventOnClick = function (func) { + if (func && typeof func === "function") { + this.eventOnClick = func; + } + return this; +}; +/** + * Set Function EventOnMouseDown + * @param func + * @returns {ItemCrown} + */ +ItemCrown.prototype.setEventOnMouseDown = function (func) { + if (func && typeof func === "function") { + this.eventOnMouseDown = func; + } + return this; +}; +/** + * Set Function EventOnMouseUp + * @param func + * @returns {ItemCrown} + */ +ItemCrown.prototype.setEventOnMouseUp = function (func) { + if (func && typeof func === "function") { + this.eventOnMouseUp = func; + } + return this; +}; +/** + * Set Function EventOnMouseMove + * @param func + * @returns {ItemCrown} + */ +ItemCrown.prototype.setEventOnMouseMove = function (func) { + if (func && typeof func === "function") { + this.eventOnMouseMove = func; + } + return this; +}; +/** + * Set Function EventOnMouseOut + * @param func + * @returns {ItemCrown} + */ +ItemCrown.prototype.setEventOnMouseOut = function (func) { + if (func && typeof func === "function") { + this.eventOnMouseOut = func; + } + return this; +}; +/** + * Create HTML Item Crown + * @returns {*} + */ +ItemCrown.prototype.createHtmlItem = function () { + var htmlItemCrown, + classItemCrown = "item-crown", + positionDefault = 'relative'; + PMUI.draw.Shape.prototype.createHTML.call(this); + htmlItemCrown = this.html; + htmlItemCrown.className = this.getClassName() + " " + classItemCrown; + htmlItemCrown.title = this.getName(); + htmlItemCrown.style.position = positionDefault; + htmlItemCrown.style.width = this.getWidth() + "px"; + htmlItemCrown.style.height = this.getHeight() + "px"; + this.html = htmlItemCrown; + return this; +}; +/** + * Listeners + * @returns {ItemCrown} + */ +ItemCrown.prototype.attachListeners = function () { + var htmlItemCrown; + htmlItemCrown = this.html; + if (htmlItemCrown) { + jQuery(htmlItemCrown).click(this.onClick()); + jQuery(htmlItemCrown).mousedown(this.onMouseDown()); + jQuery(htmlItemCrown).mouseup(this.onMouseUp()); + jQuery(htmlItemCrown).mousemove(this.onMouseMove()); + jQuery(htmlItemCrown).mouseout(this.onMouseOut()); + } + this.html = htmlItemCrown; + return this; +}; +/** + * OnClick Event + * @returns {Function} + */ +ItemCrown.prototype.onClick = function () { + var that = this; + return function (e) { + e.stopPropagation(); + e.preventDefault(); + if (that.eventOnClick) { + that.eventOnClick(that); + } + }; +}; +/** + * OnMouseDown Event + * @returns {Function} + */ +ItemCrown.prototype.onMouseDown = function () { + var that = this; + return function (e) { + e.stopPropagation(); + e.preventDefault(); + if (that.eventOnMouseDown) { + that.eventOnMouseDown(that); + } + }; +}; +/** + * OnMouseUp Event + * @returns {Function} + */ +ItemCrown.prototype.onMouseUp = function () { + var that = this; + return function (e) { + e.stopPropagation(); + e.preventDefault(); + if (that.eventOnMouseUp) { + that.eventOnMouseUp(that); + } + }; +}; +/** + * OnMouseMove Event + * @returns {Function} + */ +ItemCrown.prototype.onMouseMove = function () { + var that = this; + return function (e) { + e.stopPropagation(); + e.preventDefault(); + if (that.eventOnMouseMove) { + that.eventOnMouseMove(that); + } + }; +}; +/** + * OnMouseOut Event + * @returns {Function} + */ +ItemCrown.prototype.onMouseOut = function () { + var that = this; + return function (e) { + e.stopPropagation(); + e.preventDefault(); + if (that.eventOnMouseOut) { + that.eventOnMouseOut(that); + } + }; +}; + +/** + * Class ModelCrown + * @param options + * @constructor + */ +var ModelCrown = function (options) { + this.itemsDefault = PMUI.util.ArrayList(); + this.init(options); +}; +/** + * Initialize ModelCrown + * @param options + */ +ModelCrown.prototype.init = function (options) { + if (typeof options === "object" && Object.keys(options).length > 0) { + this.setItemsDefault(options.items); + } + return this; +}; +/** + * Get Items ModelCrown + * @returns {*|Array} + */ +ModelCrown.prototype.getItemsDefault = function () { + return this.itemsDefault; +}; +/** + * Set Items ModelCrown + * @param items {Array of the Objects} + * @returns {ModelCrown} + */ +ModelCrown.prototype.setItemsDefault = function (items) { + var itemCrown, + max, + i; + if (items && Array.isArray(items) && items.length > 0) { + max = items.length; + for (i = 0; i < max; i += 1) { + this.itemsDefault.insert(items[i]); + } + } + return this; +}; +/** + * Add New Item Crown + * Example: + * PMDesigner.modelCrown.addItemToCrown({ + * id: "example-id", + * name: "exmaple-name".translate(), + * className: "name-class-css", + * eventOnClick: function(item) { + * --Your code goes here + * }, + * eventOnMouseDown: function(item) { + * --Your code goes here + * } + * }); + * + * @param itemObject {Object} + * @returns {ModelCrown} + */ +ModelCrown.prototype.addItemToCrown = function (itemObject) { + if (typeof itemObject === "object" && Object.keys(itemObject).length > 0) { + this.itemsDefault.insert(itemObject); + } + return this; +}; +/** + * Remove ItemCrown + * Example: + * PMDesigner.modelCrown.removeItemFromCrown(idItem); + * + * @param idItem {string} + * @returns {ModelCrown} + */ +ModelCrown.prototype.removeItemFromCrown = function (idItem) { + var itemCrown; + if (idItem && typeof idItem === "string") { + itemCrown = this.itemsDefault.find("id", idItem); + if (itemCrown) { + this.itemsDefault.remove(itemCrown); + } + } + return this; +}; +var __env = __env || {};__env.USER_GUEST = {"uid":"00000000000000000000000000000002","firstname":"Guest","lastname":"Guest","username":"guest"}; __env.pmVariable = {"regEx":"/^[a-zA-Z\\_]{1}\\w+$/"}; + +var defaultCrown = { + items: [ + { + id: "task", + name: "Task".translate(), + className: "mafe-corona-task", + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'TASK'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-task'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "gateway", + name: 'Gateway'.translate(), + className: 'mafe-corona-gateway-exclusive', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'EXCLUSIVE'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-gateway-exclusive'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "intermediate", + name: 'Intermediate'.translate(), + className: 'mafe-corona-intermediate', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'INTERMEDIATE_EMAIL'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-intermediate-send-mesage'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "end", + name: 'End'.translate(), + className: 'mafe-corona-end', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'END'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-end'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "flow", + name: 'Flow'.translate(), + className: 'mafe-corona-flow', + eventOnClick: function (item) { + item.parent.hide(); + item.parent.parent.canvas.hideAllFocusedLabels(); + }, + eventOnMouseDown: function (item) { + item.canvas.canConnect = true; + item.canvas.connectStartShape = item.parent.parent; + } + }, + { + id: "properties", + name: 'Properties'.translate(), + className: 'mafe-corona-settings', + eventOnClick: function (item) { + item.parent.hide(); + PMDesigner.saveAndOpenSettings(item.parent.parent, PMDesigner.shapeProperties); + } + }, + { + id: "delete", + name: 'Delete'.translate(), + className: 'mafe-corona-delete', + eventOnClick: function (item) { + PMUI.getActiveCanvas().removeElements(); + item.parent.hide(); + } + } + ] +}; + +var configCrown = { + 'PMActivity': { + 'DEFAULT': { + order: ["task", "gateway", "intermediate", "end", "flow", "properties", "delete"], + rows: 3, + cols: 3 + } + }, + 'PMGateway': { + 'PARALLEL': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'EXCLUSIVE': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INCLUSIVE': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + } + }, + 'PMEvent': { + 'START_EMPTY': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'START_MESSAGECATCH': { + order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'START_TIMER': { + order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'START_CONDITIONAL': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'START_SIGNALCATCH': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_EMAIL': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_MESSAGETHROW': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_SIGNALTHROW': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_MESSAGECATCH': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_TIMER': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_CONDITIONAL': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_SIGNALCATCH': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'END_EMPTY': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_EMAIL': { + order: ["flow", "properties", "delete"], + rows: 2, + cols: 2 + }, + 'END_MESSAGETHROW': { + order: ["flow", "properties", "delete"], + rows: 2, + cols: 2 + }, + 'END_ERRORTHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_SIGNALTHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_TERMINATETHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + }, + 'PMPool': { + 'DEFAULT': { + order: ["delete"], + rows: 1, + cols: 1 + } + }, + 'PMParticipant': { + 'DEFAULT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + }, + 'PMArtifact': { + 'TEXT_ANNOTATION': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'GROUP': { + order: ["delete"], + rows: 1, + cols: 1 + } + }, + 'PMData': { + 'DATAOBJECT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATAINPUT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATAOUTPUT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATASTORE': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + } +}; +var PMDesigner = {}, + LANG, + WORKSPACE, + SKIN, + DEFAULT_WINDOW_WIDTH, + DEFAULT_WINDOW_HEIGHT, + ENABLED_FEATURES, + DataDictionary, + enviromentVariables, + resizingFrame, + ViewTaskInformation; + +PMDesigner.defaultRules = window.defaultRules ? window.defaultRules : {}; +PMDesigner.defaultCrown = window.defaultCrown ? defaultCrown : {}; +PMDesigner.configCrown = window.configCrown ? configCrown : {}; +PMDesigner.modelRules = new ModelRules(PMDesigner.defaultRules); +PMDesigner.modelCrown = new ModelCrown(PMDesigner.defaultCrown); +PMDesigner.remoteUrl = ""; +PMDesigner.moddle = new BpmnModdle(); +PMDesigner.bpmnFactory = new BpmnFactory(PMDesigner.moddle); +PMDesigner.keyCodeF5 = 116; +PMDesigner.shapeProperties = function (shape) { + var typeShape = shape.type; + switch (typeShape) { + case "PMActivity": + PMDesigner.activityProperties(shape); + break; + case "PMGateway": + PMDesigner.gatewayProperties(shape); + break; + case "PMEvent": + shape.eventProperties(); + break; + } +}; + +/** + * function to get the enviroment variables (WORKSPACE, LANG, SKIN) + */ +enviromentVariables = function (variable) { + var url1, variables, WORKSPACE, LANG, SKIN; + if (window.parent) { + url1 = window.parent.location.pathname; + variables = url1.split('/'); + WORKSPACE = variables[1]; + WORKSPACE = WORKSPACE.substring(3); + LANG = variables[2]; + SKIN = variables[3]; + + if (variable == 'WORKSPACE') { + return WORKSPACE; + } else if (variable == 'LANG') { + return LANG; + } else if (variable == 'SKIN') { + return SKIN; + } else { + return null; + } + } +}; + +LANG = (typeof SYS_LANG !== "undefined") ? SYS_LANG : enviromentVariables('LANG'); +WORKSPACE = (typeof SYS_SYS !== "undefined") ? SYS_SYS : enviromentVariables('WORKSPACE'); +SKIN = (typeof SYS_SKIN !== "undefined") ? SYS_SKIN : enviromentVariables('SKIN'); + +DEFAULT_WINDOW_WIDTH = 943; +DEFAULT_WINDOW_HEIGHT = 520; +ENABLED_FEATURES = []; + +if (LANG != 'en') { + if (typeof __TRANSLATIONMAFE != "undefined" && typeof __TRANSLATIONMAFE[LANG] != 'undefined') { + PMUI.loadLanguage(__TRANSLATIONMAFE.en, 'en'); + PMUI.loadLanguage(__TRANSLATIONMAFE[LANG], LANG); + + PMUI.setDefaultLanguage('en'); + PMUI.setCurrentLanguage(LANG); + } +} + +PMDesigner.resizeFrame = function () { + if (parent.document.documentElement === document.documentElement) { + jQuery(".content").css("height", parseInt(jQuery(window).height())); + } else { + jQuery(".content").css("height", document.body.clientHeight); + + } +}; +resizingFrame = PMDesigner.resizeFrame; +PMDesigner.applyCanvasOptions = function () { + list = new PMUI.control.DropDownListControl({ + options: [], + style: { + cssClasses: [ + "mafe-dropdown-zoom" + ] + }, + width: 150, + onChange: function (newValue, previous) { + var canvas = PMDesigner.project.diagrams.find('id', newValue); + PMUI.getActiveCanvas().getHTML().style.display = 'none'; + PMUI.setActiveCanvas(canvas); + canvas.getHTML().style.display = 'inline'; + } + }); + //enable to support multidiagram + //jQuery(jQuery(".navBar li")[6]).append(list.getHTML()); + list.defineEvents(); + PMDesigner.canvasList = list; +}; +//Zoom +PMDesigner.ApplyOptionsZoom = function () { + list = new PMUI.control.DropDownListControl({ + id: '_idListZoom', + options: [ + { + label: "50%", + value: 1 + }, + { + label: "75%", + value: 2 + }, + { + label: "100%", + value: 3, + selected: true + }, + { + label: "125%", + value: 4 + }, + { + label: "150%", + value: 5 + } + ], + style: { + cssClasses: [ + "mafe-dropdown-zoom" + ] + }, + onChange: function (newValue, previous) { + var i; + newValue = parseInt(newValue, 10); + PMUI.getActiveCanvas().applyZoom(newValue); + } + }); + + //jQuery(jQuery(".navBar li")[4]).append(list.getHTML()); + jQuery(jQuery(".mafe-zoom-options")).append(list.getHTML()); + + list.defineEvents(); +}; +/** + * hides all requiered TinyControls + */ +PMDesigner.hideAllTinyEditorControls = function () { + var control, + i, + max, + j, + mapMax, + editor, + controlMap = [ + 'tinyeditor_fontselect', + 'tinyeditor_fontsizeselect', + 'tinyeditor_bullist', + 'tinyeditor_numlist', + 'tinyeditor_forecolor', + 'tinyeditor_backcolor' + ]; + for (i = 0, max = tinymce.editors.length; i < max; i += 1) { + editor = tinymce.editors[i]; + jQuery.each(editor.controlManager.controls, function (index, val) { + if (val && jQuery.isFunction(val.hideMenu)) { + val.hideMenu(); + } + }); + } + +}; + + +jQuery(document).ready(function ($) { + var setSaveButtonDisabled, + s, + sidebarCanvas, + project, + d, + downloadLink, + handlerExportNormal, + handlerExportGranular, + handler, + validatosr, + help, + option, + menu, + elem, + validatorLabel = "Validator".translate(); + /*************************************************** + * Defines the Process + ***************************************************/ + if (typeof prj_uid === "undefined") { + prj_uid = ''; + } + if (typeof prj_readonly === "undefined") { + prj_readonly = ''; + } + if (typeof credentials === "undefined") { + credentials = ''; + } else { + credentials = RCBase64.decode(credentials); + credentials = (credentials == '') ? "" : JSON.parse(credentials); + } + + if (prj_readonly !== 'true') { + $("#idContent").find(".content_controls").show(); + $(".bpmn_shapes").show(); + $('.bpmn_shapes_legend').hide(); + $("#idNavBar").show().css('height', '33px'); + } + + PMDesigner.createHTML(); + setSaveButtonDisabled = function (that) { + if (that.isDirty()) { + if (document.getElementsByClassName("mafe-save-process").length > 0) { + document.getElementsByClassName("mafe-save-process")[0].removeAttribute("style"); + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#FFF"; + + var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; + mafebuttonMenu.style.backgroundColor = "#0C9778"; + mafebuttonMenu.firstChild.src = "/lib/img/caret-down-w.png"; + } + } else { + if (document.getElementsByClassName("mafe-save-process").length > 0) { + document.getElementsByClassName("mafe-save-process")[0].style.backgroundColor = "#e8e8e8"; + document.getElementsByClassName("mafe-save-process")[0].style.color = "#000"; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#000"; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].text = "Save".translate(); + + var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; + mafebuttonMenu.style.backgroundColor = "#e8e8e8"; + mafebuttonMenu.firstChild.src = "/lib/img/caret-down.png"; + } + } + }; + sidebarCanvas = []; + for (s = 0; s < PMDesigner.sidebar.length; s += 1) { + sidebarCanvas = sidebarCanvas.concat(PMDesigner.sidebar[s].getSelectors()); + jQuery(".bpmn_shapes").append(PMDesigner.sidebar[s].getHTML()); + } + //Adding Sidebar to DOM + firstAbsuluteX = jQuery("#div-layout-canvas").offset().left; + + project = new PMProject({ + id: prj_uid, + name: 'Untitled Process', + readOnly: prj_readonly === "true", + keys: { + access_token: credentials.access_token, + expires_in: credentials.expires_in, + token_type: credentials.token_type, + scope: credentials.scope, + refresh_token: credentials.refresh_token, + client_id: credentials.client_id, + client_secret: credentials.client_secret + }, + listeners: { + create: function (self, element) { + var sh, i, + contDivergent = 0, + contConvergent = 0; + //Updating the background color for connections + jQuery(".pmui-intersection > div > div").css("background-color", "black"); + + if (element.type == "Connection") { + ///////////****************Changing the gatDirection*******************////////////////// + if (element.relatedObject.srcPort.parent.gat_type === "PARALLEL" || + element.relatedObject.srcPort.parent.gat_type === "INCLUSIVE" || + element.relatedObject.destPort.parent.gat_type === "PARALLEL" || + element.relatedObject.destPort.parent.gat_type === "INCLUSIVE") { + if (element.relatedObject.srcPort.parent.gat_type !== undefined) { + sh = element.relatedObject.srcPort.parent; + } else { + sh = element.relatedObject.destPort.parent; + } + + if (sh.gat_direction === "DIVERGING") { + for (i = 0; i < sh.ports.asArray().length; i += 1) { + if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnActivity") { + contDivergent += 1; + } + if (contDivergent > 1) { + sh.gat_direction = "CONVERGING"; + i = sh.ports.asArray().length; + } + } + } + if (sh.gat_direction === "CONVERGING") { + for (i = 0; i < sh.ports.asArray().length; i += 1) { + if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnGateway") { + contConvergent += 1; + } + if (contConvergent > 1) { + sh.gat_direction = "DIVERGING"; + i = sh.ports.asArray().length; + } + } + } + + } + } + setSaveButtonDisabled(self); + }, + update: function (self) { + //Updating the background color for connections + jQuery(".pmui-intersection > div > div").css("background-color", "black"); + setSaveButtonDisabled(self); + }, + remove: function (self) { + setSaveButtonDisabled(self); + }, + success: function (self, xhr, response) { + var message; + self.dirty = false; + setSaveButtonDisabled(self); + self.dirtyElements[0] = { + laneset: {}, + lanes: {}, + activities: {}, + events: {}, + gateways: {}, + flows: {}, + artifacts: {}, + lines: {}, + data: {}, + participants: {}, + startMessageEvent: {}, + startTimerEvent: {} + }; + self.updateIdentifiers(response); + PMDesigner.connectValidator.bpmnValidator(); + //if (PMDesigner.currentMsgFlash) { + PMDesigner.msgFlash('The process was saved successfully.'.translate(), document.body, 'success', 3000, 5); + PMDesigner.RoutingRuleSetOrder(); + //} + + }, + failure: function (self, xhr, response) { + var message; + if (response.error.code === 401) { + /*message = new PMUI.ui.FlashMessage({ + message: "It was not possible to establish a connection with the server".translate(), + duration: 5000, + appendTo: document.body, + severity: 'info' + }); + message.show();*/ + //self.remoteProxy.setUrl("/"+WORKSPACE+"/oauth2/token"); + //self.setRefreshToken(); + //self.remoteProxy.setUrl("/api/1.0/"+WORKSPACE+"/project/"+prj_uid); + //self.save(); + } else { + PMDesigner.msgFlash('Error saving the process.'.translate(), document.body, 'error', 3000, 5); + self.updateIdentifiers(response); + } + } + } + }); + PMDesigner.project = project; + //create a new restApi + PMDesigner.restApi = RestApi.createRestApi({ + serverUrl: '/rest/v10', + keys: PMDesigner.project.keys + }); + systemRest = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'system/enabled-features', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var result = response.pop(); + ENABLED_FEATURES = result.response; + navbarExportUpdate(); + }, + functionFailure: function (xhr, response) { + ENABLED_FEATURES = []; + } + }).setBaseEndPoint('').executeRestClient(); + PMDesigner.connectValidator = new ConnectValidator(); + for (d = 0; d < PMDesigner.sidebar.length; d += 1) { + PMDesigner.sidebar[d].activate(); + } + + $('.bpmn_shapes_legend').hide(); + project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); + project.load(); + + /*=========================================== + = ProcessMaker module = + ===========================================*/ + + //Renders content controls + PMDesigner.contentControl.show(); + new PMAction({ + selector: ".mafe-menu-eventmessages-create", + label: { + selector: ".mafe-menu-eventmessages-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.eventMessages.create(); + } + }); + + /*----- End of ProcessMaker module ------*/ + + /*======================================== + = Designer buttons = + ========================================*/ + + //Renders navBar Panel + PMDesigner.navbarPanel.show(); + // create Zoom options + PMDesigner.ApplyOptionsZoom(); + //the action to generate a .bpmn file with the export option. + downloadLink = $('.mafe-button-export-bpmn-process'); + downloadLink.click(function (e) { + PMDesigner.moddle.toXML(PMDesigner.businessObject, function (err, xmlStrUpdated) { + + setEncoded(downloadLink, PMDesigner.project.projectName + '.bpmn', xmlStrUpdated); + + // xmlStrUpdated contains new id and the added process + }); + + }); + option = $("
" + "Save as".translate() + "
"); + /** + * Add data tables + */ + $('body').append('
') + $('.validator_header').append('

' + validatorLabel + '

'); + $('.validator_header').append(''); + $('.validator_body').html('
'); + PMDesigner.validTable = $('#validator-table').DataTable({ + paging: false, + scrollY: 100, + searching: false, + "info": false, + scrollCollapse: true, + "columns": [ + { + name: 'numrow', + "title": "#", + width: '5%', + render: function (data, type, row, conf) { + return conf.row + 1; + } + }, + { + name: 'id', + className: 'never' + }, + { + "title": "Type".translate(), + width: '10%', + name: 'severity', + render: function (data, type, row, conf) { + var clasMap = { + Error: 'mafe-icon-error', + Warning: 'mafe-icon-warning' + }; + if (type === 'display') { + return ' ' + data; + } + return data; + } + }, + {name: 'element', "title": "Element".translate(), width: '15%'}, + {name: 'element-type', "title": "Element Type".translate(), width: '15%'}, + {name: 'description', "title": "Description".translate(), width: '45%'} + ] + }); + jQuery('#validator-table tbody').on('click', 'tr', function () { + var id = PMDesigner.validTable.row(this).data()[1], + shape; + if ($(this).hasClass('selected')) { + $(this).removeClass('selected'); + PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); + } + else { + PMDesigner.validTable.$('tr.selected').removeClass('selected'); + $(this).addClass('selected'); + PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); + shape = PMUI.getActiveCanvas().items.find('id', id); + PMUI.getActiveCanvas().addToSelection(shape.relatedObject); + } + }); + PMDesigner.validTable.columns([1]).visible(false); + /********finish datatables********/ + new PMAction({ + selector: ".mafe-validator-close", + tooltip: "Close Validator".translate(), + execute: true, + handler: function () { + $('.bpmn_validator').css('visibility', 'hidden'); + $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); + PMDesigner.validator = false; + } + }); + + menu = $("
"); + menu.append(option); + option.on("mouseout", function (e) { + menu.hide(); + }); + option.on("click", function (e) { + var saveas; + menu.hide(); + PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id); + PMDesigner.project.save(true); + saveas = new SaveAs(); + saveas.open(); + }); + $(".mafe-button-menu").on("click", function (e) { + e.stopPropagation(); + $(".mafe-save-process").append(menu); + menu.show(); + }); + + /*----- End of Designer buttons ------*/ + /*================================================= + = Full screen functionality = + =================================================*/ + if (parent.document.documentElement === document.documentElement) { + elem = document.documentElement; + } else { + elem = parent.document.getElementById("frameMain"); + } + PMDesigner.fullScreen = new FullScreen({ + element: elem, + onReadyScreen: function () { + setTimeout(function () { + PMDesigner.resizeFrame(); + }, 500); + }, + onCancelScreen: function () { + setTimeout(function () { + PMDesigner.resizeFrame(); + }, 500); + } + }); + /*----- End of Full screen functionality ------*/ + + /*============================================= + = Shapes and Controls Box = + =============================================*/ + PMDesigner.cookie = { + name: "PMDesigner", + object: {}, + get: function (cname) { + var name = cname + "=", i, c, + ca = document.cookie.split(';'); + for (i = 0; i < ca.length; i += 1) { + c = ca[i].trim(); + if (c.indexOf(name) == 0) + return c.substring(name.length, c.length); + } + return ""; + }, + remove: function (cname) { + jQuery.each(PMDesigner.cookie.object, function (index, val) { + if (index === cname) { + delete PMDesigner.cookie.object[cname]; + PMDesigner.cookie.refresh(); + } + }); + }, + refresh: function () { + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + }; + PMDesigner.localStorage = { + prefix: "PM_" + WORKSPACE + "_" + prj_uid, + object: {}, + remove: function (cname) { + var obj; + obj = localStorage.getItem(PMDesigner.localStorage.prefix); + obj = (obj === null) ? {} : JSON.parse(obj); + if (obj[cname]) { + delete obj[cname]; + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(obj)); + } + } + }; + if (Modernizr.localstorage) { + var localDesigner = localStorage.getItem(PMDesigner.localStorage.prefix); + localDesigner = (localDesigner === null) ? {} : JSON.parse(localDesigner); + PMDesigner.panelsPosition = localDesigner; + } else { + if (PMDesigner.cookie.get(PMDesigner.cookie.name) !== "") { + var positions, pLeft, pTop, html; + positions = JSON.parse(PMDesigner.cookie.get(PMDesigner.cookie.name)); + PMDesigner.cookie.object = positions; + PMDesigner.panelsPosition = positions; + } + } + if (typeof PMDesigner.panelsPosition === "object") { + var pst = PMDesigner.panelsPosition; + if (pst.navbar) { + pLeft = pst.navbar.x; + pTop = pst.navbar.y; + html = document.getElementsByClassName("navBar")[0]; + } + if (pst.bpmn) { + pLeft = 0; + pTop = 0; + html = document.getElementsByClassName("bpmn_shapes")[0]; + html.style.left = pLeft + "px"; + html.style.top = pTop + "px"; + } + if (pst.controls) { + pLeft = pst.controls.x; + pTop = pst.controls.y; + html = document.getElementsByClassName("content_controls")[0]; + html.style.left = pLeft + "px"; + html.style.top = pTop + "px"; + if (pTop > 503) { + $("#idContent").find(".content_controls").css({'top': '', 'left': ''}); + } + } + } + jQuery(".bpmn_shapes").draggable({ + handle: "div", + start: function () { + }, + drag: function () { + }, + stop: function (event) { + var pLeft, pTop, currentObj; + pLeft = parseInt(event.target.style.left); + pTop = parseInt(event.target.style.top); + bpmn = { + bpmn: { + x: pLeft, + y: pTop + } + }; + if (Modernizr.localstorage) { + currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); + currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); + jQuery.extend(true, currentObj, bpmn); + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); + } else { + jQuery.extend(true, PMDesigner.cookie.object, bpmn); + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + } + }); + jQuery(".content_controls").draggable({ + handle: "div", + start: function () { + }, + drag: function () { + jQuery("html").css("overflow", "hidden"); + }, + stop: function (event) { + jQuery("html").css("overflow", "auto"); + if (jQuery(this).position().top > $(window).height()) { + var x = $(window).height() - 30; + jQuery(this).css({'top': x + 'px'}); + } + var pLeft, pTop, currentObj; + pLeft = parseInt(event.target.style.left); + pTop = parseInt(event.target.style.top); + if (pTop < 90) + pTop = 90; + event.target.style.setProperty("top", pTop.toString() + "px"); + controls = { + controls: { + x: pLeft, + y: pTop + } + }; + if (Modernizr.localstorage) { + currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); + currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); + jQuery.extend(true, currentObj, controls); + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); + } else { + jQuery.extend(true, PMDesigner.cookie.object, controls); + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + } + }); + /*----- End of Shapes and Controls Box ------*/ + + //Resize window + PMDesigner.resizeFrame(); + + /*============================================== + = Autosave functionality = + ==============================================*/ + PMDesigner.project.setSaveInterval(40000); + setInterval(function () { + if (PMDesigner.project.isDirty() && PMDesigner.project.readOnly === false) { + PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); + PMDesigner.msgFlash('Saving Process'.translate(), document.body, 'success', 5000, 5); + PMDesigner.project.save(true); + } + }, PMDesigner.project.saveInterval); + /*----- End of Autosave functionality ------*/ + + //Reviewing functionalities + if (!PMDesigner.supportBrowser("fullscreen")) { + var li = document.getElementsByClassName("mafe-button-fullscreen"); + if (li) { + li[0].parentElement.style.display = "none"; + } + } + jQuery('.mafe-zoom-options').attr('title', 'Zoom'.translate()).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery('.mafe-toolbar-lasso').mouseover(function (e) { + $('.mafe-toolbar-lasso').css('cursor', 'pointer'); + }); + jQuery('.mafe-toolbar-validation').mouseover(function (e) { + $('.mafe-toolbar-validation').css('cursor', 'pointer'); + }); + jQuery('.mafe-toolbar-lasso').click(function (e) { + if (!PMUI.getActiveCanvas().lassoEnabled) { + $('.mafe-toolbar-lasso').css('background-color', 'rgb(207, 207, 207)'); + PMUI.getActiveCanvas().lassoEnabled = true; + } else { + $('.mafe-toolbar-lasso').css('background-color', 'rgb(233, 233, 233)'); + PMUI.getActiveCanvas().lassoEnabled = false; + } + }); + + PMDesigner.helper = new IntroHelper({ + tooltipClass: 'general', + skipLabel: 'Quit'.translate(), + + nextLabel: 'Next →'.translate(), + prevLabel: '← Back'.translate(), + doneLabel: 'Done'.translate(), + steps: [ + { + intro: '
' + }, + { + element: '#idNavBar', + intro: 'The designer bar displays the process name and is used to control the process view (zoom, full screen view), the export, undo/redo and the save button.'.translate() + }, + + { + element: '.bpmn_shapes', + intro: 'Drag and drop the process elements that you want to include in the process design.'.translate() + + '
' + ' Task: Add to include an action in your process.'.translate() + + '
' + ' Gateway: Selects a path or divides the process into multiple paths and joins them together.'.translate() + + '
' + ' Start Event: The process always begins with a start event.'.translate() + + '
' + ' Intermediate Event: Used to define an event that happens in the middle of the process.'.translate() + + '
' + ' End Event: End the execution of the process.'.translate() + + '
' + ' Pool: Place each process in a separate pool.'.translate() + + '
' + ' Lane: Used to divide a process into different sections.'.translate() + }, + { + element: '#div-layout-canvas', + intro: "In the design area you can drop the process elements and order or arrange them to design your process.".translate() + }, + { + element: '.content_controls', + intro: '

' + + 'The process objects are used to add execution features to the current process design.'.translate() + + '
Variables: Define the process data.'.translate() + + '
Dynaforms: Create dynamic forms.'.translate() + + '
Triggers: Create scripts.'.translate() + + '
Output documents: Generate documents with process data.'.translate() + + '
DB connections: Connect to external databases.'.translate() + + '

', + position: 'left' + }, + { + intro: '
' + 'Select an element in the designer to display the quick toolbar with the list of the most used options available for that element.'.translate() + '
' + } + ], + onExit: function () { + var canvas = PMUI.getActiveCanvas(); + if (canvas && canvas.getGridLine() && canvas.getHTML()) { + canvas.getHTML().classList.add("pmui-pmcanvas"); + } + } + }); + + jQuery('.mafe-toolbar-validation').click(function (e) { + if (!PMDesigner.validator) { + $('.mafe-toolbar-validation').css('background-color', 'rgb(207, 207, 207)'); + PMDesigner.validator = true; + } else { + $('.bpmn_validator').css('visibility', 'hidden'); + $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); + PMDesigner.validator = false; + } + }); + if (inArray("jXsSi94bkRUcVZyRStNVExlTXhEclVadGRRcG9xbjNvTWVFQUF3cklKQVBiVT0=", ENABLED_FEATURES)) { + $("#idNavBar").find(".mafe-button-export-process").html( + $("#idNavBar").find(".mafe-button-export-process").text() + " ▼" + ); + } + + function inArray(needle, haystack) { + var i, + length = haystack.length; + for (i = 0; i < length; i += 1) { + if (haystack[i] == needle) return true; + } + return false; + } +}); + +window.onload = function () { + //Reset the scroll positions + window.scrollBy(-window.scrollX, -window.scrollY); + document.onkeydown = function (e) { + if (e.keyCode === 8 && e.target === document.body) { + e.stopPropagation(); + return false; + } + }; +}; +/*================================================== + = Components from the Panels = + ==================================================*/ + +PMDesigner.createHTML = function () { + var minShapes = document.createElement("span"), + minShapesLegend = document.createElement("span"), + refreshShapes = document.createElement("span"), + minControls = document.createElement("span"), + processObjects = document.createElement("span"), + refreshControls = document.createElement("span"), + refreshNavBar = document.createElement("span"); + minShapes.id = "minShapes"; + minShapesLegend.id = "minShapesLegend"; + refreshShapes.id = "resetShapes"; + minControls.id = "minControls"; + refreshControls.id = "resetControls"; + refreshNavBar.id = "resetNavBar"; + minShapes.className = "mafe-shapes-toggle"; + minShapesLegend.className = "mafe-shapes-toggle"; + refreshShapes.className = "mafe-shapes-refresh"; + minControls.className = "mafe-shapes-toggle"; + processObjects.className = "mafe-process-object"; + refreshControls.className = "mafe-shapes-refresh"; + refreshNavBar.className = "mafe-shapes-refresh"; + minShapes.title = "Minimize".translate(); + minShapesLegend.title = "Minimize".translate(); + refreshShapes.title = "reset".translate(); + minControls.title = "Minimize".translate(); + refreshControls.title = "Reset to original position".translate(); + refreshNavBar.title = "reset".translate(); + + jQuery(minShapes).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(minShapesLegend).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshShapes).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(minControls).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshControls).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshNavBar).tooltip({tooltipClass: "mafe-action-tooltip"}); + + refreshControls.style.backgroundPosition = '0px 0px'; + processObjects.textContent = "Process Objects".translate(); + + minShapes.onclick = function () { + var i, + items = jQuery(".bpmn_shapes > ul"); + if (items.length > 0) { + for (i = 0; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + } + + } + } + }; + minShapesLegend.onclick = function () { + var i, + items = jQuery(".bpmn_shapes_legend").children(); + for (i = 1; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + } + } + }; + refreshShapes.onclick = function () { + jQuery(".bpmn_shapes").removeAttr('style'); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("bpmn"); + } else { + PMDesigner.cookie.remove("bpmn"); + } + }; + minControls.onclick = function () { + var i, + title = '', + items = jQuery(".content_controls > ul"); + + if (items.length > 0) { + for (i = 0; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + title = "Maximize"; + $('#minControls').removeClass('mafe-shapes-toggle'); + $('#minControls').addClass('mafe-shapes-plus'); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + title = "Minimize"; + $('#minControls').removeClass('mafe-shapes-plus'); + $('#minControls').addClass('mafe-shapes-toggle'); + + } + } + } + jQuery(minControls).tooltip({content: title.translate()}); + }; + refreshControls.onclick = function () { + jQuery(".content_controls").css({ + left: "auto", + right: "20px", + top: "90px" + }); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("controls"); + } else { + PMDesigner.cookie.remove("controls"); + } + }; + refreshNavBar.onclick = function () { + jQuery(".navBar").removeAttr('style'); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("navbar"); + } else { + PMDesigner.cookie.remove("navbar"); + } + }; + + + jQuery(".bpmn_shapes>div").append(minShapes); + jQuery(".bpmn_shapes>div").append(refreshShapes); + jQuery(".content_controls>div").append(processObjects); + jQuery(".content_controls>div").append(minControls); + jQuery(".content_controls>div").append(refreshControls); + jQuery(".navBar>div").append(refreshNavBar); + jQuery(".bpmn_shapes_legend>div").append(minShapesLegend); + jQuery(".bpmn_shapes, .content_controls").on("contextmenu", function (e) { + e.preventDefault(); + }); + + PMDesigner.applyCanvasOptions(); + +}; + +/*----- End of Components from the Panels ------*/ + +/*===================================================== + = Get information about browser = + =====================================================*/ +PMDesigner.getBrowser = function () { + var match, + ua = navigator.userAgent.toLowerCase(); + if (ua) { + match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[1] || "", + version: match[2] || "0" + }; + } +}; +/*----- End of Get information about browser ------*/ + +PMDesigner.supportBrowser = function (functionality) { + var browser, el, module; + functionality = functionality.toLowerCase(); + switch (functionality) { + case "fullscreen": + browser = PMDesigner.getBrowser(); + if ((browser.browser === "msie") && (parseInt(browser.version, 10) <= 10)) { + try { + module = new ActiveXObject("WScript.Shell"); + } catch (e) { + module = false; + } + } else { + el = document.documentElement; + module = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen; + if (!module) { + module = false; + } + } + break; + case "": + break; + } + return module; +}; + +/*============================================================ + = Leave the current page Functionality = + ============================================================*/ +window.onbeforeunload = function (e) { + var message; + if ((PMDesigner.project.isDirty() + && !PMDesigner.project.readOnly) + || PMDesigner.project.isSave) { + message = "There are unsaved changes, if you leave the editor some changes won't be saved.".translate(); + e = e || window.event; + if (e) { + e.returnValue = message; + } + return message; + } +}; +/*----- End of Leave the current page Functionality ------*/ + +/*===================================================================== + = Validating coordinates for create a new shape = + =====================================================================*/ +PMUI.validCoordinatedToCreate = function (canvas, event, shape) { + var position, p, width, height, createElem = true, panels = [], message; + //navBar panel + position = jQuery(".navBar").offset(); + width = jQuery(".navBar").width(); + height = jQuery(".navBar").height(); + element = { + x1: position.left, + y1: position.top, + x2: position.left + width, + y2: position.top + height + }; + panels.push(element); + //BPMN panel + position = jQuery(".bpmn_shapes").offset(); + width = jQuery(".bpmn_shapes").width(); + height = jQuery(".bpmn_shapes").height(); + element = { + x1: position.left, + y1: position.top, + x2: position.left + width, + y2: position.top + height + }; + if (panels.length > 0) { + for (p = 0; p < panels.length; p += 1) { + if (((event.pageX >= panels[p].x1) && (event.pageX <= panels[p].x2)) + && ((event.pageY >= panels[p].y1) && (event.pageY <= panels[p].y2))) { + PMDesigner.msgFlash('Is not possible create the element in that area'.translate(), document.body, 'info', 3000, 5); + return false; + } + } + } + + return true; +}; +/*----- End of Validating coordinates for create a new shape ------*/ + +PMUI.pageCoordinatesToShapeCoordinates = function (shape, e, xCoord, yCoord, customShape) { + var coordinates, + x = (!xCoord) ? e.pageX : xCoord, + y = (!yCoord) ? e.pageY : yCoord, + orgX = (!xCoord) ? e.pageX : xCoord, + orgY = (!yCoord) ? e.pageY : yCoord, + canvas = shape.getCanvas(); + x += canvas.getLeftScroll() - shape.getAbsoluteX() - canvas.getX(); + y += canvas.getTopScroll() - shape.getAbsoluteY() - canvas.getY(); + coordinates = new PMUI.util.Point(x, y); + return coordinates; +}; + +PMDesigner.msgFlash = function (text, container, severity, duration, zorder) { + var msg; + if (!PMDesigner.currentMsgFlash) { + msg = new PMUI.ui.FlashMessage({ + id: '__msgFlashMessage', + severity: 'success' + }); + } else { + msg = PMDesigner.currentMsgFlash; + } + if (msg.html) + jQuery(msg.html).remove(); + msg.setMessage(text || ""); + msg.setAppendTo(container || document.body); + msg.setSeverity(severity || "success"); + msg.setDuration(duration || 3000); + msg.setZOrder(zorder || 100); + msg.show(); + PMDesigner.currentMsgFlash = msg; +}; + +PMDesigner.msgWinError = function (text) { + var msgError; + if (!PMDesigner.currentWinError) { + msgError = new PMUI.ui.MessageWindow({ + id: 'showMessageWindowFailure', + width: 490, + windowMessageType: 'error', + title: 'Error'.translate(), + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + msgError.close(); + }, + buttonType: "success" + } + ] + }); + } else { + msgError = PMDesigner.currentWinError; + } + msgError.setMessage(text || 'Error'.translate()); + msgError.showFooter(); + msgError.open(); + PMDesigner.currentWinError = msgError; +}; + +PMDesigner.msgWinWarning = function (text) { + var msgWarning; + if (!PMDesigner.currentWinWarning) { + msgWarning = new PMUI.ui.MessageWindow({ + id: 'showMessageWindowWarning', + windowMessageType: 'warning', + width: 490, + title: 'Warning'.translate(), + footerItems: [{ + text: 'Ok'.translate(), + buttonType: "success", handler: function () { + msgWarning.close(); + } + }] + }); + } else { + msgWarning = PMDesigner.currentWinWarning; + } + msgWarning.setMessage(text || 'Warning'.translate()); + msgWarning.showFooter(); + msgWarning.open(); + PMDesigner.currentWinWarning = msgWarning; +}; + +PMDesigner.modeReadOnly = function () { + var restClient; + if (prj_readonly === 'true') { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'cases/' + app_uid + '/tasks', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var viewTaskInformation = new ViewTaskInformation(); + viewTaskInformation.setData(response[0].response); + viewTaskInformation.setShapes(); + viewTaskInformation.showViewLegendsInformation(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + } +}; + +PMDesigner.reloadDataTable = function () { + $('.bpmn_validator').css('visibility', 'visible'); +}; + +/** + * Escape XML characters method. + * There are only five: + * " " + * ' ' + * < < + * > > + * & & + * + * @param {string} label + * @returns {string} + */ +PMDesigner.escapeXMLCharacters = function (label) { + return label + .replace(/&/g, "&") + .replace(/"/g, """) + .replace(/'/g, "'") + .replace(//g, ">"); +}; + +DataDictionary = function () { +}; +DataDictionary.prototype.getColor = function (value) { + switch (value) { + case 'TASK_IN_PROGRESS': + return 'red'; + case 'TASK_COMPLETED': + return 'green'; + case 'TASK_PENDING_NOT_EXECUTED': + return 'silver'; + case 'TASK_PARALLEL': + return 'orange'; + default: + return 'white'; + } +}; +DataDictionary.prototype.getStatus = function (value) { + switch (value) { + case 'TASK_IN_PROGRESS': + return 'Task in Progress'.translate(); + case 'TASK_COMPLETED': + return 'Completed Task'.translate(); + case 'TASK_PENDING_NOT_EXECUTED': + return 'Pending Task / Not Executed'.translate(); + case 'TASK_PARALLEL': + return 'Parallel Task'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasAssignType = function (value) { + switch (value) { + case 'BALANCED': + return 'Balanced'.translate(); + case 'MANUAL': + return 'Manual'.translate(); + case 'REPORT_TO': + return 'Report toO'.translate(); + case 'EVALUATE': + return 'Evaluate'.translate(); + case 'SELF_SERVICE': + return 'self Service'.translate(); + case 'SELF_SERVICE_EVALUATE': + return 'Self Service Evaluate'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasType = function (value) { + switch (value) { + case 'NORMAL': + return 'Normal'.translate(); + case 'SUBPROCESS': + return 'Sub Process'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasDerivation = function (value) { + switch (value) { + case 'NORMAL': + return 'Normal'.translate(); + default: + return value; + } +}; + +ViewTaskInformation = function (settings) { + ViewTaskInformation.prototype.init.call(this, settings); +}; +ViewTaskInformation.prototype.init = function () { + var that = this, + panelButton = new PMUI.core.Panel({ + layout: 'hbox', + items: [ + that.getButton('Information', function () { + that.showInformation(); + }), + that.getButton('Delegations', function () { + that.showDelegations(); + }), + that.getButton('Route', function () { + that.showRoute(); + }) + ] + }); + that.windowAbstract.showFooter(); + that.windowAbstract.addItem(panelButton); + that.windowAbstract.addItem(that.panelvertical); +}; +ViewTaskInformation.prototype.dataDictionary = new DataDictionary(); +ViewTaskInformation.prototype.data = null; +ViewTaskInformation.prototype.shapeData = null; +ViewTaskInformation.prototype.panelvertical = new PMUI.core.Panel({layout: 'vbox', width: 400}); +ViewTaskInformation.prototype.windowAbstract = new PMUI.ui.Window({id: 'windowAbstract', width: 500, height: 350}); +ViewTaskInformation.prototype.setData = function (data) { + this.data = data; +}; +ViewTaskInformation.prototype.setCursor = function (shape) { + shape.getHTML().onmouseover = function () { + this.style.cursor = 'pointer'; + }; + shape.getHTML().onmouseout = function () { + this.style.cursor = ''; + }; +}; +ViewTaskInformation.prototype.setShapes = function () { + var that = this, + shape, + diagrams, + i, + j, + dt = that.data; + for (i = 0; i < dt.length; i += 1) { + diagrams = PMDesigner.project.diagrams.asArray(); + for (j = 0; j < diagrams.length; j += 1) { + shape = diagrams[j].getCustomShapes().find('id', dt[i].tas_uid); + if (typeof shape != "undefined" && shape != null) { + shape.changeColor(that.dataDictionary.getColor(dt[i].status)); + shape.data = dt[i]; + shape.hasClick = function (event) { + that.setShapeData(this.data); + that.showInformation(); + }; + that.setCursor(shape); + } + } + } +}; +ViewTaskInformation.prototype.setShapeData = function (data) { + this.shapeData = data; +}; +ViewTaskInformation.prototype.addRowNewLine = function (label, value) { + var panelhorizontal = new PMUI.core.Panel({ + layout: 'hbox' + }); + panelhorizontal.addItem(new PMUI.ui.TextLabel({text: ''})); + this.panelvertical.addItem(panelhorizontal); + return panelhorizontal; +}; +ViewTaskInformation.prototype.addRow = function (label, value) { + var field1, field2, field3, panelhorizontal; + + field1 = new PMUI.ui.TextLabel({text: label.translate(), proportion: 0.3}); + field2 = new PMUI.ui.TextLabel({text: ':', proportion: 0.1}); + field3 = new PMUI.ui.TextLabel({text: value ? value + '' : '', proportion: 0.6}); + + panelhorizontal = new PMUI.core.Panel({ + layout: 'hbox' + }); + + panelhorizontal.addItem(field1); + panelhorizontal.addItem(field2); + panelhorizontal.addItem(field3); + this.panelvertical.addItem(panelhorizontal); + return panelhorizontal; +}; +ViewTaskInformation.prototype.clearRows = function () { + this.panelvertical.clearItems(); +}; +ViewTaskInformation.prototype.showInformation = function () { + var that = this; + that.clearRows(); + that.addRow('Title'.translate(), that.shapeData.tas_title); + that.addRow('Description'.translate(), that.shapeData.tas_description); + that.addRow('Status'.translate(), that.dataDictionary.getStatus(that.shapeData.status)); + that.addRow('Type'.translate(), that.dataDictionary.getTasType(that.shapeData.tas_type)); + that.addRow('Assign type'.translate(), that.dataDictionary.getTasAssignType(that.shapeData.tas_assign_type)); + that.addRow('Routing'.translate(), that.dataDictionary.getTasDerivation(that.shapeData.tas_derivation)); + that.addRow('Start'.translate(), that.shapeData.tas_start); + that.addRowNewLine(); + that.addRow('Last User Name'.translate(), that.shapeData.usr_username); + that.addRow('Last User'.translate(), that.shapeData.usr_firstname + ' ' + that.shapeData.usr_lastname); + + that.windowAbstract.setTitle('Information'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.showDelegations = function () { + var that = this, i, dt; + that.clearRows(); + dt = that.shapeData.delegations; + for (i = 0; i < dt.length; i += 1) { + that.addRow('User', dt[i].usr_username); + that.addRow('User Name', dt[i].usr_firstname + ' ' + dt[i].usr_lastname); + that.addRow('Duration', dt[i].del_duration); + that.addRow('Finish Date', dt[i].del_finish_date); + that.addRow('Index', dt[i].del_index); + that.addRow('Init Date', dt[i].del_init_date); + that.addRow('Task Due Date', dt[i].del_task_due_date); + that.addRowNewLine(); + } + + that.windowAbstract.setTitle('Delegations'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.showRoute = function () { + var that = this, i, dt; + that.clearRows(); + that.addRow('Type', that.shapeData.route.type); + that.addRowNewLine(); + dt = that.shapeData.route.to; + for (i = 0; i < dt.length; i += 1) { + that.addRow('Condition', dt[i].rou_condition); + that.addRow('Number', dt[i].rou_number); + that.addRowNewLine(); + } + + that.windowAbstract.setTitle('Route'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.getButton = function (text, fn) { + return new PMUI.ui.Button({ + text: text.translate(), + width: 180, + height: 50, + style: { + cssProperties: { + marginRight: 10, + marginBottom: 10, + backgroundColor: '#474747', + borderRadius: 5, + padding: 5 + }, + cssClasses: ['mafeButton'] + }, + handler: fn + }); +}; +ViewTaskInformation.prototype.showViewLegendsInformation = function () { + var i, dt, legend, legendIcon, legendText; + $('.bpmn_shapes_legend').show(); + + i; + dt = [ + ['red', 'Task in Progress'.translate()], + ['green', 'Completed Task'.translate()], + ['silver', 'Pending Task / Not Executed'.translate()], + ['orange', 'Parallel Task'.translate()] + ]; + for (i = 0; i < dt.length; i += 1) { + legend = $("
"); + legendIcon = $("
").addClass("mafe-activity-task-" + dt[i][0]).addClass("icon-legend"); + legendText = $("
" + dt[i][1] + "
").addClass("text-legend"); + legend.append(legendIcon).append(legendText); + jQuery(".bpmn_shapes_legend").append(legend); + } + + jQuery(".bpmn_shapes_legend").draggable({ + handle: "div", + start: function () { + }, + drag: function (event, e, u) { + }, + stop: function (event) { + + } + }); +}; + +(function () { + /** + * @class PMUI.menu.ContextMenu + * Handles the context menu of designer + * contains all the menus for elements + * + * @extend PMUI.util.Factory + * @constructor + * This method creates a new instance of this object + * @param {Object} [settings] Constructor settings + */ + "use strict"; + var ContextMenu = function (settings) { + this.factory = null; + ContextMenu.prototype.init.call(this, settings); + }; + + ContextMenu.prototype.type = 'ContextMenu'; + + ContextMenu.prototype.family = 'ContextMenu'; + + /** + * Initializes the object. + * @param {Object} settings A JSON object with the config options. + * @private + */ + ContextMenu.prototype.init = function (settings) { + jQuery.extend(true, defaults, settings); + this.factory = new PMUI.util.Factory(defaults.factory); + }; + + /** + * Register a new context menu object into a product. + * + * Usage example: + * @example + * //Remember, this is an abstract class so it shouldn't be instantiate, + * //anyway we are instantiating it just for this example + * var additionalMenu = { + * id: "additionalMenu", + * text: "New Menu", + * onClick: function () { + * PMDesigner.msgWinWarning('This is a new Menu'); + * } + * }; + * // Assuming that you're using PMDesigner.contextMenuFactory as the default contextMenuFactory + * PMDesigner.contextMenuFactory.registerMenu("CANVAS", additionalMenu); + * + * @param {String} productName Name of the shape or product in factory. + * @param {Object} menu Object with menu values and actions. + * @private + */ + ContextMenu.prototype.registerMenu = function (productName, menu) { + if (typeof this.factory.products[productName] === 'undefined') { + console.log('Context Menu Warning: Cannot add Menu into: ' + productName + '. Please, review name.'); + } else { + if (this.factory.products[productName].items instanceof Array) { + this.factory.products[productName].items.push(menu); + } + } + }; + + /** + * Removes context menu object from product. + * + * Usage example: + * @example + * // Assuming that you're using PMDesigner.contextMenuFactory as the default contextMenuFactory + * // this example removes Canvas gridLines option + * PMDesigner.contextMenuFactory.removeMenu("CANVAS", "id", "menuGridLines"); + * + * @param {String} product Name of the shape or product in factory. + * @param {String} id Key to look through product. + * @param {String} value Name of the elementValue. + * @private + */ + ContextMenu.prototype.removeMenu = function (product, id, value) { + if (typeof this.factory.products[product] !== 'undefined') { + this.factory.products[product].items = _.reject(this.factory.products[product].items, function (menuValue) { + return menuValue[id] === value; + }); + } else { + console.log('Context Menu Warning: Cannot find ' + product + ' Menu. Please, review name.'); + } + }; + + /** + * Returns specific product. + * @param {String} type Name of product. + * @private + */ + ContextMenu.prototype.getProduct = function (type) { + return this.factory.products[type]; + }; + + var menuMessages = { + 'START': { + 'TIMER': 'Please configure cron to create cases.'.translate(), + 'CONDITIONAL': 'Please configure cron to create cases in base to a condition.'.translate(), + 'SIGNALCATCH': 'Please configure cron to create cases in base to a signal.'.translate() + }, + 'INTERMEDIATE': { + 'CATCH': { + 'TIMER': 'Please configure cron to wait for time event.'.translate(), + 'CONDITIONAL': 'Please configure cron to wait for time condition.'.translate(), + 'SIGNALCATCH': 'Please configure script to wait for a signal.'.translate() + }, + 'THROW': { + 'SIGNALTHROW': 'Please configure a script to send a signal.'.translate() + } + }, + 'END': { + 'ERRORTHROW': 'Please configure script to end with error status.'.translate(), + 'SIGNALTHROW': 'Please configure script to send a signal.'.translate(), + 'TERMINATETHROW': 'Please configure script to terminate case.'.translate() + } + }, + menu = {}, + rootMenu, + elementActivite, + typeMenu = { + text: "Gateway Type".translate(), + icon: "mafe-menu-properties-action", + id: "gatewaytype", + items: [ + { + id: "gatewayexclusive", + text: "Exclusive (XOR) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('EXCLUSIVE'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "gatewayparallel", + text: "Parallel (AND) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('PARALLEL'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "gatewayinclusive", + text: "Inclusive (OR) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('INCLUSIVE'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + endMarker = { + text: "End Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "result", + items: [ + { + id: "endempty", + text: "Empty".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMPTY', 'Empty'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endemail", + text: "Email Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMAIL', 'Email Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endmessagethrow", + text: "Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGETHROW', 'Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "enderrorthrow", + text: "Error".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('ERRORTHROW', 'Error'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endsignalthrow", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALTHROW', 'Signal'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endterminatethrow", + text: "Terminate".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TERMINATETHROW', 'Terminate'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + intermediateCatchMarker = { + text: "Intermediate Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "trigger", + items: [ + { + id: "intermediatemessagecatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatetimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediateconditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatesignalcatch", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + boundaryCatchMarker = { + text: "Boundary Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "eventType", + items: [ + { + id: "messageCatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + } + }, + { + id: "boundaryTimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + } + }, + { + id: "BoudaryConditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + } + }, + { + id: "BoudarySignal", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + } + }, + { + id: "BoudaryError", + text: "Error".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('ERRORCATCH', 'Error'); + } + } + ] + }, + intermediateThrowMarker = { + text: "Intermediate Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "result", + items: [ + { + id: "intermediateemail", + text: "Email Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMAIL', 'Email Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatemessagethrow", + text: "Send Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGETHROW', 'Send Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatesignalthrow", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALTHROW', 'Signal'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + startCatchMarker = { + text: "Start Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "trigger", + items: [ + { + id: "startempty", + text: "Empty".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMPTY', 'Empty'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startmessagecatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "starttimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startconditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startsignalcatch", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + } + ] + }, + canvas = { + id: "menuCanvas", + width: 150, + items: [ + { + id: "menuEditProcess", + text: "Edit Process".translate(), + onClick: function (menuOption) { + PMDesigner.propertiesProcess(); + } + }, + { + id: "menuGridLines", + text: "Enable Grid Lines".translate(), + onClick: function () { + var canvas = PMUI.getActiveCanvas(); + if (canvas.toogleGridLine()) { + this.setText("Disable Grid Lines".translate()); + } else { + this.setText("Enable Grid Lines".translate()); + } + } + } + ], + onShow: function (menu) { + var canvas = PMUI.getActiveCanvas(); + if (canvas.currentConnection) { + canvas.currentConnection.hidePortsAndHandlers(); + } + if (canvas.isGridLine) { + menu.items.find('id', 'menuGridLines').setText("Disable Grid Lines".translate()); + } + + } + }, + task = { + id: "menuTask", + items: [ + { + id: "taskType", + text: "Task Type".translate(), + items: [ + { + id: "empty", + text: "Empty Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "sendtask", + text: "Send Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "receivetask", + text: "Receive Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "usertask", + text: "User Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "servicetask", + text: "Service Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "scripttask", + text: "Script Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "manualtask", + text: "Manual Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "businessrule", + text: "Business Rule Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + } + ] + }, + { + id: "loopType", + text: "Marker Type".translate(), + items: [ + { + id: "empty", + text: "None".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "loop", + text: "Loop".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "parallel", + text: "Parallel".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "sequential", + text: "Sequential".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + } + ] + }, + { + id: "menuTaskSteps", + text: "Steps".translate(), + icon: "mafe-menu-task-steps", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.act_name = menuOption.getMenuTargetElement().act_name; + PMDesigner.act_uid = menuOption.getMenuTargetElement().act_uid; + PMDesigner.stepsTask = new stepsTask(); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.act_name = menuOption.getMenuTargetElement().act_name; + PMDesigner.act_uid = menuOption.getMenuTargetElement().act_uid; + PMDesigner.stepsTask = new stepsTask(); + } + } + }, + { + id: "menuTaskAssignedRules", + text: "Assignment Rules".translate(), + icon: "mafe-menu-users-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.assigmentRules(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.assigmentRules(menuOption.getMenuTargetElement()); + } + } + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuTaskProperties", + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.activityProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.activityProperties(menuOption.getMenuTargetElement()); + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection + .hidePortsAndHandlers(); + } + + if (targetElement.act_task_type == "SCRIPTTASK") { + menu.getItems()[1].setVisible(false); + menu.getItems()[2].setVisible(false); + menu.getItems()[3].setVisible(false); + } else { + menu.getItems()[1].setVisible(true); + menu.getItems()[2].setVisible(true); + menu.getItems()[3].setVisible(true); + } + + if (targetElement.act_task_type == "MANUALTASK" || targetElement.act_task_type == "USERTASK" || targetElement.act_task_type == "EMPTY") { + menu.getItems()[1].getItems()[2].setVisible(true); + } else { + menu.getItems()[1].getItems()[2].setVisible(false); + } + } + }, + subProcess = { + id: "menuSubProcess", + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().label.canvas + .hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete Routing Rule".translate(), + icon: "mafe-menu-delete-rules-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.RoutingRuleDeleteAllFlow(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.RoutingRuleDeleteAllFlow(menuOption.getMenuTargetElement()); + } + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuSubProperties", + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.propertiesSubProcess(menuOption + .getMenuTargetElement(menuOption.getMenuTargetElement())); + + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.propertiesSubProcess(menuOption + .getMenuTargetElement(menuOption.getMenuTargetElement())); + + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection + .hidePortsAndHandlers(); + } + } + }, + start = { + id: 'menuStart', + items: [ + startCatchMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuStartWebEntry", + text: "Web Entry".translate(), + icon: "mafe-menu-start-message-view", + //visible: false, + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"), webEntry; + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + var webEntry; + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + webEntry = new WebEntry(menuOption.getMenuTargetElement()); + webEntry.render(); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + webEntry = new WebEntry(menuOption.getMenuTargetElement()); + webEntry.render(); + } + } + }, + { + id: "menuStartProperties", + text: "Properties".translate(), + icon: "mafe-menu-start-message-view", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "TIMER": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(), + shape, + propertyMap = ['MESSAGECATCH', 'TIMER']; + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (targetElement.evn_marker == 'TIMER') { + } + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + if (targetElement.evn_marker === 'MESSAGECATCH') { + var dt = menu.getItems(); + for (var i = 0; i < dt.length; i += 1) { + if (dt[i].id === 'idReceiveMessage') { + dt[i].setVisible(true); + } + } + } + //disabled weebentry for others pmEvent no support + if (targetElement.getPorts().asArray().length) { + shape = targetElement.getPorts().getFirst().getConnection().getDestPort().parent; + if (shape && (shape instanceof PMActivity) && targetElement.evn_marker === "EMPTY") { + menu.items.find('id', 'menuStartWebEntry').enable(); + } else if (shape && (shape instanceof PMEvent) && shape.evn_marker === "EMAIL" + && targetElement.evn_marker === "EMPTY") { + menu.items.find('id', 'menuStartWebEntry').enable(); + } else { + menu.items.find('id', 'menuStartWebEntry').disable(); + } + } else { + menu.items.find('id', 'menuStartWebEntry').disable(); + } + + //Enable && Disabled - Properties + if (targetElement.evn_type === "START" && propertyMap.indexOf(targetElement.evn_marker) >= 0) { + menu.items.find('id', 'menuStartProperties').enable(); + } else { + menu.items.find('id', 'menuStartProperties').disable(); + } + }, + onHide: function (menu) { + var dt = menu.getItems(), i; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].id === 'idReceiveMessage') { + dt[i].setVisible(false); + } + } + } + }, + end = { + id: 'menuEnd', + items: [ + endMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuEndProperties", + text: "Properties".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "EMAIL": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + } + } + ], + onShow: function (menu) { + var propertyMap = ['MESSAGETHROW', 'EMAIL'], + targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + + + //Enable && Disabled - Properties + if (targetElement.evn_type === "END" && propertyMap.indexOf(targetElement.evn_marker) >= 0) { + menu.items.find('id', 'menuEndProperties').enable(); + } else { + menu.items.find('id', 'menuEndProperties').disable(); + } + } + }, + selection = { + id: 'menuSelection', + items: [ + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action" + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action" + } + ] + }, + evaluation = { + id: 'menuEvaluation', + items: [ + + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + alert("Working on this feature..."); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + alert("Working on this feature..."); + } + } + ] + }, + parallel = { + id: 'menuParallel', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + listeners: {}, + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + } + }, + exclusive = { + id: 'menuExclusive', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + PMDesigner.RoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + var element = menu.getTargetElement(), propertyOption; + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(element); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + if (menu.items) { + if (element && element.gat_direction) { + propertyOption = menu.items.find("text", "Properties"); + if (propertyOption) { + if (element.gat_direction === 'CONVERGING') { + propertyOption.disable(); + } else { + propertyOption.enable(); + + } + } + } + } + + } + }, + inclusive = { + id: 'menuInclusive', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: 'Properties'.translate(), + icon: 'mafe-menu-properties-action', + onClick: function (menuOption) { + PMDesigner.RoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + var element = menu.getTargetElement(), propertyOption; + PMUI.getActiveCanvas().addToSelection(element); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + if (menu.items) { + if (element && element.gat_direction) { + propertyOption = menu.items.find("text", "Properties"); + if (propertyOption) { + if (element.gat_direction === 'CONVERGING') { + propertyOption.disable(); + } else { + propertyOption.enable(); + + } + } + } + } + } + }, + complex = { + id: 'menuComplex', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + PMDesigner.complexRoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + group = { + id: 'menuLine', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + dataObject = { + id: 'menuDataObject', + items: [ + { + id: "dataType", + text: "Data Type".translate(), + items: [ + { + id: "dataobject", + text: "Data Empty".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAOBJECT'); + } + }, + { + id: "datainput", + text: "Data Input".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAINPUT'); + } + }, + { + id: "dataoutput", + text: "Data Output".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAOUTPUT'); + } + } + ] + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + dataStore = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + textAnnotation = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + intermediate = { + id: 'intermediate', + items: [ + intermediateCatchMarker, + intermediateThrowMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "intermediateProperties", + text: "Properties".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "EMAIL": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + } + break; + case "TIMER": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_behavior][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_behavior][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(), + propertyEnabled = ['MESSAGECATCH', 'MESSAGETHROW', 'EMAIL', 'TIMER']; + + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + if (targetElement.evn_behavior === 'CATCH') { + targetElement.menu.getItems()[0].setVisible(true); + targetElement.menu.getItems()[1].setVisible(false); + } else { + targetElement.menu.getItems()[0].setVisible(false); + targetElement.menu.getItems()[1].setVisible(true); + } + + //Enable && Disabled - Properties + if (propertyEnabled.indexOf(targetElement.evn_marker) >= 0) { + + menu.items.find('id', 'intermediateProperties').enable(); + } else { + menu.items.find('id', 'intermediateProperties').disable(); + } + } + }, + boundary = { + id: 'menuDataObject', + items: [ + boundaryCatchMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + } + }, + participant = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }; + var defaults = { + factory: { + products: { + 'CANVAS': canvas, + 'TASK': task, + 'SUB_PROCESS': subProcess, + 'START': start, + 'END': end, + 'SELECTION': selection, + 'EVALUATION': evaluation, + 'PARALLEL': parallel, + 'EXCLUSIVE': exclusive, + 'EVENTBASED': exclusive, + 'EXCLUSIVEEVENTBASED': exclusive, + 'PARALLELEVENTBASED': exclusive, + 'INCLUSIVE': inclusive, + 'COMPLEX': complex, + 'VERTICAL_LINE': group, + 'HORIZONTAL_LINE': group, + 'GROUP': group, + 'LANE': participant, + 'DATAOBJECT': dataObject, + 'DATASTORE': dataStore, + 'TEXT_ANNOTATION': textAnnotation, + 'V_LABEL': textAnnotation, + 'H_LABEL': textAnnotation, + 'INTERMEDIATE': intermediate, + 'BOUNDARY': boundary, + 'PARTICIPANT': participant, + 'POOL': participant + }, + + defaultProduct: 'START' + } + }; + + PMDesigner.contextMenuFactory = new ContextMenu(defaults.factory); + PMDesigner.getMenuFactory = function (type) { + if (prj_readonly === 'true') { + return {}; + } + return PMDesigner.contextMenuFactory.getProduct(type); + }; + /** + * Change task type marker + * @param menuOption + */ + function handlerMarkerType(menuOption) { + var result = true, + tempType = menuOption.getMenuTargetElement().getTaskType(); + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().switchTaskType(menuOption.id.toUpperCase()); + + //validate if act loop type is parallel + if (menuOption.getMenuTargetElement().act_loop_type === "PARALLEL") { + handlerMarkerLoopType(menuOption, tempType) + } + + //to enable save button + PMDesigner.project.updateElement([]); + + } + + /** + * Change marker loop type + * @param menuOption + * @param type + * @returns {boolean} + */ + function handlerMarkerLoopType(menuOption, type) { + var message_window, + loopType = menuOption.id.toUpperCase(), + taskType = menuOption.getMenuTargetElement().act_task_type; + if (typeof type !== 'undefined' && type !== null) { + taskType = type; + } + + if (menuOption.getMenuTargetElement().act_loop_type === "PARALLEL") { + + message_window = new PMUI.ui.MessageWindow({ + id: "handlerMarkerType", + width: 490, + title: 'Parallel Marker Type'.translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: "The configuring of multiple instances will be lost".translate(), + footerItems: [ + { + text: 'Cancel'.translate(), + handler: function () { + menuOption.getMenuTargetElement().switchLoopType('PARALLEL'); + menuOption.getMenuTargetElement().switchTaskType(taskType); + message_window.close(); + return false; + }, + buttonType: "error" + }, + { + text: 'Continue'.translate(), + handler: function () { + try { + if (loopType == "loop" || loopType == "sequential") { + menuOption.getMenuTargetElement().switchLoopType(loopType.toUpperCase()); + } else { + menuOption.getMenuTargetElement().switchLoopType('EMPTY'); + } + PMDesigner.project.updateElement([]); + } catch (e) { + console.error("loop marker error", e.message); + } + message_window.close(); + return true; + }, + buttonType: "success" + } + + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + menuOption.getMenuTargetElement().switchLoopType(loopType.toUpperCase()); + PMDesigner.project.updateElement([]); + return true; + } + } + +}()); + +(function () { + PMDesigner.shapeFactory = function (type, options) { + var customshape = null, + menuShape, + defaultOptions = null, + canvasName, + name, + id, + classEvent = "start", + pmCanvas = this.canvas, + corona = PMDesigner.defaultCrown, + wildcard; + + canvasName = new IncrementNameCanvas(pmCanvas); + name = canvasName.get(type); + + if (typeof options === 'undefined') { + options = {}; + if (type === 'START_MESSAGE') { + type = 'START'; + classEvent = "message"; + options.evn_marker = 'MESSAGECATCH'; + } + if (type === 'START_TIMER') { + type = 'START'; + classEvent = "timer"; + options.evn_marker = 'TIMER'; + } + + if (type === 'END_MESSAGE') { + type = 'END'; + classEvent = "message"; + options.evn_marker = 'MESSAGETHROW'; + } + if (type === 'END_EMAIL') { + type = 'END'; + classEvent = "email"; + options.evn_marker = 'EMAIL'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_SENDMESSAGE') { + type = 'INTERMEDIATE'; + classEvent = "sendmessage"; + options.evn_marker = 'MESSAGETHROW'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_RECEIVEMESSAGE') { + type = 'INTERMEDIATE'; + classEvent = "receivemessage"; + options.evn_marker = 'MESSAGECATCH'; + options.evn_behavior = 'CATCH'; + } + if (type === 'INTERMEDIATE_EMAIL') { + type = 'INTERMEDIATE'; + classEvent = "email"; + options.evn_marker = 'EMAIL'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_TIMER') { + type = 'INTERMEDIATE'; + classEvent = "timer"; + options.evn_marker = 'TIMER'; + } + if (type === 'BOUNDARY_EVENT') { + type = 'BOUNDARY'; + classEvent = "receivemessage"; + options.evn_marker = 'EMPTY'; + options.evn_behavior = 'CATCH'; + } + + switch (type) { + case 'COMPLEX': + case 'PARALLEL': + case 'EXCLUSIVE': + case 'EVENTBASED': + case 'EXCLUSIVEEVENTBASED': + case 'PARALLELEVENTBASED': + case 'INCLUSIVE': + options.gat_type = type; + break; + } + } + if (type === 'DATAOBJECT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'dataobject'; + } + if (type === 'DATAINPUT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'datainput'; + } + if (type === 'DATAOUTPUT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'dataoutput'; + } + + wildcard = [ + { + name: 'wildcard'.translate(), + className: 'mafe-wildcard', + onClick: null, + column: 2 + } + ]; + + switch (type) { + case 'TASK': + defaultOptions = { + canvas: pmCanvas, + width: 150, + height: 75, + act_type: 'TASK', + act_name: name, + act_task_type: 'EMPTY', + act_loop_type: 'EMPTY', + minHeight: 30, + minWidth: 150, + maxHeight: 50, + maxWidth: 170, + container: "activity", + labels: [ + { + message: name, + width: 0, + height: 0, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false + } + ], + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [ + 'mafe-activity-task' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + + ], + connectAtMiddlePoints: true, + resizeBehavior: 'activityResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmactivitydrop", + selectors: [ + "#BOUNDARY_EVENT", + ".mafe-event-boundary", + ".dragConnectHandler" + ] + }, + markers: [ + { + markerType: 'USERTASK', + x: 10, + y: 10, + position: 0, + markerZoomClasses: [] + }, + { + markerType: 'EMPTY', + x: 10, + y: 10, + position: 4, + markerZoomClasses: [] + } + ], + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ], + markerZoomClassesWarning: [ + "mafe-style-warning-marker-7", + "mafe-style-warning-marker-10", + "mafe-style-warning-marker-14", + "mafe-style-warning-marker-17", + "mafe-style-warning-marker-21" + ] + } + } + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateMarkerLayerClasses(defaultOptions); + defaultOptions.markers[1] + .markerZoomClasses = PMDesigner.updateLoopLayerClasses(defaultOptions); + customshape = new PMActivity(defaultOptions); + break; + case 'SUB_PROCESS': + defaultOptions = { + canvas: pmCanvas, + width: 150, + height: 75, + act_type: 'SUB_PROCESS', + act_loop_type: 'EMPTY', + act_name: name, + act_task_type: 'COLLAPSED', + minHeight: 30, + minWidth: 150, + maxHeight: 50, + maxWidth: 170, + container: "activity", + labels: [ + { + message: name, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false + } + ], + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [ + 'mafe-activity-subprocess' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + + ], + connectAtMiddlePoints: true, + resizeBehavior: 'activityResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmactivitydrop", + selectors: [ + "#BOUNDARY_EVENT", + ".mafe-event-boundary", + ".dragConnectHandler" + ] + }, + markers: [ + { + markerType: 'COLLAPSED', + x: 10, + y: 10, + position: 4, + markerZoomClasses: [ + "mafe-collapsed-marker-10", + "mafe-collapsed-marker-15", + "mafe-collapsed-marker-21", + "mafe-collapsed-marker-26", + "mafe-collapsed-marker-31" + ] + } + ], + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateMarkerLayerClasses(defaultOptions); + customshape = new PMActivity(defaultOptions); + break; + case 'START': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'START', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'catch', + evn_message: 'LEAD', + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-start'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-start-empty-16', + 'mafe-event-start-empty-24', + 'mafe-event-start-empty-33', + 'mafe-event-start-empty-41', + 'mafe-event-start-empty-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + case 'INTERMEDIATE': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'INTERMEDIATE', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'CATCH', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-intermediate'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-intermediate-16', + 'mafe-event-intermediate-24', + 'mafe-event-intermediate-33', + 'mafe-event-intermediate-41', + 'mafe-event-intermediate-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + case 'BOUNDARY': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'BOUNDARY', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'CATCH', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + style: { + cssClasses: ['mafe-event-boundary'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-intermediate-16', + 'mafe-event-intermediate-24', + 'mafe-event-intermediate-33', + 'mafe-event-intermediate-41', + 'mafe-event-intermediate-49' + ] + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + drag: 'nodrag' + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + + case 'END': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'END', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'throw', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-end'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-end-empty-16', + 'mafe-event-end-empty-24', + 'mafe-event-end-empty-33', + 'mafe-event-end-empty-41', + 'mafe-event-end-empty-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + + case 'COMPLEX': + case 'PARALLEL': + case 'EXCLUSIVE': + case 'EVENTBASED': + case 'EXCLUSIVEEVENTBASED': + case 'PARALLELEVENTBASED': + case 'INCLUSIVE': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + canvas: pmCanvas, + width: 41, + height: 41, + gat_type: 'EXCLUSIVE', + gat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-gateway-exclusive-20', + 'mafe-gateway-exclusive-30', + 'mafe-gateway-exclusive-41', + 'mafe-gateway-exclusive-51', + 'mafe-gateway-exclusive-61' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateGatewayLayerClasses(defaultOptions); + customshape = new PMGateway(defaultOptions); + break; + case 'GROUP': + defaultOptions = { + art_name: name, + art_type: 'GROUP', + canvas: pmCanvas, + width: 200, + height: 100, + style: { + cssClasses: ['mafe-artifact-group'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "background-layer", + priority: 1, + visible: true, + style: { + cssClasses: [ + 'mafe-artifact-group' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'annotationResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + } + }, + labels: [ + { + message: "", + width: 0, + height: 0, + position: { + location: 'top', + diffX: 2, + diffY: 0 + }, + attachEvents: false, + updateParent: true, + style: { + cssClasses: [ + 'mafe-label-annotation' + ] + } + } + ], + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMArtifact(defaultOptions); + break; + case 'TEXT_ANNOTATION': + defaultOptions = { + art_name: name, + art_type: 'TEXT_ANNOTATION', + canvas: pmCanvas, + width: 100, + height: 30, + style: { + cssClasses: ['mafe-artifact-annotation'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "background-layer", + priority: 1, + visible: true, + style: { + cssClasses: [ + 'mafe-artifact-annotation' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'annotationResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + } + }, + labels: [ + { + message: name, + width: 0, + height: 0, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false, + updateParent: true + } + ], + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMArtifact(defaultOptions); + break; + + case 'DATAOBJECT': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + canvas: pmCanvas, + width: 33, + height: 41, + dat_type: 'DATAOBJECT', + dat_object_type: "dataobject", + dat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-dataobject-50', + 'mafe-dataobject-75', + 'mafe-dataobject-100', + 'mafe-dataobject-125', + 'mafe-dataobject-150' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + markers: [ + { + markerType: 'USERTASK', + x: 10, + y: 10, + position: 0 + } + ], + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateDataMarkerLayerClasses(defaultOptions); + customshape = new PMData(defaultOptions); + break; + + case 'DATASTORE': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + canvas: pmCanvas, + width: 41, + height: 41, + dat_type: 'DATASTORE', + dat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-datastore-20', + 'mafe-datastore-30', + 'mafe-datastore-41', + 'mafe-datastore-51', + 'mafe-datastore-61' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMData(defaultOptions); + break; + case 'PARTICIPANT': + defaultOptions = { + width: 500, + height: 130, + "canvas": this, + "connectAtMiddlePoints": false, + topLeft: true, + connectionType: 'dotted', + resizeBehavior: "participantResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + "style": { + cssClasses: ["mafe-pool"] + + }, + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + }, + attachEvents: false + } + ], + par_name: name, + corona: corona, + focusLabel: true + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMParticipant(defaultOptions); + break; + case 'POOL': + if (options.lns_name) { + name = options.lns_name; + } else if (options.par_name) { + name = options.par_name; + } + defaultOptions = { + width: 700, + height: 200, + "canvas": pmCanvas, + "connectAtMiddlePoints": false, + topLeft: false, + connectionType: 'dotted', + resizeBehavior: "poolResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmcontainer", + selectors: [ + "#TASK", + "#SUB_PROCESS", + "#START", + "#START_MESSAGE", + "#START_TIMER", + "#END", + "#END_MESSAGE", + "#END_EMAIL", + "#INTERMEDIATE_SENDMESSAGE", + "#INTERMEDIATE_RECEIVEMESSAGE", + "#INTERMEDIATE_EMAIL", + "#INTERMEDIATE_TIMER", + "#EXCLUSIVE", + "#PARALLEL", + "#INCLUSIVE", + "#DATAOBJECT", + "#DATASTORE", + "#TEXT_ANNOTATION", + "#LANE", + "#GROUP", + ".mafe-event-start", + ".mafe-event-intermediate", + ".mafe-event-end", + ".pmui-pmactivity", + ".pmui-pmgateway", + ".pmui-pmdata", + ".mafe-artifact-annotation", + ".mafe-artifact-group", + ".port" + ] + }, + container: "pool", + "style": { + cssClasses: ["mafe-pool"] + + }, + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + }, + attachEvents: false + } + ], + lns_name: name, + focusLabel: true, + corona: corona + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMPool(defaultOptions); + break; + case 'LANE': + defaultOptions = { + width: 500, + height: 200, + "canvas": pmCanvas, + "connectAtMiddlePoints": false, + topLeft: true, + connectionType: 'dotted', + resizeBehavior: "laneResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmcontainer", + selectors: [ + "#TASK", + "#SUB_PROCESS", + "#START", + "#START_MESSAGE", + "#START_TIMER", + "#END", + "#END_MESSAGE", + "#END_EMAIL", + "#INTERMEDIATE_SENDMESSAGE", + "#INTERMEDIATE_RECEIVEMESSAGE", + "#INTERMEDIATE_EMAIL", + "#INTERMEDIATE_TIMER", + "#EXCLUSIVE", + "#PARALLEL", + "#INCLUSIVE", + "#DATAOBJECT", + "#DATASTORE", + "#GROUP", + "#TEXT_ANNOTATION", + ".mafe-event-start", + ".mafe-event-intermediate", + ".mafe-event-end", + ".pmui-pmactivity", + ".pmui-pmgateway", + ".pmui-pmdata", + ".mafe-artifact-annotation", + ".mafe-artifact-group" + ] + }, + container: "lane", + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + } + + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + } + } + ], + lan_name: name, + focusLabel: true + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMLane(defaultOptions); + break; + + } + if (customshape && !pmCanvas.readOnly) { + customshape.attachListeners(); + customshape.extendedType = type; + menuShape = PMDesigner.getMenuFactory(type); + customshape.getHTML(); + customshape.setContextMenu(menuShape); + } + return customshape; + }; + PMDesigner.updateLayerClasses = function (options) { + return [ + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-16', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-24', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-33', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-41', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-49' + ]; + }; + PMDesigner.updateGatewayLayerClasses = function (options) { + return [ + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-20', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-30', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-41', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-51', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-61' + ]; + }; + PMDesigner.updateMarkerLayerClasses = function (options) { + if (options.act_task_type !== 'EMPTY') { + return [ + "mafe-" + options.act_task_type.toLowerCase() + "-marker-10", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-15", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-21", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-26", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-31" + ]; + } + }; + PMDesigner.updateLoopLayerClasses = function (options) { + if (options.act_loop_type !== 'EMPTY') { + return [ + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-10", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-15", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-21", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-26", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-31" + ]; + } + }; + PMDesigner.updateDataMarkerLayerClasses = function (options) { + var type = options.dat_object_type.toLowerCase(); + if (type !== 'dataobject') { + return [ + "mafe-" + type + "-marker-10", + "mafe-" + type + "-marker-15", + "mafe-" + type + "-marker-21", + "mafe-" + type + "-marker-26", + "mafe-" + type + "-marker-31" + ]; + } + }; + /** + * Save a process and open the settings + * @param shape + * @param callback + */ + PMDesigner.saveAndOpenSettings= function (shape, callback) { + var splitedID; + + if(shape) { + splitedID = shape.getID().split("-"); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + if(callback) { + callback(shape); + } + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + callback(shape); + } + } + + + }; +}()); +PMDesigner.sidebar = []; + +PMDesigner.sidebar.push( + new ToolbarPanel({ + buttons: [ + { + selector: 'TASK', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-task' + ], + tooltip: "Task".translate() + }, + { + selector: 'SUB_PROCESS', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-subprocess' + ], + tooltip: "Sub Process".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'EXCLUSIVE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-exclusive' + ], + tooltip: "Exclusive Gateway".translate() + }, + { + selector: 'PARALLEL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-parallel' + ], + tooltip: "Parallel gateway".translate() + }, + { + selector: 'INCLUSIVE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-inclusive' + ], + tooltip: "Inclusive Gateway".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'START', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-start' + ], + tooltip: "Start Event".translate() + }, + { + selector: 'START_TIMER', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-event-start-timer' + ], + tooltip: "Start Timer Event".translate() + }, + { + selector: 'INTERMEDIATE_EMAIL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-intermediate-send-mesage' + ], + tooltip: "Intermediate Email Event".translate() + }, + { + selector: 'INTERMEDIATE_TIMER', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-event-intermediate-timer' + ], + tooltip: "Intermediate Timer Event".translate() + }, + { + selector: 'END', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-end' + ], + tooltip: "End Event".translate() + }, + { + selector: 'END_EMAIL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-end-message' + ], + tooltip: "End Email Event ".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'DATAOBJECT', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-data-object' + ], + tooltip: "Data Object".translate() + }, + { + selector: 'DATASTORE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-data-store' + ], + tooltip: "Data Store".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'PARTICIPANT', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-blackbox' + ], + tooltip: " Black Box Pool".translate() + }, + { + selector: 'POOL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-pool' + ], + tooltip: "Pool".translate() + }, + { + selector: 'LANE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-lane' + ], + tooltip: "Lane".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'GROUP', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-group' + ], + tooltip: "Group".translate() + }, + { + selector: 'TEXT_ANNOTATION', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-annotation' + ], + tooltip: "Text Annotation".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'LASSO', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-lasso' + ], + tooltip: "Lasso".translate() + } + + ] + }) +); +ListDynaform = function () { + this.superTitle = 'Dynaforms'.translate(); + this.tableContainerHeight = 374; + this.buttonCreate = null; + this.onCreate = new Function(); + this.onShowId = new Function(); + this.onEdit = new Function(); + this.onDel = new Function(); + this.loaded = false; + this.clickedClose = true; + Mafe.Grid.call(this); + ListDynaform.prototype.init.call(this); +}; +ListDynaform.prototype = new Mafe.Grid(); +ListDynaform.prototype.init = function () { + var that = this; + that.buttonCreate = new PMUI.ui.Button({ + id: 'dynaformButtonNew', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: {cssClasses: ['mafe-button-create']}, + handler: function (event) { + that.onCreate(event); + } + }); + that.buttonCreate.defineEvents(); + that.setID('idListDynaform'); + that.setColumns([{ + id: 'copyuid', + title: 'Show ID'.translate(), + dataType: 'button', + buttonLabel: 'Show ID'.translate(), + buttonStyle: {cssClasses: ['mafe-button-show']}, + onButtonClick: function (row, grid) { + that.onShowId(row, grid); + } + }, { + id: 'dynaformGridPanelTitle', + title: 'Title'.translate(), + dataType: 'string', + width: '460px', + alignmentCell: 'left', + sortable: true, + columnData: 'dyn_title' + }, { + id: 'dynaformGridPanelEdit', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-edit']}, + buttonLabel: function (row, data) { + return 'Edit'.translate(); + }, + onButtonClick: function (row, grid) { + that.onEdit(row, grid); + } + }, { + id: 'dynaformGridPanelDelete', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-delete']}, + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + onButtonClick: function (row, grid) { + that.onDel(row, grid); + } + } + ]); +}; +ListDynaform.prototype.createHTML = function () { + Mafe.Grid.prototype.createHTML.call(this); + this.dom.toolbar.appendChild(this.buttonCreate.getHTML()); + return this.html; +}; +ListDynaform.prototype.load = function () { + var that = this; + that.clearItems(); + (new PMRestClient({ + endpoint: 'dynaforms', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.setDataItems(response); + that.sort('dyn_title', 'asc'); + that.loaded = true; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + that.loaded = false; + }, + messageError: 'There are problems getting the list of dynaforms, please try again.'.translate() + })).executeRestClient(); +}; +ListDynaform.prototype.getSuperTitle = function () { + return this.superTitle; +}; + +BlankDynaform = function () { + this.superTitle = 'Create Blank Dynaform'.translate(); + this.onSave = new Function(); + this.onSaveOpen = new Function(); + this.onCancel = new Function(); + this.buttons = null; + Mafe.Form.call(this); + BlankDynaform.prototype.init.call(this); +}; +BlankDynaform.prototype = new Mafe.Form(); +BlankDynaform.prototype.init = function () { + var that = this; + that.setID('formDynaformInformation'); + that.setTitle('Dynaform Information'.translate()); + that.setItems([{ + id: 'formDynaformInformationTitle', + pmType: 'text', + label: 'Title'.translate(), + value: '', + maxLength: 255, + placeholder: 'The Dynaform title'.translate(), + name: 'dyn_title', + required: true, + controlsWidth: 303 + }, { + id: 'formDynaformInformationDescription', + pmType: 'textarea', + rows: 200, + name: 'dyn_description', + width: 200, + label: 'Description'.translate(), + style: {cssClasses: ['mafe-textarea-resize']} + } + ]); + that.buttons = [ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSaveOpen', + text: 'Save & Open'.translate(), + buttonType: 'success', + handler: function () { + that.onSaveOpen(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSave', + text: 'Save'.translate(), + buttonType: 'success', + handler: function () { + that.onSave(); + } + }) + ]; +}; +BlankDynaform.prototype.getButtons = function () { + return this.buttons; +}; +BlankDynaform.prototype.getSuperTitle = function () { + return this.superTitle; +}; + +Dynaform = function (settings) { + this.listDynaform = null; + this.blankDynaform = null; + Mafe.Window.call(this, settings); + Dynaform.prototype.init.call(this, settings); +}; +Dynaform.prototype = new Mafe.Window(); +Dynaform.prototype.init = function (settings) { + var that = this; + that.listDynaform = new ListDynaform(); + that.setOnBeforeCloseHandler(function () { + this.clickedClose = true; + if (!that.blankDynaform.isVisible()) { + that.close(); + } else { + that.blankDynaform.onCancel(); + } + }); + that.listDynaform.load(); + that.listDynaform.onShowId = function (row, grid) { + showUID(row.getData().dyn_uid); + }; + that.listDynaform.onCreate = function () { + that.resetView(); + that.setTitle(that.blankDynaform.getSuperTitle()); + that.blankDynaform.setVisible(true); + that.setButtons(that.blankDynaform.getButtons()); + }; + that.listDynaform.onEdit = function (row, grid) { + that.edit(row, grid); + }; + that.listDynaform.onDel = function (row, grid) { + that.del(row, grid); + }; + + that.blankDynaform = new BlankDynaform(); + that.blankDynaform.onSave = function () { + that.saveBlank(false); + }; + that.blankDynaform.onSaveOpen = function () { + that.saveBlank(true); + }; + that.blankDynaform.onCancel = function () { + $("input,select,textarea").blur(); + var title = ""; + that.blankDynaform.loseChanges(title); + }; + that.blankDynaform.onYesConfirmCancellation = function () { + if (that.clickedClose) { + that.close(); + } + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + }; + + that.addItem(that.listDynaform); + that.addItem(that.blankDynaform); + + that.open(); + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + + // hard coding dyn_title textfield because enter keypress reload the current page + if (that.blankDynaform.getItems()[0] + && that.blankDynaform.getItems()[0].controls[0] + && that.blankDynaform.getItems()[0].controls[0].html) { + $(that.blankDynaform.getItems()[0].controls[0].html).keypress(function (e) { + if (e.which == 13) { + e.preventDefault(); + } + }); + } +}; +Dynaform.prototype.saveBlank = function (open) { + var that = this, + data, + restClient, + flagAux; + + if (!that.blankDynaform.isValid()) { + flagAux = that.blankDynaform.visible; + } else { + flagAux = that.blankDynaform.isValid(); + } + + if (flagAux) { + if (getData2PMUI(that.blankDynaform.html).dyn_title == "") { + return false; + } + } + + data = getData2PMUI(that.blankDynaform.html); + data['dyn_version'] = 2; + data['dyn_type'] = 'xmlform'; + restClient = new PMRestClient({ + endpoint: 'dynaform', + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + if (open) { + that.close(); + try { + PMUI.getActiveCanvas().emptyCurrentSelection(); + } catch (msg) { + } + PMDesigner.dynaformDesigner(response); + } else { + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + that.listDynaform.load(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems creating the dynaform, please try again.'.translate(), + messageSuccess: 'Dynaform saved successfully'.translate(), + flashContainer: that.listDynaform + }); + restClient.executeRestClient(); +}; +Dynaform.prototype.edit = function (row, grid) { + this.close(); + try { + PMUI.getActiveCanvas().emptyCurrentSelection(); + } catch (msg) { + } + PMDesigner.dynaformDesigner(row.getData()); +}; +Dynaform.prototype.del = function (row, grid) { + var that = this, + confirmDeletion = new Mafe.ConfirmDeletion(); + confirmDeletion.setMessage('Do you want to delete this DynaForm?'.translate()); + confirmDeletion.setTitle("Dynaform".translate()); + confirmDeletion.onDelete = function () { + var restClient = new PMRestClient({ + endpoint: 'dynaform/' + row.getData().dyn_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.listDynaform.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems deleting the dynaform, please try again.'.translate(), + messageSuccess: 'Dynaform deleted successfully'.translate(), + flashContainer: that.listDynaform + }); + restClient.executeRestClient(); + }; +}; + +(function () { + PMDesigner.dynaform = function () { + var dynaform = new Dynaform(); + }; + PMDesigner.dynaform.create = function () { + var dynaform = new Dynaform(); + dynaform.resetView(); + dynaform.setTitle(dynaform.blankDynaform.getSuperTitle()); + dynaform.blankDynaform.setVisible(true); + dynaform.setButtons(dynaform.blankDynaform.getButtons()); + }; +}()); + +/** + * Updates the granular export feature after enabled features are loaded. + */ +var navbarExportUpdate = function () { + //Code export - export granular (handler) + var handlerExportNormal = function () { + var ws = enviromentVariables('WORKSPACE'); + if (!HTTP_SERVER_HOSTNAME) { + HTTP_SERVER_HOSTNAME = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); + } + location.href = HTTP_SERVER_HOSTNAME + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + "/export?access_token=" + PMDesigner.project.keys.access_token; + }; + + var handlerExportGranular = function () { + var optionExportNormal = $("
" + "Normal".translate() + "
"), + optionExportGranular = $("
" + "Custom".translate() + "
"), + menuExport = $("").hide(), + $item = $("#idNavBar").find(".mafe-button-export-process").closest("li"); + + menuExport.append(optionExportNormal).append(optionExportGranular); + if (!$item.find(".mafe-button-menu-container").length) { + $item.append(menuExport); + } + $(".ui-tooltip").hide(); + $(menuExport).slideToggle("slow"); + $item.on("mouseleave", function (e) { + if ($(this).find(".mafe-button-menu-container").eq(0).is(":visible")) { + var that = this; + $(that).find(".mafe-button-menu-container").remove(); + } + }); + + $(".sub-nav").on("click", ".normalExport", function (event) { + var ws = enviromentVariables('WORKSPACE'), + locationOrigin; + if (!window.location.origin) { + locationOrigin = window.location.protocol + "//" + window.location.hostname + + (window.location.port ? ':' + window.location.port : ''); + } else if (typeof HTTP_SERVER_HOSTNAME !== 'undefined') { + locationOrigin = HTTP_SERVER_HOSTNAME; + } else { + locationOrigin = window.location.origin; + } + location.href = locationOrigin + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + "/export?access_token=" + PMDesigner.project.keys.access_token; + }); + + $(".sub-nav").on("click", ".granularExport", function (event) { + PMDesigner.granularProcessExport(); + }); + }; + if (inArray("jXsSi94bkRUcVZyRStNVExlTXhEclVadGRRcG9xbjNvTWVFQUF3cklKQVBiVT0=", ENABLED_FEATURES)) { + handler = handlerExportGranular; + } else { + handler = handlerExportNormal; + } + +}; + +function inArray(needle, haystack) { + var i, + length = haystack.length; + for (i = 0; i < length; i += 1) { + if (haystack[i] == needle) return true; + } + return false; +} + +var defaultNavbarPanelMenus = { + array: [], + init: function () { + var closeVar = { + id: 'closeButton', + name: 'Close', + htmlProperty: { + id: 'closeButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-close', + child: [ + { + element: 'span', + class: 'mafe-button-close' + } + ] + } + + ] + }, + actions: { + selector: ".mafe-button-close", + tooltip: "Close".translate(), + execute: true, + handler: function () { + var message_window, + browser = PMDesigner.getBrowser(), + url = parent.location.href; + + if (PMDesigner.project.isDirty() && !PMDesigner.project.isSave) { + var message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: "cancelSaveSubprocPropertiesWin", + title: PMDesigner.project.projectName, + message: 'Save your changes and exit ?'.translate(), + footerItems: [ + { + pmType: 'label', + text: ' ' + }, { + text: "No".translate(), + handler: function () { + PMDesigner.project.isClose = true; + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + window.close(); + } else { + parent.location.href = url; + } + }, + buttonType: "error" + }, + + { + text: "Yes".translate(), + handler: function () { + PMDesigner.project.saveClose(true); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + window.close(); + } else { + parent.location.href = url; + } + } + } + } + }, + helpVar = { + id: 'helpButton', + name: 'Help', + htmlProperty: { + id: 'helpButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-help', + child: [ + { + element: 'span', + class: 'mafe-toolbar-help' + } + ] + } + ] + }, + actions: { + selector: ".mafe-toolbar-help", + tooltip: "Help".translate(), + execute: true, + handler: function () { + var canvas = PMUI.getActiveCanvas(); + PMDesigner.helper.startIntro(); + if (canvas && canvas.getHTML()) { + canvas.getHTML().classList.remove("pmui-pmcanvas"); + } + } + } + }, + saveVar = { + id: 'saveButton', + name: 'Save', + htmlProperty: { + id: 'saveButton', + element: 'li', + class: 'mafe-save-process', + child: [ + { + element: 'a', + class: 'mafe-button-save' + }, + { + element: 'span', + class: 'mafe-button-menu', + child: [ + { + element: 'img', + src: '/lib/img/caret-down.png' + } + ] + } + ] + }, + actions: { + selector: ".mafe-button-save", + tooltip: "Save process".translate(), + label: { + text: "Save".translate() + }, + execute: true, + handler: function () { + if (PMDesigner.project.isDirty() && PMDesigner.project.isSave === false) { + PMDesigner.project.isSave = true; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].text = "Saving"; + PMDesigner.project.save(true); + } + } + } + }, + exportButton = { + id: 'exportButton', + name: 'ExportButton', + htmlProperty: { + id: 'exportButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-export-process' + } + ] + }, + actions: { + selector: ".mafe-button-export-process", + tooltip: "Export process".translate(), + label: { + text: "Export Process".translate() + }, + execute: true, + handler: function () { + handler(); + } + } + }, + exportBpmnButton = { + id: 'exportBpmnButton', + name: 'ExportBpmn', + htmlProperty: { + id: 'exportBpmnButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-export-bpmn-process' + } + ] + }, + actions: { + selector: ".mafe-button-export-bpmn-process", + tooltip: "Export Diagram ".translate(), + label: { + text: "Export Diagram".translate() + }, + execute: false, + handler: function () { + } + } + }, + zoomVar = { + id: 'zoomOptions', + name: 'Zoom', + htmlProperty: { + id: 'zoomOptions', + element: 'li', + child: [ + { + element: 'span', + class: 'mafe-zoom-options' + } + ] + }, + actions: { + id: 'zoomOptions', + spanclass: 'mafe-zoom-options', + actions: 'zoom' + }, + aditionalAction: { + execute: PMDesigner.ApplyOptionsZoom() + } + }, + undo = { + id: 'undoButton', + name: 'Undo', + htmlProperty: { + id: 'undoButton', + element: 'li', + class: 'mafe-undo', + child: [ + { + element: 'b', + class: 'mafe-action-undo', + child: [ + { + element: 'span', + class: 'mafe-button-undo' + } + ] + } + ] + }, + actions: { + selector: ".mafe-action-undo", + tooltip: "Undo Action".translate(), + label: { + text: '' + }, + execute: true, + handler: function () { + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().commandStack.undo(); + } + } + }, + redo = { + id: 'redoButton', + name: 'Redo', + htmlProperty: { + id: 'redoButton', + element: 'li', + class: 'mafe-redo', + child: [ + { + element: 'b', + class: 'mafe-action-redo', + child: [ + { + element: 'span', + class: 'mafe-button-redo' + } + ] + } + ] + }, + actions: { + selector: ".mafe-action-redo", + tooltip: "Redo Action".translate(), + label: { + text: '' + }, + execute: true, + handler: function () { + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().commandStack.redo(); + } + } + }, + fullScreen = { + id: 'fullScreenButton', + name: 'FullScreen', + htmlProperty: { + id: 'fullScreenButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-fullscreen' + } + ] + }, + actions: { + selector: ".mafe-button-fullscreen", + tooltip: "Full Screen".translate(), + execute: true, + handler: function () { + PMDesigner.fullScreen.toggle(this); + } + } + }; + navbarExportUpdate(); + this.array = [ + closeVar, + helpVar, + saveVar, + exportButton, + exportBpmnButton, + zoomVar, + undo, + redo, + fullScreen + ]; + }, + /** + * Get Array of Items of the NavBarPanelMenu + * @returns {Array} + */ + getNavBarPanelMenu: function () { + return this.array; + }, + /** + * Adds one Item To NavBarPanelMenu + * @param item + */ + addItemToNavBarPanelMenu: function (item) { + this.array.push(item); + } +}; + +defaultNavbarPanelMenus.init(); + +/** + * @class PMUI.menu.navBarPanel + * Handles the navbar panel of designer, + * contains all menus for content elements. + * + * @param {array} items Default items + * @constructor + */ +var NavbarPanel = function (items) { + NavbarPanel.prototype.init.call(this, items); +}; + +/** + * Initializes the object. + * + * @param {array} items Array with default values. + */ +NavbarPanel.prototype.init = function (items) { + var item; + if (typeof items === 'undefined') { + items = defaultNavbarPanelMenus.getNavBarPanelMenu(); + } + this.items = new PMUI.util.ArrayList(); + for (item in items) { + if (!items.hasOwnProperty(item)) { + continue; + } + this.items.insert(items[item]); + } +}; + +/** + * This method renders HTML and actions into designer + * + */ +NavbarPanel.prototype.show = function () { + var item = null, + i, + max; + if (PMDesigner.navbarPanel.items instanceof Object) { + for (i = 0, max = PMDesigner.navbarPanel.items.getSize(); i < max; i += 1) { + item = PMDesigner.navbarPanel.items.get(i); + if (typeof item.htmlProperty !== "undefined") { + PMDesigner.navbarPanel.buildHtmlElement(item.htmlProperty); + } + if (typeof item.aditionalAction !== "undefined") { + item.aditionalAction; + } + if (typeof item.actions !== "undefined") { + new PMAction(item.actions); + } + } + } else { + throw new Error('cannot show the elements of the List'); + } + +}; + +/** + * This method creates a html element button into the navBar Panel + * @param {Object} element + * @param {HTMLElement} before + */ +NavbarPanel.prototype.buildHtmlElement = function (element, before) { + var ul = document.getElementById('idNavBarList'), + htmlElement; + if ((typeof ul !== undefined) && (ul !== null)) { + htmlElement = this.getNodeChild(element, ul); + if (typeof before !== "undefined") { + before = document.getElementById(before); + ul.insertBefore(htmlElement, before); + } else { + ul.appendChild(htmlElement); + } + } + +}; + +/** + * This method assembling dependent html elements to the button + * @param {Object} nodeChild + * @param {HTMLElement} nodePattern + * @returns {Element} + */ +NavbarPanel.prototype.getNodeChild = function (nodeChild, nodePattern) { + var node = document.createElement(nodeChild.element), + i; + if (typeof nodeChild.id !== 'undefined') { + node.setAttribute("id", nodeChild.id); + } + if (nodeChild.element === 'a') { + node.setAttribute("href", "return;"); + } + if (typeof(nodeChild.class) !== 'undefined') { + node.setAttribute("class", nodeChild.class); + } + if (typeof(nodeChild.child) !== 'undefined' && nodeChild.child instanceof Array) { + for (i = 0; i < nodeChild.child.length; i += 1) { + this.getNodeChild(nodeChild.child[i], node); + } + } + if (typeof(nodeChild.src) !== 'undefined') { + node.setAttribute("src", nodeChild.src); + } + if ((typeof nodePattern !== undefined) && (nodePattern !== null) && nodePattern.localName !== 'ul') { + nodePattern.appendChild(node); + } + return node; +}; + +/** + * This method removes an html element for the + * NavBar panel array List and delete the HTML from the designer. + * @param {String} idButton + */ +NavbarPanel.prototype.deleteHtmlElement = function (idButton) { + var btn = document.getElementById(idButton), + element = PMDesigner.contentControl.items.find("id", idButton), + remove = PMDesigner.contentControl.items.remove(element); + if (typeof btn !== 'undefined' && remove === true) { + btn.parentNode.removeChild(btn); + } else { + throw new Error('Cannot find the specified button: ' + idButton + '. Please, review this'); + } +}; + +/** + * NavbarPanel get an instance + * @type {NavbarPanel} + */ +PMDesigner.navbarPanel = new NavbarPanel(defaultNavbarPanelMenus.getNavBarPanelMenu()); + +function defaultContentControlMenus() { + var variableCreate = { + id: 'variableCreate', + name: 'Variable', + htmlProperty: { + id: 'variableCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-variable' + }, + { + element: 'a', + class: 'btn_create mafe-menu-variable-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-variable", + label: { + text: "Variables".translate() + }, + execute: true, + handler: function () { + PMDesigner.variables(); + } + }, + createAction: { + selector: ".mafe-menu-variable-create", + label: { + selector: ".mafe-menu-variable-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.variables.create(); + } + } + }, + messageType = { + id: 'messageTypeCreate', + name: 'MessageType', + htmlProperty: { + id: 'messageTypeCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-messagetype' + }, + { + element: 'a', + class: 'btn_create mafe-menu-messagetype-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-messagetype", + label: { + text: "Message Types".translate() + }, + execute: true, + handler: function () { + PMDesigner.messageType(); + } + }, + createAction: { + selector: ".mafe-menu-messagetype-create", + label: { + selector: ".mafe-menu-messagetype-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.messageType.create(); + } + } + }, + dynaformCreate = { + id: 'dynaformCreate', + name: 'Dynaform', + htmlProperty: { + id: 'dynaformCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-dynaform' + }, + { + element: 'a', + class: 'btn_create mafe-menu-dynaform-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-dynaform", + label: { + text: "Dynaforms".translate() + }, + execute: true, + handler: function () { + PMDesigner.dynaform(); + } + }, + createAction: { + selector: ".mafe-menu-dynaform-create", + label: { + selector: ".mafe-menu-dynaform-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.dynaform.create(); + } + } + }, + inputDocumentCreate = { + id: 'inputDocumentCreate', + name: 'InputDocument', + htmlProperty: { + id: 'inputDocumentCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-inputdocuments' + }, + { + element: 'a', + class: 'btn_create mafe-menu-inputdocuments-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-inputdocuments", + label: { + text: "Input Documents".translate() + }, + execute: true, + handler: function () { + var inputDocument = new InputDocument(); + inputDocument.build(); + } + }, + createAction: { + selector: ".mafe-menu-inputdocuments-create", + label: { + selector: ".mafe-menu-inputdocuments-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + var inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.method = "POST"; + } + } + }, + outputDocumentCreate = { + id: 'outputDocumentCreate', + name: 'OutputDocument', + htmlProperty: { + id: 'outputDocumentCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-outputdocuments' + }, + { + element: 'a', + class: 'btn_create mafe-menu-outputdocuments-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-outputdocuments", + label: { + text: "Output Documents".translate() + }, + execute: true, + handler: function () { + PMDesigner.output(); + } + }, + createAction: { + selector: ".mafe-menu-outputdocuments-create", + label: { + selector: ".mafe-menu-outputdocuments-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.output(); + PMDesigner.output.create(); + } + } + }, + triggerCreate = { + id: 'triggerCreate', + name: 'Trigger', + htmlProperty: { + id: 'triggerCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-triggers' + }, + { + element: 'a', + class: 'btn_create mafe-menu-triggers-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-triggers", + label: { + text: "Triggers".translate() + }, + execute: true, + handler: function () { + PMDesigner.trigger(); + } + }, + createAction: { + selector: ".mafe-menu-triggers-create", + label: { + selector: ".mafe-menu-triggers-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.trigger(); + PMDesigner.trigger.create(); + } + } + }, + reportTableCreate = { + id: 'reportTableCreate', + name: 'ReportTable', + htmlProperty: { + id: 'reportTableCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-reporttables' + }, + { + element: 'a', + class: 'btn_create mafe-menu-reporttables-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-reporttables", + label: { + text: "Report Tables".translate() + }, + execute: true, + handler: function () { + PMDesigner.reporttable(); + } + }, + createAction: { + selector: ".mafe-menu-reporttables-create", + label: { + selector: ".mafe-menu-reporttables-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.reporttable(); + PMDesigner.reporttable.create(); + } + } + }, + databaseCreate = { + id: 'databaseCreate', + name: 'Database', + htmlProperty: { + id: 'databaseCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-databaseconnections' + }, + { + element: 'a', + class: 'btn_create mafe-menu-databaseconnections-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-databaseconnections", + label: { + text: "Database Connections".translate() + }, + execute: true, + handler: function () { + PMDesigner.database(); + } + }, + createAction: { + selector: ".mafe-menu-databaseconnections-create", + label: { + selector: ".mafe-menu-databaseconnections-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.database.create(); + } + } + }, + templateCreate = { + id: 'templateCreate', + name: 'TemplateCreate', + htmlProperty: { + id: 'templateCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-templates' + }, + { + element: 'a', + class: 'btn_create mafe-menu-templates-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-templates", + label: { + text: "Templates".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager("templates", "CREATION_NORMAL"); + } + }, + createAction: { + selector: ".mafe-menu-templates-create", + label: { + selector: ".mafe-menu-templates-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager.createFirst("templates", "CREATION_MORE"); + } + } + }, + menuPublic = { + id: 'menuPublic', + name: 'MenuPublic', + htmlProperty: { + id: 'menuPublic', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-public' + }, + { + element: 'a', + class: 'btn_create mafe-menu-public-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-public", + label: { + text: "Public Files".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager("public", "CREATION_NORMAL"); + } + }, + createAction: { + selector: ".mafe-menu-public-create", + label: { + selector: ".mafe-menu-public-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager.createFirst("public", "CREATION_MORE"); + } + } + }, + menuPermission = { + id: 'menuPermission', + name: 'MenuPermission', + htmlProperty: { + id: 'menuPermission', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-permissions' + }, + { + element: 'a', + class: 'btn_create mafe-menu-permissions-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-permissions", + label: { + text: "Permissions".translate() + }, + execute: true, + handler: function () { + PMDesigner.processPermissions(); + } + }, + createAction: { + selector: ".mafe-menu-permissions-create", + label: { + selector: ".mafe-menu-permissions-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.processPermissions.create(); + } + } + }, + menuCaseTracker = { + id: 'menuCaseTracker', + name: 'CaseTracker', + htmlProperty: { + id: 'menuCaseTracker', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-casetracker' + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-casetracker", + label: { + text: "Case Tracker".translate() + }, + execute: true, + handler: function () { + PMDesigner.caseTracker(); + } + } + }, + menuSupervisor = { + id: 'menuSupervisor', + name: 'MenuSupervisor', + htmlProperty: { + id: 'menuSupervisor', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-supervisors' + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-supervisors", + label: { + text: "Supervisors".translate() + }, + execute: true, + handler: function () { + PMDesigner.assigmentSupervisors(); + } + } + }; + + return [ + variableCreate, + messageType, + dynaformCreate, + inputDocumentCreate, + outputDocumentCreate, + triggerCreate, + reportTableCreate, + databaseCreate, + templateCreate, + menuPublic, + menuPermission, + menuCaseTracker, + menuSupervisor + ]; +}; + +/** + * @class PMUI.menu.contentControl + * Handles the content control menu of designer, + * contains all menus for content elements. + * + * @param {array} items Default items + * @constructor + */ +var ContentControl = function (items) { + ContentControl.prototype.init.call(this, items); +}; + +/** + * Initializes the object. + * + * @param {array} items Array with default values. + */ +ContentControl.prototype.init = function (items) { + this.items = new PMUI.util.ArrayList(); + if (typeof items === 'undefined') { + items = defaultContentControlMenus(); + } + for (var item in items) { + if (!items.hasOwnProperty(item)) { + continue; + } + this.items.insert(items[item]); + } +}; + +/** + * This method renders HTML and actions into designer + * + */ +ContentControl.prototype.show = function () { + var item = null, + i, + max; + if (this.items instanceof Object) { + for (i = 0, max = this.items.getSize(); i < max; i += 1) { + item = this.items.get(i); + if (typeof item.htmlProperty !== "undefined") { + this.buildHtmlElement(item.htmlProperty); + } + if (typeof item.actions !== "undefined") { + new PMAction(item.actions); + } + if (typeof item.createAction !== "undefined") { + new PMAction(item.createAction); + } + } + } else { + throw new Error('Cannot show the elements of the List'); + } +}; + +/** + * This method creates a html element button into the content + * control panel. + * @param {Object} element + * @param {HTMLElement} before + */ +ContentControl.prototype.buildHtmlElement = function (element, before) { + var ul = document.getElementById('contentControlList'), + htmlElement; + if ((typeof ul !== undefined) && (ul !== null)) { + htmlElement = this.getNodeChild(element, ul); + if (typeof before !== "undefined") { + before = document.getElementById(before); + ul.insertBefore(htmlElement, before); + } else { + ul.appendChild(htmlElement); + } + } + +}; + +/** + * This method assembling dependent html elements to the button + * @param {Object} nodeChild + * @param {HTMLElement} nodePattern + * @returns {Element} + */ +ContentControl.prototype.getNodeChild = function (nodeChild, nodePattern) { + var node = document.createElement(nodeChild.element), + i; + if (typeof nodeChild.id !== 'undefined') { + node.setAttribute("id", nodeChild.id); + } + if (nodeChild.element === 'a') { + node.setAttribute("href", "#"); + } + if (typeof(nodeChild.class) !== 'undefined') { + node.setAttribute("class", nodeChild.class); + } + if (typeof(nodeChild.child) !== 'undefined' && nodeChild.child instanceof Array) { + for (i = 0; i < nodeChild.child.length; i += 1) { + this.getNodeChild(nodeChild.child[i], node); + } + } + if (typeof(nodeChild.src) !== 'undefined') { + node.setAttribute("src", nodeChild.src); + } + if ((typeof nodePattern !== undefined) && (nodePattern !== null) && nodePattern.localName !== 'ul') { + nodePattern.appendChild(node); + } + return node; +}; + +/** + * This method removes an html element for the + * Content Control panel array List and delete the HTML from the designer. + * @param {String} idButton + */ +ContentControl.prototype.deleteHtmlElement = function (idButton) { + var btn = document.getElementById(idButton), + element = this.items.find("id", idButton), + remove = this.items.remove(element); + if (typeof btn !== 'undefined' && remove === true) { + btn.parentNode.removeChild(btn); + } else { + throw new Error('Cannot find the specified button: ' + idButton + '. Please, review this'); + } +}; + +/** + * ContentControl get an instance + * @type {ContentControl} + */ +PMDesigner.contentControl = new ContentControl(defaultContentControlMenus()); + +/** + * Input Document module + * @param options + * @constructor + */ +var InputDocument = function (options) { + this.winMainInputDocument = null; + this.externalType = false; + this.inputDocumentOriginDataForUpdate = {}; + this.windowDialog = null; + this.assignAccordion = null; + this.clickedClose = true; + this.onUpdateInputDocumentHandler = null; + InputDocument.prototype.init.call(this, options); +}; +/** + * set close modulo InputDocument constructor + * @param handler, the callback function + */ +InputDocument.prototype.setOnUpdateInputDocumentHandler = function (handler) { + if (typeof handler === "function") { + this.onUpdateInputDocumentHandler = handler; + } + return this; +}; +/** + * constructor + * @param options + */ +InputDocument.prototype.init = function (options) { + var defaults = { + onUpdateInputDocumentHandler: null + }; + $.extend(true, defaults, options); + this.setOnUpdateInputDocumentHandler(defaults.onUpdateInputDocumentHandler); + return this; +}; + +/** + * Puts input document using rest proxy, to update data + * @param inputDocumentUid + * @param data + */ +InputDocument.prototype.inputDocumentPutRestProxy = function (inputDocumentUid, data) { + var that = this, + restProxy; + + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + var message; + if (!that.externalType) { + if (typeof flagInputDocument != 'undefined' && flagInputDocument) { + that.winMainInputDocument.close(); + return; + } + that.inputDocumentsGetRestProxy(); + that.openGridPanelInMainWindow(); + } else { + that.winMainInputDocument.close(); + message = new PMUI.ui.FlashMessage({ + message: 'Input Document edited correctly.'.translate(), + duration: 3000, + severity: 'success', + appendTo: that.windowDialog + }); + message.show(); + } + if (typeof that.onUpdateInputDocumentHandler === "function") { + that.onUpdateInputDocumentHandler(data, that); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document updated successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Deletes an input document + * @param inputDocumentUid + */ +InputDocument.prototype.inputDocumentDeleteRestProxy = function (inputDocumentUid) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.inputDocumentsGetRestProxy(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document deleted successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Creates an input document using rest proxy + * @param data + */ +InputDocument.prototype.inputDocumentPostRestProxy = function (data) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document", + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + that.inputDocumentsGetRestProxy(); + that.openGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document saved successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Gets all input documents to populate the grid + */ +InputDocument.prototype.inputDocumentsGetRestProxy = function () { + var that = this, + restProxy = new PMRestClient({ + endpoint: 'input-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.grdpnlInputDocument.setDataItems(response); + that.grdpnlInputDocument.sort('inp_doc_title', 'asc'); + if (PMVariables.prototype.isWindowActive()) { + PMVariables.prototype.setInputDocumentsFromIDModule(PMUI.getPMUIObject(inp_doc_uid), response); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +/** + * Gets an specific input document data to edit it + * @param inputDocumentUid + */ +InputDocument.prototype.inputDocumentFormGetProxy = function (inputDocumentUid) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var data = response; + that.method = "PUT"; + that.openFormForEditInMainWindow(data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; + +/** + * Open Edit form and sets to main windows + * @param inputDocumentData + */ +InputDocument.prototype.openFormForEditInMainWindow = function (inputDocumentData) { + var that = this; + + that.inputDocumentOriginDataForUpdate = inputDocumentData; + that.inputDocumentUid = inputDocumentData.inp_doc_uid; + that.frmInputDocument.getField('inp_doc_original').setValue(""); + that.winMainInputDocument.setTitle("Edit Input Document".translate()); + + that.frmInputDocument.getField('inp_doc_title').setValue(inputDocumentData.inp_doc_title); + that.frmInputDocument.getField('inp_doc_description').setValue(inputDocumentData.inp_doc_description); + that.frmInputDocument.getField('inp_doc_form_needed').setValue(inputDocumentData.inp_doc_form_needed); + that.frmInputDocument.getField('inp_doc_original').setValue(inputDocumentData.inp_doc_original); + + if (inputDocumentData.inp_doc_form_needed !== "VIRTUAL") { + that.frmInputDocument.getField('inp_doc_original').setVisible(true); + } else { + that.frmInputDocument.getField('inp_doc_original').setVisible(false); + } + that.frmInputDocument.getField('inp_doc_versioning').setValue(parseInt(inputDocumentData.inp_doc_versioning + "")); + that.frmInputDocument.getField('inp_doc_destination_path').setValue(inputDocumentData.inp_doc_destination_path); + that.frmInputDocument.getField('inp_doc_tags').setValue(inputDocumentData.inp_doc_tags); + that.frmInputDocument.getField('inp_doc_type_file').setValue(inputDocumentData.inp_doc_type_file); + that.frmInputDocument.getField('inp_doc_max_filesize').setValue(inputDocumentData.inp_doc_max_filesize); + that.frmInputDocument.getField('inp_doc_max_filesize_unit').setValue(inputDocumentData.inp_doc_max_filesize_unit); +}; +/** + * Open the grid panel and sets to mai windows + */ +InputDocument.prototype.openGridPanelInMainWindow = function () { + this.grdpnlInputDocument.setVisible(true); + this.frmInputDocument.setVisible(false); + this.winMainInputDocument.setTitle("Input Documents".translate()); + this.winMainInputDocument.hideFooter(); +}; +/** + * Set the option external type of input Document + */ +InputDocument.prototype.setExternalType = function (value) { + if (typeof value === "boolean") { + this.externalType = value; + } + return this; +}; +/** + * Set the option window Dialog, a window that open this class + */ +InputDocument.prototype.setWindowDialog = function (value) { + this.windowDialog = value; + return this; +}; + +InputDocument.prototype.setAssignAccordion = function (obj) { + this.assignAccordion = obj; +}; + +/** + * Open create form an sets to main windows + */ +InputDocument.prototype.openFormInMainWindow = function () { + this.grdpnlInputDocument.setVisible(false); + this.frmInputDocument.setVisible(true); + this.winMainInputDocument.setTitle("Create Input Document".translate()); + this.winMainInputDocument.showFooter(); +}; + +InputDocument.prototype.checkIfValuesAreEqual = function (initialData, finalData) { + var key1, key2; + if (!Object.keys(initialData).length && Object.keys(finalData).length) { + if (finalData['inp_doc_title'] != '' || finalData['inp_doc_form_needed'] != 'VIRTUAL' || finalData['inp_doc_description'] != '' || finalData['inp_doc_versioning'] != '0' || finalData['inp_doc_destination_path'] != '') { + return false; + } + } + + for (key1 in initialData) { + for (key2 in finalData) { + if (typeof(initialData[key1]) != "undefined" && + typeof(finalData[key2]) != "undefined" && + key1 == key2 && + initialData[key1] != finalData[key2] + ) { + //Return + return false; + } + } + } + return true; +}; + +/** + * Generate all ui components(window, form, grid, fields) + */ + +InputDocument.prototype.isDirtyFormInput = function () { + $("input,select,textarea").blur(); + var that = this, message_window; + if (this.frmInputDocument.isVisible()) { + if (!this.externalType) { + if (!(this.checkIfValuesAreEqual(this.inputDocumentOriginDataForUpdate, getData2PMUI(this.frmInputDocument.html)))) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: "Input Documents".translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + if (typeof flagInputDocument != 'undefined' && flagInputDocument) { + if (that.clickedClose) { + message_window.close(); + that.winMainInputDocument.close(); + return; + } else { + that.winMainInputDocument.close(); + flagInputDocument = false; + } + return; + } else { + if (that.clickedClose) { + message_window.close(); + that.winMainInputDocument.close(); + return; + } else { + inputDocumentOption = ""; + that.openGridPanelInMainWindow(); + } + } + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + this.inputDocumentOriginDataForUpdate = {}; + } else { + if (that.clickedClose) { + this.winMainInputDocument.close(); + } else { + inputDocumentOption = ""; + this.openGridPanelInMainWindow(); + } + } + } else { + that.winMainInputDocument.close(); + } + } else { + that.winMainInputDocument.close(); + } +}; + +InputDocument.prototype.build = function () { + var ID = this, + btnSave, + btnCancel, + winMainInputDocument, + frmInputDocument, + grdpnlInputDocument, + btnNew, + inp_doc_destination_path, + inp_doc_tags, + that = this; + + btnSave = new PMUI.ui.Button({ + id: "btnSave", + text: "Save".translate(), + handler: function () { + var flagAux, data; + + if (!ID.frmInputDocument.isValid()) { + flagAux = ID.frmInputDocument.visible; + } else { + flagAux = ID.frmInputDocument.isValid(); + } + + if (flagAux) { + if (getData2PMUI(ID.frmInputDocument.html).inp_doc_title == "") { + return false; + } + } + + if (ID.frmInputDocument.getField("inp_doc_max_filesize").getValue() != "") { + if (!/^\+?(0|[1-9]\d*)$/.test(ID.frmInputDocument.getField("inp_doc_max_filesize").getValue())) { + return false; + } + } + + //validation because getData method do not work in IE + if (navigator.userAgent.indexOf("MSIE") !== -1 || navigator.userAgent.indexOf("Trident") !== -1) { + data = getData2PMUI(that.frmInputDocument.html); + } else { + data = that.frmInputDocument.getData(); + } + + data["inp_doc_versioning"] = parseInt(data["inp_doc_versioning"]); + + switch (that.method) { + case "POST": + that.inputDocumentPostRestProxy(data); + break; + case "PUT": + that.inputDocumentPutRestProxy(that.inputDocumentUid, data); + break; + } + }, + buttonType: 'success' + }); + + btnCancel = new PMUI.ui.Button({ + id: "btnCancel", + text: "Cancel".translate(), + handler: function () { + that.clickedClose = false; + that.isDirtyFormInput(); + }, + buttonType: 'error' + }); + btnNew = new PMUI.ui.Button({ + id: "btnNew", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + that.openFormInMainWindow(); + that.method = "POST"; + that.frmInputDocument.reset(); + } + }); + + /* form panel*/ + this.frmInputDocument = new PMUI.form.Form({ + id: "frmInputDocument", + width: 900, + visibleHeader: false, + items: [ + { + pmType: "text", + label: "Title".translate(), + id: "inputDocTitle", + name: "inp_doc_title", + valueType: 'string', + maxLength: 200, + required: true, + controlsWidth: 300 + }, + { + pmType: "dropdown", + name: "inp_doc_form_needed", + id: "inputDocDocumentType", + label: "Document Type".translate(), + value: "VIRTUAL", + controlsWidth: 130, + options: [ + { + value: "VIRTUAL", + label: "Digital".translate() + }, + { + value: "REAL", + label: "Printed".translate() + }, + { + value: "VREAL", + label: "Digital/Printed".translate() + } + ], + onChange: function (newValue, prevValue) { + var fields = that.frmInputDocument.getFields(); + if (newValue != "VIRTUAL") { + fields[2].setVisible(true); + } else { + fields[2].setVisible(false); + } + } + }, + { + pmType: "dropdown", + id: "inputDocDocumentType", + name: "inp_doc_original", + label: "Format".translate(), + value: "ORIGINAL", + controlsWidth: 105, + visible: false, + options: [ + { + value: "ORIGINAL", + label: "Original".translate() + }, + { + value: "COPYLEGAL", + label: "Legal Copy".translate() + }, + { + value: "COPY", + label: "Copy".translate() + } + ] + }, + { + pmType: "textarea", + id: "inputDocDescription", + name: "inp_doc_description", + label: "Description".translate(), + controlsWidth: 380, + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + pmType: "dropdown", + id: "inputDocEnableVersioning", + name: "inp_doc_versioning", + label: "Enable Versioning".translate(), + value: 0, + controlsWidth: 75, + options: [ + { + value: 0, + label: "NO".translate(), + selected: true + }, + { + value: 1, + label: "YES".translate() + } + ] + } + ], + buttonPanelPosition: 'top' + }); + inp_doc_destination_path = new CriteriaField({ + id: "inputDocDestinationPath", + name: "inp_doc_destination_path", + valueType: "string", + label: "Destination Path".translate(), + maxLength: 200, + controlsWidth: 380 + }); + + inp_doc_tags = new CriteriaField({ + id: "inputDocTags", + name: "inp_doc_tags", + valueType: "string", + label: "Tags".translate(), + maxLength: 200, + value: "INPUT", + controlsWidth: 380 + }); + + inp_doc_allowed = new PMUI.field.TextField({ + label: "Allowed file extensions (Use .* to allow any extension)".translate(), + id: "inputDocAllowedFileExtensions", + name: "inp_doc_type_file", + valueType: 'string', + maxLength: 200, + required: true, + value: ".*", + controlsWidth: 380 + + }); + + inp_doc_maximum = new PMUI.field.TextField({ + label: "Maximum file size (Use zero if unlimited)".translate(), + id: "inputDocMaximumFileSize", + name: "inp_doc_max_filesize", + valueType: 'string', + maxLength: 200, + required: true, + value: "0", + controlsWidth: 380, + validators: [ + { + pmType: "regexp", + criteria: /^\d*$/, + errorMessage: "Please enter a positive integer value".translate() + } + ] + + }); + + inp_doc_maximum_unit = new PMUI.field.DropDownListField({ + id: "inputDocUnit", + name: "inp_doc_max_filesize_unit", + label: "Unit".translate(), + value: "ORIGINAL", + controlsWidth: 105, + visible: true, + options: [ + { + value: "KB", + label: "KB".translate() + }, + { + value: "MB", + label: "MB".translate() + } + ] + }); + + that.frmInputDocument.addItem(inp_doc_destination_path); + that.frmInputDocument.addItem(inp_doc_tags); + that.frmInputDocument.addItem(inp_doc_allowed); + that.frmInputDocument.addItem(inp_doc_maximum); + that.frmInputDocument.addItem(inp_doc_maximum_unit); + + /*grid panel*/ + + this.grdpnlInputDocument = new PMUI.grid.GridPanel({ + id: "grdpnlInputDocument", + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'grdpnlInputDocumentButtonShow', + dataType: "button", + title: "", + buttonLabel: "Show ID".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + showUID(data.inp_doc_uid); + } + }, + { + columnData: "inp_doc_title", + title: "Title".translate(), + width: "607px", + alignment: "left", + sortable: true, + alignmentCell: 'left' + }, + { + id: 'grdpnlInputDocumentButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.inputDocumentOriginDataForUpdate = {}; + that.openFormInMainWindow(); + that.inputDocumentFormGetProxy(data.inp_doc_uid); + + } + }, + { + id: 'grdpnlInputDocumentButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + confirmWindow; + confirmWindow = new PMUI.ui.MessageWindow({ + id: "inputMessageWindowWarning", + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Input Documents".translate(), + message: "Do you want to delete this Input Document?".translate(), + footerItems: [ + { + id: 'confirmWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, + { + id: 'confirmWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + that.inputDocumentDeleteRestProxy(data.inp_doc_uid); + confirmWindow.close(); + confirmWindow.close(); + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = "17px"; + confirmWindow.showFooter(); + } + } + ], + dataItems: null + }); + /* main windows */ + this.winMainInputDocument = new PMUI.ui.Window({ + id: "winMainInputDocument", + title: "Input Documents".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: 'bottom', + footerAlign: 'right', + visibleFooter: true, + footerItems: [ + btnCancel, + btnSave + ], + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFormInput(); + } + }); + // add form and grid to windows + this.winMainInputDocument.addItem(this.grdpnlInputDocument); + this.winMainInputDocument.addItem(this.frmInputDocument); + this.winMainInputDocument.open(); + //custom css + this.frmInputDocument.getField("inp_doc_type_file").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_type_file").html.style.float = "left"; + this.frmInputDocument.getField("inp_doc_max_filesize").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_max_filesize").html.style.float = "left"; + this.frmInputDocument.getField("inp_doc_max_filesize_unit").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_max_filesize_unit").html.style.float = "left"; + this.grdpnlInputDocument.setVisible(true); + this.frmInputDocument.setVisible(false); + this.winMainInputDocument.hideFooter(); + /* insert create button to grid*/ + this.grdpnlInputDocument.dom.toolbar.appendChild(btnNew.getHTML()); + btnNew.defineEvents(); + this.inputDocumentsGetRestProxy(); +}; + +(function () { + + var loadValuesStartTimer, openForm, updateStatus; + + PMDesigner.startTimer = function (element) { + + var startTimer = element, + restClient, + loadServerData, + listUsers, + itemsDaly, + itemsWeekly, + loadOptionsRadio, + itemsMonthly, + itemsOneTime, + itemsEvery, + showProperties, + updateCaseScheduler, + buttonCancel, + loadUsers, + loadDataForm, + formCreateCaseScheduler, + schedulerListWindow, + buttonSave, + dataForm; + + loadValuesStartTimer = function ($flag) { + listUsers = []; + dataForm = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + startTimer.ports.get(0).connection.flo_element_dest + '/assignee/all', + method: 'GET' + }, + { + url: 'case-scheduler/' + startTimer.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + listUsers = response[0].response; + dataForm = response[1].response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: [null, 'There are problems loading the Start Timer, please try again.'.translate()] + }); + restClient.executeRestClient(); + if ($flag) { + return listUsers.length; + } + return true; + }; + + updateCaseScheduler = function (data) { + var restProxy = new PMRestClient({ + endpoint: 'case-scheduler/' + startTimer.evn_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + formCreateCaseScheduler.reset(); + schedulerListWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Start Timer updated successfully'.translate(), + messageError: 'There are problems updating the Start Timer, please try again.'.translate(), + flashContainer: document.body + }); + restProxy.executeRestClient(); + }; + + updateStatus = function () { + var status = (typeof dataForm.sch_state !== 'undefined') ? ((dataForm.sch_state === 'ACTIVE') ? 'INACTIVE' : 'ACTIVE') : 'INACTIVE'; + dataForm.sch_state = status; + updateCaseScheduler(dataForm); + }; + + //Items for the form Create and edit Case Scheduler + itemsDaly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + } + ]; + + itemsWeekly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }, + { + id: 'daysoftheweek', + pmType: 'checkbox', + label: 'Select the day(s) of the week below'.translate(), + value: '', + name: 'daysoftheweek', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + id: 'monday', + label: 'Monday'.translate(), + value: '1' + }, + { + id: 'tuesday', + label: 'Tuesday'.translate(), + value: '2' + }, + { + id: 'wednesday', + label: 'Wednesday'.translate(), + value: '3' + }, + { + id: 'thursday', + label: 'Thursday'.translate(), + value: '4' + }, + { + id: 'friday', + label: 'Friday'.translate(), + value: '5' + }, + { + id: 'saturday', + label: 'Saturday'.translate(), + value: '6' + }, + { + id: 'sunday', + label: 'Sunday'.translate(), + value: '7' + } + ] + } + ]; + + loadOptionsRadio = function (newVal) { + var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; + paneldaysofMonth.setVisible(true); + if (newVal === 'dayofmonth') { + paneldaysofMonth.getItems()[0].setVisible(true); + paneldaysofMonth.getItems()[1].setVisible(false); + } else if (newVal === 'day') { + paneldaysofMonth.getItems()[0].setVisible(false); + paneldaysofMonth.getItems()[1].setVisible(true); + } + }; + + itemsMonthly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + datetime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + datetime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + controlsWidth: 580, + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }, + { + pmType: 'panel', + id: 'panelDays', + layout: 'hbox', + items: [ + { + id: 'options', + pmType: 'radio', + label: '', + value: '', + name: 'options', + required: false, + controlPositioning: 'vertical', + maxDirectionOptions: 4, + options: [ + { + id: 'dayMonth', + label: 'Day of month'.translate(), + value: 'dayofmonth' + }, + { + id: 'day', + label: 'The day'.translate(), + value: 'day' + } + ], + onChange: function (newVal, oldVal) { + loadOptionsRadio(newVal); + }, + labelWidth: '46%' + }, + { + pmType: 'panel', + id: 'paneldaysofMonth', + layout: 'vbox', + items: [ + { + id: 'dayoftheMonth', + pmType: 'text', + label: '', + value: '', + placeholder: 'Day of the month (example: 1)'.translate(), + required: false, + name: 'dayMonth', + valueType: 'string' + }, + { + pmType: 'panel', + id: 'panelmonth', + layout: 'hbox', + items: [ + { + id: 'first', + pmType: 'dropdown', + label: '', + value: '', + required: false, + name: 'first', + valueType: 'string', + options: [ + { + label: 'First'.translate(), + value: '1' + }, + { + label: 'Second'.translate(), + value: '2' + }, + { + label: 'Third'.translate(), + value: '3' + }, + { + label: 'Fourth'.translate(), + value: '4' + }, + { + label: 'Last'.translate(), + value: '5' + } + ], + controlsWidth: 100 + }, + { + id: 'day', + pmType: 'dropdown', + label: '', + value: '', + required: false, + name: 'day', + valueType: 'string', + options: [ + { + label: 'Monday'.translate(), + value: '1' + }, + { + label: 'Tuesday'.translate(), + value: '2' + }, + { + label: 'Wednesday'.translate(), + value: '3' + }, + { + label: 'Thursday'.translate(), + value: '4' + }, + { + label: 'Friday'.translate(), + value: '5' + }, + { + label: 'Saturday'.translate(), + value: '6' + }, + { + label: 'Sunday'.translate(), + value: '7' + } + ], + controlsWidth: 100 + } + ] + } + ] + } + ] + }, + { + id: 'months', + pmType: 'checkbox', + label: 'Of the month(s)'.translate(), + value: '', + name: 'months', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'jan', + label: 'Jan'.translate(), + value: '1' + }, + { + id: 'feb', + label: 'Feb'.translate(), + value: '2' + }, + { + id: 'mar', + label: 'Mar'.translate(), + value: '3' + }, + { + id: 'apr', + label: 'Apr'.translate(), + value: '4' + }, + { + id: 'may', + label: 'May'.translate(), + value: '5' + }, + { + id: 'jun', + label: 'Jun'.translate(), + value: '6' + }, + { + id: 'jul', + label: 'Jul'.translate(), + value: '7' + }, + { + id: 'aug', + label: 'Aug'.translate(), + value: '8' + }, + { + id: 'sep', + label: 'Sep'.translate(), + value: '9' + }, + { + id: 'oct', + label: 'Oct'.translate(), + value: '10' + }, + { + id: 'nov', + label: 'Nov'.translate(), + value: '11' + }, + { + id: 'dec', + label: 'Dec'.translate(), + value: '12' + } + ] + } + ]; + + itemsOneTime = [{ + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }]; + + itemsEvery = [{ + id: 'execttime', + pmType: 'text', + label: 'Execute every Hour(s)'.translate(), + value: '', + required: true, + name: 'execttime', + valueType: 'string', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }]; + + showProperties = function (newValue) { + switch (newValue) { + case 'daily': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsDaly); + break; + case 'weekly': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsWeekly); + break; + case 'monthly': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsMonthly); + var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; + paneldaysofMonth.setVisible(false); + formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[0].hideColon(); + paneldaysofMonth.getItems()[0].hideColon(); + paneldaysofMonth.getItems()[1].getItems()[0].hideColon(); + paneldaysofMonth.getItems()[1].getItems()[1].hideColon(); + break; + case 'oneTime': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsOneTime); + break; + case 'every': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsEvery); + validateKeysField(formCreateCaseScheduler.getField('execttime').getControls()[0].getHTML(), ['isnumber', 'iscolon']); + break; + } + }; + + //Form to Edit and create the Case Scheduler + formCreateCaseScheduler = new PMUI.form.Form({ + id: 'formCreateCaseScheduler', + border: false, + visibleHeader: false, + width: '925px', + name: 'formcreate', + title: '', + items: [ + { + id: 'panelProperties', + pmType: 'panel', + layout: 'vbox', + fieldset: true, + height: '350px', + legend: 'Properties'.translate(), + items: [ + { + id: 'state', + pmType: 'dropdown', + label: 'Status'.translate(), + name: 'state', + required: true, + value: '', + controlsWidth: 150, + options: [ + { + value: 'ACTIVE', + label: 'Active'.translate() + }, + { + value: 'INACTIVE', + label: 'Inactive'.translate() + } + ] + }, + { + id: 'username', + pmType: 'dropdown', + label: 'User'.translate(), + name: 'username', + required: true, + controlsWidth: 300, + value: '', + options: [], + onChange: function (newValue, prevValue) { + } + }, + { + id: 'name', + pmType: 'text', + label: 'Name'.translate(), + value: startTimer.evn_name, + required: true, + name: 'name', + visible: false, + valueType: 'string' + }, + { + id: 'performTask', + pmType: 'dropdown', + label: 'Perform this task'.translate(), + name: 'performTask', + required: true, + value: '', + controlsWidth: 300, + options: [ + { + label: '- Select -'.translate(), + value: '', + disabled: true, + selected: true + }, + { + value: 'daily', + label: 'Daily'.translate() + }, + { + value: 'weekly', + label: 'Weekly'.translate() + }, + { + value: 'monthly', + label: 'Monthly'.translate() + }, + { + value: 'oneTime', + label: 'One Time Only'.translate() + }, + { + value: 'every', + label: 'Every'.translate() + } + ], + onChange: function (newValue, prevValue) { + showProperties(newValue); + } + } + ] + }, + { + id: 'panelSelectDate', + pmType: 'panel', + layout: 'vbox', + fieldset: true, + visible: false, + height: '350px', + legend: 'Select the date and time for case(s) to be initiated.'.translate(), + items: [] + } + ] + }); + + buttonCancel = new PMUI.ui.Button({ + id: 'cancelSchedulerButton', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function (event) { + if (formCreateCaseScheduler.isDirty()) { + var message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: 'cancelMessageStartTimer', + title: 'Start Timer Event'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + schedulerListWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + formCreateCaseScheduler.reset(); + schedulerListWindow.close(); + } + } + }); + + //Window Buttons + buttonSave = new PMUI.ui.Button({ + id: 'saveSchedulerButton', + text: 'Save'.translate(), + height: 31, + buttonType: 'success', + handler: function (event) { + if (formCreateCaseScheduler.isValid()) { + var dataFormCreate = formCreateCaseScheduler.getData(); + + var dataToSend = { + sch_del_user_name: dataFormCreate.username, + sch_name: startTimer.evn_name, + tas_uid: startTimer.ports.get(0).connection.flo_element_dest, + sch_start_time: '', + sch_start_date: '', + sch_week_days: '', + sch_start_day: '', + sch_start_day_opt_1: '', + sch_start_day_opt_2: '', + sch_months: '', + sch_end_date: '', + sch_repeat_every: '', + sch_state: (dataFormCreate.state !== '') ? dataFormCreate.state : 'ACTIVE', + sch_option: '' + }; + + var perform = dataFormCreate.performTask; + switch (perform) { + case 'daily': + dataToSend.sch_option = '1'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + break; + case 'weekly': + var formdays = eval(dataFormCreate.daysoftheweek); + var days = ''; + for (i = 0; i < formdays.length; i += 1) { + if (i !== (formdays.length - 1)) { + days += formdays[i] + '|'; + } else { + days += formdays[i]; + } + } + + dataToSend.sch_option = '2'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + dataToSend.sch_week_days = days; + break; + case 'monthly': + dataToSend.sch_option = '3'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + if (dataFormCreate.options === 'dayofmonth') { + var formmonths = eval(dataFormCreate.months); + var months = ''; + for (i = 0; i < formmonths.length; i += 1) { + if (i !== (formmonths.length - 1)) { + months += formmonths[i] + '|'; + } else { + months += formmonths[i]; + } + } + dataToSend.sch_start_day = '1'; //Day of month + dataToSend.sch_start_day_opt_1 = dataFormCreate.dayMonth;//1 to 31 - day of the month + } else if (dataFormCreate.options === 'day') { + var opt2 = dataFormCreate.first + '|' + dataFormCreate.day; + var formmonths = eval(dataFormCreate.months); + var months = ''; + for (i = 0; i < formmonths.length; i += 1) { + if (i !== (formmonths.length - 1)) { + months += formmonths[i] + '|'; + } else { + months += formmonths[i]; + } + } + dataToSend.sch_start_day = '2'; //Day of month + dataToSend.sch_start_day_opt_2 = opt2;//1 to 31 - day of the month + + } + dataToSend.sch_months = months; + break; + case 'oneTime': + dataToSend.sch_option = '4'; + dataToSend.sch_start_time = dataFormCreate.execttime; + break; + case 'every': + dataToSend.sch_option = '5'; + dataToSend.sch_repeat_every = timeToDecimal(dataFormCreate.execttime).toFixed(2); + break; + } + updateCaseScheduler(dataToSend); + } + } + }); + + //load users + loadUsers = function () { + var field = formCreateCaseScheduler.getField('username'); + field.clearOptions(); + for (var i = 0; i < listUsers.length; i += 1) { + field.addOption({ + value: listUsers[i].aas_username, + label: listUsers[i].aas_name + ' ' + listUsers[i].aas_lastname + }); + } + }; + + loadDataForm = function () { + var loadTime, + option, + daysVal, + monthsVal, + monthsop, + days, + i, + startTime, + finallyST, + dataEdit; + + loadTime = function (dataEdit, dataForm) { + var starDate, + startTime, + finallyST, + endDate; + starDate = dataForm.sch_start_date ? dataForm.sch_start_date.split(' ') : ['']; + endDate = dataForm.sch_end_date ? dataForm.sch_end_date.split(' ') : ['']; + + startTime = dataForm.sch_start_time.split(' '); + startTime = startTime[1].split(':'); + finallyST = startTime[0] + ':' + startTime[1]; + dataEdit[4].setValue(starDate[0]); + dataEdit[5].setValue(endDate[0]); + dataEdit[6].setValue(finallyST); + }; + + dataEdit = formCreateCaseScheduler.getFields(); + + dataEdit[0].setValue(dataForm.sch_state); + dataEdit[1].setValue(dataForm.sch_del_user_name); + option = 'daily'; + switch (dataForm.sch_option) { + case '1': + option = 'daily'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + break; + case '2': + option = 'weekly'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + + daysVal = "[\""; + days = dataForm.sch_week_days.split('|'); + for (i = 0; i < days.length; i += 1) { + if (i !== (days.length - 1)) { + daysVal += days[i] + "\",\""; + } else { + daysVal += days[i] + "\"]"; + } + } + dataEdit[7].setValue(daysVal); + break; + case '3': + option = 'monthly'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + days = []; + if (dataForm.sch_start_day !== '') { + days = dataForm.sch_start_day.split('|'); + } + + if (days[0] === '1') { + dataEdit[7].setValue('dayofmonth'); + loadOptionsRadio('dayofmonth'); + dataEdit[8].setValue(days[1]); + } else if (days[0] === '2') { + dataEdit[7].setValue('day'); + loadOptionsRadio('day'); + dataEdit[9].setValue(days[1]); + dataEdit[10].setValue(days[2]); + } + monthsVal = "[\""; + monthsop = dataForm.sch_months.split('|'); + for (i = 0; i < monthsop.length; i += 1) { + if (i !== (monthsop.length - 1)) { + monthsVal += monthsop[i] + "\",\""; + } else { + monthsVal += monthsop[i] + "\"]"; + } + } + dataEdit[11].setValue(monthsVal); + break; + case '4': + option = 'oneTime'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + startTime = dataForm.sch_start_time.split(' '); + startTime = startTime[1].split(':'); + finallyST = startTime[0] + ':' + startTime[1]; + dataEdit[4].setValue(finallyST); + break; + case '5': + option = 'every'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + dataEdit[4].setValue(decimalToTime(parseFloat(dataForm.sch_repeat_every))); + break; + } + }; + + //Main window Case Scheduler + schedulerListWindow = new PMUI.ui.Window({ + id: 'schedulerListWindow', + title: 'Start Timer Event'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: 'top', + buttons: [ + buttonSave, + {pmType: 'label', text: 'or'}, + buttonCancel + ] + }); + + openForm = function () { + schedulerListWindow.addItem(formCreateCaseScheduler); + schedulerListWindow.open(); + loadUsers(); + loadDataForm(); + applyStyleWindowForm(schedulerListWindow); + schedulerListWindow.showFooter(); + schedulerListWindow.defineEvents(); + }; + }; + + PMDesigner.startTimer.openForm = function (element) { + openForm(); + }; + + PMDesigner.startTimer.validate = function (element) { + if (element.ports.isEmpty()) { + PMDesigner.msgFlash('Must connect to a Task'.translate(), document.body, 'error', 3000, 5); + return false; + } + PMDesigner.startTimer(element); + if (loadValuesStartTimer(true) === 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned users'.translate(), document.body, 'info', 3000, 5); + return false; + } + return true; + }; + +}()); +( + function () { + var dataBaseConnectionOption, + winFrmDataBaseConnectionShow, + frmDataBaseConnection, + closeClicked = true; + + PMDesigner.database = function (event) { + var winGrdpnlDataBaseConnection, + panelTest, + grdpnlDataBaseConnection, + flagError, + titleOld, + btnNew, + btnTestConnection, + btnCreate, + btnCancel, + testShow, + isDirtyFrmDataBaseConnection, + showForm, + listDBConnection, + refreshGridPanelInMainWindow, + dataBaseConnectionsGetRestProxy, + dataBaseConnectionPostTestRestProxy, + dataBaseConnectionGetRestProxy, + dataBaseConnectionPutRestProxy, + dataBaseConnectionDeleteRestProxy, + dataBaseConnectionPostRestProxy, + cboEngineSetOptionsRestProxy, + showEncoderOptions, + hideEncoderOptions, + cboConnectionTypeOracleSetOptions, + cboEncodeSetOptionsRestProxy, + winFrmDataBaseConnectionShow, + cboEngine, + txtUID, + cboEncode, + txtTns, + txtServer, + txtDataBaseName, + disableAllItems, + txtUsername, + txtPassword, + txtPort, + btnBack, + txtDescription, + cboConnectionTypeOracle, + dataBaseConnectionData; + + disableAllItems = function () { + winGrdpnlDataBaseConnection.getItems()[0].setVisible(false); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(false); + winGrdpnlDataBaseConnection.getItems()[2].setVisible(false); + + txtUID.setVisible(false); + btnTestConnection.setVisible(false); + btnBack.setVisible(false); + btnCreate.setVisible(false); + btnCancel.setVisible(false); + }; + + testShow = function (testData) { + var msg = "", titleSummary, style, i, flag; + flagError = 0; + disableAllItems(); + titleOld = winGrdpnlDataBaseConnection.getTitle(); + winGrdpnlDataBaseConnection.setTitle("Testing Server Connection".translate()); + winGrdpnlDataBaseConnection.getItems()[2].setVisible(true); + + for (i = 0; i <= testData.length - 1; i += 1) { + flag = (typeof(testData[i].error) != "undefined") ? 1 : 0; + if (flag != 1) { + msg = msg + "" + testData[i].test + "
"; + } else { + msg = msg + "" + testData[i].error + "
"; + } + + if (typeof(testData[i].error) != "undefined" && flagError == 0) { + flagError = 1; + } + } + if (flag == 0) { + btnCreate.setVisible(true); + btnBack.setVisible(true); + } else { + btnBack.setVisible(true); + } + + titleSummary = "
Testing Database Server configuration
"; + + style = $('#panelTest').attr("style"); + titleSummary = titleSummary + "
" + msg + "
"; + $('#panelTest').empty(); + style = style + ' background: #FFFFFF; font: normal 0.8em arial;'; + $('#panelTest').attr("style", style); + $('#panelTest').append(titleSummary); + }; + + isDirtyFrmDataBaseConnection = function () { + var message_window; + $("input,select,textarea").blur(); + if (frmDataBaseConnection.isVisible()) { + if (frmDataBaseConnection.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Database Connections".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + dataBaseConnectionOption = ""; + if (closeClicked) { + winGrdpnlDataBaseConnection.close(); + } + refreshGridPanelInMainWindow(false); + }, + buttonType: "success" + } + ], + title: 'Confirm'.translate() + }); + message_window.open(); + message_window.showFooter(); + } else { + if (closeClicked) { + winGrdpnlDataBaseConnection.close(); + } else { + dataBaseConnectionOption = ""; + refreshGridPanelInMainWindow(false); + } + } + } else { + winGrdpnlDataBaseConnection.close(); + } + }; + showForm = function () { + disableAllItems(); + winGrdpnlDataBaseConnection.setTitle(titleOld); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(true); + btnTestConnection.setVisible(true); + btnCancel.setVisible(true); + } + + refreshGridPanelInMainWindow = function (load) { + disableAllItems(); + winGrdpnlDataBaseConnection.hideFooter(); + dataBaseConnectionOption = ""; + winGrdpnlDataBaseConnection.getItems()[0].setVisible(true); + winGrdpnlDataBaseConnection.setTitle("Database Connections".translate()); + load = load != null ? load : true; + if (load) { + dataBaseConnectionsGetRestProxy(grdpnlDataBaseConnection); + } + }; + + dataBaseConnectionsGetRestProxy = function (grdpnl) { + var restProxy = new PMRestClient({ + endpoint: "database-connections", + typeRequest: "get", + functionSuccess: function (xhr, response) { + listDBConnection = response; + grdpnl.setDataItems(listDBConnection); + grdpnl.sort('dbs_database_name', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPostTestRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/test", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + testShow(response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionGetRestProxy = function (dataBaseConnectionUid) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response; + dataBaseConnectionOption = "PUT"; + winFrmDataBaseConnectionShow("PUT", data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPutRestProxy = function (dataBaseConnectionUid, data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Database connection edited successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + + restProxy.executeRestClient(); + }; + + dataBaseConnectionDeleteRestProxy = function (dataBaseConnectionUid) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "remove", + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Database connection deleted successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + refreshGridPanelInMainWindow(); + }, + messageError: 'An unexpected error while deleting the DB Connection, please try again later.'.translate(), + messageSuccess: 'Database connection saved successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + + restProxy.executeRestClient(); + }; + + cboEngineSetOptionsRestProxy = function (cboEngine, cboEncode) { + cboEngine.clearOptions(); + var restProxy = new PMRestClient({ + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, + i, + arrayOptions = []; + for (i = 0; i <= data.length - 1; i += 1) { + arrayOptions.push( + { + value: data[i].id, + label: data[i].name + } + ); + } + cboEngine.setOptions(arrayOptions); + cboEngine.setValue(arrayOptions[0].value); + cboEncodeSetOptionsRestProxy(cboEngine.getValue(), cboEncode); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.setBaseEndPoint("system/db-engines"); + restProxy.executeRestClient(); + }; + + hideEncoderOptions = function () { + cboEncode.setVisible(true); + cboConnectionTypeOracle.setVisible(true); + }; + + showEncoderOptions = function () { + cboEncode.setVisible(true); + cboConnectionTypeOracle.setVisible(false); + }; + cboConnectionTypeOracleSetOptions = function (cboConnectionTypeOracle) { + var arrayEnconde = [], + i, + arrayOptions = []; + cboConnectionTypeOracle.clearOptions(); + + arrayEnconde = [ + {"value": "NORMAL", "text": "Normal"}, + {"value": "TNS", "text": "TNS"} + ]; + + for (i = 0; i <= arrayEnconde.length - 1; i += 1) { + arrayOptions.push( + { + value: arrayEnconde[i].value, + label: arrayEnconde[i].text + } + ); + } + + cboConnectionTypeOracle.setOptions(arrayOptions); + }; + cboEncodeSetOptionsRestProxy = function (selectedCboEngineValue, cboEncode) { + var arrayEnconde = [], + arrayNewEnconde, + i, + portsDefault, + arrayOptions, + encode = selectedCboEngineValue; + cboEncode.clearOptions(); + + arrayEnconde["mysql"] = [ + {"value": "big5", "text": "big5 - Big5 Traditional Chinese"}, + {"value": "dec8", "text": "dec8 - DEC West European"}, + {"value": "cp850", "text": "cp850 - DOS West European"}, + {"value": "hp8", "text": "hp8 - HP West European"}, + {"value": "koi8r", "text": "koi8r - KOI8-R Relcom Russian"}, + {"value": "latin1", "text": "latin1 - cp1252 West European"}, + {"value": "latin2", "text": "latin2 - ISO 8859-2 Central European"}, + {"value": "swe7", "text": "swe7 - 7bit Swedish"}, + {"value": "ascii", "text": "ascii - US ASCII"}, + {"value": "ujis", "text": "ujis - EUC-JP Japanese"}, + {"value": "sjis", "text": "sjis - Shift-JIS Japanese"}, + {"value": "hebrew", "text": "hebrew - ISO 8859-8 Hebrew"}, + {"value": "tis620", "text": "tis620 - TIS620 Thai"}, + {"value": "euckr", "text": "euckr - EUC-KR Korean"}, + {"value": "koi8u", "text": "koi8u - KOI8-U Ukrainian"}, + {"value": "gb2312", "text": "gb2312 - GB2312 Simplified Chinese"}, + {"value": "greek", "text": "greek - ISO 8859-7 Greek"}, + {"value": "cp1250", "text": "cp1250 - Windows Central European"}, + {"value": "gbk", "text": "gbk - GBK Simplified Chinese"}, + {"value": "latin5", "text": "latin5 - ISO 8859-9 Turkish"}, + {"value": "armscii8", "text": "armscii8 - ARMSCII-8 Armenian"}, + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"}, + {"value": "ucs2", "text": "ucs2 - UCS-2 Unicode"}, + {"value": "cp866", "text": "cp866 - DOS Russian"}, + {"value": "keybcs2", "text": "keybcs2 - DOS Kamenicky Czech-Slovak"}, + {"value": "macce", "text": "macce - Mac Central European"}, + {"value": "macroman", "text": "macroman - Mac West European"}, + {"value": "cp852", "text": "cp852 - DOS Central European"}, + {"value": "latin7", "text": "atin7 - ISO 8859-13 Baltic"}, + {"value": "cp1251", "text": "cp1251 - Windows Cyrillic"}, + {"value": "cp1256", "text": "cp1256 - Windows Arabic"}, + {"value": "cp1257", "text": "cp1257 - Windows Baltic"}, + {"value": "binary", "text": "binary - Binary pseudo charset"}, + {"value": "geostd8", "text": "geostd8 - GEOSTD8 Georgian"}, + {"value": "cp932", "text": "cp932] - SJIS for Windows Japanese"}, + {"value": "eucjpms", "text": "eucjpms - UJIS for Windows Japanese"} + ]; + + arrayEnconde["pgsql"] = [ + {"value": "BIG5", "text": "BIG5"}, + {"value": "EUC_CN", "text": "EUC_CN"}, + {"value": "EUC_JP", "text": "EUC_JP"}, + {"value": "EUC_KR", "text": "EUC_KR"}, + {"value": "EUC_TW", "text": "EUC_TW"}, + {"value": "GB18030", "text": "GB18030"}, + {"value": "GBK", "text": "GBK"}, + {"value": "ISO_8859_5", "text": "ISO_8859_5"}, + {"value": "ISO_8859_6", "text": "ISO_8859_6"}, + {"value": "ISO_8859_7", "text": "ISO_8859_7"}, + {"value": "ISO_8859_8", "text": "ISO_8859_8"}, + {"value": "JOHAB", "text": "JOHAB"}, + {"value": "KOI8", "text": "KOI8"}, + {"value": "selected", "text": "LATIN1"}, + {"value": "LATIN2", "text": "LATIN2"}, + {"value": "LATIN3", "text": "LATIN3"}, + {"value": "LATIN4", "text": "LATIN4"}, + {"value": "LATIN5", "text": "LATIN5"}, + {"value": "LATIN6", "text": "LATIN6"}, + {"value": "LATIN7", "text": "LATIN7"}, + {"value": "LATIN8", "text": "LATIN8"}, + {"value": "LATIN9", "text": "LATIN9"}, + {"value": "LATIN10", "text": "LATIN10"}, + {"value": "SJIS", "text": "SJIS"}, + {"value": "SQL_ASCII", "text": "SQL_ASCII"}, + {"value": "UHC", "text": "UHC"}, + {"value": "UTF8", "text": "UTF8"}, + {"value": "WIN866", "text": "WIN866"}, + {"value": "WIN874", "text": "WIN874"}, + {"value": "WIN1250", "text": "WIN1250"}, + {"value": "WIN1251", "text": "WIN1251"}, + {"value": "WIN1252", "text": "WIN1252"}, + {"value": "WIN1256", "text": "WIN1256"}, + {"value": "WIN1258", "text": "WIN1258"} + ]; + + arrayEnconde["mssql"] = [ + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"} + ]; + + arrayEnconde["oracle"] = [ + {"value": "UTF8", "text": "UTF8 - Unicode 3.0 UTF-8 Universal character set, CESU-8 compliant"}, + {"value": "UTFE", "text": "UTFE - EBCDIC form of Unicode 3.0 UTF-8 Universal character set"}, + {"value": "AL16UTF16", "text": "AL16UTF16 - Unicode 3.1 UTF-16 Universal character set"}, + {"value": "AL32UTF8", "text": "AL32UTF8 - Unicode 3.1 UTF-8 Universal character set"} + ]; + + arrayEnconde["sqlsrv"] = [ + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"} + ]; + + arrayNewEnconde = (typeof(arrayEnconde[encode]) != "undefined") ? arrayEnconde[encode] : []; + arrayOptions = []; + + for (i = 0; i <= arrayNewEnconde.length - 1; i += 1) { + arrayOptions.push( + { + value: arrayNewEnconde[i].value, + label: arrayNewEnconde[i].text + } + ); + } + + cboEncode.setOptions(arrayOptions); + cboEncode.setValue('utf8'); + + portsDefault = ["3306", "5432", "1433", "1521"]; + switch (encode) { + case "mysql": + txtPort.setValue(portsDefault[0]); + showEncoderOptions(); + break; + case "pgsql": + txtPort.setValue(portsDefault[1]); + showEncoderOptions(); + break; + case "mssql": + txtPort.setValue(portsDefault[2]); + showEncoderOptions(); + break; + case "oracle": + txtPort.setValue(portsDefault[3]); + hideEncoderOptions(); + break; + } + }; + + winFrmDataBaseConnectionShow = function (option, data) { + disableAllItems(); + dataBaseConnectionData = data; + frmDataBaseConnection.reset(); + cboEngineSetOptionsRestProxy(cboEngine, cboEncode); + cboConnectionTypeOracleSetOptions(cboConnectionTypeOracle); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(true); + btnTestConnection.setVisible(true); + btnCancel.setVisible(true); + winGrdpnlDataBaseConnection.showFooter(); + + switch (option) { + case "POST": + winGrdpnlDataBaseConnection.setTitle("Create Database Connection".translate()); + frmDataBaseConnection.setTitle(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + txtServer.setVisible(true); + txtServer.setRequired(true); + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + txtPort.setVisible(true); + txtPort.setRequired(true); + txtPort.setValue("3306"); + break; + case "PUT": + winGrdpnlDataBaseConnection.setTitle("Edit Database Connection".translate()); + frmDataBaseConnection.setTitle(""); + txtUID.setVisible(true); + txtUID.setValue(dataBaseConnectionData.dbs_uid); + cboEngine.setValue(dataBaseConnectionData.dbs_type); + cboEncodeSetOptionsRestProxy(dataBaseConnectionData.dbs_type, cboEncode); + cboEncode.setValue(dataBaseConnectionData.dbs_encode); + txtServer.setValue(dataBaseConnectionData.dbs_server); + txtDataBaseName.setValue(dataBaseConnectionData.dbs_database_name); + txtUsername.setValue(dataBaseConnectionData.dbs_username); + txtPassword.setValue(dataBaseConnectionData.dbs_password); + txtPort.setValue(dataBaseConnectionData.dbs_port); + txtDescription.setValue(dataBaseConnectionData.dbs_description); + + if (dataBaseConnectionData.dbs_type == "oracle") { + cboConnectionTypeOracle.setValue(dataBaseConnectionData.dbs_connection_type); + cboConnectionTypeOracle.setVisible(true); + + if (dataBaseConnectionData.dbs_connection_type == "TNS" && dataBaseConnectionData.dbs_tns != "") { + txtTns.setValue(dataBaseConnectionData.dbs_tns); + txtTns.setVisible(true); + txtTns.setRequired(true); + + txtServer.setValue(""); + txtServer.setVisible(false); + txtServer.setRequired(false); + + txtDataBaseName.setValue(""); + txtDataBaseName.setVisible(false); + txtDataBaseName.setRequired(false); + + txtPort.setValue(""); + txtPort.setVisible(false); + txtPort.setRequired(false); + } else { + txtTns.setValue(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + } else { + txtTns.setValue(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + break; + } + frmDataBaseConnection.setFocus(); + }; + + txtUID = new PMUI.field.TextField({ + id: "txtUID", + name: "txtUID", + valueType: "string", + controlsWidth: 300, + label: "UID".translate(), + maxLength: 200, + readOnly: true, + visible: false + }); + + cboEngine = new PMUI.field.DropDownListField({ + id: "cboEngine", + name: "cboEngine", + label: "Engine".translate(), + options: null, + controlsWidth: 150, + onChange: function (newValue, prevValue) { + if (cboEngine.getValue() == "oracle") { + cboConnectionTypeOracleSetOptions(cboConnectionTypeOracle); + } else { + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + + cboEncodeSetOptionsRestProxy(cboEngine.getValue(), cboEncode); + } + }); + + cboEncode = new PMUI.field.DropDownListField({ + id: "cboEncode", + name: "cboEncode", + label: "Encode".translate(), + options: null, + controlsWidth: 300 + }); + + cboConnectionTypeOracle = new PMUI.field.DropDownListField({ + id: "cboConnectionTypeOracle", + name: "cboConnectionTypeOracle", + label: "Select Connection Type".translate(), + options: null, + controlsWidth: 300, + + onChange: function (newValue, prevValue) { + if (cboConnectionTypeOracle.getValue() != "NORMAL") { + txtTns.setVisible(true); + txtTns.setRequired(true); + + txtServer.setVisible(false); + txtServer.setRequired(false); + + txtDataBaseName.setVisible(false); + txtDataBaseName.setRequired(false); + + txtPort.setVisible(false); + txtPort.setRequired(false); + } else { + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setValue("1521"); + txtPort.setVisible(true); + txtPort.setRequired(true); + } + } + }); + + txtTns = new PMUI.field.TextField({ + id: "txtTns", + name: "txtTns", + valueType: "txtTns", + controlsWidth: 300, + label: "TNS".translate(), + maxLength: 200, + visible: false, + required: true + }); + + txtServer = new PMUI.field.TextField({ + id: "txtServer", + name: "txtServer", + valueType: "string", + controlsWidth: 300, + label: "Server".translate(), + maxLength: 200, + required: true + }); + + txtDataBaseName = new PMUI.field.TextField({ + id: "txtDataBaseName", + name: "txtDataBaseName", + valueType: "string", + controlsWidth: 300, + label: "Database Name".translate(), + maxLength: 200, + required: true + }); + + txtUsername = new PMUI.field.TextField({ + id: "txtUsername", + name: "txtUsername", + valueType: "string", + controlsWidth: 300, + label: "Username".translate(), + maxLength: 200, + required: true + }); + + txtPassword = new PMUI.field.PasswordField({ + id: "txtPassword", + name: "txtPassword", + valueType: "string", + controlsWidth: 300, + label: "Password".translate(), + maxLength: 200 + }); + + txtPort = new PMUI.field.TextField({ + id: "txtPort", + name: "txtPort", + valueType: "string", + controlsWidth: 300, + label: "Port".translate(), + value: "3306", + controlsWidth: 300, + maxLength: 200, + required: true + }); + + txtDescription = new PMUI.field.TextAreaField({ + id: "txtDescription", + name: "txtDescription", + valueType: "string", + controlsWidth: 500, + label: "Description".translate(), + height: "200px", + style: {cssClasses: ['mafe-textarea-resize']} + }); + + btnTestConnection = new PMUI.ui.Button({ + id: "btnTestConnection", + text: "Test Connection".translate(), + buttonType: 'success', + handler: function () { + var data; + if (frmDataBaseConnection.isValid()) { + if (cboEngine.getValue() == "oracle") { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_connection_type: cboConnectionTypeOracle.getValue(), + dbs_tns: txtTns.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } else { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } + dataBaseConnectionPostTestRestProxy(data); + } + } + }); + + btnCreate = new PMUI.ui.Button({ + id: "btnCreate", + text: "Save".translate(), + buttonType: "success", + handler: function () { + var data; + if (cboEngine.getValue() == "oracle") { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_connection_type: cboConnectionTypeOracle.getValue(), + dbs_tns: txtTns.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } else { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: txtPassword.getValue(), + dbs_port: parseInt(txtPort.getValue()), + dbs_description: txtDescription.getValue() + }; + } + + switch (dataBaseConnectionOption) { + case "POST": + if (frmDataBaseConnection.isValid()) { + dataBaseConnectionPostRestProxy(data); + } else { + return; + } + break; + case "PUT": + if (frmDataBaseConnection.isValid()) { + dataBaseConnectionPutRestProxy(dataBaseConnectionData.dbs_uid, data); + } else { + return; + } + break; + } + } + }); + + btnCancel = new PMUI.ui.Button({ + id: "btnCancel", + text: "Cancel".translate(), + buttonType: 'error', + handler: function () { + closeClicked = false; + isDirtyFrmDataBaseConnection(); + } + }); + + btnBack = new PMUI.ui.Button({ + id: "btnBack", + text: "Back".translate(), + handler: function () { + showForm(); + } + }); + + frmDataBaseConnection = new PMUI.form.Form({ + id: "frmDataBaseConnection", + width: DEFAULT_WINDOW_WIDTH - 70, + items: [ + txtUID, + cboEngine, + cboEncode, + cboConnectionTypeOracle, + txtTns, + txtServer, + txtDataBaseName, + txtUsername, + txtPassword, + txtPort, + txtDescription + ] + }); + + txtPort.controls[0].onKeyUp = function () { + var txtPortfinalValue, + txtPortValue = getData2PMUI(frmDataBaseConnection.html).txtPort; + if (/\D/.test(txtPortValue)) { + if (isNaN(parseInt(txtPortValue))) { + txtPortfinalValue = ""; + } else { + txtPortfinalValue = parseInt(txtPortValue); + } + txtPort.setValue(txtPortfinalValue); + } + }; + + btnNew = new PMUI.ui.Button({ + id: "btnNew", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + dataBaseConnectionOption = "POST"; + winFrmDataBaseConnectionShow("POST", {}); + } + }); + + grdpnlDataBaseConnection = new PMUI.grid.GridPanel({ + id: "grdpnlDataBaseConnection", + filterable: true, + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'grdpnlDataBaseConnectionButtonShow', + dataType: "button", + title: "", + buttonLabel: "Show ID".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + width: "100px", + onButtonClick: function (row, grid) { + showUID(row.getData().dbs_uid); + } + }, + { + columnData: "dbs_type", + title: "Type".translate(), + width: "100px", + sortable: true, + alignmentCell: 'left' + }, + { + columnData: "dbs_server", + title: "Server".translate(), + width: "155px", + alignmentCell: 'left' + }, + { + columnData: "dbs_database_name", + title: "Database Name".translate(), + width: "160px", + sortable: true, + alignmentCell: 'left' + }, + { + columnData: "dbs_description", + title: "Description".translate(), + width: "200px", + alignmentCell: 'left' + }, + { + id: 'grdpnlDataBaseConnectionButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + dataBaseConnectionGetRestProxy(row.getData().dbs_uid); + } + }, + { + id: 'grdpnlDataBaseConnectionButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + var msgWarning = new PMUI.ui.MessageWindow({ + id: "msgWarning", + title: 'Database Connections'.translate(), + windowMessageType: 'warning', + width: 490, + message: "Do you want to delete this DB Connection?".translate(), + buttons: [ + { + text: "No".translate(), + handler: function () { + msgWarning.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + dataBaseConnectionDeleteRestProxy(data.dbs_uid); + msgWarning.close(); + }, + buttonType: "success" + } + ] + }); + msgWarning.open(); + msgWarning.showFooter(); + } + } + ], + dataItems: null + }); + + panelTest = new PMUI.core.Panel({ + id: 'panelTest', + height: DEFAULT_WINDOW_HEIGHT - 71, + display: 'inline-block' + }); + + winGrdpnlDataBaseConnection = new PMUI.ui.Window({ + id: "winGrdpnlDataBaseConnection", + title: "Database Connections".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + buttonPanelPosition: "bottom", + buttons: [btnCancel, btnBack, btnTestConnection, btnCreate], + onBeforeClose: function () { + closeClicked = true; + isDirtyFrmDataBaseConnection(); + } + }); + + winGrdpnlDataBaseConnection.addItem(grdpnlDataBaseConnection); + winGrdpnlDataBaseConnection.addItem(frmDataBaseConnection); + winGrdpnlDataBaseConnection.addItem(panelTest); + + refreshGridPanelInMainWindow(); + if (typeof listDBConnection !== "undefined") { + winGrdpnlDataBaseConnection.open(); + frmDataBaseConnection.panel.html.style.padding = "10px"; + $('#grdpnlDataBaseConnection .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + winGrdpnlDataBaseConnection.defineEvents(); + applyStyleWindowForm(winGrdpnlDataBaseConnection); + winGrdpnlDataBaseConnection.footer.html.style.textAlign = 'right'; + $(btnNew.getHTML()).css({float: "right"}) + grdpnlDataBaseConnection.dom.toolbar.appendChild(btnNew.getHTML()); + btnNew.defineEvents(); + + disableAllItems(); + winGrdpnlDataBaseConnection.getItems()[0].setVisible(true); + } + }; + + PMDesigner.database.create = function () { + PMDesigner.database(); + dataBaseConnectionOption = "POST"; + winFrmDataBaseConnectionShow("POST", {}); + }; + }() +); + +(function () { + var openTinyInMainWindow, + dataOutPutDocument, + openFormInMainWindow, + messageRequired; + + PMDesigner.output = function (event) { + var winMainOutputDocument, formOutput, rowData, updateOutPut, restClient, isDirtyFormOutput, clickedClose = true, that = this, + setDataRow, + clearDataRow, + getGridOutput, + disableAllItems, + deleteDataRow, + updateOutput, + refreshGridPanelInMainWindow, + openGridPanelInMainWindow, + openFormForEditInMainWindow, + editorTiny, + outputFormDocPdfSecurityOpen, + docMargin, + password, + outputFormDocPdfSecurityOwner, + outputFormDocPdfSecurityEnabled, + btnCloseWindowOutputDoc, + btnSaveWindowOutputDoc, + btnCancelTiny, + newButtonOutput, + gridOutput, + winMainOutputDocument, + btnSaveTiny, + listOutputDocs; + + + setDataRow = function (row) { + dataOutPutDocument = row.getData(); + rowData = row; + }; + + clearDataRow = function () { + dataOutPutDocument = ''; + rowData = ''; + }; + + isDirtyFormOutput = function () { + var message_window; + $("input,select,textarea").blur(); + if (formOutput.isVisible()) { + if (formOutput.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: "Output Documents".translate(), + windowMessageType: "warning", + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + clearDataRow(); + message_window.close(); + if (clickedClose) { + tinymce.EditorManager.execCommand('mceRemoveControl', true, 'tinyeditor'); + winMainOutputDocument.close(); + } else { + clearDataRow(); + openGridPanelInMainWindow(); + } + + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + clearDataRow(); + if (clickedClose) { + tinymce.EditorManager.execCommand('mceRemoveControl', true, 'tinyeditor'); + winMainOutputDocument.close() + } else { + openGridPanelInMainWindow(); + } + } + } else { + winMainOutputDocument.close(); + } + }; + getGridOutput = function () { + var restClientGet = new PMRestClient({ + endpoint: 'output-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listOutputDocs = response; + gridOutput.setDataItems(listOutputDocs); + gridOutput.sort('out_doc_title', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + restClientGet.executeRestClient(); + }; + + disableAllItems = function () { + winMainOutputDocument.hideFooter(); + formOutput.reset(); + + winMainOutputDocument.getItems()[0].setVisible(false); + winMainOutputDocument.getItems()[1].setVisible(false); + for (var i = 0; i <= winMainOutputDocument.getItems()[1].getItems().length - 1; i += 1) { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(false); + } + btnSaveWindowOutputDoc.setVisible(false); + btnCloseWindowOutputDoc.setVisible(false); + btnSaveTiny.setVisible(false); + btnCancelTiny.setVisible(false); + + winMainOutputDocument.footer.getItems()[2].setVisible(false); + }; + + refreshGridPanelInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + winMainOutputDocument.setTitle("Output Documents".translate()); + getGridOutput(); + }; + + openGridPanelInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + winMainOutputDocument.setTitle("Output Documents".translate()); + $(winMainOutputDocument.body).removeClass("pmui-background"); + }; + + openFormInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.showFooter(); + winMainOutputDocument.getItems()[1].setVisible(true); + for (var i = 0; i < winMainOutputDocument.getItems()[1].getItems().length; i += 1) { + if (winMainOutputDocument.getItems()[1].getItems()[i].type !== "PMTinyField") { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(true); + } + } + btnSaveWindowOutputDoc.setVisible(true); + btnCloseWindowOutputDoc.setVisible(true); + winMainOutputDocument.footer.getItems()[2].setVisible(true); + password.setVisible(false); + winMainOutputDocument.setTitle("Create Output Document".translate()); + winMainOutputDocument.setHeight(520); + formOutput.panel.style.addProperties({padding: '20px 10px'}); + formOutput.setFocus(); + + }; + + openFormForEditInMainWindow = function (outputDocumentData) { + disableAllItems(); + winMainOutputDocument.showFooter(); + btnSaveWindowOutputDoc.setVisible(true); + btnCloseWindowOutputDoc.setVisible(true); + winMainOutputDocument.footer.getItems()[1].setVisible(false); + formOutput.setWidth(700); + winMainOutputDocument.getItems()[1].setVisible(true); + winMainOutputDocument.setTitle("Edit Output Document".translate()); + $(winMainOutputDocument.body).addClass("pmui-background"); + for (var i = 0; i < winMainOutputDocument.getItems()[1].getItems().length; i += 1) { + if (winMainOutputDocument.getItems()[1].getItems()[i].type !== "PMTinyField") { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(true); + } + } + + password.setVisible(false); + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + var dataEdit = formOutput.getFields(); + dataEdit[0].setValue(dataOutPutDocument['out_doc_title']); + dataEdit[1].setValue(dataOutPutDocument['out_doc_filename']); + dataEdit[2].setValue(dataOutPutDocument['out_doc_description']); + dataEdit[3].setValue(dataOutPutDocument['out_doc_report_generator']); + dataEdit[4].setValue(dataOutPutDocument['out_doc_media']); + dataEdit[5].setValue(dataOutPutDocument['out_doc_landscape']); + dataEdit[6].setValue(dataOutPutDocument['out_doc_left_margin']); + dataEdit[7].setValue(dataOutPutDocument['out_doc_right_margin']); + dataEdit[8].setValue(dataOutPutDocument['out_doc_top_margin']); + dataEdit[9].setValue(dataOutPutDocument['out_doc_bottom_margin']); + dataEdit[10].setValue(dataOutPutDocument['out_doc_generate']); + + if (dataOutPutDocument["out_doc_generate"] != "DOC") { + dataEdit[11].setVisible(true); + } else { + dataEdit[11].setVisible(false); + } + + dataEdit[11].setValue(dataOutPutDocument['out_doc_pdf_security_enabled']); + if (dataOutPutDocument['out_doc_pdf_security_enabled'] != 0) { + password.setVisible(true); + } + dataEdit[12].setValue(dataOutPutDocument['out_doc_pdf_security_open_password']); + dataEdit[13].setValue(dataOutPutDocument['out_doc_pdf_security_owner_password']); + + dataOutPutDocument['out_doc_pdf_security_permissions'] = dataOutPutDocument['out_doc_pdf_security_permissions'].split("|"); + dataEdit[14].setValue(JSON.stringify(dataOutPutDocument['out_doc_pdf_security_permissions'])); + + dataEdit[15].setValue(dataOutPutDocument['out_doc_versioning']); + dataEdit[16].setValue(dataOutPutDocument['out_doc_destination_path']); + dataEdit[17].setValue(dataOutPutDocument['out_doc_tags']); + dataEdit[18].setValue(dataOutPutDocument["out_doc_open_type"]); + } + winMainOutputDocument.setHeight(520); + formOutput.panel.style.addProperties({padding: '20px 10px'}); + formOutput.setFocus(); + }; + + openTinyInMainWindow = function (outputDocumentData) { + //Fix for IE11 + var isIe11 = /Trident\/7\.0;.*rv\s*\:?\s*11/.test(navigator.userAgent); + + if (isIe11) { + tinyMCE.isGecko = false; + } + + //Set TinyMCE + disableAllItems(); + winMainOutputDocument.showFooter(); + tinyEditorField = 13; + winMainOutputDocument.getItems()[1].setVisible(true); + winMainOutputDocument.getItems()[1].getItems()[tinyEditorField].setVisible(true); + formOutput.setWidth(890); + btnSaveTiny.setVisible(true); + btnCancelTiny.setVisible(true); + if (!editorTiny.isInitialized) { + editorTiny.createHTML(); + editorTiny.setParameterTiny(); + editorTiny.isInitialized = true; + } else { + tinyMCE.execCommand('mceFocus', false, 'tinyeditor'); + } + var dataEdit = formOutput.getFields(); + winMainOutputDocument.setTitle("Edit Output Document".translate()); + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + dataOutPutDocument['out_doc_template'] = (dataOutPutDocument['out_doc_template'] != null) ? dataOutPutDocument['out_doc_template'] : ' '; + dataEdit[19].setValue(dataOutPutDocument['out_doc_template']); + dataEdit[19].setValueTiny(dataOutPutDocument['out_doc_template']); + dataEdit[19].setHeight(425); + + dataEdit[18].setVisible(false); + dataEdit[19].setVisible(true); + } + formOutput.panel.style.addProperties({padding: '0px 10px'}); + winMainOutputDocument.setHeight(520); + if (!editorTiny.isInitialized) + tinymce.execCommand('mceFocus', false, 'tinyeditor'); + }; + + deleteDataRow = function () { + confirmWindow = new PMUI.ui.MessageWindow({ + id: "outputMessageWindowWarning", + windowMessageType: 'warning', + bodyHeight: 'auto', + width: 490, + title: "Output Documents".translate(), + message: "Do you want to delete this Output Document?".translate(), + footerItems: [ + { + id: 'confirmWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + id: 'confirmWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + var restClient; + confirmWindow.close(); + restClient = new PMRestClient({ + endpoint: "output-document/" + dataOutPutDocument.out_doc_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems deleting the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document deleted successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + }, + buttonType: "success" + }, + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = "17px"; + confirmWindow.showFooter(); + }; + + updateOutput = function (data) { + dataOutPutDocument = ''; + var restClientUpdate = new PMRestClient({ + endpoint: "output-document/" + data.out_doc_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + dataOutPutDocument = data; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document edited successfully'.translate(), + flashContainer: gridOutput + }); + restClientUpdate.executeRestClient(); + }; + + editorTiny = new PMTinyField({ + id: 'outputEditorTiny', + theme: "advanced", + plugins: "advhr,advimage,advlink,advlist,autolink,autoresize,contextmenu,directionality,emotions,example,example_dependency,fullpage,fullscreen,iespell,inlinepopups,insertdatetime,layer,legacyoutput,lists,media,nonbreaking,noneditable,pagebreak,paste,preview,print,save,searchreplace,style,tabfocus,table,template,visualblocks,visualchars,wordcount,xhtmlxtras,pmSimpleUploader,pmVariablePicker,style", + mode: "specific_textareas", + editorSelector: "tmceEditor", + widthTiny: DEFAULT_WINDOW_WIDTH - 58, + heightTiny: DEFAULT_WINDOW_HEIGHT - 100, + directionality: 'ltr', + verifyHtml: false, + themeAdvancedButtons1: "pmSimpleUploader,|,pmVariablePicker,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect,|,cut,copy,paste,|,bullist,numlist,|,outdent,indent,blockquote", + themeAdvancedButtons2: "tablecontrols,|,undo,redo,|,link,unlink,image,|,forecolor,backcolor,styleprops,|,hr,removeformat,visualaid,|,sub,sup,|,ltr,rtl,|,code", + popupCss: "/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css", + contentCss: "/css/fonts.css,/fonts/styles.php", + themeAdvancedFonts: tcPdfFonts, + skin: "o2k7", + skin_variant: "silver" + }); + + docMargin = new PMUI.form.FormPanel({ + fieldset: true, + layout: 'hbox', + legend: "Margin".translate(), + items: [ + { + pmType: 'panel', + proportion: 0.7 + }, + { + pmType: "panel", + layout: 'vbox', + items: [ + { + id: 'outputDocMarginLeft', + pmType: "text", + label: "Left".translate(), + required: true, + value: 20, + name: "out_doc_left_margin", + controlsWidth: 50, + labelWidth: '35%' + }, { + id: 'outputDocMarginRight', + pmType: "text", + label: "Right".translate(), + required: true, + value: 20, + name: "out_doc_right_margin", + controlsWidth: 50, + labelWidth: '35%' + } + ] + }, + { + pmType: "panel", + layout: 'vbox', + proportion: 1.5, + items: [ + { + id: 'outputDocMarginTop', + pmType: "text", + label: "Top".translate(), + required: true, + value: 20, + name: "out_doc_top_margin", + controlsWidth: 50, + labelWidth: '27%' + }, { + id: 'outputDocMarginBottom', + pmType: "text", + label: "Bottom".translate(), + required: true, + value: 20, + name: "out_doc_bottom_margin", + controlsWidth: 50, + labelWidth: '27%' + } + ] + } + ] + }); + + //Field "Open Password - Owner Password" + outputFormDocPdfSecurityOpen = new PMUI.field.PasswordField({ + id: "outputFormDocPdfSecurityOpen", + name: "out_doc_pdf_security_open_password", + value: "", + label: "Open Password ".translate(), + required: true, + controlsWidth: 300 + }); + + outputFormDocPdfSecurityOwner = new PMUI.field.PasswordField({ + id: "outputFormDocPdfSecurityOwner", + name: "out_doc_pdf_security_owner_password", + value: "", + label: "Owner Password ".translate(), + required: true, + controlsWidth: 300 + + }); + + password = new PMUI.form.FormPanel({ + width: 500, + height: 130, + fieldset: true, + visible: false, + legend: "", + items: [ + { + pmType: "panel", + layout: 'vbox', + items: [ + outputFormDocPdfSecurityOpen, + outputFormDocPdfSecurityOwner + ] + }, + { + pmType: "panel", + layout: 'vbox', + items: [ + { + id: 'outputFormDocPdfSecurityPermissions', + pmType: 'checkbox', + label: "Allowed Permissions".translate(), + value: '', + name: 'out_doc_pdf_security_permissions', + required: false, + controlPositioning: 'horizontal', + separator: "|", + maxDirectionOptions: 4, + options: [ + { + id: 'monday', + label: "print".translate(), + value: 'print' + }, + { + id: 'monday', + label: "modify".translate(), + value: 'modify' + }, + { + id: 'monday', + label: "copy".translate(), + value: 'copy' + }, + { + id: 'monday', + label: "forms".translate(), + value: 'forms' + } + + ] + } + ] + } + ], + layout: "vbox" + }); + + //Field "PDF security" + outputFormDocPdfSecurityEnabled = new PMUI.field.DropDownListField({ + id: "outputDocDPFSecurity", + name: "out_doc_pdf_security_enabled", + label: "PDF security".translate(), + labelWidth: "27%", + valueType: "number", + visible: false, + + options: [ + { + value: 0, + label: "Disabled".translate(), + selected: true + }, + { + value: 1, + label: "Enabled".translate() + + } + ], + + controlsWidth: 100, + + onChange: function (newValue, prevValue) { + var visible = true; + + if (newValue == 0) { + visible = false; + + outputFormDocPdfSecurityOpen.setValue(""); + outputFormDocPdfSecurityOwner.setValue(""); + } + + password.setVisible(visible); + } + }); + + //the form is 700px width, but with the tiny grows to 890 + formOutput = new PMUI.form.Form({ + id: 'outputForm', + name: 'outputForm', + fieldset: true, + title: "", + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 43, + items: [ + { + id: 'outputDocTitle', + pmType: "text", + name: 'out_doc_title', + label: "Title".translate(), + labelWidth: '27%', + controlsWidth: 300, + required: true + }, + new CriteriaField({ + id: 'outputDocFilenameGenerated', + pmType: "text", + name: 'out_doc_filename', + label: "Filename generated".translate(), + labelWidth: '27%', + controlsWidth: 300, + required: true + }), + { + id: 'outputDocDescription', + pmType: "textarea", + name: 'out_doc_description', + label: "Description".translate(), + labelWidth: '27%', + controlsWidth: 500, + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: 'outputDocReportGenerator', + pmType: "dropdown", + name: 'out_doc_report_generator', + label: "Report Generator".translate(), + labelWidth: '27%', + require: true, + controlsWidth: 165, + options: [ + { + label: "TCPDF".translate(), + value: "TCPDF" + }, + { + label: "HTML2PDF (Old Version)".translate(), + value: "HTML2PDF" + } + ], + value: "TCPDF" + }, + { + id: 'outputDocMedia', + pmType: "dropdown", + name: 'out_doc_media', + label: "Media".translate(), + labelWidth: '27%', + controlsWidth: 165, + options: [ + {label: "Letter".translate(), value: "Letter"}, + {label: "Legal".translate(), value: "Legal"}, + {label: "Executive".translate(), value: "Executive"}, + {label: "B5".translate(), value: "B5"}, + {label: "Folio".translate(), value: "Folio"}, + {label: "A0Oversize".translate(), value: "A0Oversize"}, + {label: "A0".translate(), value: "A0"}, + {label: "A1".translate(), value: "A1"}, + {label: "A2".translate(), value: "A2"}, + {label: "A3".translate(), value: "A3"}, + {label: "A4".translate(), value: "A4"}, + {label: "A5".translate(), value: "A5"}, + {label: "A6".translate(), value: "A6"}, + {label: "A7".translate(), value: "A7"}, + {label: "A8".translate(), value: "A8"}, + {label: "A9".translate(), value: "A9"}, + {label: "A10", value: "A10"}, + {label: "Screenshot640".translate(), value: "SH640"}, + {label: "Screenshot800".translate(), value: "SH800"}, + {label: "Screenshot1024".translate(), value: "SH1024"} + ] + }, + { + id: 'outputDocOrientation', + pmType: "dropdown", + name: 'out_doc_landscape', + labelWidth: '27%', + label: "Orientation".translate(), + controlsWidth: 165, + options: [ + { + label: "Portrait".translate(), + selected: true, + value: 0 + }, + { + label: "Landscape".translate(), + value: 1 + } + ], + valueType: 'number' + }, + docMargin, + { + id: 'outputDocToGenerate', + pmType: "dropdown", + name: 'out_doc_generate', + controlsWidth: 70, + labelWidth: '27%', + label: "Output Document to Generate".translate(), + options: [ + { + label: "Both".translate(), + value: "BOTH" + }, + { + label: "Doc".translate(), + value: "DOC" + }, + { + label: "Pdf".translate(), + value: "PDF" + } + ], + value: "BOTH", + onChange: function (newValue, prevValue) { + if (newValue == "DOC") { + formOutput.getFields()[11].setVisible(false); + outputFormDocPdfSecurityEnabled.setVisible(false); + outputFormDocPdfSecurityEnabled.setValue(0); + password.setVisible(false); + outputFormDocPdfSecurityOpen.setValue(""); + outputFormDocPdfSecurityOwner.setValue(""); + } else { + formOutput.getFields()[11].setVisible(true); + } + } + }, + outputFormDocPdfSecurityEnabled, + password, + { + id: 'outputDocEnableVersioning', + pmType: "dropdown", + name: "out_doc_versioning", + controlsWidth: 70, + labelWidth: '27%', + label: 'Enable versioning'.translate(), + options: [ + { + label: "Yes".translate(), + value: 1 + }, + { + label: "No".translate(), + selected: true, + value: 0 + } + ], + valueType: 'number' + }, + new CriteriaField({ + id: 'outputDocDestinationPath', + pmType: "text", + name: "out_doc_destination_path", + labelWidth: '27%', + label: "Destination Path".translate(), + controlsWidth: 340 + }), + new CriteriaField({ + id: 'outputDocTags', + pmType: "text", + name: "out_doc_tags", + labelWidth: '27%', + label: "Tags".translate(), + controlsWidth: 340 + }), + { + id: "outputDocGenerateFileLink", + name: "cboByGeneratedFile", + pmType: "dropdown", + controlsWidth: 155, + labelWidth: "27%", + label: "By clicking on the generated file link".translate(), + + options: [ + { + value: 0, + label: "Open the file".translate() + }, + { + label: "Download the file".translate(), + value: 1, + selected: true + } + ], + + valueType: "number" + } + ], + style: { + cssProperties: { + marginLeft: '20px' + } + } + }); + + formOutput.style.addProperties({marginLeft: '20px'}); + gridOutput = new PMUI.grid.GridPanel({ + id: 'gridOutput', + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'gridOutputButtonShow', + title: '', + dataType: 'button', + buttonLabel: 'Show ID'.translate(), + columnData: "out_doc_uid", + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + showUID(data.out_doc_uid); + } + }, + { + title: 'Title'.translate(), + dataType: 'string', + width: '392px', + alignment: "left", + columnData: "out_doc_title", + sortable: true, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: '100px', + alignmentCell: 'left', + columnData: "out_doc_type", + sortable: true + }, + { + id: 'gridOutputButtonEdit', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + buttonLabel: 'Edit'.translate(), + onButtonClick: function (row, grid) { + messageRequired.hide(); + setDataRow(row); + openFormForEditInMainWindow(); + } + }, + { + id: 'gridOutputButtonProperties', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + buttonLabel: 'Open Editor'.translate(), + onButtonClick: function (row, grid) { + setDataRow(row); + openTinyInMainWindow(row); + } + }, + { + id: 'gridOutputButtonDelete', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + setDataRow(row); + deleteDataRow(); + } + } + ] + }); + + btnSaveWindowOutputDoc = new PMUI.ui.Button({ + id: 'btnSaveWindowOutputDoc', + text: "Save".translate(), + handler: function () { + var dataAux = getData2PMUI(formOutput.html); + if (dataAux.out_doc_title != "" && dataAux.out_doc_filename != "") { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + itemOutPut = getData2PMUI(formOutput.html); + } else { + itemOutPut = formOutput.getData(); + } + + itemOutPut['out_doc_type'] = "HTML"; + + var items = jQuery.parseJSON(itemOutPut['out_doc_pdf_security_permissions']); + itemOutPut['out_doc_pdf_security_permissions'] = ''; + for (var i = 0; i < items.length; i += 1) { + itemOutPut['out_doc_pdf_security_permissions'] += (i == 0) ? items[i] : '|' + items[i]; + } + + itemOutPut["out_doc_landscape"] = parseInt(itemOutPut["out_doc_landscape"]); + itemOutPut["out_doc_pdf_security_enabled"] = parseInt(itemOutPut["out_doc_pdf_security_enabled"]); + itemOutPut["out_doc_versioning"] = parseInt(itemOutPut["out_doc_versioning"]); + itemOutPut["out_doc_open_type"] = parseInt(getData2PMUI(formOutput.html).cboByGeneratedFile); + + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + itemOutPut['out_doc_uid'] = dataOutPutDocument.out_doc_uid; + restClient = new PMRestClient({ + endpoint: "output-document/" + dataOutPutDocument.out_doc_uid, + typeRequest: 'update', + data: itemOutPut, + functionSuccess: function (xhr, response) { + dataOutPutDocument = itemOutPut; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document edited successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + } else { + if (1 === parseInt(dataAux.out_doc_pdf_security_enabled) && (dataAux.out_doc_pdf_security_open_password.trim() === "" || dataAux.out_doc_pdf_security_owner_password.trim() === "")) { + password.getItems()[0].getItems()[0].isValid(); + password.getItems()[0].getItems()[1].isValid(); + return false; + } + itemOutPut['out_doc_uid'] = ''; + restClient = new PMRestClient({ + endpoint: "output-document", + typeRequest: 'post', + data: itemOutPut, + functionSuccess: function (xhr, response) { + dataOutPutDocument = itemOutPut; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems saved the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document saved successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + } + clearDataRow(); + } else { + formOutput.getField("out_doc_title").isValid(); + formOutput.getField("out_doc_filename").isValid(); + } + }, + buttonType: 'success' + }); + + btnCloseWindowOutputDoc = new PMUI.ui.Button({ + id: 'btnCloseWindowOutputDoc', + text: "Cancel".translate(), + handler: function () { + clickedClose = false; + isDirtyFormOutput(); + }, + buttonType: 'error' + }); + + newButtonOutput = new PMUI.ui.Button({ + id: 'outputButtonNew', + text: 'Create'.translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + clearDataRow(); + openFormInMainWindow(); + } + }); + + btnCancelTiny = new PMUI.ui.Button({ + id: 'btnCloseTiny', + text: 'Cancel'.translate(), + handler: function () { + /*if (typeof dataOutPutDocument['externalType'] != 'undefined' && dataOutPutDocument['externalType']) { + winMainOutputDocument.close(); + return; + }*/ + PMDesigner.hideAllTinyEditorControls(); + clickedClose = false; + isDirtyFormOutput(); + }, + buttonType: 'error' + }); + + btnSaveTiny = new PMUI.ui.Button({ + id: 'btnSaveTiny', + text: 'Save'.translate(), + handler: function () { + PMDesigner.hideAllTinyEditorControls(); + dataOutPutDocument['out_doc_template'] = tinyMCE.activeEditor.getContent(); + updateOutput(dataOutPutDocument); + if (typeof dataOutPutDocument['externalType'] != 'undefined' && dataOutPutDocument['externalType']) { + winMainOutputDocument.close(); + return; + } + clearDataRow(); + refreshGridPanelInMainWindow(); + }, + buttonType: 'success' + }); + + winMainOutputDocument = new PMUI.ui.Window({ + id: "winMainOutputDocument", + title: "Output Documents".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: "bottom", + onBeforeClose: function () { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = true; + isDirtyFormOutput(); + }, + footerItems: [ + btnCancelTiny, + btnSaveTiny, + btnCloseWindowOutputDoc, + btnSaveWindowOutputDoc] + }); + + formOutput.addItem(editorTiny); + formOutput.footer.setVisible(false); + + winMainOutputDocument.addItem(gridOutput); + winMainOutputDocument.addItem(formOutput); + + refreshGridPanelInMainWindow(); + + validateKeysField(docMargin.getField('out_doc_left_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_right_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_top_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_bottom_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + + if (typeof listOutputDocs !== "undefined") { + winMainOutputDocument.open(); + $('#gridOutput .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + messageRequired = $(document.getElementById("requiredMessage")); + applyStyleWindowForm(winMainOutputDocument); + + editorTiny.isInitialized = false; + winMainOutputDocument.footer.html.style.textAlign = 'right'; + + gridOutput.dom.toolbar.appendChild(newButtonOutput.getHTML()); + newButtonOutput.defineEvents(); + winMainOutputDocument.defineEvents(); + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + } + }; + + PMDesigner.output.showTiny = function (uid) { + getItemdOutput = function () { + var restClientGet = new PMRestClient({ + endpoint: 'output-document/' + uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + dataOutPutDocument = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + restClientGet.executeRestClient(); + }; + getItemdOutput(); + dataOutPutDocument['externalType'] = true; + openTinyInMainWindow(dataOutPutDocument); + }; + + PMDesigner.output.create = function () { + openFormInMainWindow(); + }; +}()); + +( + function () { + var iframeRT, + reportWindow, + pathSrc; + + PMDesigner.reporttable = function (event) { + reportWindow = new PMUI.ui.Window({ + id: 'reportTableWindow', + title: "Report Tables".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT + }); + + pathSrc = window.parent.location; + + iframeRT = new PMIframe({ + id: 'reporTableIframe', + src: window.location.href.split("/")[0] + "//" + pathSrc.host + "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/pmTables?PRO_UID=" + PMDesigner.project.id + "&flagProcessmap=1", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 36, + scrolling: 'no', + frameborder: '0' + }); + + reportWindow.addItem(iframeRT); + reportWindow.open(); + reportWindow.setBodyPadding(0); + }; + + PMDesigner.reporttable.create = function () { + pathSrc = window.parent.location; + reportWindow.clearItems(); + iframeRT = new PMIframe({ + id: 'reporTableIframe', + src: window.location.href.split("/")[0] + "//" + pathSrc.host + "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/pmTables/edit?PRO_UID=" + PMDesigner.project.id + "&tableType=report&flagProcessmap=1", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 36, + scrolling: 'no', + frameborder: '0' + }); + reportWindow.addItem(iframeRT); + reportWindow.open(); + reportWindow.setBodyPadding(0); + } + + }() +); +(function () { + $ctrlSpaceMessage = $("

" + "Press".translate() + " ctrl+space " + "to get the function list".translate() + ".

"); + var btnCopyImport, openFormCustom, formEditTriggerCustom; + var triggerOriginDataForUpdate = {}; + PMDesigner.trigger = function (event) { + var listTriggers, + clickedClose = true, + message_ErrorWindow, + flagChanges, + isDirtyFormTrigger, + gridListTrigger, + getListTrigger, + addNumberTriggerWizard, + newTriggerOptions, + allTreesItems, + buttonNew, + buttonCopy, + buttonWizard, + openListTriggers, + openFormWizard, + openFormWizardEditMode, + openFormCopy, + openFormEditCode, + openNewTriggerOptions, + listProjects, + getListProjects, + triggerSelectedData, + formCopyTrigger, + codMirr, + formEditTriggerWizard, + sepInputs, + labelInputs, + paramPanel, + sepOutputs, + labelOutputs, + returnPanel, + parameterItems, + returnItems, + treeNewTrigger, + accordionNewTrigger, + updateCustom, + checkIfValuesAreEqual, + buttonSave, + copyButton, + applyButton, + btnEditSourceCode, + buttonCancel, + editCode, + formEditCode, + triggerWindow, + formcustom; + + message_ErrorWindow = new PMUI.ui.MessageWindow({ + id: "errorMessage", + width: 490, + windowMessageType: 'error', + title: "Triggers".translate(), + message: "This is an error message.".translate(), + footerItems: [ + { + text: 'OK'.translate(), + handler: function () { + message_ErrorWindow.close(); + }, + buttonType: "success" + } + ] + }); + + isDirtyFormTrigger = function () { + $("input,select,textarea").blur(); + $("div.pmui-window-body.pmui-background").css('overflow', ''); + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + var accordionnewtrigger = triggerWindow.getItems()[5]; + var flag = false; + + var finalData = { + tri_uid: getData2PMUI(formEditTriggerCustom.html).uid, + tri_title: getData2PMUI(formEditTriggerCustom.html).title, + tri_description: getData2PMUI(formEditTriggerCustom.html).description, + tri_webbot: getData2PMUI(formEditTriggerCustom.html).code + }; + + if (formcustom.isVisible() == true) { + flag = (checkIfValuesAreEqual(triggerOriginDataForUpdate, finalData)) ? false : true; + } else if (formwizard.isVisible() == true) { + flag = formEditTriggerWizard.isDirty(); + } else if (formcopy.isVisible() == true) { + flag = formCopyTrigger.isDirty(); + if (!flag) { + $('.ctrlSpaceMessage').remove(); + } + } else if (formeditcode.isVisible() == true) { + flag = formeditcode.isDirty(); + var flagFormCustom = (checkIfValuesAreEqual(triggerOriginDataForUpdate, finalData)) ? false : true; + if (!flag && formeditcode.getItems()[0].controls[0].value != "" || flagFormCustom) { + flag = true; + } + } + + if (flag == true) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + title: "Triggers".translate(), + windowMessageType: 'warning', + width: 490, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, { + text: "Yes".translate(), + handler: function () { + triggerOriginDataForUpdate = {}; + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + + if (formcustom.isVisible() == true) { + var uidInForm = formEditTriggerCustom.getFields()[0].getValue(); + formEditTriggerCustom.reset(); + openListTriggers(); + } else if (formwizard.isVisible() == true) { + var uidInForm = formEditTriggerWizard.getFields()[0].getValue(); + formEditTriggerWizard.reset(); + openListTriggers(); + } else if (formcopy.isVisible() == true) { + $('.ctrlSpaceMessage').remove(); + formCopyTrigger.reset(); + openListTriggers(); + } else if (formeditcode.isVisible() == true) { + formeditcode.reset(); + openFormCustom("Edit".translate()); + } + message_window.close(); + if (clickedClose) { + triggerWindow.close(); + } + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + var accordionnewtrigger = triggerWindow.getItems()[5]; + + if (formcustom.isVisible() == true) { + var uidInForm = formEditTriggerCustom.getFields()[0].getValue(); + formEditTriggerCustom.reset(); + openListTriggers(); + } else if (formwizard.isVisible() == true) { + var uidInForm = formEditTriggerWizard.getFields()[0].getValue(); + formEditTriggerWizard.reset(); + openListTriggers(); + } else if (formcopy.isVisible() == true) { + formCopyTrigger.reset(); + openListTriggers(); + } else if (formeditcode.isVisible() == true) { + formeditcode.reset(); + openFormCustom("Edit".translate()); + } else if (accordionnewtrigger.isVisible() == true) { + openListTriggers(); + } + if (clickedClose) { + triggerWindow.close(); + } + } + }; + //GRID List Case Scheduler + gridListTrigger = new PMUI.grid.GridPanel({ + id: "listTriggers", + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'listTriggersButtonShow', + title: '', + dataType: 'button', + searchable: false, + buttonLabel: 'Show ID'.translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + id: 'copyuid', + onButtonClick: function (row, grid) { + var dataRow = row.getData(); + messageWindow = new PMUI.ui.MessageWindow({ + id: 'dynaformMessageWindowUID', + windowMessageType: 'info', + width: 490, + title: "Triggers".translate(), + message: dataRow.tri_uid, + footerItems: [ + { + text: 'OK'.translate(), + handler: function () { + messageWindow.close(); + }, + buttonType: "success" + } + ] + }); + messageWindow.setTitle("ID".translate()); + messageWindow.open(); + messageWindow.showFooter(); + $(messageWindow.dom.icon).removeClass(); + } + }, + { + title: 'Title'.translate(), + id: "title", + dataType: 'string', + width: "407px", + visible: true, + columnData: "tri_title", + searcheable: true, + sortable: true, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + id: "type", + dataType: 'string', + width: "225px", + visible: true, + alignmentCell: 'left', + columnData: function (data) { + if (typeof(data.tri_param) == "object" && typeof(data.tri_param.params) == "object") { + var wizardData = data.tri_param.params; + + return wizardData.LIBRARY_NAME; + } else { + return "Custom"; + } + }, + searcheable: true, + sortable: true + }, + { + id: "editButton", + title: '', + dataType: 'button', + messageTooltip: "Edit".translate(), + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + triggerOriginDataForUpdate = {}; + var data = row.getData(); + triggerOriginDataForUpdate = data; + var fields; + if (data.tri_param == "") { + + openFormCustom("Edit".translate()); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(580, 160); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(data.tri_uid); + fields.getItems()[1].setValue(data.tri_title); + fields.getItems()[2].setValue(data.tri_description); + formEditTriggerCustom.getItems()[1].setValue(data.tri_webbot); + + codeMirrorControl.setValue(data.tri_webbot); + codeMirrorControl.refresh(); + } else { + openFormWizardEditMode(); + + var wizardData = data.tri_param.params; + + var lib = wizardData.LIBRARY_CLASS; + lib = lib.split('.'); + lib = lib[1]; + fields = formEditTriggerWizard.getFields(); + fields[0].setValue(data.tri_uid); + fields[1].setValue(lib); + fields[2].setValue(wizardData.PMFUNTION_NAME); + fields[3].setValue(wizardData.LIBRARY_NAME + " (" + wizardData.PMFUNTION_LABEL + ")"); + fields[4].setValue(data.tri_title); + fields[5].setValue(data.tri_description); + fields[6].setValue(data.tri_webbot); + + var inputItems = []; + var outputItems = []; + + restClient = new PMRestClient({ + endpoint: "trigger-wizard/" + lib + "/" + wizardData.PMFUNTION_NAME, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (response.fn_params.input != undefined) { + for (j = 0; j < response.fn_params.input.length; j++) { + var nameInput = response.fn_params.input[j].name; + + var inp = new CriteriaField({ + id: nameInput, + pmType: "text", + name: nameInput, + label: response.fn_params.input[j].label, + value: wizardData[nameInput].toString(), + controlsWidth: 400, + labelWidth: '27%', + helper: response.fn_params.input[j].description, + required: response.fn_params.input[j].name === "unpauseDate" ? true : response.fn_params.input[j].required + }); + + inputItems.push(inp); + } + } + if (response.fn_params.output != undefined) { + for (k = 0; k < response.fn_params.output.length; k++) { + var nameOutput = response.fn_params.output[k].name; + + var out = new CriteriaField({ + id: nameOutput, + pmType: "text", + name: nameOutput, + label: response.fn_params.output[k].label, + value: wizardData.TRI_ANSWER.toString(), + controlsWidth: 400, + labelWidth: '27%', + helper: response.fn_params.output[k].description, + required: response.fn_params.output[k].required + }); + + outputItems.push(out); + } + } + triggerWindow.setTitle("Edit".translate() + " " + wizardData.LIBRARY_NAME); + if (inputItems.length > 0) { + formEditTriggerWizard.getItems()[1].setVisible(true); + formEditTriggerWizard.getItems()[2].setVisible(true); + formEditTriggerWizard.getItems()[3].setVisible(true); + formEditTriggerWizard.getItems()[3].clearItems(); + formEditTriggerWizard.getItems()[3].setItems(inputItems); + } else { + formEditTriggerWizard.getItems()[1].setVisible(false); + formEditTriggerWizard.getItems()[2].setVisible(false); + formEditTriggerWizard.getItems()[3].setVisible(false); + formEditTriggerWizard.getItems()[3].clearItems(); + } + if (outputItems.length > 0) { + formEditTriggerWizard.getItems()[4].setVisible(true); + formEditTriggerWizard.getItems()[5].setVisible(true); + formEditTriggerWizard.getItems()[6].setVisible(true); + formEditTriggerWizard.getItems()[6].clearItems(); + formEditTriggerWizard.getItems()[6].setItems(outputItems); + } else { + formEditTriggerWizard.getItems()[4].setVisible(false); + formEditTriggerWizard.getItems()[5].setVisible(false); + formEditTriggerWizard.getItems()[6].setVisible(false); + formEditTriggerWizard.getItems()[6].clearItems(); + } + labelInputs.dom.labelTextContainer.style.display = "none"; + labelOutputs.dom.labelTextContainer.style.display = "none"; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the triggers wizard list, please try again.".translate() + }); + restClient.executeRestClient(); + } + } + }, + { + id: "deleteButton", + title: '', + dataType: 'button', + messageTooltip: "Delete".translate(), + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var questionWindow, dataRow = row.getData(); + + questionWindow = new PMUI.ui.MessageWindow({ + id: "questionDeleteWindow", + title: "Triggers".translate(), + windowMessageType: 'warning', + width: 490, + message: "Do you want to delete this Trigger?".translate(), + footerItems: [ + { + id: 'questionDeleteWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + questionWindow.close(); + }, + buttonType: "error" + }, { + id: 'questionDeleteWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + questionWindow.close(); + restClient = new PMRestClient({ + endpoint: "trigger/" + dataRow.tri_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "Trigger deleted successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + }, + buttonType: "success" + }, + ] + }); + + questionWindow.open(); + questionWindow.dom.titleContainer.style.height = "17px"; + questionWindow.showFooter(); + } + } + ], + dataItems: listTriggers, + onRowClick: function (row, data) { + + } + }); + + getListTrigger = function () { + var restClient = new PMRestClient({ + endpoint: 'triggers', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listTriggers = response; + gridListTrigger.setDataItems(listTriggers); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + + addNumberTriggerWizard = function (value, position) { + coutTriggers = document.createElement("span"); + coutTriggers.textContent = value; + headerAccordion = triggerWindow.getItems()[5].getItems()[position].header.html; + headerAccordion.appendChild(coutTriggers); + coutTriggers.style.float = "right"; + coutTriggers.style.color = "white"; + coutTriggers.style.fontSize = "13px"; + coutTriggers.style.marginRight = "6px"; + coutTriggers.style.marginTop = "3px"; + }; + + newTriggerOptions = function () { + + var acItemCustom = accordionNewTrigger.getItems()[0]; + var acItemCopy = accordionNewTrigger.getItems()[1]; + acItemCustom.setIconClosed('pmcustomtrigger'); + acItemCustom.setIconExpanded('pmcustomtrigger'); + acItemCopy.setIconClosed('pmcopytrigger'); + acItemCopy.setIconExpanded('pmcopytrigger'); + + var itemCustom = jQuery("#custom > .pmui-accordion-item-header > span")[1]; + itemCustom.style.width = "0px"; + var itemCopy = jQuery("#copy > .pmui-accordion-item-header > span")[1]; + itemCopy.style.width = "0px"; + + var numOfItems = accordionNewTrigger.getItems(); + + var lengthLibFunctions = []; + if (numOfItems.length <= 2) { + restClient = new PMRestClient({ + endpoint: "trigger-wizards", + typeRequest: 'get', + functionSuccess: function (xhr, response) { + for (i = 0; i < response.length; i++) { + var functTree = response[i].lib_functions; + lengthLibFunctions[i] = functTree.length; + var newTreeItems = []; + for (h = 0; h < functTree.length; h++) { + newTreeItems.push({ + label: functTree[h].fn_label, + id: functTree[h].fn_name, + onClick: function () { + for (s = 0; s < response.length; s++) { + for (p = 0; p < response[s].lib_functions.length; p++) { + if (response[s].lib_functions[p].fn_name == this.id) { + var fn = response[s].lib_functions[p].fn_params; + var fnLabel = response[s].lib_functions[p].fn_label; + var fnName = response[s].lib_functions[p].fn_name; + var libName = response[s].lib_name; + var libTitle = response[s].lib_title; + p = response[s].lib_functions.length; + s = response.length - 1; + } + } + } + var inputItems = []; + if (fn.input != undefined) { + for (j = 0; j < fn.input.length; j++) { + var val = ""; + if (fn.input[j].type == "array") { + val = "array('')"; + } + var inp = new CriteriaField({ + id: fn.input[j].name, + pmType: "text", + name: fn.input[j].name, + label: fn.input[j].label, + controlsWidth: 400, + labelWidth: '27%', + value: val, + helper: fn.input[j].description, + required: fn.input[j].name === "unpauseDate" ? true : fn.input[j].required + }); + + inputItems.push(inp); + } + } + + var outputItems = []; + if (fn.output != undefined) { + for (k = 0; k < fn.output.length; k++) { + var out = new CriteriaField({ + id: fn.output[k].name, + pmType: "text", + name: fn.output[k].name, + label: fn.output[k].label, + controlsWidth: 400, + labelWidth: '27%', + helper: fn.output[k].description, + required: fn.output[k].required + }); + + outputItems.push(out); + } + } + formEditTriggerWizard.reset(); + formEditTriggerWizard.setTitle(fnLabel + ' (' + fnName + ')'); + formEditTriggerWizard.getItems()[0].getItems()[1].setValue(libName); + formEditTriggerWizard.getItems()[0].getItems()[2].setValue(fnName); + formEditTriggerWizard.getItems()[0].getItems()[3].setValue(libTitle + ' (' + fnLabel + ')'); + + if (inputItems.length > 0) { + formEditTriggerWizard.getItems()[1].setVisible(true); + formEditTriggerWizard.getItems()[2].setVisible(true); + formEditTriggerWizard.getItems()[3].setVisible(true); + formEditTriggerWizard.getItems()[3].clearItems(); + formEditTriggerWizard.getItems()[3].setItems(inputItems); + } else { + formEditTriggerWizard.getItems()[1].setVisible(false); + formEditTriggerWizard.getItems()[2].setVisible(false); + formEditTriggerWizard.getItems()[3].setVisible(false); + formEditTriggerWizard.getItems()[3].clearItems(); + } + if (outputItems.length > 0) { + formEditTriggerWizard.getItems()[4].setVisible(true); + formEditTriggerWizard.getItems()[5].setVisible(true); + formEditTriggerWizard.getItems()[6].setVisible(true); + formEditTriggerWizard.getItems()[6].clearItems(); + formEditTriggerWizard.getItems()[6].setItems(outputItems); + } else { + formEditTriggerWizard.getItems()[4].setVisible(false); + formEditTriggerWizard.getItems()[5].setVisible(false); + formEditTriggerWizard.getItems()[6].setVisible(false); + formEditTriggerWizard.getItems()[6].clearItems(); + } + openFormWizard(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + triggerWindow.setTitle("Create".translate() + " " + libTitle); + } + }); + } + labelInputs.dom.labelTextContainer.style.display = "none"; + labelOutputs.dom.labelTextContainer.style.display = "none"; + allTreesItems[i] = newTreeItems; + + var arrayTriggerWizards = [ + "pmFunctions", + "pmSugar", + "pmTalend", + "pmTrAlfresco", + "pmTrSharepoint", + "pmZimbra" + ]; + + if (arrayTriggerWizards.indexOf(response[i].lib_name) == -1) { + $("head").append(""); + } + + //Accordion + var newAccordionItem = []; + newAccordionItem = { + iconClass: response[i].lib_name, + id: response[i].lib_name, + title: response[i].lib_title, + height: 'auto' + }; + accordionNewTrigger.addItem(newAccordionItem); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the triggers wizard list, please try again.".translate() + }); + restClient.executeRestClient(); + } + + openNewTriggerOptions(); + var accordion = triggerWindow.getItems()[5].getItems(); + accordion[0].setVisible(false); + accordion[1].setVisible(false); + for (i = 0; i < accordion.length; i++) { + accordion[i].header.html.style.backgroundColor = "#FFFFFF"; + if (i > 1) { + addNumberTriggerWizard(lengthLibFunctions[i - 2], (i)); + } + } + }; + + allTreesItems = []; + getListTrigger(); + + //Button NEW Trigger + buttonNew = new PMUI.ui.Button({ + id: 'newTriggerButton', + text: "Create".translate(), + height: "36px", + width: 100, + handler: function (event) { + openFormCustom("Create".translate()); + formEditTriggerCustom.getField("code").dom.labelTextContainer.style.width = "23.8%"; + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + formEditTriggerCustom.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(580, 150); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + formEditTriggerCustom.reset(); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(""); + fields.getItems()[1].setValue(""); + fields.getItems()[2].setValue(""); + formEditTriggerCustom.getItems()[1].setValue(""); + formEditTriggerCustom.getItems()[1].controls[0].cm.setValue(""); + codeMirrorControl.refresh(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + //Button COPY Trigger + buttonCopy = new PMUI.ui.Button({ + id: 'copyTriggerButton', + text: "Copy".translate(), + height: "36px", + width: 100, + handler: function (event) { + getListProjects(); + openFormCopy(); + formCopyTrigger.getFields()[1].clearOptions(); + $("#Code .CodeMirror.cm-s-default.CodeMirror-wrap").css({'border': '1px solid #c0c0c0'}); + + var cmControlCopyTrigger = formCopyTrigger.getFields()[4].controls[0].cm; + cmControlCopyTrigger.setValue(""); + if (cmControlCopyTrigger !== undefined) { + cmControlCopyTrigger.setSize(650, 140); + } + cmControlCopyTrigger.refresh(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + //Button WIZARD Trigger + buttonWizard = new PMUI.ui.Button({ + id: 'wizardTriggerButton', + text: "Wizard".translate(), + height: "36px", + width: 100, + handler: function (event) { + newTriggerOptions(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + openListTriggers = function () { + triggerWindow.getItems()[0].setVisible(true); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Triggers".translate()); + triggerWindow.hideFooter(); + $(triggerWindow.body).removeClass("pmui-background"); + }; + + openFormCustom = function (typeTitle) { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(true); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + + triggerWindow.setTitle(typeTitle + " Custom Trigger".translate()); + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerCustom.setFocus(); + + $('.CodeMirror.cm-s-default')[0].style.border = "1px solid #c0c0c0"; + if (formEditTriggerCustom.getItems()[0].getItems()[1].visible == false) { + var fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[1].setVisible(true); + fields.getItems()[2].setVisible(true); + formEditTriggerCustom.footer.getItems()[1].setVisible(true); + } + formEditTriggerCustom.getFields()[4].dom.labelTextContainer.style.marginLeft = "10px"; + formEditTriggerCustom.setAlignmentButtons('left'); + + $("#code").after($ctrlSpaceMessage.css({ + "margin": "5px 0 0 0", + "text-align": "center", + "width": "655px", + "padding": "" + })); + }; + + openFormWizard = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(true); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerWizard.setFocus(); + }; + + openFormWizardEditMode = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(true); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(true); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerWizard.setFocus(); + }; + + + openFormCopy = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(true); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Copy Trigger".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(true); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formCopyTrigger.setFocus(); + + $(".pmui-field").css("float", "left"); + $('#Code .pmui.pmui-pmcodemirrorcontrol').append($ctrlSpaceMessage.css({ + "margin-top": "10px", + "text-align": "", + "width": "655px", + "padding": "" + })); + }; + + openFormEditCode = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(true); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Editor".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(true); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).after($ctrlSpaceMessage.css({ + "padding": "5px 0 0 10px", + "text-align": "" + })); + + }; + + openNewTriggerOptions = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(true); + triggerWindow.setTitle("Create Predefined Trigger".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).removeClass("pmui-background"); + }; + + //obtaning the list of process to show it on the copy/import of a trigger dropdown + listProjects = []; + getListProjects = function () { + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listProjects = []; + formCopyTrigger.getFields()[0].clearOptions(); + listProjects[0] = { + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + }; + for (i = 0; i < response.length; i++) { + listProjects.push({ + label: response[i].prj_name, + value: response[i].prj_uid + }); + } + formCopyTrigger.getFields()[0].setOptions(listProjects); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the list of projects.".translate() + }); + restClient.setBaseEndPoint('projects'); + restClient.executeRestClient(); + }; + + //form Copy/Import Trigger + triggerSelectedData; + formCopyTrigger = new PMUI.form.Form({ + id: "formCopyTriggers", + border: true, + width: '890px', + height: 'auto', + title: "", + visibleHeader: false, + items: [ + { + pmType: 'dropdown', + id: "processField", + label: 'Process'.translate(), + name: 'prj_uid', + required: true, + controlsWidth: 300, + value: "", + options: listProjects, + onChange: function (newValue, prevValue) { + var formFields = formCopyTrigger.getFields(); + formFields[2].setValue(""); + formFields[3].setValue(""); + formFields[4].controls[0].cm.setValue(""); + + var uidProj = newValue, myForm = this.form; + + //obtaning the Trigger list of the process SELECTED + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + triggerSelectedData = response; + var listTriggersCopy = []; + listTriggersCopy[0] = { + label: "- Select a trigger -".translate(), + value: "", + disabled: true, + selected: true + }; + + for (i = 0; i < response.length; i++) { + listTriggersCopy.push({ + label: response[i].tri_title, + value: response[i].tri_uid + }); + } + formFields[1].setOptions(listTriggersCopy); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the list of triggers.".translate() + }); + restClient.setBaseEndPoint("project/" + uidProj + "/triggers"); + restClient.executeRestClient(); + } + }, + { + pmType: 'dropdown', + id: "triggerField", + label: 'Trigger'.translate(), + name: 'tri_uid', + required: true, + controlsWidth: 300, + value: "", + options: [], + onChange: function (newValue, prevValue) { + var formFields = formCopyTrigger.getFields(); + formFields[2].setValue(""); + formFields[3].setValue(""); + formFields[4].controls[0].cm.setValue(""); + + var uidTri = newValue; + + for (i = 0; i < triggerSelectedData.length; i++) { + if (triggerSelectedData[i].tri_uid == uidTri) { + formFields[2].setValue(triggerSelectedData[i].tri_title); + formFields[3].setValue(triggerSelectedData[i].tri_description); + formFields[4].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + } + } + } + }, + { + pmType: "text", + id: "triTitle", + label: "Title of the new trigger".translate(), + placeholder: "Insert the title of the new trigger".translate(), + name: "tri_title", + required: true, + valueType: 'string', + controlsWidth: 300, + style: { + cssProperties: { + 'float': 'left' + } + } + }, + { + pmType: "textarea", + id: "triDescription", + rows: 80, + name: 'tri_description', + label: "Description of the new trigger".translate(), + valueType: 'string', + controlsWidth: 652, + style: { + cssClasses: ['mafe-textarea-resize'], + cssProperties: {'float': 'left'} + } + } + ] + }); + codMirr = new PMCodeMirrorField(); + codMirr.setLabel("Code".translate()); + codMirr.setID("Code"); + codMirr.setName('tri_webbot'); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + formCopyTrigger.addItem(codMirr); + + //Form to Edit the trigger with the WIZARD (we used a Form because we need buttons to save the changes) + formEditTriggerWizard = new PMUI.form.Form({ + id: "formEditTriggerWizard", + border: true, + visibleHeader: false, + name: "formwizard", + width: 926, + title: "New Trigger".translate(), + items: [ + { + id: "panelDetailsWizard", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: 'auto', + legend: "DETAILS".translate(), + items: [ + { + id: "uid", + pmType: "text", + label: "ID".translate(), + value: "", + name: "uid", + visible: false, + valueType: 'string' + }, + { + id: "libName", + pmType: "text", + label: "", + value: "", + name: "libName", + visible: false, + valueType: 'string' + }, + { + id: "fnName", + pmType: "text", + label: "", + value: "", + name: "fnName", + visible: false, + valueType: 'string' + }, + { + id: "type", + pmType: "text", + label: "Type".translate(), + value: "WIZARD", + controlsWidth: 450, + labelWidth: '27%', + readOnly: true, + name: "type", + valueType: 'string' + }, + { + id: "titleDetailsWiz", + pmType: "text", + label: "Title".translate(), + value: "", + controlsWidth: 450, + labelWidth: '27%', + name: "titleDetails", + valueType: 'string', + required: true + }, + { + id: "descriptionDetailsWiz", + pmType: "textarea", + label: "Description".translate(), + value: "", + rows: 90, + width: '300px', + controlsWidth: 450, + labelWidth: '27%', + name: "descriptionDetails", + valueType: 'string', + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: "webbot", + pmType: "text", + label: "Webbot".translate(), + value: "", + name: "webbot", + controlsWidth: 300, + labelWidth: '27%', + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + //adding a separator Inputs line + sepInputs = new PMSeparatorLineField({ + controlHeight: '1px', + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + formEditTriggerWizard.addItem(sepInputs); + + //adding a label Inputs + labelInputs = new PMLabelField({ + text: "PARAMETERS".translate(), + textMode: "plain", + style: { + cssProperties: { + color: "#AEAEAE", + 'font-weight': 'bold' + } + }, + controlsWidth: 885 + }); + formEditTriggerWizard.addItem(labelInputs); + + //adding the Inputs Items (PARAMETERS) Panel + paramPanel = new PMUI.form.FormPanel({ + id: "panelParametersWizard", + layout: 'vbox', + fieldset: false, + height: 'auto', + visible: false, + legend: "__PARAMETERS__".translate(), + items: [] + }); + formEditTriggerWizard.addItem(paramPanel); + + //adding a separator Outputs line + sepOutputs = new PMSeparatorLineField({ + controlHeight: 1, + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + formEditTriggerWizard.addItem(sepOutputs); + + //adding a label Outputs + labelOutputs = new PMLabelField({ + text: "RETURN VALUE".translate(), + textMode: "plain", + style: { + cssProperties: { + color: "#AEAEAE", + 'font-weight': 'bold' + } + }, + controlsWidth: 885 + }); + + formEditTriggerWizard.addItem(labelOutputs); + + //adding the Output Items (Returns) Panel + returnPanel = new PMUI.form.FormPanel({ + id: "panelReturnValWizard", + layout: 'vbox', + fieldset: false, + height: 'auto', + visible: false, + legend: "RETURN VALUE".translate(), + items: [] + }); + formEditTriggerWizard.addItem(returnPanel); + + + //treePanel New Trigger PMF + treeNewTrigger = new PMUI.panel.TreePanel({ + id: "treeNewTrigger", + width: 'auto', + height: 'auto', + style: { + cssClasses: ['pmtrigger'], + cssProperties: { + 'margin-top': '5px', + 'margin-bottom': '4px' + } + }, + items: [] + }); + + //Acordion Panel New Triggers Options + accordionNewTrigger = new PMUI.panel.AccordionPanel({ + id: "accordionNewTrigger", + width: 885, + height: 'auto', + borderWidth: "0px", + hiddenTitle: true, + style: { + cssProperties: { + 'margin-left': '30px' + } + }, + items: [ + { + iconClass: "", + id: 'custom', + title: "Custom Trigger".translate(), + height: '26px', + body: "", + style: { + cssProperties: { + "background-color": "#FDFDFD" + } + } + }, + { + iconClass: "", + id: 'copy', + title: "Copy Trigger".translate(), + height: '26px', + body: "", + style: { + cssProperties: { + "background-color": "#FDFDFD" + } + } + } + ], + listeners: { + select: function (obj, event) { + + if (obj.id == "custom") { + openFormCustom("Create".translate()); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(580, 150); //CodeMirror Size + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + formEditTriggerCustom.reset(); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(""); + fields.getItems()[1].setValue(""); + fields.getItems()[2].setValue(""); + formEditTriggerCustom.getItems()[1].setValue(""); + formEditTriggerCustom.getItems()[1].controls[0].cm.setValue(""); + + } else if (obj.id == "copy") { + + getListProjects(); + openFormCopy(); + $($('#Code .CodeMirror.cm-s-default.CodeMirror-wrap')[1]).css({'border': '1px solid #c0c0c0'}); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + + var cmControlCopyTrigger = formCopyTrigger.getFields()[4].controls[0].cm; + if (cmControlCopyTrigger != undefined) { + cmControlCopyTrigger.setSize(650, 140); //CodeMirror in formCopyTrigger Size + } + } else { + if (treeNewTrigger.getItems() == "" || treeNewTrigger.id != obj.id) { + var acItems = accordionNewTrigger.getItems(); + var accordionActualItem = accordionNewTrigger.getItem(obj.id); + + for (i = 0; i < acItems.length; i++) { + if (acItems[i].id == accordionActualItem.id) { + var positionActualAcItem = i - 2; + } + } + + treeNewTrigger.setItems(allTreesItems[positionActualAcItem]); + treeNewTrigger.setID(obj.id); + + accordionActualItem.setBody(treeNewTrigger); + treeNewTrigger.defineEvents(); + applyStyleTreePanel(treeNewTrigger, false); + } + } + } + } + }); + + updateCustom = function (dataToSend, triggerUid) { + var restClient = new PMRestClient({ + endpoint: "trigger/" + triggerUid, + typeRequest: 'update', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerCustom.setDirty(false); + getListTrigger(); + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + }, + functionFailure: function (xhr, response) { + var msg = response.error.message; + var arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + }, + messageSuccess: "Trigger updated successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + }; + + checkIfValuesAreEqual = function (initialData, finalData) { + if (typeof(initialData['tri_uid']) == "undefined" && finalData['tri_uid'] == '') { + if (finalData['tri_description'] != '' || finalData['tri_title'] != '' || finalData['tri_webbot'] != '') { + return false; + } + } + for (var key1 in initialData) { + for (var key2 in finalData) { + if (typeof(initialData[key1]) != "undefined" && + typeof(finalData[key2]) != "undefined" && + key1 == key2 && + initialData[key1] != finalData[key2] + ) { + return false; + } + } + } + return true; + } + + //Buttons Save and Cancel for the 'formEditTriggerCustom' and 'formEditTriggerWizard' + buttonSave = new PMUI.ui.Button({ + id: 'saveTriggerButton', + text: "Save".translate(), + handler: function (event) { + triggerOriginDataForUpdate = {}; + var formcustom = triggerWindow.getItems()[1], + formwizard = triggerWindow.getItems()[2], + formTriggerData, + restClient, + dataToSend, + formTriggerData, + inputFields, + message_window, + outputV, + outputFields, + inputV, + dataToSend, + flagEdit; + if (formcustom.isVisible() == true) { + valuesCustom=formcustom.getItems()[0]; + if (!formEditTriggerCustom.isValid( )) { + flagEdit = formEditTriggerCustom.visible; + } else { + flagEdit = formEditTriggerCustom.isValid(); + } + if (flagEdit) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + formTriggerData = getData2PMUI(formEditTriggerCustom.html); + } else { + formTriggerData = formEditTriggerCustom.getData(); + } + if (formTriggerData.title.trim() === "") { + return false; + } + dataToSend = { + tri_title: formTriggerData.title, + tri_description: formTriggerData.description, + tri_webbot: formTriggerData.code, + tri_param: "" + }; + + if (formTriggerData.uid === "") { + restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerCustom.setDirty(false); + getListTrigger(); + formEditTriggerCustom.getItems()[0].getItems()[0].setValue(response.tri_uid); + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + }, + functionFailure: function (xhr, response) { + var msg = response.error.message, + arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } else { + if (formTriggerData.wizzard != "") { + if (formEditTriggerCustom.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "wizzardToCustomTriggerWin", + windowMessageType: 'warning', + title: 'Triggers'.translate(), + width: 490, + message: 'Do you want to save the changes? This Trigger will be saved like a custom Trigger.'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + openFormWizardEditMode(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.reset(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + updateCustom(dataToSend, formTriggerData.uid); + }, + buttonType: "success" + } + ] + + }); + message_window.open(); + message_window.showFooter(); + } else { + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + } + } else { + updateCustom(dataToSend, formTriggerData.uid); + } + } + } + } else if (formwizard.isVisible() == true) { + if (formEditTriggerWizard.isValid() || ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1))) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + formTriggerData = getData2PMUI(formEditTriggerWizard.html); + } else { + formTriggerData = formEditTriggerWizard.getData(); + } + + inputV = {}; + inputFields = formEditTriggerWizard.getItems()[3]; + for (i = 0; i < inputFields.getItems().length; i++) { + inputV[inputFields.getItems()[i].name] = formTriggerData[inputFields.getItems()[i].name]; + } + + outputV = {}; + outputFields = formEditTriggerWizard.getItems()[6]; + for (j = 0; j < outputFields.getItems().length; j++) { + outputV[outputFields.getItems()[j].name] = formTriggerData[outputFields.getItems()[j].name]; + } + + dataToSend = { + tri_title: formTriggerData.titleDetails, + tri_description: formTriggerData.descriptionDetails, + tri_type: "SCRIPT", + tri_params: { + input: inputV, + output: outputV + } + }; + + if (formTriggerData.uid === "") { + restClient = new PMRestClient({ + endpoint: 'trigger-wizard/' + formTriggerData.libName + '/' + formTriggerData.fnName, + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerWizard.setDirty(false); + getListTrigger(); + formEditTriggerWizard.getFields()[0].setValue(response.tri_uid); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } else { + restClient = new PMRestClient({ + endpoint: 'trigger-wizard/' + formTriggerData.libName + '/' + formTriggerData.fnName + '/' + formTriggerData.uid, + typeRequest: 'update', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerWizard.setDirty(false); + getListTrigger(); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "Trigger updated successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } + } + } + }, + buttonType: 'success' + }); + + //Buttons Save and Cancel for the 'formEditTriggerCustom' and 'formEditTriggerWizard' + copyButton = new PMUI.ui.Button({ + id: 'copyAndSaveButton', + text: "Copy Trigger".translate(), + buttonType: 'success', + handler: function (event) { + var data, + dataToSend, + restClient; + if (formCopyTrigger.isValid()) { + formCopyTrigger.setDirty(false); + + data = formCopyTrigger.getData(); + dataToSend = { + tri_title: getData2PMUI(formCopyTrigger.html).tri_title.trim(), + tri_description: data.tri_description, + tri_webbot: data.tri_webbot, + tri_param: "" + }; + restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + getListTrigger(); + formCopyTrigger.reset(); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } + } + }); + + //Buttons Apply for the Code Editor + applyButton = new PMUI.ui.Button({ + id: 'applyButton', + text: "Apply".translate(), + buttonType: 'success', + handler: function (event) { + + $("div.pmui-window-body.pmui-background").css('overflow', ''); + if (formEditCode.isValid()) { + var typeTitle = "Edit".translate(); + if (triggerWindow.getItems()[1].getData().uid == "") { + typeTitle = "Create".translate(); + } + openFormCustom(typeTitle); + formEditCode.setDirty(false); + + var editCode = formEditCode.getItems()[0].controls[0].cm; + editCodeValue = editCode.getValue(); + + var codeMirrorCustom = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorCustom != undefined) { + codeMirrorCustom.setSize(580, 150); //CodeMirror Size + } + codeMirrorCustom.setValue(editCodeValue); + formEditTriggerCustom.getItems()[1].setValue(editCodeValue); + + editCode.setValue(""); + editCodeValue = ""; + + formEditCode.getItems()[0].setValue(""); + } + } + }); + + //Button Edit Source Code (this is showed just when the Trigger Wizzard is opened in edition mode) + btnEditSourceCode = new PMUI.ui.Button({ + id: 'btnEditSourceCode', + text: "Edit Source Code".translate(), + buttonType: 'success', + handler: function (event) { + + var data = formEditTriggerWizard.getData(); + var fields; + openFormCustom("Edit".translate()); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(650, 280); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(data.uid); + fields.getItems()[1].setValue(data.titleDetails); + fields.getItems()[2].setValue(data.descriptionDetails); + fields.getItems()[3].setValue(data.webbot); + fields.getItems()[3].setVisible(false); + formEditTriggerCustom.getItems()[1].setValue(data.webbot); + + codeMirrorControl.setValue(data.webbot); + + formEditTriggerCustom.getItems()[1].setHeight(300); + fields.getItems()[1].setVisible(false); + fields.getItems()[2].setVisible(false); + formEditTriggerCustom.footer.getItems()[1].setVisible(false); + formEditTriggerCustom.footer.getItems()[0].style.addProperties({'margin-right': "10px"}); + formEditTriggerCustom.footer.style.addProperties({width: '880px'}); + codeMirrorControl.refresh(); + } + }); + + buttonCancel = new PMUI.ui.Button({ + id: 'cancelTriggerButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + isDirtyFormTrigger(); + } + }); + + //Form to Edit the Custom trigger (we used a Form because we need buttons to save the changes) + formEditTriggerCustom = new PMUI.form.Form({ + id: "formEditTriggerCustom", + border: true, + visibleHeader: false, + width: '900px', + height: "365px", + name: "formcustom", + title: "Custom Trigger".translate(), + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "uid", + pmType: "text", + label: "ID".translate(), + value: "", + name: "uid", + readOnly: true, + visible: false, + valueType: 'string' + }, + { + id: "title", + pmType: "text", + label: "Title".translate(), + value: "", + required: true, + name: "title", + valueType: 'string' + }, + { + id: "description", + pmType: "textarea", + rows: 70, + name: 'description', + label: "Description".translate(), + valueType: 'string', + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: "wizzard", + pmType: "text", + label: "Wizzard".translate(), + value: "", + name: "wizzard", + readOnly: true, + visible: false, + valueType: 'string' + } + ] + } + ], + buttons: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formEditTriggerCustom.getItems()[1].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '208px', + "background": "rgb(30, 145, 209)", + "border": "0px solid rgb(30, 145, 209)" + } + } + }, { + text: "Open Editor".translate(), + id: "openEditorButton", + handler: function () { + openFormEditCode(); + formEditCode.showFooter(); + + var codeMirrorCustom = formEditTriggerCustom.getItems()[1].controls[0].cm; + var value = codeMirrorCustom.getValue(); + + var codeMirrorCopy = formEditCode.getItems()[0].controls[0].cm; + + if (codeMirrorCopy != undefined) { + codeMirrorCopy.setSize(810, 315); //CodeMirror Size + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).css({'border': '1px solid #c0c0c0'}); + + } + + formEditCode.getItems()[0].setHeight(325); + + codeMirrorCopy.setValue(value); + formEditCode.getItems()[0].setValue(value); + formEditCode.setDirty(false); + + $('#codeEditor .pmui-field-label').hide(); + $('#formEditCode').children().last().css({ + 'margin-top': '-352px', + 'border': '0px', + 'margin-right': '-15px' + }).find('a').css('padding', '10px 5px'); + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).css({ + 'margin-left': '10px', + 'width': '850px', + 'height': '360px' + }); + $('#triggerWindow .pmui-window-body').css('overflow', 'hidden'); + codeMirrorCopy.refresh(); + }, + style: { + cssProperties: { + "margin-right": 2 + } + } + } + ] + }); + cd = new PMCodeMirrorField({ + labelWidth: '23.8%' + }); + cd.setLabel("Code".translate()); + formEditTriggerCustom.addItem(cd); + formEditTriggerCustom.getItems()[1].setName('code'); + formEditTriggerCustom.getItems()[1].setID('code'); + + formEditCode = new PMUI.form.Form({ + id: "formEditCode", + border: true, + visibleHeader: false, + width: '925px', + name: "formeditcode", + title: "Editor".translate(), + items: [], + buttons: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formEditCode.getItems()[0].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '229px', + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + } + } + } + ] + }); + editCode = new PMCodeMirrorField({ + labelWidth: '9%' + }); + editCode.setLabel("Code".translate()); + formEditCode.addItem(editCode); + formEditCode.getItems()[0].setName('codeEditor'); + formEditCode.getItems()[0].setID('codeEditor'); + + //Trigger Window + triggerWindow = new PMUI.ui.Window({ + id: "triggerWindow", + title: "Triggers".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave, + btnEditSourceCode, + applyButton, + copyButton + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + isDirtyFormTrigger(); + } + }); + + + triggerWindow.addItem(gridListTrigger); + triggerWindow.addItem(formEditTriggerCustom); + triggerWindow.addItem(formEditTriggerWizard); + triggerWindow.addItem(formCopyTrigger); + triggerWindow.addItem(formEditCode); + triggerWindow.addItem(accordionNewTrigger); + + if (typeof listTriggers !== "undefined") { + triggerWindow.open(); + codMirr.dom.labelTextContainer.style.width = "23.8%"; + codMirr.html.style.padding = "10px"; + formEditTriggerCustom.panel.html.style.padding = "10px 10px"; + $('#listTriggers .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + applyStyleWindowForm(triggerWindow); + triggerWindow.hideFooter(); + openListTriggers(); + + gridListTrigger.dom.toolbar.appendChild(buttonNew.getHTML()); + buttonNew.defineEvents(); + + gridListTrigger.dom.toolbar.appendChild(buttonCopy.getHTML()); + buttonCopy.defineEvents(); + + gridListTrigger.dom.toolbar.appendChild(buttonWizard.getHTML()); + buttonWizard.defineEvents(); + + triggerWindow.defineEvents(); + gridListTrigger.sort('tri_title', 'asc'); + formEditTriggerCustom.panel.style.addProperties({'overflow': 'hidden'}); + + formcustom = triggerWindow.getItems()[1]; + valuesCustom=formcustom.getItems()[0]; + } + }; + + PMDesigner.trigger.create = function () { + var codeMirrorControl, cmControlCopyTrigger; + openFormCustom("Create".translate()); + formEditTriggerCustom.getField("code").dom.labelTextContainer.style.width = "23.8%"; + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + formEditTriggerCustom.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(580, 150); + codeMirrorControl.refresh(); + } + codeMirrorControl.refresh(); + formEditTriggerCustom.getItems()[1].setHeight(170); + formEditTriggerCustom.reset(); + }; +}()); +/** + * new stepTask module + */ +var stepsTask = function (activity) { + this.mainWindow = null; + this.secondaryWindow = null; + this.stepsAssignTree = null; + this.mainContainer = null; + this.labelsPanel = null; + this.stepsMainContainer = null; + this.stepsAssignAccordion = null; + this.confirmWindow = null; + this.elementAccordionOpen = null; + this.groupType = null; + this.groupLabel = null; + this.stepsType = null; + this.stepsAssigned = null; + stepsTask.prototype.initialize.call(this, activity); +}; +/** + * initialization method steps settings, constants are created. + * components are created + * the data is loaded + * styles are customized + * It extends behaviors and events + */ +stepsTask.prototype.initialize = function () { + this.groupType = ['DYNAFORM', 'INPUT_DOCUMENT', 'OUTPUT_DOCUMENT', 'EXTERNAL']; + this.groupLabel = ['Dynaform (s)'.translate(), 'Input Document (s)'.translate(), 'OutPut Document (s)'.translate(), 'External (s)'.translate()]; + this.stepsType = { + "DYNAFORM": "Dynaform".translate(), + "INPUT_DOCUMENT": "Input Document".translate(), + "OUTPUT_DOCUMENT": "Output Document".translate(), + "EXTERNAL": "External".translate() + }; + this.stepsAssigned = new PMUI.util.ArrayList(); + this.elementAccordionOpen = new PMUI.util.ArrayList(); + this.createWidgets(); + this.mainWindow.addItem(this.mainContainer); + this.mainWindow.open(); + this.loadInitialData(); + this.customStyles(); + this.elementsAccordionOpenFixed(); + this.addEventSortableInAccordionElements(); + this.addEventSortableInTreePanelElements(); +}; +/** + * the components are created PMUI UI + * - confirmWindow + * - mainWindow + * - labelsPanel + * - stepsAssignTree + * - stepsAssignAccordion + * - stepsMainContainer + * - mainContainer + * - secondaryWindow + */ +stepsTask.prototype.createWidgets = function () { + var that = this; + this.confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: '', + message: '', + footerItems: [ + { + id: 'confirmWindow-footer-no', + text: 'No'.translate(), + visible: true, + buttonType: "error" + }, { + id: 'confirmWindow-footer-yes', + text: 'Yes'.translate(), + visible: true, + buttonType: "success" + } + ], + visibleFooter: true + }); + this.mainWindow = new PMUI.ui.Window({ + id: "stepsForTask", + title: "Steps for task".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH + }); + this.labelsPanel = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + proportion: 0.08, + layout: "hbox", + items: [ + new PMUI.field.TextAnnotationField({ + text: 'Available Elements'.translate(), + text_Align: 'center', + proportion: 1.4 + }), + new PMUI.field.TextAnnotationField({ + text: 'Assigned Elements (Drop here)'.translate(), + text_Align: 'center', + proportion: 1.3 + }), + new PMUI.ui.Button({ + buttonType: "link", + "text": "Expand all".translate(), + id: "expand-button", + proportion: 0.6, + handler: function () { + var items, i, item, buttonAfected; + items = that.stepsAssignAccordion.getItems(); + buttonAfected = that.labelsPanel.getItem("collapse-button"); + buttonAfected.setDisabled(false); + this.setDisabled(true); + that.elementAccordionOpen.clear(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + item.expand(); + that.elementAccordionOpen.insert(item); + } + } + }), + new PMUI.ui.Button({ + buttonType: "link", + "text": "Collapse all".translate(), + id: "collapse-button", + proportion: 0.7, + disabled: true, + handler: function () { + var items, i, item, buttonAfected; + buttonAfected = that.labelsPanel.getItem("expand-button"); + buttonAfected.setDisabled(false); + this.setDisabled(true); + items = that.stepsAssignAccordion.getItems(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + that.elementAccordionOpen.remove(item); + item.collapse(); + } + } + }) + ] + }); + this.stepsAssignTree = new PMUI.panel.TreePanel({ + id: 'stepsAssignTree', + proportion: 0.5, + height: 475, + filterable: true, + autoBind: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nodeDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true, + collapsed: false, + itemsDataBind: 'items', + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + behavior: 'drag' + }, + style: { + cssProperties: { + margin: '0px 0px 0px 0px', + float: 'left', + overflow: 'auto' + }, + cssClasses: ['mafe-border-panel'] + } + }); + this.stepsAssignAccordion = new PMUI.panel.AccordionPanel({ + id: 'stepsAssignAccordion', + multipleSelection: true, + hiddenTitle: true, + proportion: 1.5, + style: { + cssProperties: { + margin: '0px 0px 0px 0px' + }, + cssClasses: ['mafe-border-panel'] + }, + listeners: { + select: function (accordionItem, event) { + var buttonExpand, buttonCollapse, itemsAccod; + itemsAccod = that.stepsAssignAccordion.items; + if (accordionItem.collapsed) { + if (that.elementAccordionOpen.indexOf(accordionItem) > -1) { + that.elementAccordionOpen.remove(accordionItem); + } + } else { + if (that.elementAccordionOpen.indexOf(accordionItem) === -1) { + that.elementAccordionOpen.insert(accordionItem); + } + } + buttonCollapse = that.labelsPanel.getItem("collapse-button"); + buttonExpand = that.labelsPanel.getItem("expand-button"); + if (that.elementAccordionOpen.getSize() === 0) { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(true); + } else if (that.elementAccordionOpen.getSize() === itemsAccod.getSize()) { + buttonExpand.setDisabled(true); + buttonCollapse.setDisabled(false); + } else { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(false); + } + } + } + }); + this.stepsMainContainer = new PMUI.core.Panel({ + id: "stepsMainContainer", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 45, + layout: 'hbox', + height: 475, + items: [ + this.stepsAssignTree, + this.stepsAssignAccordion + ] + }); + this.mainContainer = new PMUI.core.Panel({ + id: "mainContainer", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 45, + layout: 'vbox', + items: [ + this.labelsPanel, + this.stepsMainContainer + ] + }); + this.secondaryWindow = new PMUI.ui.Window({ + visibleFooter: true, + title: 'Trigger'.translate(), + footerAlign: 'right', + footerItems: [ + { + text: "@@", + id: "secondaryWindow-criteria", + handler: function () { + }, + style: { + cssProperties: { + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + }, + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-cancel', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + }, + handler: function () { + } + }, { + id: 'secondaryWindow-save', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + }, + handler: function () { + } + } + ] + }); +}; +/** + * This method loads the initial data module steps,for the components: + * - stepsAssignTree + * - stepsAssignAccordion + */ +stepsTask.prototype.loadInitialData = function () { + this.loadTreePanelData(this.getTreePanelData()); + this.loadAccordionItems(this.getAccordionData()); +}; +/** + * This method loads the options to stepsAssignAccordion + * @param {Array} response An array where each element can be a {Element} object or a JSON object + */ +stepsTask.prototype.loadAccordionItems = function (response) { + var firstResp = [], + secondResp = [], + i, + item, + assigmentConfig, + firstRes = 0, + secondRes = 1; + if (jQuery.isArray(response) && response.length) { + if (typeof response[firstRes] === "object") { + firstResp = response[firstRes].response ? response[firstRes].response : []; + } + if (typeof response[secondRes] === "object") { + secondResp = response[secondRes].response ? response[secondRes].response : []; + } + } + if (firstResp.length) { + for (i = 0; i < firstResp.length; i += 1) { + item = this.createAccordionItem(firstResp[i], true, true); + this.stepsAssignAccordion.addItem(item); + item.dataItem = firstResp[i]; + this.customAccordionItemButtons(item.html, firstResp[i], item); + } + } + assigmentConfig = { + step_type_obj: "Assignment".translate(), + triggers: secondResp, + st_type: "ASSIGNMENT", + obj_title: "Assignment".translate(), + step_uid_obj: "Assignment" + }; + item = this.createAccordionItem(assigmentConfig); + this.stepsAssignAccordion.addItem(item); + item.dataItem = assigmentConfig; + assigmentConfig = { + step_type_obj: "Routing".translate(), + triggers: secondResp, + obj_title: "Routing".translate(), + st_type: 'ROUTING', + step_uid_obj: "Routing" + }; + item = this.createAccordionItem(assigmentConfig); + this.stepsAssignAccordion.addItem(item); + item.dataItem = assigmentConfig; + this.stepsAssignAccordion.defineEvents(); +}; +/** + * This method creates an element for stepsAssignAccordion + * @param {data} It is an object with the settings to create the element + * @returns {PMUI.item.AccordionItem} + */ +stepsTask.prototype.createAccordionItem = function (data) { + var that = this, + gridBefore, + gridAfter, + beforeTitle, + afterTitle, + i, + textLabel; + if (this.stepsType[data.step_type_obj]) { + textLabel = this.stepsType[data.step_type_obj]; + } else { + textLabel = data.step_type_obj; + } + beforeTitle = new PMUI.field.TextAnnotationField({ + text: 'Before'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left' + }); + afterTitle = new PMUI.field.TextAnnotationField({ + text: 'After'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left', + visible: data.st_type === "ASSIGNMENT" ? false : true + }); + + gridBefore = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + st_type: 'BEFORE', + step_uid: data.step_uid, + visibleFooter: false, + width: '96%', + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: "st_position", + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 360 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + } + ], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridBefore.st_type = 'BEFORE'; + } else if (data.st_type === "ROUTING") { + gridBefore.st_type = "BEFORE_ROUTING"; + } else { + gridBefore.st_type = "BEFORE_ASSIGNMENT"; + } + gridBefore.step_uid = data.step_uid; + gridBefore.clearItems(); + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridBefore.st_type === data.triggers[i].st_type) { + gridBefore.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + gridAfter = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + visibleFooter: false, + width: '96%', + visible: data.st_type === "ASSIGNMENT" ? false : true, + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: 'st_position', + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 360 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + } + ], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridAfter.st_type = 'AFTER'; + } else if (data.st_type == "ROUTING") { + gridAfter.st_type = "AFTER_ROUTING"; + } else { + gridAfter.st_type = "AFTER_ASSIGNMENT"; + } + gridAfter.step_uid = data.step_uid; + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridAfter.st_type === data.triggers[i].st_type) { + gridAfter.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + var accordionItem = new PMUI.item.AccordionItem({ + id: 'id' + data.step_uid_obj, + dataStep: data, + closeable: true, + body: new PMUI.core.Panel({ + layout: 'vbox', + items: [ + beforeTitle, + gridBefore, + afterTitle, + gridAfter + ] + }) + }); + if (this.stepsType[data.step_type_obj]) { + accordionItem.setTitle(data.step_position + ". " + data.obj_title + ' (' + this.stepsType[data.step_type_obj] + ')'); + this.stepsAssigned.insert(accordionItem); + } else { + accordionItem.setTitle((this.stepsAssignAccordion.items.getSize() + 1) + ". " + data.obj_title); + } + return accordionItem; +}; +/** + * styles that can not be handled with the library are customized PMUI + * @chainable + */ +stepsTask.prototype.customStyles = function () { + this.mainWindow.body.style.overflow = "hidden"; +}; +/** + * run the endpoint 'activity/{activity_id}/available-steps' to get + * dynaforms, output document, input Document and external, Unassigned or Availables + * @returns {Array} + */ +stepsTask.prototype.getStepAvailables = function () { + var resp = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + PMDesigner.act_uid + '/available-steps', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + if (jQuery.isArray(response)) { + resp = response[0] ? response[0].response : []; + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return resp; +}; +/** + * run the endpoint 'activity/{activity_id}/available-steps' to get all Availables + * triggres and dynaforms Unassigned or Availables + * @returns {Array} + */ +stepsTask.prototype.getTreePanelData = function () { + var resp = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'activity/' + PMDesigner.act_uid + '/available-steps', + method: 'GET' + }, { + url: 'triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + resp = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return resp; +} +/** + * this method loads the data to stepsAssignTree + * @param response, the answer is an array containing all the elements + * that will be loaded into the step stepsAssignTree + * @chainable + */ +stepsTask.prototype.loadTreePanelData = function (response) { + var that = this, + data, + i, + j, + type, + label, + items, + labelTrigger, + dataTree = [], + treeNode; + data = response[1].response; + labelTrigger = 'Trigger (s)'.translate(); + if (data.length === 0) { + dataTree.push({ + obj_title: labelTrigger, + items: [this.notItemConfig()] + }); + } else { + items = []; + for (i = 0; i < data.length; i += 1) { + items.push({ + obj_title: data[i]['tri_title'], + obj_type: data[i]['tri_type'], + obj_uid: data[i]['tri_uid'] + }); + } + dataTree.push({ + obj_title: labelTrigger, + items: items, + id: "TRIGGER" + }); + } + data = response[0].response; + type = this.groupType; + label = this.groupLabel; + items = []; + for (i = 0; i < type.length; i += 1) { + items = []; + for (j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [this.notItemConfig()], + behavior: '', + id: type[i] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items, + behavior: 'drag', + id: type[i] + }); + } + } + this.stepsAssignTree.clearItems(); + for (i = 0; i < dataTree.length; i += 1) { + this.stepsAssignTree.addDataItem(dataTree[i]); + treeNode = this.stepsAssignTree.getItem(i); + treeNode.setID(dataTree[i].id); + this.updateIndexPosition(treeNode); + } + return this; +}; +/** + * run the endpoint 'activity/{activity_id}/steps' and 'activity/{activity_id}/step/triggers' + * to get all triggres and dynaforms assigned + * @returns {Array} + */ +stepsTask.prototype.getAccordionData = function () { + var resp = [], + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + PMDesigner.act_uid + '/steps', + method: 'GET' + }, { + url: 'activity/' + PMDesigner.act_uid + '/step/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + resp = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }); + restClient.executeRestClient(); + return resp; +}; +/** + * checks whether a trigger is already assigned in a grid + * @param grid, is instanceof PMUI.grid.Grid, in conducting the search + * @param tri_uid, search parameter in the rows of the grid + * @returns {boolean} + */ +stepsTask.prototype.isTriggerAssigned = function (grid, tri_uid) { + var data, i, exist = false; + data = grid.getData(); + if (grid && jQuery.isArray(data)) { + for (i = 0; i < data.length; i += 1) { + if (data[i].tri_uid === tri_uid) { + exist = true; + break; + } + } + } + return exist; +}; +/** + * retorna el tipo de de step, para la ejecucion de "endpoint" + * @param st_type, this a step type, the accepted parameters are: + * - BEFORE_ASSIGNMENT + * - BEFORE_ROUTING + * - AFTER_ROUTING + * - BEFORE + * - AFTER + * @returns {string} + */ +stepsTask.prototype.getStepType = function (st_type) { + var value; + switch (st_type) { + case 'BEFORE_ASSIGNMENT': + value = 'before-assignment'; + break; + case 'BEFORE_ROUTING': + value = 'before-routing'; + break; + case 'AFTER_ROUTING': + value = 'after-routing'; + break; + case 'BEFORE': + value = 'before'; + break; + case 'AFTER': + value = 'after'; + break; + default: + value = ''; + break; + } + return value; +}; +/** + * This method is executed when editing a "trigger" in a row of the grid. + * secondary window opens with the current configuration of the trigger + * @param trigger, is the return value when is update 'trigger' action in the enpoint + * @param triggerID, is the id of the trigger to update + * @chainable + */ +stepsTask.prototype.editTrigger = function (trigger, triggerID) { + var codeMirror, + saveButton, + cancelButton, + criteriaButton, + that = this; + this.resetSecondaryWindow(); + codeMirror = new PMCodeMirror({ + id: "codeMirror" + }); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + codeMirror.setValue(trigger); + this.secondaryWindow.setWidth(DEFAULT_WINDOW_WIDTH); + this.secondaryWindow.setHeight(DEFAULT_WINDOW_HEIGHT); + this.secondaryWindow.setTitle("Trigger".translate()); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + triggerID, + typeRequest: 'update', + data: { + tri_param: '', + tri_webbot: codeMirror.getValue() + }, + messageError: 'There are problems updating the trigger, please try again.'.translate(), + messageSuccess: 'Trigger updated correctly'.translate(), + flashContainer: that.mainWindow, + functionSuccess: function () { + that.secondaryWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(true); + criteriaButton.setHandler(function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var cursorPos, + codemirror; + codemirror = codeMirror.cm; + cursorPos = codemirror.getCursor(); + codemirror.replaceSelection(variable); + codemirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }); + } + this.secondaryWindow.open(); + this.secondaryWindow.addItem(codeMirror); + codeMirror.cm.setSize(this.secondaryWindow.getWidth(), 380); + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + $(".pmui-window-body").css("overflow", "hidden"); + codeMirror.cm.refresh(); +}; +/** + * edit the selected trigger condition + * @param stepID, It is the id of the step to upgrade + * @param triggerID, is the id of the trigger to update + * @param stepType, It is the kind of step to update + * @param row, PMUI.grid.GridPanelRow, is the row affected + */ +stepsTask.prototype.editCondition = function (stepID, triggerID, stepType, row) { + var saveButton, + cancelButton, + criteriaButton, + form, + dataRow, + that = this; + dataRow = row.getData(); + this.resetSecondaryWindow(); + this.secondaryWindow.setWidth(500); + this.secondaryWindow.setHeight(350); + this.secondaryWindow.setTitle('Condition Trigger'.translate()); + this.secondaryWindow.setTitle("Trigger".translate()); + form = new PMUI.form.Form({ + id: 'idFormEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + new CriteriaField({ + id: 'st_condition', + pmType: 'textarea', + name: 'st_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea', + value: dataRow.st_condition + }) + ] + }); + this.secondaryWindow.addItem(form); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var data, + restClient; + data = form.getData(); + data.st_type = stepType; + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + ((typeof(stepID) != "undefined") ? stepID + "/" : "") + 'trigger/' + triggerID, + typeRequest: 'update', + data: data, + messageError: 'There are problems update the Step Trigger, please try again.'.translate(), + functionSuccess: function (xhr, response) { + dataRow.st_condition = data.st_condition; + row.setData(dataRow); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + that.secondaryWindow.close(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(false); + criteriaButton.handler = null; + } + this.secondaryWindow.open(); +}; +/** + * eliminates the elements of the secondary window + * @chainable + */ +stepsTask.prototype.resetSecondaryWindow = function () { + var i, items; + if (this.secondaryWindow && this.secondaryWindow.items.getSize() > 0) { + items = this.secondaryWindow.items; + for (i = 0; i < items.getSize(); i += 1) { + this.secondaryWindow.removeItem(items.get(i)); + } + } +}; +/** + * It establishes a PMUI.util.ArrayList that stores the + * elements of "stepsAssignAccordion" that are open + * @chainable + */ +stepsTask.prototype.elementsAccordionOpenFixed = function () { + var i, + accordionItems; + if (this.stepsAssignAccordion) { + accordionItems = this.stepsAssignAccordion.getItems(); + if ($.isArray(accordionItems)) { + for (i = 0; i < accordionItems.length; i += 1) { + if (!accordionItems[i].collapsed) { + this.elementAccordionOpen.insert(accordionItems[i]); + } + } + } + } +}; +/** + * It is an extension to add the "sortable" event "stepAssignAccordion". + * when a node "treePanel" is added to stop runs and is where you choose if it's a sort or aggregation. + * @chainable + */ +stepsTask.prototype.addEventSortableInAccordionElements = function () { + var tagContainer, + newIndex, + index, + treeNodeObject, + treeNodeData, + that = this; + if (this.stepsAssignAccordion && this.stepsAssignAccordion.html) { + tagContainer = this.stepsAssignAccordion.body; + $(tagContainer).sortable({ + items: '>div:not(#idAssignment,#idRouting)', + placeholder: 'steps-placeholder', + receive: function (event, ui) { + var item = ui ? ui.item : null; + if (item && item instanceof jQuery && item.length) { + treeNodeObject = PMUI.getPMUIObject(item.get(0)); + treeNodeData = treeNodeObject.getData(); + } + }, + stop: function (event, ui) { + var itemClone = ui ? ui.item : null, + accordionItems, + accordionItem, + dataEdited, + restClientMultipart, + restClient; + var newIndex = ui.item.index(); + accordionItems = that.stepsAssignAccordion.getItems(); + if (itemClone && itemClone instanceof jQuery && itemClone.length) { + if (treeNodeObject) { + itemClone.remove(); + if (newIndex + 1 > accordionItems.length) { + newIndex = that.stepsAssigned.getSize(); + } + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step', + typeRequest: 'post', + data: { + step_type_obj: treeNodeData.obj_type, + step_uid_obj: treeNodeData.obj_uid, + step_condition: '', + step_position: newIndex + 1, + step_mode: 'EDIT' + }, + functionSuccess: function (xhr, response) { + var item, buttonAfected, treeNode; + that.stepsAssignTree.removeItem(treeNodeObject); + treeNode = that.stepsAssignTree.items.find("id", response.step_type_obj); + if (treeNode.items.getSize() === 0) { + treeNode.addDataItem(that.notItemConfig()); + } + response.obj_description = ''; + response.obj_title = treeNodeData.obj_title; + response.triggers = []; + item = that.createAccordionItem(response, true, true); + item.dataItem = response; + if (that.stepsAssignAccordion.items.getSize() === 2) { + that.stepsAssignAccordion.addItem(item, 0); + } else { + that.stepsAssignAccordion.addItem(item, newIndex); + } + that.stepsAssignAccordion.defineEvents(); + that.customAccordionItemButtons(item.html, response, item); + that.updateItemIndexToAccordion(); + that.addEventSortableInAccordionElements(); + that.addEventSortableInTreePanelElements(); + buttonAfected = that.labelsPanel.getItem("expand-button"); + buttonAfected.setDisabled(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while assigning the step, please try again later.'.translate(), + messageSuccess: 'Step assigned successfully.'.translate(), + flashContainer: that.stepsAssignAccordion.getParent() + }); + restClient.executeRestClient(); + } else { + accordionItem = PMUI.getPMUIObject(ui.item.get(0)); + index = that.stepsAssignAccordion.items.indexOf(accordionItem); + if (newIndex !== index) { + that.stepsAssignAccordion.items.remove(accordionItem); + that.stepsAssignAccordion.items.insertAt(accordionItem, newIndex); + dataEdited = { + step_position: newIndex + 1, + step_uid: accordionItem.dataItem.step_uid, + step_type_obj: accordionItem.dataItem.step_type_obj, + step_uid_obj: accordionItem.dataItem.step_uid_obj + }; + restClientMultipart = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + accordionItem.dataItem.step_uid, + typeRequest: 'update', + data: dataEdited, + functionSuccess: function (xhr, response) { + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while editing the step, please try again later.'.translate(), + messageSuccess: 'Step editing successfully.'.translate(), + flashContainer: this.mainWindow + }); + restClientMultipart.executeRestClient(); + } + } + } + }, + start: function (e, ui) { + newIndex = ui.item.index(); + } + }); + } +}; +/** + * It is an extension to add the "sortable" event "stepsAssignTree". + * when choosing a node treePanel and you want to add to the accordion or the grid + * @chainable + */ +stepsTask.prototype.addEventSortableInTreePanelElements = function () { + var items = this.stepsAssignTree.getItems(), + connect, + i, + sw, + that = this, + nodeItems; + for (i = 0; i < items.length; i += 1) { + nodeItems = items[i].getItems(); + if (nodeItems.length && nodeItems[0].getData().obj_type) { + sw = items[i].getItems()[0].getData().obj_type === "SCRIPT"; + connect = sw ? ".pmui-gridpanel-tbody" : ".pmui-accordion-panel-body"; + $(items[i].html).find('ul').find('>li').draggable({ + appendTo: document.body, + revert: "invalid", + helper: "clone", + cursor: "move", + zIndex: 1000, + connectToSortable: connect, + start: function (e) { + var i, nodeTag, node, nodeData, accordionItems, item; + nodeTag = e.target; + node = PMUI.getPMUIObject(nodeTag); + nodeData = node.getData(); + accordionItems = that.stepsAssignAccordion.getItems(); + $(that.stepsAssignAccordion.body).hide(); + if (nodeData.obj_type !== "SCRIPT") { + for (i = 0; i < accordionItems.length; i += 1) { + item = accordionItems[i]; + item.collapse(); + } + } + $(that.stepsAssignAccordion.body).show(); + }, + stop: function () { + var i = 0, max; + if (that.elementAccordionOpen) { + max = that.elementAccordionOpen.getSize(); + for (i = 0; i < max; i += 1) { + that.elementAccordionOpen.get(i).expand(); + } + } + } + }); + } else { + $(nodeItems[0].html).draggable("disable"); + } + } +}; +/** + * add custom buttons on the head of an element of stepsAssignAccordion + * are three buttons + * properties + * edit + * remove + * @param html, is the html of the header accordion item + * @param step, the data of the step selected + */ +stepsTask.prototype.customAccordionItemButtons = function (html, step, accordionItem) { + var propertiesStep, + editStep, + removeStep, + $html, + containerButtons, + that = this, + title; + if (html) { + $html = jQuery(html.getElementsByClassName("pmui-accordion-item-header")); + title = step.obj_title + ' (' + step.step_type_obj + ')'; + $html.find(".pmui-accordion-item-title").get(0).title = title; + containerButtons = $('
'); + containerButtons.addClass("propertiesTask-accordionItem"); + propertiesStep = $('' + 'Properties'.translate() + ''); + propertiesStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + editStep = $('' + 'Edit'.translate() + ''); + editStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + removeStep = $('' + 'Remove'.translate() + ''); + removeStep.addClass("mafe-button-delete propertiesTask-accordionButton"); + + propertiesStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.propertiesStepShow(step); + return false; + }); + + editStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.editStepShow(step, accordionItem); + return false; + }); + + removeStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.removeStepShow(step); + return false; + }); + containerButtons.append(propertiesStep); + containerButtons.append(editStep); + containerButtons.append(removeStep); + $html.append(containerButtons); + } +}; +/** + * opens the properties of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ +stepsTask.prototype.propertiesStepShow = function (step) { + var form, + saveButton, + cancelButton, + criteriaButton, + that = this; + this.resetSecondaryWindow(); + this.secondaryWindow.setWidth(520); + this.secondaryWindow.setHeight(370); + this.secondaryWindow.setTitle('Step Properties'.translate()); + form = new PMUI.form.Form({ + id: 'stepsEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + { + id: 'step_mode', + pmType: 'radio', + label: 'Mode'.translate(), + value: '', + visible: step.step_type_obj === "DYNAFORM" ? true : false, + name: 'step_mode', + options: [ + { + id: 'modeEdit', + label: 'Edit'.translate(), + value: 'EDIT', + selected: true + }, { + id: 'modeView', + label: 'View'.translate(), + value: 'VIEW' + } + ] + }, + new CriteriaField({ + id: 'step_condition', + pmType: 'textarea', + name: 'step_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea' + }) + ] + }); + this.secondaryWindow.addItem(form); + + var restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + form.getField('step_mode').setValue(response.step_mode); + form.getField('step_condition').setValue(response.step_condition); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient; + if (form.isValid()) { + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'update', + data: form.getData(), + functionSuccess: function () { + that.secondaryWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems update the Step Trigger, please try again.'.translate() + }); + restClient.executeRestClient(); + } + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.handler = null; + criteriaButton.setVisible(false); + } + this.secondaryWindow.open(); +}; +/** + * opens the step of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ +stepsTask.prototype.editStepShow = function (step, accordioItem) { + var inputDocument, + that = this; + switch (step.step_type_obj) { + case 'DYNAFORM': + var restProxy = new PMRestClient({ + endpoint: 'dynaform/' + step.step_uid_obj, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var old = PMUI.activeCanvas, + formDesigner; + PMUI.activeCanvas = false; + formDesigner = PMDesigner.dynaformDesigner(response); + formDesigner.onHide = function () { + var assignedDynaform, + i, + data, + title; + assignedDynaform = that.getStepsAssignedByCriteria("DYNAFORM"); + if (jQuery.isArray(assignedDynaform)) { + for (i = 0; i < assignedDynaform.length; i += 1) { + data = assignedDynaform[i]; + if (typeof data === "object") { + if (data.step_uid === step.step_uid) { + title = data.step_position + ". " + data.obj_title; + title = title + ' (' + that.stepsType["DYNAFORM"] + ')'; + accordioItem.setTitle(title); + accordioItem.dataItem = data; + } + } + } + } + PMUI.activeCanvas = old; + }; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + break; + case 'OUTPUT_DOCUMENT': + PMDesigner.output(); + PMDesigner.output.showTiny(step.step_uid_obj); + break; + case 'INPUT_DOCUMENT': + inputDocument = new InputDocument({ + onUpdateInputDocumentHandler: function (data, inputDoc) { + var position, title; + position = accordioItem.dataItem.step_position; + title = position + ". " + data.inp_doc_title; + title = title + ' (' + that.stepsType["INPUT_DOCUMENT"] + ')'; + accordioItem.dataItem.obj_title = data.inp_doc_title; + accordioItem.setTitle(title); + inputDoc.winMainInputDocument.close(); + } + }); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(step.step_uid_obj); + break; + } +}; +/** + * the window opens for confirmation of the removal step + * @param step, the current step to remove + * @chainable + */ +stepsTask.prototype.removeStepShow = function (step) { + var title, + yesButton, + noButton, + that = this, + restClient; + if (this.stepsType[step.step_type_obj] !== undefined) { + title = "Step {0} ( {1} )".translate([step.obj_title, this.stepsType[step.step_type_obj]]); + this.confirmWindow.setTitle(title); + } else { + this.confirmWindow.setTitle("Step " + step.step_type_obj.capitalize()); + } + this.confirmWindow.setMessage("Do you want to remove the step '{0}'?".translate([step.obj_title])); + yesButton = this.confirmWindow.footer.getItem("confirmWindow-footer-yes"); + noButton = this.confirmWindow.footer.getItem("confirmWindow-footer-no"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.removingStepTask(step, response); + that.confirmWindow.close(); + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while deleting the step, please try again later.'.translate(), + messageSuccess: 'Step removed successfully'.translate(), + flashContainer: that.mainWindow.getParent() + }); + restClient.executeRestClient(); + }); + } + if (noButton) { + noButton.setHandler(function () { + that.confirmWindow.close(); + }); + } + this.confirmWindow.open(); +}; +/** + * eliminates the step of step Assign Accordion + * @param step, the current step to remove + * @param response, data from the endpoint + */ +stepsTask.prototype.removingStepTask = function (step, response) { + var stepObject, + stepAvailable, + treeNodeObject, + stepAvailables, + i, + itemsTreeNode = [], + items = []; + stepObject = this.stepsAssignAccordion.getItem("id" + step.step_uid_obj); + this.elementAccordionOpen.remove(stepObject); + this.stepsAssigned.remove(stepObject); + this.stepsAssignAccordion.removeItem(stepObject); + if (stepObject) { + stepAvailable = this.getStepAvailables(); + stepAvailables = this.getAvailablesStepsByCriteria(step.step_type_obj, stepAvailable); + for (i = 0; i < stepAvailables.length; i += 1) { + items.push({ + obj_title: stepAvailables[i]['obj_title'], + obj_type: stepAvailables[i]['obj_type'], + obj_uid: stepAvailables[i]['obj_uid'] + }); + } + treeNodeObject = this.stepsAssignTree.getItem(step.step_type_obj); + itemsTreeNode = treeNodeObject.getItems(); + for (i = 0; i < itemsTreeNode.length; i += 1) { + treeNodeObject.removeItem(itemsTreeNode[i]); + } + treeNodeObject.clearItems(); + treeNodeObject.setDataItems(items); + this.updateIndexPosition(treeNodeObject); + this.addEventSortableInTreePanelElements(); + this.addEventSortableInAccordionElements(); + } +}; +/** + * get the steps is not assigned by a criterion + * @param criteria, It is the filter criteria search + * @param stepAvailable, all steps Unassigned + * @returns {Array}, filtered items + */ +stepsTask.prototype.getAvailablesStepsByCriteria = function (criteria, stepAvailable) { + var items = [], + i; + if (jQuery.isArray(stepAvailable)) { + for (i = 0; i < stepAvailable.length; i += 1) { + if (stepAvailable[i].obj_type === criteria) { + items.push(stepAvailable[i]); + } + } + } + return items; +}; +/** + * This method is executed when an element stepsAssignTree, is assigned in a grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @returns {stepsTask} + */ +stepsTask.prototype.receiveTreeNodeItem = function (receiveData, grid, index) { + var restClient, that = this, message; + if (that.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: that.mainWindow + }); + message.show(); + return; + } + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger' : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger', + typeRequest: 'post', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: '', + st_position: index + 1 + }, + functionSuccess: function (xhr, response) { + grid.addDataItem({ + st_condition: '', + st_position: index + 1, + st_type: grid.st_type, + tri_description: '', + tri_title: receiveData.obj_title, + tri_uid: receiveData.obj_uid, + obj_title: receiveData.obj_title, + obj_uid: receiveData.obj_uid + }, index); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method is executed when a row is drop in another grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @param draggableItem + * @returns {*} + */ +stepsTask.prototype.receiveRowItem = function (receiveData, grid, index, draggableItem) { + var receiveParent = draggableItem.getParent(), + message, + restClient, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: that.mainWindow + }); + index = receiveParent.items.indexOf(draggableItem); + receiveParent.items.remove(draggableItem); + receiveParent.addItem(draggableItem, index); + message.show(); + return false; + } + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger' : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger', + method: 'POST', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + } + }, { + url: receiveParent.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger/' + receiveData.obj_uid + '/' + that.getStepType(receiveParent.st_type) : + 'activity/' + PMDesigner.act_uid + '/step/' + receiveParent.step_uid + '/trigger/' + receiveData.obj_uid + '/' + receiveParent.st_type.toLowerCase(), + method: 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + var data; + data = receiveData; + if (data.hasOwnProperty("st_type")) { + data.st_type = grid.st_type; + grid.addDataItem(receiveData, index); + } + receiveParent.removeItem(draggableItem); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: [ + 'An unexpected error while assigning the trigger, please try again later.'.translate() + ], + messageSuccess: [ + 'Trigger assigned successfully.'.translate() + ] + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method is executed when a row is sorted in the grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the new index position row + * @returns {stepsTask} + */ +stepsTask.prototype.sortableRowHandler = function (receiveData, grid, index) { + var that = this, + restClient; + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + "/step/trigger/" + receiveData.tri_uid : + 'activity/' + PMDesigner.act_uid + "/step/" + grid.step_uid + "/trigger/" + receiveData.tri_uid, + typeRequest: 'update', + data: { + st_type: receiveData.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: 'An unexpected error while assigning the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger assigned successfully.'.translate() + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method eliminates the list of triggers trigger an assigned step + * @param row, the row affected or selected + * @param grid, It is affected or grid to remove selected row + */ +stepsTask.prototype.removeTrigger = function (row, grid) { + var message = 'Do you want to remove the trigger "', + messageData = row.getData().tri_title ? row.getData().tri_title : "", + yesButton, + noButton, + that = this, + restClient; + message = message + messageData + '"?'; + this.confirmWindow.setMessage(message.translate()); + yesButton = this.confirmWindow.footer.getItem("confirmWindow-footer-yes"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger/' + row.getData().tri_uid + '/' + that.getStepType(row.getData().st_type) : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger/' + row.getData().tri_uid + '/' + that.getStepType(row.getData().st_type), + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + that.confirmWindow.close(); + that.updateIndexToGrid(grid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: 'An unexpected error while deleting the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger removed successfully'.translate() + }); + restClient.executeRestClient(); + }); + } + noButton = this.confirmWindow.footer.getItem("confirmWindow-footer-no"); + if (noButton) { + noButton.setHandler(function () { + that.confirmWindow.close(); + }); + } + this.confirmWindow.open(); +}; +/** + * updates indexes of elements selected grid + * @param grid, It is affected or grid to remove selected row + * @returns {stepsTask} + */ +stepsTask.prototype.updateIndexToGrid = function (grid) { + var cell, rows, i, row; + if (grid) { + rows = grid.getItems(); + if (jQuery.isArray(rows)) { + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + cell = row.cells.find("columnData"); + if (cell) { + cell.setContent(i + 1); + } + } + } + } + return this; +}; +/** + * get the steps assigned by a search criterion + * @param criteria, search filter, after running the endpoint getAccordionData method + * @returns {Array}, response with criteria + */ +stepsTask.prototype.getStepsAssignedByCriteria = function (criteria) { + var allAssigned, + i, + elements, + j, + resp, + response = []; + allAssigned = this.getAccordionData(); + if (jQuery.isArray(allAssigned)) { + for (i = 0; i < allAssigned.length; i += 1) { + resp = allAssigned[i]; + if (typeof resp === "object") { + elements = resp.response ? resp.response : []; + for (j = 0; j < elements.length; j += 1) { + data = elements[j]; + if (typeof data === "object") { + if (data.step_type_obj && data.step_type_obj === criteria) { + response.push(data); + } + } + } + } + } + } + return response; +}; +/** + * updates indexes of elements assigned + * @returns {stepsTask} + */ +stepsTask.prototype.updateItemIndexToAccordion = function () { + var title, + i, + item, + dataItem, + items = this.stepsAssignAccordion.items, + position, + max; + max = items.getSize(); + for (i = 0; i < max; i += 1) { + item = items.get(i); + position = items.indexOf(item); + dataItem = item.dataItem; + title = (position + 1) + ". " + dataItem.obj_title; + if (this.stepsType[dataItem.step_type_obj]){ + title = title + ' (' + this.stepsType[dataItem.step_type_obj] + ')'; + } + item.dataItem.step_position = i + 1; + item.setTitle(title); + } + return this; +}; +/** + * add tooltip in treeNode elements + * @returns {stepsTask} + */ +stepsTask.prototype.updateIndexPosition = function (treeNode) { + var items, i, item, $item, text, data; + if (treeNode && treeNode.html) { + items = treeNode.getItems(); + if (jQuery.isArray(items)) { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + if (item.html) { + $item = $(item.html); + data = item.getData(); + text = $item.find("a").get(0); + text.title = data.obj_title; + } + } + } + } + return this; +}; +/** + * return the not items config. + * @returns {{obj_title: *, obj_uid: string, id: string}} + */ +stepsTask.prototype.notItemConfig = function () { + var config = { + obj_title: 'N/A'.translate(), + obj_uid: '', + id: "notItem" + }; + return config; +}; +( + function () { + var processPermissionsSetForm; + PMDesigner.processPermissions = function (event) { + var PROCESS_PERMISSIONS_OPTION = "", + PROCESS_PERMISSIONS_UID = "", + arrayCboGroup = [], + arrayCboUser = [], + winGrdpnlProcessPermissions, + grdpnlProcessPermissions, + frmProcessPermissions, + processPermissionsData, + btnCreate, btnSave, btnCancel, + loadDataFromServerToFields, + disableAllItems, + listProcessPermissions, + isDirty2, + isDirtyFormProcessPermission, + refreshGridPanelInMainWindow, + processPermissionsGetRestProxy, + processPermissionsPostRestProxy, + processPermissionGetRestProxy, + processPermissionsPutRestProxy, + cboTargetCboOriginTaskSetOptionsRestProxy, + cboDynaFormSetOptionsRestProxy, + cboInputDocumentSetOptionsRestProxy, + cboOutputDocumentSetOptionsRestProxy, + processPermissionsSetFormByType, + processPermissionsDeleteRestProxy, + cboStatusCase, + cboTargetTask, + cboGroupOrUser, + cboOriginTask, + optionsType, + cboType, + cboDynaForm, + cboInputDocument, + cboOutputDocument, + cboPermission, + cboParticipationRequired, + processPermissionsDataIni = {}, + notification, + notificationText = "Fields marked with an asterisk (%%ASTERISK%%) are required.".translate() + .replace(/%%ASTERISK%%/g, '*'); + + loadDataFromServerToFields = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/dynaforms', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/input-documents', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/output-documents', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var i; + data = response[0].response; + cboTargetTask.clearOptions(); + cboOriginTask.clearOptions(); + cboTargetTask.addOption({value: '', label: 'All Tasks'.translate()}); + cboOriginTask.addOption({value: '', label: 'All Tasks'.translate()}); + for (i = 0; i <= data.diagrams[0].activities.length - 1; i += 1) { + cboTargetTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + cboOriginTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + } + //project/dynaforms + data = response[1].response; + cboDynaForm.clearOptions(); + cboDynaForm.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboDynaForm.addOption({value: data[i].dyn_uid, label: data[i].dyn_title}); + } + //project/input-documents + data = response[2].response; + cboInputDocument.clearOptions(); + cboInputDocument.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboInputDocument.addOption({value: data[i].inp_doc_uid, label: data[i].inp_doc_title}); + } + //project/output-documents + data = response[3].response; + cboOutputDocument.clearOptions(); + cboOutputDocument.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboOutputDocument.addOption({value: data[i].out_doc_uid, label: data[i].out_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + + disableAllItems = function () { + winGrdpnlProcessPermissions.getItems()[0].setVisible(false); + winGrdpnlProcessPermissions.getItems()[1].setVisible(false); + winGrdpnlProcessPermissions.hideFooter(); + }; + + isDirty2 = function () { + var user, + dynaForm, + inputDocument, + outputDocument, + flagInsert = (typeof(processPermissionsData.op_case_status) === "undefined") ? true : false; + + if (flagInsert) { + processPermissionsData = processPermissionsDataIni; + } + + if (cboStatusCase.getValue() != processPermissionsData.op_case_status) { + return true; + } + + if (cboTargetTask.getValue() != processPermissionsData.tas_uid) { + return true; + } + + user = (cboGroupOrUser.get("value") !== null && cboGroupOrUser.get("value")) ? cboGroupOrUser.get("value") : ""; + + if (user != processPermissionsData.usr_uid) { + return true; + } + + if (cboOriginTask.getValue() != processPermissionsData.op_task_source) { + return true; + } + + if (cboParticipationRequired.getValue() != processPermissionsData.op_participate) { + return true; + } + + if (cboType.getValue() != processPermissionsData.op_obj_type) { + return true; + } + + switch (cboType.getValue()) { + case "DYNAFORM": + dynaForm = (cboDynaForm.getValue() !== "") ? cboDynaForm.getValue() : "0"; + + if (dynaForm != processPermissionsData.op_obj_uid) { + return true; + } + + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + case "ATTACHMENT": + if (cboPermission.getValue() !== processPermissionsData.op_action) { + return true; + } + break; + case "INPUT": + inputDocument = (cboInputDocument.getValue() !== "") ? cboInputDocument.getValue() : "0"; + + if (inputDocument != processPermissionsData.op_obj_uid) { + return true; + } + + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + + break; + case "OUTPUT": + outputDocument = (cboOutputDocument.getValue() !== "") ? cboOutputDocument.getValue() : "0"; + + if (outputDocument != processPermissionsData.op_obj_uid) { + return true; + } + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "ANY": + case "MSGS_HISTORY": + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + } + + return false; + }; + + isDirtyFormProcessPermission = function () { + $("input,select,textarea").blur(); + if (frmProcessPermissions.isVisible()) { + var result = frmProcessPermissions.isDirty(), message_window; + + if (isDirty2()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Permissions".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + cboGroupOrUser.html.find("input").val(""); + cboGroupOrUser.value = ""; + if (clickedClose) { + winGrdpnlProcessPermissions.close(); + } else { + refreshGridPanelInMainWindow(false); + } + + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if (cboGroupOrUser.html.find("input").val()) { + cboGroupOrUser.html.find("input").val(""); + } + cboGroupOrUser.containerList.hide(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + refreshGridPanelInMainWindow(false); + if (clickedClose) { + winGrdpnlProcessPermissions.close(); + } + } + } else { + winGrdpnlProcessPermissions.close(); + } + }; + refreshGridPanelInMainWindow = function (load) { + disableAllItems(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + winGrdpnlProcessPermissions.getItems()[0].setVisible(true); + winGrdpnlProcessPermissions.setTitle("Permissions".translate()); + load = load != null ? load : true; + if (load) { + processPermissionsGetRestProxy(grdpnlProcessPermissions); + } + }; + + processPermissionsGetRestProxy = function (grdpnl) { + var restProxy = new PMRestClient({ + endpoint: "process-permissions", + typeRequest: "get", + functionSuccess: function (xhr, response) { + listProcessPermissions = response; + grdpnl.setDataItems(listProcessPermissions); + grdpnl.sort('group_user', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); + }; + + processPermissionsPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "process-permission", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission saved successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + processPermissionGetRestProxy = function (processPermissionsUid) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response; + processPermissionsSetForm("PUT", data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + processPermissionsPutRestProxy = function (processPermissionsUid, data) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission edited successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + cboTargetCboOriginTaskSetOptionsRestProxy = function (cboTargetTask, cboOriginTask) { + cboTargetTask.clearOptions(); + cboOriginTask.clearOptions(); + var restProxy = new PMRestClient({ + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboTargetTask.addOption({value: "", label: "All Tasks".translate()}); + cboOriginTask.addOption({value: "", label: "All Tasks".translate()}); + for (i = 0; i <= data.diagrams[0].activities.length - 1; i += 1) { + cboTargetTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + cboOriginTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); + }; + + cboDynaFormSetOptionsRestProxy = function (cboDynaForm) { + cboDynaForm.clearOptions(); + var restProxy = new PMRestClient({ + endpoint: "dynaforms", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboDynaForm.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboDynaForm.addOption({value: data[i].dyn_uid, label: data[i].dyn_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + cboInputDocumentSetOptionsRestProxy = function (cboInputDocument) { + cboInputDocument.clearOptions(); + var restProxy = new PMRestClient({ + endpoint: "input-documents", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboInputDocument.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboInputDocument.addOption({value: data[i].inp_doc_uid, label: data[i].inp_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + cboOutputDocumentSetOptionsRestProxy = function (cboOutputDocument) { + var restProxy; + cboOutputDocument.clearOptions(); + restProxy = new PMRestClient({ + endpoint: "output-documents", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboOutputDocument.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboOutputDocument.addOption({value: data[i].out_doc_uid, label: data[i].out_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + processPermissionsSetFormByType = function (type) { + cboPermission.removeOption("DELETE"); + cboPermission.removeOption("RESEND"); + + cboPermission.reset(); + cboOriginTask.setVisible(true); + cboParticipationRequired.setVisible(true); + cboStatusCase.setVisible(true); + cboDynaForm.setVisible(false); + cboInputDocument.setVisible(false); + cboOutputDocument.setVisible(false); + cboPermission.setVisible(false); + + switch (type) { + case "DYNAFORM": + cboDynaForm.setVisible(true); + cboPermission.setVisible(true); + break; + case "ATTACHMENT": + cboPermission.setVisible(true); + break; + case "INPUT": + cboPermission.addOption({value: "DELETE", label: "Delete".translate()}); + + cboInputDocument.setVisible(true); + cboPermission.setVisible(true); + break; + case "OUTPUT": + cboPermission.addOption({value: "DELETE", label: "Delete".translate()}); + + cboOutputDocument.setVisible(true); + cboPermission.setVisible(true); + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "MSGS_HISTORY": + cboPermission.addOption({value: "RESEND", label: "Resend".translate()}); + + cboPermission.setVisible(true); + break; + case "ANY": + cboPermission.setVisible(true); + break; + case "REASSIGN_MY_CASES": + cboOriginTask.setVisible(false); + cboParticipationRequired.setVisible(false); + cboStatusCase.setVisible(false); + break; + } + }; + + processPermissionsDeleteRestProxy = function (processPermissionsUid) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "remove", + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission deleted successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + processPermissionsSetForm = function (option, data) { + cboGroupOrUser.hideMessageRequired(); + processPermissionsData = data; + PROCESS_PERMISSIONS_OPTION = option; + PROCESS_PERMISSIONS_UID = (typeof(processPermissionsData.op_uid) !== "undefined") ? processPermissionsData.op_uid : ""; + + disableAllItems(); + winGrdpnlProcessPermissions.showFooter(); + winGrdpnlProcessPermissions.getItems()[1].setVisible(true); + + loadDataFromServerToFields(); + + switch (option) { + case "POST": + winGrdpnlProcessPermissions.setTitle("Create permission".translate()); + frmProcessPermissions.reset(); + processPermissionsSetFormByType(cboType.getValue()); + + break; + case "PUT": + winGrdpnlProcessPermissions.setTitle("Edit permission".translate()); + cboStatusCase.setValue(processPermissionsData.op_case_status); + cboTargetTask.setValue(processPermissionsData.tas_uid); + + var endpoint; + if (processPermissionsData.op_user_relation == 1) { + endpoint = "users/" + processPermissionsData.usr_uid; + } + if (processPermissionsData.op_user_relation == 2) { + endpoint = "groups/" + processPermissionsData.usr_uid; + } + + if (endpoint) { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (response.hasOwnProperty("usr_uid")) { + cboGroupOrUser.set("value", response["usr_uid"]); + cboGroupOrUser.data = response; + cboGroupOrUser.html.find("input").val(response["usr_firstname"] + " " + response["usr_lastname"] + " " + "(" + response["usr_username"] + ")"); + } + if (response.hasOwnProperty("grp_uid")) { + cboGroupOrUser.set("value", response["grp_uid"]); + cboGroupOrUser.data = response; + cboGroupOrUser.html.find("input").val(response["grp_title"]); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint(endpoint); + restClient.executeRestClient(); + } + + cboParticipationRequired.setValue(processPermissionsData.op_participate); + cboType.setValue(processPermissionsData.op_obj_type); + cboOriginTask.setValue(processPermissionsData.op_task_source); + processPermissionsSetFormByType(processPermissionsData.op_obj_type); + switch (processPermissionsData.op_obj_type) { + case "ANY": + cboPermission.setValue(processPermissionsData.op_action); + break; + case "DYNAFORM": + cboDynaForm.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "ATTACHMENT": + cboPermission.setValue(processPermissionsData.op_action); + break; + case "INPUT": + cboInputDocument.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "OUTPUT": + cboOutputDocument.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "MSGS_HISTORY": + cboPermission.setValue(processPermissionsData.op_action); + break; + } + break; + } + frmProcessPermissions.setFocus(); + }; + + cboStatusCase = new PMUI.field.DropDownListField({ + id: "cboStatusCase", + name: "cboStatusCase", + controlsWidth: "120px", + label: "Case Status".translate(), + value: "ALL", + options: [ + { + value: "ALL", + label: "All".translate() + }, + { + value: "DRAFT", + label: "DRAFT".translate() + }, + { + value: "TO_DO", + label: "TO DO".translate() + }, + { + value: "PAUSED", + label: "PAUSED".translate() + }, + { + value: "COMPLETED", + label: "COMPLETED".translate() + } + ] + }); + + cboTargetTask = new PMUI.field.DropDownListField({ + id: "cboTargetTask", + name: "cboTargetTask", + controlsWidth: "300px", + label: "Target Task".translate(), + options: null + }); + cboGroupOrUser = new SuggestField({ + label: "Group or User".translate(), + id: "cboGroupOrUser", + name: "cboGroupOrUser", + placeholder: "suggest users and groups", + width: 500, + required: true, + separatingText: ["Groups", "Users"], + dynamicLoad: { + data: [ + { + key: "grp_uid", + label: ["grp_title"] + }, + { + key: "usr_uid", + label: ["usr_firstname", "usr_lastname", "(", "usr_username", ")"] + } + ], + keys: { + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endpoints: [ + { + method: "GET", + url: 'groups' + }, { + method: "GET", + url: 'users' + } + ] + } + } + }); + + cboOriginTask = new PMUI.field.DropDownListField({ + id: "cboOriginTask", + name: "cboOriginTask", + controlsWidth: "300px", + label: "Origin Task".translate(), + options: null + }); + + cboParticipationRequired = new PMUI.field.DropDownListField({ + id: "cboParticipationRequired", + name: "cboParticipationRequired", + controlsWidth: "70px", + label: "Participation required?".translate(), + value: "0", + options: [ + { + value: "0", + label: "No".translate() + }, + { + value: "1", + label: "Yes".translate() + } + ] + }); + notification = new PMUI.field.TextAnnotationField({ + id: "requiredMessage", + name: "Message", + textType: PMUI.field.TextAnnotationField.TEXT_TYPES.HTML, + text: notificationText, + text_Align: "center" + }); + optionsType = [ + { + value: "ANY", + label: "All".translate() + }, + { + value: "DYNAFORM", + label: "Dynaform".translate() + }, + { + value: "ATTACHMENT", + label: "Attachment".translate() + }, + { + value: "INPUT", + label: "Input Document".translate() + }, + { + value: "OUTPUT", + label: "Output Document".translate() + }, + { + value: "CASES_NOTES", + label: "Cases Notes".translate() + }, + { + value: "MSGS_HISTORY", + label: "Messages History".translate() + }, + { + value: "REASSIGN_MY_CASES", + label: "Reassign my cases".translate() + } + ]; + + if (enterprise == "1") { + optionsType.push({value: "SUMMARY_FORM", label: "Summary Form".translate()}); + } + // sorting the optionsType + optionsType.sort(function(a, b) { + return (a.label > b.label) ? 1 : ((b.label > a.label) ? -1 : 0); + }); + + cboType = new PMUI.field.DropDownListField({ + id: "cboType", + name: "cboType", + controlsWidth: "180px", + label: "Type".translate(), + value: "ANY", + options: optionsType, + onChange: function (newValue, prevValue) { + processPermissionsSetFormByType(cboType.getValue()); + } + }); + + cboDynaForm = new PMUI.field.DropDownListField({ + id: "cboDynaForm", + name: "cboDynaForm", + controlsWidth: "300px", + label: "DynaForm".translate(), + options: [], + visible: false + }); + + cboInputDocument = new PMUI.field.DropDownListField({ + id: "cboInputDocument", + name: "cboInputDocument", + controlsWidth: "300px", + label: "Input Document".translate(), + options: [], + visible: false + }); + + cboOutputDocument = new PMUI.field.DropDownListField({ + id: "cboOutputDocument", + name: "cboOutputDocument", + controlsWidth: "300px", + label: "Output Document".translate(), + options: [], + visible: false + }); + + cboPermission = new PMUI.field.DropDownListField({ + id: "cboPermission", + name: "cboPermission", + controlsWidth: "100px", + label: "Permission".translate(), + value: "VIEW", + options: [ + { + value: "VIEW", + label: "View".translate() + }, + { + value: "BLOCK", + label: "Block".translate() + } + ], + visible: true + }); + + frmProcessPermissions = new PMUI.form.Form({ + id: "frmProcessPermissions", + + title: "", + width: "890px", + items: [ + cboType, + cboStatusCase, + cboTargetTask, + cboOriginTask, + cboParticipationRequired, + cboDynaForm, + cboInputDocument, + cboOutputDocument, + cboPermission + ] + }); + + btnCreate = new PMUI.ui.Button({ + id: "btnCreate", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + "mafe-button-create" + ] + }, + + handler: function () { + frmProcessPermissions.reset(); + processPermissionsDataIni = {}; + + processPermissionsDataIni.op_case_status = "ALL"; + processPermissionsDataIni.tas_uid = ""; + processPermissionsDataIni.usr_uid = ""; + processPermissionsDataIni.op_task_source = ""; + processPermissionsDataIni.op_participate = "0"; + processPermissionsDataIni.op_obj_type = "ANY"; + processPermissionsDataIni.op_obj_uid = ""; + processPermissionsDataIni.op_action = "VIEW"; + + processPermissionsSetForm("POST", {}); + } + }); + + grdpnlProcessPermissions = new PMUI.grid.GridPanel({ + id: "grdpnlProcessPermissions", + filterPlaceholder: "Search ...".translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + width: "96%", + tableContainerHeight: 374, + //height: DEFAULT_WINDOW_HEIGHT - 60, + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterable: true, + columns: [ + { + columnData: "group_user", + title: "Group or User".translate(), + alignmentCell: 'left', + width: "190px", + sortable: true + }, + { + columnData: "op_obj_type", + title: "Type".translate(), + alignmentCell: 'left', + width: "100px", + sortable: true + }, + { + columnData: "participated", + title: "Participation".translate(), + alignmentCell: 'left', + width: "115px", + sortable: true + }, + { + columnData: "object", + title: "Object".translate(), + alignmentCell: 'left', + width: "158px", + sortable: true + }, + { + columnData: "op_action", + title: "Permission".translate(), + alignmentCell: 'left', + width: "100px", + sortable: true + }, + { + columnData: "op_case_status", + title: "Status".translate(), + alignmentCell: 'left', + width: "70px", + sortable: true + }, + { + id: 'grdpnlProcessPermissionsButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: "70px", + buttonStyle: { + cssClasses: [ + "mafe-button-edit" + ] + }, + + onButtonClick: function (row, grid) { + var data; + frmProcessPermissions.reset(); + data = row.getData(); + processPermissionGetRestProxy(data.op_uid); + } + }, + { + id: 'grdpnlProcessPermissionsButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + width: "80px", + buttonStyle: { + cssClasses: [ + "mafe-button-delete" + ] + }, + + onButtonClick: function (row, grid) { + var data = row.getData(), msgWarning; + msgWarning = new PMUI.ui.MessageWindow({ + id: "msgWarning", + windowMessageType: 'warning', + width: 490, + title: "Permissions".translate(), + message: "Do you want to delete this permission?".translate(), + footerItems: [ + { + id: 'msgWarningButtonNo', + text: "No".translate(), + handler: function () { + msgWarning.close(); + }, + buttonType: "error" + }, + { + id: 'msgWarningButtonYes', + text: "Yes".translate(), + handler: function () { + processPermissionsDeleteRestProxy(data.op_uid); + msgWarning.close(); + }, + buttonType: "success" + } + ] + }); + + msgWarning.open(); + msgWarning.dom.titleContainer.style.height = '17px'; + msgWarning.showFooter(); + } + } + ], + dataItems: null + }); + + winGrdpnlProcessPermissions = new PMUI.ui.Window({ + id: "winGrdpnlProcessPermissions", + title: "Permissions".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + buttonPanelPosition: "bottom", + footerAlign: "right", + onBeforeClose: function () { + clickedClose = true; + isDirtyFormProcessPermission(); + }, + footerItems: [ + { + id: "btnCancel", + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + clickedClose = false; + isDirtyFormProcessPermission(); + } + }, + { + id: "btnSave", + text: "Save".translate(), + buttonType: "success", + handler: function () { + var cboGroupOrUserValue = "", groupOrUser, data; + + if (frmProcessPermissions.isValid() && cboGroupOrUser.isValid()) { + if (cboGroupOrUser.data) { + if (cboGroupOrUser.data.hasOwnProperty("usr_uid")) { + cboGroupOrUserValue = "1|" + cboGroupOrUser.get("value"); + } + if (cboGroupOrUser.data.hasOwnProperty("grp_uid")) { + cboGroupOrUserValue = "2|" + cboGroupOrUser.get("value"); + } + } else { + cboGroupOrUserValue = ""; + } + groupOrUser = cboGroupOrUserValue.split("|"); + + data = { + op_case_status: cboStatusCase.getValue(), + tas_uid: cboTargetTask.getValue() === '0' ? '' : cboTargetTask.getValue(), + op_user_relation: groupOrUser[0], + usr_uid: groupOrUser[1], + op_task_source: cboOriginTask.getValue() === '0' ? '' : cboOriginTask.getValue(), + op_participate: cboParticipationRequired.getValue() + }; + + switch (cboType.getValue()) { + case "DYNAFORM": + data["op_obj_type"] = cboType.getValue(); + data["dynaforms"] = cboDynaForm.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "INPUT": + data["op_obj_type"] = cboType.getValue(); + data["inputs"] = cboInputDocument.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "OUTPUT": + data["op_obj_type"] = cboType.getValue(); + data["outputs"] = cboOutputDocument.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "CASES_NOTES": + data["op_obj_type"] = cboType.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "REASSIGN_MY_CASES": + data = {}; + data["op_user_relation"] = groupOrUser[0]; + data["usr_uid"] = groupOrUser[1]; + data["tas_uid"] = cboTargetTask.getValue() === '0' ? '' : cboTargetTask.getValue(); + data["op_obj_type"] = cboType.getValue(); + break; + default: + data["op_obj_type"] = cboType.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + } + switch (PROCESS_PERMISSIONS_OPTION) { + case "POST": + processPermissionsPostRestProxy(data); + break; + case "PUT": + processPermissionsPutRestProxy(PROCESS_PERMISSIONS_UID, data); + break; + } + } else { + cboGroupOrUser.showMessageRequired(); + frmProcessPermissions.addItem(notification) + } + + cboGroupOrUser.html.find("input").val(""); + cboGroupOrUser.value = ""; + } + } + ] + }); + + winGrdpnlProcessPermissions.addItem(grdpnlProcessPermissions); + winGrdpnlProcessPermissions.addItem(frmProcessPermissions); + + refreshGridPanelInMainWindow(); + if (typeof listProcessPermissions !== "undefined") { + winGrdpnlProcessPermissions.open(); + $(cboGroupOrUser.createHTML()).insertBefore(cboType.html); + + + cboGroupOrUser.html.find("input").val(""); + jQuery(grdpnlProcessPermissions.html).css({ + margin: "2px" + }); + winGrdpnlProcessPermissions.body.style.height = "auto"; + $('#grdpnlProcessPermissions .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + winGrdpnlProcessPermissions.defineEvents(); + applyStyleWindowForm(winGrdpnlProcessPermissions); + + grdpnlProcessPermissions.dom.toolbar.appendChild(btnCreate.getHTML()); + btnCreate.defineEvents(); + disableAllItems(); + refreshGridPanelInMainWindow(); + } + }; + + PMDesigner.processPermissions.create = function () { + PMDesigner.processPermissions(); + + frmProcessPermissions.reset(); + processPermissionsDataIni = {}; + + processPermissionsDataIni.op_case_status = "ALL"; + processPermissionsDataIni.tas_uid = ""; + processPermissionsDataIni.usr_uid = ""; + processPermissionsDataIni.op_task_source = ""; + processPermissionsDataIni.op_participate = "0"; + processPermissionsDataIni.op_obj_type = "ANY"; + processPermissionsDataIni.op_obj_uid = ""; + processPermissionsDataIni.op_action = "VIEW"; + + processPermissionsSetForm("POST", {}); + }; + }() +); + +(function () { + var winHtmlShow, loadValuesStartMessage; + + PMDesigner.startMessage = function (element) { + var winGrdpnlStartMessage, + btnNew, + cboUser, + cboDynaForm, + btnGenerateStartMessagePage, + frmDataStartMessage, + frmHtml, + winFrmDataStartMessage, + restProxy, + disableAllItems, + winFrmStartMessageShow, + updateStartMessage, + loadDataDynaform, + loadDataUsers, + loadDataForm, + listUsers = [], + cboMethod, + listDynaforms = [], + dataForm = [], + enableGenerateWebEntry, + btnSaveStartMessagePage, + btnStartMessageCancel, + btnClose, + startMessage = element; + + disableAllItems = function () { + winGrdpnlStartMessage.getItems()[0].setVisible(false); + winGrdpnlStartMessage.getItems()[1].setVisible(false); + btnGenerateStartMessagePage.setVisible(false); + btnStartMessageCancel.setVisible(false); + btnClose.setVisible(false); + winGrdpnlStartMessage.hideFooter(); + }; + + winFrmStartMessageShow = function () { + disableAllItems(); + frmDataStartMessage.reset(); + winGrdpnlStartMessage.showFooter(); + winGrdpnlStartMessage.getItems()[0].setVisible(true); + btnGenerateStartMessagePage.setVisible(true); + btnStartMessageCancel.setVisible(true); + loadDataUsers(); + loadDataDynaform(); + loadDataForm(); + frmDataStartMessage.setFocus(); + }; + + winHtmlShow = function (msgHtml) { + if (typeof msgHtml == 'undefined') { + msgHtml = dataForm.we_data; + if (dataForm.we_method == "WS") { + window.open(msgHtml); + winGrdpnlStartMessage.close(); + return false; + } + } + disableAllItems(); + winGrdpnlStartMessage.showFooter(); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(false); + btnClose.setVisible(true); + winGrdpnlStartMessage.getItems()[1].setVisible(true); + winGrdpnlStartMessage.getItems()[1].setWidth(925); + winGrdpnlStartMessage.getItems()[1].setHeight(440); + winGrdpnlStartMessage.getItems()[1].hideHeader(); + frmHtml.getFields()[0].setHeight(396); + frmHtml.getItems()[0].setValue(msgHtml); + frmHtml.panel.style.addProperties({'box-sizing': 'initial'}); + frmHtml.style.addProperties({marginLeft: '16px'}); + frmHtml.setFocus(); + return true; + }; + + loadValuesStartMessage = function (flag) { + var viewFlagForm, + restClient, + response; + listUsers = []; + listDynaforms = []; + dataForm = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + startMessage.ports.get(0).connection.flo_element_dest + '/assignee/all', + method: 'GET' + }, + { + url: "activity/" + startMessage.ports.get(0).connection.flo_element_dest + "/steps", + method: 'GET' + }, { + url: 'web-entry/' + startMessage.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + listUsers = response[0].response; + listDynaforms = response[1].response; + dataForm = response[2].response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + if (flag) { + viewFlagForm = false; + if (typeof dataForm == 'object' && dataForm.we_data != null) { + viewFlagForm = true; + } + response = [listUsers.length, listDynaforms.length, viewFlagForm]; + return response; + } + return true; + }; + + updateStartMessage = function (data) { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: "web-entry/" + startMessage.evn_uid, + method: 'PUT', + data: data + }, + { + url: 'web-entry/' + startMessage.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataForm = response[1].response; + if (data.we_method == "HTML") { + winHtmlShow(response.we_data); + } + btnGenerateStartMessagePage.setVisible(false); + btnStartMessageCancel.setVisible(false); + btnClose.setVisible(true); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ["There are problems updating the Web Entry, please try again.".translate()], + messageSuccess: ['Web Entry updated successfully'.translate()], + flashContainer: frmDataStartMessage + }); + restClient.executeRestClient(); + }; + + loadDataDynaform = function () { + var i; + cboDynaForm.clearOptions(); + for (i = 0; i <= listDynaforms.length - 1; i++) { + if (listDynaforms[i].step_type_obj == "DYNAFORM") { + cboDynaForm.addOption({ + value: listDynaforms[i].step_uid_obj, + label: listDynaforms[i].obj_title + }); + } + } + }; + + loadDataUsers = function () { + var i; + cboUser.clearOptions(); + for (i = 0; i <= listUsers.length - 1; i++) { + cboUser.addOption({ + value: listUsers[i].aas_uid, + label: listUsers[i].aas_name + ' ' + listUsers[i].aas_lastname + }); + } + }; + + loadDataForm = function () { + cboUser.setValue(dataForm.usr_uid); + cboDynaForm.setValue(dataForm.dyn_uid); + cboMethod.setValue(dataForm.we_method); + }; + + enableGenerateWebEntry = function () { + btnGenerateStartMessagePage.setVisible(true); + btnStartMessageCancel.setVisible(true); + btnClose.setVisible(false); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(true); + }; + cboUser = new PMUI.field.DropDownListField({ + id: "cboUser", + name: "cboUser", + label: "User".translate(), + required: true, + options: null, + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + cboDynaForm = new PMUI.field.DropDownListField({ + id: "cboDynaForm", + name: "cboDynaForm", + label: "Initial Dynaform".translate(), + options: null, + required: true, + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + cboMethod = new PMUI.field.DropDownListField({ + id: "cboMethod", + name: "cboMethod", + label: "Method".translate(), + value: "WS", + options: [ + { + value: "WS", + label: "PHP pages with Web Services".translate() + }, + { + value: "HTML", + label: "Single HTML".translate() + } + ], + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + btnGenerateStartMessagePage = new PMUI.ui.Button({ + id: "btnGenerateStartMessagePage", + text: "Generate Web Entry Page".translate(), + handler: function () { + var flagGenerateStartMessage = 0, data; + data = { + tas_uid: startMessage.ports.get(0).connection.flo_element_dest, + dyn_uid: cboDynaForm.getValue(), + usr_uid: cboUser.getValue(), + we_title: startMessage.evn_name, + we_description: '', + we_method: cboMethod.getValue(), + we_input_document_access: 1 + }; + + if (frmDataStartMessage.isValid()) { + updateStartMessage(data); + } + }, + buttonType: 'success', + height: 31, + visible: true + }); + btnSaveStartMessagePage = new PMUI.ui.Button({ + id: "btnGenerateStartMessagePage", + text: "Save".translate(), + handler: function () { + var flagGenerateStartMessage = 0, data; + data = { + tas_uid: startMessage.ports.get(0).connection.flo_element_dest, + dyn_uid: cboDynaForm.getValue(), + usr_uid: cboUser.getValue(), + we_title: startMessage.evn_name, + we_description: '', + we_method: cboMethod.getValue(), + we_input_document_access: 1 + }; + + if (frmDataStartMessage.isValid()) { + updateStartMessage(data); + } + }, + buttonType: 'success', + height: 31, + visible: true + }); + + frmDataStartMessage = new PMUI.form.Form({ + id: "frmDataStartMessage", + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + items: [ + cboUser, + cboDynaForm, + cboMethod + ], + visibleHeader: false + }); + + btnClose = new PMUI.ui.Button({ + id: "btnClose", + text: "Close".translate(), + handler: function () { + winGrdpnlStartMessage.close(); + }, + buttonType: 'success', + height: 31 + }); + + btnStartMessageCancel = new PMUI.ui.Button({ + id: "btnStartMessageCancel", + text: "Cancel".translate(), + handler: function () { + var message_window; + if (frmDataStartMessage.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + id: "cancelMessageStartTimer", + title: "Start Message Event".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + bodyHeight: 'auto', + width: 490, + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + winGrdpnlStartMessage.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + frmDataStartMessage.reset(); + winGrdpnlStartMessage.close(); + } + } + }); + + frmHtml = new PMUI.form.Form({ + id: "frmHtml", + title: "", + width: DEFAULT_WINDOW_WIDTH - 43, + items: [ + { + id: "txtHtml", + name: "txtHtml", + pmType: "textarea", + valueType: "string", + rows: 400, + value: '', + controlsWidth: DEFAULT_WINDOW_WIDTH - 50, + labelVisible: false, + style: {cssClasses: ['mafe-textarea-resize']} + } + ] + }); + + winGrdpnlStartMessage = new PMUI.ui.Window({ + id: "winGrdpnlStartMessage", + title: "Start Message Event".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: "top", + buttons: [btnSaveStartMessagePage, {pmType: 'label', text: 'or'}, btnStartMessageCancel, btnClose] + }); + + winGrdpnlStartMessage.addItem(frmDataStartMessage); + + openForm = function () { + winGrdpnlStartMessage.open(); + winGrdpnlStartMessage.defineEvents(); + applyStyleWindowForm(winGrdpnlStartMessage); + winGrdpnlStartMessage.footer.html.style.textAlign = 'right'; + winFrmStartMessageShow(); + } + }; + + PMDesigner.startMessage.openForm = function (element) { + openForm(); + }; + + PMDesigner.startMessage.viewForm = function (element) { + openForm(); + }; + + PMDesigner.startMessage.validate = function (starMessageEvent) { + if (starMessageEvent.ports.isEmpty()) { + PMDesigner.msgFlash('Must connect to a Task'.translate(), document.body, 'error', 4000, 5); + return [false, false]; + } + PMDesigner.startMessage(starMessageEvent); + response = loadValuesStartMessage(true); + if (response[0] == 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned users'.translate(), document.body, 'info', 4000); + return [false, false]; + } + if (response[1] == 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned Dynaforms'.translate(), document.body, 'info', 4000); + return [false, false]; + } + return [true, response[2]]; + } +}()); + +(function () { + var windowPropSub; + + PMDesigner.propertiesSubProcess = function (activity) { + var typeVariables = ['@@', '@#', '@=', '@&'], + restClient, + isDirtyFormSubProcess, + getSubProcess, + formVarTexOriginOut, + updateSubProcess, + formVarTexOriginIn, + loadDropProcess, + formVarTexTargetOut, + formVarTexTargetIn, + windowPropertiesSub, + formProperties, + sepInputs, + gridVariablesOut, + gridVariablesIn, + formVariablesPanelOut, + formVariablesPanelIn, + validateVariable, + formVarButtonAddOut, + formVarButtonAddIn, + labelVariablesOut, + labelVariablesIn, + loadDataServer, + loadActivity, + isDirty = false; + + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + for (var i = 0; i < response.length; i += 1) { + if (response[i].prj_uid != PMDesigner.project.projectId) { + formProperties.getField('out_doc_process').addOption({ + label: response[i].prj_name, + value: response[i].prj_uid + }); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + isDirtyFormSubProcess = function () { + var message_window; + if (formProperties.isDirty() || isDirty) { + message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: "cancelSaveSubprocPropertiesWin", + title: "Sub-process Properties".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + formProperties.reset(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + formProperties.setDirty(false); + windowPropertiesSub.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + windowPropertiesSub.close(); + } + }; + getSubProcess = function () { + var restProxy = new PMRestClient({ + endpoint: "subprocess/" + activity.act_uid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var yout, + oout, + jout, + itemsOut, + i, + xin, + yin, + oin, + jin, + dout, + din, + itemsIn, + xout; + formProperties.getField('out_doc_title').setValue(response.spr_name); + formProperties.getField('out_doc_process').setValue(response.spr_pro); + formProperties.getField('out_doc_type').setValue(response.spr_synchronous); + + if (response.spr_variables_out != false) { + xout = JSON.stringify(response.spr_variables_out); + yout = xout.substring(1, xout.length - 1); + oout = yout.replace(/"/g, ''); + jout = oout.split(','); + + itemsOut = []; + for (i = 0; i < jout.length; i += 1) { + dout = jout[i].split(':'); + itemsOut.push({ + origin: dout[0], + target: dout[1] + }); + } + gridVariablesOut.setDataItems(itemsOut); + + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + } + + if (response.spr_variables_in != false && response.spr_variables_in != undefined) { + xin = JSON.stringify(response.spr_variables_in); + yin = xin.substring(1, xin.length - 1); + oin = yin.replace(/"/g, ''); + jin = oin.split(','); + + itemsIn = []; + for (i = 0; i < jin.length; i += 1) { + din = jin[i].split(':'); + itemsIn.push({ + origin: din[0], + target: din[1] + }); + } + gridVariablesIn.setDataItems(itemsIn); + } + + if (response.spr_synchronous == "1") { + gridVariablesIn.setVisible(true); + formVariablesPanelIn.setVisible(true); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + updateSubProcess = function (data) { + var restProxy = new PMRestClient({ + endpoint: "subprocess/" + activity.act_uid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + var name = formProperties.getData().out_doc_title; + activity.setName(name); + activity.setActName(name); + PMDesigner.project.dirty = true; + + formProperties.reset(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + formProperties.setDirty(false); + windowPropertiesSub.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + formVarTexOriginOut = new CriteriaField({ + id: 'idformVarTexOriginOut', + pmType: "text", + name: 'nmformVarTexOriginOut', + placeholder: 'Origin'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + formVarTexOriginIn = new CriteriaField({ + id: 'idformVarTexOriginIn', + pmType: "text", + name: 'nmformVarTexOriginIn', + placeholder: 'Select Origin Process'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + formVarTexTargetOut = new CriteriaField({ + id: 'idformVarTexTargetOut', + pmType: "text", + name: 'nmformVarTexTargetOut', + placeholder: 'Select Target Process'.translate(), + labelVisible: false, + controlsWidth: 150, + required: true + }); + + formVarTexTargetIn = new CriteriaField({ + id: 'idformVarTexTargetIn', + pmType: "text", + name: 'nmformVarTexTargetIn', + placeholder: 'Target'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + windowPropertiesSub = new PMUI.ui.Window({ + id: 'propSubWindow', + title: "Sub-process Properties".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + bodyHeight: '465px', + bodyWidth: '900px', + onBeforeClose: function () { + isDirtyFormSubProcess(); + }, + buttons: [ + { + id: 'propSubButtonClose', + text: "Close".translate(), + buttonType: 'error', + handler: function () { + isDirtyFormSubProcess(); + } + }, + { + id: 'propSubButtonSave', + text: "Save".translate(), + buttonType: 'success', + handler: function () { + if (!formProperties.isValid()) { + return; + } + var propertiesData = formProperties.getData(); + var variablesOutData = gridVariablesOut.getData(); + var variablesOut = {}; + if (variablesOutData.length > "0") { + for (i = 0; i < variablesOutData.length; i += 1) { + variablesOut[variablesOutData[i].origin] = variablesOutData[i].target; + } + } + var variablesIn = {}; + if (propertiesData.out_doc_type == "1") { + var variablesInData = gridVariablesIn.getData(); + if (variablesInData.length > "0") { + for (j = 0; j < variablesInData.length; j += 1) { + variablesIn[variablesInData[j].origin] = variablesInData[j].target; + } + } + } + + var dataToSend = { + spr_pro: propertiesData.out_doc_process, + spr_tas: propertiesData.spr_tas, + spr_name: propertiesData.out_doc_title, + spr_synchronous: propertiesData.out_doc_type, + spr_variables_out: variablesOut, + spr_variables_in: variablesIn + }; + + updateSubProcess(dataToSend); + } + } + ], + buttonPanelPosition: 'bottom', + buttonsPosition: 'right' + }); + + formProperties = new PMUI.form.Form({ + id: 'propSubForm', + title: "", + fieldset: true, + visibleHeader: false, + width: 926, + height: 'auto', + items: [ + { + id: 'propSubFormTitle', + pmType: "text", + name: 'out_doc_title', + label: "Sub-Process name".translate(), + required: true, + controlsWidth: 300 + }, + { + id: 'propSubFormProcess', + pmType: "dropdown", + name: 'out_doc_process', + label: "Process".translate(), + controlsWidth: 300, + required: true, + options: [ + { + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + } + ], + value: "", + onChange: function (a, b) { + if (a.trim().length !== 0) { + formVarTexTargetOut.buttonHTML.enable(); + formVarTexOriginIn.buttonHTML.enable(); + formVarTexTargetOut.controls[0].setPlaceholder("Target"); + formVarTexOriginIn.controls[0].setPlaceholder("Origin"); + } else { + formVarTexTargetOut.buttonHTML.disable(); + formVarTexOriginIn.buttonHTML.disable(); + } + formVarTexTargetOut.setProcess(a); + formVarTexOriginIn.setProcess(a); + loadActivity(a); + } + }, + { + id: 'propSubFormActivity', + pmType: "dropdown", + name: 'spr_tas', + label: "Starting activity".translate(), + controlsWidth: 300, + required: true, + options: [ + { + label: "- Select starting activity -".translate(), + value: "", + disabled: true, + selected: true + } + ], + value: "", + onChange: function (a, b) { + } + }, + { + id: 'propSubFormType', + pmType: "dropdown", + name: 'out_doc_type', + label: "Type".translate(), + controlsWidth: 150, + required: true, + options: [ + { + label: "Asynchronous".translate(), + value: "0" + }, + { + label: "Synchronous".translate(), + value: "1" + } + ], + value: "0", + onChange: function (a, b) { + isDirty = true; + } + } + ], + onChange: function (newValue, prevValue) { + switch (newValue.value) { + case "1" : + gridVariablesIn.setVisible(true); + gridVariablesIn.style.addProperties({marginLeft: '45px'}); + formVariablesPanelIn.setVisible(true); + formVariablesPanelIn.getItems()[2].setWidth(80); + $(formVariablesPanelIn.html).css({width: '850px', marginLeft: '45px'}); + windowPropertiesSub.getItems()[4].setVisible(true); + break; + case "0": + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + windowPropertiesSub.getItems()[4].setVisible(false); + break; + default : + break; + } + } + }); + + sepInputs = new PMSeparatorLineField({ + controlHeight: '1px', + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + + formProperties.addItem(sepInputs); + + gridVariablesOut = new PMUI.grid.GridPanel({ + id: 'propSubGridVariablesOut', + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + style: { + cssClasses: ["mafe-gridPanel"] + }, + columns: [ + { + title: 'Origin'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "origin" + }, + { + title: 'Target'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "target" + }, + { + id: 'propSubGridVariablesOutButtonDelete', + title: '', + dataType: 'button', + width: '20%', + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + grid.removeItem(row); + isDirty = true; + }, + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + } + + } + ] + }); + + gridVariablesIn = new PMUI.grid.GridPanel({ + id: 'propSubGridVariablesIn', + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + columns: [ + { + title: 'Origin'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "origin" + }, + { + title: 'Target'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "target" + }, + { + id: 'propSubGridVariablesInButtonDelete', + title: '', + dataType: 'button', + width: '20%', + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + grid.removeItem(row); + isDirty = true; + }, + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + } + } + ] + }); + + formVariablesPanelOut = new PMUI.core.Panel({ + id: "formVariablesPanelOut", + layout: "hbox", + fieldset: true, + width: DEFAULT_WINDOW_WIDTH - 70 + }); + + formVariablesPanelIn = new PMUI.core.Panel({ + id: "formVariablesPanelIn", + layout: "hbox", + fieldset: true, + legend: "Variables In".translate(), + width: DEFAULT_WINDOW_WIDTH - 70 + }); + + validateVariable = function (field) { + var value; + field.controls[0].style.removeClasses(['error']) + value = field.getValue(); + if (value == '') { + PMDesigner.msgWinWarning('Please insert variable before adding to the list.'.translate()); + field.controls[0].style.addClasses(['error']) + return false; + } + if (typeVariables.indexOf(String(value.substring(0, 2))) != -1) { + return true; + } + PMDesigner.msgWinWarning("The value introduced doesn\'t have the correct format with a vallid prefix (@@, @#, @=, @&)".translate()); + field.controls[0].style.addClasses(['error']) + return false; + }; + + formVarButtonAddOut = new PMUI.ui.Button({ + id: 'formVarButtonAddOut', + text: 'Add'.translate(), + width: 60, + visible: false, + buttonType: "success", + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + style: { + cssProperties: { + padding: "5px" + } + }, + handler: function () { + var gridOut, i; + if (validateVariable(formVarTexOriginOut) && validateVariable(formVarTexTargetOut)) { + a = formVarTexOriginOut.getValue(); + b = formVarTexTargetOut.getValue(); + gridVariablesOut.addDataItem({origin: a, target: b}); + formVarTexOriginOut.setValue(""); + formVarTexTargetOut.setValue(""); + isDirty = true; + + gridOut = document.getElementById("propSubGridVariablesOut").getElementsByTagName("table")[0]; + i = gridOut.rows.length - 1; + gridOut.getElementsByClassName("pmui pmui-button")[i].style.marginTop = "2px"; + } + } + }); + + formVarButtonAddIn = new PMUI.ui.Button({ + id: 'formVarButtonAddIn', + text: 'Add'.translate(), + width: 60, + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + style: { + cssProperties: { + padding: "5px", + } + }, + buttonType: 'success', + handler: function () { + var gridOut, i; + if (validateVariable(formVarTexOriginIn) && validateVariable(formVarTexTargetIn)) { + a = formVarTexOriginIn.getValue(); + b = formVarTexTargetIn.getValue(); + gridVariablesIn.addDataItem({origin: a, target: b}); + formVarTexOriginIn.setValue(""); + formVarTexTargetIn.setValue(""); + isDirty = true; + + gridOut = document.getElementById("propSubGridVariablesIn").getElementsByTagName("table")[0]; + i = gridOut.rows.length - 1; + gridOut.getElementsByClassName("pmui pmui-button")[i].style.marginTop = "2px"; + } + } + }); + + labelVariablesOut = new PMUI.ui.TextLabel({ + textMode: 'plain', + text: 'Variables Out'.translate() + }); + + labelVariablesIn = new PMUI.ui.TextLabel({ + textMode: 'plain', + text: 'Variables In'.translate() + }); + + loadDropProcess = function () { + formProperties.getField('out_doc_process').clearOptions(); + formProperties.getField('out_doc_process').addOption({ + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + }); + }; + loadDataServer = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'projects', + method: 'GET' + }, + { + url: 'project/' + PMDesigner.project.id + '/subprocess/' + activity.act_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var dt, + itemsOut, + yout, + oout, + jout, + dout, + xin, + yin, + oin, + jin, + din, + itemsIn, + xout; + + //projects + dt = response[0].response; + for (var i = 0; i < dt.length; i += 1) { + if (dt[i].prj_uid !== PMDesigner.project.projectId) { + formProperties.getField('out_doc_process').addOption({ + label: dt[i].prj_name, + value: dt[i].prj_uid + }); + } + } + //subprocess + dt = response[1].response; + formProperties.getField('out_doc_title').setValue(dt.spr_name); + formProperties.getField('out_doc_process').setValue(dt.spr_pro === '0' ? '' : dt.spr_pro); + formProperties.getField('out_doc_type').setValue(dt.spr_synchronous); + + if (dt.spr_variables_out !== false) { //Asynchronous + xout = JSON.stringify(dt.spr_variables_out); + itemsOut = []; + if (xout != "[]") { + yout = xout.substring(1, xout.length - 1); + oout = yout.replace(/"/g, ''); + jout = oout.split(','); + for (i = 0; i < jout.length; i += 1) { + dout = jout[i].split(':'); + itemsOut.push({ + origin: dout[0], + target: dout[1] + }); + } + } + gridVariablesOut.setDataItems(itemsOut); + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + } + + if (dt.spr_variables_in !== false && dt.spr_variables_in !== undefined) { //Synchronous + xin = JSON.stringify(dt.spr_variables_in); + itemsIn = []; + if (xin != "[]") { + yin = xin.substring(1, xin.length - 1); + oin = yin.replace(/"/g, ''); + jin = oin.split(','); + for (i = 0; i < jin.length; i += 1) { + din = jin[i].split(':'); + itemsIn.push({ + origin: din[0], + target: din[1] + }); + } + } + gridVariablesIn.setDataItems(itemsIn); + } + + if (dt.spr_synchronous === "1") { + gridVariablesIn.setVisible(true); + formVariablesPanelIn.setVisible(true); + } + if (formProperties.getField('out_doc_process').getValue() !== '') { + loadActivity(formProperties.getField('out_doc_process').getValue()); + } + formProperties.getField('spr_tas').setValue(dt.spr_tas === '0' ? '' : dt.spr_tas); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadActivity = function (value) { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + value + '/starting-tasks', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var dropdown, + i, + dt = response[0].response; + dt = dt.sort(function (a, b) { + return a.act_name.toString().toLowerCase() > b.act_name.toString().toLowerCase(); + }); + dropdown = formProperties.getField('spr_tas'); + dropdown.clearOptions(); + dropdown.addOption({ + value: '', + label: '- Select starting activity -'.translate() + }); + for (i = 0; i < dt.length; i += 1) { + dropdown.addOption({ + value: dt[i].act_uid, + label: dt[i].act_name + }); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + + formVariablesPanelOut.addItem(formVarTexOriginOut); + formVariablesPanelOut.addItem(formVarTexTargetOut); + formVariablesPanelOut.addItem(formVarButtonAddOut); + + formVariablesPanelIn.addItem(formVarTexOriginIn); + formVariablesPanelIn.addItem(formVarTexTargetIn); + formVariablesPanelIn.addItem(formVarButtonAddIn); + + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + + windowPropertiesSub.addItem(formProperties); + windowPropertiesSub.addItem(new PMUI.ui.TextLabel({ + width: 890, + text: 'Variables Out'.translate(), + style: { + cssProperties: { + background: '#aaaaaa', + margin: '-15px 10px 10px 15px', + color: 'white', + padding: '6px', + 'font-weight': 'bold' + } + }, + display: 'block' + })); + windowPropertiesSub.addItem(formVariablesPanelOut); + windowPropertiesSub.addItem(gridVariablesOut); + + windowPropertiesSub.addItem(new PMUI.ui.TextLabel({ + width: 890, + text: 'Variables In'.translate(), + style: { + cssProperties: { + background: '#aaaaaa', + margin: '15px 10px 10px 15px', + color: 'white', + padding: '6px', + 'font-weight': 'bold' + } + }, + display: 'block', + visible: false + })); + + windowPropertiesSub.addItem(formVariablesPanelIn); + windowPropertiesSub.addItem(gridVariablesIn); + + loadDropProcess(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + loadDataServer(); + + if (formProperties.getItems()[1].getValue() != "0") { + formVarTexTargetOut.setProcess(formProperties.getItems()[1].getValue()); + formVarTexOriginIn.setProcess(formProperties.getItems()[1].getValue()); + } + windowPropertiesSub.open(); + if (formProperties.getField('out_doc_process').getValue().trim().length === 0) { + formVarTexTargetOut.buttonHTML.disable(); + formVarTexOriginIn.buttonHTML.disable(); + } else { + formVarTexTargetOut.buttonHTML.enable(); + formVarTexOriginIn.buttonHTML.enable(); + } + windowPropertiesSub.showFooter(); + applyStyleWindowForm(windowPropertiesSub); + formVariablesPanelIn.getItems()[0].dom.labelTextContainer.style.display = "none"; + formVariablesPanelIn.getItems()[1].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.getItems()[0].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.getItems()[1].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.style.addProperties({marginLeft: '45px'}); + gridVariablesOut.style.addProperties({marginLeft: '45px'}); + if (formVariablesPanelIn.visible == true) { + gridVariablesIn.setVisible(true); + gridVariablesIn.style.addProperties({marginLeft: '45px'}); + formVariablesPanelIn.setVisible(true); + formVariablesPanelIn.getItems()[2].setWidth(80); + $(formVariablesPanelIn.html).css({width: '850px', marginLeft: '45px'}); + windowPropertiesSub.getItems()[4].setVisible(true); + } + + formVariablesPanelOut.style.addProperties({width: '870px'}); + $(gridVariablesIn.html).find(".pmui-gridpanel-footer").css("position", "static"); + $(gridVariablesIn.html).find(".pmui-gridpanel-footer").css("margin-top", "0px"); + $(gridVariablesOut.html).find(".pmui-gridpanel-footer").css("position", "static"); + $(gridVariablesOut.html).find(".pmui-gridpanel-footer").css("margin-top", "0px"); + windowPropertiesSub.defineEvents(); + gridVariablesOut.html.children[0].style.display = "none"; + gridVariablesIn.html.children[0].style.display = "none"; + formProperties.getField('out_doc_title').setFocus(); + formVarButtonAddOut.setWidth(80); + formVarButtonAddOut.setVisible(true); + + }; +}()); +if (typeof(consolidated) == 'undefined') { + consolidated = '0'; +} +PMDesigner.activityProperties = function (activity) { + switch (activity.getActivityType()) { + case "SUB_PROCESS": + PMDesigner.propertiesSubProcess(activity); + break; + case "TASK": + if (activity.getTaskType() === "SCRIPTTASK") { + PMDesigner.scriptTaskProperties(activity); + } else { + PMDesigner.taskProperties(activity); + } + break; + } +}; + +PMDesigner.taskProperties = function (activity) { + var formDefinitions, + featuresForms = [], + propertiesTabs, + formCaseLabels, + dataProperties, + formTimingControl, + configurationForms, + customGrid, + formNotifications, + buttonFieldCancel, + buttonFieldAdd, + abeForm, + MobilePanel, + enableTaskMobile, + routeCaseMobile, + abeMainPanel, + abeAddOption, + abeTemplates, + abeDynaforms, + abeReceiverAccount, + abeEmailAcount, + abeFields, + warningChanges, + windowProperties, + processDataProperties, + i, + editRow = null, + arrayTrue = '["TRUE"]', + arrayFalse = '["FALSE"]', + stringTrue = "TRUE", + stringFalse = "FALSE", + defaultServerlabel = "Mail (PHP)".translate(); + + configurationForms = [ + { + id: 'windowPropertiesTabPanelDefinitions', + icon: '', + title: 'Definitions'.translate(), + panel: formDefinitions = new PMUI.form.Form({ + id: 'formDefinitions', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [{ + id: 'formDefinitionsUID', + pmType: 'text', + name: 'UID', + valueType: 'string', + label: 'UID'.translate(), + controlsWidth: 300 + }, { + id: 'formDefinitionsTitle', + pmType: 'text', + name: 'tas_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300 + }, { + id: 'formDefinitionsDescription', + pmType: 'textarea', + name: 'tas_description', + valueType: 'string', + label: 'Description'.translate(), + placeholder: 'Insert a description'.translate(), + rows: 100, + controlsWidth: 300, + style: {cssClasses: ['mafe-textarea-resize']} + }, new CriteriaField({ + id: 'formDefinitionsVariable', + pmType: 'text', + name: 'tas_priority_variable', + valueType: 'string', + label: 'Variable for Case priority'.translate(), + controlsWidth: 300 + }), { + id: 'formDefinitionsRouting', + pmType: 'dropdown', + name: 'tas_derivation_screen_tpl', + valueType: 'string', + label: 'Routing Screen Template'.translate(), + controlsWidth: 150, + style: { + cssProperties: { + float: "left" + } + } + } + ] + }) + }, + { + id: 'windowPropertiesTabPanelCaseLabels', + icon: '', + title: 'Case Labels'.translate(), + panel: formCaseLabels = new PMUI.form.Form({ + id: 'formCaseLabels', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [new CriteriaField({ + id: 'formCaseLabelsTitle', + pmType: 'text', + name: 'tas_def_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + controlsWidth: DEFAULT_WINDOW_WIDTH - 527 + }), new CriteriaField({ + id: 'formCaseLabelsDescription', + pmType: 'textarea', + name: 'tas_def_description', + valueType: 'string', + label: 'Description'.translate(), + placeholder: 'Insert a description'.translate(), + rows: 100, + controlsWidth: DEFAULT_WINDOW_WIDTH - 527, + renderType: 'textarea' + }) + ] + }) + }, + { + id: 'windowPropertiesTabPanelTimingControl', + icon: '', + title: 'Timing Control'.translate(), + panel: formTimingControl = new PMUI.form.Form({ + id: 'formTimingControl', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [{ + id: 'formTimingControlFly', + pmType: 'checkbox', + name: 'tas_transfer_fly', + labelVisible: false, + options: [ + { + id: 'formTimingControlOption', + label: 'Allow users to change the task duration in runtime'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeTimingControl(this.controls[0].selected); + } + }, { + id: 'formTimingMainPanel', + pmType: 'panel', + items: [ + { + id: 'formTimingControlTask', + pmType: 'text', + name: 'tas_duration', + valueType: 'string', + label: 'Task duration'.translate(), + required: true, + maxLength: 3, + controlsWidth: 200, + validators: [ + { + pmType: "regexp", + criteria: /^\d*$/, + errorMessage: "Please enter a positive integer value".translate() + } + ] + }, + { + id: 'formTimingControlAverage', + pmType: 'text', + name: 'tas_average', + valueType: 'string', + label: 'Average'.translate(), + maxLength: 3, + readOnly: true, + controlsWidth: 200 + }, + { + id: 'formTimingControlSdv', + pmType: 'text', + name: 'tas_sdv', + valueType: 'string', + label: 'SDV'.translate(), + maxLength: 3, + readOnly: true, + controlsWidth: 200 + }, + { + id: 'formTimingControlTime', + pmType: 'dropdown', + name: 'tas_timeunit', + label: 'Time unit'.translate(), + controlsWidth: 100, + options: [{ + id: 'formTimingControlTime1', + label: 'Hours'.translate(), + value: 'HOURS' + }, { + id: 'formTimingControlTime2', + label: 'Days'.translate(), + value: 'DAYS' + }, { + id: 'formTimingControlTime3', + label: 'Minutes'.translate(), + value: 'MINUTES' + } + ] + }, { + id: 'formTimingControlCount', + pmType: 'dropdown', + name: 'tas_type_day', + label: 'Count days by'.translate(), + controlsWidth: 150, + options: [{ + id: 'formTimingControlCount1', + label: 'Work Days'.translate(), + value: 1 + }, { + id: 'formTimingControlCount2', + label: 'Calendar Days'.translate(), + value: 2 + } + ] + }, { + id: 'formTimingControlCalendar', + pmType: 'dropdown', + name: 'tas_calendar', + label: 'Calendar'.translate(), + options: [], + controlsWidth: 150 + } + ] + } + ] + }) + }, + { + id: 'windowPropertiesTabPanelNotifications', + icon: '', + title: 'Notifications'.translate(), + panel: formNotifications = new PMUI.form.Form({ + id: 'formNotifications', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [ + { + id: 'formNotificationsTasSend', + pmType: 'checkbox', + name: 'tas_send_last_email', + labelVisible: false, + options: [{ + id: 'formNotificationsTasSend1', + label: 'After routing notify the next assigned user(s)'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeFormNotifications(this.controls[0].selected, 'text'); + } + }, { + id: 'formNotificationsMainPanel', + pmType: 'panel', + items: [ + { + id: 'tas_email_server_uid', + name: 'tas_email_server_uid', + pmType: 'dropdown', + label: 'Email account'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + label: 'Default email account'.translate(), + value: '' + } + ] + }, + { + id: 'tas_not_email_from_format', + name: 'tas_not_email_from_format', + pmType: 'dropdown', + label: 'Email From Format'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + id: 'assignedUser', + label: 'Assigned User'.translate(), + value: 0 + }, { + id: 'emailAccountSettings', + label: 'Email Account Settings'.translate(), + value: 1 + } + ] + }, + new CriteriaField({ + id: 'formNotificationsSubject', + pmType: 'text', + name: 'tas_def_subject_message', + valueType: 'string', + label: 'Subject'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + labelWidth: "27%" + }), { + id: 'formNotificationsContent', + pmType: 'dropdown', + name: 'tas_def_message_type', + label: 'Content Type'.translate(), + controlsWidth: 150, + labelWidth: "27%", + options: [{ + id: 'formNotificationsContent1', + value: 'text', + label: 'Plain Text'.translate() + }, { + id: 'formNotificationsContent2', + value: 'template', + label: 'Html Template'.translate() + } + ], + onChange: function (value) { + visibleContentType(value); + } + }, new CriteriaField({ + id: 'formNotificationsMessage', + pmType: 'textarea', + name: 'tas_def_message', + valueType: 'string', + label: 'Message'.translate(), + placeholder: 'Insert a message'.translate(), + rows: 100, + width: 10, + required: true, + controlsWidth: 300, + renderType: 'textarea', + labelWidth: "27%" + }), { + id: 'formNotificationsTemplate', + pmType: 'dropdown', + name: 'tas_def_message_template', + label: 'Template'.translate(), + options: [{ + value: '', + label: '' + }], + labelWidth: "27%" + } + ] + }, + { + id: 'formNotificationsTasReceive', + pmType: 'checkbox', + name: 'tas_receive_last_email', + labelVisible: false, + options: [{ + id: 'formNotificationsTasReceive', + label: 'Notify the assigned user to this task'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeFormNotificationsReceive(this.controls[0].selected, 'text'); + } + }, + { + id: 'formNotificationsReceivePanel', + pmType: 'panel', + items: [ + { + id: 'tas_receive_server_uid', + name: 'tas_receive_server_uid', + pmType: 'dropdown', + label: 'Email account'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + label: 'Default email account'.translate(), + value: '' + } + ] + }, + { + id: 'tas_receive_email_from_format', + name: 'tas_receive_email_from_format', + pmType: 'dropdown', + label: 'Email From Format'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + id: 'assignedUser', + label: 'Assigned User'.translate(), + value: 0 + }, { + id: 'emailAccountSettings', + label: 'Email Account Settings'.translate(), + value: 1 + } + ] + }, + new CriteriaField({ + id: 'tas_receive_subject_message', + pmType: 'text', + name: 'tas_receive_subject_message', + valueType: 'string', + label: 'Subject'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + labelWidth: "27%" + }), + { + id: 'tas_receive_message_type', + pmType: 'dropdown', + name: 'tas_receive_message_type', + label: 'Content Type'.translate(), + controlsWidth: 150, + labelWidth: "27%", + options: [{ + id: 'formNotificationsReceive1', + value: 'text', + label: 'Plain Text'.translate() + }, { + id: 'formNotificationsReceive2', + value: 'template', + label: 'Html Template'.translate() + } + ], + onChange: function (value) { + visibleContentTypeReceive(value); + } + }, + new CriteriaField({ + id: 'tas_receive_message', + pmType: 'textarea', + name: 'tas_receive_message', + valueType: 'string', + label: 'Message'.translate(), + placeholder: 'Insert a message'.translate(), + rows: 100, + width: 10, + required: true, + controlsWidth: 300, + renderType: 'textarea', + labelWidth: "27%" + }), + { + id: 'tas_receive_message_template', + pmType: 'dropdown', + name: 'tas_receive_message_template', + label: 'Template'.translate(), + options: [{ + value: '', + label: '' + }], + labelWidth: "27%" + } + + ] + } + ] + }) + } + ]; + if (consolidated == '1') { + configurationForms.push({ + id: 'windowPropertiesTabPanelConsolidated', + icon: '', + title: 'Consolidated Case '.translate(), + panel: formConsolidated = new PMUI.form.Form({ + id: 'formConsolidated', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [ + { + id: 'formConsolidatedEnable', + pmType: 'checkbox', + name: 'consolidated_enable', + labelVisible: false, + options: [{ + label: 'Enable consolidate for this task.'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeConsolidated(this.controls[0].selected); + } + }, { + id: 'formConsolidatedMainPanel', + pmType: 'panel', + items: [ + { + id: 'formConsolidatedReportTable', + pmType: 'text', + name: 'consolidated_report_table', + visible: false, + valueType: 'string', + controlsWidth: 300 + }, { + id: 'formConsolidatedDynaform', + pmType: 'dropdown', + name: 'consolidated_dynaform', + label: 'Dynaform Template'.translate(), + options: [], + required: true, + controlsWidth: 300 + }, { + id: 'formConsolidatedTable', + pmType: 'text', + name: 'consolidated_table', + valueType: 'string', + label: 'Table Name'.translate(), + placeholder: 'Insert a table name'.translate(), + required: true, + controlsWidth: 300, + style: { + cssProperties: { + float: "left" + } + }, + validators: [{ + pmType: "regexp", + criteria: /^[a-zA-Z0-9_]+$/, + errorMessage: "The table name can not contain spaces".translate() + }] + }, { + id: 'formConsolidatedTitle', + pmType: 'text', + name: 'consolidated_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + style: { + cssProperties: { + float: "left" + } + } + } + ] + } + ] + }) + }); + } + + + warningChanges = new PMUI.ui.MessageWindow({ + id: 'warningChanges', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Activity Properties'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'warningChangesButtonNo', + text: "No".translate(), + handler: function () { + warningChanges.close(); + }, + buttonType: "error" + }, + { + id: 'warningChangesButtonYes', + text: "Yes".translate(), + handler: function () { + windowProperties.close(); + warningChanges.close(); + }, + buttonType: "success" + } + ] + }); + windowProperties = new PMUI.ui.Window({ + id: 'windowProperties', + title: 'Activity Properties'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + onOpen: function () { + loadServerData(); + }, + items: [ + propertiesTabs = new PMUI.panel.TabPanel({ + id: 'windowPropertiesTabPanel', + height: 435, + width: DEFAULT_WINDOW_WIDTH - 50, + style: { + cssProperties: { + 'margin-left': '10px' + } + }, + items: configurationForms.concat(featuresForms), + itemsPosition: { + position: 'left' + }, + onTabClick: function (tab) { + setFocusTab(tab); + } + }), + customGrid + ], + onBeforeClose: function () { + if (isDirty()) { + warningChanges.open(); + warningChanges.showFooter(); + } else { + windowProperties.close(); + } + }, + buttonPanelPosition: 'bottom', + buttonsPosition: 'right', + buttons: [ + { + id: 'windowPropertiesButtonCancel', + text: 'Cancel'.translate(), + handler: function () { + if (isDirty()) { + warningChanges.open(); + warningChanges.showFooter(); + } else { + windowProperties.close(); + } + }, + buttonType: "error" + }, + { + id: 'windowPropertiesButtonSave', + text: 'Save'.translate(), + handler: function () { + saveData(); + }, + buttonType: 'success' + } + ] + }); + + function changeConsolidated(value) { + var panel = formConsolidated.getItem('formConsolidatedMainPanel'); + formConsolidated.getField('consolidated_enable').setValue(value ? '["1"]' : '[]'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + formConsolidated.getField('consolidated_report_table').setVisible(false); + } + + function changeTimingControl(value) { + var mainPanel = formTimingControl.getItem('formTimingMainPanel'); + formTimingControl.getField('tas_transfer_fly').setValue(value ? '["1"]' : '[]'); + if (mainPanel) { + if (value) { + mainPanel.disable(); + + } else { + mainPanel.enable(); + } + mainPanel.setVisible(!value); + } + if (window.enterprise !== "1") { + formTimingControl.getField('tas_average').setVisible(false); + formTimingControl.getField('tas_sdv').setVisible(false); + } + } + + function changeFormNotifications(value, valueTwo) { + var panel = formNotifications.getItem('formNotificationsMainPanel'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + if (value) { + formNotifications.getField('tas_def_message_type').setValue(valueTwo); + visibleContentType(valueTwo); + } + formNotifications.getField('tas_send_last_email').setValue(value ? '["1"]' : '[]'); + formNotifications.getField('tas_def_subject_message').setFocus(); + } + + /** + * Notification receive change handler, according to user selection + * @param value + * @param valueTwo + */ + function changeFormNotificationsReceive(value, valueTwo) { + var panel = formNotifications.getItem('formNotificationsReceivePanel'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + if (value) { + formNotifications.getField('tas_receive_message_type').setValue(valueTwo); + visibleContentTypeReceive(valueTwo); + } + formNotifications.getField('tas_receive_last_email').setValue(value ? '["1"]' : '[]'); + formNotifications.getField('tas_receive_subject_message').setFocus(); + } + + /** + * Get value parsed + * @param valueCheckBox '["TRUE"]'/'["FALSE"]' + * @returns {string} "TRUE"/"FALSE" + */ + function getValueCheckBox(valueCheckBox) { + var optionSelected = JSON.parse(valueCheckBox), + valChecked; + valChecked = (Array.isArray(optionSelected) && optionSelected.length === 1) ? optionSelected[0] : stringFalse; + return valChecked; + } + + function loadFormData(response) { + dataProperties = response.properties; + formDefinitions.getField('UID').setReadOnly(true); + formDefinitions.getField('UID').setValue(activity.id); + formDefinitions.getField('tas_title').setValue(dataProperties.tas_title); + formDefinitions.getField('tas_title').setFocus(); + formDefinitions.getField('tas_description').setValue(dataProperties.tas_description); + formDefinitions.getField('tas_priority_variable').setValue(dataProperties.tas_priority_variable); + formDefinitions.getField('tas_derivation_screen_tpl').setValue(dataProperties.tas_derivation_screen_tpl); + + formCaseLabels.getField('tas_def_title').setValue(dataProperties.tas_def_title); + formCaseLabels.getField('tas_def_description').setValue(dataProperties.tas_def_description); + + if (dataProperties.tas_transfer_fly === 'FALSE') { + changeTimingControl(false); + } else { + changeTimingControl(true); + } + formTimingControl.getField('tas_duration').setValue(dataProperties.tas_duration); + formTimingControl.getField('tas_timeunit').setValue(dataProperties.tas_timeunit); + formTimingControl.getField('tas_type_day').setValue(dataProperties.tas_type_day); + formTimingControl.getField('tas_calendar').setValue(dataProperties.tas_calendar); + + if (window.enterprise === "1") { + formTimingControl.getField('tas_average').setValue(dataProperties.tas_average); + formTimingControl.getField('tas_sdv').setValue(dataProperties.tas_sdv); + } + + changeFormNotifications(dataProperties.tas_send_last_email === 'TRUE', dataProperties.tas_def_message_type); + changeFormNotificationsReceive(dataProperties.tas_receive_last_email === 'TRUE', dataProperties.tas_receive_message_type); + formNotifications.getField('tas_def_subject_message').setValue(dataProperties.tas_def_subject_message); + formNotifications.getField('tas_def_message_type').setValue(dataProperties.tas_def_message_type); + formNotifications.getField('tas_def_message').setValue(dataProperties.tas_def_message); + formNotifications.getField('tas_email_server_uid').setValue(dataProperties.tas_email_server_uid); + formNotifications.getField('tas_def_message_template').setValue(dataProperties.tas_def_message_template); + formNotifications.getField('tas_not_email_from_format').setValue(dataProperties.tas_not_email_from_format); + // receive + formNotifications.getField('tas_receive_subject_message').setValue(dataProperties.tas_receive_subject_message); + formNotifications.getField('tas_receive_message_type').setValue(dataProperties.tas_receive_message_type); + formNotifications.getField('tas_receive_message').setValue(dataProperties.tas_receive_message); + formNotifications.getField('tas_receive_server_uid').setValue(dataProperties.tas_receive_server_uid); + formNotifications.getField('tas_receive_message_template').setValue(dataProperties.tas_receive_message_template); + formNotifications.getField('tas_receive_email_from_format').setValue(dataProperties.tas_receive_email_from_format); + } + function loadCalendar(response) { + var field = formTimingControl.getField('tas_calendar'), i; + field.clearOptions(); + field.addOption({ + value: '', + label: '- None -'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].cal_uid, + label: response[i].cal_name + }); + } + } + + /** + * Loads the template from rest service response + * @param response + * @param fieldName + */ + function loadTemplate(response, fieldName) { + var field = formNotifications.getField(fieldName), i, field2; + field.clearOptions(); + field.addOption({ + value: 'alert_message.html', + label: '-- Default --'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].prf_filename, + label: response[i].prf_filename + }); + } + field2 = formDefinitions.getField('tas_derivation_screen_tpl'); + field2.clearOptions(); + field2.addOption({ + value: '', + label: '-- Default --'.translate() + }); + for (i = 0; i < response.length; i += 1) { + if (response[i].prf_filename !== 'alert_message.html') { + field2.addOption({ + value: response[i].prf_filename, + label: response[i].prf_filename + }); + } + } + }; + /** + * Load Email account server dropdown options + * @param response + */ + function loadEmailAccount(response, fieldName) { + var field = formNotifications.getField(fieldName) || null, + i; + if (response instanceof Array && field) { + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + }; + + function loadABETemplateField(templates) { + var templateField = abeForm.getField('ABE_TEMPLATE'), i; + for (i in templates) { + if (templateField !== null) { + templateField.addOption({ + value: templates[i].FIELD, + label: templates[i].NAME + }); + } + abeTemplates.options.push({ + value: templates[i].FIELD, + label: templates[i].NAME + }); + } + }; + /** + * Loads the email accounts settings + * @param response + */ + function loadABEmailAccount(response) { + var accountField = abeForm.getField('ABE_EMAIL_SERVER_UID') || null, + i; + + if (response instanceof Array) { + for (i = 0; i < response.length; i += 1) { + if (accountField !== null) { + accountField.addOption({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + abeEmailAcount.options.push({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + + }; + + /** + * Loads the IMAP email accounts settings + * @param response + */ + function loadABImapEmailAccount(response) { + var accountField = abeForm.getField('ABE_RECEIVER_EMAIL_SERVER_UID') || null, + i; + + if (response instanceof Array) { + for (i = 0; i < response.length; i += 1) { + if (response[i].mess_engine === "IMAP") { + if (accountField !== null) { + accountField.addOption({ + value: response[i].mess_uid, + label: response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + abeReceiverAccount.options.push({ + value: response[i].mess_uid, + label: response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + } + + }; + + function loadABEDynaformField(dynaforms) { + var dynaformField = abeForm.getField('DYN_UID'), i; + for (i in dynaforms) { + if (dynaformField !== null) { + dynaformField.addOption({ + value: dynaforms[i].DYN_UID, + label: dynaforms[i].DYN_NAME + }); + } + abeDynaforms.options.push({ + value: dynaforms[i].DYN_UID, + label: dynaforms[i].DYN_NAME + }); + } + } + + function loadServerData() { + var restClient, i; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: { + "formconfig": { + "url": 'project/' + PMDesigner.project.id + '/activity/' + activity.id, + "method": 'GET' + }, + "calendar": { + "url": 'calendar', + "method": 'GET' + }, + "templates": { + "url": 'project/' + PMDesigner.project.id + '/file-manager?path=templates', + "method": 'GET' + }, + "emailserver": { + "url": 'project/' + PMDesigner.project.id + '/email-event/accounts/emailServer', + "method": 'GET' + } + } + }, + functionSuccess: function (xhr, response) { + loadTemplate(response["templates"].response, 'tas_def_message_template'); + loadTemplate(response["templates"].response, 'tas_receive_message_template'); + loadCalendar(response["calendar"].response); + loadFormData(response["formconfig"].response); + loadEmailAccount(response["emailserver"].response, 'tas_email_server_uid'); + loadEmailAccount(response["emailserver"].response, 'tas_receive_server_uid'); + + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + if (consolidated == '1') { + $.extend(restClient.data.calls, { + "steps": { + 'url': 'project/' + PMDesigner.project.id + '/activity/' + activity.id + '/steps', + 'method': 'GET' + }, + "consolidate": { + "url": 'consolidated/' + activity.id, + "method": 'GET' + } + }); + } + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + } + + function visibleContentType(value) { + formNotifications.getField('tas_def_message_template').disable(); + formNotifications.getField('tas_def_message').disable(); + if (value === 'text') { + formNotifications.getField('tas_def_message').enable(); + formNotifications.getField('tas_def_message').setVisible(true); + formNotifications.getField('tas_def_message_template').setVisible(false); + } + if (value === 'template') { + formNotifications.getField('tas_def_message_template').enable(); + formNotifications.getField('tas_def_message').setVisible(false); + formNotifications.getField('tas_def_message_template').setVisible(true); + } + }; + /** + * content type handler, enable or disable templates or message field + * @param value + */ + function visibleContentTypeReceive(value) { + formNotifications.getField('tas_receive_message_template').disable(); + formNotifications.getField('tas_receive_message').disable(); + if (value === 'text') { + formNotifications.getField('tas_receive_message').enable(); + formNotifications.getField('tas_receive_message').setVisible(true); + formNotifications.getField('tas_receive_message_template').setVisible(false); + } + if (value === 'template') { + formNotifications.getField('tas_receive_message_template').enable(); + formNotifications.getField('tas_receive_message').setVisible(false); + formNotifications.getField('tas_receive_message_template').setVisible(true); + } + }; + function saveData() { + var tabPanel = windowProperties.getItem('windowPropertiesTabPanel'), + tabItems = tabPanel.getItems(), + valid = true, + panel, + tas_transfer_fly, + tas_send_last_email, + tas_receive_last_email, + dataCaseLabels, + dataDefinitions, + dataTimingControl, + dataNotification, + consolidated_enable, + message, + i; + + for (i = 0; i < tabItems.length; i += 1) { + panel = tabItems[i].getPanel(); + if (panel instanceof PMUI.form.Form) { + valid = valid && panel.isValid(); + } else { + if (panel.getID() === "ActionsByEmailPanel") { + if (!abeForm.isValid()) { + valid = false; + } + } + } + if (!valid) { + tabItems[i].select(); + return; + } + } + + tas_transfer_fly = formTimingControl.getField('tas_transfer_fly').getValue() === '["1"]'; + tas_send_last_email = formNotifications.getField('tas_send_last_email').getValue() === '["1"]'; + tas_receive_last_email = formNotifications.getField('tas_receive_last_email').getValue() === '["1"]'; + + if (tas_transfer_fly !== false) { + var a = formTimingControl.getField('tas_transfer_fly').getValue(); + formTimingControl.reset(); + formTimingControl.getField('tas_transfer_fly').setValue(a); + formTimingControl.getField('tas_duration').setValue('1'); + formTimingControl.getField('tas_timeunit').setValue('DAYS'); + formTimingControl.getField('tas_type_day').setValue(''); + formTimingControl.getField('tas_calendar').setValue(''); + } + + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + dataDefinitions = getData2PMUI(formDefinitions.html); + dataCaseLabels = getData2PMUI(formCaseLabels.html); + dataTimingControl = getData2PMUI(formTimingControl.html); + dataNotification = getData2PMUI(formNotifications.html); + if (!dataCaseLabels) { + dataCaseLabels = {}; + } + if (!dataTimingControl) { + dataTimingControl = {}; + } + if (!dataNotification) { + dataNotification = {}; + } + } else { + dataDefinitions = formDefinitions.getData(); + dataCaseLabels = formCaseLabels.getData(); + dataTimingControl = formTimingControl.getData(); + dataNotification = formNotifications.getData(); + } + + if (dataDefinitions['tas_title']) { + dataProperties.tas_title = dataDefinitions['tas_title']; + } + if (dataDefinitions['tas_description']) { + dataProperties.tas_description = dataDefinitions['tas_description']; + } + if (dataDefinitions['tas_priority_variable'] || typeof dataDefinitions['tas_priority_variable'] == "string") { + dataProperties.tas_priority_variable = dataDefinitions['tas_priority_variable']; + } + if (dataDefinitions['tas_derivation_screen_tpl'] || dataDefinitions['tas_derivation_screen_tpl'] == "") { + dataProperties.tas_derivation_screen_tpl = dataDefinitions['tas_derivation_screen_tpl']; + } + dataProperties.tas_def_title = dataCaseLabels['tas_def_title']; + dataProperties.tas_def_description = dataCaseLabels['tas_def_description']; + dataProperties.tas_transfer_fly = tas_transfer_fly ? 'TRUE' : 'FALSE'; + if (dataTimingControl['tas_duration']) { + dataProperties.tas_duration = dataTimingControl['tas_duration']; + } + if (dataTimingControl['tas_timeunit']) { + dataProperties.tas_timeunit = dataTimingControl['tas_timeunit']; + } + if (dataTimingControl['tas_type_day']) { + dataProperties.tas_type_day = dataTimingControl['tas_type_day']; + } + if (dataTimingControl['tas_calendar']) { + dataProperties.tas_calendar = dataTimingControl['tas_calendar']; + } + dataProperties.tas_send_last_email = tas_send_last_email ? 'TRUE' : 'FALSE'; + if (dataNotification['tas_not_email_from_format']) { + dataProperties.tas_not_email_from_format = dataNotification['tas_not_email_from_format']; + } + if (dataNotification['tas_def_subject_message']) { + dataProperties.tas_def_subject_message = dataNotification['tas_def_subject_message']; + } + if (dataNotification['tas_def_message_type']) { + dataProperties.tas_def_message_type = dataNotification['tas_def_message_type']; + } + if (dataNotification['tas_def_message']) { + dataProperties.tas_def_message = dataNotification['tas_def_message']; + } + if (dataNotification['tas_def_message_template']) { + dataProperties.tas_def_message_template = dataNotification['tas_def_message_template']; + } + if (dataNotification['tas_email_server_uid'] !== 'undefined' && dataNotification['tas_email_server_uid'] !== null) { + dataProperties.tas_email_server_uid = dataNotification['tas_email_server_uid']; + } + + dataProperties.tas_receive_last_email = tas_receive_last_email ? 'TRUE' : 'FALSE'; + if (dataNotification['tas_receive_email_from_format']) { + dataProperties.tas_receive_email_from_format = dataNotification['tas_receive_email_from_format']; + } + if (dataNotification['tas_receive_server_uid'] !== 'undefined' && dataNotification['tas_receive_server_uid'] !== null) { + dataProperties.tas_receive_server_uid = dataNotification['tas_receive_server_uid']; + } + if (dataNotification['tas_receive_subject_message']) { + dataProperties.tas_receive_subject_message = dataNotification['tas_receive_subject_message']; + } + if (dataNotification['tas_receive_message_type']) { + dataProperties.tas_receive_message_type = dataNotification['tas_receive_message_type']; + } + if (dataNotification['tas_receive_message']) { + dataProperties.tas_receive_message = dataNotification['tas_receive_message']; + } + if (dataNotification['tas_receive_message_template']) { + dataProperties.tas_receive_message_template = dataNotification['tas_receive_message_template']; + } + + if (consolidated == '1') { + consolidated_enable = false; + if (formConsolidated.getField('consolidated_enable').getValue() == '["1"]') { + consolidated_enable = true; + if (!formConsolidated.isValid()) { + return; + } + } + dataProperties.consolidate_data = { + "consolidated_enable": consolidated_enable, + "consolidated_dynaform": formConsolidated.getField('consolidated_dynaform').getValue(), + "consolidated_table": formConsolidated.getField('consolidated_table').getValue(), + "consolidated_title": formConsolidated.getField('consolidated_title').getValue(), + "consolidated_report_table": formConsolidated.getField('consolidated_report_table').getValue() + }; + } + + (new PMRestClient({ + endpoint: 'activity/' + activity.id, + typeRequest: 'update', + messageError: '', + data: { + definition: {}, + properties: dataProperties + }, + functionSuccess: function (xhr, response) { + setNameActivity(dataProperties.tas_title); + windowProperties.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Task properties saved successfully'.translate(), + flashContainer: document.body + })).executeRestClient(); + } + + function setFocusTab(tab) { + var style; + $customGrid = $("#customGrid"); + $customGrid.hide().appendTo($("#windowProperties").find(".pmui-window-body:eq(0)")); + + if (tab.getTitle() === 'Definitions'.translate()) { + formDefinitions.getField('tas_title').setFocus(); + } + if (tab.getTitle() === 'Case Labels'.translate()) { + formCaseLabels.getField('tas_def_title').setFocus(); + style = $('#formCaseLabelsDescription .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#formCaseLabelsDescription .pmui-field-label').attr("style", style); + } + if (tab.getTitle() === 'Timing Control'.translate()) { + formTimingControl.getField('tas_duration').setFocus(); + } + if (tab.getTitle() === 'Notifications'.translate()) { + formNotifications.getField('tas_def_subject_message').setFocus(); + style = $('#formNotificationsMessage .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#formNotificationsMessage .pmui-field-label').attr("style", style); + + style = $('#tas_receive_message .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#tas_receive_message .pmui-field-label').attr("style", style); + } + if (tab.getTitle() === 'Actions by Email'.translate()) { + abeForm.getField("ABE_TYPE").onChange(abeForm.getField("ABE_TYPE").getValue()); + } + } + + function isDirty() { + return formDefinitions.isDirty() || + formCaseLabels.isDirty() || + formTimingControl.isDirty() || + formNotifications.isDirty(); + } + + function setNameActivity(name) { + activity.setName(name); + activity.setActName(name); + PMDesigner.project.dirty = true; + } + + windowProperties.open(); + windowProperties.showFooter(); + + applyStyleWindowForm(windowProperties); + if (consolidated == '1') { + formConsolidated.getField('consolidated_report_table').setVisible(false); + } + function customDOM() { + $customGrid = $("#customGrid"); + $customGrid.show().appendTo($("#customGridPanel").find("fieldset:eq(0)")); + document.getElementById("customGridPanel").style.width = "720px"; + document.getElementById("customGridPanel").style.padding = ""; + document.getElementById("customGridPanel").getElementsByTagName("fieldset")[0].style.width = "100%"; + $(".pmui-gridpanel-footer").css({"text-align": "center", "margin-top": "10px", "width": "120%"}); + $(".pmui-gridpanel-footer").removeClass("pmui-gridpanel-footer"); + } + + function clearAddOptionForm() { + abeAddOption.getField("abe_custom_value_add").setValue(""); + abeAddOption.getField("abe_custom_label_add").setValue(""); + abeAddOption.getField("abe_custom_format_add").setValue(""); + abeAddOption.getField("buttonFieldCancel").setVisible(false); + abeAddOption.getField("buttonFieldAdd").setValue("Add".translate()); + editRow = null; + }; + function addAcceptedValue() { + var abeValue = abeAddOption.getField("abe_custom_value_add").getValue(), + abeLabel = abeAddOption.getField("abe_custom_label_add").getValue(), + abeFormat = abeAddOption.getField("abe_custom_format_add").getValue(); + + if (abeAddOption && !abeAddOption.isValid()) { + return; + } + + if (!evaluateTags(abeFormat, 'validate')) { + return; + } + + if (editRow === null) { + customGrid.addItem(new PMUI.grid.GridPanelRow({ + data: { + abe_custom_value: abeValue, + abe_custom_label: abeLabel, + abe_custom_format: abeFormat + } + })); + } else { + editRow.setData({ + abe_custom_value: abeValue, + abe_custom_label: abeLabel, + abe_custom_format: abeFormat + }); + editRow = null; + abeAddOption.getField("buttonFieldCancel").setVisible(false); + abeAddOption.getField("buttonFieldAdd").setValue("Add".translate()); + } + abeAddOption.getField("abe_custom_value_add").setValue(""); + abeAddOption.getField("abe_custom_label_add").setValue(""); + abeAddOption.getField("abe_custom_format_add").setValue(""); + } + + function customGridRowEdit(row) { + editRow = row; + row = row.getData(); + if (abeAddOption) { + abeAddOption.getField("abe_custom_value_add").setValue(row.abe_custom_value); + abeAddOption.getField("abe_custom_label_add").setValue(row.abe_custom_label); + abeAddOption.getField("abe_custom_format_add").setValue(row.abe_custom_format); + abeAddOption.getField("buttonFieldCancel").setVisible(true); + abeAddOption.getField("buttonFieldAdd").setValue("Save".translate()); + } + } + + function evaluateTags(html, action) { + var oldHtml; + var tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*'; + var pattern = /^[a-zA-Z0-9\s\[\]\.\-_#%;,=:()']*$/; + var tagOrComment = new RegExp( + '<(?:' + // Comment body. + + '!--(?:(?:-*[^->])*--+|-?)' + // Special "raw text" elements whose content should be elided. + + '|script\\b' + tagBody + '>[\\s\\S]*?[\\s\\S]*?', + 'gi'); + + var action = (typeof action === 'undefined') ? 'delete' : 'validate'; + if (action == "validate") { + return pattern.test(html); + } else { + do { + oldHtml = html; + html = html.replace(tagOrComment, ''); + } while (html !== oldHtml); + return html.replace(/ -1) { + arrayObjectAdhocUser.splice(index, 1); + } + }, + onDrop: function (a, row) { + grid = this; + removeAD(row); + gridUserListAD.goToPage(gridUserListAD.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + assigmentPanelUserListAD = new PMUI.core.Panel({ + id: "assigmentPanelUserListAD", + layout: "vbox", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + }, + width: "60%" + }); + panelTitleUseListAD = new PMUI.core.Panel({ + id: "panelTitleUseListAD", + layout: "hbox" + }); + titleUserListAD = new PMUI.ui.TextLabel({ + id: "titleUserListAD", + textMode: 'plain', + text: 'Assigned users list'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelGridUserListAD = new PMUI.core.Panel({ + id: "panelGridUserListAD", + layout: "hbox", + style: { + cssClasses: ["mafe-panel"] + } + }); + buttonsUserListAD = new PMUI.field.RadioButtonGroupField({ + id: "buttonsUserListAD", + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [{ + id: 'buttonAllAs', + label: 'View all'.translate(), + value: 'all', + selected: true + }, { + id: 'buttonUsersAs', + label: 'View users'.translate(), + value: 'user' + }, { + id: 'buttonGroupsAs', + label: 'View groups'.translate(), + value: 'group' + }], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUserListAD.typeList = "user"; + break; + case "group": + gridUserListAD.typeList = "group"; + break; + default: + gridUserListAD.typeList = ""; + break; + } + gridUserListAD.goToPage(0); + } + }); + gridUserListAD = new PMUI.grid.GridPanel({ + id: "gridUserListAD", + pageSize: pageSizeAssignmentAD - 1, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 242, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = "mafe-grid-panel-empty"; + div.style.height = gridUserListAD.dom.tableContainer.style.height; + div.style.width = gridUserListAD.dom.tableContainer.style.width; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserListAD.dom.tableContainer.style.overflow = "hidden"; + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/activity/' + activity.id + '/adhoc-assignee/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].ada_type == "group") { + data[i]["assignee"] = data[i].ada_name; + } else { + data[i]["assignee"] = data[i].ada_name + " " + data[i].ada_lastname + " (" + data[i].ada_username + ")"; + } + } + return data; + }, + columns: [ + { + id: 'gridUserListADButtonLabel', + title: "", + width: "13%", + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem"; + if (row.getData()["ada_type"] === "group") { + var i, + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint("group/" + row.getData()["ada_uid"] + "/users?start=0&limit=11"); + restClient.executeRestClient(); + } + } + }, + { + title: '', + dataType: 'string', + columnData: "assignee", + alignmentCell: "left", + width: "330px" + }, + { + id: 'gridUserListADButtonDelete', + title: '', + dataType: 'button', + width: "10%", + buttonStyle: { + cssClasses: [ + 'mafe-button-delete-assign' + ] + }, + buttonLabel: function (row, data) { + var sw = row.getData()["ada_type"] === 'user'; + row.getCells()[0].content.style.addClasses([sw ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + var dataRow = {}; + grid = (grid != null) ? grid : gridUserListAD; + removeAD(row); + grid.goToPage(grid.currentPage); + gridUsersAD.goToPage(gridUsersAD.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (a, row) { + grid = this; + assigneeAD(row); + gridUsersAD.goToPage(gridUsersAD.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelContainerRules = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH - 55, + height: "auto", + fieldset: true, + items: [ + formAssignmentRules + ] + }); + panelContainerUsers = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + height: "auto", + fieldset: true, + items: [ + assigmentPanelGlobal + ] + }); + panelContainerUsersAdHoc = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + height: "auto", + fieldset: true, + items: [ + assigmentPanelGlobalAD + ] + }); + + tabPanelAssignmentRules = new PMUI.panel.TabPanel({ + id: 'tabPanelAssignmentRules', + width: "100%", + height: "auto", + items: [ + { + id: 'tabUsers', + title: 'Users'.translate(), + panel: panelContainerUsers + }, + { + id: 'tabUsersAdHoc', + title: 'Ad Hoc Users'.translate(), + panel: panelContainerUsersAdHoc + } + ], + onTabClick: function (item) { + quickMessageWindow.close(); + switch (item.id) { + case 'tabRules': + break; + case 'tabUsers': + applyStyles(); + gridUsers.goToPage(0); + gridUserList.goToPage(0); + break; + case 'tabUsersAdHoc': + applyStylesAD(); + gridUsersAD.goToPage(0); + gridUserListAD.goToPage(0); + break; + } + } + }); + windowAssignmentRules = new PMUI.ui.Window({ + id: 'windowAssignmentRules', + title: 'Assignment Rules'.translate() + ': ' + activity.act_name, + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerItems: [ + { + id: 'windowConnectionsButtonCancel', + text: 'Close'.translate(), + handler: function () { + if (formAssignmentRules.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowAssignmentRules.close(); + } + }, + buttonType: 'error' + }, + { + buttonType: 'success', + id: 'windowPropertiesButtonSave', + text: "Save".translate(), + handler: function () { + saveData(); + } + } + ], + visibleFooter: true, + buttonPanelPosition: 'bottom', + footerAlign: "right", + onBeforeClose: function () { + if (formAssignmentRules.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowAssignmentRules.close(); + } + } + }); + + loadTrigger = function (response) { + var field = formAssignmentRules.getField('tas_selfservice_trigger_uid'), i; + field.clearOptions(); + field.addOption({ + value: '', + label: '- Select Trigger -'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].tri_uid, + label: response[i].tri_title + }); + } + }; + loadFormData = function (response) { + dataProperties = response.properties; + formAssignmentRules.getField('tas_assign_type').setValue(dataProperties.tas_assign_type); + formAssignmentRules.getField('tas_assign_variable').setValue(dataProperties.tas_assign_variable); + formAssignmentRules.getField('tas_group_variable').setValue(dataProperties.tas_group_variable); + changeRadioButtons(formAssignmentRules.getField('tas_assign_type').getValue()); + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].deselect(); + if (dataProperties.tas_selfservice_timeout === 1) { + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].select(); + } + formAssignmentRules.getField('tas_selfservice_time').setValue(dataProperties.tas_selfservice_time); + formAssignmentRules.getField('tas_selfservice_time_unit').setValue(dataProperties.tas_selfservice_time_unit); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setValue(dataProperties.tas_selfservice_trigger_uid); + formAssignmentRules.getField('tas_selfservice_execution').setValue(dataProperties.tas_selfservice_execution); + visibleService(dataProperties.tas_selfservice_timeout === 1); + }; + loadServerData = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/activity/' + activity.id, + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadTrigger(response[1].response); + loadFormData(response[0].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadFreeUsers = function (response) { + var i; + gridUsers.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUsers.addDataItem({ + fullName: response[i].aas_name + " " + response[i].aas_lastname, + ass_uid: response[i].aas_uid, + ass_type: response[i].aas_type + }); + } + }; + loadAssignmentUsers = function (response) { + var i; + gridUserList.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUserList.addDataItem({ + fullName: response[i].aas_name + " " + response[i].aas_lastname, + ass_uid: response[i].aas_uid, + ass_type: response[i].aas_type + }); + } + }; + loadAdHocFreeUsers = function (response) { + var i; + gridUsersAD.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUsersAD.addDataItem({ + fullName: response[i].ada_name + " " + response[i].ada_lastname, + ada_uid: response[i].ada_uid, + ass_type: response[i].ada_type + }); + } + }; + loadAdHocAssignmentUsers = function (response) { + var i; + gridUserListAD.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUserListAD.addDataItem({ + fullName: response[i].ada_name + " " + response[i].ada_lastname, + ada_uid: response[i].ada_uid, + ass_type: response[i].ada_type + }); + } + }; + updateRules = function () { + (new PMRestClient({ + endpoint: 'activity/' + activity.id, + typeRequest: 'update', + messageError: ' ', + data: { + definition: {}, + properties: dataProperties + }, + messageSuccess: 'Assignment Rules saved successfully'.translate(), + flashContainer: document.body, + functionSuccess: function () { + formAssignmentRules.dirty = false; + windowAssignmentRules.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + }; + allHidden = function () { + formAssignmentRules.getField('tas_assign_variable').setVisible(false); + formAssignmentRules.getField('tas_group_variable').setVisible(false); + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(false); + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].deselect(); + formAssignmentRules.getField('tas_selfservice_time').setVisible(false); + formAssignmentRules.getField('tas_selfservice_time_unit').setVisible(false); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setVisible(false); + formAssignmentRules.getField('tas_selfservice_execution').setVisible(false); + }; + changeRadioButtons = function (newVal) { + allHidden(); + tabPanelAssignmentRules.setVisible(true); + switch (newVal) { + case 'EVALUATE': + formAssignmentRules.getField('tas_assign_variable').setVisible(true); + if (dataProperties.tas_assign_variable === "" || dataProperties.tas_assign_variable === null) { + formAssignmentRules.getField('tas_assign_variable').setValue('@@SYS_NEXT_USER_TO_BE_ASSIGNED'); + } else { + formAssignmentRules.getField('tas_assign_variable').setValue(dataProperties.tas_assign_variable); + } + break; + case 'SELF_SERVICE': + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(true); + break; + case 'SELF_SERVICE_EVALUATE': + formAssignmentRules.getField('tas_group_variable').setVisible(true); + if (dataProperties.tas_group_variable === "@@SYS_GROUP_TO_BE_ASSIGNED" || dataProperties.tas_group_variable === "" || dataProperties.tas_group_variable === null) { + formAssignmentRules.getField('tas_group_variable').setPlaceholder('@@ARRAY_OF_USERS or @@GROUP_UID'); + } else { + formAssignmentRules.getField('tas_group_variable').setValue(dataProperties.tas_group_variable); + } + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(true); + break; + case 'REPORT_TO': + break; + case 'MULTIPLE_INSTANCE_VALUE_BASED': + formAssignmentRules.getField('tas_assign_variable').setLabel("Array of users".translate()); + if (formAssignmentRules.getField('tas_assign_variable').getValue() == "@@SYS_NEXT_USER_TO_BE_ASSIGNED" || formAssignmentRules.getField('tas_assign_variable').getValue() == "") { + formAssignmentRules.getField('tas_assign_variable').setValue(''); + formAssignmentRules.getField('tas_assign_variable').setPlaceholder('@@ARRAY_OF_USERS'); + } + formAssignmentRules.getField('tas_assign_variable').setVisible(true); + if (activity.act_loop_type == "PARALLEL") { + tabPanelAssignmentRules.setVisible(false); + } + break; + default: + break; + } + }; + visibleService = function (value) { + var a = formAssignmentRules.getField('tas_assign_type').getValue(); + if (a === 'SELF_SERVICE' || a === 'SELF_SERVICE_EVALUATE') { + formAssignmentRules.getField('tas_selfservice_time').setVisible(value); + formAssignmentRules.getField('tas_selfservice_time_unit').setVisible(value); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setVisible(value); + formAssignmentRules.getField('tas_selfservice_execution').setVisible(value); + } + }; + hiddenTab = function (value) { + tabPanelAssignmentRules.showTab(2); + }; + saveData = function () { + var a, b, c, d, tas_selfservice_timeout, data; + tas_selfservice_timeout = formAssignmentRules.getField('tas_selfservice_timeout').getValue() === '["1"]'; + if (!tas_selfservice_timeout) { + //validation because getData method do not work in IE + if (navigator.userAgent.indexOf("MSIE") !== -1 || navigator.userAgent.indexOf("Trident") !== -1) { + data = getData2PMUI(formAssignmentRules.html); + b = data["tas_assign_variable"]; + } else { + b = formAssignmentRules.getField('tas_assign_variable').getValue(); + } + a = formAssignmentRules.getField('tas_assign_type').getValue(); + c = formAssignmentRules.getField('tas_group_variable').getValue(); + d = formAssignmentRules.getField('tas_group_variable').getValue(); + formAssignmentRules.getField('tas_assign_type').setValue(a); + formAssignmentRules.getField('tas_assign_variable').setValue(b); + formAssignmentRules.getField('tas_group_variable').setValue(c); + formAssignmentRules.getField('tas_selfservice_timeout').setValue(d); + formAssignmentRules.getField('tas_selfservice_time').setValue(''); + formAssignmentRules.getField('tas_selfservice_time_unit').setValue(''); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setValue(''); + formAssignmentRules.getField('tas_selfservice_execution').setValue(''); + } else { + if (!formAssignmentRules.isValid()) { + return; + } + } + dataProperties.tas_assign_type = formAssignmentRules.getField('tas_assign_type').getValue(); + dataProperties.tas_assign_variable = formAssignmentRules.getField('tas_assign_variable').getValue() === '' ? '@@SYS_NEXT_USER_TO_BE_ASSIGNED' : formAssignmentRules.getField('tas_assign_variable').getValue(); + dataProperties.tas_group_variable = formAssignmentRules.getField('tas_group_variable').getValue() === '' ? '@@SYS_GROUP_TO_BE_ASSIGNED' : formAssignmentRules.getField('tas_group_variable').getValue(); + dataProperties.tas_selfservice_timeout = tas_selfservice_timeout ? 1 : 0; + dataProperties.tas_selfservice_time = formAssignmentRules.getField('tas_selfservice_time').getValue() !== "" ? parseInt(formAssignmentRules.getField('tas_selfservice_time').getValue(), 10) : 0; + dataProperties.tas_selfservice_time_unit = formAssignmentRules.getField('tas_selfservice_time_unit').getValue(); + dataProperties.tas_selfservice_trigger_uid = formAssignmentRules.getField('tas_selfservice_trigger_uid').getValue(); + dataProperties.tas_selfservice_execution = formAssignmentRules.getField('tas_selfservice_execution').getValue(); + updateRules(); + }; + saveOrUpdateUserAndAdHocUsers = function () { + //Assigne and Remove (users) + var i, b; + if (gridUserList.getItems().length > 0) { + grid = gridUserList; + for (i = 0; i < arrayObjectUserList.length; i += 1) { + b = arrayObjectUserList[i]; + if (arrayObjectUserList2.indexOf(b) == -1) { + assignee(b); + } + } + } + if (gridUsers.getItems().length > 0) { + for (i = 0; i < arrayObjectUsers.length; i += 1) { + b = arrayObjectUsers[i]; + if (arrayObjectUsers2.indexOf(b) == -1) { + remove(arrayObjectUsers[i]); + } + } + } + //Assigne and Remove (AdHocUsers) + if (gridUserListAD.getItems().length > 0) { + grid = gridUserListAD; + for (i = 0; i < arrayObjectAdhocUserList.length; i += 1) { + b = arrayObjectAdhocUserList[i]; + if (arrayObjectAdhocUserList2.indexOf(b) == -1) { + assigneeAD(b); + } + } + } + if (gridUsersAD.getItems().length > 0) { + for (i = 0; i < arrayObjectAdhocUser.length; i += 1) { + b = arrayObjectAdhocUser[i]; + if (arrayObjectAdhocUser2.indexOf(b) == -1) { + removeAD(arrayObjectAdhocUser[i]); + } + } + } + }; + applyStyles = function () { + gridUsers.dom.toolbar.appendChild(buttonsUsers.getHTML()); + buttonsUsers.defineEvents(); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(buttonsUserList.getHTML()); + buttonsUserList.defineEvents(); + gridUserList.dom.toolbar.style.height = "76px"; + buttonsUsers.dom.labelTextContainer.style.display = "none"; + buttonsUserList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + }; + applyStylesAD = function () { + gridUsersAD.dom.toolbar.appendChild(buttonsUsersAD.getHTML()); + buttonsUsersAD.defineEvents(); + gridUsersAD.dom.toolbar.style.height = "76px"; + + gridUserListAD.dom.toolbar.appendChild(buttonsUserListAD.getHTML()); + buttonsUserListAD.defineEvents(); + gridUserListAD.dom.toolbar.style.height = "76px"; + buttonsUsersAD.dom.labelTextContainer.style.display = "none"; + buttonsUserListAD.dom.labelTextContainer.style.display = "none"; + gridUsersAD.hideHeaders(); + gridUserListAD.hideHeaders(); + assigmentPanelUserListAD.setHeight('100%'); + gridUsersAD.filterControl.html.style.width = "300px"; + gridUserListAD.filterControl.html.style.width = "300px"; + }; + assignee = function (row) { + restClient.setTypeRequest("post"); + restClient.setEndpoint("activity/" + activity.id + "/assignee"); + restClient.setData({aas_uid: row.getData()["aas_uid"], aas_type: row.getData()["aas_type"]}); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + remove = function (row) { + restClient.setTypeRequest("remove"); + restClient.setEndpoint("activity/" + activity.id + "/assignee/" + row.getData().aas_uid); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + assigneeAD = function (row) { + restClient.setTypeRequest("post"); + restClient.setEndpoint("activity/" + activity.id + "/adhoc-assignee"); + restClient.setData({ada_uid: row.getData()["ada_uid"], ada_type: row.getData()["ada_type"]}); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + removeAD = function (row) { + restClient.setTypeRequest("remove"); + restClient.setEndpoint("activity/" + activity.id + "/adhoc-assignee/" + row.getData()["ada_uid"]); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().ass_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('fullName', 'asc'); + }; + + function onchangeRadio(grid, fieldName) { + var radioButTrat = document.getElementsByName(fieldName), i; + for (i = 0; i < radioButTrat.length; i += 1) { + if (radioButTrat[i].checked == true) { + quickMessageWindow.close(); + groupRows(grid, radioButTrat[i].value); + } + } + } + + function domSettings() { + if (activity.act_loop_type == "PARALLEL") { + $(formAssignmentRules.getField("tas_assign_type").controls[0].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[1].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[2].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[3].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[4].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[5].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[6].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[7].html).parent().show(); + if (formAssignmentRules.getField('tas_assign_type').getValue() == "MULTIPLE_INSTANCE_VALUE_BASED") { + formAssignmentRules.getField('tas_assign_type').setValue("MULTIPLE_INSTANCE_VALUE_BASED"); + } else { + formAssignmentRules.getField('tas_assign_type').setValue("MULTIPLE_INSTANCE"); + } + } else { + $(formAssignmentRules.getField("tas_assign_type").controls[0].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[1].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[2].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[3].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[4].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[5].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[6].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[7].html).parent().hide(); + if (formAssignmentRules.getField('tas_assign_type').getValue() == "MULTIPLE_INSTANCE_VALUE_BASED") { + formAssignmentRules.getField('tas_assign_type').setValue("BALANCED"); + formAssignmentRules.getField('tas_assign_variable').setVisible(false); + } + } + }; + + panelTitleUser.addItem(titleUser); + panelGridUser.addItem(gridUsers); + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelGridUser); + assigmentPanelGlobal.addItem(assigmentPanelUser); + panelTitleUserList.addItem(titleUserList); + panelGridUserList.addItem(gridUserList); + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelGridUserList); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + + panelTitleUserAD.addItem(titleUserAD); + panelSearchUserAD.addItem(searchGridUserAD); + panelGridUserAD.addItem(gridUsersAD); + assigmentPanelUserAD.addItem(panelTitleUserAD); + assigmentPanelUserAD.addItem(panelGridUserAD); + assigmentPanelGlobalAD.addItem(assigmentPanelUserAD); + panelTitleUseListAD.addItem(titleUserListAD); + panelGridUserListAD.addItem(gridUserListAD); + assigmentPanelUserListAD.addItem(panelTitleUseListAD); + assigmentPanelUserListAD.addItem(panelGridUserListAD); + assigmentPanelGlobalAD.addItem(assigmentPanelUserListAD); + + if (formAssignmentRules.dirty == null) { + formAssignmentRules.dirty = false; + } + windowAssignmentRules.addItem(formAssignmentRules); + windowAssignmentRules.addItem(tabPanelAssignmentRules); + windowAssignmentRules.open(); + applyStyleWindowForm(windowAssignmentRules); + windowAssignmentRules.body.style.overflowY = 'auto'; + windowAssignmentRules.body.style.overflowX = 'hidden'; + windowAssignmentRules.defineEvents(); + buttonsUsers.defineEvents(); + tabPanelAssignmentRules.itemClick(0); + loadServerData(); + domSettings(); + //array for Users + usersgrid = gridUsers; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectUsers2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserList; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectUserList2[i] = userslist.getItems()[i]; + } + //array for AdHocUsers + usersgrid = gridUsersAD; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectAdhocUser2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserListAD; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectAdhocUserList2[i] = userslist.getItems()[i]; + } + formAssignmentRules.html.style.marginLeft = '30px'; + formAssignmentRulesSetTimeoutOption; + document.getElementById("formAssignmentRulesSetTimeoutOption").childNodes[0].onchange = function () { + visibleService(this.checked); + }; + $(".pmui-field-control-table").css("border", "0px"); + $(".pmui-field-label").css("padding", "0px"); + $(".mafe-designer-assigment-title").css("margin-top", "25px"); + $("#formTasAssignType").append("
"); + $(".pmui-gridpanel-footer").addClass("pmui-gridpanel-footer-dinamic"); + }; +}()); +(function () { + PMDesigner.assigmentSupervisors = function (event) { + var assigmentWindow = null, + pageSizeAssignment = 8, + restClient, + assigmentPanelUser, + assigmentPanelUserList, + assigmentPanelGlobal, + panelTitleUser, + titleUser, + panelSearchUser, + searchGridUser, + panelGridUser, + buttonsUsers, + gridUsers, + panelTitleUserList, + titleUserList, + panelSearchUserList, + searchGridUserList, + panelGridUserList, + buttonsUserList, + gridUserList, + applyStyles, + loadServerData, + loadUsers, + loadUsersList, + groupRows, + assignee, + remove, + quickMessageWindow = new QuickMessageWindow(); + + assigmentWindow = new PMUI.ui.Window({ + id: 'assigmentUserWindow', + title: 'Assign Users and Groups as Supervisors'.translate(), + width: DEFAULT_WINDOW_WIDTH + 1, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true + }); + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + messageError: 'There are problems, please try again.'.translate(), + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + assigmentPanelUser = new PMUI.core.Panel({ + layout: "vbox", + width: "49%", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + } + }); + assigmentPanelUserList = new PMUI.core.Panel({ + layout: "vbox", + width: "50%", + style: { + cssClasses: [ + 'mafe-panel-assignment-smooth' + ] + } + }); + assigmentPanelGlobal = new PMUI.core.Panel({ + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH, + style: { + cssClasses: [ + 'mafe-assigment-panel-global' + ] + } + }); + + panelTitleUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUser = new PMUI.ui.TextLabel({ + id: 'titleUser', + label: ' ', + textMode: 'plain', + text: 'Available Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUser = new PMUI.field.TextField({ + id: 'searchGridUser', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUser = new PMUI.core.Panel({layout: 'hbox'}); + buttonsUsers = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUsers', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + selected: true, + value: 'all', + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + ], + listeners: { + select: function (item, event) { + groupRows(gridUsers, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUsers = new PMUI.grid.GridPanel({ + id: 'gridUsers', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + id: 'gridUsersButtonLabel', + title: '', + dataType: 'button', + width: '10%', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + if (row.data.customKeys.obj_type === 'group') { + restClient.setTypeRequest('get'); + restClient.functionSuccess = function (xhr, response) { + var stringUsers = '', i; + for (i = 0; i < response.length; i += 1) { + stringUsers = stringUsers + response[i].usr_firstname + ' ' + response[i].usr_lastname + ', '; + } + stringUsers = stringUsers.substring(0, stringUsers.length - 2); + if (stringUsers === '') { + stringUsers = 'No users'; + } + quickMessageWindow.show($(row.html).find('a')[0], stringUsers); + }; + restClient.setBaseEndPoint('group/' + row.data.customKeys.sup_uid + '/users'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'sup_name', + alignmentCell: 'left', + width: '80%' + }, { + id: 'gridUsersButtonAssign', + title: '', + dataType: 'button', + width: '19%', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.data.customKeys.obj_type === 'user' ? 'button-icon-user' : 'button-icon-group']); + return 'Assign'.translate(); + }, + onButtonClick: function (row, grid) { + grid.removeItem(row); + grid.sort('sup_name', 'asc'); + gridUserList.addItem(row); + buttonsUserList.setValue(buttonsUsers.getValue()); + groupRows(gridUserList, buttonsUsers.getValue()); + assignee(row); + } + } + ], + onDropOut: function (item, origin, destiny) { + assignee(item); + }, + onDrop: function (a, row) { + buttonsUsers.setValue(buttonsUserList.getValue()); + groupRows(gridUsers, buttonsUserList.getValue()); + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelTitleUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUserList = new PMUI.ui.TextLabel({ + id: 'titleUserList', + textMode: 'plain', + text: 'Assigned Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUserList = new PMUI.field.TextField({ + id: 'searchGridUserList', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + buttonsUserList = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUserList', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + value: 'all', + selected: true, + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + + ], + listeners: { + select: function (item, event) { + groupRows(gridUserList, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUserList = new PMUI.grid.GridPanel({ + id: 'gridUserList', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterPlaceholder: 'Search ...'.translate(), + filterable: true, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = 'mafe-grid-panel-empty'; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserList.dom.tableContainer.style.overflow = 'hidden'; + }, + columns: [{ + id: 'gridUserListButtonLabel', + title: '', + width: '10%', + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var stringUsers, i; + if (row.data.customKeys.obj_type === 'group') { + restClient.setTypeRequest('get'); + restClient.functionSuccess = function (xhr, response) { + stringUsers = ''; + for (i = 0; i < response.length; i += 1) { + stringUsers = stringUsers + response[i].usr_firstname + ' ' + response[i].usr_lastname + ', '; + } + stringUsers = stringUsers.substring(0, stringUsers.length - 2); + if (stringUsers === '') { + stringUsers = 'No users'; + } + quickMessageWindow.show($(row.html).find('a')[0], stringUsers); + }; + restClient.setBaseEndPoint('group/' + row.data.customKeys.sup_uid + '/users'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'sup_name', + width: '80%', + alignmentCell: 'left' + }, { + id: 'gridUserListButtonDelete', + title: '', + dataType: 'button', + width: '10%', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.data.customKeys.obj_type === 'user' ? 'button-icon-user' : 'button-icon-group']); + return 'Remove'.translate(); + }, + onButtonClick: function (row, grid) { + grid.removeItem(row); + grid.sort('sup_name', 'asc'); + gridUsers.addItem(row); + buttonsUsers.setValue(buttonsUserList.getValue()); + groupRows(gridUsers, buttonsUserList.getValue()); + remove(row); + } + } + ], + onDropOut: function (item, origin, destiny) { + remove(item); + }, + onDrop: function (a, row) { + buttonsUserList.setValue(buttonsUsers.getValue()); + groupRows(gridUserList, buttonsUsers.getValue()); + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + applyStyles = function () { + gridUsers.dom.toolbar.appendChild(buttonsUsers.getHTML()); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(buttonsUserList.getHTML()); + gridUserList.dom.toolbar.style.height = "76px"; + buttonsUsers.dom.labelTextContainer.style.display = "none"; + buttonsUserList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + }; + loadServerData = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/available-process-supervisors', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/process-supervisors', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadUsers(response[0].response); + loadUsersList(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadUsers = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].obj_type === 'user') { + gridUsers.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: response[i].obj_type + }); + } + if (response[i].obj_type === 'group') { + gridUsers.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: response[i].obj_type + }); + } + } + gridUsers.sort('sup_name', 'asc'); + }; + loadUsersList = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].pu_type === 'SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: 'user', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + if (response[i].pu_type === 'GROUP_SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: 'group', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + } + gridUserList.sort('sup_name', 'asc'); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().obj_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('sup_name', 'asc'); + }; + assignee = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor', + typeRequest: 'post', + data: { + usr_uid: row.data.customKeys.sup_uid, + pu_type: row.data.customKeys.obj_type === 'group' ? 'GROUP_SUPERVISOR' : 'SUPERVISOR' + }, + functionSuccess: function (xhr, response) { + row.data.customKeys.pu_type = response.pu_type; + row.data.customKeys.pu_uid = response.pu_uid; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.executeRestClient(); + }; + remove = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + row.data.customKeys.pu_uid, + typeRequest: 'remove', + functionSuccess: function () { + }, + functionComplete: function () { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + assigmentWindow.open(); + panelTitleUser.addItem(titleUser); + panelTitleUserList.addItem(titleUserList); + assigmentWindow.body.style.overflow = "hidden"; + panelGridUser.addItem(gridUsers); + panelGridUserList.addItem(gridUserList); + + assigmentPanelGlobal.addItem(assigmentPanelUser); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + assigmentWindow.addItem(assigmentPanelGlobal); + + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelSearchUser); + assigmentPanelUser.addItem(buttonsUsers); + assigmentPanelUser.addItem(panelGridUser); + + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelSearchUserList); + assigmentPanelUserList.addItem(buttonsUserList); + assigmentPanelUserList.addItem(panelGridUserList); + + assigmentWindow.defineEvents(); + applyStyles(); + + loadServerData(); + }; +}()); +(function () { + PMDesigner.assigmentSupervisors = function (event) { + var assigmentWindow = null, + pageSizeAssignment = 8, + flagEdit = 0, + i, + index = 0, + quickMessageWindow = new QuickMessageWindow(), + arrayObjectUserList = new Array(), + arrayObjectUsers = new Array(), + arrayObjectUserList2 = new Array(), + arrayObjectUsers2 = new Array(), + arrayDynaformInputDocumentID = new Array(), + arrayDynaformInputDocumentObject = new Array(), + arrayObjectRemovedSteps = new Array(), + message_window, + restClient, + assigmentPanelUser, + assigmentPanelUserList, + assigmentPanelGlobal, + panelTitleUser, + titleUser, + panelSearchUser, + searchGridUser, + panelGridUser, + buttonsUsers, + gridUsers, + panelTitleUserList, + titleUserList, + panelSearchUserList, + searchGridUserList, + panelGridUserList, + radioUsersList, + buttonsUserList, + gridUserList, + radioUsers, + applyStylesRadioButtonGroupField, + applyStylesForToolbar, + applyStyles, + loadUsers, + loadUsersList, + groupRows, + assignee, + remove, + loadGridCaseTacker, + orderDataTree, + titleTreeObjects, + titleGridObjects, + panelLabelObjects, + panelObjects, + treePanelObjects, + updateItem, + usersgrid, + saveItemDyanformInputDocuments, + getValuesAssignmentSteps, + gridPanelObjects, + panelContainerObjects, + userslist, + gridpanelobj, + flashMessage = new PMUI.ui.FlashMessage({ + message: '', + appendTo: document.body, + duration: 1000, + severity: "success" + }); + assigmentWindow = new PMUI.ui.Window({ + id: 'assigmentUserWindow', + title: 'Supervisors'.translate(), + width: DEFAULT_WINDOW_WIDTH + 1, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + onBeforeClose: function () { + if (flagEdit != 0) { + message_window.open(); + message_window.showFooter(); + } else { + assigmentWindow.close(); + } + }, + footerItems: [ + { + text: "Cancel", + handler: function () { + if (flagEdit != 0) { + message_window.open(); + message_window.showFooter(); + } else { + assigmentWindow.close(); + } + }, + buttonType: 'error' + }, + { + text: 'Save', + handler: function () { + var i, j, idObject, objType, baseEndPointID; + if (flagEdit != 0) { + //save Configuration Supervisors and Steps(Dyanform - Inputs Documents) + if (gridUserList.getItems().length > 0) { + grid = gridUserList; + for (i = 0; i < arrayObjectUserList.length; i += 1) { + b = arrayObjectUserList[i]; + grid.removeItem(b); + grid.sort('sup_name', 'asc'); + gridUserList.addItem(b); + radioUsersList.setValue(radioUsers.getValue()); + groupRows(gridUserList, radioUsers.getValue()); + if (arrayObjectUserList2.indexOf(b) == -1) { + assignee(b); + } + } + } + if (gridUsers.getItems().length > 0) { + for (i = 0; i < arrayObjectUsers.length; i += 1) { + b = arrayObjectUsers[i]; + if (arrayObjectUsers2.indexOf(b) == -1) { + remove(arrayObjectUsers[i]); + } + } + } + + index = 0; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + idObject = gridPanelObjects.getItems()[i].getData().obj_uid; + index = arrayDynaformInputDocumentID.indexOf(idObject); + if (index <= -1) { + saveItemDyanformInputDocuments(gridPanelObjects.getItems()[i]); + } else { + updateItem(gridPanelObjects.getItems()[i], i); + } + } + + for (i = 0; i < arrayObjectRemovedSteps.length; i += 1) { + for (j = 0; j < arrayDynaformInputDocumentObject.length; j += 1) { + index = (arrayObjectRemovedSteps[i] == arrayDynaformInputDocumentObject[j].obj_uid) ? 0 : 1; + if (index == 0) { + objType = arrayDynaformInputDocumentObject[j].obj_type.toLowerCase(); + baseEndPointID = (objType === "dynaform") ? arrayDynaformInputDocumentObject[j].pud_uid : arrayDynaformInputDocumentObject[j].pui_uid; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'process-supervisor/' + objType + '/' + baseEndPointID, + "method": 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + break; + } + } + } + assigmentWindow.close(); + } + else { + assigmentWindow.close(); + } + }, + buttonType: "success" + } + ], + visibleFooter: true, + buttonPanelPosition: "bottom", + footerAlign: "right" + }); + + message_window = new PMUI.ui.MessageWindow({ + id: "messageWindowCancel", + width: 490, + title: "Supervisors".translate(), + windowMessageType: "warning", + bodyHeight: "auto", + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: "messageWindowNo", + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: "messageWindowYes", + text: "Yes".translate(), + handler: function () { + message_window.close(); + assigmentWindow.close(); + }, + buttonType: "success" + } + ] + }); + + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + messageError: 'There are problems, please try again.'.translate(), + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + assigmentPanelUser = new PMUI.core.Panel({ + layout: "vbox", + width: "49%", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + } + }); + assigmentPanelUserList = new PMUI.core.Panel({ + layout: "vbox", + width: "50%", + style: { + cssClasses: [ + 'mafe-panel-assignment-smooth' + ] + } + }); + assigmentPanelGlobal = new PMUI.core.Panel({ + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH, + style: { + cssClasses: [ + 'mafe-assigment-panel-global' + ] + } + }); + + panelTitleUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUser = new PMUI.ui.TextLabel({ + id: 'titleUser', + label: ' ', + textMode: 'plain', + text: 'Available Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUser = new PMUI.field.TextField({ + id: 'searchGridUser', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUser = new PMUI.core.Panel({layout: 'hbox'}); + buttonsUsers = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUsers', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + selected: true, + value: 'all', + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + ], + listeners: { + select: function (item, event) { + groupRows(gridUsers, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUsers = new PMUI.grid.GridPanel({ + id: 'gridUsers', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/available-process-supervisors/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].obj_type == "group") { + data[i].available = data[i].grp_name; + } else { + data[i].available = data[i]["usr_firstname"] + " " + data[i]["usr_lastname"] + " (" + data[i]["usr_username"] + ")"; + } + } + return data; + }, + columns: [{ + id: 'gridUsersButtonLabel', + title: '', + dataType: 'button', + width: '10%', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem" + if (row.getData()["obj_type"] === 'group') { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint('group/' + row.getData()["grp_uid"] + '/supervisor-users?start=0&limit=11'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'available', + alignmentCell: 'left', + width: '330px' + }, { + id: 'gridUsersButtonAssign', + title: '', + dataType: 'button', + width: '19%', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit-assign' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.getData()["obj_type"] === 'user' ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + grid = (grid != null) ? grid : gridUsers; + assignee(row); + gridUserList.goToPage(gridUserList.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (a, row) { + grid = this; + remove(row); + gridUserList.goToPage(gridUserList.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelTitleUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUserList = new PMUI.ui.TextLabel({ + id: 'titleUserList', + textMode: 'plain', + text: 'Assigned supervisors list'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUserList = new PMUI.field.TextField({ + id: 'searchGridUserList', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + radioUsersList = new PMUI.field.RadioButtonGroupField({ + id: 'idRadioUsersList', + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + label: "View all".translate(), + value: "all" + }, + { + label: "View users".translate(), + value: "user" + }, + { + label: "View groups".translate(), + value: "group" + } + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUserList.typeList = "user".translate(); + break; + case "group": + gridUserList.typeList = "group".translate(); + break; + default: + gridUserList.typeList = ""; + break; + } + gridUserList.goToPage(0); + }, + required: true, + value: "all" + }); + buttonsUserList = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUserList', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + value: 'all', + selected: true, + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + + ], + listeners: { + select: function (item, event) { + groupRows(gridUserList, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUserList = new PMUI.grid.GridPanel({ + id: 'gridUserList', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterPlaceholder: 'Search ...'.translate(), + filterable: true, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = 'mafe-grid-panel-empty'; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserList.dom.tableContainer.style.overflow = 'hidden'; + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/process-supervisors/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].pu_type == "GROUP_SUPERVISOR") { + data[i].assignee = data[i].grp_name; + } else { + data[i].assignee = data[i]["usr_firstname"] + " " + data[i]["usr_lastname"] + " (" + data[i]["usr_username"] + ")"; + } + } + return data; + }, + columns: [{ + id: 'gridUserListButtonLabel', + title: '', + width: '10%', + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem" + if (row.getData()["pu_type"] === "GROUP_SUPERVISOR") { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint('group/' + row.getData()["grp_uid"] + '/supervisor-users?start=0&limit=11'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'assignee', + width: '330px', + alignmentCell: 'left' + }, { + id: 'gridUserListButtonDelete', + title: '', + dataType: 'button', + width: '10%', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete-assign' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.getData()["pu_type"] === "SUPERVISOR" ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + grid = (grid != null) ? grid : gridUsers; + remove(row); + gridUsers.goToPage(gridUsers.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (grid, row) { + var dataRow = {}; + grid = this; + assignee(row); + gridUsers.goToPage(gridUsers.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + radioUsers = new PMUI.field.RadioButtonGroupField({ + id: 'idRadioUsers', + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + label: "View all".translate(), + value: "all" + }, + { + label: "View users".translate(), + value: "user" + }, + { + label: "View groups".translate(), + value: "group" + } + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUsers.typeList = "user"; + break; + case "group": + gridUsers.typeList = "group"; + break; + default: + gridUsers.typeList = ""; + break; + } + gridUsers.goToPage(0); + }, + required: true, + value: "all", + style: { + cssProperties: { + 'margin-top': '15px' + } + } + }); + applyStylesRadioButtonGroupField = function () { + $('#idRadioUsers .pmui-field-control-table').css("border", "none"); + $('#idRadioUsers').css("margin-top", "12px"); + radioUsers.defineEvents(); + + $('#idRadioUsersList .pmui-field-control-table').css("border", "none"); + $('#idRadioUsersList').css("margin-top", "12px"); + radioUsersList.defineEvents(); + }; + + applyStylesForToolbar = function () { + $('.pmui-gridpanel-toolbar')[0].childNodes[0].style.width = "300px"; + $('.pmui-gridpanel-toolbar')[1].childNodes[0].style.width = "300px"; + $('.pmui-gridpanel-toolbar')[0].childNodes[0].style.backgroundColor = "#f5f5f5"; + $('.pmui-gridpanel-toolbar')[1].childNodes[0].style.backgroundColor = "#f5f5f5"; + $('#assigmentUserWindow')[0].childNodes[1].childNodes[0].childNodes[1].style.backgroundColor = "white"; + $('#gridUserList')[0].style.backgroundColor = "white"; + $('#gridUserList').css("width", "452px"); + $('#gridUsers').css({"width": "452px", "height": "175px"}); + $('.pmui-window-body .pmui-panel:eq(9)').css({ + 'width': '1000px', + 'border-top': '1px solid #cdd2d5', + 'margin-top': '36px', + 'height': '80px' + }); + }; + + applyStyles = function () { + applyStylesRadioButtonGroupField(); + gridUsers.dom.toolbar.appendChild(radioUsers.getHTML()); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(radioUsersList.getHTML()); + gridUserList.dom.toolbar.style.height = "76px"; + radioUsers.dom.labelTextContainer.style.display = "none"; + radioUsersList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + assigmentWindow.getItems()[0].getItems()[0].html.style.borderRight = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[0].html.style.borderBottom = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[1].html.style.borderBottom = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[0].html.style.height = "415px"; + assigmentWindow.getItems()[0].getItems()[1].html.style.height = "415px"; + assigmentWindow.getItems()[0].getItems()[1].html.style.paddingLeft = "10px"; + $('#gridPanelObjects .pmui-gridpanel-tableContainer').css({'height': '245px'}); + $(".pmui-gridpanel-footer").addClass("pmui-gridpanel-footer-dinamic"); + }; + loadUsers = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].obj_type === 'user') { + gridUsers.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: response[i].obj_type + }); + } + if (response[i].obj_type === 'group') { + gridUsers.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: response[i].obj_type + }); + } + } + gridUsers.sort('sup_name', 'asc'); + }; + loadUsersList = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].pu_type === 'SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: 'user', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + if (response[i].pu_type === 'GROUP_SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: 'group', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + } + gridUserList.sort('sup_name', 'asc'); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().obj_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('sup_name', 'asc'); + }; + assignee = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor', + typeRequest: 'post', + data: { + usr_uid: row.getData()["obj_type"] == "group" ? row.getData()["grp_uid"] : row.getData()["usr_uid"], + pu_type: row.getData()["obj_type"] === 'group' ? 'GROUP_SUPERVISOR' : 'SUPERVISOR' + }, + functionSuccess: function (xhr, response) { + row.data.customKeys.pu_type = response.pu_type; + row.data.customKeys.pu_uid = response.pu_uid; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.executeRestClient(); + }; + remove = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + row.getData()["pu_uid"], + typeRequest: 'remove', + functionSuccess: function () { + }, + functionComplete: function () { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + //steps Dynaforms and InputDocuments + titleTreeObjects = new PMUI.ui.TextLabel({ + id: "titleTreeObjects", + textMode: 'plain', + text: 'Available Objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + + titleGridObjects = new PMUI.ui.TextLabel({ + id: "titleGridObjects", + textMode: 'plain', + text: 'Assigned objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ], + cssProperties: { + 'left': 40 + } + } + }); + + panelLabelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + fieldset: true, + items: [ + titleTreeObjects, + titleGridObjects + ], + style: { + cssProperties: { + 'margin-bottom': 2, + 'margin-left': 50 + } + }, + layout: "hbox" + }); + + panelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: 30, + fieldset: true, + items: [ + panelLabelObjects + ], + layout: "vbox" + }); + + //Objects + orderDataTree = function (data) { + var items = [], i, + type = ['DYNAFORM', 'INPUT-DOCUMENT'], + label = ['Dynaform', 'Input Document']; + for (i = 0; i < type.length; i += 1) { + items = []; + for (var j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + if (data[j].obj_type == "DYNAFORM") { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['dyn_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'], + dyn_uid: data[j]['dyn_uid'] + }); + } else { + if (data[j].obj_type == "INPUT-DOCUMENT") { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['inp_doc_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'], + obj_uid: data[j]['obj_uid'], + inp_uid: data[j]['inp_doc_uid'] + }); + } + } + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [{obj_title: 'N/A'.translate(), obj_uid: ''}] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items + }); + } + } + }; + + loadGridCaseTacker = function (data) { + var dataOrder = new Array(), i, j; + for (i = 0; i < data.length; i += 1) { + for (j = 0; j < data.length; j += 1) { + positionIndex = (data[j]['obj_type'] == 'DYNAFORM') ? data[j].pud_position : data[j].pui_position; + if (positionIndex == (i + 1)) { + dataOrder.push(data[j]); + switch (dataOrder[i]['obj_type']) { + case 'DYNAFORM': + label = dataOrder[i]['dyn_title'].translate(); + break; + case 'INPUT-DOCUMENT': + label = dataOrder[i]['input_doc_title'].translate(); + break; + default: + break; + } + dataOrder[i]['obj_title'] = label; + break; + } + } + } + gridPanelObjects.setDataItems(dataOrder); + }; + + getValuesAssignmentSteps = function () { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "process-supervisor/available-assignmentsteps", + "method": 'GET' + }, + { + "url": "process-supervisor/assignmentsteps", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataTree = []; + orderDataTree(response[0].response); + treePanelObjects.setDataItems(dataTree); + loadGridCaseTacker(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + treePanelObjects = new PMUI.panel.TreePanel({ + id: 'treePanelObjects', + proportion: 0.5, + filterable: true, + filterPlaceholder: 'Text to search'.translate(), + emptyMessage: 'No records found'.translate(), + style: {cssClasses: ['itemsSteps']}, + nodeDefaultSettings: { + behavior: "drag", + labelDataBind: 'obj_title', + itemsDataBind: 'items', + collapsed: false, + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + autoBind: true + } + }); + + //Save Item (Drop) + saveItemDyanformInputDocuments = function (rowStep) { + rowStep = rowStep.getData(); + if (rowStep.obj_type === "DYNAFORM") { + data = { + "dyn_uid": rowStep.obj_uid, + "pud_position": rowStep.obj_position + }; + } else { + data = { + "inp_doc_uid": rowStep.obj_uid, + "pui_position": rowStep.obj_position + }; + } + + restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + rowStep.obj_type.toLowerCase(), + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + return data; + }; + + //Update SORT tree + updateItem = function (rowStep, i) { + var objType, + baseEndPointType, + baseEndPointID; + rowStep = rowStep.getData(); + rowStep.obj_position = i + 1; + objType = rowStep.obj_type.toLowerCase(), + baseEndPointType = (objType === "dynaform") ? 'dynaforms' : 'input-documents'; + baseEndPointID = (objType === "dynaform") ? rowStep.pud_uid : rowStep.pui_uid; + if (objType === "dynaform") { + rowStep.pud_position = rowStep.obj_position; + } else { + rowStep.pui_position = rowStep.obj_position; + } + + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'process-supervisor/' + objType + "/" + baseEndPointID, + "method": 'PUT', + "data": rowStep + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + }; + gridPanelObjects = new PMUI.grid.GridPanel({ + id: 'gridPanelObjects', + proportion: 1.5, + visibleFooter: false, + filterable: false, + style: { + cssClasses: ['itemsSteps'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + behavior: 'dragdropsort', + columns: [ + { + title: 'Title'.translate(), + dataType: 'string', + width: 330, + alignment: "left", + columnData: "obj_title", + sortable: false, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: 120, + alignment: "left", + columnData: "obj_type", + sortable: false, + alignmentCell: 'left' + }, + { + id: 'gridPanelObjectsButtonDelete', + title: '', + dataType: 'button', + buttonLabel: '', + buttonStyle: {cssClasses: ['mafe-button-delete-assign']}, + buttonTooltip: 'Remove Object'.translate(), + onButtonClick: function (row, grid) { + var rowStep, treePanelItems; + flagEdit = 1; + index = arrayDynaformInputDocumentID.indexOf(row.getData().obj_uid); + rowStep = row.getData(); + treePanelItems = treePanelObjects.getItems(); + + if (index > -1) { + arrayObjectRemovedSteps.push(row.getData().obj_uid); + arrayDynaformInputDocumentID.splice(index, 1); + } + function removeRowClass(treeNode) { + var childNodeEl = $(treeNode.html).find('.pmui-gridpanelrow'); + childNodeEl.removeClass('pmui-gridpanelrow'); + } + + function removeEmptyNode(indexNode) { + var parentNode = treePanelItems[indexNode]; + if (parentNode.getItems().length == 1 && + parentNode.getItems()[0].getData()['obj_uid'] == "") { + parentNode.removeItem(0); + } + parentNode.addItem(row); + removeRowClass(parentNode); + } + + if (rowStep.obj_type === "DYNAFORM") { + removeEmptyNode(0); + } else { + removeEmptyNode(1); + } + grid.removeItem(row); + } + } + ], + onDrop: function (grid, item, index) { + var parentItems; + if (item.getData()['obj_uid'] == "") { + return false; + + } + parentItems = item.parent.getItems(); + if (parentItems.length == 1 && item.getData()['obj_uid'] != "") { + item.parent.addDataItem( + {obj_title: 'N/A'.translate(), obj_uid: ''} + ); + item.parent.behaviorObject.draggedObject = item; + } + flagEdit = 1; + rowStep = item.getData(); + rowStep.obj_position = index + 1; + item.setData(rowStep); + index = arrayObjectRemovedSteps.indexOf(item.getData().obj_uid); + + if (index > -1) { + arrayDynaformInputDocumentID.push(item.getData().obj_uid); + arrayObjectRemovedSteps.splice(index, 1); + } + }, + onSort: function (grid, item, index) { + flagEdit = 1; + rowStep = item.getData(); + rowStep.obj_position = index + 1; + } + }); + + //principal Container Steps + panelContainerObjects = new PMUI.core.Panel({ + id: "panelContainerObjects", + width: DEFAULT_WINDOW_WIDTH, + height: 250, + fieldset: true, + items: [treePanelObjects, gridPanelObjects], + layout: "hbox", + style: { + cssProperties: { + 'margin-top': '-40px' + } + } + }); + + assigmentWindow.open(); + panelTitleUser.addItem(titleUser); + panelTitleUserList.addItem(titleUserList); + assigmentWindow.body.style.overflowX = "hidden"; + + panelGridUser.addItem(gridUsers); + panelGridUserList.addItem(gridUserList); + + assigmentPanelGlobal.addItem(assigmentPanelUser); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + assigmentWindow.addItem(assigmentPanelGlobal); + + assigmentWindow.addItem(panelObjects); + assigmentWindow.addItem(panelContainerObjects); + getValuesAssignmentSteps(); + + gridPanelObjects.style.addProperties({overflow: 'auto'}); + gridPanelObjects.style.addProperties({float: 'right'}); + gridPanelObjects.setWidth(630); + gridPanelObjects.setHeight(250); + $('#gridPanelObjects').css("margin-right", "32px"); + $('#treePanelObjects').css("margin-left", "10px"); + + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelSearchUser); + assigmentPanelUser.addItem(radioUsers); + assigmentPanelUser.addItem(panelGridUser); + + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelSearchUserList); + assigmentPanelUserList.addItem(radioUsersList); + assigmentPanelUserList.addItem(panelGridUserList); + gridUsers.dom.tableContainer.style.height = "245px"; + gridUserList.dom.tableContainer.style.height = "245px"; + gridUsers.goToPage(0); + gridUserList.goToPage(0); + assigmentWindow.defineEvents(); + applyStyles(); + treePanelObjects.style.addProperties({overflow: 'auto'}); + + applyStylesForToolbar(); + usersgrid = gridUsers; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectUsers2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserList; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectUserList2[i] = userslist.getItems()[i]; + } + gridpanelobj = gridPanelObjects; + for (i = 0; i < gridpanelobj.getItems().length; i += 1) { + arrayDynaformInputDocumentID[i] = gridpanelobj.getItems()[i].getData().obj_uid; + arrayDynaformInputDocumentObject[i] = gridpanelobj.getItems()[i].getData(); + } + }; +}()); +( + function () { + PMDesigner.propertiesProcess = function () { + var responseProperties = null, + getValuesProperties, + isDirtyFormProcess, + saveProperties, + propertiesWindow, + processUID, + textTitle, + textDescription, + processOwner, + dropCalendar, + dropProcessCat, + dropDynaform, + dropRouting, + checkDebug, + checkHideCase, + checkSubProcess, + dropCaseCreated, + dropCaseDeleted, + dropCaseCancelled, + dropCasePaused, + dropCaseUnpaused, + dropCaseReassigned, + dropCaseOpen, + dropTypeProcess, + proCost, + loadProperties, + proUnitCost, + formEditProcess, + loadDynaforms, + loadCalendar, + loadTemplate, + loadTriggers, + loadTypeProcess, + loadCategory, + notification, + notificationText = "Fields marked with an asterisk (%%ASTERISK%%) are required.".translate() + .replace(/%%ASTERISK%%/g, '*'), + clickedClose; + + getValuesProperties = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "project/" + PMDesigner.project.id + "/dynaforms", + "method": 'GET' + }, + { + "url": "calendars", + "method": 'GET' + }, + { + "url": "project/categories", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/file-manager?path=templates", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/triggers", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/process", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadDynaforms(response[0].response); + loadCalendar(response[1].response); + loadCategory(response[2].response); + loadTemplate(response[3].response); + loadTriggers(response[4].response); + loadTypeProcess(response[5].response); + loadProperties(response[5].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + isDirtyFormProcess = function () { + var message_window + if (formEditProcess.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Edit process".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + propertiesWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + propertiesWindow.close(); + } + }; + saveProperties = function (data) { + var restClient = new PMRestClient({ + typeRequest: 'update', + data: data, + messageSuccess: "Properties saved successfully".translate(), + functionSuccess: function (xhr, response) { + propertiesWindow.close(); + + PMDesigner.project.setProjectName(data.pro_title); + PMDesigner.project.setDescription(data.pro_description); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + PMDesigner.project.dirty = false; + } + }); + restClient.setEndpoint("process"); + restClient.executeRestClient(); + }; + + propertiesWindow = new PMUI.ui.Window({ + id: "propertiesProcessWindow", + title: "Edit process".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: "auto", + modal: true, + buttonPanelPosition: "bottom", + footerAlign: "right", + onBeforeClose: function () { + clickClose = true; + isDirtyFormProcess(); + }, + buttons: [ + { + id: 'outputWindowDocButtonCancel', + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + clickedClose = false; + isDirtyFormProcess(); + } + }, + { + id: 'outputWindowDocButtonSave', + text: "Save".translate(), + buttonType: "success", + handler: function () { + var dataForm; + if (formEditProcess.isValid() && processOwner.isValid()) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + dataForm = getData2PMUI(formEditProcess.html); + } else { + dataForm = formEditProcess.getData(); + dataForm.pro_process_owner = processOwner.get("value"); + } + dataForm.pro_debug = checkDebug.controls[0].selected ? 1 : 0; + dataForm.pro_show_message = checkHideCase.controls[0].selected ? 1 : 0; + dataForm.pro_subprocess = checkSubProcess.controls[0].selected ? 1 : 0; + functionAssignmentUsers = function (xhr, response) { + }; + saveProperties(dataForm); + } else { + if (!(processOwner.isValid()) && formEditProcess.isValid()) { + formEditProcess.addItem(notification); + } else { + formEditProcess.removeItem(notification); + } + } + } + } + ] + }); + + processUID = new PMUI.field.TextField({ + label: "UID".translate(), + id: "process_uid", + name: "pro_uid", + labelWidth: "35%", + controlsWidth: "300px" + }); + + textTitle = new PMUI.field.TextField({ + label: "Title".translate(), + id: 'textTitle', + name: 'pro_title', + labelWidth: "35%", + placeholder: 'a text here'.translate(), + controlsWidth: "300px", + required: true + }); + + textDescription = new PMUI.field.TextAreaField({ + id: 'textDescription', + name: 'pro_description', + label: "Description".translate(), + labelWidth: "35%", + controlsWidth: "500px", + rows: 150, + style: {cssClasses: ['mafe-textarea-resize']} + }); + + processOwner = new SuggestField({ + id: 'processOwner', + name: 'pro_owner', + label: "Process Owner".translate(), + required: true, + width: 500, + placeholder: "suggest users".translate(), + separatingText: ["Users".translate()], + dynamicLoad: { + data: [ + { + key: "usr_uid", + label: ["usr_firstname", "usr_lastname", "(", "usr_username", ")"] + } + ], + keys: { + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endpoints: [ + { + method: "GET", + url: 'users' + } + ] + } + } + }); + + dropCalendar = new PMUI.field.DropDownListField({ + id: "dropCalendar", + name: "pro_calendar", + labelWidth: "35%", + label: "Calendar".translate(), + controlsWidth: "300px", + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropProcessCat = new PMUI.field.DropDownListField({ + id: "dropProcessCat", + name: "pro_category", + controlsWidth: "300px", + labelWidth: "35%", + label: "Process Category".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropDynaform = new PMUI.field.DropDownListField({ + id: "dropDynaform", + name: "pro_summary_dynaform", + controlsWidth: "300px", + labelWidth: "35%", + label: "Dynaform to show a case summary".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropRouting = new PMUI.field.DropDownListField({ + id: "dropRouting", + name: "pro_derivation_screen_tpl", + controlsWidth: "300px", + labelWidth: "35%", + label: "Routing Screen Template".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + checkDebug = new PMUI.field.CheckBoxGroupField({ + id: 'checkDebug', + labelWidth: "35%", + label: "Debug".translate(), + name: "pro_debug", + value: '1', + controlPositioning: 'vertical', + options: [ + { + id: 'pro_debug', + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + + checkHideCase = new PMUI.field.CheckBoxGroupField({ + id: 'checkHideCase', + labelWidth: "35%", + label: "Hide the case number and the case title in the steps".translate(), + value: '1', + name: "pro_show_message", + controlPositioning: 'vertical', + options: [ + { + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + + checkSubProcess = new PMUI.field.CheckBoxGroupField({ + id: 'checkSubProcess', + labelWidth: "35%", + label: "This a sub-process".translate(), + value: '1', + name: "pro_subprocess", + controlPositioning: 'vertical', + options: [ + { + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + dropCaseCreated = new PMUI.field.DropDownListField({ + id: "dropCaseCreated", + name: "pro_tri_create", + labelWidth: "35%", + label: "Execute a trigger when a case is created".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseDeleted = new PMUI.field.DropDownListField({ + id: "dropCaseDeleted", + name: "pro_tri_deleted", + labelWidth: "35%", + label: "Execute a trigger when a case is deleted".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseCancelled = new PMUI.field.DropDownListField({ + id: "dropCaseCancelled", + name: "pro_tri_canceled", + labelWidth: "35%", + label: "Execute a trigger when a case is cancelled".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCasePaused = new PMUI.field.DropDownListField({ + id: "dropCasePaused", + name: "pro_tri_paused", + labelWidth: "35%", + label: "Execute a trigger when a case is paused".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseUnpaused = new PMUI.field.DropDownListField({ + id: "dropCaseUnpaused", + name: "pro_tri_unpaused", + labelWidth: "35%", + label: "Execute a trigger when a case is unpaused".translate(), + valueType: "string", + controlsWidth: "300px" + }); + + dropCaseReassigned = new PMUI.field.DropDownListField({ + id: "dropCaseReassigned", + name: "pro_tri_reassigned", + labelWidth: "35%", + label: "Execute a trigger when a case is reassigned".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseOpen = new PMUI.field.DropDownListField({ + id: "dropCaseOpen", + name: "pro_tri_open", + label: "Execute a trigger when a case is opened".translate(), + labelWidth: "35%", + valueType: "string", + controlsWidth: "300px", + + onChange: function (newValue, prevValue) { + } + }); + + dropTypeProcess = new PMUI.field.DropDownListField({ + id: "dropTypeProcess", + name: "pro_type_process", + labelWidth: "35%", + label: "Process Design Access: Public / Private (Owner)".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + proCost = new PMUI.field.TextField({ + id: 'proCost', + name: 'pro_cost', + labelWidth: "35%", + value: 0, + placeholder: 'a cost here'.translate(), + label: "Cost".translate(), + valueType: 'integer', + controlsWidth: "300px", + required: window.enterprise === "1" ? true : false, + style: { + cssProperties: { + float: "left" + } + } + }); + + proUnitCost = new PMUI.field.TextField({ + id: 'proUnitCost', + name: 'pro_unit_cost', + labelWidth: "35%", + value: '$', + placeholder: 'a unit cost here'.translate(), + controlsWidth: "300px", + label: "Units".translate(), + valueType: 'string', + required: window.enterprise === "1" ? true : false, + style: { + cssProperties: { + float: "left" + } + } + }); + + notification = new PMUI.field.TextAnnotationField({ + id: "requiredMessage", + name: "Message", + textType: PMUI.field.TextAnnotationField.TEXT_TYPES.HTML, + text: notificationText, + text_Align: "center" + }); + + formEditProcess = new PMUI.form.Form({ + id: 'formEditProcess', + fieldset: true, + title: "Process Information".translate(), + width: DEFAULT_WINDOW_WIDTH - DEFAULT_WINDOW_WIDTH * 0.10, + items: [ + processUID, + textTitle, + textDescription, + dropCalendar, + dropProcessCat, + dropDynaform, + dropRouting, + checkDebug, + checkHideCase, + checkSubProcess, + dropCaseCreated, + dropCaseDeleted, + dropCaseCancelled, + dropCasePaused, + dropCaseUnpaused, + dropCaseReassigned, + dropCaseOpen, + dropTypeProcess, + proCost, + proUnitCost + ] + }); + + //Load Dynaforms + loadDynaforms = function (response) { + var i; + dropDynaform.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropDynaform.addOption({ + label: response[i].dyn_title, + value: response[i].dyn_uid, + select: false + }); + } + }; + + //Load calendar + loadCalendar = function (response) { + var i; + dropCalendar.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropCalendar.addOption({ + label: response[i].cal_name, + value: response[i].cal_uid, + select: false + }); + } + }; + + //Load category + loadCategory = function (response) { + var i; + dropProcessCat.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropProcessCat.addOption({ + label: response[i].cat_name, + value: response[i].cat_uid, + select: false + }); + } + }; + + //Load Templates + loadTemplate = function (response) { + var i; + dropRouting.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + if (response[i].prf_filename != "alert_message.html") { + dropRouting.addOption({ + label: response[i].prf_filename, + value: response[i].prf_filename, + select: false + }); + } + } + }; + + //Load triggers + loadTriggers = function (response) { + var i; + dropCaseCreated.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseDeleted.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseCancelled.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCasePaused.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseUnpaused.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseReassigned.addOption({ + label: "None".translate(), + value: "", + select: false + }); + + dropCaseOpen.addOption({ + label: "None".translate(), + value: "", + select: false + }); + + for (i = 0; i < response.length; i += 1) { + dropCaseCreated.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseDeleted.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseCancelled.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCasePaused.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseUnpaused.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseReassigned.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + + dropCaseOpen.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + } + }; + + // Load type of process + loadTypeProcess = function (response) { + dropTypeProcess.addOption({ + label: "Public".translate(), + value: "PUBLIC", + select: false + }); + dropTypeProcess.addOption({ + label: "Private".translate(), + value: "PRIVATE", + select: false + }); + }; + + // Load properties of process + loadProperties = function (response) { + propertiesWindow.addItem(formEditProcess); + propertiesWindow.open(); + $(processOwner.createHTML()).insertBefore(dropCalendar.html); + processOwner.html.find("input").blur(function () { + if (!(processOwner.isValid())) { + processOwner.showMessageRequiredExtended(); + } else { + processOwner.repaint("1px solid #adafb2", "2px", "", "1px solid white"); + } + }); + processOwner.html.find("input").focusin(function () { + if (processOwner.isValid()) { + processOwner.repaint("1px solid #adafb2", "2px", "#000", "-webkit-focus-ring-color auto 1px"); + } + }); + processOwner.containerLabel.css({ width: "35%" }); + processOwner.repaint("1px solid #adafb2", "2px", "", ""); + formEditProcess.getField("pro_type_process").hideColon(); + formEditProcess.reset(); + responseProperties = response; + processUID.setValue(response.pro_uid); + processUID.setReadOnly(true); + textTitle.setValue(response.pro_title); + textDescription.setValue(response.pro_description); + processOwner.set("value", response.pro_create_user); + processOwner.html.find("input").val(response.pro_create_firstname + " " + response.pro_create_lastname + " " + "(" + response.pro_create_username + ")"); + dropDynaform.setValue(response.pro_summary_dynaform); + dropCaseCancelled.setValue(response.pro_tri_canceled); + dropCaseCreated.setValue(response.pro_tri_create); + dropCaseDeleted.setValue(response.pro_tri_deleted); + dropCasePaused.setValue(response.pro_tri_paused); + dropCaseUnpaused.setValue(response.pro_tri_unpaused); + dropCaseReassigned.setValue(response.pro_tri_reassigned); + dropCaseOpen.setValue(response.pro_tri_open); + dropRouting.setValue(response.pro_derivation_screen_tpl); + dropCalendar.setValue(response.pro_calendar); + dropProcessCat.setValue(response.pro_category); + dropTypeProcess.setValue(response.pro_type_process); + checkHideCase.setHeight(57) + if (response.pro_debug == 1) { + checkDebug.getControls()[0].select(); + } + if (response.pro_show_message == 1) { + checkHideCase.getControls()[0].select(); + } + if (response.pro_subprocess == 1) { + checkSubProcess.getControls()[0].select(); + } + proCost.setValue(response.pro_cost); + if (response.pro_unit_cost != null && response.pro_unit_cost != '') { + proUnitCost.setValue(response.pro_unit_cost); + } + }; + + getValuesProperties(); + + propertiesWindow.showFooter(); + propertiesWindow.defineEvents(); + applyStyleWindowForm(propertiesWindow); + formEditProcess.getField('pro_title').setFocus(); + formEditProcess.getField("pro_type_process").html.style.float = "left"; + + dropCaseCancelled.style.addProperties({"float": "left"}); + dropCasePaused.style.addProperties({"float": "left"}); + dropCaseUnpaused.style.addProperties({"float": "left"}); + dropCaseReassigned.style.addProperties({"float": "left"}); + dropCaseOpen.style.addProperties({"float": "left"}); + + $("#dropCaseCancelled,#dropCasePaused,#dropCaseReassigned,#dropTypeProcess,#dropCaseOpen").find("select:eq(0)").css("z-index", 1); + + if (window.enterprise === "1") { + proCost.setVisible(true); + proUnitCost.setVisible(true); + } else { + proCost.setVisible(false); + proUnitCost.setVisible(false); + } + }; + + }() +); +(function () { + PMDesigner.caseTracker = function () { + var caseTrackerForm, + index, + flagEdit = 0, + caseTrackerWindow, + dataCaseTracker, + dataTree, + conditionform, + conditionWindows, + disableAllItems, + formIsDirty, + conditionformIsDirty, + orderDataTree, + saveItem, + updateItem, + treePanelObjects, + loadGridCaseTacker, + editCondition, + gridPanelObjects, + titleTreeObjects, + getValuesCaseTrackerObjects, + updateCaseTrackerPropertiesAndObjects, + loadPropertiesCaseTracker, + titleGridObjects, + panelLabelObjects, + panelContainerObjects, + panelObjects, + applyStylesWindow, + showObjects, + arrayObjectDropAssignedObjects = new Array(), + arrayObjectAvailableObjects = new Array(), + arrayObjectStepsCaseTracker = new Array(); + + disableAllItems = function () { + caseTrackerWindow.getItems()[0].setVisible(false); + caseTrackerWindow.getItems()[1].setVisible(false); + caseTrackerWindow.hideFooter(); + }; + formIsDirty = function () { + if (caseTrackerForm.isDirty() || flagEdit == 1) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Case Tracker".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + caseTrackerWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + caseTrackerWindow.close(); + } + }; + + conditionformIsDirty = function () { + if (conditionform.isDirty()) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Case Tracker".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + conditionWindows.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + conditionWindows.close(); + } + + }; + orderDataTree = function (data) { + var items = []; + var type = ['DYNAFORM', 'INPUT_DOCUMENT', 'OUTPUT_DOCUMENT', 'EXTERNAL_STEP']; + var label = ['Dynaform', 'Input Document', 'OutPut Document', 'External Step']; + for (var i = 0; i < type.length; i += 1) { + items = []; + for (var j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items + }); + } + } + }; + + //Properties + loadPropertiesCaseTracker = function () { + dataCaseTracker = []; + restClient = new PMRestClient({ + endpoint: 'case-tracker/property', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + dataCaseTracker = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + updateCaseTrackerPropertiesAndObjects = function (data) { + //save steps Objects Case Tracker + var i, j; + index = 0; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + idObject = (typeof gridPanelObjects.getItems()[i].getData().cto_uid_obj != 'undefined') ? gridPanelObjects.getItems()[i].getData().cto_uid_obj : gridPanelObjects.getItems()[i].getData().obj_uid; + index = arrayObjectStepsCaseTracker.indexOf(idObject); + if (index <= -1) { + saveItem(gridPanelObjects.getItems()[i]); + } else { + updateItem(gridPanelObjects.getItems()[i], i); + } + } + ; + for (i = 0; i < arrayObjectAvailableObjects.length; i += 1) { + for (j = 0; j < arrayObjectDropAssignedObjects.length; j += 1) { + index = (arrayObjectAvailableObjects[i] == arrayObjectDropAssignedObjects[j].cto_uid_obj) ? 0 : 1; + if (index == 0) { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'case-tracker/object/' + arrayObjectDropAssignedObjects[j].cto_uid, + "method": 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + break; + } + } + } + + //save Properties Case Tracker + data ['map_type'] = data ['map_type'] == '["1"]' ? "PROCESSMAP" : "NONE"; + data ['routing_history'] = data ['routing_history'] == '["1"]' ? 1 : 0; + data ['message_history'] = data ['message_history'] == '["1"]' ? 1 : 0; + restClient = new PMRestClient({ + endpoint: 'case-tracker/property', + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + caseTrackerWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the Case Tracker, please try again.".translate(), + messageSuccess: 'Case Tracker updated successfully'.translate(), + flashContainer: document.body + }); + restClient.executeRestClient(); + }; + + caseTrackerForm = new PMUI.form.Form({ + id: 'caseTrackerForm', + fieldset: true, + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + height: 30, + layout: "hbox", + items: [ + { + pmType: "annotation", + text: "Display :".translate(), + id: "DisplayMessage", + name: "DisplayMessage" + }, + { + id: 'map_type', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + label: 'Processmap'.translate(), + value: '1' + } + ] + }, + { + id: 'routing_history', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + label: 'Routing History'.translate(), + value: '1' + } + ] + }, + { + id: 'message_history', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + id: 'message_history', + label: 'Messages'.translate(), + value: '1' + } + ] + } + ], + style: { + cssProperties: { + 'margin-bottom': '70px' + } + } + }); + + //objects + loadGridCaseTacker = function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + switch (data[i]['cto_type_obj']) { + case 'DYNAFORM': + label = 'Dynaform'.translate(); + break; + case 'INPUT_DOCUMENT': + label = 'Input Document'.translate(); + break; + case 'OUTPUT_DOCUMENT': + label = 'OutPut Document'.translate(); + break; + case 'EXTERNAL_STEP': + label = 'External Step'.translate(); + break; + default: + label = data[i]['tri_type']; + break; + } + data[i]['obj_label'] = label; + } + gridPanelObjects.setDataItems(data); + }; + + getValuesCaseTrackerObjects = function () { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "case-tracker/available-objects", + "method": 'GET' + }, + { + "url": "case-tracker/objects", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataTree = []; + orderDataTree(response[0].response); + treePanelObjects.setDataItems(dataTree); + loadGridCaseTacker(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + saveItem = function (rowStep) { + rowStep = rowStep.getData(); + data = { + "cto_type_obj": rowStep.obj_type, + "cto_uid_obj": rowStep.obj_uid, + "cto_condition": (typeof rowStep.cto_condition != 'undefined') ? rowStep.cto_condition : '', + "cto_position": rowStep.cto_position + }; + restClient = new PMRestClient({ + endpoint: 'case-tracker/object', + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + data = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems saved, please try again.".translate() + }); + restClient.executeRestClient(); + return data; + }; + + updateItem = function (rowStep, i) { + rowStep = rowStep.getData(); + rowStep.cto_position = i + 1; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'case-tracker/object/' + rowStep.cto_uid, + "method": 'PUT', + "data": rowStep + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + treePanelObjects = new PMUI.panel.TreePanel({ + id: 'treePanelObjects', + proportion: 0.5, + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + style: {cssClasses: ['itemsSteps']}, + nodeDefaultSettings: { + behavior: "drag", + labelDataBind: 'obj_title', + itemsDataBind: 'items', + collapsed: false, + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + autoBind: true + } + }); + + editCondition = function () { + var visible, dataEdit; + + conditionform = new PMUI.form.Form({ + id: 'conditionform', + title: "", + fieldset: true, + visibleHeader: false, + width: 500, + items: [ + new CriteriaField({ + id: 'cto_condition', + pmType: 'textarea', + name: 'cto_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 200, + width: 250, + controlsWidth: 285, + renderType: 'textarea' + }) + ] + }); + + if (rowStep != '' && rowStep != undefined) { + dataEdit = conditionform.getFields(); + dataEdit[0].setValue(rowStep['cto_condition']); + } + + conditionWindows = new PMUI.ui.Window({ + id: 'conditionWindows', + title: 'Condition'.translate(), + width: 500, + height: 'auto', + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + buttonPanelPosition: 'bottom', + footerAlign: "right", + onBeforeClose: conditionformIsDirty, + buttons: [ + { + id: 'conditionObjectWindowButtonClose', + text: "Cancel".translate(), + handler: conditionformIsDirty, + buttonType: 'error' + }, + { + id: 'conditionObjectWindowButtonSave', + text: "Save".translate(), + handler: function () { + var i, item; + if (conditionform.isValid()) { + idrowStep = (typeof rowStep.cto_uid_obj != 'undefined') ? rowStep.cto_uid_obj : rowStep.obj_uid; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + item = gridPanelObjects.getItems()[i].getData(); + idObj = (typeof item.cto_uid_obj != 'undefined') ? item.cto_uid_obj : item.obj_uid; + if (idObj == idrowStep) { + rowStep.cto_condition = conditionform.getData()['cto_condition']; + gridPanelObjects.getItems()[i].setData(rowStep); + break; + } + } + conditionWindows.close(); + } + }, + buttonType: 'success' + } + ] + }); + conditionWindows.addItem(conditionform); + conditionWindows.open(); + conditionWindows.showFooter(); + applyStyleWindowForm(conditionWindows); + conditionWindows.defineEvents(); + conditionWindows.footer.html.style.textAlign = 'right'; + conditionform.setFocus(); + style = $('#cto_condition .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#cto_condition .pmui-field-label').attr("style", style); + }; + + gridPanelObjects = new PMUI.grid.GridPanel({ + id: 'gridPanelObjects', + proportion: 1.5, + visibleFooter: false, + filterable: false, + width: '640px', + style: {cssClasses: ['itemsSteps']}, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + behavior: 'dragdropsort', + columns: [ + { + title: 'Title'.translate(), + dataType: 'string', + width: 330, + alignment: "left", + columnData: "obj_title", + sortable: false, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: 120, + alignment: "left", + columnData: "obj_label", + sortable: false, + alignmentCell: 'left' + }, + { + id: 'gridPanelObjectsButtonProperties', + title: '', + dataType: 'button', + buttonLabel: "Condition".translate(), + iconPosition: "center", + buttonStyle: {cssClasses: ['mafe-button-editstep']}, + buttonTooltip: 'Edit Properties'.translate(), + onButtonClick: function (row, grid) { + rowStep = row.getData(); + editCondition(); + } + }, + { + id: 'gridPanelObjectsButtonDelete', + title: '', + dataType: 'button', + buttonLabel: '', + buttonStyle: {cssClasses: ['mafe-button-delete-assign']}, + buttonTooltip: 'Remove Object'.translate(), + onButtonClick: function (row, grid) { + flagEdit = 1; + rowStep = row.getData(); + index = (row.getData().cto_uid_obj != 'undefined') ? arrayObjectStepsCaseTracker.indexOf(row.getData().cto_uid_obj) : arrayObjectStepsCaseTracker.indexOf(row.getData().obj_uid); + if (index > -1) { + arrayObjectAvailableObjects.push(row.getData().cto_uid_obj); + arrayObjectStepsCaseTracker.splice(index, 1); + } + objType = (typeof row.getData().cto_type_obj != 'undefined') ? row.getData().cto_type_obj : row.getData().obj_type; + grid.removeItem(row); + switch (objType) { + case 'DYNAFORM': + treePanelObjects.getItems()[0].addItem(row); + break; + case 'INPUT_DOCUMENT': + treePanelObjects.getItems()[1].addItem(row); + break; + case 'OUTPUT_DOCUMENT': + treePanelObjects.getItems()[2].addItem(row); + break; + case 'EXTERNAL_STEP': + treePanelObjects.getItems()[3].addItem(row); + break; + default: + break; + } + } + } + ], + onDrop: function (grid, item, index) { + flagEdit = 1; + if (item.data.customKeys.obj_uid === '') { + return false; + } + rowStep = item.getData(); + rowStep.cto_position = index + 1; + item.setData(rowStep); + + index = (typeof item.getData().cto_uid_obj != 'undefined') ? arrayObjectAvailableObjects.indexOf(item.getData().cto_uid_obj) : arrayObjectAvailableObjects.indexOf(item.getData().obj_uid); + + if (index > -1) { + itemPush = (typeof item.getData().cto_uid_obj != 'undefined') ? item.getData().cto_uid_obj : item.getData().obj_uid; + arrayObjectStepsCaseTracker.push(itemPush); + arrayObjectAvailableObjects.splice(index, 1); + } + }, + onSort: function (grid, item, index) { + rowStep = item.getData(); + } + }); + + titleTreeObjects = new PMUI.ui.TextLabel({ + id: "titleTreeObjects", + textMode: 'plain', + text: 'Available Objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-steps-tree' + ] + } + }); + + titleGridObjects = new PMUI.ui.TextLabel({ + id: "titleGridObjects", + textMode: 'plain', + text: 'Assigned objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-stesp-grid' + ] + } + }); + + panelLabelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + fieldset: true, + items: [ + titleTreeObjects, + titleGridObjects + ], + style: { + cssProperties: { + 'margin-bottom': 4, + 'margin-top': 4, + 'margin-left': 4 + } + }, + layout: "hbox" + }); + + panelContainerObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: 320, + fieldset: true, + items: [ + treePanelObjects, + gridPanelObjects + ], + layout: "hbox" + }); + + panelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: DEFAULT_WINDOW_HEIGHT * 0.70, + fieldset: true, + items: [ + panelLabelObjects, + panelContainerObjects + ], + layout: "vbox" + }); + + caseTrackerWindow = new PMUI.ui.Window({ + id: 'caseTrackerWindow', + title: "Case Tracker".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + buttonPanelPosition: "bottom", + onBeforeClose: formIsDirty, + visibleFooter: false, + footerAling: "right", + footerItems: [{ + id: 'btnCloseCaseTracker', + text: 'Cancel'.translate(), + buttonType: "error", + handler: formIsDirty + }, + { + id: 'btnSaveCaseTracker', + text: "Save".translate(), + buttonType: "success", + handler: function () { + if (caseTrackerForm.isValid()) { + data = caseTrackerForm.getData(); + updateCaseTrackerPropertiesAndObjects(data); + } + } + } + ], + spaceButtons: 30 + }); + + caseTrackerWindow.addItem(caseTrackerForm); + caseTrackerWindow.addItem(panelObjects); + caseTrackerWindow.open(); + caseTrackerWindow.showFooter(); + applyStyleWindowForm(caseTrackerWindow); + caseTrackerWindow.defineEvents(); + caseTrackerWindow.footer.html.style.textAlign = 'right'; + caseTrackerForm.setFocus(); + + applyStylesWindow = function () { + $('#gridPanelObjects .pmui-gridpanel-tableContainer').css({'height': 'auto'}); + $('#caseTrackerForm :eq(2)').css({'padding': '0px 10px 0px 10px'}); + $('#caseTrackerForm :eq(0)').remove(); + items = caseTrackerWindow.getItems()[0].getItems(); + $(items[1].getHTML()).find('table').css('border', 'none'); + $(items[2].getHTML()).find('table').css('border', 'none'); + $(items[3].getHTML()).find('table').css('border', 'none'); + }; + + showObjects = function () { + disableAllItems(); + + loadPropertiesCaseTracker(); + caseTrackerWindow.getItems()[0].setVisible(true); + caseTrackerWindow.showFooter(); + caseTrackerWindow.setTitle("Case Tracker Properties".translate()); + + if (dataCaseTracker != '') { + var dataEdit = caseTrackerForm.getFields(); + dataEdit[1].setValue((dataCaseTracker['map_type'] == 'PROCESSMAP') ? '["1"]' : '[]'); + dataEdit[2].setValue((dataCaseTracker['routing_history'] == 1) ? '["1"]' : '[]'); + dataEdit[3].setValue((dataCaseTracker['message_history'] == 1) ? '["1"]' : '[]'); + } + + + getValuesCaseTrackerObjects(); + caseTrackerWindow.getItems()[1].setVisible(true); + caseTrackerWindow.setTitle("Case Tracker".translate()); + + caseTrackerWindow.body.style.overflow = 'initial'; + + gridPanelObjects.style.addProperties({overflow: 'auto'}); + gridPanelObjects.style.addProperties({float: 'right'}); + gridPanelObjects.setWidth(640); + gridPanelObjects.setHeight(270); + applyStylesWindow(); + treePanelObjects.style.addProperties({float: 'left'}); + treePanelObjects.style.addProperties({overflow: 'auto'}); + treePanelObjects.setWidth(200); + treePanelObjects.setHeight(270); + + applyStyleTreePanel(treePanelObjects); + + panelLabelObjects.setHeight(15); + caseTrackerWindow.defineEvents(); + + caseTrackerWindow.setBodyPadding(5); + + panelObjects.style.addProperties({marginLeft: '15px'}); + for (var i = 0; i < gridPanelObjects.getItems().length; i += 1) { + arrayObjectStepsCaseTracker[i] = gridPanelObjects.getItems()[i].getData().cto_uid_obj; + arrayObjectDropAssignedObjects[i] = gridPanelObjects.getItems()[i].getData(); + } + }; + showObjects(); + }; + + PMDesigner.caseTracker.showObjects = function () { + PMDesigner.caseTracker(); + }; + +}()); +PMDesigner.gatewayProperties = function (gateway) { + if (gateway.getGatewayType() !== "PARALLEL") { + PMDesigner.RoutingRule(gateway); + } +}; + +PMDesigner.RoutingRule = function (shape) { + var formRoutingRule, + formPanelSelected, + arrayShapeIdRemoved = [], + buttonAdd, + windowConnections, + warningMessageWindowDelete, + warningMessageWindowDirty, + containerLabels, + deleteButton, + buttonSave, + buttonCancel, + labelNextTask, + labelCondition, + typeShapeValueText, + dataRouteGroup = [], + arrayElementName = [], + availableShapes = []; + + warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDelete', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + message: 'Do you want to delete this routing rule?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, + { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteRow(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + warningMessageWindowDirty = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDirty', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDirtyButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDirtyButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + windowConnections.close(); + }, + buttonType: "success" + } + ] + }); + + buttonAdd = new PMUI.ui.Button({ + id: 'routingRuleButtonAdd', + text: 'Add Routing Rule'.translate(), + style: { + cssProperties: { + marginLeft: '50px', + marginTop: '10px', + marginBottom: '10px', + padding: "5px" + } + }, + buttonType: 'success', + handler: function () { + // to add a new row + addRow(); + enableSorting(); + } + }); + buttonSave = new PMUI.ui.Button({ + id: 'windowConnectionsButtonSave', + text: 'Save'.translate(), + handler: function () { + //validate routing rules form + if (isValidRoutingRules()) { + //remove all flows an get points + var allPoints = removeConnectionsIntoCanvas(); + saveConnections(allPoints); + } + + }, + buttonType: 'success' + }); + buttonCancel = new PMUI.ui.Button({ + id: 'windowConnectionsButtonCancel', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + if (formRoutingRule.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowConnections.close(); + } + } + }); + + labelNextTask = new PMUI.ui.TextLabel({ + text: 'Next Task'.translate() + }); + labelNextTask.setWidth(382); + labelNextTask.style.addProperties({padding: '5px 0px 0px 50px'}); + + labelCondition = new PMUI.ui.TextLabel({ + text: 'Condition'.translate() + }); + labelCondition.setWidth(410); + labelCondition.style.addProperties({padding: '5px 0px 0px 5px'}); + labelCondition.style.addProperties({marginLeft: '31%'}); + + containerLabels = new PMUI.core.Panel({ + layout: 'hbox', + width: 'auto', + height: 29, + style: { + cssProperties: { + 'border-bottom': '1px solid #c0c0c0' + } + } + }); + containerLabels.addItem(labelNextTask); + containerLabels.addItem(labelCondition); + containerLabels.style.addProperties({'border-bottom': '1px solid #e7e7e7'}); + + formRoutingRule = new PMUI.form.Form({ + id: 'formRoutingRule', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + height: 'auto', + items: [], + style: { + cssProperties: { + 'margin-left': '35px' + } + } + }); + formRoutingRule.hideFooter(); + + windowConnections = new PMUI.ui.Window({ + id: 'windowConnections', + title: 'Routing Rule'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + buttonPanelPosition: 'bottom', + items: [ + buttonAdd + ], + buttons: [ + buttonCancel, + buttonSave + ] + }); + + typeShapeValueText = (shape.gat_type === 'EXCLUSIVE') ? 'EXCLUSIVE'.translate() : 'INCLUSIVE'.translate(); + windowConnections.setTitle('Routing Rule'.translate() + ' - ' + typeShapeValueText); + windowConnections.showFooter(); + windowConnections.addItem(containerLabels); + if (formRoutingRule.dirty === null) { + formRoutingRule.dirty = false; + } + windowConnections.addItem(formRoutingRule); + windowConnections.open(); + + loadConnections(); + enableSorting(); + /** + * add a new row + * @returns {PMUI.form.FormPanel|*} + */ + function addRow() { + var dropDownControl, + criteriaField, + deleteButton, + newRow, + max, + i; + newRow = new PMUI.form.FormPanel({ + layout: 'hbox' + }); + + dropDownControl = new PMUI.field.DropDownListField({ + id: 'dropdownNextTask', + name: 'act_name', + valueType: 'string', + label: 'Next Task'.translate(), + labelPosition: 'top', + labelVisible: false, + value: '', + readOnly: false, + controlsWidth: 360, + proportion: 0.9, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + criteriaField = new CriteriaField({ + id: 'textCondition', + pmType: 'text', + renderType: 'textarea', + name: 'flo_condition', + valueType: 'string', + label: 'Condition'.translate(), + labelPosition: 'top', + labelVisible: false, + controlsWidth: 345, + required: false, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + deleteButton = new PMUI.field.ButtonField({ + id: 'buttonDelete', + value: 'Delete'.translate(), + handler: function (e, a) { + formPanelSelected = this.getParent(); + warningMessageWindowDelete.open(); + warningMessageWindowDelete.dom.titleContainer.style.height = '17px'; + warningMessageWindowDelete.showFooter(); + enableSorting(); + }, + name: 'delete', + labelVisible: false, + buttonAling: 'left', + controlsWidth: 60, + proportion: 0.1, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + newRow.addItem(dropDownControl); + newRow.addItem(criteriaField); + newRow.addItem(deleteButton); + loadOptions(dropDownControl); + //apply styles; + if (availableShapes && availableShapes.length > 0) { + deleteButton.controls[0].button.setButtonType('error'); + $(deleteButton.getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(newRow); + for (i = 0, max = formRoutingRule.getItems().length; i < max; i += 1) { + formRoutingRule.getItems()[i].style.addProperties({'padding': 'initial'}); + } + dropDownControl.dom.labelTextContainer.style.display = 'none'; + criteriaField.dom.labelTextContainer.style.display = 'none'; + criteriaField.setValue(true); + } else { + PMDesigner.msgFlash('There are no items.'.translate(), windowConnections.footer, 'error'); + } + return newRow; + } + + function loadOptions(dropdown) { + var i, + customShapes, + element, + nameGroup, + evnLabelMap; + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + dropdown.clearOptions(); + dropdown.setUID = function (uid) { + this.uid = uid; + }; + dropdown.getUID = function () { + return this.uid; + }; + dropdown.addOptionGroup({ + label: 'Task'.translate(), + selected: true, + options: [] + }); + dropdown.addOptionGroup({ + label: 'Sub-process'.translate(), + options: [] + }); + dropdown.addOptionGroup({ + label: 'Event'.translate(), + options: [] + }); + dropdown.addOptionGroup({ + label: 'Gateway'.translate(), + options: [] + }); + customShapes = PMUI.getActiveCanvas().getCustomShapes(); + + for (i = 0; i < customShapes.getSize(); i += 1) { + element = customShapes.get(i); + // verify pool and participant + if (element.getType() !== 'PMParticipant' && element.getType() !== 'PMPool') { + //itself verify and same parent + if (shape.getID() !== element.getID() + && element.businessObject + && shape.businessObject + && shape.businessObject.elem.$parent + && element.businessObject.elem.$parent + && element.businessObject.elem.$parent.id === shape.businessObject.elem.$parent.id) { + switch (element.type) { + case 'PMActivity': + nameGroup = element.act_type === 'TASK' ? 'Task'.translate() : 'Sub-process'.translate(); + dropdown.addOption({ + value: element.act_uid, + label: element.act_name + }, nameGroup); + arrayElementName[element.act_uid] = element.act_name; + availableShapes.push(element); + break; + case 'PMEvent': + evnLabelMap = { + 'END': 'End Event'.translate(), + 'INTERMEDIATE': 'Intermediate Event'.translate() + }; + + if (element.evn_type !== 'START') { + dropdown.addOption({ + value: element.evn_uid, + label: element.evn_name || evnLabelMap[element.evn_type] + }, 'Event'.translate()); + + arrayElementName[element.evn_uid] = element.evn_name || evnLabelMap[element.evn_type]; + availableShapes.push(element); + } + break; + case 'PMGateway': + dropdown.addOption({ + value: element.gat_uid, + label: element.gat_name || 'Gateway'.translate() + }, 'Gateway'); + arrayElementName[element.gat_uid] = element.gat_name || 'Gateway'.translate(); + availableShapes.push(element); + break; + } + } + } + } + } + + function removeConnectionsIntoCanvas() { + var shapeDest, connection, dt, allPoints = {}, i, j; + for (j = 0; j < arrayShapeIdRemoved.length; j += 1) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', arrayShapeIdRemoved[j]); + dt = shape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() === connection.getSrcPort().getParent().getID() && + shapeDest.getID() === connection.getDestPort().getParent().getID()) { + //caching points + allPoints[shapeDest.getID()] = getPoints(connection); + removeConnection(connection); + + break; + } + } + } + arrayShapeIdRemoved = []; + return allPoints; + } + + /** + * to remove a individual connection and getting points + * @param connection + */ + function removeConnection(connection) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().setCurrentConnection(connection); + PMUI.getActiveCanvas().executeCommandDelete(); + connection.saveAndDestroy(); + PMUI.getActiveCanvas().removeConnection(connection); + } + + /** + * gets conenctions inital and final points + * @param connection + */ + function getPoints(connection) { + var result = []; + result[0] = connection.points[0]; + result[1] = connection.points[connection.points.length - 1]; + return result; + } + + + function editAllConnections(connArray) { + var i, + elem, + canvas = PMUI.getActiveCanvas(); + for(i = 0; i < connArray.length; i += 1) { + elem = connArray[i]; + if (elem && elem.connection) { + elem.oldShapeDest.removePort(elem.connection.destPort); + elem.shapeDest.addPort(elem.connection.destPort, 100, 100, + false, elem.connection.srcPort); + + elem.connection.lineSegments.clear(); + canvas.commandStack.add(new PMUI.command.CommandConnect(elem.connection)); + elem.connection.connect(); + canvas.triggerPortChangeEvent(elem.connection.destPort); + } + } + } + + + function createEndShape() { + var customShape, canvas = PMUI.getActiveCanvas(), command, x, y; + customShape = canvas.shapeFactory('END'); + + x = shape.getX() + shape.getWidth(); + y = shape.getY() + shape.getHeight() + 20; + + canvas.addElement(customShape, x, y, + customShape.topLeftOnCreation); + + //since it is a new element in the designer, we triggered the + //custom on create element event + canvas.updatedElement = customShape; + + // create the command for this new shape + command = new PMUI.command.CommandCreate(customShape); + canvas.commandStack.add(command); + command.execute(); + return customShape; + } + + /** + * new method to validate routing rules + * @returns {boolean} + */ + function isValidRoutingRules() { + var result = true, + arrayAux = [], + i, + max, + id, + dt = formRoutingRule.getItems(); + if (!formRoutingRule.isValid()) { + result = false; + return; + } + + for (i = 0, max = dt.length; i < max; i += 1) { + id = dt[i].getField("act_name").getValue(); + if (typeof(arrayAux[id]) === "undefined") { + arrayAux[id] = "1"; + } else { + result = false; + PMDesigner.msgWinError("The routing rule to \"{0}\" already exists".translate([arrayElementName[id]])); + return; + } + } + return result; + } + + function saveConnections(allPoints) { + var dt = formRoutingRule.getItems(), + id, + i, + oldId, + shapeDest, + oldShapeDest, + connection, + newConnection, + dataRouteAll, + dataRoute, + restClient, + newPoints, + conectionsArray = []; + + + for (i = 0; i < dt.length; i += 1) { + id = dt[i].getField('act_name').getValue(); + oldId = dt[i].getField('act_name').getUID(); + if (id !== '0') { + dataRouteGroup.push(id); + if (dt[i].getField('flo_condition').getValue() == "") { + dt[i].getField('flo_condition').setValue(true); + } + if (oldId === undefined) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + //getting current connection + + newPoints = allPoints[id]; + + newConnection = createConnection(shape, shapeDest, newPoints); + newConnection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + } + if (oldId !== undefined && id === oldId) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + connection = isConnection(shape, shapeDest); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + } + if (oldId !== undefined && id !== oldId) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + oldShapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', oldId); + connection = isConnection(shape, oldShapeDest); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + + conectionsArray.push({ + "connection" : isConnection(shape, oldShapeDest) || null, + "shapeDest": shapeDest, + "oldShapeDest": oldShapeDest + }); + } + } else { + var customShape = createEndShape(); + createConnection(shape, customShape); + } + } + editAllConnections(conectionsArray); + + /*update routing order*/ + dataRouteAll = []; + for (i = 0; i < dataRouteGroup.length; i += 1) { + dataRoute = { + 'rou_case': parseInt(i) + 1, + 'rou_next_task': dataRouteGroup[i], + 'pro_uid': PMDesigner.project.id + }; + dataRouteAll.push(dataRoute); + } + restClient = new PMRestClient({ + endpoint: 'update-route-order', + typeRequest: 'update', + data: dataRouteAll, + functionSuccess: function () { + PMDesigner.msgFlash('Saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the routing rule, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + /*end update routing order*/ + + windowConnections.close(); + PMDesigner.msgFlash('Saved correctly'.translate(), document.body); + PMDesigner.project.dirty = true; + PMDesigner.project.setDirty(true); + } + + function createConnection(sourceShape, shape, points) { + var sourcePort, endPort, connection, canvas = PMUI.getActiveCanvas(), points; + sourcePort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + endPort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + if (!points) { + points = findBestPorts(sourceShape, shape); + } + sourceShape.addPort(sourcePort, points[0].x - sourceShape.getZoomX(), points[0].y - sourceShape.getZoomY()); + shape.addPort(endPort, points[1].x - shape.getZoomX(), points[1].y - shape.getZoomY(), false, sourcePort); + + //add ports to the canvas array for regularShapes + //shape.canvas.regularShapes.insert(sourcePort).insert(endPort); + //create the connection + connection = new PMFlow({ + srcPort: sourcePort, + destPort: endPort, + segmentColor: new PMUI.util.Color(0, 0, 0), + name: '', + canvas: shape.canvas, + segmentStyle: shape.connectionType.segmentStyle, + flo_type: shape.connectionType.type + }); + connection.setSrcDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.srcDecorator !== 'undefined' + && shape.connectionType.srcDecorator !== null) ? + shape.connectionType.srcDecorator : 'mafe-sequence', + decoratorType: 'source', + parent: connection + })); + connection.setDestDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.destDecorator !== 'undefined' + && shape.connectionType.destDecorator !== null) ? + shape.connectionType.destDecorator : 'mafe-sequence', + decoratorType: 'target', + parent: connection + })); + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + + //connect the two ports + connection.connect(); + connection.setSegmentMoveHandlers(); + + //add the connection to the canvas, that means insert its html to + // the DOM and adding it to the connections array + canvas.addConnection(connection); + + // Filling PMFlow fields + connection.setTargetShape(endPort.parent); + connection.setOriginShape(sourcePort.parent); + connection.savePoints(); + + // now that the connection was drawn try to create the intersections + connection.checkAndCreateIntersectionsWithAll(); + + //attaching port listeners + sourcePort.attachListeners(sourcePort); + endPort.attachListeners(endPort); + + // finally trigger createEvent + canvas.triggerCreateEvent(connection, []); + connection.flo_state = connection.points; + return connection; + } + + function findBestPorts(sourceShape, shape) { + var result = [], i, j, + distance = 99999999, + initPoint, + secondPoint, + midPoints = getMiddlePoints(sourceShape), + midPoints2 = getMiddlePoints(shape); + for (i = 0; i < midPoints.length; i += 1) { + initPoint = midPoints[i]; + for (j = 0; j < midPoints2.length; j += 1) { + secondPoint = midPoints2[j]; + if (distance > initPoint.getManhattanDistance(secondPoint)) { + distance = initPoint.getManhattanDistance(midPoints2[j]); + result[0] = (initPoint); + result[1] = (midPoints2[j]); + } + } + } + return result; + } + + function getMiddlePoints(shape) { + return [ + new PMUI.util.Point(Math.round(shape.zoomWidth / 2) + shape.getZoomX(), 0 + shape.getZoomY()), // TOP + new PMUI.util.Point(shape.zoomWidth + shape.getZoomX(), Math.round(shape.zoomHeight / 2) + shape.getZoomY()), // RIGHT + new PMUI.util.Point(Math.round(shape.zoomWidth / 2) + shape.getZoomX(), shape.zoomHeight + shape.getZoomY()), // BOTTOM + new PMUI.util.Point(0 + shape.getZoomX(), Math.round(shape.zoomHeight / 2) + shape.getZoomY()) // LEFT + ]; + } + + function loadConnections() { + var row, connection, dt = shape.getPorts().asArray(), + i, j; + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID() && shape.gat_default_flow !== connection.flo_uid) { + row = addRow(); + row.getField('act_name').setValue(connection.getDestPort().getParent().getID()); + row.getField('act_name').setUID(connection.getDestPort().getParent().getID()); + row.getField('flo_condition').setValue(connection.getFlowCondition()); + + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + $(row.getItems()[2].getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = 'none'; + row.getItems()[1].dom.labelTextContainer.style.display = 'none'; + } + } + } + + function isConnection(sourceShape, shape) { + var connection, + i, + dt = sourceShape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (sourceShape.getID() === connection.getSrcPort().getParent().getID() && + shape.getID() === connection.getDestPort().getParent().getID()) { + return connection; + } + } + return false; + } + + function deleteRow() { + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + PMDesigner.msgFlash('Routing rule removed correctly'.translate(), windowConnections.footer); + } + + function enableSorting() { + var index = 0, + div = $(formRoutingRule.getHTML()).find(">div:nth-child(2)").css({"overflow": "initial"}); + div.sortable({ + items: '>div', + placeholder: 'steps-placeholder', + cursor: "move", + change: function (event, ui) { + index = ui.placeholder.index(); + }, + start: function (event, ui) { + }, + stop: function (event, ui) { + var dt = [], + row, + formPanelSelected, + id, + i, + j, + shapeDest, + connection; + + ui.item.parent().find(">div").each(function (i, e) { + dt.push(PMUI.getPMUIObject(e)); + }); + for (i = 0; i < dt.length; i += 1) { + formPanelSelected = dt[i]; + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + } + for (i = 0; i < dt.length; i += 1) { + row = addRow(); + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + $(row.getItems()[2].getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = 'none'; + row.getItems()[1].dom.labelTextContainer.style.display = 'none'; + row.getField('act_name').setValue(dt[i].getField('act_name').getValue()); + row.getField('flo_condition').setValue(dt[i].getField('flo_condition').getValue()); + id = dt[i].getField('act_name').getValue(); + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + connection = isConnection(shape, shapeDest); + } + enableSorting(); + } + }); + } +}; + +PMDesigner.RoutingRuleDeleteAllFlow = function (shape) { + var warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + id: 'warningMessageWindowDelete', + message: 'Do you want to delete all routing rules?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteAllConnection(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + + function deleteAllConnection() { + var connection, elements = [], + i, + sw, + msg, + ports; + PMUI.getActiveCanvas().emptyCurrentSelection(); + //IMPORTANT: You must empty elements in another array due to the array reference indices managed. + //referer: PMDesigner.canvas.removeConnection & element.getPorts().asArray() + + ports = shape.getPorts().asArray(); + for (i = 0; i < ports.length; i += 1) { + elements.push(ports[i]); + } + sw = false; + for (i = 0; i < elements.length; i += 1) { + connection = elements[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID()) { + PMUI.getActiveCanvas().setCurrentConnection(connection); + PMUI.getActiveCanvas().removeElements(); + connection.saveAndDestroy(); + PMUI.getActiveCanvas().removeConnection(connection); + sw = true; + } + } + msg = sw ? 'Routing rules deleted successfully' : 'There aren\'t routing rules'; + PMDesigner.msgFlash(msg.translate(), document.body); + } + + warningMessageWindowDelete.open(); + warningMessageWindowDelete.showFooter(); + warningMessageWindowDelete.dom.titleContainer.style.height = '17px'; +}; + +PMDesigner.RoutingRuleSetOrder = function (diagram) { + var restClient = new PMRestClient({ + endpoint: 'update-route-order-from-project', + typeRequest: 'update', + data: {}, + functionSuccess: function () { + PMDesigner.msgFlash('Saved correctly'.translate(), document.body, 'success', 3000, 5); + } + }); + restClient.executeRestClient(); +}; +PMDesigner.dynaformDesigner = function (data) { + var old = PMUI.activeCanvas, a; + PMUI.activeCanvas = false; + a = new FormDesigner.main.Designer(data); + a.show(); + a.onHide = function () { + PMUI.activeCanvas = old; + }; + return a; +}; + +PMDesigner.complexRoutingRule = function (shape) { + var formRoutingRule, + formPanelSelected, + arrayShapeIdRemoved = [], + buttonAdd, + windowConnections, + warningMessageWindowDelete, + containerLabels, + buttonSave, + buttonCancel, + labelNextTask, + labelCondition, + warningMessageWindowDirty, + deleteButton; + + //Window + //button add routing rule + buttonAdd = new PMUI.ui.Button({ + id: 'routingRuleButtonAdd', + text: 'Add Routing Rule'.translate(), + style: { + cssProperties: { + marginLeft: '50px', + marginTop: '10px', + marginBottom: '10px', + fontSize: '16px' + } + }, + buttonType: 'success', + height: 31, + handler: function () { + var item, btnDel; + if (countActivities() > 0) { + item = addRow(); + item.getItems()[2].style.addProperties({display: 'none'}); + item.getItems()[2].controls[0].button.setButtonType('error'); + formRoutingRule.addItem(item); + for (var i = 0; i < formRoutingRule.getItems().length; i += 1) { + //formRoutingRule.getItems()[i].style.addProperties({'box-sizing': 'initial'}); + //item.style.addProperties({padding : 'initial'}); + formRoutingRule.getItems()[i].style.addProperties({'padding': 'initial'}); + } + item.getItems()[0].dom.labelTextContainer.style.display = "none"; + item.getItems()[1].dom.labelTextContainer.style.display = "none"; + + } else { + PMDesigner.msgFlash('There are no items.'.translate(), windowConnections.footer); + } + } + }); + //button Save + buttonSave = new PMUI.ui.Button({ + id: 'windowConnectionsButtonSave', + text: 'Apply'.translate(), + handler: function () { + removeConnectionsIntoCanvas(); + saveConnections(); + }, + buttonType: 'success', + height: 31 + }); + //Button cancel + buttonCancel = new PMUI.ui.Button({ + id: 'windowConnectionsButtonCancel', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + if (formRoutingRule.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowConnections.close(); + } + } + }); + + windowConnections = new PMUI.ui.Window({ + id: 'windowConnections', + title: 'Routing Rule'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + buttonPanelPosition: 'top', + items: [ + buttonAdd + ], + buttons: [ + buttonCancel, + buttonSave + ] + }); + windowConnections.showFooter(); + //END WINDOW + + containerLabels = new PMUI.core.Panel({ + layout: 'hbox', + width: 'auto', + height: 29, + style: { + cssProperties: { + 'border-bottom': '1px solid #c0c0c0' + } + } + }); + + labelNextTask = new PMUI.ui.TextLabel({ + text: 'Next Task'.translate(), + style: { + cssProperties: { + 'font-weight': 'bold' + } + } + }); + + labelCondition = new PMUI.ui.TextLabel({ + text: 'Description'.translate(), + style: { + cssProperties: { + 'font-weight': 'bold' + } + } + }); + + containerLabels.addItem(labelNextTask); + containerLabels.addItem(labelCondition); + + windowConnections.addItem(containerLabels); + + formRoutingRule = new PMUI.form.Form({ + id: 'formRoutingRule', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + height: 'auto', + items: [], + style: { + cssProperties: { + 'margin-left': '35px' + } + } + }); + + warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDelete', + windowMessageType: 'warning', + width: 490, + title: "Routing Rule".translate(), + bodyHeight: 'auto', + message: 'Do you want to delete this routing rule?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteRow(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + + warningMessageWindowDirty = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDirty', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Routing Rule".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: 'warningMessageWindowDirtyButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + }, + buttonType: "error" + }, + { + id: 'warningMessageWindowDirtyButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + windowConnections.close(); + }, + buttonType: "success" + } + ] + }); + + //main + formRoutingRule.hideFooter(); + windowConnections.addItem(formRoutingRule); + windowConnections.open(); + labelNextTask.setWidth(382); + labelNextTask.style.addProperties({padding: '5px 0px 0px 50px'}); + labelCondition.setWidth(410); + labelCondition.style.addProperties({padding: '5px 0px 0px 0px'}); + containerLabels.style.addProperties({'border-bottom': '1px solid #e7e7e7'}); + windowConnections.setTitle('Routing Rule'.translate() + ' - ' + ((shape.gat_type === 'COMPLEX') ? 'Exclusive (Manual)'.translate() : shape.gat_type)); + loadConnections(); + + function countActivities() { + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + var n = 0, i, dt; + dt = PMDesigner.project.getDirtyObject().diagrams[0].activities; + for (i = 0; i < dt.length; i += 1) { + n = n + 1; + } + + dt = PMDesigner.project.getDirtyObject().diagrams[0].events; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].evn_type !== 'START') { + n = n + 1; + } + } + return n; + } + + function addRow() { + + var dropDownControl, description, deleteButton, newRow; + + newRow = new PMUI.form.FormPanel({ + layout: 'hbox' + }); + + dropDownControl = new PMUI.field.DropDownListField({ + id: 'dropdownNextTask', + name: 'act_name', + valueType: 'string', + label: 'Next Task'.translate(), + labelPosition: 'top', + labelVisible: false, + value: '', + readOnly: true, + controlsWidth: 360, + proportion: 1.1, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + description = new PMUI.field.TextField({ + id: 'textCondition', + pmType: 'text', + name: 'flo_description', + valueType: 'string', + label: 'Description'.translate(), + labelPosition: 'top', + labelVisible: false, + controlsWidth: 320, + required: true, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + deleteButton = new PMUI.field.ButtonField({ + id: 'buttonDelete', + value: 'Delete'.translate(), + handler: function (e, a) { + var i; + for (i = 0; i < formRoutingRule.getItems().length; i += 1) { + if (formRoutingRule.getItems()[i].getItems()[2].controls[0].button.id == this.id) { + formPanelSelected = formRoutingRule.getItems()[i]; + warningMessageWindowDelete.open(); + warningMessageWindowDelete.dom.titleContainer.style.height = "17px"; + warningMessageWindowDelete.showFooter(); + } + } + + }, + name: 'delete', + labelVisible: false, + buttonAling: 'left', + controlsWidth: 100, + proportion: 0.3, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + newRow.addItem(dropDownControl); + newRow.addItem(description); + newRow.addItem(deleteButton); + loadActivities(dropDownControl); + return newRow; + } + + function loadActivities(dropdown) { + var i, dt; + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + dropdown.clearOptions(); + dropdown.setUID = function (uid) { + this.uid = uid; + }; + dropdown.getUID = function () { + return this.uid; + }; + dropdown.addOptionGroup({ + label: 'Task'.translate(), + selected: true, + options: [] + }); + dropdown.addOptionGroup({ + label: 'Sub-process'.translate(), + options: [] + }); + dt = PMDesigner.project.getDirtyObject().diagrams[0].activities, nameGroup; + dt = dt.sort(function (a, b) { + return a.act_name.toString().toLowerCase() > b.act_name.toString().toLowerCase(); + }); + for (i = 0; i < dt.length; i += 1) { + nameGroup = dt[i].act_type === 'TASK' ? 'Task'.translate() : 'Sub-process'.translate(); + dropdown.addOption({ + value: dt[i].act_uid, + label: dt[i].act_name + }, nameGroup); + } + + dropdown.addOptionGroup({ + label: 'End of process'.translate(), + options: [] + }); + dt = PMDesigner.project.getDirtyObject().diagrams[0].events; + dt = dt.sort(function (a, b) { + return a.evn_name.toString().toLowerCase() > b.evn_name.toString().toLowerCase(); + }); + for (i = 0; i < dt.length; i += 1) { + if (dt[i].evn_type !== 'START') { + dropdown.addOption({ + value: dt[i].evn_uid, + label: dt[i].evn_name + }, 'End of process'.translate()); + } + } + } + + function removeConnectionsIntoCanvas() { + var shapeDest, connection, dt, i, j; + for (j = 0; j < arrayShapeIdRemoved.length; j += 1) { + shapeDest = getShapeForId(arrayShapeIdRemoved[j]); + dt = shape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() === connection.getSrcPort().getParent().getID() && + shapeDest.getID() === connection.getDestPort().getParent().getID()) { + PMDesigner.canvas.emptyCurrentSelection(); + PMDesigner.canvas.setCurrentConnection(connection); + PMDesigner.canvas.removeElements(); + connection.saveAndDestroy(); + PMDesigner.canvas.removeConnection(connection); + break; + } + } + } + arrayShapeIdRemoved = []; + } + + function editShapeDestConnection(shapeDest, oldShape) { + var connection, canvas = PMDesigner.canvas; + connection = isConnection(shape, oldShape); + oldShape.removePort(connection.destPort); + shapeDest.addPort(connection.destPort, 100, 100, + false, connection.srcPort); + + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + connection.connect(); + canvas.triggerPortChangeEvent(connection.destPort); + } + + function createEndShape() { + var customShape, canvas = PMDesigner.canvas, command, x, y; + customShape = canvas.shapeFactory('END'); + + x = shape.getX() + shape.getWidth(); + y = shape.getY() + shape.getHeight() + 20; + + canvas.addElement(customShape, x, y, + customShape.topLeftOnCreation); + + //since it is a new element in the designer, we triggered the + //custom on create element event + canvas.updatedElement = customShape; + + // create the command for this new shape + command = new PMUI.command.CommandCreate(customShape); + canvas.commandStack.add(command); + command.execute(); + return customShape; + } + + function saveConnections() { + var dt, i; + if (!formRoutingRule.isValid()) { + return; + } + dt = formRoutingRule.getItems(), id, oldId, shapeDest, oldShapeDest, connection; + for (i = 0; i < dt.length; i += 1) { + id = dt[i].getField('act_name').getValue(); + oldId = dt[i].getField('act_name').getUID(); + if (id !== '0') { + if (oldId === undefined) { + shapeDest = getShapeForId(id); + createConnection(shape, shapeDest).setFlowCondition(dt[i].getField('flo_description').getValue()); + } + if (oldId !== undefined && id === oldId) { + shapeDest = getShapeForId(id); + connection = isConnection(shape, shapeDest); + $a = connection; + connection.setFlowCondition(dt[i].getField('flo_description').getValue()); + } + if (oldId !== undefined && id !== oldId) { + shapeDest = getShapeForId(id); + oldShapeDest = getShapeForId(oldId); + connection = isConnection(shape, oldShapeDest); + connection.setFlowCondition(dt[i].getField('flo_description').getValue()); + editShapeDestConnection(shapeDest, oldShapeDest); + } + } else { + var customShape = createEndShape(); + createConnection(shape, customShape); + } + } + windowConnections.close(); + PMDesigner.msgFlash('Saved correctly'.translate(), document.body); + PMDesigner.project.dirty = true; + } + + function getShapeForId(id) { + var dt = PMDesigner.canvas.getChildren().asArray(), i; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].act_uid === id || dt[i].evn_uid === id) { + return dt[i]; + } + } + return null; + } + + function createConnection(sourceShape, shape) { + //referer to /processmaker/vendor/colosa/MichelangeloFE/src/connectiondrop.js + //method PMConnectionDropBehavior.prototype.onDrop + var sourcePort, endPort, connection, canvas = PMDesigner.canvas; + sourcePort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + endPort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + + sourceShape.addPort(sourcePort, 100, 100); + shape.addPort(endPort, 100, 100, + false, sourcePort); + + //add ports to the canvas array for regularShapes + //shape.canvas.regularShapes.insert(sourcePort).insert(endPort); + //create the connection + connection = new PMFlow({ + srcPort: sourcePort, + destPort: endPort, + segmentColor: new PMUI.util.Color(92, 156, 204), + name: "", + canvas: shape.canvas, + segmentStyle: shape.connectionType.segmentStyle, + flo_type: shape.connectionType.type + }); + connection.setSrcDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.srcDecorator !== 'undefined' + && shape.connectionType.srcDecorator !== null) ? + shape.connectionType.srcDecorator : "mafe-sequence", + decoratorType: "source", + parent: connection + })); + connection.setDestDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.destDecorator !== 'undefined' + && shape.connectionType.destDecorator !== null) ? + shape.connectionType.destDecorator : "mafe-sequence", + decoratorType: "target", + parent: connection + })); + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + + //connect the two ports + connection.connect(); + connection.setSegmentMoveHandlers(); + + //add the connection to the canvas, that means insert its html to + // the DOM and adding it to the connections array + canvas.addConnection(connection); + + // Filling PMFlow fields + connection.setTargetShape(endPort.parent); + connection.setOriginShape(sourcePort.parent); + connection.savePoints(); + + // now that the connection was drawn try to create the intersections + connection.checkAndCreateIntersectionsWithAll(); + + //attaching port listeners + sourcePort.attachListeners(sourcePort); + endPort.attachListeners(endPort); + + // finally trigger createEvent + canvas.triggerCreateEvent(connection, []); + return connection; + } + + function loadConnections() { + var row, connection, dt = shape.getPorts().asArray(), i, j; + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID()) { + row = addRow(); + row.getField('act_name').setValue(connection.getDestPort().getParent().getID()); + row.getField('act_name').setUID(connection.getDestPort().getParent().getID()); + row.getField('flo_description').setValue(connection.getFlowCondition()); + + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = "none"; + row.getItems()[1].dom.labelTextContainer.style.display = "none"; + } + } + } + + function isConnection(sourceShape, shape) { + var connection, dt, i; + dt = sourceShape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (sourceShape.getID() === connection.getSrcPort().getParent().getID() && + shape.getID() === connection.getDestPort().getParent().getID()) { + return connection; + } + } + return false; + } + + function deleteRow() { + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + PMDesigner.msgFlash('Routing rule removed correctly'.translate(), windowConnections.footer); + } + +}; + +var PMVariables = function (options) { + var that = this; + this.initialFormAcceptedValuesKeyValue = null; + this.initialFormAcceptedValuesValue = null; + this.initialGridAcceptedValuesOrder = []; + this.validateAcceptedValuesFlag = false; + this.var_uid = null; + this.var_name = null; + this.edit = false; + this.editRow = null; + this.dirtyAcceptedValue = false; + this.fieldInfo = null; + this.onSave = new Function(); + this.onEdit = new Function(); + this.clickedClose = true; + this.editingOptions = false; + this.editRow = null; + this.currentVariable = null; + this.onWindowClose = new Function(); + this.buttonCreate = new PMUI.ui.Button({ + id: 'buttonCreate', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + + }, + handler: function () { + that.showForm(); + } + }); + + this.buttonCreateInputDocument = new PMUI.field.ButtonField({ + id: 'buttonCreateInputDocument', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + proportion: 0.8, + handler: function (field) { + var inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.method = "POST"; + } + }); + + this.buttonEditInputDocument = new PMUI.field.ButtonField({ + id: 'buttonEditInputDocument', + value: 'Edit'.translate(), + labelVisible: false, + buttonAlign: 'center', + proportion: 0.8, + handler: function (field) { + var form = that.formVariables, + fieldInpDoc = form.getField('inp_doc_uid'), + inp_doc_uid = fieldInpDoc.getValue(), + defaultText = "- Select an input document -".translate(), + inputDocument; + if (inp_doc_uid && inp_doc_uid !== defaultText) { + inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.inputDocumentOriginDataForUpdate = {}; + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(inp_doc_uid); + } else { + fieldInpDoc.setValue(""); + form.isValid(); + } + } + }); + + that.buttonCreateInputDocument.controls[0].button.setButtonType("success"); + that.buttonCreateInputDocument.controls[0].button.setStyle({ + cssClasses: ["mafe-button-create-variable", "pmui-success"], + cssProperties: {padding: "8px 15px", border: "0px"} + }); + that.buttonEditInputDocument.controls[0].button.setButtonType("success"); + that.buttonEditInputDocument.controls[0].button.setStyle({ + cssClasses: ["mafe-button-edit-variable", "pmui-success"], + cssProperties: {padding: "8px 15px", border: "0px"} + }); + + var inp_doc_uid = new PMUI.field.DropDownListField({ + id: "inp_doc_uid", + name: "inp_doc_uid", + value: "", + required: true, + label: "Related Input Document".translate(), + controlsWidth: 460, + valueType: "string", + labelPosition: "top", + onChange: function () { + that.validateInputDoc(); + } + }); + + this.buttonFieldAdd = new PMUI.field.ButtonField({ + id: 'buttonFieldAdd', + pmType: 'buttonField', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.8, + handler: function (field) { + that.addAcceptedValue(); + }, + style: { + cssProperties: { + "margin-left": "10px" + } + } + }); + this.buttonFieldAdd.getControl().button.setButtonType("success"); + this.buttonFieldCancel = new PMUI.field.ButtonField({ + id: 'buttonFieldCancel', + pmType: 'buttonField', + value: 'Cancel'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 55, + proportion: 0.6, + handler: function (field) { + that.clickedClose = false; + that.cancelAcceptedValue(); + that.editingOptions = false; + } + }); + this.buttonFieldCancel.getControl().button.setButtonType("error"); + + this.formVariables = new PMUI.form.Form({ + id: 'formVariables', + width: 'auto', + title: '', + visibleHeader: false, + items: [ + { + pmType: 'text', + label: 'Variable Name'.translate(), + placeholder: "Name".translate(), + id: 'variableName', + value: '', + name: 'var_name', + required: true, + valueType: 'string', + maxLength: 60, + controlsWidth: 460, + validators: [ + { + pmType: "regexp", + criteria: /^[a-zA-Z\_]{1}\w+$/, + errorMessage: "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores.".translate() + } + ] + }, { + pmType: 'text', + label: 'Label'.translate(), + placeholder: 'Label'.translate(), + id: 'variableLabel', + value: 'label', + name: 'var_label', + valueType: 'string', + maxLength: 60, + controlsWidth: 460, + visible: false + }, { + pmType: 'dropdown', + label: 'Variable Type'.translate(), + placeholder: 'Variable type'.translate(), + id: 'varType', + value: 'string', + name: 'var_field_type', + required: true, + valueType: 'string', + controlsWidth: 460, + options: [ + { + label: 'String', + value: 'string' + }, { + label: 'Integer', + value: 'integer' + }, { + label: 'Float', + value: 'float' + }, { + label: 'Boolean', + value: 'boolean' + }, { + label: 'Datetime', + value: 'datetime' + }, { + label: 'Grid', + value: 'grid' + }, { + label: 'Array', + value: 'array' + }, { + label: "File", + value: "file" + }, { + label: "Multiple File", + value: "multiplefile" + }, { + label: "Object", + value: "object" + } + + ], + onChange: function (newValue, oldValue) { + var sw = that.gridAcceptedValues.visible === false ? true : (that.gridAcceptedValues.getData().length === 0); + var sw2 = that.formBooleanOptions.visible === false ? true : (that.formBooleanOptions.getField('trueOption').getValue() + that.formBooleanOptions.getField('falseOption').getValue()) === ''; + if (sw && sw2) { + that.changeViewFieldType(newValue, oldValue); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + return; + } + var message_window = new PMUI.ui.MessageWindow({ + id: 'messageWindowCancel', + width: 490, + title: 'Variables'.translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: "This action will delete all options. Do you want to continue?".translate(), + footerItems: [ + { + id: 'messageWindowNo', + text: 'No'.translate(), + handler: function () { + message_window.close(); + that.formVariables.getField('var_field_type').setValue(oldValue); + }, + buttonType: "error" + }, + { + id: 'messageWindowYes', + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + that.changeViewFieldType(newValue, oldValue); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + }, + buttonType: "success" + } + ], + onClose: function () { + } + }); + message_window.open(); + message_window.showFooter(); + } + }, { + pmType: "panel", + id: "inp_doc_uidPanel", + fieldset: false, + layout: "hbox", + items: [ + inp_doc_uid, + that.buttonCreateInputDocument, + that.buttonEditInputDocument + ] + }, + { + id: 'booleanPanel', + pmType: 'panel', + legend: 'Options'.translate(), + fieldset: true, + layout: 'vbox', + items: [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + new PMLabelField({ + text: 'Key'.translate(), + textMode: 'plain', + style: { + cssProperties: { + color: '#AEAEAE', + 'font-weight': 'bold' + } + }, + proportion: 0.3 + }), + new PMLabelField({ + text: 'Label'.translate(), + textMode: 'plain', + style: { + cssProperties: { + color: '#AEAEAE', + 'font-weight': 'bold' + } + } + }) + ] + }, + { + pmType: 'text', + name: 'trueOption', + label: 'True'.translate(), + controlsWidth: 460, + valueType: 'string', + maxLength: 100, + required: true + }, { + pmType: 'text', + name: 'falseOption', + label: 'False'.translate(), + controlsWidth: 460, + valueType: 'string', + maxLength: 100, + required: true + } + ] + }, + { + pmType: 'dropdown', + label: 'Database Connection'.translate(), + placeholder: 'Database Connection'.translate(), + id: 'varConnection', + value: 'none', + name: 'var_dbconnection', + controlsWidth: 460, + options: [{ + label: 'PM Database', + value: 'workflow' + } + ], + onChange: function (newValue, oldValue) { + } + }, { + pmType: 'textarea', + label: 'SQL'.translate(), + placeholder: "Insert a SQL query like: SELECT [Key field], [Label field] FROM [Table name]".translate(), + id: 'varSql', + value: '', + name: 'var_sql', + valueType: 'string', + controlsWidth: 460, + style: {cssClasses: ['mafe-textarea-resize']} + }, { + pmType: 'checkbox', + label: 'Define accepted variable values'.translate(), + id: "chckboxOption", + name: 'var_options_control', + controlsWidth: 460, + options: [{value: '1', label: ''}], + onChange: function (newValue, oldValue) { + that.changeViewFieldType(that.formVariables.getField('var_field_type').getValue()); + } + }, + { + id: 'formAcceptedValues', + pmType: 'panel', + fieldset: false, + layout: 'hbox', + items: [ + { + pmType: 'text', + name: 'keyValue', + id: "variable-keyvalue", + label: 'Key'.translate(), + labelWidth: '100%', + controlsWidth: 210, + proportion: 2.5, + valueType: 'string', + maxLength: 255, + labelPosition: "top" + }, + { + pmType: 'text', + name: 'value', + id: "variable-value", + label: 'Label'.translate(), + labelWidth: '100%', + controlsWidth: 300, + valueType: 'string', + maxLength: 255, + proportion: 3.4, + labelPosition: "top" + }, + that.buttonFieldCancel, + that.buttonFieldAdd + ] + } + ] + }); + this.formVariables.getData = function () { + var data = getData2PMUI(that.formVariables.html); + return data; + }; + this.gridVariables = new PMUI.grid.GridPanel({ + id: 'gridVariables', + pageSize: 10, + width: '96%', + style: { + cssClasses: ['mafe-gridPanel'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: 'varName', + title: 'Name'.translate(), + dataType: 'string', + columnData: 'var_name', + alignmentCell: 'left', + width: '300px', + sortable: true + }, { + id: 'varType', + title: 'Type'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'var_field_type', + sortable: true + }, { + id: 'varEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: '60px', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + that.showFormEdit(row.getData()); + } + }, { + id: 'varDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: '70px', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + that.del(row.getData(), row, grid); + } + } + ], + dataItems: null + }); + this.gridAcceptedValues = new PMUI.grid.GridPanel({ + id: 'gridAcceptedValues', + pageSize: 5, + style: {cssClasses: ['mafe-gridPanel']}, + filterPlaceholder: 'Text to Search'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + filterable: false, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: 'keyvalue', + title: 'Key'.translate(), + columnData: 'keyValue', + dataType: 'string', + alignmentCell: 'left', + width: 180 + }, { + id: 'label', + title: 'Label'.translate(), + columnData: 'value', + dataType: 'string', + alignmentCell: 'left', + width: 300 + }, { + id: 'buttonEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: 60, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + that.editRow = row; + that.editAcceptedValue(row); + } + }, { + id: 'buttonDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: 75, + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + if (row !== that.editRow) { + that.deleteAcceptedValue(row); + } else { + PMDesigner.msgFlash('The row can not be removed, because is being edited.'.translate(), document.getElementById('windowVariables'), 'error', 1000, 5); + } + } + } + ], + dataItems: null, + behavior: 'dragdropsort' + }); + this.isDirtyFormVariables = function () { + $("input,select,textarea").blur(); + if (this.formVariables.isVisible()) { + this.validateAcceptedValues(); + if (this.formVariables.isDirty() || this.dirtyAcceptedValue || this.validateAcceptedValuesFlag) { + //if (this.formVariables.getField("var_options_control").controls[0].selected) { + var message_window = new PMUI.ui.MessageWindow({ + id: "messageWindowCancel", + width: 490, + title: "Variables".translate(), + windowMessageType: "warning", + bodyHeight: "auto", + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: "messageWindowNo", + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: "messageWindowYes", + text: "Yes".translate(), + handler: function () { + if (that.clickedClose) { + that.windowVariables.close(); + } + message_window.close(); + that.showGrid(); + that.windowVariables.hideFooter(); + }, + buttonType: "success" + }, + ] + }); + + message_window.open(); + message_window.showFooter(); + /*} else { + that.showGrid(); + }*/ + } else { + if (that.clickedClose) { + that.windowVariables.close(); + } else { + that.showGrid(); + } + this.initialFormAcceptedValuesKeyValue = null; + this.initialFormAcceptedValuesValue = null; + this.initialGridAcceptedValuesOrder = []; + that.windowVariables.hideFooter(); + } + } else { + this.windowVariables.close(); + } + }; + this.windowVariables = new PMUI.ui.Window({ + id: 'windowVariables', + title: 'Variables'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFormVariables(); + }, + footerItems: [ + new PMUI.ui.Button({ + id: "windowVariablesCancel", + text: "Cancel".translate(), + + handler: function () { + that.clickedClose = false; + that.isDirtyFormVariables(); + }, + + buttonType: "error" + }), + + new PMUI.ui.Button({ + id: "windowVariablesSave", + text: "Save".translate(), + + handler: function () { + if (that.edit) { + that.updateVariables(); + } else { + that.saveVariables(); + } + }, + + buttonType: "success" + }) + ], + onClose: function () { + that.onWindowClose(that.currentVariable); + }, + visibleFooter: true, + buttonPanelPosition: "bottom" + }); + PMVariables.prototype.init.call(this); + that.setInputDocuments(inp_doc_uid); +}; +PMVariables.prototype.init = function () { + var that = this, + acceptedValuesForm, + label; + + that.buttonCreate.defineEvents(); + + that.windowVariables.addItem(that.gridVariables); + that.windowVariables.addItem(that.formVariables); + that.windowVariables.addItem(that.gridAcceptedValues); + that.windowVariables.hideFooter(); + that.windowVariables.open(); + label = $('#booleanPanel'); + acceptedValuesForm = $('#formAcceptedValues'); + that.customCss(); + acceptedValuesForm.find(".pmui-field-message").css("marginLeft", 10); + $("#gridAcceptedValues").css({"height": "254px", "margin": "0 10px"}); + $("#requiredMessage").css({"margin-top": "10px"}); + $("#inp_doc_uid").find(".pmui-field-message:eq(0)").css("left", "226px"); + this.formAcceptedValues = PMUI.getPMUIObject(acceptedValuesForm.get(0)); + + this.buttonFieldAdd.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + this.buttonFieldCancel.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + $('#gridVariables .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + that.gridVariables.dom.toolbar.appendChild(that.buttonCreate.getHTML()); + + this.formBooleanOptions = PMUI.getPMUIObject(label.get(0)); + that.showGrid(); + that.loadDataBaseConnections(); + + validateKeysField(that.formVariables.getField('var_name').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + + that.resetAcceptedValuesPanel(); + label = $('#booleanPanel').css({'width': '675px', margin: '10px'}).find(".pmui-pmlabelfield"); + $(label[0]).replaceWith($(label[0]).find(".pmui-pmlabelcontrol").css({ + "font-size": "14px", + "margin-right": "127px" + })); + $(label[1]).replaceWith($(label[1]).find(".pmui-pmlabelcontrol").css({ + "font-size": "14px", + "margin-right": "127px" + })); + this.formVariables.panel.html.style.overflow = "scroll !important"; + $(this.formVariables.panel.html).removeClass("pmui-formpanel"); + $(this.formVariables.panel.html).append(that.formAcceptedValues.html); + $(this.formVariables.panel.html).append(that.gridAcceptedValues.html); + $(that.formAcceptedValues.html).find(".pmui-formpanel").css({"display": "inline-block"}); + that.windowVariables.footer.html.style.textAlign = "right"; +}; +PMVariables.prototype.saveVariables = function () { + var that = this, + data, + inp_doc_uid_value = this.formVariables.getField("inp_doc_uid").controls[0].value; + this.formVariables.getField("inp_doc_uid").setValue(inp_doc_uid_value); + if (!this.formVariables.isValid()) { + return; + } + if (this.formBooleanOptions.visible && !this.formBooleanOptions.isValid()) { + return; + } + data = this.formVariables.getData(); + data.var_label = data.var_field_type; + + data.var_default = ''; + data.var_accepted_values = that.getDataAcceptedValues(); + data.var_field_size = 10; + if (!this.formVariables.getField('var_sql').visible) + data.var_sql = ""; + (new PMRestClient({ + endpoint: 'process-variable', + typeRequest: 'post', + functionSuccess: function (xhr, response) { + if (that.onSave(xhr, response) === false) { + that.var_uid = null; + return; + } + that.showGrid(); + that.load(); + that.var_uid = null; + that.windowVariables.hideFooter(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ' ', + data: data, + messageSuccess: 'Variable saved successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.updateVariables = function () { + var that = this, + data, + inp_doc_uid_value = this.formVariables.getField("inp_doc_uid").controls[0].value; + this.formVariables.getField("inp_doc_uid").setValue(inp_doc_uid_value); + if (!this.formVariables.isValid()) { + return; + } + if (this.formBooleanOptions.visible && !this.formBooleanOptions.isValid()) { + return; + } + data = this.formVariables.getData(); + data.var_label = data.var_field_type; + data.var_field_size = 10; + if (that.formVariables.getField('var_name').getValue().trim() === that.var_name.trim()) { + delete data['var_name']; + } + data.var_default = ''; + data.var_accepted_values = that.getDataAcceptedValues(); + if (!this.formVariables.getField('var_sql').visible) + data.var_sql = ""; + (new PMRestClient({ + endpoint: 'process-variable/' + that.var_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + if (that.onEdit(xhr, response, data) === false) { + that.var_uid = null; + return; + } + var var_name_old = that.currentVariable.var_name; + that.currentVariable = data; + that.currentVariable.var_uid = that.var_uid; + that.currentVariable.var_name_old = var_name_old; + that.showGrid(); + that.load(); + that.var_uid = null; + that.windowVariables.hideFooter(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ' ', + messageSuccess: 'Variable edited successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.deleteVariable = function (var_uid) { + var that = this; + (new PMRestClient({ + endpoint: 'process-variable/' + var_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'working...'.translate(), + messageSuccess: 'Variable deleted successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.load = function () { + var that = this; + var restProxy = new PMRestClient({ + endpoint: 'process-variables', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var listInputDocs = response; + that.gridVariables.setDataItems(listInputDocs); + that.gridVariables.sort('var_name', 'asc'); + $(that.gridVariables.dom.toolbar).find("input").val(""); + that.gridVariables.clearFilter(); + if (that.currentVariable !== null) { + var var_name_old = that.currentVariable.var_name_old; + for (var i = 0; i < response.length; i++) { + if (that.currentVariable.var_uid === response[i].var_uid) { + that.currentVariable = response[i]; + } + } + that.currentVariable.var_name_old = var_name_old; + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +PMVariables.prototype.del = function (data, row, grid) { + var that = this; + var confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDel', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Variables".translate(), + message: 'Do you want to delete this variable?'.translate(), + footerItems: [{ + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.deleteVariable(data.var_uid, row); + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMVariables.prototype.customCss = function () { + $("#inp_doc_uidPanel").css({padding: ""}); + $("#inp_doc_uid").css({width: "75%"}).find("label:eq(0)").css({float: "left", width: "31.5%"}); + + var td = $("#chckboxOption .pmui-field-control-table td")[0]; + + if (typeof(td) != "undefined") { + td.setAttribute("style", "padding:0px !important"); + } + + this.formVariables.panel.getHTML().setAttribute("style", "overflow: initial"); +}; + +PMVariables.prototype.showGrid = function () { + var that = this; + that.formVariables.setVisible(false); + that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(false); + that.disableBooleanPanel(); + $(that.gridVariables.dom.toolbar).find("input").val(""); + that.gridVariables.clearFilter(); + that.gridVariables.setVisible(true); + that.windowVariables.setTitle('Variables'.translate()); +}; +PMVariables.prototype.showForm = function () { + var that = this; + that.edit = false; + that.dirtyAcceptedValue = false; + that.formVariables.setVisible(true); + that.enableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true); + that.enableBooleanPanel(); + that.gridVariables.setVisible(false); + that.windowVariables.setTitle('Create Variable'.translate()); + that.formVariables.reset(); + that.formVariables.setFocus(); + that.changeViewFieldType('string'); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + that.buttonFieldCancel.setVisible(false); + that.windowVariables.showFooter(); + that.buttonCreateInputDocument.setVisible(false); + that.buttonEditInputDocument.setVisible(false); +}; +PMVariables.prototype.showFormEdit = function (data) { + var that = this; + that.showForm(); + that.var_uid = data.var_uid; + that.edit = true; + that.var_name = data.var_name; + that.windowVariables.setTitle('Edit Variable'.translate()); + that.formVariables.getField('var_dbconnection').setValue(data.var_dbconnection); + that.formVariables.getField('var_field_type').setValue(data.var_field_type); + that.formVariables.getField('var_label').setValue(data.var_label); + that.formVariables.getField('var_name').setValue(data.var_name); + that.formVariables.getField('var_sql').setValue(data.var_sql); + that.formVariables.getField('inp_doc_uid').setValue(data.inp_doc_uid); + + that.setVarOptionsControl(data.var_accepted_values); + that.changeViewFieldType(data.var_field_type); + that.setDataAcceptedValues(data.var_accepted_values); + that.currentVariable = data; + that.currentVariable.var_name_old = that.currentVariable.var_name; +}; +PMVariables.prototype.loadDataBaseConnections = function () { + var that = this; + var restProxy = new PMRestClient({ + endpoint: 'database-connections', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var dropdown = that.formVariables.getField('var_dbconnection'); + for (var i = 0; i < response.length; i++) { + if (response[i].dbs_connection_type == "TNS") { + dropdown.addOption({ + label: "[" + response[i].dbs_tns + "] " + response[i].dbs_type + " : " + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } else { + dropdown.addOption({ + label: "[" + response[i].dbs_server + ":" + response[i].dbs_port + "] " + response[i].dbs_type + ": " + response[i].dbs_database_name + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +PMVariables.prototype.changeViewFieldType = function (newValue) { + var that = this; + var sw = that.formVariables.getField('var_options_control').controls[0].selected; + + that.formVariables.getField('var_dbconnection').setVisible(false); + that.formVariables.getField('var_sql').setVisible(false); + that.formVariables.getField('var_options_control').setVisible(false); + that.formVariables.getField('inp_doc_uid').setVisible(false); + that.formVariables.getField('inp_doc_uid').setRequired(false); + that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(false); + that.disableBooleanPanel(); + that.buttonCreateInputDocument.setVisible(false); + that.buttonEditInputDocument.setVisible(false); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), []); + + if (this.fieldInfo === null) { + this.fieldInfo = document.createTextNode(''); + var a = that.formVariables.getField('var_field_type').getControls()[0]; + a.html.parentNode.appendChild(document.createElement('br')); + a.html.parentNode.appendChild(this.fieldInfo); + } + + switch (newValue) { + case 'string': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + + + break; + case 'integer': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'ishyphen']); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + break; + case 'float': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isperiod', 'ishyphen']); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + break; + case 'boolean': + that.enableBooleanPanel(); + this.fieldInfo.data = "Supported Controls: checkbox, radio, hidden.".translate(); + break; + case 'datetime': + this.fieldInfo.data = "Supported Controls: datetime, hidden.".translate(); + break; + case "grid": + this.fieldInfo.data = "Supported Controls: grid.".translate(); + break; + case "array": + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + this.fieldInfo.data = "Supported Controls: checkgroup.".translate(); + break; + case 'file': + that.formVariables.getField('inp_doc_uid').setVisible(true); + that.buttonCreateInputDocument.setVisible(true); + that.buttonEditInputDocument.setVisible(true); + that.formVariables.getField('inp_doc_uid').setRequired(true); + this.fieldInfo.data = "Supported Controls: file.".translate(); + that.validateInputDoc(); + break; + case 'multiplefile': + this.fieldInfo.data = "Supported Controls: Multiple File.".translate(); + break; + case 'object': + this.fieldInfo.data = "Supported Controls:".translate(); + break; + } +}; +/** + * Enable or disable edit button of input document + */ +PMVariables.prototype.validateInputDoc = function () { + var form = this.formVariables, + fieldInpDoc = form.getField("inp_doc_uid"), + defaultText = "- Select an input document -".translate(); + if (fieldInpDoc && fieldInpDoc.getValue() && fieldInpDoc.getValue() !== defaultText) { + this.buttonEditInputDocument.enable(); + } else { + this.buttonEditInputDocument.disable(); + } +}; +PMVariables.prototype.addAcceptedValue = function () { + var that = this, + key = jQuery.trim(that.formAcceptedValues.getField('keyValue').getValue()), + value = jQuery.trim(that.formAcceptedValues.getField('value').getValue()); + + if (that.isAcceptedValueAdded()) { + return PMDesigner.msgFlash('The key value already exists.'.translate(), + document.getElementById('windowVariables'), 'error', 1000, 5); + } + if (!(key && value)) { + return PMDesigner.msgFlash('The key and label must be supplied.'.translate(), + document.getElementById('windowVariables'), 'error', 1000, 5); + } + if (that.editRow === null) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + keyValue: key, + value: value + } + })); + } else { + this.editingOptions = false; + that.editRow.setData({ + keyValue: key, + value: value + }); + } + that.dirtyAcceptedValue = true; + that.cancelAcceptedValue(); +}; +PMVariables.prototype.editAcceptedValue = function (row) { + var that = this; + this.editingOptions = true; + that.editRow = row; + var data = row.getData(); + that.formAcceptedValues.getField('keyValue').setValue(data.keyValue); + that.formAcceptedValues.getField('value').setValue(data.value); + that.buttonFieldAdd.setValue('Save'.translate()); + that.buttonFieldCancel.setVisible(true); + + that.initialFormAcceptedValuesKeyValue = data.keyValue; + that.initialFormAcceptedValuesValue = data.value; +}; +PMVariables.prototype.deleteAcceptedValue = function (row) { + var that = this; + var confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Variables".translate(), + message: 'Do you want to delete this Key Value?'.translate(), + footerItems: [{ + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.gridAcceptedValues.removeItem(row); + that.dirtyAcceptedValue = true; + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; +PMVariables.prototype.getDataAcceptedValues = function () { + var that = this, data = [], i, dt = []; + if (that.gridAcceptedValues.visible) { + dt = that.gridAcceptedValues.getData(); + for (i = 0; i < dt.length; i++) { + delete dt[i].key; + delete dt[i].type; + data.push({ + value: dt[i].keyValue, + label: dt[i].value + }); + } + } + if (that.formBooleanOptions.visible) { + var a = that.formBooleanOptions.getItems("fields").reduce(function (prev, curr) { + prev[curr.getName()] = curr.getValue(); + return prev; + }, {}); + + data = [ + {value: '1', label: a.trueOption}, + {value: '0', label: a.falseOption} + ]; + } + return data; +}; +PMVariables.prototype.setDataAcceptedValues = function (stringJsonData) { + if (!stringJsonData) { + return; + } + var that = this, i, data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + if (that.gridAcceptedValues.visible) { + for (i = 0; i < data.length; i++) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + keyValue: data[i].keyValue ? data[i].keyValue : data[i].value, + value: data[i].keyValue ? data[i].value : data[i].label + } + })); + that.initialGridAcceptedValuesOrder.push(data[i].keyValue ? data[i].keyValue : data[i].value); + } + } + if (that.formBooleanOptions.visible) { + that.formBooleanOptions.getField('trueOption').setValue(data[0].label); + that.formBooleanOptions.getField('falseOption').setValue(data[1].label); + } +}; +PMVariables.prototype.validateAcceptedValues = function () { + var that = this, + dirty = false, + finalVal1, + finalVal2, + initVal1, + initVal2, + gridAcceptedValues, + finalGridAcceptedValuesOrder = [], + key; + if (that.initialFormAcceptedValuesValue && that.formAcceptedValues.getField('value').getValue() != '') { + finalVal1 = that.formAcceptedValues.getField('value').getValue(); + finalVal2 = that.formAcceptedValues.getField('keyValue').getValue(); + initVal1 = that.initialFormAcceptedValuesValue; + initVal2 = that.initialFormAcceptedValuesKeyValue; + if (finalVal1 !== initVal1 || finalVal2 !== initVal2) { + dirty = true; + } + } else if (that.formAcceptedValues.getField('value').getValue() !== '' || that.formAcceptedValues.getField('keyValue').getValue()) { + dirty = true; + } + + if (that.initialGridAcceptedValuesOrder.length) { + gridAcceptedValues = that.gridAcceptedValues.getData(); + for (key in gridAcceptedValues) { + if (gridAcceptedValues.hasOwnProperty(key)) { + finalGridAcceptedValuesOrder.push(gridAcceptedValues[key].keyValue); + } + } + if (JSON.stringify(finalGridAcceptedValuesOrder) !== JSON.stringify(that.initialGridAcceptedValuesOrder)) { + dirty = true; + } + } + this.validateAcceptedValuesFlag = dirty; +}; +PMVariables.prototype.setVarOptionsControl = function (stringJsonData) { + if (!stringJsonData) { + return; + } + var that = this, i, data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + if (data.length > 0) { + that.formVariables.getField('var_options_control').setValue("['1']"); + } +}; +PMVariables.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that.buttonFieldAdd.setValue('Add'.translate()); + that.buttonFieldCancel.setVisible(false); + that.resetAcceptedValuesPanel(); +}; +PMVariables.prototype.isAcceptedValueAdded = function () { + var that = this, i, keyValue, data, exist, i, index, rowEditValue; + data = that.gridAcceptedValues.getData(); + keyValue = that.formAcceptedValues.getField('keyValue').getValue() || ""; + if (this.editingOptions) { + rowEditValue = this.editRow.getData()["keyValue"]; + for (i = 0; i < data.length; i++) { + if (rowEditValue === data[i].keyValue) { + index = i; + break; + } + } + for (i = 0; i < data.length; i++) { + if (i !== index) { + if (keyValue === data[i].keyValue) { + exist = true; + } + } + } + if (exist) { + return true; + } else { + return false; + } + } else { + for (i = 0; i < data.length; i++) { + if (data[i].keyValue === keyValue) { + return true; + } + } + } + return false; +}; +PMVariables.prototype.setInputDocuments = function (inp_doc_uid) { + var restClient = new PMRestClient({ + endpoint: 'input-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + inputDocumentsData = response; + var arrayOptions = []; + arrayOptions[0] = { + label: "- Select an input document -".translate(), + value: "", + disabled: true, + selected: true + }; + for (var i = 0; i <= inputDocumentsData.length - 1; i++) { + arrayOptions.push( + { + value: inputDocumentsData[i].inp_doc_uid, + label: inputDocumentsData[i].inp_doc_title + } + ); + } + inp_doc_uid.setOptions(arrayOptions); + inp_doc_uid.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + }); + restClient.executeRestClient(); +}; +PMVariables.prototype.setInputDocumentsFromIDModule = function (inp_doc_uid, response) { + var inp_doc_uid_val = $("#inp_doc_uid").find("select:eq(0) option:selected").val(); + var arrayOptions = []; + inputDocumentsData = response; + arrayOptions[0] = { + label: "- Select an input document -".translate(), + value: "", + disabled: true, + selected: true + }; + for (var i = 0; i <= inputDocumentsData.length - 1; i++) { + arrayOptions.push( + { + value: inputDocumentsData[i].inp_doc_uid, + label: inputDocumentsData[i].inp_doc_title + } + ); + } + inp_doc_uid.setOptions(arrayOptions); + inp_doc_uid.setValue(arrayOptions[0].value); + if (inp_doc_uid_val) { + inp_doc_uid.setValue(inp_doc_uid_val); + } +}; +PMVariables.prototype.isWindowActive = function () { + if ($("#formVariables").is(":visible")) { + return true; + } + return false; +}; +/** + * Reset the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.resetBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.getItems("fields").forEach(function (i) { + i.setValue(""); + }); + } + return this; +}; +/** + * Disable the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.disableBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.setVisible(false) + .getItems("fields").forEach(function (i) { + i.disable(); + }); + } + return this; +}; +/** + * Enable the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.enableBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.setVisible(true) + .getItems("fields").forEach(function (i) { + i.enable(); + }); + } + return this; +}; +/** + * Reset the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.resetAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.getItems().forEach(function (i) { + i.setValue(""); + }); + } + return this; +}; +/** + * Enable the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.enableAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.setVisible(true) + .getItems('fields').forEach(function (i) { + i.enable(""); + }); + } + return this; +}; +/** + * Disable the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.disableAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.setVisible(false) + .getItems('fields').forEach(function (i) { + i.disable(""); + }); + } + return this; +}; +PMDesigner.variables = function () { + var pmvariables = new PMVariables(); + pmvariables.load(); +}; +PMDesigner.variables.create = function () { + var pmvariables = new PMVariables(); + pmvariables.showForm(); + pmvariables.load(); +}; + +RowVariableCondition = function () { + PMUI.form.FormPanel.call(this, { + layout: 'hbox' + }); + RowVariableCondition.prototype.init.call(this); +}; +RowVariableCondition.prototype = new PMUI.form.FormPanel(); +RowVariableCondition.prototype.createHTML = function () { + var items; + PMUI.form.FormPanel.prototype.createHTML.call(this); + items = this.getItems(); + items[0].dom.labelTextContainer.style.display = 'none'; + items[1].dom.labelTextContainer.style.display = 'none'; + items[2].dom.labelTextContainer.style.display = 'none'; + items[2].style.addProperties({display: 'none'}); + items[2].controls[0].button.setButtonType('error'); + return this.html; +}; +RowVariableCondition.prototype.init = function () { + var that = this, + typeData, + field, + remove; + field = new PMUI.field.TextField({ + id: 'idField', + name: '', + required: true, + controlsWidth: 425, + proportion: 2.1, + labelVisible: false + }); + typeData = new PMUI.field.DropDownListField({ + id: 'idTypeData', + name: '', + valueType: 'string', + value: '', + readOnly: true, + controlsWidth: 200, + labelVisible: false, + options: [{ + value: 'integer', + label: 'Integer'.translate() + }, { + value: 'string', + label: 'String'.translate() + }, { + value: 'float', + label: 'Float'.translate() + }, { + value: 'boolean', + label: 'Boolean'.translate() + }, { + value: 'date', + label: 'Date'.translate() + }, { + value: 'datetime', + label: 'Datetime'.translate() + } + ] + }); + remove = new PMUI.field.ButtonField({ + id: 'idRemove', + value: 'Delete'.translate(), + labelVisible: false, + handler: function (e, a) { + that.getParent().removeItem(that); + }, + name: 'delete', + controlsWidth: 60 + }); + that.addItem(field); + that.addItem(typeData); + that.addItem(remove); +}; + +PropertiesReceiveMessage = function (menuOption) { + this.variables = []; + this.onApply = new Function(); + this.onCancel = new Function(); + this.menuOption = menuOption; + Mafe.Window.call(this); + PropertiesReceiveMessage.prototype.init.call(this); +}; +PropertiesReceiveMessage.prototype = new Mafe.Window(); +PropertiesReceiveMessage.prototype.init = function () { + var that = this; + that.setTitle(that.menuOption.getMenuTargetElement().evn_name); + that.setButtons([ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + handler: function () { + that.close(); + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSaveOpen', + text: 'Apply'.translate(), + buttonType: 'success', + height: 31, + handler: function () { + that.onApply(); + } + }) + ]); + that.buttonAdd = new PMUI.ui.Button({ + text: 'Add Variable'.translate(), + buttonType: 'success', + height: 31, + style: {cssProperties: {marginLeft: '50px', marginTop: '10px'}}, + handler: function () { + that.addVariable(); + } + }); + that.form = new Mafe.Form({ + title: that.menuOption.getMenuTargetElement().evn_name, + width: DEFAULT_WINDOW_WIDTH - 60, + style: {cssProperties: {'margin-left': '35px'}} + }); + that.conditionForm = new Mafe.Form({ + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + style: {cssProperties: {'margin-left': '35px'}}, + items: [{ + label: 'Condition', + labelPosition: 'top', + pmType: 'textarea', + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + } + ] + }); + + that.addItem(that.buttonAdd); + that.addItem(that.form); + that.addItem(that.conditionForm); + + that.addVariable(); +}; +PropertiesReceiveMessage.prototype.addVariable = function () { + var that = this, a, i; + a = new RowVariableCondition(this.variables); + that.form.addItem(a); + //force padding + for (i = 0; i < that.form.getItems().length; i += 1) { + that.form.getItems()[i].style.addProperties({'padding': 'initial'}); + } +}; + +EventMessagesGrid = function () { + this.onCreate = new Function(); + this.onEdit = new Function(); + this.onDel = new Function(); + Mafe.Grid.call(this); + EventMessagesGrid.prototype.init.call(this); +}; +EventMessagesGrid.prototype = new Mafe.Grid(); +EventMessagesGrid.prototype.createHTML = function () { + Mafe.Grid.prototype.createHTML.call(this); + this.dom.toolbar.appendChild(this.buttonCreate.getHTML()); + return this.html; +}; +EventMessagesGrid.prototype.init = function () { + var that = this; + that.buttonCreate = new PMUI.ui.Button({ + id: 'idButtonEventMessagesGrid', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: {cssClasses: ['mafe-button-create']}, + handler: function (event) { + that.onCreate(event); + } + }); + that.buttonCreate.defineEvents(); + that.setID('idEventMessagesGrid'); + that.setColumns([{ + id: '', + title: 'Nombre', + sortable: true, + width: '460px', + dataType: 'string', + alignmentCell: 'left', + columnData: 'mes_title' + }, { + id: 'dynaformGridPanelEdit', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-edit']}, + buttonLabel: function (row, data) { + return 'Edit'.translate(); + }, + onButtonClick: function (row, grid) { + that.onEdit(row, grid); + } + }, { + id: 'dynaformGridPanelDelete', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-delete']}, + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + onButtonClick: function (row, grid) { + that.onDel(row, grid); + } + } + ]); + that.load(); +}; +EventMessagesGrid.prototype.show = function () { + +}; +EventMessagesGrid.prototype.create = function () { + +}; +EventMessagesGrid.prototype.load = function () { + var that = this, + dt = [ + {mes_title: 'message1-1'}, + {mes_title: 'message1-2'}, + {mes_title: 'message1-3'}, + {mes_title: 'message1-4'} + ]; + that.setDataItems(dt); +}; + +EventMessagesForm = function () { + Mafe.Form.call(this); + EventMessagesForm.prototype.init.call(this); +}; +EventMessagesForm.prototype = new Mafe.Form(); +EventMessagesForm.prototype.init = function () { + var that = this; + that.setID('idEventMessagesForm'); + that.setItems({ + id: '', + pmType: 'text', + label: 'Name'.translate(), + value: '', + maxLength: 100, + placeholder: '', + name: '', + required: true, + controlsWidth: 300 + }); + that.buttons = [ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + handler: function () { + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformPmtableSave', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + handler: function () { + that.onSave(); + } + }) + ]; +}; +EventMessagesForm.prototype.getButtons = function () { + return this.buttons; +}; + +EventMessages = function () { + Mafe.Window.call(this); + + this.list = new EventMessagesGrid(); + this.form = new EventMessagesForm(); + + EventMessages.prototype.init.call(this); +}; +EventMessages.prototype = new Mafe.Window(); +EventMessages.prototype.init = function () { + var that = this; + that.list.onCreate = function () { + that.resetView(); + that.form.setVisible(true); + }; + that.setTitle("Event Messages"); + that.addItem(that.list); +}; +EventMessages.prototype.showForm = function () { + this.list.show(); +}; + +PMDesigner.eventMessages = function () { + var a = new EventMessages(); + a.open(); +}; +PMDesigner.eventMessages.create = function () { +}; + +var UserPicker = function (options) { + this.relatedField = null; + this.processId = null; + this.workspace = null; + this.window = null; + this.currentVariable = {}; + this.pageSize = 10; + UserPicker.prototype.init.call(this, options); +}; + +UserPicker.prototype.type = 'UserPicker'; + +UserPicker.prototype.family = 'UserPicker'; + +UserPicker.prototype.init = function (options) { + var defaults = { + relatedField: null, + processId: PMDesigner.project.projectId, + workspace: WORKSPACE + }; + + jQuery.extend(true, defaults, options); + + this.setRelatedField(defaults.relatedField) + .setProcessId(defaults.processId) + .setWorkspace(defaults.workspace); +}; + +UserPicker.prototype.setRelatedField = function (field) { + if (field instanceof PMUI.form.Field) { + this.relatedField = field; + } + return this; +}; + +UserPicker.prototype.setProcessId = function (process) { + this.processId = process; + return this; +}; + +UserPicker.prototype.setWorkspace = function (workspace) { + this.workspace = workspace; + return this; +}; + +UserPicker.prototype.open = function (callback) { + var w, rc, fieldC, dataGrid, panel, textField, that = this, button, panelFilter; + button = new PMUI.ui.Button({ + id: 'insertUser', + text: 'Insert User'.translate(), + handler: function () { + if (callback && callback.success && typeof callback.success === 'function') { + callback.success.call(that, that.currentVariable); + } + that.close(); + }, + disabled: true + }); + + textField = new PMUI.field.TextField({ + id: 'textFieldSearch', + label: '', + placeholder: 'Search ...'.translate() + }); + + w = new PMUI.ui.Window({ + id: 'processVariables', + title: 'Process Users'.translate(), + width: 480, + height: 420, + closable: true, + modal: true, + buttons: [ + button + ], + buttonsPosition: 'center' + }); + + textField = new PMUI.field.TextField({ + id: 'textFieldSearch', + label: '', + placeholder: 'Search ...'.translate(), + width: 150 + }); + + dataGrid = new PMUI.grid.GridPanel({ + id: 'gridPanel', + selectable: true, + pageSize: this.pageSize, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'gridPanelUserName', + title: 'User Name'.translate(), + columnData: 'usr_username', + width: 150, + sortable: true, + alignmentCell: 'left' + }, + { + id: 'gridPanelRole', + title: 'Role'.translate(), + columnData: 'usr_role', + width: 230, + sortable: false, + alignmentCell: 'left' + } + ], + onRowClick: function (row, data) { + button.enable(); + that.currentVariable.username = data.usr_username; + that.currentVariable.uid = data.usr_uid; + } + + }); + + panelFilter = new PMUI.core.Panel({ + id: 'panelFilter', + layout: 'vbox', + items: [/*fieldC,*/ textField] + }); + + panel = new PMUI.core.Panel({ + id: 'paneldataGrid', + layout: 'vbox', + items: [panelFilter, dataGrid] + }); + + rc = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + console.log(response); + that.window = w; + dataGrid.setDataItems(response); + w.open(); + w.showFooter(); + w.addItem(panel); + panelFilter.setWidth(430); + textField.controls[0].onKeyUp = function () { + console.log(textField.controls[0].html.value); + dataGrid.filter(textField.controls[0].html.value); + }; + dataGrid.dom.toolbar.style.display = 'none'; + textField.dom.labelTextContainer.innerHTML = ''; + textField.dom.labelTextContainer.style.marginTop = 5; + panel.style.addProperties({'padding-left': 20}); + textField.dom.labelTextContainer.style.display = 'none'; + textField.controls[0].setWidth(200); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + rc.setBaseEndPoint('users').executeRestClient(); +}; + +UserPicker.prototype.close = function () { + if (this.window) { + this.window.close(); + this.window = null; + } +}; + +var CriteriaUserField = function (options) { + this.renderType = (options && options.renderType) || "text"; + PMUI.field.TextField.call(this, options); + this.process = null; + this.workspace = null; + this.buttonHTML = null; + this.rows = options.rows; + this.user_uid = null; + CriteriaUserField.prototype.init.call(this, options); +}; + +CriteriaUserField.prototype = new PMUI.field.TextField(); + +CriteriaUserField.prototype.setProcess = function (process) { + this.process = process; + return this; +}; + +CriteriaUserField.prototype.setWorkspace = function (workspace) { + this.workspace = workspace; + return this; +}; + +CriteriaUserField.prototype.init = function (options) { + var defaults = { + process: PMDesigner.project.projectId, + workspace: WORKSPACE + }; + jQuery.extend(true, defaults, options); + this.setProcess(defaults.process) + .setWorkspace(defaults.workspace); +}; + +CriteriaUserField.prototype.createVariablePicker = function () { + var vp = new UserPicker({ + relatedField: this, + processId: this.process + }); + return vp; +}; + +CriteriaUserField.prototype.setControls = function () { + if (this.controls.length) { + return this; + } + if (this.renderType === 'text') { + this.controls.push(new PMUI.control.TextControl()); + } else { + this.controls.push(new PMUI.control.TextAreaControl({style: {cssProperties: {resize: 'vertical'}}})); + } + return this; +}; + +CriteriaUserField.prototype.createCallBack = function () { + var that = this, oldValue, newValue, init = 0; + return { + success: function (variable) { + init = that.controls[0].html.selectionStart; + prevText = that.controls[0].html.value.substr(0, init); + lastText = that.controls[0].html.value.substr(that.controls[0].html.selectionEnd, that.controls[0].html.value.length); + newValue = variable.username; + + that.setValue(newValue); + that.user_uid = variable.uid; + that.controls[0].html.selectionEnd = init + variable.username.length; + } + }; +}; + +CriteriaUserField.prototype.createHTML = function () { + var button, that = this; + PMUI.field.TextField.prototype.createHTML.call(this); + + button = new PMUI.ui.Button({ + id: 'buttonCriteriaUserField', + text: '...', + handler: function () { + that.createVariablePicker().open(that.createCallBack()); + }, + style: { + cssProperties: { + background: '#2d3e50', + fontSize: 18, + paddingLeft: '15px', + paddingRight: '15px', + borderRadius: '4px', + verticalAlign: 'top' + } + } + }); + + this.buttonHTML = button; + $(this.helper.html).before(button.getHTML()) + this.buttonHTML.style.addProperties({"margin-left": "10px"}); + this.buttonHTML.html.tabIndex = -1; + + if (this.rows != null) + this.controls[0].setHeight(this.rows); + button.defineEvents(); + + return this.html; +}; + +// Overwrite original init function for FormItemFactory +PMUI.form.FormItemFactory.prototype.init = function () { + var defaults = { + products: { + "criteria": CriteriaUserField, + "field": PMUI.form.Field, + "panel": PMUI.form.FormPanel, + "text": PMUI.field.TextField, + "password": PMUI.field.PasswordField, + "dropdown": PMUI.field.DropDownListField, + "radio": PMUI.field.RadioButtonGroupField, + "checkbox": PMUI.field.CheckBoxGroupField, + "textarea": PMUI.field.TextAreaField, + "datetime": PMUI.field.DateTimeField, + "optionsSelector": PMUI.field.OptionsSelectorField, + "buttonField": PMUI.field.ButtonField, + "annotation": PMUI.field.TextAnnotationField + }, + defaultProduct: "panel" + }; + this.setProducts(defaults.products) + .setDefaultProduct(defaults.defaultProduct); +}; + +/** + * Class representing a Web Entry + * @param relatedShape + * @constructor + */ +var WebEntry = function (relatedShape) { + this.relatedShape = null; + this.groupType = null; + this.groupLabel = null; + this.stepsType = null; + this.actUid = null; + this.evenUid = null; + this.weeUid = null; + this.stepsAssigned = null; + this.elementAccordionOpen = null; + this.configWebEntry = null; + this.isNewWebEntry = null; + this.windowWebEntry = null; + this.windowAlternative = null; + this.tabForm = null; + this.tabProperties = null; + this.tabLink = null; + this.confirmWindow = null; + this.tabPanelWindow = null; + this.suggestUser = null; + this.stepsAssignTree = null; + this.stepsAssignAccordion = null; + this.labelsPanel = null; + this.userGuest = {}; + WebEntry.prototype.initialize.call(this, relatedShape); +}; +/** + * A module representing a Web Entry + **/ +WebEntry.prototype = { + /** + * Sets the actUid + * @param {string} actUid + */ + setActUid: function (actUid) { + this.actUid = actUid; + return this; + }, + + /** + * Sets the evenUid + * @param {string} evenUid + */ + setEvnUid: function (evenUid) { + this.evenUid = evenUid; + return this; + }, + + /** + * Sets the weeUid + * @param {string} weeUid + */ + setWeeUid: function (weeUid) { + this.weeUid = weeUid; + return this; + }, + + /** + * Sets the configWebEntry + * @param {object} configWebEntry + */ + setConfigWebEntry: function (configWebEntry) { + this.configWebEntry = configWebEntry; + return this; + }, + + /** + * Sets the isNewWebEntry + * @param {boolean} isNewWebEntry + */ + setIsNewWebEntry: function (isNewWebEntry) { + this.isNewWebEntry = isNewWebEntry; + return this; + }, + + /** + * Sets the windowWebEntry + * @param {object} windowWebEntry + */ + setWindowWebEntry: function (windowWebEntry) { + this.windowWebEntry = windowWebEntry; + return this; + }, + + /** + * Sets the windowAlternative + * @param {object} windowAlternative + */ + setWindowAlternative: function (windowAlternative) { + this.windowAlternative = windowAlternative; + return this; + }, + + /** + * Sets the relatedShape + * @param {object} relatedShape + */ + setRelatedShape: function (relatedShape) { + this.relatedShape = relatedShape; + return this; + }, + + /** + * Sets the tabForm + * @param {object} tabForm + */ + setTabForm: function (tabForm) { + this.tabForm = tabForm; + return this; + }, + + /** + * Sets the tabProperties + * @param {object} tabProperties + */ + setTabProperty: function (tabProperties) { + this.tabProperties = tabProperties; + return this; + }, + + /** + * Sets the tabLink + * @param {object} tabLink + */ + setTabLink: function (tabLink) { + this.tabLink = tabLink; + return this; + }, + + /** + * Sets the confirmWindow + * @param {object} confirmWindow + */ + setConfirmWin: function (confirmWindow) { + this.confirmWindow = confirmWindow; + return this; + }, + + /** + * Sets the tabPanelWindow + * @param {object} tabPanelWindow + */ + setTabPanelWindow: function (tabPanelWindow) { + this.tabPanelWindow = tabPanelWindow; + return this; + }, + + /** + * Sets the suggestUser + * @param {object} suggestUser + */ + setSuggestUser: function (suggestUser) { + this.suggestUser = suggestUser; + return this; + }, + + /** + * Sets the stepsAssignTree + * @param {object} stepsAssignTree + */ + setStepsTree: function (stepsAssignTree) { + this.stepsAssignTree = stepsAssignTree; + return this; + }, + + /** + * Sets the stepsAssignAccordion + * @param {object} stepsAssignAccordion + */ + setStepsAccordion: function (stepsAssignAccordion) { + this.stepsAssignAccordion = stepsAssignAccordion; + return this; + }, + + /** + * Sets the labelsPanel + * @param {object} labelsPanel + */ + setLabelPanel: function (labelsPanel) { + this.labelsPanel = labelsPanel; + return this; + }, + + /** + * Sets the userGuest + * @param userGuest + */ + setUserGuest: function (userGuest) { + this.userGuest = userGuest; + return this; + }, + + /** + * Get the userGuest + * @returns {Object} userGuest + */ + getUserGuest: function () { + return this.userGuest || {}; + }, + + /** + * Get the actUid value + * @returns {null|*|string} The actUid value + */ + getActUid: function () { + return this.actUid || ""; + }, + + /** + * Get the isNewWebEntry value + * @returns {null|*|boolean} The isNewWebEntry value + */ + getRelatedShape: function () { + return this.relatedShape || []; + }, + + /** + * Get the evenUid value + * @returns {null|*|string} The evenUid value + */ + getEvnUid: function () { + return this.evenUid || ""; + }, + + /** + * Get the weeUid value + * @returns {null|*|string} The weeUid value + */ + getWeeUid: function () { + return this.weeUid || ""; + }, + + /** + * Get the configWebEntry value + * @returns {*|null|Array} The configWebEntry value + */ + getConfigWebEntry: function () { + return this.configWebEntry || []; + }, + + /** + * Get the isNewWebEntry value + * @returns {null|*|boolean} The isNewWebEntry value + */ + getIsNewWebEntry: function () { + return this.isNewWebEntry || false; + }, + + /** + * Get the windowWebEntry value + * @returns {null|*} The windowWebEntry value + */ + getWindowWebEntry: function () { + return this.windowWebEntry || null; + }, + + /** + * Get the windowAlternative value + * @returns {*|null} The windowAlternative value + */ + getWindowAlternative: function () { + return this.windowAlternative || null; + }, + + /** + * Get the tabForm value + * @returns {*|null} The tabForm value + */ + getTabForm: function () { + return this.tabForm || null; + }, + + /** + * Get the tabProperties value + * @returns {null|*} The tabProperties value + */ + getTabProperty: function () { + return this.tabProperties || null; + }, + + /** + * Get the tablink value + * @returns {null|*} The tablink value + */ + getTabLink: function () { + return this.tabLink || null; + }, + + /** + * Get the confirmWindow value + * @returns {null|*} The confirmWindow value + */ + getConfirmWin: function () { + return this.confirmWindow || null; + }, + + /** + * Get the tabPanelWindow + * @returns {*|null} + */ + getTabPanelWindow: function () { + return this.tabPanelWindow || null; + }, + + /** + * get the suggestUser value + * @returns {*|null} The suggestUser value + */ + getSuggestUser: function () { + return this.suggestUser || null; + }, + + /** + * Sets the stepsAssignTree + * @returns {*|null} + */ + getStepsTree: function () { + return this.stepsAssignTree || null; + }, + + /** + * Get the stepsAssignAccordion value + * @returns {*|null} The stepsAssignAccordion value + */ + getStepsAccordion: function () { + return this.stepsAssignAccordion || null; + }, + + /** + * get the labelsPanel value + * @returns {null|*} The labelsPanel value + */ + getLabelPanel: function () { + return this.labelsPanel || null; + }, + + /** + * initialize App + * @param relatedShape + */ + initialize: function (relatedShape) { + this.groupType = [ + 'DYNAFORM', 'INPUT_DOCUMENT', + 'OUTPUT_DOCUMENT', 'EXTERNAL' + ]; + this.groupLabel = [ + 'Dynaform (s)'.translate(), 'Input Document (s)'.translate(), + 'OutPut Document (s)'.translate(), 'External (s)'.translate() + ]; + this.stepsType = { + 'DYNAFORM': 'Dynaform'.translate(), + 'INPUT_DOCUMENT': 'Input Document'.translate(), + 'OUTPUT_DOCUMENT': 'Output Document'.translate(), + 'EXTERNAL': 'External'.translate() + }; + + this.setRelatedShape(relatedShape) + .setEvnUid(relatedShape.evn_uid); + + if (this.getRelatedShape().getPorts().getFirst()) { + this.setActUid(this.getRelatedShape().getPorts().getFirst().getConnection().getDestPort().getParent() + .act_uid); + } + if (__env.USER_GUEST) { + $.extend(true, this.userGuest, __env.USER_GUEST); + } + this.stepsAssigned = new PMUI.util.ArrayList(); + this.elementAccordionOpen = new PMUI.util.ArrayList(); + }, + + /** + * Render form + * @returns {WebEntry} + */ + render: function () { + this.getWindow().addItem(this.getTabPanel()); + this.getWindow().open(); + this.getWindow().showFooter(); + this.initializeData(); + return this; + }, + + /** + * Populate Web Entry data + */ + initializeData: function () { + //Pupulate web entry data + this.getInstanceWebEntryData(); + this.setWebEntryConfiguration(); + this.initializeAccordionAndTreepanelData(); + }, + + /** + * Populate accordion and treepanel data + */ + initializeAccordionAndTreepanelData: function () { + var that = this; + //clear global array stepsAssigned + this.stepsAssigned.clear(); + //get accordion data + this.getAccordionData( + function (xhr, response) { + //populate data accordion tabForms + that.loadAccordionItems(response); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + //get getTreePanelData data + this.getTreePanelData( + function (xhr, response) { + //populate data treePanel tabForms + that.loadTreePanelData(response); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + this.addEventSortableInAccordionElements(); + this.addEventSortableInTreePanelElements(); + }, + + /** + * Get all dynaforms + * Execute restClient(GET/project/dynaforms) + * @param successCallback + * @param failureCallback + */ + getDynaforms: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'dynaforms', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get users + * Execute restClient(GET/users/uid_usr) + * @param uidUser + * @param successCallback + * @param failureCallback + */ + getUserData: function (uidUser, successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'users/' + uidUser, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).setBaseEndPoint("").executeRestClient(); + }, + + /** + * Get WebEntry Configuration + * Execute restClient(GET/web-entry-event/event/) + * Execute restClient(POST/web-entry-event/) + * @param successCallback + * @returns {Array} + */ + getWebEntryConfiguration: function (successCallback) { + var that = this, + restProxy = new PMRestClient({ + endpoint: 'web-entry-event/event/' + that.getEvnUid(), + typeRequest: "get", + functionSuccess: function (xhr, response) { + successCallback(response, false); + that.initializeSomeVariables(response, false); + }, + functionFailure: function (xhr, response) { + restProxy = new PMRestClient({ + endpoint: 'web-entry-event', + typeRequest: "post", + data: { + act_uid: that.getActUid(), + evn_uid: that.getEvnUid(), + wee_title: that.getEvnUid(), + we_type: "MULTIPLE", + we_authentication: "LOGIN_REQUIRED", + we_callback: "PROCESSMAKER", + we_callback_url: "", + we_show_in_new_case: "0", + usr_uid: that.getUserGuest().uid || '' + }, + functionSuccess: function (xhr, response) { + successCallback(response, true); + that.initializeSomeVariables(response, true); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + } + }); + restProxy.executeRestClient(); + return this; + }, + + /** + * Update data Web Entry Configuration + * Execute restClient(PUT/web-entry-event/weeuid) + * @param data + * @param successCallback + * @param failureCallback + * @returns {PMRestClient} + */ + updateWebEntryConfiguration: function (data, successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + this.weeUid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get Accordion Data (Tab Forms) + * Execute restClient(GET/steps, GET/step/triggers) + * @returns {Array} + */ + getAccordionData: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/steps', + method: 'GET' + }, { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/step/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).executeRestClient(); + }, + + /** + * Get TreePanel Data (TabForm) + * Execute restClient(GET/available-steps GET/triggers) + * @returns {Array} + */ + getTreePanelData: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/available-steps', + method: 'GET' + }, { + url: 'triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get steps Availables (TreePanel) + * Execute restClient(GET/available-steps) + * @param successCallback + * @param failureCallback + * @returns {Array} + */ + getStepAvailables: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/available-steps', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Load Skin and Languages + * Execute restClient(GET/system/languages GET/system/skins) + * @returns {Array} + */ + getSkinLanguage: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'system/languages', + method: 'GET' + }, { + url: 'system/skins', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).setBaseEndPoint("").executeRestClient(); + }, + + /** + * Delete the WebEntry configuration. + * @param successCallback + * @param failureCallback + */ + deleteWebEntryConfiguration: function (successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + this.weeUid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Generate webEntry Link + * @param weeUid + * @param successCallback + * @param failureCallback + */ + generateLink: function (weeUid, successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + weeUid + '/generate-link', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Creates an instance of the WebEntry class + * @returns {null} + */ + getInstanceWebEntryData: function () { + this.getWebEntryConfiguration( + function (webEntryEvent, isNew) { + if (isNew) { + webEntryEvent.we_type = 'SINGLE'; + webEntryEvent.we_authentication = 'ANONYMOUS'; + webEntryEvent.wee_url = ''; + webEntryEvent.wee_title = ''; + } + } + ); + return this; + }, + + /** + * Get Main Container Window + * @returns {PMUI.ui.Window} + */ + getWindow: function () { + if (this.getWindowWebEntry() === null) { + this.setWindowWebEntry(this.buildWindow()); + } + return this.getWindowWebEntry(); + }, + + /** + * Build Window Container + * @returns {PMUI.ui.Window} + */ + buildWindow: function () { + var that = this; + return new PMUI.ui.Window({ + id: 'windowWebEntry', + title: 'Web Entry'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + onBeforeClose: function () { + if (that.isNewWebEntry) { + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } else { + that.getWindow().close(); + } + that.getWindow().close(); + }, + buttonPanelPosition: 'bottom', + buttonsPosition: 'right', + buttons: [ + { + id: 'windowWebEntryButtonDelete', + text: 'Delete'.translate(), + handler: function () { + that.handlerDeleteWebEntry(); + }, + buttonType: "error" + }, + { + id: 'windowWebEntryButtonCancel', + text: 'Cancel'.translate(), + handler: function () { + if (that.isNewWebEntry) { + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } else { + that.getWindow().close(); + } + }, + buttonType: "error" + }, + { + id: 'windowWebEntryButtonSave', + text: 'Save'.translate(), + handler: function (e) { + that.checkUserGuest('saveConfig'); + }, + buttonType: 'success' + } + ] + }); + }, + + /** + * Return Second Window Container + * @returns {PMUI.ui.Window} + */ + getWindowAlternativeForm: function () { + if (this.getWindowAlternative() === null) { + this.setWindowAlternative(this.buildWindowAlternative()); + } + return this.getWindowAlternative(); + }, + + /** + * Build Second Window Container + * @returns {PMUI.ui.Window} + */ + buildWindowAlternative: function () { + return new PMUI.ui.Window({ + visibleFooter: true, + title: 'Trigger'.translate(), + footerAlign: 'right', + footerItems: [{ + text: "@@", + id: "secondaryWindow-criteria", + style: { + cssProperties: { + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + }, + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-cancel', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-save', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + } + }] + }); + }, + + /** + * Get TabPanel Container + * @returns {TabPanel} + */ + getTabPanel: function () { + if (this.getTabPanelWindow() === null) { + this.setTabPanelWindow(this.buildPanelWindow()); + } + return this.getTabPanelWindow(); + }, + + /** + * Build TabPanel (TabForms, TabProperties, TabLink) + * @returns {PMUI.panel.TabPanel} + */ + buildPanelWindow: function () { + return new PMUI.panel.TabPanel({ + id: 'windowWebEntryTabPanel', + width: DEFAULT_WINDOW_WIDTH - 50, + items: [ + { + id: 'tabForms', + title: 'Forms'.translate(), + panel: this.getTabForms() + }, + { + id: 'tabProperties', + title: 'Properties'.translate(), + panel: this.getTabProperties() + }, + { + id: 'tabLink', + title: 'Link'.translate(), + panel: this.getTabLinkForm() + } + ], + style: { + cssProperties: { + 'margin-left': '10px' + } + }, + itemsPosition: { + position: 'left' + } + }); + }, + + /** + * Get Panel TabForms + * @returns {Panel} + */ + getTabForms: function () { + if (this.getTabForm() === null) { + this.setTabForm(this.buildTabForms()); + } + return this.getTabForm(); + }, + + /** + * Build Tab Forms + * @returns {PMUI.core.Panel} + */ + buildTabForms: function () { + var that = this, + singleDynaform, + stepsMainContainer; + + singleDynaform = new PMUI.form.Form({ + id: 'singleDynaform', + width: DEFAULT_WINDOW_WIDTH - 220, + height: 180, + name: 'singleDynaform', + visibleHeader: false, + items: [ + { + id: 'singleDynaformRadio', + pmType: 'radio', + labelVisible: false, + value: 'SINGLE', + name: 'options', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'singleDynaform', + label: 'Single Dynaform'.translate(), + value: 'SINGLE', + selected: true + } + ], + onChange: function (newVal, oldVal) { + that.weeFormModeChange(newVal, oldVal); + }, + labelWidth: '0%' + }, + { + id: 'weeSelectDynaform', + name: 'tabFormsDropdownDyanform', + pmType: 'dropdown', + label: 'Dynaform'.translate(), + helper: 'Select Dynaform use in case.'.translate(), + required: true, + controlsWidth: 400, + labelWidth: '25%', + style: { + cssProperties: { + 'padding-left': '100px' + } + }, + options: [ + { + label: 'Select Dynaform'.translate(), + value: '' + } + ] + + }, + { + id: 'multipleStepsRadio', + pmType: 'radio', + labelVisible: false, + value: '', + name: 'options', + required: false, + controlPositioning: 'vertical', + maxDirectionOptions: 4, + options: [ + { + id: 'multipleSteps', + label: 'Multiple Steps'.translate(), + value: 'MULTIPLE' + } + ], + onChange: function (newVal, oldVal) { + that.weeFormModeChange(newVal, oldVal); + }, + labelWidth: '0%' + + } + ] + }); + + stepsMainContainer = new PMUI.core.Panel({ + id: 'stepsMainContainer', + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH - 220, + items: [ + that.getStepsAssignTree(), + that.getStepsAssignAccordion() + ] + }); + + return new PMUI.core.Panel({ + id: 'mainContainer', + layout: 'vbox', + width: DEFAULT_WINDOW_WIDTH - 220, + items: [ + singleDynaform, + that.getLabelsPanel(), + stepsMainContainer + ] + }); + }, + + /** + * Get Panel TabProperties + * @returns {Panel} + */ + getTabProperties: function () { + if (this.getTabProperty() === null) { + this.setTabProperty(this.buildTabProperties()); + } + return this.getTabProperty(); + }, + + /** + * Build TabProperties + * @returns {PMUI.core.Panel} + */ + buildTabProperties: function () { + var that = this, + propertiesForm; + + propertiesForm = new PMUI.form.Form({ + id: 'idTabFormProperties', + width: DEFAULT_WINDOW_WIDTH - 220, + visibleHeader: false, + items: [ + { + id: 'tabPropertiesWebEntryTitle', + pmType: 'text', + name: 'tabPropertiesWebEntryTitle', + valueType: 'string', + label: 'Web Entry Title'.translate(), + placeholder: 'Enter a title displayed on web entry window (if applies)'.translate(), + helper: 'Enter a title displayed on web entry window (if applies).'.translate(), + required: false, + controlsWidth: 458, + labelWidth: '23%' + }, + { + id: 'tabPropRadioAuthentication', + pmType: 'radio', + labelVisible: true, + label: 'Authentication'.translate(), + value: 'ANONYMOUS', + name: 'authentication', + required: true, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'tabPropertiesOptionRadioAnonymous', + label: 'Anonymous'.translate(), + value: 'ANONYMOUS', + selected: false + } + ], + onChange: function (newVal, oldVal) { + that.anonimusProcedure(newVal, oldVal); + }, + labelWidth: '23%' + }, + { + id: 'tabPropertiesRequireUserLogin', + pmType: 'radio', + labelVisible: false, + value: 'LOGIN_REQUIRED', + required: false, + name: 'authentication', + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'tabPropertiesRadioRequireUserLogin', + label: 'Require user login'.translate(), + value: 'LOGIN_REQUIRED', + selected: false + } + ], + onChange: function (newVal, oldVal) { + that.loginRequired(newVal, oldVal); + }, + labelWidth: '23%' + }, + { + id: 'tabPropertiesHideLoogedInformationBar', + pmType: 'checkbox', + name: 'tabPropertiesHideLoogedInformationBar', + labelVisible: false, + disabled: true, + options: [ + { + id: 'hideLoogedInformationBar', + label: 'Hide Logged Information Bar'.translate(), + value: '1', + selected: false + } + ], + style: { + cssProperties: { + 'padding-left': '50px' + } + } + }, + { + id: 'tabPropertiesRadioCallback', + pmType: 'radio', + labelVisible: true, + label: 'Callback Action'.translate(), + value: 'PROCESSMAKER', + required: true, + disabled: false, + controlPositioning: 'vertical', + labelPosition: 'left', + helper: 'Callback Action...'.translate(), + maxDirectionOptions: 4, + options: [ + { + id: 'redirectPM', + label: 'Redirect to ProcessMaker predefined response page'.translate(), + value: 'PROCESSMAKER', + selected: true + }, + { + id: 'redirectURL', + label: 'Redirect to custom URL'.translate(), + value: 'CUSTOM' + }, + { + id: 'redirectCustom', + label: 'Redirect to custom URL and clear login info'.translate(), + value: 'CUSTOM_CLEAR' + } + ], + onChange: function (newVal, oldVal) { + that.callbackActionChange(newVal, oldVal); + + }, + labelWidth: '23%' + }, + new CriteriaField({ + id: 'criteriaFieldCustomUrl', + pmType: 'text', + name: 'criteriaFieldCustomUrl', + label: 'Custom URL'.translate(), + placeholder: 'Enter a valid URL to be redirected when entry will be completed'.translate(), + labelWidth: '23%', + controlsWidth: 455, + required: true, + disabled: true + }), + { + id: 'showInNewCase', + pmType: 'checkbox', + name: 'showInNewCase', + label: 'Show task in New Case'.translate(), + labelVisible: true, + options: [ + { + id: 'showTaskInNewCase', + value: 'showCase', + selected: false + } + ], + onChange: function (newValue, oldValue) { + this.setValue(newValue); + } + } + ] + }); + + $(propertiesForm.getItem('tabPropRadioAuthentication').getHTML()) + .append($(that.getSuggestField().createHTML())); + + return propertiesForm; + }, + + /** + * Get Panel TabLink + * @returns {Panel} + */ + getTabLinkForm: function () { + if (this.getTabLink() === null) { + this.setTabLink(this.buildTabLink()); + } + return this.getTabLink(); + }, + + /** + * Build TabLink + * @returns {PMUI.core.Panel} + */ + buildTabLink: function () { + var that = this, + tfromLink; + + tfromLink = new PMUI.form.Form({ + id: 'idTabFormLink', + width: DEFAULT_WINDOW_WIDTH - 220, + visibleHeader: false, + items: [ + { + id: 'tabLinkRadioGeneration', + pmType: 'radio', + labelVisible: true, + label: 'Link Generation'.translate(), + value: 'DEFAULT', + name: 'options', + required: true, + controlPositioning: 'vertical', + labelPosition: 'left', + helper: 'Link Generation'.translate(), + controlsWidth: 485, + labelWidth: '24.5%', + maxDirectionOptions: 3, + options: [ + { + id: 'generateLinkDefaultValues', + label: 'Generate link using workspace default values (skin, language)'.translate(), + value: 'DEFAULT', + selected: 'true' + }, + { + id: 'advancedLinkGeneration', + label: 'Advanced link generation'.translate(), + value: 'ADVANCED' + } + ], + onChange: function (newVal) { + that.linkGenerationOnChange(newVal); + }, + labelWidth: '18%' + }, + { + id: 'tabLinkDropdownSkin', + name: 'tabLinkDropdownSkin', + pmType: 'dropdown', + label: 'Skin'.translate(), + helper: 'Select a Skin.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: '24.5%', + onChange: function () { + that.setLinkText(tfromLink, ''); + }, + options: [ + { + label: 'Select a Skin'.translate(), + value: '' + } + ] + }, + { + id: 'tabLinkDropdownLanguage', + name: 'tabLinkDropdownLanguage', + pmType: 'dropdown', + label: 'Language'.translate(), + helper: 'Select a language.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: '24.5%', + onChange: function () { + that.setLinkText(tfromLink, ''); + }, + options: [ + { + label: 'Select a language'.translate(), + value: '' + } + ] + }, + { + id: 'tablinkTextCustomDomain', + pmType: 'text', + name: 'tablinkTextCustomDomain', + valueType: 'string', + label: 'Custom Hostname'.translate(), + placeholder: 'https://example.com:8080'.translate(), + helper: 'Protocol and Hostname, port is optional.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: "24.5%", + validators: [ + { + pmType: "regexp", + criteria: /^(https?:\/\/)?(((\d{1,3}\.){3}\d{1,3})|(([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?))(:\d+)?$/i, + errorMessage: 'Enter a Protocol and Hostname valid value.'.translate() + } + ], + onChange: function () { + that.setLinkText(tfromLink, ''); + } + }, + { + id: 'panelLinkForm', + pmType: 'panel', + layout: 'hbox', + required: true, + width: '155px', + style: { + cssProperties: { + 'margin-left': '-10px', + 'margin-top': '-10px' + } + }, + items: [ + { + pmType: 'annotation', + text: 'Web Entry URL:'.translate(), + id: 'webEntryLinkLabel', + required: true, + name: 'webEntryLinkLabel' + }, + { + pmType: 'annotation', + id: 'webEntryLink', + name: 'webEntryLink', + text: '', + required: true, + textType: 1, + style: { + cssProperties: { + 'margin-left': '-173px' + } + } + } + ] + }, + new PMUI.field.ButtonField({ + id: 'buttonFieldGenerateLink', + pmType: 'buttonField', + value: 'Generate Link'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 180, + proportion: 0.6, + handler: function (field) { + that.checkUserGuest('generateLink'); + }, + buttonType: 'success', + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '10px', + 'padding-right': '0px', + 'padding-bottom': '1px', + 'padding-left': '130px' + } + } + }) + ] + }); + + tfromLink.getItem('buttonFieldGenerateLink').getControl(0).button.setButtonType('success'); + + return tfromLink; + }, + + /** + * Get MessageWindow Container + * @returns {PMUI.ui.MessageWindow} + */ + getConfirmWindow: function () { + if (this.getConfirmWin() === null) { + this.setConfirmWin(this.buildConfirmWindow()); + } + return this.getConfirmWin(); + }, + + /** + * Build MessageWindow + * @returns {PMUI.ui.MessageWindow} + */ + buildConfirmWindow: function () { + return new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: '', + message: '', + footerItems: [ + { + id: 'confirmWindow-footer-no', + text: 'No'.translate(), + visible: true, + buttonType: 'error' + }, { + id: 'confirmWindow-footer-yes', + text: 'Yes'.translate(), + visible: true, + buttonType: 'success' + } + ], + visibleFooter: true + }); + }, + + /** + * Handler button for delete web entry config + */ + handlerDeleteWebEntry: function () { + var that = this, + confirmWindow, + yesButton, + noButton; + confirmWindow = that.getConfirmWindow() + .setMessage('Are you sure you want to delete the Web Entry configuration?'.translate()); + yesButton = that.getConfirmWindow().footer.getItem('confirmWindow-footer-yes'); + yesButton.setHandler(function () { + confirmWindow.close(); + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + noButton = that.getConfirmWindow().footer.getItem('confirmWindow-footer-no'); + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + that.getConfirmWindow().open(); + return this; + }, + + /** + * Handler button for save web entry config + * @param method + */ + checkUserGuest: function (method) { + var title = 'Web Entry Anonymous Authentication'.translate(), + message = ('Current selected user to act as anonymous will be replaced by the Guest user. ' + + 'This action cannot be undone. Do you want to proceed?').translate(); + + //Validate the data before saving the configuration or generate the link + if (this.isValidWebEntryData(method)) { + (method === 'saveConfig') ? this.handlerSaveButton(message, title) : this.handlerGenerateLinkButton(message, title); + } + return this; + }, + + /** + * Check userGuestUID and save Config + * @param message + * @param title + * @returns {WebEntry} + */ + handlerSaveButton: function (message, title) { + var that = this, + messageWindow = this.getConfirmWindow(); + //Validation is done to be compatible with older versions of webEntry (Now exist guest-type user). + if (this.getUserGuest().uid && this.getSuggestField().value !== this.getUserGuest().uid) { + messageWindow.setMessage(message); + messageWindow.setTitle(title); + + //handler for cancel button + messageWindow.footer.getItem('confirmWindow-footer-no').setHandler(function () { + messageWindow.close(); + }); + + //handler for yes button + messageWindow.footer.getItem('confirmWindow-footer-yes').setHandler(function () { + messageWindow.close(); + that.getSuggestField().set('value', that.getUserGuest().uid); + that.saveWebEntryConfiguration( + function () { + that.getWindow().close(); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + messageWindow.open(); + } else { + //For new configurations we save the configuration without any GUEST user validation. + this.saveWebEntryConfiguration( + function () { + that.getWindow().close(); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } + return this; + }, + + /** + * Check userGuestUID and generate webEntry Link + * @param message + * @param title + * @returns {WebEntry} + */ + handlerGenerateLinkButton: function (message, title) { + var that = this, + formLink = this.getTabLinkForm(), + messageWindow = this.getConfirmWindow(); + //Validation is done to be compatible with older versions of webEntry (Now exist guest-type user). + if (this.getUserGuest().uid && this.getSuggestField().value !== this.getUserGuest().uid) { + messageWindow.setMessage(message); + messageWindow.setTitle(title); + + //handler for cancel button + messageWindow.footer.getItem('confirmWindow-footer-no').setHandler(function () { + messageWindow.close(); + }); + //handler for yes button + + messageWindow.footer.getItem('confirmWindow-footer-yes').setHandler(function () { + messageWindow.close(); + that.getSuggestField().set('value', that.getUserGuest().uid); + that.setLinkText(formLink, ''); + //save Web Entry Configuration + that.saveWebEntryConfiguration( + function (xhr, response) { + that.getConfigWebEntry().usr_uid = response.usr_uid || that.getConfigWebEntry().usr_uid; + //generate webEntry Link + that.generateLink( + that.getWeeUid(), + function (xhr, response) { + that.setLinkText(formLink, (response.link) ? response.link : ''); + that.initializeAccordionAndTreepanelData(); + that.getSuggestField().html.find("input") + .val(that.getUserGuest().firstname + " " + "(" + that.getUserGuest().username + ")"); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + messageWindow.open(); + } else { + //For new configurations we generate the webEntry Link without any GUEST user validation. + this.saveWebEntryConfiguration( + function () { + that.generateLink( + that.getWeeUid(), + function (xhr, response) { + that.setLinkText(formLink, (response.link) ? response.link : ''); + that.initializeAccordionAndTreepanelData(); + }, + function (xhr, response) { + that.setLinkText(formLink, ''); + PMDesigner.msgWinError(response.error.message); + } + ); + }, + function (xhr, response) { + that.setLinkText(formLink, ''); + PMDesigner.msgWinError(response.error.message); + } + ); + } + return this; + }, + + /** + * Get Steps AssignAccordion + * @returns {PMUI.panel.AccordionPanel} + */ + getStepsAssignAccordion: function () { + if (this.getStepsAccordion() === null) { + this.setStepsAccordion(this.buildStepsAssignAccordion()); + } + return this.getStepsAccordion(); + }, + + /** + * Build Steps Assign Accordion + * @returns {PMUI.panel.AccordionPanel} + */ + buildStepsAssignAccordion: function () { + var that = this; + return new PMUI.panel.AccordionPanel({ + id: 'stepsAssignAccordion', + multipleSelection: true, + hiddenTitle: true, + proportion: 1.5, + style: { + cssProperties: { + margin: '0px 0px 0px 0px' + }, + cssClasses: ['mafe-border-panel'] + }, + listeners: { + select: function (accordionItem, event) { + var buttonExpand, buttonCollapse, itemsAccod; + itemsAccod = that.getStepsAssignAccordion().items; + if (accordionItem.collapsed) { + if (that.elementAccordionOpen.indexOf(accordionItem) > -1) { + that.elementAccordionOpen.remove(accordionItem); + } + } else { + if (that.elementAccordionOpen.indexOf(accordionItem) === -1) { + that.elementAccordionOpen.insert(accordionItem); + } + } + buttonCollapse = that.getLabelsPanel().getItem('collapse-button'); + buttonExpand = that.getLabelsPanel().getItem('expand-button'); + if (that.elementAccordionOpen.getSize() === 0) { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(true); + } else if (that.elementAccordionOpen.getSize() === itemsAccod.getSize()) { + buttonExpand.setDisabled(true); + buttonCollapse.setDisabled(false); + } else { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(false); + } + } + } + }); + }, + + /** + * Get steps AssignTree + * @returns {PMUI.core.Panel} + */ + getStepsAssignTree: function () { + if (this.getStepsTree() === null) { + this.setStepsTree(this.buildStepsAssignTree()); + } + return this.getStepsTree(); + }, + + /** + * Build steps AssignTree + * @returns {PMUI.panel.TreePanel} + */ + buildStepsAssignTree: function () { + return new PMUI.panel.TreePanel({ + id: 'stepsAssignTree', + proportion: 0.5, + height: 475, + filterable: true, + autoBind: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nodeDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true, + collapsed: false, + itemsDataBind: 'items', + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + behavior: 'drag' + }, + style: { + cssProperties: { + margin: '0px 0px 0px 0px', + float: 'left', + overflow: 'auto' + }, + cssClasses: ['mafe-border-panel'] + } + }); + }, + + /** + * Get Label Panel + * @returns {PMUI.core.Panel} + */ + getLabelsPanel: function () { + if (this.getLabelPanel() === null) { + this.setLabelPanel(this.buildLabelPanel()); + } + return this.getLabelPanel(); + }, + + /** + * Build Label Panel + * @returns {PMUI.core.Panel} + */ + buildLabelPanel: function () { + var that = this; + return new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH - 220, + layout: "hbox", + items: [ + new PMUI.field.TextAnnotationField({ + text: 'Available Elements'.translate(), + proportion: 1.12, + text_Align: 'center' + }), + new PMUI.field.TextAnnotationField({ + text: 'Assigned Elements (Drop here)'.translate(), + proportion: 1.3, + text_Align: 'center' + }), + new PMUI.ui.Button({ + buttonType: 'link', + text: 'Expand all'.translate(), + id: 'expand-button', + proportion: 1.2, + handler: function () { + that.expandAndCollapseHandler('collapse-button', 'expand-button'); + } + }), + new PMUI.ui.Button({ + buttonType: 'link', + text: 'Collapse all'.translate(), + id: 'collapse-button', + proportion: 1.1, + disabled: true, + handler: function () { + that.expandAndCollapseHandler('expand-button', 'collapse-button'); + } + }) + ] + }); + }, + + /** + * Get SuggestField Control + * @returns {SuggestField} + */ + getSuggestField: function () { + if (this.getSuggestUser() === null) { + this.setSuggestUser(this.createSugesstField()); + } + return this.getSuggestUser(); + }, + + /** + * Create Field Suggest (User) + * @returns {SuggestField} + */ + createSugesstField: function () { + return new SuggestField({ + id: 'idSuggestUser', + label: 'Users'.translate(), + width: 450, + placeholder: 'Suggest users'.translate(), + required: true, + disabled: true, + helper: 'When the form is submitted a new case is created with this user account.'.translate(), + dynamicLoad: { + data: [{ + key: 'usr_uid', + label: ['usr_firstname', 'usr_lastname', '(', 'usr_username', ')'] + }], + keys: { + url: HTTP_SERVER_HOSTNAME + '/api/1.0/' + WORKSPACE, + accessToken: credentials.access_token, + endpoints: [{ + method: 'GET', + url: 'users' + }] + } + } + }); + }, + + /** + * Generate Web Entry Link + * @param formLink + * @param linkText + */ + setLinkText: function (formLink, linkText) { + formLink.getItem('panelLinkForm').getItem('webEntryLink') + .setText('' + linkText + ''); + return this; + }, + + /** + * Initialize Some Variables for web Entry (weeUId, actUid, evnUid, response, isNewWebEntry) + * @param response + * @param newWebEntry + */ + initializeSomeVariables: function (response, newWebEntry) { + this.setWeeUid(response.wee_uid) + .setActUid(response.act_uid) + .setEvnUid(response.evn_uid) + .setConfigWebEntry(response) + .setIsNewWebEntry(newWebEntry); + return this; + }, + + /** + * Collapse and Expand Accordion Handler + * @param enableItem + * @param disableItem + */ + expandAndCollapseHandler: function (enableItem, disableItem) { + var items, + i, + item; + items = this.getStepsAssignAccordion().getItems(); + this.getLabelsPanel().getItem(enableItem).setDisabled(false); + this.getLabelsPanel().getItem(disableItem).setDisabled(true); + if (enableItem === 'collapse-button') { + this.elementAccordionOpen.clear(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + item.expand(); + this.elementAccordionOpen.insert(item); + } + } else { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + this.elementAccordionOpen.remove(item); + item.collapse(); + } + } + }, + + /** + * Disable MultipleSteps or Single Dynaform (tabForms) + * @returns {disableMultipleSteps} + */ + weeFormModeChange: function (newVal, oldVal) { + if (newVal === 'SINGLE') { + this.disableMultipleSteps('SINGLE'); + } else { + this.disableSingleDynaform('MULTIPLE'); + this.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform').hideMessage(); + this.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform') + .getControl(0).style.removeClasses(['error']); + } + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Disable MultipleSteps (tabForms) + * @param singleMultiple + * @returns {WebEntry} + */ + disableMultipleSteps: function (singleMultiple) { + var singleDyna = this.getTabForms().getItem('singleDynaform'); + singleDyna.getItem('multipleStepsRadio').setValue(''); + singleDyna.getItem('weeSelectDynaform').enable(); + singleDyna.getItem('weeSelectDynaform').setRequired(true); + singleDyna.getItem('singleDynaformRadio').setValue(singleMultiple); + singleDyna.getItem('singleDynaformRadio').getControl(0).select(); + //Hide step panel + this.getLabelsPanel().setVisible(false); + this.getTabForms().getItem('stepsMainContainer').setVisible(false); + return this; + }, + + /** + * Disable Form SingleDynaform (tabForms) + * @param singleMultiple + * @returns {WebEntry} + */ + disableSingleDynaform: function (singleMultiple) { + var singleDyna = this.getTabForms().getItem('singleDynaform'); + singleDyna.getItem('singleDynaformRadio').setValue(''); + singleDyna.getItem('weeSelectDynaform').disable(); + singleDyna.getItem('weeSelectDynaform').setRequired(false); + singleDyna.getItem('multipleStepsRadio').setValue(singleMultiple); + singleDyna.getItem('multipleStepsRadio').getControl(0).select(); + //Show step panel + this.getLabelsPanel().setVisible(true); + this.getTabForms().getItem('stepsMainContainer').setVisible(true); + return this; + }, + + /** + * Change handler + * @param newValue + * @param oldValue + * @returns {loginRequired} + */ + anonimusProcedure: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(), + //The Callback Actions (PROCESSMAKER is 0, CUSTOM is 1, and CUSTOM_CLEAR is 2) + callbackAction = 2; + propertiesForm.getItem('tabPropertiesRequireUserLogin').setValue('[]'); + propertiesForm.getItem('tabPropertiesHideLoogedInformationBar').disable(); + propertiesForm.getItem('tabPropRadioAuthentication').setRequired(true); + this.getSuggestField().setRequired(true); + this.getSuggestField().hideMessageRequired(); + propertiesForm.getItem('tabPropertiesRadioCallback').disableOption(callbackAction); + if (propertiesForm.getItem('tabPropertiesRadioCallback').getValue() === 'CUSTOM_CLEAR') { + propertiesForm.getItem('tabPropertiesRadioCallback').getControl(callbackAction).deselect(); + propertiesForm.getItem('tabPropertiesRadioCallback').setValue(''); + } + propertiesForm.getItem('criteriaFieldCustomUrl').disable(); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.disable(); + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Change chandler + * @param newValue + * @param oldValue + * @returns {loginRequired} + */ + loginRequired: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(), + //The Callback Actions (PROCESSMAKER is 0, CUSTOM is 1, and CUSTOM_CLEAR is 2) + callbackAction = 2; + propertiesForm.getItem('tabPropRadioAuthentication').setValue('[]'); + propertiesForm.getItem('tabPropRadioAuthentication').setRequired(false); + + this.getSuggestField().setRequired(false); + this.getSuggestField().hideMessageRequired(); + propertiesForm.getItem('tabPropertiesHideLoogedInformationBar').enable(); + propertiesForm.getItem('tabPropertiesRadioCallback').enableOption(callbackAction); + this.callbackActionChange(propertiesForm.getItem('tabPropertiesRadioCallback').getValue(), ''); + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Change handler + * @param newValue + * @param oldValue + * @returns {callbackActionChange} + */ + callbackActionChange: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(); + propertiesForm.getItem("tabPropertiesRadioCallback").setValue(newValue); + switch (newValue) { + case 'PROCESSMAKER': + propertiesForm.getItem('criteriaFieldCustomUrl').disable(); + propertiesForm.getItem('criteriaFieldCustomUrl').setRequired(false); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.disable(); + break; + case 'CUSTOM': + case 'CUSTOM_CLEAR': + propertiesForm.getItem('criteriaFieldCustomUrl').enable(); + propertiesForm.getItem('criteriaFieldCustomUrl').setRequired(true); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.enable(); + break; + } + return this; + }, + + /** + * Change handler + * @param newValue + * @returns {linkGenerationOnChange} + */ + linkGenerationOnChange: function (newValue) { + var required, + skin, + language, + domain, + tfromLink; + tfromLink = this.getTabLinkForm(); + required = newValue === 'ADVANCED'; + skin = tfromLink.getItem('tabLinkDropdownSkin'); + language = tfromLink.getItem('tabLinkDropdownLanguage'); + domain = tfromLink.getItem('tablinkTextCustomDomain'); + this.setLinkText(tfromLink, ''); + skin.setRequired(required); + language.setRequired(required); + domain.setRequired(required); + if (required) { + skin.enable(); + language.enable(); + domain.enable(); + } else { + skin.disable(); + domain.hideMessage(); + language.disable(); + domain.disable(); + domain.getControl(0).style.removeClasses(['error']); + } + return this; + }, + + /** + * Save webEntry Configuration + * @param successCallback + * @param failureCallback + */ + saveWebEntryConfiguration: function (successCallback, failureCallback) { + var data, + //tabs window web entry + tabProperties = this.getTabPanel().getItem('tabProperties'), + tabLink = this.getTabPanel().getItem('tabLink'), + //form tabs + dataTabSingleDyn = this.getTabForms().getItem('singleDynaform'), + dataTabProperties = tabProperties.getPanel('idTabProperties'), + dataTabLink = tabLink.getPanel('idTabLink'); + + //Prepare Data + data = this.prepareData(dataTabSingleDyn, dataTabProperties, dataTabLink); + //Save web Entry configuration + this.updateWebEntryConfiguration(data, successCallback, failureCallback); + return this; + }, + + /** + * Validate Web Entry Data + * @param method + */ + isValidWebEntryData: function (method) { + var valid = true, + //tabs window web entry + tabForm = this.getTabPanel().getItem('tabForms'), + tabProperties = this.getTabPanel().getItem('tabProperties'), + tabLink = this.getTabPanel().getItem('tabLink'), + //form tabs + dataTabSingleDyn = this.getTabForms().getItem('singleDynaform'), + dataTabProperties = tabProperties.getPanel('idTabProperties'), + dataTabLink = tabLink.getPanel('idTabLink'), + //selected tab + selectedTab = null; + + // validate form tab + if (dataTabSingleDyn instanceof PMUI.form.Form) { + valid = valid && dataTabSingleDyn.isValid(); + selectedTab = !valid && !selectedTab ? tabForm : selectedTab; + } + //validate property tab + if (dataTabProperties instanceof PMUI.form.Form) { + valid = valid && dataTabProperties.isValid(); + selectedTab = !valid && !selectedTab ? tabProperties : selectedTab; + } + //validate suggestField + if (!this.getSuggestField().isValid()) { + this.getSuggestField().showMessageRequired(); + valid = valid && this.getSuggestField().isValid(); + selectedTab = !valid && !selectedTab ? tabProperties : selectedTab; + } + //validate link Tab + if (dataTabLink instanceof PMUI.form.Form) { + valid = valid && dataTabLink.isValid(); + selectedTab = !valid && !selectedTab ? tabLink : selectedTab; + } + if (!valid) { + selectedTab.select(); + } + //validate Link Generate Button + if (!$(dataTabLink.getItem('panelLinkForm').getItem('webEntryLink').text).attr('href') && + method !== 'generateLink') { + PMDesigner.msgFlash('Please press the \"Generate Link\" button.'.translate(), + this.getWindow(), 'error', 3000, 5); + valid = false; + tabLink.select(); + } + return valid; + }, + + /** + * Prepare Data + * @param dataTabSingleDyn + * @param dataTabProperties + * @param dataTabLink + */ + prepareData : function (dataTabSingleDyn, dataTabProperties, dataTabLink) { + var data = {}; + data['act_uid'] = this.getActUid(); + data['evn_uid'] = this.getEvnUid(); + data['wee_title'] = this.getEvnUid(); + data['we_type'] = (dataTabSingleDyn.getItem('singleDynaformRadio').getValue()) ? 'SINGLE' : 'MULTIPLE'; + data['dyn_uid'] = (data['we_type'] === 'SINGLE') ? dataTabSingleDyn.getItem('weeSelectDynaform') + .getValue() : ''; + data['we_custom_title'] = dataTabProperties.getItem('tabPropertiesWebEntryTitle').getValue(); + data['we_authentication'] = dataTabProperties.getItem('tabPropRadioAuthentication').getValue() === '[]' ? + 'LOGIN_REQUIRED' : 'ANONYMOUS'; + data['usr_uid'] = this.getSuggestField().value; + data['we_hide_information_bar'] = dataTabProperties.getItem('tabPropertiesHideLoogedInformationBar') + .getValue() === '[]' ? '0' : '1'; + data['we_callback'] = dataTabProperties.getItem('tabPropertiesRadioCallback').getValue(); + data['we_callback_url'] = (data['we_callback'] !== 'PROCESSMAKER') ? + dataTabProperties.getItem('criteriaFieldCustomUrl').getValue() : ''; + data['we_link_generation'] = dataTabLink.getItem('tabLinkRadioGeneration').getValue(); + data['we_link_skin'] = dataTabLink.getItem('tabLinkDropdownSkin').getValue(); + data['we_link_language'] = dataTabLink.getItem('tabLinkDropdownLanguage').getValue(); + data['we_link_domain'] = (data['we_link_generation'] === 'ADVANCED') ? + dataTabLink.getItem('tablinkTextCustomDomain').getValue() : ''; + data['we_show_in_new_case'] = (dataTabProperties.getItem('showInNewCase').getValue() === '["showCase"]') ? 1 : 0; + return data; + }, + + /** + * Populate all tabPanels (TabForms, TabProperties, TabLink) with data config + * return void + */ + setWebEntryConfiguration: function () { + this.setConfigDataTabForms(); + this.setConfigDataTabProperties(); + this.setConfigDataTabLink(); + this.getWindow().getItem('windowWebEntryTabPanel').getItem('tabForms').select(); + return this; + }, + + /** + * Load and populate Dynaforms Items + * @returns {*} + */ + setConfigDataTabForms: function () { + var that = this, + i, + data, + options = [], + dynaformsControl, + dynaforms = []; + + //execute Rest (get Dynaforms) + this.getDynaforms( + function (xhr, response) { + dynaforms = response[0].response; + //get Controls tab-Forms + dynaformsControl = that.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform'); + + //Set data Dropdown Single Dynaform + for (i = 0; i < dynaforms.length; i += 1) { + data = {}; + data.label = dynaforms[i]['dyn_title']; + data.value = dynaforms[i]['dyn_uid']; + if (that.getConfigWebEntry().dyn_uid === data.value && + that.getConfigWebEntry().evn_uid === that.getRelatedShape()['evn_uid']) { + data.selected = true; + } + options.push(data); + } + dynaformsControl.setOptions(options); + + //set Disable/Enable single or multiple steps + (that.getConfigWebEntry().we_type === 'SINGLE') ? + that.disableMultipleSteps(that.getConfigWebEntry().we_type) : + that.disableSingleDynaform(that.getConfigWebEntry().we_type); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + + /** + * TabProperties Panel + * Assigns values to tabProperties fields + */ + setConfigDataTabProperties: function () { + var that = this, + webEntryTitle, + radioAuthentication, + radioRequiredLogin, + informationBar, + radioCollback, + customUrl, + user, + showInNewCase; + + //get Controls Tab-Properties + this.getTabPanel().getItem('tabProperties').select(); + webEntryTitle = this.getTabProperties().getItem('tabPropertiesWebEntryTitle'); + radioAuthentication = this.getTabProperties().getItem('tabPropRadioAuthentication'); + radioRequiredLogin = this.getTabProperties().getItem('tabPropertiesRequireUserLogin'); + radioCollback = this.getTabProperties().getItem('tabPropertiesRadioCallback'); + customUrl = this.getTabProperties().getItem('criteriaFieldCustomUrl'); + informationBar = this.getTabProperties().getItem('tabPropertiesHideLoogedInformationBar'); + showInNewCase = this.getTabProperties().getItem('showInNewCase'); + + //set webentry Title + webEntryTitle.setValue(this.getConfigWebEntry().we_custom_title); + + //Loggin required or Anonymous + radioCollback.setValue(this.getConfigWebEntry().we_callback); + if (this.getConfigWebEntry().we_authentication === 'LOGIN_REQUIRED') { + radioRequiredLogin.getControl(0).select(); + radioRequiredLogin.setValue(this.getConfigWebEntry().we_authentication); + this.loginRequired(); + } else { + radioAuthentication.getControl(0).select(); + radioAuthentication.setValue(this.getConfigWebEntry().we_authentication); + this.anonimusProcedure(); + } + + //set value suggest user + this.getSuggestField().html.find('input').val(''); + this.getConfigWebEntry().usr_uid = this.getConfigWebEntry().usr_uid || this.getUserGuest().uid; + if (this.getConfigWebEntry().usr_uid) { + this.getUserData( + this.getConfigWebEntry().usr_uid, + function (xhr, response) { + user = response[0].response; + that.getSuggestField().html.find("input").val(user.usr_firstname + " " + + user.usr_lastname + " " + "(" + user.usr_username + ")"); + that.getSuggestField().set("value", user.usr_uid); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } + + //set Hide Logged Information Bar + if (this.getConfigWebEntry().we_hide_information_bar === '1') { + informationBar.setValue('["1"]'); + informationBar.getControl(0).select(); + } else { + informationBar.setValue('[]'); + informationBar.getControl(0).deselect(); + } + + //set Callback Action + switch (this.getConfigWebEntry().we_callback) { + case 'PROCESSMAKER': + radioCollback.getControl(0).select(); + break; + case 'CUSTOM': + radioCollback.getControl(1).select(); + break; + case 'CUSTOM_CLEAR': + radioCollback.getControl(2).select(); + break; + } + + //set custom URL + customUrl.setValue(this.getConfigWebEntry().we_callback_url); + + //set show task in new case + if (this.getConfigWebEntry().we_show_in_new_case === '1'){ + showInNewCase.setValue('["showCase"]'); + }else{ + showInNewCase.setValue('[]'); + } + + //customize suggest styles + this.getSuggestField().inputField[0].style.width = '280px'; + this.getSuggestField().inputLabel[0].parentElement.style.width = '120px'; + this.getSuggestField().inputLabel[0].parentElement.style.marginLeft = '220px'; + }, + + /** + * TabLink Panel + * Assigns values to tabLink fields + */ + setConfigDataTabLink: function () { + var that = this, + options = [], + customDomain, + radioGeneration, + languages = [], + skins = [], + dropDownLanguages, + dropDownSkins, + data, + i; + + //execute Rest (Get languages and Skins) + this.getSkinLanguage( + function (xhr, response) { + languages = response[0].response.data; + skins = response[1].response.data; + //get controls Tab-link + that.getTabPanel().getItem('tabLink').select(); + radioGeneration = that.getTabLinkForm().getItem('tabLinkRadioGeneration'); + dropDownSkins = that.getTabLinkForm().getItem('tabLinkDropdownSkin'); + dropDownLanguages = that.getTabLinkForm().getItem('tabLinkDropdownLanguage'); + customDomain = that.getTabLinkForm().getItem('tablinkTextCustomDomain'); + + //set Link generation (Default or Advanced) + radioGeneration.setValue(that.getConfigWebEntry().we_link_generation); + (that.getConfigWebEntry().we_link_generation === 'DEFAULT') ? radioGeneration.getControl(0).select() : + radioGeneration.getControl(1).select(); + + //set Languages Dropdown + if (jQuery.isArray(languages)) { + for (i = 0; i < languages.length; i += 1) { + data = {}; + data.label = languages[i].LANG_NAME; + data.value = languages[i].LANG_ID; + if (languages[i].LANG_ID === that.getConfigWebEntry().we_link_language) { + data.selected = true; + } + options.push(data); + } + dropDownLanguages.setOptions(options); + } + //set Skins Dropdown + if (jQuery.isArray(skins)) { + options = []; + for (i = 0; i < skins.length; i += 1) { + data = {}; + data.label = skins[i].SKIN_NAME; + data.value = skins[i].SKIN_FOLDER_ID; + if (that.getConfigWebEntry().we_link_skin === skins[i].SKIN_FOLDER_ID) { + data.selected = true; + } + options.push(data); + } + dropDownSkins.setOptions(options); + } + + //set Custom Domain + customDomain.setValue(that.getConfigWebEntry().we_link_domain); + //Enable or Disable (Skin, Language, CustomDomain) + that.linkGenerationOnChange(that.getConfigWebEntry().we_link_generation); + //set Link text + that.setLinkText(that.getTabLinkForm(), that.getConfigWebEntry().wee_url); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + + /** + * Load and populate Accordion Data Items + * @param response + */ + loadAccordionItems: function (response) { + var firstResp = [], + secondResp = [], + i, + item, + assigmentConfig, + firstRes = 0, + secondRes = 1; + this.getStepsAssignAccordion().clearItems(); + if (jQuery.isArray(response) && response.length) { + if (typeof response[firstRes] === "object") { + firstResp = response[firstRes].response ? response[firstRes].response : []; + } + if (typeof response[secondRes] === "object") { + secondResp = response[secondRes].response ? response[secondRes].response : []; + } + } + if (firstResp.length) { + for (i = 0; i < firstResp.length; i += 1) { + item = this.createAccordionItem(firstResp[i], true, true); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = firstResp[i]; + this.customAccordionItemButtons(item.html, firstResp[i], item); + } + } + assigmentConfig = { + step_type_obj: "Assignment".translate(), + triggers: secondResp, + st_type: "ASSIGNMENT", + obj_title: "Assignment".translate(), + step_uid_obj: "Assignment" + }; + item = this.createAccordionItem(assigmentConfig); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = assigmentConfig; + assigmentConfig = { + step_type_obj: "Routing".translate(), + triggers: secondResp, + obj_title: "Routing".translate(), + st_type: 'ROUTING', + step_uid_obj: "Routing" + }; + item = this.createAccordionItem(assigmentConfig); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = assigmentConfig; + this.getStepsAssignAccordion().defineEvents(); + }, + + /** + * Create Accordion + * @param data + * @returns {PMUI.item.AccordionItem} + */ + createAccordionItem: function (data) { + var that = this, + gridBefore, + gridAfter, + beforeTitle, + afterTitle, + i, + textLabel; + if (this.stepsType[data.step_type_obj]) { + textLabel = this.stepsType[data.step_type_obj]; + } else { + textLabel = data.step_type_obj; + } + beforeTitle = new PMUI.field.TextAnnotationField({ + text: 'Before'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left' + }); + afterTitle = new PMUI.field.TextAnnotationField({ + text: 'After'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left', + visible: data.st_type === "ASSIGNMENT" ? false : true + }); + + gridBefore = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + st_type: 'BEFORE', + step_uid: data.step_uid, + visibleFooter: false, + width: '96%', + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: "st_position", + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 210 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-delete'] + }, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + }], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + }, + onDragStart: function (grid, row) { + var items; + items = grid.getItems(); + if (jQuery.isArray(items)) { + if (items.length === 1) { + grid.showEmptyCell(); + } + } + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridBefore.st_type = 'BEFORE'; + } else if (data.st_type === "ROUTING") { + gridBefore.st_type = "BEFORE_ROUTING"; + } else { + gridBefore.st_type = "BEFORE_ASSIGNMENT"; + } + gridBefore.step_uid = data.step_uid; + gridBefore.clearItems(); + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridBefore.st_type === data.triggers[i].st_type) { + gridBefore.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + gridAfter = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + visibleFooter: false, + width: '96%', + visible: data.st_type === "ASSIGNMENT" ? false : true, + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: 'st_position', + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 210 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-delete'] + }, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + }], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + }, + onDragStart: function (grid, row) { + var items; + items = grid.getItems(); + if (jQuery.isArray(items)) { + if (items.length === 1) { + grid.showEmptyCell(); + } + } + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridAfter.st_type = 'AFTER'; + } else if (data.st_type == "ROUTING") { + gridAfter.st_type = "AFTER_ROUTING"; + } else { + gridAfter.st_type = "AFTER_ASSIGNMENT"; + } + gridAfter.step_uid = data.step_uid; + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridAfter.st_type === data.triggers[i].st_type) { + gridAfter.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + var accordionItem = new PMUI.item.AccordionItem({ + id: 'id' + data.step_uid_obj, + dataStep: data, + closeable: true, + body: new PMUI.core.Panel({ + layout: 'vbox', + items: [ + beforeTitle, + gridBefore, + afterTitle, + gridAfter + ] + }) + }); + if (this.stepsType[data.step_type_obj]) { + accordionItem.setTitle(data.step_position + ". " + data.obj_title + ' (' + + this.stepsType[data.step_type_obj] + ')'); + this.stepsAssigned.insert(accordionItem); + } else { + accordionItem.setTitle((this.getStepsAssignAccordion().items.getSize() + 1) + ". " + data.obj_title); + } + return accordionItem; + }, + + /** + * This method is executed when a row is drop in another grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @param draggableItem + * @returns {*} + */ + receiveRowItem: function (receiveData, grid, index, draggableItem) { + var receiveParent = draggableItem.getParent(), + message, + restClient, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: this.getWindow() + }); + index = receiveParent.items.indexOf(draggableItem); + receiveParent.items.remove(draggableItem); + receiveParent.addItem(draggableItem, index); + message.show(); + return false; + } + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger' : 'activity/' + + that.getConfigWebEntry().tas_uid + '/step/' + grid.step_uid + '/trigger', + method: 'POST', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + } + }, { + url: receiveParent.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger/' + receiveData.obj_uid + + '/' + that.getStepType(receiveParent.st_type) : + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + receiveParent.step_uid + + '/trigger/' + receiveData.obj_uid + '/' + receiveParent.st_type.toLowerCase(), + method: 'DELETE' + }] + }, + functionSuccess: function (xhr, response) { + var data; + data = receiveData; + if (data.hasOwnProperty("st_type")) { + data.st_type = grid.st_type; + grid.addDataItem(receiveData, index); + } + receiveParent.removeItem(draggableItem); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.getWindow(), + messageError: [ + 'An unexpected error while assigning the trigger, please try again later.'.translate() + ], + messageSuccess: [ + 'Trigger assigned successfully.'.translate() + ] + }); + restClient.executeRestClient(); + return this; + }, + + /** + * This method is executed when a row is sorted in the grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the new index position row + * @returns {stepsTask} + */ + sortableRowHandler: function (receiveData, grid, index) { + return new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + this.getConfigWebEntry().tas_uid + "/step/trigger/" + receiveData.tri_uid : 'activity/' + + this.getConfigWebEntry().tas_uid + "/step/" + grid.step_uid + "/trigger/" + receiveData.tri_uid, + typeRequest: 'update', + data: { + st_type: receiveData.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: this.getWindow(), + messageError: 'An unexpected error while assigning the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger assigned successfully.'.translate() + }).executeRestClient(); + }, + + /** + * Return the not items config. + * @returns {{obj_title: *, obj_uid: string, id: string}} + */ + notItemConfig: function () { + var config = { + obj_title: 'N/A'.translate(), + obj_uid: '', + id: "notItem" + }; + return config; + }, + + /** + * Get the steps assigned by a search criterion + * @param criteria, search filter, after running the endpoint getAccordionData method + * @returns {Array}, response with criteria + */ + getStepsAssignedByCriteria: function (criteria) { + var allAssigned = [], + i, + elements, + j, + resp, + data, + respon = []; + + this.getAccordionData( + function (xhr, response) { + allAssigned = response; + if (jQuery.isArray(allAssigned)) { + for (i = 0; i < allAssigned.length; i += 1) { + resp = allAssigned[i]; + if (typeof resp === "object") { + elements = resp.response ? resp.response : []; + for (j = 0; j < elements.length; j += 1) { + data = elements[j]; + if (typeof data === "object") { + if (data.step_type_obj && data.step_type_obj === criteria) { + respon.push(data); + } + } + } + } + } + } + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + return respon; + }, + + /** + * Opens the properties of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ + propertiesStepShow: function (step) { + var that = this, + form, + saveButton, + cancelButton, + restClient, + criteriaButton; + this.setWindowAlternative(null); + this.getWindowAlternativeForm().setWidth(520); + this.getWindowAlternativeForm().setHeight(370); + this.getWindowAlternativeForm().setTitle('Step Properties'.translate()); + form = new PMUI.form.Form({ + id: 'stepsEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + { + id: 'step_mode', + pmType: 'radio', + label: 'Mode'.translate(), + value: '', + visible: step.step_type_obj === "DYNAFORM" ? true : false, + name: 'step_mode', + options: [{ + id: 'modeEdit', + label: 'Edit'.translate(), + value: 'EDIT', + selected: true + }, { + id: 'modeView', + label: 'View'.translate(), + value: 'VIEW' + }] + }, + new CriteriaField({ + id: 'step_condition', + pmType: 'textarea', + name: 'step_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea' + }) + ] + }); + this.getWindowAlternativeForm().addItem(form); + + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + form.getField('step_mode').setValue(response.step_mode); + form.getField('step_condition').setValue(response.step_condition); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient; + if (form.isValid()) { + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'update', + data: form.getData(), + functionSuccess: function () { + that.getWindowAlternativeForm().close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems update the Step Trigger, please try again.'.translate() + }); + restClient.executeRestClient(); + } + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.handler = null; + criteriaButton.setVisible(false); + } + this.getWindowAlternativeForm().open(); + }, + + /** + * Opens the step of the selected step with the current settings + * @param step, is the data of selected step + * @param accordioItem + * @chainable + */ + editStepShow: function (step, accordioItem) { + var that = this, + inputDocument; + switch (step.step_type_obj) { + case 'DYNAFORM': + var restProxy = new PMRestClient({ + endpoint: 'dynaform/' + step.step_uid_obj, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var old = PMUI.activeCanvas, + formDesigner; + PMUI.activeCanvas = false; + formDesigner = PMDesigner.dynaformDesigner(response); + formDesigner.onHide = function () { + var assignedDynaform, + i, + data, + title; + assignedDynaform = that.getStepsAssignedByCriteria("DYNAFORM"); + if (jQuery.isArray(assignedDynaform)) { + for (i = 0; i < assignedDynaform.length; i += 1) { + data = assignedDynaform[i]; + if (typeof data === "object") { + if (data.step_uid === step.step_uid) { + title = data.step_position + ". " + data.obj_title; + title = title + ' (' + that.stepsType["DYNAFORM"] + ')'; + accordioItem.setTitle(title); + accordioItem.dataItem = data; + } + } + } + } + PMUI.activeCanvas = old; + }; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + break; + case 'OUTPUT_DOCUMENT': + PMDesigner.output(); + PMDesigner.output.showTiny(step.step_uid_obj); + break; + case 'INPUT_DOCUMENT': + inputDocument = new InputDocument({ + onUpdateInputDocumentHandler: function (data, inputDoc) { + var position, title; + position = accordioItem.dataItem.step_position; + title = position + ". " + data.inp_doc_title; + title = title + ' (' + this.stepsType["INPUT_DOCUMENT"] + ')'; + accordioItem.dataItem.obj_title = data.inp_doc_title; + accordioItem.setTitle(title); + inputDoc.winMainInputDocument.close(); + } + }); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(step.step_uid_obj); + break; + } + }, + + /** + * Edit the selected trigger condition + * @param stepID, It is the id of the step to upgrade + * @param triggerID, is the id of the trigger to update + * @param stepType, It is the kind of step to update + * @param row, PMUI.grid.GridPanelRow, is the row affected + */ + editCondition: function (stepID, triggerID, stepType, row) { + var that = this, + saveButton, + cancelButton, + criteriaButton, + form, + dataRow; + dataRow = row.getData(); + this.setWindowAlternative(null); + this.getWindowAlternativeForm().setWidth(500); + this.getWindowAlternativeForm().setHeight(350); + this.getWindowAlternativeForm().setTitle('Condition Trigger'.translate()); + this.getWindowAlternativeForm().setTitle("Trigger".translate()); + form = new PMUI.form.Form({ + id: 'idFormEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + new CriteriaField({ + id: 'st_condition', + pmType: 'textarea', + name: 'st_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea', + value: dataRow.st_condition + }) + ] + }); + this.getWindowAlternativeForm().addItem(form); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var data, + restClient; + data = form.getData(); + data.st_type = stepType; + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + + ((typeof (stepID) != "undefined") ? stepID + "/" : "") + 'trigger/' + triggerID, + typeRequest: 'update', + data: data, + messageError: 'There are problems update the Step Trigger, please try again.'.translate(), + functionSuccess: function (xhr, response) { + dataRow.st_condition = data.st_condition; + row.setData(dataRow); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + that.getWindowAlternativeForm().close(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(false); + criteriaButton.handler = null; + } + this.getWindowAlternativeForm().open(); + }, + + /** + * This method is executed when editing a "trigger" in a row of the grid. + * secondary window opens with the current configuration of the trigger + * @param trigger, is the return value when is update 'trigger' action in the enpoint + * @param triggerID, is the id of the trigger to update + * @chainable + */ + editTrigger: function (trigger, triggerID) { + var that = this, + codeMirror, + saveButton, + cancelButton, + criteriaButton; + this.setWindowAlternative(null); + codeMirror = new PMCodeMirror({ + id: "codeMirror" + }); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + codeMirror.setValue(trigger); + this.getWindowAlternativeForm().setWidth(DEFAULT_WINDOW_WIDTH); + this.getWindowAlternativeForm().setHeight(DEFAULT_WINDOW_HEIGHT); + this.getWindowAlternativeForm().setTitle("Trigger".translate()); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + triggerID, + typeRequest: 'update', + data: { + tri_param: '', + tri_webbot: codeMirror.getValue() + }, + messageError: 'There are problems updating the trigger, please try again.'.translate(), + messageSuccess: 'Trigger updated correctly'.translate(), + flashContainer: that.getWindow(), + functionSuccess: function () { + that.getWindowAlternativeForm().close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(true); + criteriaButton.setHandler(function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var cursorPos, + codemirror; + codemirror = codeMirror.cm; + cursorPos = codemirror.getCursor(); + codemirror.replaceSelection(variable); + codemirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }); + } + this.getWindowAlternativeForm().open(); + this.getWindowAlternativeForm().addItem(codeMirror); + codeMirror.cm.setSize(this.getWindowAlternativeForm().getWidth(), 380); + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + codeMirror.cm.refresh(); + }, + + /** + * Returns the type of step, for the execution of "endpoint" + * @param st_type, this a step type, the accepted parameters are: + * - BEFORE_ASSIGNMENT + * - BEFORE_ROUTING + * - AFTER_ROUTING + * - BEFORE + * - AFTER + * @returns {string} + */ + getStepType: function (st_type) { + var value; + switch (st_type) { + case 'BEFORE_ASSIGNMENT': + value = 'before-assignment'; + break; + case 'BEFORE_ROUTING': + value = 'before-routing'; + break; + case 'AFTER_ROUTING': + value = 'after-routing'; + break; + case 'BEFORE': + value = 'before'; + break; + case 'AFTER': + value = 'after'; + break; + default: + value = ''; + break; + } + return value; + }, + + /** + * Checks whether a trigger is already assigned in a grid + * @param grid, is instanceof PMUI.grid.Grid, in conducting the search + * @param tri_uid, search parameter in the rows of the grid + * @returns {boolean} + */ + isTriggerAssigned: function (grid, tri_uid) { + var data, i, exist = false; + data = grid.getData(); + if (grid && jQuery.isArray(data)) { + for (i = 0; i < data.length; i += 1) { + if (data[i].tri_uid === tri_uid) { + exist = true; + break; + } + } + } + return exist; + }, + + /** + * This method eliminates the list of triggers trigger an assigned step + * @param row, the row affected or selected + * @param grid, It is affected or grid to remove selected row + */ + removeTrigger: function (row, grid) { + var that = this, + message = 'Do you want to remove the trigger "', + messageData = row.getData().tri_title ? row.getData().tri_title : "", + yesButton, + noButton, + restClient; + message = message + messageData + '"?'; + this.getConfirmWindow().setMessage(message.translate()); + yesButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-yes"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger/' + row.getData().tri_uid + '/' + + that.getStepType(row.getData().st_type) : 'activity/' + that.getConfigWebEntry().tas_uid + + '/step/' + grid.step_uid + '/trigger/' + row.getData().tri_uid + + '/' + that.getStepType(row.getData().st_type), + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + that.getConfirmWindow().close(); + that.updateIndexToGrid(grid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.getWindow(), + messageError: 'An unexpected error while deleting the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger removed successfully'.translate() + }); + restClient.executeRestClient(); + }); + } + noButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-no"); + if (noButton) { + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + } + this.getConfirmWindow().open(); + }, + + /** + * Updates indexes of elements selected grid + * @param grid, It is affected or grid to remove selected row + * @returns {stepsTask} + */ + updateIndexToGrid: function (grid) { + var cell, rows, i, row; + if (grid) { + rows = grid.getItems(); + if (jQuery.isArray(rows)) { + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + cell = row.cells.find("columnData"); + if (cell) { + cell.setContent(i + 1); + } + } + } + } + return this; + }, + + /** + * Add custom buttons on the head of an element of stepsAssignAccordion + * are three buttons + * properties + * edit + * remove + * @param html, is the html of the header accordion item + * @param step, the data of the step selected + * @param accordionItem + */ + customAccordionItemButtons: function (html, step, accordionItem) { + var that = this, + propertiesStep, + editStep, + removeStep, + $html, + containerButtons, + title; + if (html) { + $html = jQuery(html.getElementsByClassName("pmui-accordion-item-header")); + title = step.obj_title + ' (' + step.step_type_obj + ')'; + $html.find(".pmui-accordion-item-title").get(0).title = title; + containerButtons = $('
'); + containerButtons.addClass("propertiesTask-accordionItem"); + propertiesStep = $('' + 'Properties'.translate() + ''); + propertiesStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + editStep = $('' + 'Edit'.translate() + ''); + editStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + removeStep = $('' + 'Remove'.translate() + ''); + removeStep.addClass("mafe-button-delete propertiesTask-accordionButton"); + + propertiesStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.propertiesStepShow(step); + return false; + }); + + editStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.editStepShow(step, accordionItem); + return false; + }); + + removeStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.removeStepShow(step); + return false; + }); + containerButtons.append(propertiesStep); + containerButtons.append(editStep); + containerButtons.append(removeStep); + $html.append(containerButtons); + } + }, + + /** + * Add tooltip in treeNode elements + * @returns {stepsTask} + */ + updateIndexPosition: function (treeNode) { + var items, + i, + item, + $item, + text, + data; + if (treeNode && treeNode.html) { + items = treeNode.getItems(); + if (jQuery.isArray(items)) { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + if (item.html) { + $item = $(item.html); + data = item.getData(); + text = $item.find("a").get(0); + text.title = data.obj_title; + } + } + } + } + return this; + }, + + /** + * This method loads the data to stepsAssignTree + * @param response, the answer is an array containing all the elements + * that will be loaded into the step stepsAssignTree + * @chainable + */ + loadTreePanelData: function (response) { + var data, + i, + j, + type, + label, + items = [], + dataTree = [], + treeNode; + data = response[1].response; + + dataTree.push({ + obj_title: 'Trigger (s)'.translate(), + items: [this.notItemConfig()] + }); + + for (i = 0; i < data.length; i += 1) { + items.push({ + obj_title: data[i]['tri_title'], + obj_type: data[i]['tri_type'], + obj_uid: data[i]['tri_uid'] + }); + } + + if (items.length) { + dataTree.shift(); + dataTree.push({ + obj_title: 'Trigger (s)'.translate(), + items: items, + id: "TRIGGER" + }); + } + + data = response[0].response; + type = this.groupType; + label = this.groupLabel; + items = []; + for (i = 0; i < type.length; i += 1) { + items = []; + for (j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [this.notItemConfig()], + behavior: '', + id: type[i] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items, + behavior: 'drag', + id: type[i] + }); + } + } + this.getStepsAssignTree().clearItems(); + for (i = 0; i < dataTree.length; i += 1) { + this.getStepsAssignTree().addDataItem(dataTree[i]); + treeNode = this.getStepsAssignTree().getItem(i); + treeNode.setID(dataTree[i].id); + this.updateIndexPosition(treeNode); + } + return this; + }, + + /** + * It is an extension to add the "sortable" event "stepsAssignTree". + * when choosing a node treePanel and you want to add to the accordion or the grid + * @chainable + */ + addEventSortableInTreePanelElements: function () { + var that = this, + items = this.getStepsAssignTree().getItems(), + connect, + i, + sw, + nodeItems; + for (i = 0; i < items.length; i += 1) { + nodeItems = items[i].getItems(); + if (nodeItems.length && nodeItems[0].getData().obj_type) { + sw = items[i].getItems()[0].getData().obj_type === "SCRIPT"; + connect = sw ? ".pmui-gridpanel-tbody" : ".pmui-accordion-panel-body"; + $(items[i].html).find('ul').find('>li').draggable({ + appendTo: document.body, + revert: "invalid", + helper: "clone".translate(), + cursor: "move", + zIndex: 1000, + connectToSortable: connect, + start: function (e) { + var i, nodeTag, node, nodeData, accordionItems, item; + nodeTag = e.target; + node = PMUI.getPMUIObject(nodeTag); + nodeData = node.getData(); + accordionItems = that.getStepsAssignAccordion().getItems(); + $(that.getStepsAssignAccordion().body).hide(); + if (nodeData.obj_type !== "SCRIPT") { + for (i = 0; i < accordionItems.length; i += 1) { + item = accordionItems[i]; + item.collapse(); + } + } + $(that.getStepsAssignAccordion().body).show(); + }, + stop: function () { + var i = 0, + max; + if (that.elementAccordionOpen) { + max = that.elementAccordionOpen.getSize(); + for (i = 0; i < max; i += 1) { + that.elementAccordionOpen.get(i).expand(); + } + } + } + }); + } else { + $(nodeItems[0].html).draggable("disable"); + } + } + }, + + /** + * It is an extension to add the "sortable" event "stepAssignAccordion". + * when a node "treePanel" is added to stop runs and is where you choose if it's a sort or aggregation. + * @chainable + */ + addEventSortableInAccordionElements: function () { + var that = this, + tagContainer, + newIndex, + index, + treeNodeObject, + treeNodeData; + if (this.getStepsAssignAccordion() && this.getStepsAssignAccordion().html) { + tagContainer = this.getStepsAssignAccordion().body; + $(tagContainer).sortable({ + items: '>div:not(#idAssignment,#idRouting)', + placeholder: 'steps-placeholder', + receive: function (event, ui) { + var item = ui ? ui.item : null; + if (item && item instanceof jQuery && item.length) { + treeNodeObject = PMUI.getPMUIObject(item.get(0)); + treeNodeData = treeNodeObject.getData(); + } + }, + stop: function (event, ui) { + var itemClone = ui ? ui.item : null, + accordionItems, + accordionItem, + dataEdited, + restClientMultipart, + restClient; + var newIndex = ui.item.index(); + accordionItems = that.getStepsAssignAccordion().getItems(); + if (itemClone && itemClone instanceof jQuery && itemClone.length) { + if (treeNodeObject) { + itemClone.remove(); + if (newIndex + 1 > accordionItems.length) { + newIndex = that.stepsAssigned.getSize(); + } + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step', + typeRequest: 'post', + data: { + step_type_obj: treeNodeData.obj_type, + step_uid_obj: treeNodeData.obj_uid, + step_condition: '', + step_position: newIndex + 1, + step_mode: 'EDIT' + }, + functionSuccess: function (xhr, response) { + var item, buttonAfected, treeNode; + that.getStepsAssignTree().removeItem(treeNodeObject); + treeNode = that.getStepsAssignTree().items.find("id", response.step_type_obj); + if (treeNode.items.getSize() === 0) { + treeNode.addDataItem(that.notItemConfig()); + } + response.obj_description = ''; + response.obj_title = treeNodeData.obj_title; + response.triggers = []; + item = that.createAccordionItem(response, true, true); + item.dataItem = response; + if (that.getStepsAssignAccordion().items.getSize() === 2) { + that.getStepsAssignAccordion().addItem(item, 0); + } else { + that.getStepsAssignAccordion().addItem(item, newIndex); + } + that.getStepsAssignAccordion().defineEvents(); + that.customAccordionItemButtons(item.html, response, item); + that.updateItemIndexToAccordion(); + that.addEventSortableInAccordionElements(); + that.addEventSortableInTreePanelElements(); + buttonAfected = that.getLabelsPanel().getItem("expand-button"); + buttonAfected.setDisabled(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while assigning the step, please try again later.' + .translate(), + messageSuccess: 'Step assigned successfully.'.translate(), + flashContainer: that.getStepsAssignAccordion().getParent() + }); + restClient.executeRestClient(); + } else { + accordionItem = PMUI.getPMUIObject(ui.item.get(0)); + index = that.getStepsAssignAccordion().items.indexOf(accordionItem); + if (newIndex !== index) { + that.getStepsAssignAccordion().items.remove(accordionItem); + that.getStepsAssignAccordion().items.insertAt(accordionItem, newIndex); + dataEdited = { + step_position: newIndex + 1, + step_uid: accordionItem.dataItem.step_uid, + step_type_obj: accordionItem.dataItem.step_type_obj, + step_uid_obj: accordionItem.dataItem.step_uid_obj + }; + restClientMultipart = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + + accordionItem.dataItem.step_uid, + typeRequest: 'update', + data: dataEdited, + functionSuccess: function (xhr, response) { + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while editing the step, please try again later.' + .translate(), + messageSuccess: 'Step editing successfully.'.translate(), + flashContainer: that.getWindow() + }); + restClientMultipart.executeRestClient(); + } + } + } + }, + start: function (e, ui) { + newIndex = ui.item.index(); + } + }); + } + }, + + /** + * Updates indexes of elements assigned + * @returns {stepsTask} + */ + updateItemIndexToAccordion: function () { + var title, + i, + item, + dataItem, + items = this.getStepsAssignAccordion().items, + position, + max; + max = items.getSize(); + for (i = 0; i < max; i += 1) { + item = items.get(i); + position = items.indexOf(item); + dataItem = item.dataItem; + title = (position + 1) + ". " + dataItem.obj_title; + if (this.stepsType[dataItem.step_type_obj]) { + title = title + ' (' + this.stepsType[dataItem.step_type_obj] + ')'; + } + item.dataItem.step_position = i + 1; + item.setTitle(title); + } + return this; + }, + + /** + * The window opens for confirmation of the removal step + * @param step, the current step to remove + * @chainable + */ + removeStepShow: function (step) { + var that = this, + title, + yesButton, + noButton, + restClient; + if (this.stepsType[step.step_type_obj] !== undefined) { + title = "Step {0} ( {1} )".translate([step.obj_title, this.stepsType[step.step_type_obj]]); + this.getConfirmWindow().setTitle(title); + } else { + this.getConfirmWindow().setTitle("Step " + step.step_type_obj.capitalize()); + } + this.getConfirmWindow().setMessage("Do you want to remove the step '{0}'?".translate([step.obj_title])); + yesButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-yes"); + noButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-no"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.removingStepTask(step, response); + that.getConfirmWindow().close(); + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while deleting the step, please try again later.'.translate(), + messageSuccess: 'Step removed successfully'.translate(), + flashContainer: that.getWindow().getParent() + }); + restClient.executeRestClient(); + }); + } + if (noButton) { + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + } + this.getConfirmWindow().open(); + }, + + /** + * Get the steps is not assigned by a criterion + * @param criteria, It is the filter criteria search + * @param stepAvailable, all steps Unassigned + * @returns {Array}, filtered items + */ + getAvailablesStepsByCriteria: function (criteria, stepAvailable) { + var items = [], + i; + if (jQuery.isArray(stepAvailable)) { + for (i = 0; i < stepAvailable.length; i += 1) { + if (stepAvailable[i].obj_type === criteria) { + items.push(stepAvailable[i]); + } + } + } + return items; + }, + + /** + * Eliminates the step of step Assign Accordion + * @param step, the current step to remove + * @param response, data from the endpoint + */ + removingStepTask: function (step, response) { + var stepObject, + stepAvailable, + treeNodeObject, + stepAvailables, + i, + itemsTreeNode = [], + items = []; + stepObject = this.getStepsAssignAccordion().getItem("id" + step.step_uid_obj); + this.elementAccordionOpen.remove(stepObject); + this.stepsAssigned.remove(stepObject); + this.getStepsAssignAccordion().removeItem(stepObject); + if (stepObject) { + this.getStepAvailables( + function (xhr, response) { + stepAvailable = response[0] ? response[0].response : []; + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + stepAvailables = this.getAvailablesStepsByCriteria(step.step_type_obj, stepAvailable); + for (i = 0; i < stepAvailables.length; i += 1) { + items.push({ + obj_title: stepAvailables[i]['obj_title'], + obj_type: stepAvailables[i]['obj_type'], + obj_uid: stepAvailables[i]['obj_uid'] + }); + } + treeNodeObject = this.getStepsAssignTree().getItem(step.step_type_obj); + itemsTreeNode = treeNodeObject.getItems(); + for (i = 0; i < itemsTreeNode.length; i += 1) { + treeNodeObject.removeItem(itemsTreeNode[i]); + } + treeNodeObject.clearItems(); + treeNodeObject.setDataItems(items); + this.updateIndexPosition(treeNodeObject); + this.addEventSortableInTreePanelElements(); + this.addEventSortableInAccordionElements(); + } + }, + + /** + * This method is executed when an element stepsAssignTree, is assigned in a grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @returns {stepsTask} + */ + receiveTreeNodeItem: function (receiveData, grid, index) { + var restClient, + message, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: this.getWindow() + }); + message.show(); + return; + } + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger' : 'activity/' + + that.getConfigWebEntry().tas_uid + '/step/' + grid.step_uid + '/trigger', + typeRequest: 'post', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: '', + st_position: index + 1 + }, + functionSuccess: function (xhr, response) { + grid.addDataItem({ + st_condition: '', + st_position: index + 1, + st_type: grid.st_type, + tri_description: '', + tri_title: receiveData.obj_title, + tri_uid: receiveData.obj_uid, + obj_title: receiveData.obj_title, + obj_uid: receiveData.obj_uid + }, index); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return this; + } +}; +var PMMessageType = function (options) { + var that = this; + this.msgt_uid = null; + this.edit = false; + this.editRow = null; + this.dirtyAcceptedValue = false; + this.fieldInfo = null; + this.onSave = new Function(); + this.onEdit = new Function(); + this.requiredMessage = null; + this.clickedClose = true; + this.previousMessageValue = null; + this.buttonCreate = new PMUI.ui.Button({ + id: 'buttonCreate', + text: "Create".translate(), + height: '36px', + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + that.showForm(); + } + }); + + this.buttonFieldAdd = new PMUI.field.ButtonField({ + id: 'buttonFieldAdd', + pmType: 'buttonField', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.6, + handler: function (field) { + that.addAcceptedValue(); + }, + buttonType: "success", + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '37px', + 'padding-right': '1px', + 'padding-bottom': '1px', + 'padding-left': '1px' + } + } + }); + this.buttonFieldAdd.getControl().button.setButtonType("success"); + + this.buttonFieldCancel = new PMUI.field.ButtonField({ + id: 'buttonFieldCancel', + pmType: 'buttonField', + value: 'Cancel'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.6, + handler: function (field) { + that.cancelAcceptedValue(); + }, + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '37px', + 'padding-right': '1px', + 'padding-bottom': '1px', + 'padding-left': '1px' + } + } + }); + this.buttonFieldCancel.getControl().button.setButtonType("error"); + + this.frmMessageType = new PMUI.form.Form({ + id: 'frmMessageType', + width: 'auto', + title: '', + visibleHeader: false, + items: [ + { + id: 'txtMessageTypeName', + name: 'txtMessageTypeName', + pmType: 'text', + label: "Name".translate(), + placeholder: "Name".translate(), + value: '', + required: true, + valueType: 'string', + maxLength: 60, + controlsWidth: 460 + }, + { + id: "frmAcceptedValues", + pmType: 'panel', + legend: "Message Field".translate(), + fieldset: true, + layout: 'hbox', + items: [ + { + pmType: "text", + name: "txtMessageTypeVariableName", + label: "Message Field Name".translate(), + labelWidth: "100%", + controlsWidth: "400px", + proportion: 2.5, + valueType: "string", + maxLength: 255, + required: true, + labelPosition: "top", + validators: [ + { + pmType: "regexp", + criteria: /^[a-zA-Z_]+[0-9a-zA-Z_]+$/, + errorMessage: "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores.".translate() + } + ] + }, + that.buttonFieldCancel, + that.buttonFieldAdd + ] + } + ] + }); + + this.frmMessageType.getData = function () { + var data = getData2PMUI(that.frmMessageType.html); + return data; + }; + + this.gridMessages = new PMUI.grid.GridPanel({ + id: 'gridMessages', + pageSize: 10, + width: '96%', + style: { + cssClasses: ['mafe-gridPanel'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: "msgtName", + title: "Name".translate(), + dataType: "string", + columnData: "msgt_name", + alignmentCell: "left", + width: "330px", + sortable: true + }, { + id: 'msgtEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: '60px', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + that.showFormEdit(row.getData()); + } + }, { + id: 'msgtDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: '70px', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + that.del(row.getData(), row, grid); + } + } + ], + dataItems: null + }); + + this.gridAcceptedValues = new PMUI.grid.GridPanel({ + id: 'gridAcceptedValues', + pageSize: 5, + height: 240, + style: {cssClasses: ['mafe-gridPanel']}, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + filterable: false, + tableContainerHeight: 200, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [ + { + id: "msgtv_name", + title: "Message Field Name".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 180, + sortable: true + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.editAcceptedValue(row); + } + }, + { + id: "btnDelete", + dataType: "button", + title: "", + buttonLabel: function (row, data) { + return "Delete".translate(); + }, + width: 75, + buttonStyle: {cssClasses: ["mafe-button-delete"]}, + onButtonClick: function (row, grid) { + that.deleteAcceptedValue(row); + } + } + ], + dataItems: null + }); + + this.isDirtyFrmMessageType = function () { + $("input,select,textarea").blur(); + if (this.frmMessageType.isVisible()) { + if (this.frmMessageType.isDirty() || this.dirtyAcceptedValue) { + var message_window = new PMUI.ui.MessageWindow({ + id: 'messageWindowCancel', + width: 490, + title: "Message Types".translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'messageWindowNo', + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: 'messageWindowYes', + text: 'Yes'.translate(), + handler: function () { + that.requiredMessage.hide(); + if (that.clickedClose) { + that.winMessageType.close(); + } + message_window.close(); + that.showGrid(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if (this.clickedClose) { + this.winMessageType.close(); + } else { + this.showGrid(); + this.requiredMessage.hide(); + } + } + } else { + this.winMessageType.close(); + } + }; + this.winMessageType = new PMUI.ui.Window({ + id: 'winMessageType', + title: '', + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonsPosition: 'right', + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFrmMessageType(); + }, + footerItems: [ + new PMUI.ui.Button({ + id: 'winMessageTypeCancel', + text: 'Cancel'.translate(), + handler: function () { + that.clickedClose = false; + that.isDirtyFrmMessageType(); + }, + buttonType: 'error' + }), + new PMUI.ui.Button({ + id: 'winMessageTypeSave', + text: "Save".translate(), + handler: function () { + that.frmAcceptedValues.getItems("fields").forEach(function (i) { + i.disable(); + }); + if (that.edit) { + that.updateMessageType(); + } else { + that.createMessageType(); + } + that.frmAcceptedValues.getItems("fields").forEach(function (i) { + i.enable(); + }); + }, + buttonType: 'success' + }) + ], + buttonPanelPosition: 'bottom' + }); + PMMessageType.prototype.init.call(this); +}; + +PMMessageType.prototype.init = function () { + var that = this; + + that.buttonCreate.defineEvents(); + that.winMessageType.addItem(that.gridMessages); + that.winMessageType.addItem(that.frmMessageType); + that.winMessageType.addItem(that.gridAcceptedValues); + that.winMessageType.hideFooter(); + that.winMessageType.open(); + that.requiredMessage = $(document.getElementById("requiredMessage")); + + this.buttonFieldAdd.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + this.buttonFieldCancel.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + that.requiredMessage.css({float: "none"}); + that.winMessageType.footer.html.style.textAlign = 'right'; + + that.frmAcceptedValues = PMUI.getPMUIObject($('#frmAcceptedValues').css({'width': '690px'}).get(0)); + $('#gridMessages .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + + //$(that.frmAcceptedValues.getHTML()).find("#requiredMessage").empty(); + that.requiredMessage.hide(); + //that.winMessageType.body.appendChild(that.requiredMessage[0]); + that.gridMessages.dom.toolbar.appendChild(that.buttonCreate.getHTML()); + that.showGrid(); + + validateKeysField(that.frmMessageType.getField('txtMessageTypeName').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + that.resetFrmAcceptedValues(); +}; + +PMMessageType.prototype.createMessageType = function () { + var that = this, + data; + + if (!this.frmMessageType.isValid()) { + return; + } + if (that.gridAcceptedValues.getData().length == 0) { + PMDesigner.msgFlash('Add at least one variable.'.translate(), winMessageType, 'error', 3000, 5); + return; + } + + data = this.frmMessageType.getData(); + data.msgt_name = data.txtMessageTypeName; + data.msgt_variables = that.getDataAcceptedValues(); + + // This returned data is not necessary at sendind, so it is deleted + delete data.txtMessageTypeVariableName; + delete data.buttonFieldCancel; + delete data.buttonFieldAdd; + + (new PMRestClient({ + endpoint: 'message-type', + typeRequest: 'post', + functionSuccess: function (xhr, response) { + if (that.onSave(xhr, response) === false) { + that.msgt_uid = null; + return; + } + that.showGrid(); + that.load(); + that.msgt_uid = null; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: ' ', + data: data, + messageSuccess: "Message Type Saved successfully.".translate(), + flashContainer: that.panel + + })).executeRestClient(); +}; + +PMMessageType.prototype.updateMessageType = function () { + var that = this, + data; + if (!this.frmMessageType.isValid()) { + return; + } + if (that.gridAcceptedValues.getData().length == 0) { + if (!this.frmAcceptedValues.isValid()) { + return; + } else { + PMDesigner.msgFlash('Add at least one variable.'.translate(), winMessageType, 'error', 3000, 5); + return; + } + } + + data = this.frmMessageType.getData(); + data.msgt_name = data.txtMessageTypeName; + data.msgt_variables = that.getDataAcceptedValues(); + + (new PMRestClient({ + endpoint: "message-type/" + that.msgt_uid, + typeRequest: "update", + data: data, + + functionSuccess: function (xhr, response) { + if (that.onEdit(xhr, response, data) === false) { + that.msgt_uid = null; + return; + } + + that.showGrid(); + that.load(); + that.msgt_uid = null; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: ' ', + messageSuccess: "Message Type edited successfully.".translate(), + flashContainer: that.panel + })).executeRestClient(); +}; + +PMMessageType.prototype.deleteMessage = function (msgt_uid) { + var that = this; + + (new PMRestClient({ + endpoint: 'message-type/' + msgt_uid, + typeRequest: 'remove', + + functionSuccess: function (xhr, response) { + that.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: 'Working...'.translate(), + messageSuccess: 'Message Type Deleted successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; + +PMMessageType.prototype.load = function () { + var that = this, restProxy; + + restProxy = new PMRestClient({ + endpoint: 'message-types', + typeRequest: 'get', + + functionSuccess: function (xhr, response) { + that.gridMessages.setDataItems(response); + that.gridMessages.sort('msgt_name', 'asc'); + + $(that.gridMessages.dom.toolbar).find("input").val(""); + that.gridMessages.clearFilter(); + document.getElementById("requiredMessage").style.marginTop = "16px"; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +PMMessageType.prototype.del = function (data, row, grid) { + var that = this, + confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDel', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Message Types".translate(), + message: "Do you want to delete this Message Type?".translate(), + footerItems: [ + { + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.deleteMessage(data.msgt_uid, row); + }, + buttonType: "success" + } + ] + }); + + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMMessageType.prototype.showGrid = function () { + var that = this; + that.frmMessageType.setVisible(false); + that.frmAcceptedValues.setVisible(false); + that.gridAcceptedValues.setVisible(false); + $(that.gridMessages.dom.toolbar).find("input").val(""); + that.gridMessages.clearFilter(); + that.gridMessages.setVisible(true); + that.winMessageType.setTitle("Message Types".translate()); + that.winMessageType.hideFooter(); +}; + +PMMessageType.prototype.showForm = function () { + var that = this; + this.requiredMessage.show(); + that.edit = false; + that.dirtyAcceptedValue = false; + that.frmMessageType.setVisible(true); + that.frmAcceptedValues.setVisible(true); + that.gridAcceptedValues.setVisible(true); + that.gridMessages.setVisible(false); + that.winMessageType.setTitle("Create Message Type".translate()); + that.winMessageType.showFooter(); + that.frmMessageType.reset(); + that.frmMessageType.setFocus(); + that.changeViewFieldType(); + that.resetFrmAcceptedValues(); + that.gridAcceptedValues.clearItems(); + that.buttonFieldCancel.setVisible(false); +}; + +PMMessageType.prototype.showFormEdit = function (data) { + var that = this; + that.showForm(); + that.msgt_uid = data.msgt_uid; + that.edit = true; + + that.winMessageType.setTitle('Edit Message Type'.translate()); + that.frmMessageType.getField('txtMessageTypeName').setValue(data.msgt_name); + + that.setDataAcceptedValues(data.msgt_variables); + document.getElementById("requiredMessage").style.marginTop = "16px"; +}; + +PMMessageType.prototype.changeViewFieldType = function () { + var that = this, sw = true; + + that.frmAcceptedValues.setVisible(true); + that.gridAcceptedValues.setVisible(true); + + validateKeysField(that.frmAcceptedValues.getField('txtMessageTypeVariableName').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + + if (this.fieldInfo === null) { + this.fieldInfo = document.createTextNode(''); + } +}; + +PMMessageType.prototype.addAcceptedValue = function () { + var that = this, + value = $.trim(that.frmAcceptedValues.getField('txtMessageTypeVariableName').getValue()), + message; + + // if the form (form field's RegEx) is invalid, add a Message Field will not be allowed. + if (!that.frmAcceptedValues.isValid()) { + return; + } + + if (that.previousMessageValue !== value && that.isAcceptedValueAdded(value)) { + message = new PMUI.ui.FlashMessage({ + message: "The variable Name already exists.".translate(), + duration: 3000, + severity: 'error', + appendTo: that.winMessageType.footer + }); + message.show(); + return; + } else if (!value) { + message = new PMUI.ui.FlashMessage({ + message: "Please, specify a name for the Message Field.".translate(), + duration: 3000, + severity: 'error', + appendTo: that.winMessageType.footer + }); + return message.show(); + } + that.previousMessageValue = null; + if (that.editRow === null) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + msgtv_name: value + } + })); + } else { + that.editRow.setData({ + msgtv_name: value + }); + } + + that.dirtyAcceptedValue = true; + that.cancelAcceptedValue(); +}; + +PMMessageType.prototype.editAcceptedValue = function (row) { + var that = this, data; + that.editRow = row; + data = row.getData(); + + that.previousMessageValue = data.msgtv_name; + that.frmAcceptedValues.getField('txtMessageTypeVariableName').setValue(data.msgtv_name); + that.buttonFieldAdd.setValue('Save'.translate()); + that.buttonFieldCancel.setVisible(true); +}; + +PMMessageType.prototype.deleteAcceptedValue = function (row) { + var that = this, + confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Message Type".translate(), + message: "Are you sure you want to delete the \"variable\"?".translate(), + footerItems: [ + { + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.gridAcceptedValues.removeItem(row); + that.dirtyAcceptedValue = true; + }, + buttonType: "success" + } + ] + }); + + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMMessageType.prototype.getDataAcceptedValues = function () { + var that = this, data = [], i; + + if (that.gridAcceptedValues.visible) { + data = that.gridAcceptedValues.getData(); + + for (i = 0; i < data.length; i += 1) { + delete data[i].key; + delete data[i].type; + } + } + return data; +}; + +PMMessageType.prototype.setDataAcceptedValues = function (stringJsonData) { + var that = this, i, data; + if (!stringJsonData) { + return; + } + + data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + + if (that.gridAcceptedValues.visible) { + for (i = 0; i < data.length; i += 1) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + msgtv_name: data[i].msgtv_name, + msgtv_default_value: data[i].msgtv_default_value + } + })); + } + } +}; + +PMMessageType.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that.buttonFieldAdd.setValue("Create".translate()); + that.buttonFieldCancel.setVisible(false); + that.resetFrmAcceptedValues(); +}; +/** + * Validate if the value is present in the data collection. + * @param value + * @returns {boolean} + */ +PMMessageType.prototype.isAcceptedValueAdded = function (value) { + var that = this, i, + data = that.gridAcceptedValues.getData(); + + for (i = 0; i < data.length; i += 1) { + if (data[i].msgtv_name === value) { + return true; + } + } + return false; +}; +/** + * Resets the fields from the form's panel for accepted values. + */ +PMMessageType.prototype.resetFrmAcceptedValues = function () { + this.frmAcceptedValues.getItems('fields').forEach(function (i) { + i.setValue(""); + }); +}; + +PMDesigner.messageType = function () { + var pmvariables = new PMMessageType(); + pmvariables.load(); +}; + +PMDesigner.messageType.create = function () { + var pmvariables = new PMMessageType(); + pmvariables.showForm(); + pmvariables.load(); +}; + +var MessageEventDefinition = function (bpmnEvent) { + var that = this, + msgNameField, + variableSelector; + + this.bpmnEvent = bpmnEvent; + this.arrayMessageType = []; + this.messageEventDefinitionOption = ""; + this.messageEventDefinitionUid = ""; + this.editRow = null; + this.eventType = bpmnEvent.evn_behavior; + this.gridCurrent = null; + this.editMessageForm = null; + this.dirtyGrid = false; + this.myTitle = ""; + + variableSelector = new CriteriaField({ + id: "txtMessageTypeVariableDefaultValue", + name: "txtMessageTypeVariableDefaultValue", + valueType: "string", + label: that.bpmnEvent.evn_marker == "MESSAGECATCH" ? "Store value in".translate() : "Get value from".translate(), + maxLength: 200, + labelWidth: "50%", + controlsWidth: 300, + proportion: 3.4, + required: false + }); + + msgNameField = { + pmType: "text", + id: "txtMessageTypeVariableName", + name: "txtMessageTypeVariableName", + label: (that.bpmnEvent.evn_marker === "MESSAGECATCH" ? "Value" : "Name").translate(), + labelWidth: "40%", + controlsWidth: 200, + proportion: 2.5, + valueType: "string", + maxLength: 255, + readOnly: true, + required: false + }; + + this.cboMessageType = new PMUI.field.DropDownListField({ + id: "cboMessageType", + name: "cboMessageType", + label: "Message Type".translate(), + options: [], + required: true, + controlsWidth: 150, + onChange: function (newValue, prevValue) { + var messageTypeData = that.getMessageTypeByIndex(that.cboMessageType.getValue()); + if (messageTypeData != null) { + that.gridCurrent.setDataItems(messageTypeData.msgt_variables); + + that._resetEditMessageForm(); + } + } + }); + + this.isDirtyFormMessageEvent = function () { + if (that.frmMessageEventDefinition1.isDirty() || that.dirtyGrid) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageType", + width: 490, + title: that.myTitle.translate(), + windowMessageType: "warning", + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.winMessageEventDefinition.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.winMessageEventDefinition.close(); + } + }; + + this.txtCorrelationValue = new CriteriaField({ + id: "txtCorrelationValue", + name: "txtCorrelationValue", + valueType: "string", + label: "Correlation Value".translate(), + maxLength: 200, + value: "", + controlsWidth: 380 + }); + + this.btnSaveVariable = new PMUI.field.ButtonField({ + id: "btnSaveVariable", + pmType: "buttonField", + value: 'Save'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.8, + handler: function (field) { + that.addVariableInGrdPnlVariable3(); + that.dirtyGrid = true; + }, + buttonType: "success" + }); + + this.btnCancelVariable = new PMUI.field.ButtonField({ + id: "btnCancelVariable", + pmType: "buttonField", + value: "Cancel".translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 55, + proportion: 0.6, + + handler: function (field) { + that.cancelAcceptedValue(); + }, + buttonType: "error" + }); + + this.frmMessageEventDefinition1 = new PMUI.form.Form({ + id: "frmMessageEventDefinition1", + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + visibleHeader: false, + items: [ + that.cboMessageType, + that.txtCorrelationValue, + { + id: "edit-panel", + pmType: "panel", + legend: "Message content".translate(), + fieldset: true, + layout: "hbox", + items: [ + that.bpmnEvent.evn_marker === "MESSAGECATCH" ? variableSelector : msgNameField, + that.bpmnEvent.evn_marker === "MESSAGECATCH" ? msgNameField : variableSelector, + that.btnCancelVariable, + that.btnSaveVariable + ] + } + ], + style: { + cssProperties: { + marginBottom: '15px' + } + } + }); + + this.editMessageForm = this.frmMessageEventDefinition1.getItem("edit-panel"); + + this.grdPnlVariable3 = new PMUI.grid.GridPanel({ + id: "grdPnlVariable3", + pageSize: 5, + style: {cssClasses: ["mafe-gridPanel"]}, + emptyMessage: "No records found".translate(), + filterable: false, + + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ""; + }, + columns: [ + { + id: "msgtv_name", + title: "Name".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 180 + }, + { + id: "msgtv_default_value", + title: "Get value from".translate(), + columnData: "msgtv_default_value", + dataType: "string", + alignmentCell: "left", + width: 300 + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.setValueMessageEventDefinition(row); + } + } + ], + + dataItems: null + }); + + this.grdPnlReceive = new PMUI.grid.GridPanel({ + id: "grdPnlVariable3", + pageSize: 5, + style: {cssClasses: ["mafe-gridPanel"]}, + emptyMessage: "No records found".translate(), + filterable: false, + tableContainerHeight: 204, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ""; + }, + + columns: [ + { + id: "msgtv_default_value", + title: "Store value in".translate(), + columnData: "msgtv_default_value", + dataType: "string", + alignmentCell: "left", + width: 200 + }, + { + id: "msgtv_name", + title: "Name Value".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 280 + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.setValueMessageEventDefinition(row); + } + } + ], + dataItems: null + }); + + this.gridCurrent = this.grdPnlVariable3; + + MessageEventDefinition.prototype.init.call(this); +}; + +MessageEventDefinition.prototype.init = function () { + var that = this; + + that.createWindow(); + that.winMessageEventDefinition.addItem(that.frmMessageEventDefinition1); + that.winMessageEventDefinition.addItem(that.gridCurrent); + + that.winMessageEventDefinition.open(); + this.editMessageForm.setVisible(false); + this.applyStylesPost(); + + that.load(); + document.getElementById("requiredMessage").style.marginTop = "15px"; +}; + +MessageEventDefinition.prototype.applyStylesPost = function () { + var that = this; + that.btnSaveVariable.controls[0].addCSSClasses(["pmui pmui-button pmui-success"]); + that.btnCancelVariable.controls[0].addCSSClasses(["pmui pmui-button pmui-error"]); + that.btnSaveVariable.controls[0].html.style.padding = "5px"; + $(that.btnCancelVariable.controls[0].html).css({ + padding: "5px", + width: "auto" + }); +}; + +MessageEventDefinition.prototype.createWindow = function () { + var that = this; + + if (that.bpmnEvent.evn_marker === "MESSAGECATCH") { + that.myTitle = (that.bpmnEvent.evn_type === "START" ? "Start Message Event" : "Intermediate Receive Message Event").translate(); + that.gridCurrent = this.grdPnlReceive; + } else if (that.bpmnEvent.evn_marker === "MESSAGETHROW") { + that.myTitle = (that.bpmnEvent.evn_type == "END" ? "End Message Event" : "Intermediate Send Message Event").translate(); + that.gridCurrent = this.grdPnlVariable3; + } + + that.winMessageEventDefinition = new PMUI.ui.Window({ + id: "winMessageEventDefinition", + title: that.myTitle.translate(), + + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + modal: true, + onBeforeClose: function () { + that.isDirtyFormMessageEvent(); + }, + footerItems: [ + { + pmType: "button", + buttonType: "error", + text: "Cancel".translate(), + handler: function () { + that.isDirtyFormMessageEvent(); + } + }, + { + pmType: "button", + buttonType: "success", + text: "Save".translate(), + + handler: function () { + var correlationValueAux, data; + if (!that.frmMessageEventDefinition1.isValid()) { + return; + } + correlationValueAux = that.frmMessageEventDefinition1.getData(); + data = { + evn_uid: that.bpmnEvent.evn_uid, + msgt_uid: that.cboMessageType.getValue(), + msged_variables: that.getVariablesByArray(that.grdPnlVariable3GetData()), + msged_correlation: correlationValueAux.txtCorrelationValue + }; + + switch (that.messageEventDefinitionOption) { + case "POST": + that.messageEventDefintionPostRestProxy(data); + + that.gridCurrent.clearItems(); + that.winMessageEventDefinition.close(); + break; + case "PUT": + that.messageEventDefintionPutRestProxy(data, that.messageEventDefinitionUid); + that.gridCurrent.clearItems(); + that.winMessageEventDefinition.close(); + break; + } + } + } + ], + + footerAlign: "right", + visibleFooter: true, + closable: true, + buttonPanelPosition: "bottom" + }); +}; + +MessageEventDefinition.prototype.getMessageTypeByIndex = function (messageTypeUid) { + var that = this, + i, + messageTypeData = null; + + if (that.arrayMessageType.length > 0) { + for (i = 0; i <= that.arrayMessageType.length - 1; i += 1) { + if (that.arrayMessageType[i].msgt_uid == messageTypeUid) { + messageTypeData = that.arrayMessageType[i]; + break; + } + } + } + return messageTypeData; +}; + +MessageEventDefinition.prototype.getVariablesByArray = function (arrayVariables) { + var variables = {}, i; + + for (i = 0; i <= arrayVariables.length - 1; i += 1) { + variables[arrayVariables[i].msgtv_name] = arrayVariables[i].msgtv_default_value; + } + + return variables; +}; + +MessageEventDefinition.prototype.getVariablesByObject = function (objectVariable) { + var that = this, + key, aux, + arrayData = []; + + for (key in objectVariable) { + aux = {}; + aux["msgtv_name"] = key; + aux["msgtv_default_value"] = objectVariable[key]; + arrayData.push(aux); + } + return arrayData; +}; + +MessageEventDefinition.prototype.load = function () { + var that = this, restProxy; + + that.messageEventDefinitionUid = ""; + that.messageEventDefinitionOption = ""; + + restProxy = new PMRestClient({ + typeRequest: "get", + endpoint: "message-event-definitions", + + functionSuccess: function (xhr, response) { + var dataResponse = response, + i, + arrayMessageEventDefinition = dataResponse, + arrayMessageEventDefinitionData = {}; + + for (i = 0; i <= arrayMessageEventDefinition.length - 1; i += 1) { + if (arrayMessageEventDefinition[i].evn_uid == that.bpmnEvent.evn_uid) { + that.messageEventDefinitionUid = arrayMessageEventDefinition[i].msged_uid + arrayMessageEventDefinitionData = arrayMessageEventDefinition[i]; + break; + } + } + + that.cboMessageTypeSetOptionsRestProxy(that.cboMessageType, (typeof(arrayMessageEventDefinitionData.msgt_uid) != "undefined") ? arrayMessageEventDefinitionData.msgt_uid : ""); + + if (that.messageEventDefinitionUid == "") { + //POST + that.messageEventDefinitionOption = "POST"; + + that.editMessageForm.getField("txtMessageTypeVariableName").setValue(""); + that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").setValue(""); + } else { + //PUT + that.messageEventDefinitionOption = "PUT"; + + that.gridCurrent.setDataItems(that.getVariablesByObject(arrayMessageEventDefinitionData.msged_variables)); + that.frmMessageEventDefinition1.getField("txtCorrelationValue").setValue(arrayMessageEventDefinitionData.msged_correlation); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.setValueMessageEventDefinition = function (row) { + var that = this, data; + + that.editRow = row; + data = row.getData(); + + that.editMessageForm.getField("txtMessageTypeVariableName").setValue(data.msgtv_name); + that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").setValue(data.msgtv_default_value); + + that.editMessageForm.setVisible(true); +}; + +MessageEventDefinition.prototype.addVariableInGrdPnlVariable3 = function () { + var that = this, + data = { + msgtv_name: that.editMessageForm.getField("txtMessageTypeVariableName").getValue(), + msgtv_default_value: that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").getValue() + }; + + if (that.editRow == null) { + that.gridCurrent.addItem(new PMUI.grid.GridPanelRow({ + data: data + })); + } else { + that.editRow.setData(data); + } + + that.cancelAcceptedValue(); +}; + +MessageEventDefinition.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that._resetEditMessageForm(); + that.editMessageForm.setVisible(false); +}; + +MessageEventDefinition.prototype.grdPnlVariable3GetData = function () { + var that = this, + i, + data = []; + + if (that.gridCurrent.visible) { + data = that.gridCurrent.getData(); + + for (i = 0; i <= data.length - 1; i += 1) { + delete data[i].key; + delete data[i].type; + } + } + return data; +}; + +MessageEventDefinition.prototype.cboMessageTypeSetOptionsRestProxy = function (cboMessageType, messageTypeUidSelected) { + var that = this, restProxy, iAux; + + cboMessageType.clearOptions(); + iAux = 0; + restProxy = new PMRestClient({ + typeRequest: "get", + endpoint: "message-types", + + functionSuccess: function (xhr, response) { + var dataResponse = response, messageTypeData, i, arrayOptions, iAux; + that.arrayMessageType = dataResponse; + arrayOptions = []; + for (i = 0; i <= dataResponse.length - 1; i += 1) { + if (dataResponse[i].msgt_uid == messageTypeUidSelected) { + iAux = i; + } + + arrayOptions.push( + { + value: dataResponse[i].msgt_uid, + label: dataResponse[i].msgt_name + } + ); + } + + if (arrayOptions.length > 0) { + cboMessageType.setOptions(arrayOptions); + + if (messageTypeUidSelected == "") { + //POST + cboMessageType.setValue(arrayOptions[0].value); + messageTypeData = that.getMessageTypeByIndex(arrayOptions[0].value); + + if (messageTypeData != null) { + that.gridCurrent.setDataItems(messageTypeData.msgt_variables); + } + } else { + //PUT + cboMessageType.setValue(arrayOptions[iAux].value); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.messageEventDefintionPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "message-event-definition", + typeRequest: "post", + data: data, + + functionSuccess: function (xhr, response) { + var dataResponse = response; + PMDesigner.msgFlash('The property event was saved successfully.'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.messageEventDefintionPutRestProxy = function (data, messageEventDefinitionUid) { + var restProxy = new PMRestClient({ + endpoint: "message-event-definition/" + messageEventDefinitionUid, + typeRequest: "update", + data: data, + + functionSuccess: function (xhr, response) { + var dataResponse = response; + PMDesigner.msgFlash('The property event was saved successfully.'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; +/** + * Reset the fields from the form's Edit panel. + * @returns {MessageEventDefinition} + * @private + */ +MessageEventDefinition.prototype._resetEditMessageForm = function () { + if (this.editMessageForm) { + this.editMessageForm.getItems().map(function (i) { + i.setValue(""); + }); + } + return this; +}; + +/** + * @class IntroHelper + * Handle Intro helper + * + * @constructor + * Creates a new instance of the class + * @param {Object} options + */ +var IntroHelper = function (options) { + this.steps = []; + this.onExit = null; + this.introjs = null; + IntroHelper.prototype.initObject.call(this, options); +}; +IntroHelper.prototype.type = 'IntroHelper'; + +IntroHelper.prototype.initObject = function (options) { + var defaults = { + steps: [], + skipLabel: "Skip", + onExit : new Function() + }; + $.extend(true, defaults, options); + this.setSteps(defaults.steps); + + this.setSkipLabel(defaults.skipLabel); + this.setNextLabel(defaults.nextLabel); + this.setPrevLabel(defaults.prevLabel); + this.setDoneLabel(defaults.doneLabel); + this.setOnExit(defaults.onExit); +}; + +IntroHelper.prototype.setSteps = function (steps) { + this.steps = steps; + return this; +}; + +IntroHelper.prototype.setSkipLabel = function (label) { + this.skipLabel = label; + return this; +}; +IntroHelper.prototype.setNextLabel = function (label) { + this.nextLabel = label; + return this; +}; + +IntroHelper.prototype.setPrevLabel = function (label) { + this.prevLabel = label; + return this; +}; + +IntroHelper.prototype.setDoneLabel = function (label) { + this.doneLabel = label; + return this; +}; + +IntroHelper.prototype.setSkipLabel = function (label) { + this.skipLabel = label; + return this; +}; + +IntroHelper.prototype.setOnExit = function (callback) { + if (callback && typeof callback == "function") { + this.onExit = callback; + } + return this; +}; + +IntroHelper.prototype.startIntro = function () { + var that = this; + this.introjs = introJs(); + this.introjs.setOptions({ + steps: this.steps, + skipLabel: this.skipLabel, + nextLabel: this.nextLabel, + prevLabel: this.prevLabel, + doneLabel: this.doneLabel + }); + this.introjs.onexit(function () { + that.onExit(); + }); + + this.introjs.start(); +}; +(function () { + PMDesigner.scriptTaskProperties = function (activity) { + var that = this, + taskUid, + taskType, + triggerSelectedData, + oldValue, + uidProj, + scrtas_uid, + buttonCancel, + restClientNewScriptTask, + restClientUpdateScriptTask, + restClientNewTrigger, + restClientUpdateTrigger, + $ctrlSpaceMessage, + triggerEngine, + getListTrigger, + getScriptTask, + formScriptTask, + buttonSave, + domSettings, + scriptTaskPropertiesWindow, + triggerUid; + + taskUid = activity.getID(); + taskType = activity.getTaskType(); + taskType = "TRIGGER"; + oldValue = ""; + uidProj = PMDesigner.project.id; + scrtas_uid = ""; + triggerUid = ""; + $ctrlSpaceMessage = $("

" + "Press".translate() + " ctrl+space " + "to get the function list".translate() + ".

"); + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelScriptButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + scriptTaskPropertiesWindow.isDirtyFormScript(); + } + }); + + restClientNewScriptTask = function (triggerUid) { + var restClient = new PMRestClient({ + endpoint: 'script-task', + typeRequest: 'post', + data: { + scrtas_obj_uid: triggerUid, + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function () { + scriptTaskPropertiesWindow.close(); + PMDesigner.msgFlash('Script Task saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateScriptTask = function (triggerUid) { + var restClient = new PMRestClient({ + endpoint: 'script-task/' + formScriptTask.getItems()[0].items.get(4).getValue(), + typeRequest: 'update', + data: { + scrtas_obj_uid: triggerUid, /*trigger uid*/ + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function () { + scriptTaskPropertiesWindow.close(); + PMDesigner.msgFlash('Script Task saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientNewTrigger = function (dataToSend, newScriptTask) { + var restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + triggerUid = response.tri_uid; + if (triggerUid != "" && typeof triggerUid != "undefinied") { + if (newScriptTask) { + restClientNewScriptTask(triggerUid); + } else { + restClientUpdateScriptTask(triggerUid); + } + } + }, + functionFailure: function (xhr, response) { + var msg = response.error.message, + arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateTrigger = function (newScriptTask) { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + formScriptTask.getItems()[0].items.get(1).getValue(), + typeRequest: 'update', + data: { + scrtas_obj_uid: formScriptTask.getItems()[0].items.get(1).getValue(), + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function (xhr, response) { + triggerUid = response.tri_uid; + if (newScriptTask) { + restClientNewScriptTask(formScriptTask.getItems()[0].items.get(1).getValue()); + } else { + restClientUpdateScriptTask(formScriptTask.getItems()[0].items.get(1).getValue()); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + buttonSave = new PMUI.ui.Button({ + id: 'saveScriptButton', + text: "Save".translate(), + handler: function (event) { + var newScriptTask, dataToSend; + if (formScriptTask.isValid()) { + if (formScriptTask.getItems()[0].items.get(4).getValue() === "") { /*new*/ + newScriptTask = true; + if (formScriptTask.getItems()[0].items.get(1).getValue() != "") { + restClientUpdateTrigger(newScriptTask); + } else { + dataToSend = { + tri_title: formScriptTask.getItems()[0].items.get(2).getValue(), + tri_description: "", + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + tri_param: "" + }; + restClientNewTrigger(dataToSend, newScriptTask); + } + } else { + newScriptTask = false; + if (formScriptTask.getItems()[0].items.get(1).getValue() !== "") { + restClientUpdateTrigger(newScriptTask); + } else { + dataToSend = { + tri_title: formScriptTask.getItems()[0].items.get(2).getValue(), + tri_description: "", + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + tri_param: "" + }; + restClientNewTrigger(dataToSend, newScriptTask); + } + } + } + }, + buttonType: 'success' + }); + + scriptTaskPropertiesWindow = new PMUI.ui.Window({ + id: "scriptTaskPropertiesWindow", + title: "Script Task Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formScriptTask.getItems()[1].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '208px', + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + } + } + }, + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + scriptTaskPropertiesWindow.isDirtyFormScript(); + } + }); + + scriptTaskPropertiesWindow.isDirtyFormScript = function () { + var that = this, + message_window, + title = "Script Task".translate(); + if (oldValue !== formScriptTask.getItems()[1].controls[0].cm.getValue()) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: title, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + + triggerEngine = new PMUI.field.DropDownListField({ + id: "triggerEngine", + name: "triggerEngine", + label: "Title".translate(), + options: null, + controlsWidth: 400, + required: true, + onChange: function (newValue, prevValue) { + var uidTri = newValue, i; + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid == uidTri) { + formScriptTask.getItems()[1].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + } + } + } + }); + + getListTrigger = function (triggerEngine) { + var restClient = new PMRestClient({ + endpoint: 'triggers', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var arrayOptions = [], i; + triggerSelectedData = response; + arrayOptions[0] = { + label: "- Select a trigger -".translate(), + value: "", + disabled: true, + selected: true + }; + for (i = 0; i <= triggerSelectedData.length - 1; i += 1) { + arrayOptions.push( + { + value: triggerSelectedData[i].tri_uid, + label: triggerSelectedData[i].tri_title + } + ); + } + triggerEngine.setOptions(arrayOptions); + triggerEngine.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + + getScriptTask = function () { + var restClient = new PMRestClient({ + endpoint: 'script-task/activity/' + taskUid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var i; + if (typeof response == "object") { + triggerUid = response.scrtas_obj_uid; + if (triggerUid != "" && typeof triggerUid != "undefinied") { + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid == triggerUid) { + formScriptTask.getItems()[1].controls[0].setValue(triggerSelectedData[i].tri_webbot); + oldValue = triggerSelectedData[i].tri_webbot; + formScriptTask.getItems()[0].items.get(4).setValue(response.scrtas_uid); + formScriptTask.getItems()[0].items.get(1).setValue(triggerUid); + } + } + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + formScriptTask = new PMUI.form.Form({ + id: "formScriptTask", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formScriptTask", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "taskUid", + pmType: "text", + label: "ID".translate(), + value: taskUid, + name: "taskUid", + readOnly: true, + visible: false, + valueType: 'string' + }, + triggerEngine, + { + id: "newScript", + pmType: "text", + label: "Title".translate(), + controlsWidth: 400, + value: "", + name: "newScript", + required: false, + visible: false, + valueType: 'string' + }, + { + id: "taskType", + pmType: "text", + value: taskType, + name: "taskType", + visible: false, + valueType: 'string' + }, + { + id: "scrtas_uid", + pmType: "text", + value: scrtas_uid, + name: "scrtas_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + that.cd = new PMCodeMirrorField({ + labelWidth: '23.8%' + }); + that.cd.setLabel("Code".translate()); + formScriptTask.addItem(that.cd); + formScriptTask.getItems()[1].setName('code'); + formScriptTask.getItems()[1].setID('code'); + formScriptTask.getItems()[1].setHeight(300); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + + getListTrigger(triggerEngine); + getScriptTask(); + /*end form*/ + + domSettings = function () { + var codeMirrorControl, requiredMessage, titleAdd, titleBack; + codeMirrorControl = formScriptTask.getItems()[1].controls[0].cm; + formScriptTask.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(650, 255); //CodeMirror Size + $("#code").find(".CodeMirror-wrap").css({'border': '1px solid #c0c0c0'}); + codeMirrorControl.refresh(); + } + requiredMessage = $(document.getElementById("requiredMessage")); + scriptTaskPropertiesWindow.body.appendChild(requiredMessage[0]); + requiredMessage[0].style['marginTop'] = '65px'; + + scriptTaskPropertiesWindow.footer.html.style.textAlign = 'right'; + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + + titleAdd = "Add new".translate(); + titleBack = "Back to list".translate(); + + $("#triggerEngine").find("select").after('  '); + $("#newScript").find("input").after('  '); + $("#titleAdd, #titleBack").tooltip(); + }; + + scriptTaskPropertiesWindow.addItem(formScriptTask); + scriptTaskPropertiesWindow.open(); + scriptTaskPropertiesWindow.showFooter(); + domSettings(); + + $(".showHideScript").on("click", function () { + if (formScriptTask.getItems()[0].items.get(1).isVisible()) { + formScriptTask.getItems()[0].items.get(1).setVisible(false); + } else { + formScriptTask.getItems()[0].items.get(1).setVisible(true); + formScriptTask.getItems()[0].items.get(1).setValue(""); + formScriptTask.getItems()[0].items.get(2).setRequired(false); + formScriptTask.getItems()[0].items.get(1).setRequired(true); + $(formScriptTask.getItems()[0].items.get(1).html).find("select").focus(); + } + + if (!formScriptTask.getItems()[0].items.get(2).isVisible()) { + formScriptTask.getItems()[0].items.get(2).setVisible(true); + formScriptTask.getItems()[0].items.get(1).setRequired(false); + formScriptTask.getItems()[0].items.get(1).setValue(""); + formScriptTask.getItems()[0].items.get(2).setRequired(true); + formScriptTask.getItems()[0].items.get(2).setValue(""); + $(formScriptTask.getItems()[0].items.get(2).html).find("input").focus(); + } else { + formScriptTask.getItems()[0].items.get(2).setVisible(false); + } + formScriptTask.getItems()[1].controls[0].cm.setValue(""); + oldValue = ""; + + }); + + }; +}()); + +(function () { + PMDesigner.timerEventProperties = function (activity) { + var that = this, + evnUid = activity.getID(), + activityType = activity.getEventMarker(), + uidProj = PMDesigner.project.id, + oldValues, + tmrevn_uid = "", + dataTimer = "", + buttonCancel, + restClientNewTimerEvent, + buttonSave, + restClientUpdateTimerEvent, + timerEventPropertiesWindow, + showHourlyItems, + showDailyItems, + showMonthlyItems, + showOneDateTimeItems, + showEveryItems, + showWaitForItems, + showWaitUntilItems, + varshowHourlyItems, + endDate, + oneDateTime, + daysGroup, + monthsGroup, + radioGroup, + dateTimeVariablePicker, + formTimerEvent, + getFormData, + getTimerEventData, + validateItems, + domSettings, + eventType = activity.getEventType(), + regexDay = new RegExp(/^(((0|1|2)?[0-9])|(3[01]))$/), + regexHour = new RegExp(/^(((0|1)?[0-9])|(2[0-4]))$/), + regexMinute = new RegExp(/^([0-5]?[0-9])$/); + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelTimmerButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + formTimerEvent.getField('startDate').controls[0].hideCalendar(); + formTimerEvent.getField('endDate').controls[0].hideCalendar(); + formTimerEvent.getField('oneDateTime').controls[0].hideCalendar(); + formTimerEvent.getField('dateTimeVariablePicker').controls[0].hideCalendar(); + timerEventPropertiesWindow.isDirtyFormScript(); + } + }); + + restClientNewTimerEvent = function (dataToSave) { + var restClient = new PMRestClient({ + endpoint: 'timer-event', + typeRequest: 'post', + data: dataToSave, + functionSuccess: function (xhr, response) { + timerEventPropertiesWindow.close(); + PMDesigner.msgFlash('Timer Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateTimerEvent = function (dataToSave) { + var restClient = new PMRestClient({ + endpoint: 'timer-event/' + formTimerEvent.getField("tmrevn_uid").getValue(), + typeRequest: 'update', + data: dataToSave, + functionSuccess: function (xhr, response) { + timerEventPropertiesWindow.close(); + PMDesigner.msgFlash('Timer Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + buttonSave = new PMUI.ui.Button({ + id: 'saveTimmerButton', + text: "Save".translate(), + handler: function (event) { + var i, + opt, + formData; + + formTimerEvent.getField("hourType").setValue(getData2PMUI(formTimerEvent.html).hourType); + formTimerEvent.getField("minuteType").setValue(getData2PMUI(formTimerEvent.html).minuteType); + formTimerEvent.getField("dayType").setValue(getData2PMUI(formTimerEvent.html).dayType); + if (formTimerEvent.isValid()) { + opt = formTimerEvent.getField("radioGroup").getValue(); + formData = formTimerEvent.getData(); + switch (opt) { + case "1": /*hourly*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "HOURLY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "2": /*daily*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "DAILY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ), + tmrevn_configuration_data: JSON.parse(formData.daysGroup).map(function (n) { + return Number(n); + }) + }; + break; + case "3": /*monthly*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "MONTHLY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_day: formData.dayType.length == 1 ? "0" + formData.dayType : (formData.dayType.length == 0 ? "00" : formData.dayType ), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ), + tmrevn_configuration_data: JSON.parse(formData.monthsGroup).map(function (n) { + return Number(n); + }) + }; + break; + case "4": /*one-date-time*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "ONE-DATE-TIME", + tmrevn_next_run_date: $("#oneDateTime").find("input:eq(0)").val() + }; + for (var i in ENABLED_FEATURES) { + if (ENABLED_FEATURES[i] == 'oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=') { + dataTimer.tmrevn_next_run_date = convertDatetimeToIso8601(dataTimer.tmrevn_next_run_date); + } + } + break; + case "5": /*every*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "EVERY", + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "6": /*wait for*/ + if ((formData.dayType === '' || formData.dayType === '00' || formData.dayType === '0') && + (formData.hourType === '' || formData.hourType === '00' || formData.hourType === '0') && + (formData.minuteType === '' || formData.minuteType === '00' || formData.minuteType === '0')) { + PMDesigner.msgWinError("The amount of time entered is not valid. Please fill in at least one of the fields (day, hour, or minute)".translate()); + return; + } else { + if (!regexDay.test(formData.dayType) || !regexHour.test(formData.hourType) || !regexMinute.test(formData.minuteType)) { + PMDesigner.msgWinError("The amount of time entered is not valid. Please fill in at least one of the fields (day, hour, or minute)".translate()); + return; + } + } + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "WAIT-FOR", + tmrevn_day: formData.dayType.length == 1 ? "0" + formData.dayType : (formData.dayType.length == 0 ? "00" : formData.dayType ), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "7": /*wait until specified date time*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "WAIT-UNTIL-SPECIFIED-DATE-TIME", + tmrevn_configuration_data: $("#dateTimeVariablePicker").find("input:eq(0)").val() + }; + break; + } + if (formTimerEvent.getField("tmrevn_uid").getValue() == "") { + restClientNewTimerEvent(dataTimer); + } else { + restClientUpdateTimerEvent(dataTimer); + } + } + }, + buttonType: 'success' + }); + + timerEventPropertiesWindow = new PMUI.ui.Window({ + id: "timerEventPropertiesWindow", + title: "Timer Event Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + formTimerEvent.getField('startDate').controls[0].hideCalendar(); + formTimerEvent.getField('endDate').controls[0].hideCalendar(); + formTimerEvent.getField('oneDateTime').controls[0].hideCalendar(); + formTimerEvent.getField('dateTimeVariablePicker').controls[0].hideCalendar(); + timerEventPropertiesWindow.isDirtyFormScript(); + } + }); + + timerEventPropertiesWindow.isDirtyFormScript = function () { + var that = this, + title = "Timer Event".translate(), + newValues = getFormData($("#formTimerEvent")); + if (JSON.stringify(oldValues) !== JSON.stringify(newValues)) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: title, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + showHourlyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showDailyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(true); + formTimerEvent.getField('daysGroup').setRequired(true); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showMonthlyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(true); + formTimerEvent.getField('monthsGroup').setRequired(true); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showOneDateTimeItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('startDate').setRequired(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(true); + formTimerEvent.getField('oneDateTime').setRequired(true); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(false); + }; + + showEveryItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('startDate').setRequired(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + /*intermediate*/ + showWaitForItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getField('dateTimeVariablePicker').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + }; + + showWaitUntilItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(true); + formTimerEvent.getField('dateTimeVariablePicker').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(false); + }; + + radioGroup = new PMUI.field.RadioButtonGroupField({ + id: 'radioGroup', + controlPositioning: 'horizontal', + maxDirectionOptions: 7, + options: [ + { + label: "Hourly".translate(), + value: "1" + }, + { + label: "Daily".translate(), + value: "2" + }, + { + label: "Monthly".translate(), + value: "3" + }, + { + label: "One date/time".translate(), + value: "4" + }, + { + label: "Every".translate(), + value: "5" + }, + { + label: "Wait for".translate(), + value: "6" + }, + { + label: "Wait until specified date/time".translate(), + value: "7" + } + + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "1": + showHourlyItems(); + break; + case "2": + showDailyItems(); + break; + case "3": + showMonthlyItems(); + break; + case "4": + showOneDateTimeItems(); + break; + case "5": + showEveryItems(); + break; + case "6": + showWaitForItems(); + break; + case "7": + showWaitUntilItems(); + break; + } + }, + value: "1" + }); + + startDate = new PMUI.field.DateTimeField({ + id: 'startDate', + label: 'Start date'.translate(), + datetime: false, + dateFormat: 'yy-mm-dd', + firstDay: 1, + controlsWidth: 100, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + endDate = new PMUI.field.DateTimeField({ + id: 'endDate', + label: "End date".translate(), + value: '', + disabled: true, + datetime: false, + dateFormat: 'yy-mm-dd', + firstDay: 1, + controlsWidth: 100, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + oneDateTime = new PMUI.field.DateTimeField({ + id: 'oneDateTime', + label: 'Date time'.translate(), + datetime: true, + dateFormat: 'yy-mm-dd HH:ii:ss', + firstDay: 1, + controlsWidth: 150, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + daysGroup = new PMUI.field.CheckBoxGroupField({ + label: "Days".translate(), + id: 'daysGroup', + controlPositioning: 'vertical', + maxDirectionOptions: 3, + required: true, + options: [ + { + label: 'Monday'.translate(), + value: 1, + name: 'monday', + selected: true + }, + { + label: 'Tuesday'.translate(), + value: 2, + name: 'tuesday', + selected: true + }, + { + label: 'Wednesday'.translate(), + value: 3, + name: 'wednesday', + selected: true + }, + { + label: 'Thursday'.translate(), + value: 4, + name: 'thursday', + selected: true + }, + { + label: 'Friday'.translate(), + value: 5, + name: 'friday', + selected: true + }, + { + label: 'Saturday'.translate(), + value: 6, + name: 'saturday', + selected: true + }, + { + label: 'Sunday'.translate(), + value: 7, + name: 'sunday', + selected: true + } + ], + onChange: function (newVal, oldVal) { + + } + }); + + monthsGroup = new PMUI.field.CheckBoxGroupField({ + label: "Months".translate(), + id: 'monthsGroup', + controlPositioning: 'vertical', + maxDirectionOptions: 3, + required: true, + options: [ + { + label: 'January'.translate(), + value: 1, + name: 'january', + selected: true + }, + { + label: 'February'.translate(), + value: 2, + selected: true + }, + { + label: 'March'.translate(), + value: 3, + selected: true + }, + { + label: 'April'.translate(), + value: 4, + selected: true + }, + { + label: 'May'.translate(), + value: 5, + selected: true + }, + { + label: 'June'.translate(), + value: 6, + selected: true + }, + { + label: 'July'.translate(), + value: 7, + selected: true + }, + { + label: 'August'.translate(), + value: 8, + selected: true + }, + { + label: 'September'.translate(), + value: 9, + selected: true + }, + { + label: 'October'.translate(), + value: 10, + selected: true + }, + { + label: 'November'.translate(), + value: 11, + selected: true + }, + { + label: 'December'.translate(), + value: 12, + selected: true + } + ], + onChange: function (newVal, oldVal) { + + } + }); + + dateTimeVariablePicker = new PMUI.field.DateTimeField({ + id: 'dateTimeVariablePicker', + label: 'Date time'.translate(), + datetime: true, + dateFormat: 'yy-mm-dd HH:ii:ss', + firstDay: 1, + controlsWidth: 150, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + formTimerEvent = new PMUI.form.Form({ + id: "formTimerEvent", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formTimerEvent", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "evnUid", + pmType: "text", + value: evnUid, + name: "evnUid", + readOnly: true, + visible: false, + valueType: 'string' + }, + { + id: "activityType", + pmType: "text", + value: activityType, + name: "activityType", + readOnly: true, + visible: false, + valueType: 'string' + }, + radioGroup, + { + pmType: "panel", + id: "datesPanel", + layout: 'hbox', + items: [ + startDate, + { + pmType: "checkbox", + id: "endDateCheckbox", + label: "End date".translate(), + controlPositioning: 'vertical', + maxDirectionOptions: 2, + value: '', + options: [ + { + label: "End date:".translate(), + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + if (newVal[2] == "1") { + $('#endDate').find('input:eq(0)').removeProp("disabled"); + } else { + $('#endDate').find('input:eq(0)').val('').attr("disabled", "disabled"); + formTimerEvent.getField('endDate').setValue(''); + } + } + }, + endDate, + oneDateTime, + dateTimeVariablePicker + ] + }, + { + pmType: "panel", + id: "dayHourMonthPanel", + layout: 'hbox', + items: [ + { + id: "dayType", + label: "Day".translate(), + pmType: "text", + value: "", + name: "dayType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + }, + { + id: "hourType", + label: "Hour".translate(), + pmType: "text", + value: "", + name: "hourType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + }, + { + id: "minuteType", + label: "Minute".translate(), + pmType: "text", + value: "", + name: "minuteType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + } + ] + }, + daysGroup, + monthsGroup, + { + id: "tmrevn_uid", + pmType: "text", + value: tmrevn_uid, + name: "tmrevn_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + formTimerEvent.initialData = function () { + var formElements = this.getItems()[0], + datesPanelElements, + radioGroupValues = {'radioGroup': formElements.items.get(2).getValue()}; + oldValues.push(radioGroupValues); + datesPanelElements = formElements.items.get(3).getItems(); + + }; + + getFormData = function ($form) { + var unindexed_array = $form.serializeArray(), + indexed_array = {}; + + $.map(unindexed_array, function (n, i) { + indexed_array[n['name']] = n['value']; + }); + return indexed_array; + }; + + getTimerEventData = function () { + var restClient = new PMRestClient({ + endpoint: 'timer-event/event/' + formTimerEvent.getField("evnUid").getValue(), + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (typeof response === "object" && JSON.stringify(response).length > 2) { + var opt = response.tmrevn_option.toUpperCase(); + switch (opt) { + case "HOURLY": + $("#radioGroup").find("input:eq(0)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "DAILY": + $("#radioGroup").find("input:eq(1)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + formTimerEvent.getField("daysGroup").setValue(""); + formTimerEvent.getField("daysGroup").setValue(JSON.stringify(response.tmrevn_configuration_data.map(function (n) { + return n.toString(); + }))); + break; + case "MONTHLY": + $("#radioGroup").find("input:eq(2)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("dayType").setValue(response.tmrevn_day); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + formTimerEvent.getField("monthsGroup").setValue(""); + formTimerEvent.getField("monthsGroup").setValue(JSON.stringify(response.tmrevn_configuration_data.map(function (n) { + return n.toString(); + }))); + break; + case "ONE-DATE-TIME": + $("#radioGroup").find("input:eq(3)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + var d = response.tmrevn_next_run_date.replace(/-/g, "/"); + for (var i in ENABLED_FEATURES) { + if (ENABLED_FEATURES[i] == 'oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=') { + d = response.tmrevn_next_run_date; + } + } + d = new Date(d); + formTimerEvent.getField("oneDateTime").setValue(d); + break; + case "EVERY": + $("#radioGroup").find("input:eq(4)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "WAIT-FOR": + $("#radioGroup").find("input:eq(5)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("dayType").setValue(response.tmrevn_day); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "WAIT-UNTIL-SPECIFIED-DATE-TIME": + $("#radioGroup").find("input:eq(6)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + var d = response.tmrevn_configuration_data.replace(/-/g, "/"); + d = new Date(d); + formTimerEvent.getField("dateTimeVariablePicker").setValue(d); + break; + } + } else { + if (eventType == "START") { + $("#radioGroup").find("input:eq(1)").trigger("click"); + } else { + $("#radioGroup").find("input:eq(5)").trigger("click"); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + /*end form*/ + + validateItems = function (itemId) { + var regexTest, + message, + valueItem, + regexTest; + + if (itemId === 'dayType') { + regexTest = regexDay; + message = "Error value: Day: 0 - 31".translate(); + } else if (itemId === 'hourType') { + regexTest = regexHour; + message = "Error value: Hour: 0 - 23".translate(); + } else if (itemId === 'minuteType') { + regexTest = regexMinute; + message = "Error value: Minute: 0 - 59".translate(); + } + + valueItem = $('#' + itemId).find('span input:eq(0)').val(); + + if (!regexTest.test(valueItem)) { + PMDesigner.msgFlash(message, timerEventPropertiesWindow, 'error', 3000, 5); + $('#' + itemId).find('span input:eq(0)').val(''); + return false; + } + }; + + domSettings = function () { + var requiredMessage = $(document.getElementById("requiredMessage")); + timerEventPropertiesWindow.body.appendChild(requiredMessage[0]); + requiredMessage[0].style['marginTop'] = '70px'; + + timerEventPropertiesWindow.footer.html.style.textAlign = 'right'; + + $('#hourType, #dayType, #minuteType').find('span input:eq(0)').bind('blur change', function () { + validateItems($(this).closest('div').attr('id')); + }); + + $("#dayType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "31"}); + $("#hourType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "23"}); + $("#minuteType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "59"}); + + $("#radioGroup").css({"text-align": "center", "margin-bottom": "20px"}).find("label:eq(0)").remove(); + $("#endDateCheckbox").css({"width": "170px", "top": "6px", "left": "28px"}).find("label:eq(0)").remove(); + $("#endDateCheckbox").find("table:eq(0)").css("border", "0px"); + $("#startDate").css("width", ""); + $("#endDate").css("width", "104px").find("label:eq(0)").remove(); + $("#oneDateTime").css("width", ""); + $("#datesPanel").css("text-align", "center").find("label").css({ + "width": "", + "float": "", + "text-align": "right" + }); + $("#dayHourMonthPanel").css("text-align", "center").find("label").css({"float": "", "width": "34.5%"}); + + $("#daysGroup").css("text-align", "center").find("label:eq(0)").remove(); + $("#monthsGroup").css("text-align", "center").find("label:eq(0)").remove(); + $("#daysGroup").find("input").each(function () { + $(this).attr("name", $(this).val()); + }); + + $("#dateTimeVariablePicker").css("width", ""); + + + if (eventType == "START") { + $(formTimerEvent.getField("radioGroup").controls[0].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[1].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[2].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[3].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[4].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[5].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[6].html).parent().hide(); + $("#radioGroup").find("input:eq(1)").trigger("click"); + } else { + $(formTimerEvent.getField("radioGroup").controls[0].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[1].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[2].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[3].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[4].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[5].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[6].html).parent().show(); + $("#radioGroup").find("input:eq(5)").trigger("click"); + } + }; + + timerEventPropertiesWindow.addItem(formTimerEvent); + timerEventPropertiesWindow.open(); + formTimerEvent.eventsDefined = false; + formTimerEvent.defineEvents(); + timerEventPropertiesWindow.showFooter(); + domSettings(); + getTimerEventData(); + oldValues = getFormData($("#formTimerEvent")); + }; +}()); + + +(function () { + PMDesigner.emailEventProperties = function (activity) { + var that = this, + buttonCancel, + buttonSave, + emailEventPropertiesWindow, + emailAcounts, + emailContent, + getEmailAccounts, + formEmailEvent, + emailWindowTinyMCE, + getFormData, + getEmailEventData, + domSettings, + activityId = activity.getID(), + activityType = activity.getEventMarker(), + uidProj = PMDesigner.project.id, + initTinyMCE = null, + oldValues, + emailEventId = "", + prf_uid = "", + ddSize = 21, + auxFromMail = {}, + defaultServerlabel = "Mail (PHP)".translate(), + triggerSelectedData; + /*options to display in drop down*/ + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelEmailEventsButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = false; + emailEventPropertiesWindow.isDirtyFormScript(); + } + }); + + buttonSave = new PMUI.ui.Button({ + id: 'saveEmailEventsButton', + text: "Save".translate(), + handler: function (event) { + PMDesigner.hideAllTinyEditorControls(); + var dataForm = formEmailEvent.getData(), + selectedAccount = formEmailEvent.getField('emailAcounts').getValue(); + if (formEmailEvent.isValid()) { + if (dataForm.emailEventId == "") { /*insert*/ + (new PMRestClient({ + endpoint: 'file-manager', + typeRequest: 'post', + messageError: '', + data: { + prf_filename: "emailEvent_" + new Date().getTime() + ".html", + prf_path: "templates", + prf_content: dataForm.filecontent + }, + functionSuccess: function (xhr, response) { + var restClient; + prf_uid = response.prf_uid; + if (prf_uid != "" && typeof prf_uid != "undefined") { + restClient = new PMRestClient({ + endpoint: 'email-event', + typeRequest: 'post', + data: { + evn_uid: activityId, + email_event_from: auxFromMail[selectedAccount] || '', + email_event_to: dataForm.ToEmail, + email_event_subject: dataForm.subjectEmail, + email_server_uid: dataForm.emailAcounts, + prf_uid: prf_uid + }, + functionSuccess: function () { + emailEventPropertiesWindow.close(); + PMDesigner.msgFlash('Email Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Email Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + + + } else { + (new PMRestClient({ + endpoint: 'file-manager/' + dataForm.prf_uid, + typeRequest: 'update', + messageError: '', + data: { + prf_content: tinyMCE.activeEditor.getContent() + }, + functionSuccess: function (xhr, response) { + var restClient; + prf_uid = response.prf_uid; + if (prf_uid != "" && typeof prf_uid != "undefined") { + restClient = new PMRestClient({ + endpoint: 'email-event/' + dataForm.emailEventId, + typeRequest: 'update', + data: { + evn_uid: activityId, + email_event_from: auxFromMail[selectedAccount] || '', + email_event_to: dataForm.ToEmail, + email_event_subject: dataForm.subjectEmail, + email_server_uid: dataForm.emailAcounts, + prf_uid: prf_uid + }, + functionSuccess: function () { + emailEventPropertiesWindow.close(); + PMDesigner.msgFlash('Email Event Edited correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems Edited the Email Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + } + } + }, + buttonType: 'success' + }); + + emailEventPropertiesWindow = new PMUI.ui.Window({ + id: "emailEventPropertiesWindow", + title: "Email Event Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = true; + emailEventPropertiesWindow.isDirtyFormScript(); + } + }); + + emailEventPropertiesWindow.isDirtyFormScript = function () { + var that = this, + newValues, + message_window, + formData = formEmailEvent.getData(); + formData.filecontent = $(tinyMCE.activeEditor.getContent()).text().trim().length ? tinyMCE.activeEditor.getContent() : ""; + newValues = formData; + if (JSON.stringify(oldValues) !== JSON.stringify(newValues)) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Email Event".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + emailAcounts = new PMUI.field.DropDownListField({ + id: "emailAcounts", + name: "emailAcounts", + label: "From".translate(), + options: null, + controlsWidth: 400, + required: false, + labelWidth: "15%", + onChange: function (newValue, prevValue) { + var uidTri = newValue, + oldValue, + i; + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid === uidTri) { + formScriptTask.getItems()[1].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + oldValue = triggerSelectedData[i].tri_webbot; + } + } + } + }); + emailContent = new PMUI.field.TextAreaField({ + id: 'filecontent', + name: 'filecontent', + label: 'Content'.translate(), + required: true, + value: '', + rows: 210, + labelWidth: "15%", + controlsWidth: 720, + onChange: function (currentValue, previousValue) { + }, + style: {cssClasses: ['mafe-textarea-resize']} + }); + getEmailAccounts = function (emailAcounts) { + var restClient = new PMRestClient({ + endpoint: 'email-event/accounts/emailServer', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var i, + arrayOptions; + triggerSelectedData = response; + arrayOptions = []; + arrayOptions[0] = { + label: "Default email account".translate(), + value: "", + disabled: false, + selected: true + }; + for (i = 0; i < triggerSelectedData.length ; i += 1) { + arrayOptions.push({ + value: triggerSelectedData[i].uid, + label: response[i].mess_engine === "MAIL" ? + triggerSelectedData[i].mess_from_name && triggerSelectedData[i].mess_from_name !== "" ? + triggerSelectedData[i].mess_from_name : defaultServerlabel : triggerSelectedData[i].mess_from_name && triggerSelectedData[i].mess_from_name !== "" ? + triggerSelectedData[i].mess_from_name + ' <' + triggerSelectedData[i].mess_account + '>' : ' <' + triggerSelectedData[i].mess_account + '>' + }); + auxFromMail[triggerSelectedData[i].uid] = triggerSelectedData[i].email; + } + emailAcounts.setOptions(arrayOptions); + emailAcounts.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + formEmailEvent = new PMUI.form.Form({ + id: "formEmailEvent", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formEmailEvent", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "activityId", + pmType: "text", + value: activityId, + name: "activityId", + visible: false, + valueType: 'string' + }, + { + id: "activityType", + pmType: "text", + value: activityType, + name: "activityType", + visible: false, + valueType: 'string' + }, + emailAcounts, + new CriteriaField({ + id: "ToEmail", + pmType: "text", + helper: "The email can be a string or a variable (@@myEmail), comma separated list of emails".translate(), + label: "To".translate(), + controlsWidth: 400, + value: "", + name: "ToEmail", + required: true, + visible: true, + labelWidth: "15%", + valueType: 'string' + }), + new CriteriaField({ + id: 'subjectEmail', + pmType: 'text', + label: "Subject".translate(), + controlsWidth: 400, + value: "", + name: "subjectEmail", + required: false, + visible: true, + labelWidth: "15%", + valueType: 'string' + }), + emailContent, + { + id: "emailEventId", + pmType: "text", + value: emailEventId, + name: "emailEventId", + visible: false, + valueType: 'string' + }, + { + id: "prf_uid", + pmType: "text", + value: prf_uid, + name: "prf_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + emailWindowTinyMCE = function () { + initTinyMCE = function () { + tinyMCE.activeEditor.domainURL = "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/"; + tinyMCE.activeEditor.processID = PMDesigner.project.id; + }; + formEmailEvent.getField('filecontent').getControls()[0].getHTML().className = 'tmceEditor'; + applyStyleWindowForm(emailEventPropertiesWindow); + tinyMCE.init({ + editor_selector: 'tmceEditor', + mode: 'specific_textareas', + directionality: 'ltr', + verify_html: false, + skin: 'o2k7', + theme: 'advanced', + skin_variant: 'silver', + relative_urls : false, + remove_script_host : false, + convert_urls: false, + plugins: 'advhr,advimage,advlink,advlist,autolink,autoresize,contextmenu,directionality,emotions,example,example_dependency,fullpage,fullscreen,iespell,inlinepopups,insertdatetime,layer,legacyoutput,lists,media,nonbreaking,noneditable,pagebreak,paste,preview,print,save,searchreplace,style,tabfocus,table,template,visualblocks,visualchars,wordcount,xhtmlxtras,pmSimpleUploader,pmVariablePicker,style', + theme_advanced_buttons1: 'pmSimpleUploader,|,pmVariablePicker,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect,|,cut,copy,paste', + theme_advanced_buttons2: 'bullist,numlist,|,outdent,indent,blockquote,|,tablecontrols,|,undo,redo,|,link,unlink,image,|,forecolor,backcolor,styleprops', + theme_advanced_buttons3: 'hr,removeformat,visualaid,|,sub,sup,|,ltr,rtl,|,code', + popup_css: "/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css", + oninit: initTinyMCE, + onchange_callback: function (inst) { + formEmailEvent.getField('filecontent').setValue(tinyMCE.activeEditor.getContent({format: 'raw'})); + }, + handle_event_callback: function (e) { + }, + setup: function (ed) { + ed.onSetContent.add(function (ed, l) { + formEmailEvent.getField('filecontent').setValue(tinyMCE.activeEditor.getContent({format: 'raw'})); + }); + } + }); + }; + getFormData = function ($form) { + var unindexed_array = $form.serializeArray(), + indexed_array = {}; + + $.map(unindexed_array, function (n, i) { + indexed_array[n['name']] = n['value']; + }); + return indexed_array; + }; + getEmailEventData = function () { + var restClient = new PMRestClient({ + endpoint: 'email-event/' + activityId, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var valFrom; + if (typeof response === "object") { + emailEventId = response.email_event_uid; + if (emailEventId !== "" && typeof emailEventId !== "undefined") { + formEmailEvent.getField('emailEventId').setValue(response.email_event_uid); + // Set as selected the email server by uid + if (response.email_server_uid !== "" && typeof response.email_server_uid !== "undefined") { + formEmailEvent.getField('emailAcounts').setValue(response.email_server_uid); + } + formEmailEvent.getField('subjectEmail').setValue(response.email_event_subject); + formEmailEvent.getField('ToEmail').setValue(response.email_event_to); + + formEmailEvent.getField('prf_uid').setValue(response.prf_uid); + + (new PMRestClient({ + endpoint: 'file-manager', + typeRequest: 'get', + messageError: '', + data: { + path: "templates" + }, + functionSuccess: function (xhr, response) { + for (var i = 0; i < response.length; i += 1) { + if (response[i].prf_uid == formEmailEvent.getField('prf_uid').getValue()) { + formEmailEvent.getField('filecontent').setValue(response[i].prf_content); + if (!$(tinyMCE.activeEditor.getContent()).text().trim().length) { + tinyMCE.activeEditor.setContent(response[i].prf_content); + } + break; + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + getEmailAccounts(emailAcounts); + + /*end form*/ + + this.deleteEmailEventByEventUid = function () { + (new PMRestClient({ + endpoint: 'email-event/by-event/' + activityId, + typeRequest: 'remove', + messageError: '', + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + })).executeRestClient(); + return this; + }; + + domSettings = function () { + emailEventPropertiesWindow.footer.html.style.textAlign = 'right'; + $("#emailAcounts").find("select:eq(0)").css("height", "auto").attr({ + "onmousedown": "if(this.options.length>" + ddSize + "){this.size=" + ddSize + ";}", + "onchange": "this.size=0;", + "onblur": "this.size=0;" + }); + }; + emailEventPropertiesWindow.addItem(formEmailEvent); + emailEventPropertiesWindow.open(); + emailEventPropertiesWindow.showFooter(); + emailWindowTinyMCE(); + domSettings(); + getEmailEventData(); + oldValues = formEmailEvent.getData(); + }; +}()); + + +SaveAsForm = function (settings) { + Mafe.Form.call(this, settings); + SaveAsForm.prototype.init.call(this, settings); +}; +SaveAsForm.prototype = new Mafe.Form(); +SaveAsForm.prototype.init = function () { + var that = this; + that.onSave = new Function(); + that.onCancel = new Function(); + that.setID("SaveAsForm"); + that.setTitle("Save as".translate()); + that.setItems([{ + id: "prj_name", + name: "pro_title", + pmType: "text", + label: "Title".translate(), + placeholder: "Title".translate(), + maxLength: 100, + required: true + }, { + id: "prj_description", + pmType: "textarea", + name: "pro_description", + label: "Description".translate(), + placeholder: "Description".translate(), + rows: 200 + }, { + id: "pro_category", + name: "pro_category", + pmType: "dropdown", + label: "Category".translate(), + options: [ + {value: "", label: "No Category".translate()} + ] + } + ]); + that.setButtons([{ + id: "idCancel", + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + that.onCancel(); + } + }, { + id: "idSave", + text: "Save".translate(), + buttonType: "success", + handler: function () { + that.onSave(); + } + } + ]); + that.loadCategory(); +}; +SaveAsForm.prototype.loadCategory = function () { + var that = this, + titleProcess; + var a = new PMRestClient({ + typeRequest: "post", + multipart: true, + data: { + calls: [{ + url: "project/categories", + method: "GET" + }, { + url: "project/" + PMDesigner.project.projectId + "/process", + method: "GET" + } + ] + }, + functionSuccess: function (xhr, response) { + var i, dt, category = that.getField("pro_category"); + dt = response[0].response; + for (i = 0; i < dt.length; i++) { + category.addOption({ + value: dt[i].cat_uid, + label: dt[i].cat_name + }); + } + //load data + dt = response[1].response; + titleProcess = "Copy of".translate() + " [" + dt.pro_title + "]"; + that.getField("pro_title").setValue(titleProcess.substring(0, 100)); + that.getField("pro_description").setValue(dt.pro_description); + that.getField("pro_category").setValue(dt.pro_category); + }, + functionFailure: function (xhr, response) { + } + }); + a.setBaseEndPoint(""); + a.executeRestClient(); +}; + +SaveAs = function (settings) { + Mafe.Window.call(this, settings); + SaveAs.prototype.init.call(this, settings); +}; +SaveAs.prototype = new Mafe.Window(); +SaveAs.prototype.init = function () { + var that = this; + that.saveAsForm = new SaveAsForm(); + that.saveAsForm.onYesConfirmCancellation = function () { + that.close(); + }; + that.saveAsForm.onCancel = function () { + that.saveAsForm.loseChanges({title: that.title}); + }; + that.saveAsForm.onSave = function () { + that.saveAsForm.getField("pro_title").setReadOnly(true); + that.saveAsForm.getField("pro_description").setReadOnly(true); + PMUI.getPMUIObject($(that.saveAsForm.html).find("#idSave")[0]).setDisabled(true); + var a = new PMRestClient({ + typeRequest: "post", + multipart: true, + data: { + calls: [{ + url: "project/save-as", + method: "POST", + data: { + prj_uid: PMDesigner.project.projectId, + prj_name: that.saveAsForm.getField("pro_title").getValue(), + prj_description: that.saveAsForm.getField("pro_description").getValue(), + prj_category: that.saveAsForm.getField("pro_category").getValue() + } + } + ] + }, + functionSuccess: function (xhr, response) { + if (response[0].response.prj_uid) { + that.close(); + window.location.href = "designer?prj_uid=" + response[0].response.prj_uid; + } else { + that.saveAsForm.getField("pro_title").setReadOnly(false); + that.saveAsForm.getField("pro_description").setReadOnly(false); + PMUI.getPMUIObject($(that.saveAsForm.html).find("#idSave")[0]).setDisabled(false); + var field = that.saveAsForm.getField("pro_title"); + $(field.html).find(".pmui-textlabel").text(response[0].response); + field.showMessage(); + } + }, + functionFailure: function (xhr, response) { + } + }); + a.setBaseEndPoint(""); + a.executeRestClient(); + }; + + that.setTitle("Save as".translate()); + that.addItem(that.saveAsForm); +}; +(function () { + PMDesigner.granularProcessExport = function () { + var totalObjects = 0, + objectValues, + buttonSave, + objectsGroup, + loadObjects, + domSettings, + granularProcessExportForm, + granularProcessExportWindow, + buttonCancel = new PMUI.ui.Button({ + id: 'cancelButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + granularProcessExportWindow.close(); + } + }); + + buttonSave = new PMUI.ui.Button({ + id: 'saveButton', + text: "Export".translate(), + handler: function (event) { + var selectedObjects, + locationOrigin, + ws = enviromentVariables('WORKSPACE'), + formData = granularProcessExportForm.getData(); + selectedObjects = JSON.parse(formData.objectsGroup).map(function (n) { + return n; + }); + if (selectedObjects.length === 0) { + PMDesigner.msgFlash('At least one object should be selected in order to execute the action.'.translate(), document.body, 'error', 3000, 5); + return; + } + if (!window.location.origin) { + locationOrigin = window.location.protocol + "//" + window.location.hostname + + (window.location.port ? ':' + window.location.port : ''); + } else if (typeof HTTP_SERVER_HOSTNAME !== 'undefined') { + locationOrigin = HTTP_SERVER_HOSTNAME; + } else { + locationOrigin = window.location.origin; + } + location.href = locationOrigin + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + + "/export-granular?access_token=" + PMDesigner.project.keys.access_token + '&objects=' + + encodeURIComponent(JSON.stringify(selectedObjects)); + granularProcessExportWindow.close(); + }, + buttonType: 'success' + }); + + granularProcessExportWindow = new PMUI.ui.Window({ + id: "granularProcessExportWindow", + title: "Export Process Objects".translate(), + width: 350, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + granularProcessExportWindow.close(); + } + }); + + objectsGroup = new PMUI.field.CheckBoxGroupField({ + labelVisible: false, + id: 'objectsGroup', + controlPositioning: 'horizontal', + maxDirectionOptions: 1, + required: true, + options: [], + onChange: function (newVal, oldVal) { + if (totalObjects > JSON.parse(newVal).length) { + granularProcessExportForm.getField('checkAllId').setValue(0); + } + } + }); + + loadObjects = function () { + var objectsList, + restClient, + i; + restClient = new PMRestClient({ + endpoint: 'export/listObjects', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var arrayIds = [], + i; + objectsList = JSON.parse(response); + for (i in objectsList.data) { + objectsGroup.addOption({ + label: objectsList.data[i].OBJECT_NAME, + name: objectsList.data[i].OBJECT_NAME, + selected: false, + value: objectsList.data[i].OBJECT_ID + }); + arrayIds.push(objectsList.data[i].OBJECT_ID.toString()); + } + totalObjects = objectsList.data.length; + objectValues = objectsGroup.getValueFromControls(); + objectValues = JSON.parse(objectValues).length ? objectValues : JSON.stringify(arrayIds); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems loading the process objects.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + loadObjects(); + + granularProcessExportForm = new PMUI.form.Form({ + id: "granularProcessExportForm", + border: true, + visibleHeader: false, + width: '340px', + name: "granularProcessExportForm", + title: "", + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + pmType: "checkbox", + id: "checkAllId", + labelVisible: false, + controlPositioning: 'vertical', + maxDirectionOptions: 2, + value: '', + options: [ + { + label: "Check All".translate(), + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + if (newVal[2] === "1") { + objectsGroup.setValueToControls(objectValues); + } else { + objectsGroup.setValueToControls(); + } + } + }, + objectsGroup + ] + } + ] + }); + + domSettings = function () { + $('#objectsGroup').find('label:eq(0)').remove(); + }; + + granularProcessExportWindow.addItem(granularProcessExportForm); + granularProcessExportWindow.open(); + granularProcessExportWindow.showFooter(); + domSettings(); + }; +}()); + + + +(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.12",releaseDate:"2016-10-31",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isIE11=g.indexOf("Trident/")!=-1&&(g.indexOf("rv:")!=-1||o.appName.indexOf("Netscape")!=-1);s.isOpera=e.opera&&opera.buildNumber;s.isWebKit=/WebKit/.test(g);s.isIE=!s.isWebKit&&!s.isOpera&&(/MSIE/gi).test(g)&&(/Explorer/gi).test(o.appName)||s.isIE11;s.isIE6=s.isIE&&/MSIE [56]/.test(g);s.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.test(g);s.isGecko=!s.isWebKit&&!s.isIE11&&/Gecko/.test(g);s.isMac=g.indexOf("Mac")!=-1;s.isAir=/adobeair/i.test(g);s.isIDevice=/(iPad|iPhone)/.test(g);s.isIOS5=s.isIDevice&&g.match(/AppleWebKit\/(\d*)/)[1]>=534;s.isIE12=(document.msElementsFromPoint&&!s.isIE&&!s.isIE11);if(s.isIE12){s.isIE11=true;s.isWebKit=false}if(e.tinyMCEPreInit){s.suffix=tinyMCEPreInit.suffix;s.baseURL=tinyMCEPreInit.base;s.query=tinyMCEPreInit.query;return}s.suffix="";f=q.getElementsByTagName("base");for(m=0;m0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,i,d,c,h;e=tinymce.trim(e);g=f.settings=g||{};if(/^([\w\-]+):([^\/]{2})/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^[\w\-]*:?\/\//.test(e)){h=g.base_uri?g.base_uri.path:new tinymce.util.URI(location.href).directory;e=((g.base_uri&&g.base_uri.protocol)||"http")+"://mce_host"+f.toAbsPath(h,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});c=g.base_uri;if(c){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host==="mce_host"){f.port=c.port}if(!f.host||f.host==="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length=g.length||g[e]!=c[e]){f=e+1;break}}}if(f===1){return h}for(e=0,b=g.length-(f-1);e=0;c--){if(f[c].length===0||f[c]==="."){continue}if(f[c]===".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!==0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;quote=quote||'"';if(o==null){return"null"}t=typeof o;if(t=="string"){v="\bb\tt\nn\ff\rr\"\"''\\\\";return quote+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){if(quote==='"'&&a==="'"){return a}i=v.indexOf(b);if(i+1){return"\\"+v.charAt(i+1)}a=b.charCodeAt().toString(16);return"\\u"+"0000".substring(a.length)+a})+quote}if(t=="object"){if(o.hasOwnProperty&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],quote):""}}return v+"}"}return""+o}tinymce.util.JSON={serialize:serialize,parse:function(s){try{return eval("("+s+")")}catch(ex){}}}})();tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){if(e){e.call(f.error_scope||f.scope,h,g)}};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(a){a.VK={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,l=j.DELETE,e=a.dom,n=a.selection,J=a.settings,y=a.parser,q=a.serializer,G=tinymce.each;function C(P,O){try{a.getDoc().execCommand(P,false,O)}catch(N){}}function p(){var N=a.getDoc().documentMode;return N?N:6}function B(N){return N.isDefaultPrevented()}function L(){function N(T){var P,R,O,U,Q,S,V;function W(){if(Q.nodeType==3){if(T&&S==Q.length){return true}if(!T&&S===0){return true}}}P=n.getRng();var X=[P.startContainer,P.startOffset,P.endContainer,P.endOffset];if(!P.collapsed){T=true}Q=P[(T?"start":"end")+"Container"];S=P[(T?"start":"end")+"Offset"];if(Q.nodeType==3){R=e.getParent(P.startContainer,e.isBlock);if(T){R=e.getNext(R,e.isBlock)}if(R&&(W()||!P.collapsed)){O=e.create("em",{id:"__mceDel"});G(tinymce.grep(R.childNodes),function(Y){O.appendChild(Y)});R.appendChild(O)}}P=e.createRng();P.setStart(X[0],X[1]);P.setEnd(X[2],X[3]);n.setRng(P);a.getDoc().execCommand(T?"ForwardDelete":"Delete",false,null);if(O){U=n.getBookmark();while(V=e.get("__mceDel")){e.remove(V,true)}n.moveToBookmark(U)}}a.onKeyDown.add(function(O,Q){var P;P=Q.keyCode==l;if(!B(Q)&&(P||Q.keyCode==f)&&!j.modifierPressed(Q)){Q.preventDefault();N(P)}});a.addCommand("Delete",function(){N()})}function s(){function N(Q){var P=e.create("body");var R=Q.cloneContents();P.appendChild(R);return n.serializer.serialize(P,{format:"html"})}function O(P){var R=N(P);var S=e.createRng();S.selectNode(a.getBody());var Q=N(S);return R===Q}a.onKeyDown.add(function(Q,S){var R=S.keyCode,P;if(!B(S)&&(R==l||R==f)){P=Q.selection.isCollapsed();if(P&&!e.isEmpty(Q.getBody())){return}if(tinymce.isIE&&!P){return}if(!P&&!O(Q.selection.getRng())){return}Q.setContent("");Q.selection.setCursorLocation(Q.getBody(),0);Q.nodeChanged()}})}function K(){a.onKeyDown.add(function(N,O){if(!B(O)&&O.keyCode==65&&j.metaKeyPressed(O)){O.preventDefault();N.execCommand("SelectAll")}})}function M(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(N){n.setRng(n.getRng())});e.bind(a.getDoc(),"mousedown",function(N){if(N.target==a.getDoc().documentElement){a.getWin().focus();n.setRng(n.getRng())}})}}function D(){a.onKeyDown.add(function(N,Q){if(!B(Q)&&Q.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var P=n.getNode();var O=P.previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="hr"){e.remove(O);tinymce.dom.Event.cancel(Q)}}}})}function A(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(O,P){if(!B(P)&&P.target.nodeName==="HTML"){var N=O.getBody();N.blur();setTimeout(function(){N.focus()},0)}})}}function h(){a.onClick.add(function(N,O){O=O.target;if(/^(IMG|HR)$/.test(O.nodeName)){n.getSel().setBaseAndExtent(O,0,O,1)}if(O.nodeName=="A"&&e.hasClass(O,"mceItemAnchor")){n.select(O)}N.nodeChanged()})}function c(){function O(){var Q=e.getAttribs(n.getStart().cloneNode(false));return function(){var R=n.getStart();if(R!==a.getBody()){e.setAttrib(R,"style",null);G(Q,function(S){R.setAttributeNode(S.cloneNode(true))})}}}function N(){return !n.isCollapsed()&&e.getParent(n.getStart(),e.isBlock)!=e.getParent(n.getEnd(),e.isBlock)}function P(Q,R){R.preventDefault();return false}a.onKeyPress.add(function(Q,S){var R;if(!B(S)&&(S.keyCode==8||S.keyCode==46)&&N()){R=O();Q.getDoc().execCommand("delete",false,null);R();S.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(R){var Q;if(!B(R)&&N()){Q=O();a.onKeyUp.addToTop(P);setTimeout(function(){Q();a.onKeyUp.remove(P)},0)}})}function b(){var O,N;e.bind(a.getDoc(),"selectionchange",function(){if(N){clearTimeout(N);N=0}N=window.setTimeout(function(){var P=n.getRng();if(!O||!tinymce.dom.RangeUtils.compareRanges(P,O)){a.nodeChanged();O=P}},50)})}function z(){document.body.setAttribute("role","application")}function v(){a.onKeyDown.add(function(N,P){if(!B(P)&&P.keyCode===f){if(n.isCollapsed()&&n.getRng(true).startOffset===0){var O=n.getNode().previousSibling;if(O&&O.nodeName&&O.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(P)}}}})}function E(){if(p()>7){return}C("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");y.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type===3&&R.value.charAt(R.value-1)!="\n"){R.value+="\n"}else{T.parent.insert(new tinymce.html.Node("#text",3),T,true).value="\n"}}}});q.addNodeFilter("pre",function(N,P){var Q=N.length,S,O,T,R;while(Q--){S=N[Q].getAll("br");O=S.length;while(O--){T=S[O];R=T.prev;if(R&&R.type==3){R.value=R.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(P){var O,N=n.getNode();if(N.nodeName=="IMG"){if(O=e.getStyle(N,"width")){e.setAttrib(N,"width",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"width","")}if(O=e.getStyle(N,"height")){e.setAttrib(N,"height",O.replace(/[^0-9%]+/g,""));e.setStyle(N,"height","")}}})}function d(){a.onKeyDown.add(function(T,U){var S,N,O,Q,R,V,P;S=U.keyCode==l;if(!B(U)&&(S||U.keyCode==f)&&!j.modifierPressed(U)){N=n.getRng();O=N.startContainer;Q=N.startOffset;P=N.collapsed;if(O.nodeType==3&&O.nodeValue.length>0&&((Q===0&&!P)||(P&&Q===(S?0:1)))){V=O.previousSibling;if(V&&V.nodeName=="IMG"){return}nonEmptyElements=T.schema.getNonEmptyElements();U.preventDefault();R=e.create("br",{id:"__tmp"});O.parentNode.insertBefore(R,O);T.getDoc().execCommand(S?"ForwardDelete":"Delete",false,null);O=n.getRng().startContainer;V=O.previousSibling;if(V&&V.nodeType==1&&!e.isBlock(V)&&e.isEmpty(V)&&!nonEmptyElements[V.nodeName.toLowerCase()]){e.remove(V)}e.remove("__tmp")}}})}function I(){a.onKeyDown.add(function(R,S){var P,O,T,N,Q;if(B(S)||S.keyCode!=j.BACKSPACE){return}P=n.getRng();O=P.startContainer;T=P.startOffset;N=e.getRoot();Q=O;if(!P.collapsed||T!==0){return}while(Q&&Q.parentNode&&Q.parentNode.firstChild==Q&&Q.parentNode!=N){Q=Q.parentNode}if(Q.tagName==="BLOCKQUOTE"){R.formatter.toggle("blockquote",null,Q);P=e.createRng();P.setStart(O,0);P.setEnd(O,0);n.setRng(P)}})}function H(){function N(){a._refreshContentEditable();C("StyleWithCSS",false);C("enableInlineTableEditing",false);if(!J.object_resizing){C("enableObjectResizing",false)}}if(!J.readonly){a.onBeforeExecCommand.add(N);a.onMouseDown.add(N)}}function u(){function N(O,P){G(e.select("a"),function(S){var Q=S.parentNode,R=e.getRoot();if(Q.lastChild===S){while(Q&&!e.isBlock(Q)){if(Q.parentNode.lastChild!==Q||Q===R){return}Q=Q.parentNode}e.add(Q,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(O,P){if(P==="CreateLink"){N(O)}});a.onSetContent.add(n.onSetContent.add(N))}function o(){if(J.forced_root_block){a.onInit.add(function(){C("DefaultParagraphSeparator",J.forced_root_block)})}}function r(){function N(P,O){if(!P||!O.initial){a.execCommand("mceRepaint")}}a.onUndo.add(N);a.onRedo.add(N);a.onSetContent.add(N)}function i(){a.onKeyDown.add(function(O,P){var N;if(!B(P)&&P.keyCode==f){N=O.getDoc().selection.createRange();if(N&&N.item){P.preventDefault();O.undoManager.beforeChange();e.remove(N.item(0));O.undoManager.add()}}})}function t(){var N;if(p()>=10){N="";G("p div h1 h2 h3 h4 h5 h6".split(" "),function(O,P){N+=(P>0?",":"")+O+":empty"});a.contentStyles.push(N+"{padding-right: 1px !important}")}}function x(){var P,O,af,N,aa,ad,ab,ae,Q,R,ac,Y,X,Z=document,V=a.getDoc();if(!J.object_resizing||J.webkit_fake_resize===false){return}C("enableObjectResizing",false);ac={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function T(aj){var ai,ah;ai=aj.screenX-ad;ah=aj.screenY-ab;Y=ai*aa[2]+ae;X=ah*aa[3]+Q;Y=Y<5?5:Y;X=X<5?5:X;if(j.modifierPressed(aj)||(af.nodeName=="IMG"&&aa[2]*aa[3]!==0)){Y=Math.round(X/R);X=Math.round(Y*R)}e.setStyles(N,{width:Y,height:X});if(aa[2]<0&&N.clientWidth<=Y){e.setStyle(N,"left",P+(ae-Y))}if(aa[3]<0&&N.clientHeight<=X){e.setStyle(N,"top",O+(Q-X))}}function ag(){function ah(ai,aj){if(aj){if(af.style[ai]||!a.schema.isValid(af.nodeName.toLowerCase(),ai)){e.setStyle(af,ai,aj)}else{e.setAttrib(af,ai,aj)}}}ah("width",Y);ah("height",X);e.unbind(V,"mousemove",T);e.unbind(V,"mouseup",ag);if(Z!=V){e.unbind(Z,"mousemove",T);e.unbind(Z,"mouseup",ag)}e.remove(N);S(af)}function S(ak){var ai,aj,ah;U();ai=e.getPos(ak);P=ai.x;O=ai.y;aj=ak.offsetWidth;ah=ak.offsetHeight;if(af!=ak){af=ak;Y=X=0}G(ac,function(an,al){var am;am=e.get("mceResizeHandle"+al);if(!am){am=e.add(V.documentElement,"div",{id:"mceResizeHandle"+al,"class":"mceResizeHandle",style:"cursor:"+al+"-resize; margin:0; padding:0"});e.bind(am,"mousedown",function(ao){ao.preventDefault();ag();ad=ao.screenX;ab=ao.screenY;ae=af.clientWidth;Q=af.clientHeight;R=Q/ae;aa=an;N=af.cloneNode(true);e.addClass(N,"mceClonedResizable");e.setStyles(N,{left:P,top:O,margin:0});V.documentElement.appendChild(N);e.bind(V,"mousemove",T);e.bind(V,"mouseup",ag);if(Z!=V){e.bind(Z,"mousemove",T);e.bind(Z,"mouseup",ag)}})}else{e.show(am)}e.setStyles(am,{left:(aj*an[0]+P)-(am.offsetWidth/2),top:(ah*an[1]+O)-(am.offsetHeight/2)})});if(!tinymce.isOpera&&af.nodeName=="IMG"){af.setAttribute("data-mce-selected","1")}}function U(){if(af){af.removeAttribute("data-mce-selected")}for(var ah in ac){e.hide("mceResizeHandle"+ah)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function W(){var ah=e.getParent(n.getNode(),"table,img");G(e.select("img[data-mce-selected]"),function(ai){ai.removeAttribute("data-mce-selected")});if(ah){S(ah)}else{U()}}a.onNodeChange.add(W);e.bind(V,"selectionchange",W);a.serializer.addAttributeFilter("data-mce-selected",function(ah,ai){var aj=ah.length;while(aj--){ah[aj].attr(ai,null)}})}function F(){if(p()<9){y.addNodeFilter("noscript",function(N){var O=N.length,P,Q;while(O--){P=N[O];Q=P.firstChild;if(Q){P.attr("data-mce-innertext",Q.value)}}});q.addNodeFilter("noscript",function(N){var O=N.length,P,R,Q;while(O--){P=N[O];R=N[O].firstChild;if(R){R.value=tinymce.html.Entities.decode(R.value)}else{Q=P.attributes.map["data-mce-innertext"];if(Q){P.attr("data-mce-innertext",null);R=new tinymce.html.Node("#text",3);R.value=Q;R.raw=true;P.append(R)}}}})}}function m(){a.contentStyles.push("body {min-height: 100px}");a.onClick.add(function(N,O){if(O.target.nodeName=="HTML"){a.execCommand("SelectAll");a.selection.collapse(true);a.nodeChanged()}})}function k(){a.onInit.add(function(){var N;a.getBody().addEventListener("mscontrolselect",function(O){setTimeout(function(){if(a.selection.getNode()!=O.target){N=a.selection.getRng();n.fakeRng=a.dom.createRng();n.fakeRng.setStartBefore(O.target);n.fakeRng.setEndAfter(O.target)}},0)},false);a.getDoc().addEventListener("selectionchange",function(O){if(N&&!tinymce.dom.RangeUtils.compareRanges(a.selection.getRng(),N)){n.fakeRng=N=null}},false)})}v();I();s();if(tinymce.isWebKit){d();L();M();h();o();if(tinymce.isIDevice){b()}else{x();K()}}if(tinymce.isIE&&!tinymce.isIE11){D();z();E();g();i();t();F()}if(tinymce.isIE11){m();k()}if(tinymce.isGecko&&!tinymce.isIE11){D();A();c();H();u();r()}if(tinymce.isOpera){x()}};(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=/[<>&\"\']/g,c=/&(#x|#)?([\w]+);/g,i={128:"\u20AC",130:"\u201A",131:"\u0192",132:"\u201E",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02C6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017D",145:"\u2018",146:"\u2019",147:"\u201C",148:"\u201D",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02DC",153:"\u2122",154:"\u0161",155:"\u203A",156:"\u0153",158:"\u017E",159:"\u0178"};g={'"':""","'":"'","<":"<",">":">","&":"&"};d={"<":"<",">":">","&":"&",""":'"',"'":"'"};function h(l){var m;m=document.createElement("div");m.innerHTML=l;return m.textContent||m.innerText||l}function e(m,p){var n,o,l,q={};if(m){m=m.split(",");p=p||10;for(n=0;n1){return"&#"+(((n.charCodeAt(0)-55296)*1024)+(n.charCodeAt(1)-56320)+65536)+";"}return g[n]||"&#"+n.charCodeAt(0)+";"})},encodeNamed:function(n,l,m){m=m||a;return n.replace(l?k:b,function(o){return g[o]||m[o]||o})},getEncodeFunc:function(l,o){var p=j.html.Entities;o=e(o)||a;function m(r,q){return r.replace(q?k:b,function(s){return g[s]||o[s]||"&#"+s.charCodeAt(0)+";"||s})}function n(r,q){return p.encodeNamed(r,q,o)}l=j.makeMap(l.replace(/\+/g,","));if(l.named&&l.numeric){return m}if(l.named){if(o){return n}return p.encodeNamed}if(l.numeric){return p.encodeNumeric}return p.encodeRaw},decode:function(l){return l.replace(c,function(n,m,o){if(m){o=parseInt(o,m.length===2?16:10);if(o>65535){o-=65536;return String.fromCharCode(55296+(o>>10),56320+(o&1023))}else{return i[o]||String.fromCharCode(o)}}return d[n]||a[n]||h(n)})}}})(tinymce);tinymce.html.Styles=function(d,f){var k=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,h=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,b=/\s*([^:]+):\s*([^;]+);?/g,l=/\s+$/,m=/rgb/,e,g,a={},j;d=d||{};j="\\\" \\' \\; \\: ; : \uFEFF".split(" ");for(g=0;g1?r:"0"+r}return"#"+o(q)+o(p)+o(i)}return{toHex:function(i){return i.replace(k,c)},parse:function(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;if(z["border-image"]==="none"){delete z["border-image"]}F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},serialize:function(p,r){var o="",n,q;function i(t){var x,u,s,v;x=f.styles[t];if(x){for(u=0,s=x.length;u0){o+=(o.length>0?" ":"")+t+": "+v+";"}}}}if(r&&f&&f.styles){i("*");i(r)}else{for(n in p){q=p[n];if(q!==e&&q.length>0){o+=(o.length>0?" ":"")+n+": "+q+";"}}}return o}}};(function(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({Z:"H|K|N|O|P",Y:"X|form|R|Q",ZG:"E|span|width|align|char|charoff|valign",X:"p|T|div|U|W|isindex|fieldset|table",ZF:"E|align|char|charoff|valign",W:"pre|hr|blockquote|address|center|noframes",ZE:"abbr|axis|headers|scope|rowspan|colspan|align|char|charoff|valign|nowrap|bgcolor|width|height",ZD:"[E][S]",U:"ul|ol|dl|menu|dir",ZC:"p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"X|S|Q",S:"R|P",ZA:"a|G|J|M|O|P",R:"a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe",E:"A|B|C",D:"accesskey|tabindex|onfocus|onblur",C:"onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"lang|xml:lang|dir",A:"id|class|style|title"},"script[id|charset|type|language|src|defer|xml:space][]style[B|id|type|media|title|xml:space][]object[E|declare|classid|codebase|data|type|codetype|archive|standby|width|height|usemap|name|tabindex|align|border|hspace|vspace][#|param|Y]param[id|name|value|valuetype|type][]p[E|align][#|S]a[E|D|charset|type|name|href|hreflang|rel|rev|shape|coords|target][#|Z]br[A|clear][]span[E][#|S]bdo[A|C|B][#|S]applet[A|codebase|archive|code|object|alt|name|width|height|align|hspace|vspace][#|param|Y]h1[E|align][#|S]img[E|src|alt|name|longdesc|width|height|usemap|ismap|align|border|hspace|vspace][]map[B|C|A|name][X|form|Q|area]h2[E|align][#|S]iframe[A|longdesc|name|src|frameborder|marginwidth|marginheight|scrolling|align|width|height][#|Y]h3[E|align][#|S]tt[E][#|S]i[E][#|S]b[E][#|S]u[E][#|S]s[E][#|S]strike[E][#|S]big[E][#|S]small[E][#|S]font[A|B|size|color|face][#|S]basefont[id|size|color|face][]em[E][#|S]strong[E][#|S]dfn[E][#|S]code[E][#|S]q[E|cite][#|S]samp[E][#|S]kbd[E][#|S]var[E][#|S]cite[E][#|S]abbr[E][#|S]acronym[E][#|S]sub[E][#|S]sup[E][#|S]input[E|D|type|name|value|checked|disabled|readonly|size|maxlength|src|alt|usemap|onselect|onchange|accept|align][]select[E|name|size|multiple|disabled|tabindex|onfocus|onblur|onchange][optgroup|option]optgroup[E|disabled|label][option]option[E|selected|disabled|label|value][]textarea[E|D|name|rows|cols|disabled|readonly|onselect|onchange][]label[E|for|accesskey|onfocus|onblur][#|S]button[E|D|name|value|type|disabled][#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[E|align][#|S]ins[E|cite|datetime][#|Y]h5[E|align][#|S]del[E|cite|datetime][#|Y]h6[E|align][#|S]div[E|align][#|Y]ul[E|type|compact][li]li[E|type|value][#|Y]ol[E|type|compact|start][li]dl[E|compact][dt|dd]dt[E][#|S]dd[E][#|Y]menu[E|compact][li]dir[E|compact][li]pre[E|width|xml:space][#|ZA]hr[E|align|noshade|size|width][]blockquote[E|cite][#|Y]address[E][#|S|p]center[E][#|Y]noframes[E][#|Y]isindex[A|B|prompt][]fieldset[E][#|legend|Y]legend[E|accesskey|align][#|S]table[E|summary|width|border|frame|rules|cellspacing|cellpadding|align|bgcolor][caption|col|colgroup|thead|tfoot|tbody|tr]caption[E|align][#|S]col[ZG][]colgroup[ZG][col]thead[ZF][tr]tr[ZF|bgcolor][th|td]th[E|ZE][#|Y]form[E|action|method|name|enctype|onsubmit|onreset|accept|accept-charset|target][#|X|R|Q]noscript[E][#|Y]td[E|ZE][#|Y]tfoot[ZF][tr]tbody[ZF][tr]area[E|D|shape|coords|href|nohref|alt|target][]base[id|href|target][]body[E|onload|onunload|background|bgcolor|text|link|vlink|alink][#|Y]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object script",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G=0;Q--){I=A[Q];if(I.valid){n.end(I.name)}}}}})(tinymce);(function(d){var c=/^[ \t\r\n]*$/,e={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};function a(k,l,j){var i,h,f=j?"lastChild":"firstChild",g=j?"prev":"next";if(k[f]){return k[f]}if(k!==l){i=k[g];if(i){return i}for(h=k.parent;h&&h!==l;h=h.parent){i=h[g];if(i){return i}}}}function b(f,g){this.name=f;this.type=g;if(g===1){this.attributes=[];this.attributes.map={}}}d.extend(b.prototype,{replace:function(g){var f=this;if(g.parent){g.remove()}f.insert(g,f);f.remove();return f},attr:function(h,l){var f=this,g,j,k;if(typeof h!=="string"){for(j in h){f.attr(j,h[j])}return f}if(g=f.attributes){if(l!==k){if(l===null){if(h in g.map){delete g.map[h];j=g.length;while(j--){if(g[j].name===h){g=g.splice(j,1);return f}}}return f}if(h in g.map){j=g.length;while(j--){if(g[j].name===h){g[j].value=l;break}}}else{g.push({name:h,value:l})}g.map[h]=l;return f}else{return g.map[h]}}},clone:function(){var g=this,n=new b(g.name,g.type),h,f,m,j,k;if(m=g.attributes){k=[];k.map={};for(h=0,f=m.length;h1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O;while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O;while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;if(o[B.name]){B.empty().remove()}else{B.unwrap()}B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}c.push("<",m);if(k){for(n=0,j=k.length;n0){o=c[c.length-1];if(o.length>0&&o!=="\n"){c.push("\n")}}},end:function(h){var i;c.push("");if(a&&d[h]&&c.length>0){i=c[c.length-1];if(i.length>0&&i!=="\n"){c.push("\n")}}},text:function(i,h){if(i.length>0){c[c.length]=h?i:f(i)}},cdata:function(h){c.push("")},comment:function(h){c.push("")},pi:function(h,i){if(i){c.push("")}else{c.push("")}if(a){c.push("\n")}},doctype:function(h){c.push("",a?"\n":"")},reset:function(){c.length=0},getContent:function(){return c.join("").replace(/\n$/,"")}}};(function(a){a.html.Serializer=function(c,d){var b=this,e=new a.html.Writer(c);c=c||{};c.validate="validate" in c?c.validate:true;b.schema=d=d||new a.html.Schema();b.writer=e;b.serialize=function(h){var g,i;i=c.validate;g={3:function(k,j){e.text(k.value,k.raw)},8:function(j){e.comment(j.value)},7:function(j){e.pi(j.name,j.value)},10:function(j){e.doctype(j.value)},4:function(j){e.cdata(j.value)},11:function(j){if((j=j.firstChild)){do{f(j)}while(j=j.next)}}};e.reset();function f(k){var t=g[k.type],j,o,s,r,p,u,n,m,q;if(!t){j=k.name;o=k.shortEnded;s=k.attributes;if(i&&s&&s.length>1){u=[];u.map={};q=d.getElementRule(k.name);for(n=0,m=q.attributesOrder.length;n=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&!e.isIE11&&j.schema){("abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video").replace(/\w+/g,function(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||e.isIE11||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.test(j)){j=j.toLowerCase().split(/,/);l=l.nodeName.toLowerCase();for(k=j.length-1;k>=0;k--){if(j[k]==l){return true}}return false}}return e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+""}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b&&!e.isIE11){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":(b&&!e.isIE11)?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&!e.isIE11&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="
"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="
"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(t){switch(t.type||1){case 1:if(t.selectorText){g(t.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:try{q(t.styleSheet)}catch(s){}break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){if(l==="br"){p++;continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if(q==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(tinymce.dom);(function(){function a(d){var b=this,h=d.dom,c=true,f=false;function e(i,j){var k,t=0,q,n,m,l,o,r,p=-1,s;k=i.duplicate();k.collapse(j);s=k.parentElement();if(s.ownerDocument!==d.dom.doc){return}while(s.contentEditable==="false"){s=s.parentNode}if(!s.hasChildNodes()){return{node:s,inside:1}}m=s.children;q=m.length-1;while(t<=q){r=Math.floor((t+q)/2);l=m[r];k.moveToElementText(l);p=k.compareEndPoints(j?"StartToStart":"EndToEnd",i);if(p>0){q=r-1}else{if(p<0){t=r+1}else{return{node:l}}}}if(p<0){if(!l){k.moveToElementText(s);k.collapse(true);l=s;n=true}else{k.collapse(false)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}return{node:l,position:p,offset:o,inside:n}}function g(){var i=d.getRng(),r=h.createRng(),l,k,p,q,m,j;l=i.item?i.item(0):i.parentElement();if(l.ownerDocument!=h.doc){return r}k=d.isCollapsed();if(i.item){r.setStart(l.parentNode,h.nodeIndex(l));r.setEnd(r.startContainer,r.startOffset+1);return r}function o(A){var u=e(i,A),s,y,z=0,x,v,t;s=u.node;y=u.offset;if(u.inside&&!s.hasChildNodes()){r[A?"setStart":"setEnd"](s,0);return}if(y===v){r[A?"setStartBefore":"setEndAfter"](s);return}if(u.position<0){x=u.inside?s.firstChild:s.nextSibling;if(!x){r[A?"setStartAfter":"setEndAfter"](s);return}if(!y){if(x.nodeType==3){r[A?"setStart":"setEnd"](x,0)}else{r[A?"setStartBefore":"setEndBefore"](x)}return}while(x){t=x.nodeValue;z+=t.length;if(z>=y){s=x;z-=y;z=t.length-z;break}x=x.nextSibling}}else{x=s.previousSibling;if(!x){return r[A?"setStartBefore":"setEndBefore"](s)}if(!y){if(s.nodeType==3){r[A?"setStart":"setEnd"](x,s.nodeValue.length)}else{r[A?"setStartAfter":"setEndAfter"](x)}return}while(x){z+=x.nodeValue.length;if(z>=y){s=x;z-=y;break}x=x.previousSibling}}r[A?"setStart":"setEnd"](s,z)}try{o(true);if(!k){o()}}catch(n){if(n.number==-2147024809){m=b.getBookmark(2);p=i.duplicate();p.collapse(true);l=p.parentElement();if(!k){p=i.duplicate();p.collapse(false);q=p.parentElement();q.innerHTML=q.innerHTML}l.innerHTML=l.innerHTML;b.moveToBookmark(m);i=d.getRng();o(true);if(!k){o()}}else{throw n}}return r}this.getBookmark=function(m){var j=d.getRng(),o,i,l={};function n(u){var t,p,s,r,q=[];t=u.parentNode;p=h.getRoot().parentNode;while(t!=p&&t.nodeType!==9){s=t.children;r=s.length;while(r--){if(u===s[r]){q.push(r);break}}u=t;t=t.parentNode}return q}function k(q){var p;p=e(j,q);if(p){return{position:p.position,offset:p.offset,indexes:n(p.node),inside:p.inside}}}if(m===2){if(!j.item){l.start=k(true);if(!d.isCollapsed()){l.end=k()}}else{l.start={ctrl:true,indexes:n(j.item(0))}}}return l};this.moveToBookmark=function(k){var j,i=h.doc.body;function m(o){var r,q,n,p;r=h.getRoot();for(q=o.length-1;q>=0;q--){p=r.children;n=o[q];if(n<=p.length-1){r=p[n]}}return r}function l(r){var n=k[r?"start":"end"],q,p,o;if(n){q=n.position>0;p=i.createTextRange();p.moveToElementText(m(n.indexes));offset=n.offset;if(offset!==o){p.collapse(n.inside||q);p.moveStart("character",q?-offset:offset)}else{p.collapse(r)}j.setEndPoint(r?"StartToStart":"EndToStart",p);if(r){j.collapse(true)}}}if(k.start){if(k.start.ctrl){j=i.createControlRange();j.addElement(m(k.start.indexes));j.select()}else{j=i.createTextRange();l(true);l();j.select()}}};this.addRange=function(i){var n,l,k,p,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="\uFEFF";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="\uFEFF\uFEFF";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return ye[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="

";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(function(){var e=document.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='_';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('_'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){h=y.getRng();if(h.setStart){h={startContainer:h.startContainer,startOffset:h.startOffset,endContainer:h.endContainer,endOffset:h.endOffset}}return{rng:h}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML(''+m+"");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML(''+m+"")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(q){var v=this,n=v.dom,l,j,g,i,u,k,x,r,s;function h(C){var t=q[C?"start":"end"],z,A,B,y;if(t){B=t[0];for(A=u,z=t.length-1;z>=1;z--){y=A.childNodes;if(t[z]>y.length-1){return}A=y[t[z]]}if(A.nodeType===3){B=Math.min(t[0],A.nodeValue.length)}if(A.nodeType===1){B=Math.min(t[0],A.childNodes.length)}if(C){g.setStart(A,B)}else{g.setEnd(A,B)}}return true}function m(D){var y=n.get(q.id+"_"+D),C,t,A,B,z=q.keep;if(y){C=y.parentNode;if(D=="start"){if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}k=x=C;r=s=t}else{if(!z){t=n.nodeIndex(y)}else{C=y.firstChild;t=1}x=C;s=t}if(!z){B=y.previousSibling;A=y.nextSibling;e(d.grep(y.childNodes),function(E){if(E.nodeType==3){E.nodeValue=E.nodeValue.replace(/\uFEFF/g,"")}});while(y=n.get(q.id+"_"+D)){n.remove(y,1)}if(B&&A&&B.nodeType==A.nodeType&&B.nodeType==3&&!d.isOpera){t=B.nodeValue.length;B.appendData(A.nodeValue);n.remove(A);if(D=="start"){k=x=B;r=s=t}else{x=B;s=t}}}}}function o(t){if(n.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='
'}return t}if(q){if(q.start){g=n.createRng();u=n.getRoot();if(v.tridentSel){return v.tridentSel.moveToBookmark(q)}if(h(true)&&h()){v.setRng(g)}}else{if(q.id){m("start");m("end");if(k){g=n.createRng();g.setStart(o(k),r);g.setEnd(o(x),s);v.setRng(g)}}else{if(q.name){v.select(n.select(q.name)[q.index])}else{if(q.rng){g=q.rng;if(g.startContainer){i=v.dom.createRng();try{i.setStart(g.startContainer,g.startOffset);i.setEnd(g.endContainer,g.endOffset)}catch(p){}g=i}v.setRng(g)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(h.fakeRng){return h.fakeRng}if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&!d.isIE11&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(jh.y+h.h){g.editor.getWin().scrollTo(0,j0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.select()}}})}})})(tinymce);(function(a){a.dom.Serializer=function(e,i,f){var h,b,d=a.isIE,g=a.each,c;if(!e.apply_source_formatting){e.indent=false}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;h=new a.util.Dispatcher(self);b=new a.util.Dispatcher(self);c=new a.html.DomParser(e,f);c.addAttributeFilter("src,href,style",function(k,j){var o=k.length,l,q,n="data-mce-"+j,p=e.url_converter,r=e.url_converter_scope,m;while(o--){l=k[o];q=l.attributes.map[n];if(q!==m){l.attr(j,q.length>0?q:null);l.attr(n,null)}else{q=l.attributes.map[j];if(j==="style"){q=i.serializeStyle(i.parseStyle(q),l.name)}else{if(p){q=p.call(r,q,j,l.name)}}l.attr(j,q.length>0?q:null)}}});c.addAttributeFilter("class",function(j,k){var l=j.length,m,n;while(l--){m=j[l];n=m.attr("class").replace(/(?:^|\s)mce(Item\w+|Selected)(?!\S)/g,"");m.attr("class",n.length>0?n:null)}});c.addAttributeFilter("data-mce-type",function(j,l,k){var m=j.length,n;while(m--){n=j[m];if(n.attributes.map["data-mce-type"]==="bookmark"&&!k.cleanup){n.remove()}}});c.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});c.addNodeFilter("script,style",function(k,l){var m=k.length,n,o;function j(p){return p.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}while(m--){n=k[m];o=n.firstChild?n.firstChild.value:"";if(l==="script"){n.attr("type",(n.attr("type")||"text/javascript").replace(/^mce\-/,""));if(o.length>0){n.firstChild.value="// "}}else{if(o.length>0){n.firstChild.value=""}}}});c.addNodeFilter("#comment",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.value.indexOf("[CDATA[")===0){m.name="#cdata";m.type=4;m.value=m.value.replace(/^\[CDATA\[|\]\]$/g,"")}else{if(m.value.indexOf("mce:protected ")===0){m.name="#text";m.type=3;m.raw=true;m.value=unescape(m.value).substr(14)}}}});c.addNodeFilter("xml:namespace,input",function(j,k){var l=j.length,m;while(l--){m=j[l];if(m.type===7){m.remove()}else{if(m.type===1){if(k==="input"&&!("type" in m.attributes.map)){m.attr("type","text")}}}}});if(e.fix_list_elements){c.addNodeFilter("ul,ol",function(k,l){var m=k.length,n,j;while(m--){n=k[m];j=n.parent;if(j.name==="ul"||j.name==="ol"){if(n.prev&&n.prev.name==="li"){n.prev.append(n)}}}})}c.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style",function(j,k){var l=j.length;while(l--){j[l].attr(k,null)}});return{schema:f,addNodeFilter:c.addNodeFilter,addAttributeFilter:c.addAttributeFilter,onPreProcess:h,onPostProcess:b,serialize:function(o,m){var l,p,k,j,n;if(d&&i.select("script,style,select,map").length>0){n=o.innerHTML;o=o.cloneNode(false);i.setHTML(o,n)}else{o=o.cloneNode(true)}l=o.ownerDocument.implementation;if(l.createHTMLDocument){p=l.createHTMLDocument("");g(o.nodeName=="BODY"?o.childNodes:[o],function(q){p.body.appendChild(p.importNode(q,true))});if(o.nodeName!="BODY"){o=p.body.firstChild}else{o=p.body}k=i.doc;i.doc=p}m=m||{};m.format=m.format||"html";if(!m.no_events){m.node=o;h.dispatch(self,m)}j=new a.html.Serializer(e,f);m.content=j.serialize(c.parse(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;function b(m,v){var x=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}v()}function u(){if(typeof(console)!=="undefined"&&console.log){console.log("Failed to load: "+m)}}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol&&o.protocol.toLowerCase()!="file"){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(y){var t=q.create("script",{type:"text/javascript"});t.text=y;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()},error:u});return}}s=document.createElement("script");s.id=n;s.type="text/javascript";s.src=a._addVer(m);if(!a.isIE||a.isIE11){s.onload=p}s.onerror=u;if(!a.isOpera){s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}}}(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(e[r],function(s){s.func.call(s.scope)});e[r]=f}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&dd){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d0&&g=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}a.cancel(z);break;case u:if(i){q.moveFocus(1)}a.cancel(z);break;case y:if(o){q.moveFocus(-1)}a.cancel(z);break;case A:if(o){q.moveFocus(1)}a.cancel(z);break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(f,e,d){this.id=f;this.settings=e=e||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=e.scope||this;this.disabled=0;this.active=0;this.editor=d},setAriaProperty:function(f,e){var d=b.get(this.id+"_aria")||b.get(this.id);if(d){b.setAttrib(d,"aria-"+f,!!e)}},focus:function(){b.get(this.id).focus()},setDisabled:function(d){if(d!=this.disabled){this.setAriaProperty("disabled",d);this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d;this.setAriaProperty("pressed",d)}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(c,b,a){this.parent(c,b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator";this.setDisabled(true)},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix,role:"separator","aria-orientation":"vertical",tabindex:"-1"})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.setAriaProperty("checked",!!f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;j.keyboard_focus=i.keyboard_focus;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},focus:function(){var g=this;if(g.keyboardNav){g.keyboardNav.focus()}},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeightv){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return false}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}a.add(o,"keydown",z._keyHandler,z);z.onShowMenu.dispatch(z);if(A.keyboard_focus){z._setupKeyboardNav()}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);if(g.keyboardNav){g.keyboardNav.destroy()}a.remove(h,"mouseover",g.mouseOverFunc);a.remove(c.select("a",h),"focus",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);a.remove(h,"keydown",g._keyHandler);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{role:"listbox",id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000;outline:0"});if(i.settings.parent){c.setAttrib(g,"aria-parent","menu_"+i.settings.parent.id)}k=c.add(g,"div",{role:"presentation",id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{role:"presentation",id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_setupKeyboardNav:function(){var i,h,g=this;i=c.get("menu_"+g.id);h=c.select("a[role=option]","menu_"+g.id);h.splice(0,0,i);g.keyboardNav=new e.ui.KeyboardNavigation({root:"menu_"+g.id,items:h,onCancel:function(){g.hideMenu()},enableUpDown:true});i.focus()},_keyHandler:function(g){var h=this,i;switch(g.keyCode){case 37:if(h.settings.parent){h.hideMenu();h.settings.parent.focus();a.cancel(g)}break;case 39:if(h.mouseOverFunc){h.mouseOverFunc(g)}break}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,q.titleItem?"th":"td");i=p=c.add(i,"a",{id:h.id+"_aria",role:q.titleItem?"presentation":"option",href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});if(q.parent){c.setAttrib(p,"aria-haspopup","true");c.setAttrib(p,"aria-owns","menu_"+h.id)}c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){if(typeof h.settings.style=="function"){h.settings.style=h.settings.style()}c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(e,d,c){this.parent(e,d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='';if(e.image&&!(this.editor&&this.editor.forcedHighContrastMode)){d+=''+a.encode(e.title)+''+(c?''+c+"":"")}else{d+=''+(c?''+c+"":"")}d+='";d+="";return d},postRender:function(){var d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keydown",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){b.dom.Event.cancel(f);return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='';j+="";j+="";j+="";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(q){var n,p=37,m=39,l=38,r=40,k=13,o=32;b.remove(h.id,"change",i);j=false;n=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",n)});if(q.keyCode==k||q.keyCode==o){g(q);return b.cancel(q)}else{if(q.keyCode==r||q.keyCode==l){q.stopImmediatePropagation()}}});h.onPostRender.dispatch(h,d.get(h.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(g,f,e){this.parent(g,f,e);this.onRenderMenu=new c.util.Dispatcher(this);f.menu_container=f.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.firstChild.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(function(){f.hideMenu();f.focus()});f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(g,f,e){this.parent(g,f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="";if(g.image){e=b.createHTML("img ",{src:g.image,role:"presentation","class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}e+=b.createHTML("span",{"class":"mceVoiceLabel mceIconOnly",id:f.id+"_voice",style:"display:none;"},g.title);i+=""+b.createHTML("a",{role:"button",id:f.id+"_action",tabindex:"-1",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";e=b.createHTML("span",{"class":"mceOpen "+g["class"]},'');i+=""+b.createHTML("a",{role:"button",id:f.id+"_open",tabindex:"-1",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"";i+="";i=b.createHTML("table",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","aria-labelledby":f.id+"_voice","aria-haspopup":"true"},i)},postRender:function(){var e=this,g=e.settings,f;if(g.onclick){f=function(h){if(!e.isDisabled()){g.onclick(e.value);a.cancel(h)}};a.add(e.id+"_action","click",f);a.add(e.id,["click","keydown"],function(h){var k=32,m=14,i=13,j=38,l=40;if((h.keyCode===32||h.keyCode===13||h.keyCode===14)&&!h.altKey&&!h.ctrlKey&&!h.metaKey){f();a.cancel(h)}else{if(h.type==="click"||h.keyCode===l){e.showMenu();a.cancel(h)}}})}a.add(e.id+"_open","click",function(h){e.showMenu();a.cancel(h)});a.add([e.id,e.id+"_open"],"focus",function(){e._focused=1});a.add([e.id,e.id+"_open"],"blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open");a.clear(this.id)}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(i,h,f){var g=this;g.parent(i,h,f);g.settings=h=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},g.settings);g.onShowMenu=new d.util.Dispatcher(g);g.onHideMenu=new d.util.Dispatcher(g);g.value=h.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.firstChild.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.focus();f.isMenuVisible=1},hideMenu:function(g){var f=this;if(f.isMenuVisible){if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.isMenuVisible=0;f.onHideMenu.dispatch();f.keyboardNav.destroy()}},renderMenu:function(){var p=this,h,k=0,q=p.settings,g,j,l,o,f;o=c.add(q.menu_container,"div",{role:"listbox",id:p.id+"_menu","class":q.menu_class+" "+q["class"],style:"position:absolute;left:0;top:-1000px;"});h=c.add(o,"div",{"class":q["class"]+" mceSplitButtonMenu"});c.add(h,"span",{"class":"mceMenuLine"});g=c.add(h,"table",{role:"presentation","class":"mceColorSplitMenu"});j=c.add(g,"tbody");k=0;e(b(q.colors,"array")?q.colors:q.colors.split(","),function(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",i);if(p.editor.forcedHighContrastMode){g=c.add(g,"canvas",{width:16,height:16,"aria-hidden":"true"});if(g.getContext&&(f=g.getContext("2d"))){f.fillStyle="#"+m;f.fillRect(0,0,16,16)}else{c.remove(g)}}});if(q.more_colors_func){g=c.add(j,"tr");g=c.add(g,"td",{colspan:q.grid_width,"class":"mceMoreColors"});g=c.add(g,"a",{role:"option",id:p.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},q.more_colors_title);a.add(g,"click",function(i){q.more_colors_func.call(q.more_colors_scope||this);return a.cancel(i)})}c.addClass(h,"mceColorSplitMenu");a.add(p.id+"_menu","mousedown",function(i){return a.cancel(i)});a.add(p.id+"_menu","click",function(i){var m;i=c.getParent(i.target,"a",j);if(i&&i.nodeName.toLowerCase()=="a"&&(m=i.getAttribute("data-mce-color"))){p.setColor(m)}return false});return o},setColor:function(f){this.displayColor(f);this.hideMenu();this.settings.onselect(f)},displayColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(tinymce);(function(b){var d=b.DOM,c=b.each,a=b.dom.Event;b.create("tinymce.ui.ToolbarGroup:tinymce.ui.Container",{renderHTML:function(){var f=this,i=[],e=f.controls,j=b.each,g=f.settings;i.push('
');i.push("");i.push('");j(e,function(h){i.push(h.renderHTML())});i.push("");i.push("
");return i.join("")},focus:function(){var e=this;d.get(e.id).focus()},postRender:function(){var f=this,e=[];c(f.controls,function(g){c(g.controls,function(h){if(h.id){e.push(h)}})});f.keyNav=new b.ui.KeyboardNavigation({root:f.id,items:e,onCancel:function(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}f.editor.focus()},excludeFromTabOrder:!f.settings.tab_focus_toolbar})},destroy:function(){var e=this;e.parent();e.keyNav.destroy();a.clear(e.id)}})})(tinymce);(function(a){var c=a.DOM,b=a.each;a.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var m=this,f="",j,k,n=m.settings,e,d,g,l;l=m.controls;for(e=0;e"))}if(d&&k.ListBox){if(d.Button||d.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarEnd"},c.createHTML("span",null,""))}}if(c.stdMode){f+=''+k.renderHTML()+""}else{f+=""+k.renderHTML()+""}if(g&&k.ListBox){if(g.Button||g.SplitButton){f+=c.createHTML("td",{"class":"mceToolbarStart"},c.createHTML("span",null,""))}}}j="mceToolbarEnd";if(k.Button){j+=" mceToolbarEndButton"}else{if(k.SplitButton){j+=" mceToolbarEndSplitButton"}else{if(k.ListBox){j+=" mceToolbarEndListBox"}}}f+=c.createHTML("td",{"class":j},c.createHTML("span",null,""));return c.createHTML("table",{id:m.id,"class":"mceToolbar"+(n["class"]?" "+n["class"]:""),cellpadding:"0",cellspacing:"0",align:m.settings.align||"",role:"presentation",tabindex:"-1"},""+f+"")}})})(tinymce);(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{AddOnManager:function(){var d=this;d.items=[];d.urls={};d.lookup={};d.onAdd=new a(d)},get:function(d){if(this.lookup[d]){return this.lookup[d].instance}else{return undefined}},dependencies:function(e){var d;if(this.lookup[e]){d=this.lookup[e].dependencies}return d||[]},requireLangPack:function(e){var d=b.settings;if(d&&d.language&&d.language_load!==false){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(f,e,d){this.items.push(e);this.lookup[f]={instance:e,dependencies:d};this.onAdd.dispatch(this,f,e);return e},createUrl:function(d,e){if(typeof e==="object"){return e}else{return{prefix:d.prefix,resource:e,suffix:d.suffix}}},addComponents:function(f,d){var e=this.urls[f];b.each(d,function(g){b.ScriptLoader.add(e+"/"+g)})},load:function(j,f,d,h){var g=this,e=f;function i(){var k=g.dependencies(j);b.each(k,function(m){var l=g.createUrl(f,m);g.load(l.resource,l,undefined,undefined)});if(d){if(h){d.call(h)}else{d.call(b.ScriptLoader)}}}if(g.urls[j]){return}if(typeof f==="object"){e=f.prefix+f.resource+f.suffix}if(e.indexOf("/")!==0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}g.urls[j]=e.substring(0,e.lastIndexOf("/"));if(g.lookup[j]){i()}else{b.ScriptLoader.add(e,i,h)}}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l':"",visual:n,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",apply_source_formatting:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.plugins),function(t){if(t&&!c.urls[t]){if(t.charAt(0)=="-"){t=t.substr(1,t.length);var s=c.dependencies(t);i(s,function(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+=''}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+=''}else{G.iframeHTML+=''}}G.iframeHTML+='';for(x=0;x'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='
";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return""})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(]*>( | |\s|\u00a0|)<\/p>[\r\n]*|
[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.bookmark){t.moveToBookmark(u.bookmark);u.bookmark=null}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive&&!k.isIE11){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(!m.initialized){return}q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(q,o){var n=this,m=n.getBody(),p;o=o||{};o.format=o.format||"html";o.set=true;o.content=q;if(!o.no_events){n.onBeforeSetContent.dispatch(n,o)}q=o.content;if(q.length===0||/^\s+$/.test(q)){p=n.settings.forced_root_block;if(p&&n.schema.isValidChild(m.nodeName.toLowerCase(),p.toLowerCase())){if(b){q="<"+p+">"}else{q="<"+p+'>
"}}else{if(!b){q='
'}}m.innerHTML=q;n.selection.select(m,true);n.selection.collapse(true);return}if(o.format!=="raw"){q=new k.html.Serializer({},n.schema).serialize(n.parser.parse(q))}o.content=k.trim(q);n.dom.setHTML(m,o.content);if(!o.no_events){n.onSetContent.dispatch(n,o)}if(!n.settings.content_editable||document.activeElement===n.getBody()){n.selection.normalize()}return o.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!==k.trim(m.getContent({format:"raw"}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.EditorCommands=function(n){var m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return c}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:b)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(d.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=d.explode(k.font_size_style_values);v=d.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return c}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new d.html.Serializer({},n.schema);v='\uFEFF';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=p.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(//i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.yL.x+L.w||C.x")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i0||this.typing},hasRedo:function(){return i0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k1||ae==ax||ae.tagName=="BR"){return ae}}}var ap=Z.selection.getRng();var au=ap.startContainer;var ao=ap.endContainer;if(au!=ao&&ap.endOffset===0){var at=aq(au,ao);var ar=at.nodeType==3?at.length:at.childNodes.length;ap.setEnd(at,ar)}return ap}function ah(ao){var aq=-1;var ap;S(ao.childNodes,function(at,ar){if(at.nodeName==="UL"||at.nodeName==="OL"){aq=ar;ap=at;return false}});return{listIndex:aq,list:ap}}function al(ap,ao){var ar=-1;var aq=-1;S(ap.childNodes,function(au,at){if(au.nodeName==="SPAN"&&c.getAttrib(au,"data-mce-type")=="bookmark"){if(au.id==ao.id+"_start"){ar=at}else{if(au.id==ao.id+"_end"){aq=at}}}});return{startIndex:ar,endIndex:aq}}function am(ap,ar,av){var ao=[],au,aq,at=true;au=ak.inline||ak.block;aq=c.create(au);aa(aq);M.walk(ap,function(aw){var ax;function ay(aA){var aF,aD,aB,aC,aE;aE=at;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=at;at=x(aA)==="true";aC=true}if(f(aF,"br")){ax=0;if(ak.block){c.remove(aA)}return}if(ak.wrapper&&y(aA,ac,aj)){ax=0;return}if(at&&!aC&&ak.block&&!ak.wrapper&&H(aF)){aA=c.rename(aA,au);aa(aA);ao.push(aA);ax=0;return}if(ak.selector){S(af,function(aG){if("collapsed" in aG&&aG.collapsed!==ag){return}if(c.is(aA,aG.selector)&&!b(aA)){aa(aA,aG);aB=true}});if(!ak.inline||aB){ax=0;return}}function az(aG){return aG.nodeType===3&&aG.nodeValue.length===1&&aG.nodeValue.charCodeAt(0)===65279}if(at&&!aC&&k(au,aF)&&k(aD,au)&&!(!av&&az(aA))&&!b(aA)&&(!ak.inline||!G(aA))){if(!ax){ax=c.clone(aq,W);aA.parentNode.insertBefore(ax,aA);ao.push(ax)}ax.appendChild(aA)}else{ax=0;S(a.grep(aA.childNodes),ay);if(aC){at=aE}ax=0}}S(aw,ay)});if(ak.wrap_links===false){S(ao,function(aw){function ax(aB){var aA,az,ay;if(aB.nodeName==="A"){az=c.clone(aq,W);ao.push(az);ay=a.grep(aB.childNodes);for(aA=0;aA1||!G(ay))&&aw===0){c.remove(ay,1);return}if(ak.inline||ak.wrapper){if(!ak.exact&&aw===1){ay=ax(ay)}S(af,function(aA){S(c.select(aA.inline,ay),function(aC){var aB;if(aA.wrap_links===false){aB=aC.parentNode;do{if(aB.nodeName==="A"){return}aB=aB.parentNode}while(aB)}Y(aA,aj,aC,aA.exact?aC:null)})});if(y(ay.parentNode,ac,aj)){c.remove(ay,1);ay=0;return B}if(ak.merge_with_parents){c.getParent(ay.parentNode,function(aA){if(y(aA,ac,aj)){c.remove(ay,1);ay=0;return B}})}if(ay&&ak.merge_siblings!==false){ay=u(D(ay),ay);ay=u(ay,D(ay,B))}}})}if(ak){if(ae){if(ae.nodeType){ab=c.createRng();ab.setStartBefore(ae);ab.setEndAfter(ae);am(p(ab,af),null,true)}else{am(ae,null,true)}}else{if(!ag||!ak.inline||c.select("td.mceSelected,th.mceSelected").length){var an=Z.selection.getNode();if(!m&&af[0].defaultBlock&&!c.getParent(an,c.isBlock)){X(af[0].defaultBlock)}Z.selection.setRng(ad());ai=r.getBookmark();am(p(r.getRng(B),af),ai);if(ak.styles&&(ak.styles.color||ak.styles.textDecoration)){a.walk(an,K,"childNodes");K(an)}r.moveToBookmark(ai);Q(r.getRng(B));Z.nodeChanged()}else{T("apply",ac,aj)}}}}function A(ac,aj,ae){var af=U(ac),am=af[0],ai,ab,ak=true;function ad(ar){var aq,ap,ao,au,at;if(ar.nodeType===3){return}if(ar.nodeType===1&&x(ar)){au=ak;ak=x(ar)==="true";at=true}aq=a.grep(ar.childNodes);if(ak&&!at){for(ap=0,ao=af.length;ap=0;ab--){aa=ag[ab].selector;if(!aa){return B}for(af=ac.length-1;af>=0;af--){if(c.is(ac[af],aa)){return B}}}}return W}function I(aa,ad,ab){var ac;if(!O){O={};ac={};Z.onNodeChange.addToTop(function(af,ae,ah){var ag=n(ah),ai={};S(O,function(aj,ak){S(ag,function(al){if(y(al,ak,{},aj.similar)){if(!ac[ak]){S(aj,function(am){am(true,{node:al,format:ak,parents:ag})});ac[ak]=aj}ai[ak]=aj;return false}})});S(ac,function(aj,ak){if(!ai[ak]){delete ac[ak];S(aj,function(al){al(false,{node:ah,format:ak,parents:ag})})}})})}S(aa.split(","),function(ae){if(!O[ae]){O[ae]=[];O[ae].similar=ab}O[ae].push(ad)});return this}a.extend(this,{get:U,register:l,apply:X,remove:A,toggle:E,match:j,matchAll:v,matchNode:y,canApply:z,formatChanged:I});i();V();function g(aa,ab){if(f(aa,ab.inline)){return B}if(f(aa,ab.block)){return B}if(ab.selector){return c.is(aa,ab.selector)}}function f(ab,aa){ab=ab||"";aa=aa||"";ab=""+(ab.nodeName||ab);aa=""+(aa.nodeName||aa);return ab.toLowerCase()==aa.toLowerCase()}function N(ab,aa){var ac=c.getStyle(ab,aa);if(aa=="color"||aa=="backgroundColor"){ac=c.toHex(ac)}if(aa=="fontWeight"&&ac==700){ac="bold"}return""+ac}function q(aa,ab){if(typeof(aa)!="string"){aa=aa(ab)}else{if(ab){aa=aa.replace(/%(\w+)/g,function(ad,ac){return ab[ac]||ad})}}return aa}function e(aa){return aa&&aa.nodeType===3&&/^([\t \r\n]+|)$/.test(aa.nodeValue)}function R(ac,ab,aa){var ad=c.create(ab,aa);ac.parentNode.insertBefore(ad,ac);ad.appendChild(ac);return ad}function p(aa,al,ad){var am,ag,ak,ac=aa.startContainer,ah=aa.startOffset,ap=aa.endContainer,aj=aa.endOffset;function an(ax){var ar,av,au,at,aq;ar=av=ax?ac:ap;at=ax?"previousSibling":"nextSibling";aq=c.getRoot();function aw(ay){return ay.nodeName=="BR"&&ay.getAttribute("data-mce-bogus")&&!ay.nextSibling}if(ar.nodeType==3&&!e(ar)){if(ax?ah>0:ajam?am:ah];if(ac&&ac.nodeType==3){ah=0}}if(ap.nodeType==1&&ap.hasChildNodes()){am=ap.childNodes.length-1;ap=ap.childNodes[aj>am?am:aj-1];if(ap&&ap.nodeType==3){aj=ap.nodeValue.length}}function ao(ar){var aq=ar;while(aq){if(aq.nodeType===1&&x(aq)){return x(aq)==="false"?aq:ar}aq=aq.parentNode}return ar}function ai(ar,aw,ay){var av,at,ax,aq;function au(aA,aC){var aD,az,aB=aA.nodeValue;if(typeof(aC)=="undefined"){aC=ay?aB.length:0}if(ay){aD=aB.lastIndexOf(" ",aC);az=aB.lastIndexOf("\u00a0",aC);aD=aD>az?aD:az;if(aD!==-1&&!ad){aD++}}else{aD=aB.indexOf(" ",aC);az=aB.indexOf("\u00a0",aC);aD=aD!==-1&&(az===-1||aD0&&ag.node.nodeType===3&&ag.node.nodeValue.charAt(ag.offset-1)===" "){if(ag.offset>1){ap=ag.node;ap.splitText(ag.offset-1)}}}}if(al[0].inline||al[0].block_expand){if(!al[0].inline||(ac.nodeType!=3||ah===0)){ac=an(true)}if(!al[0].inline||(ap.nodeType!=3||aj===ap.nodeValue.length)){ap=an()}}if(al[0].selector&&al[0].expand!==W&&!al[0].inline){ac=ae(ac,"previousSibling");ap=ae(ap,"nextSibling")}if(al[0].block||al[0].selector){ac=ab(ac,"previousSibling");ap=ab(ap,"nextSibling");if(al[0].block){if(!G(ac)){ac=an(true)}if(!G(ap)){ap=an()}}}if(ac.nodeType==1){ah=s(ac);ac=ac.parentNode}if(ap.nodeType==1){aj=s(ap)+1;ap=ap.parentNode}return{startContainer:ac,startOffset:ah,endContainer:ap,endOffset:aj}}function Y(ag,af,ad,aa){var ac,ab,ae;if(!g(ad,ag)){return W}if(ag.remove!="all"){S(ag.styles,function(ai,ah){ai=q(ai,af);if(typeof(ah)==="number"){ah=ai;aa=0}if(!aa||f(N(aa,ah),ai)){c.setStyle(ad,ah,"")}ae=1});if(ae&&c.getAttrib(ad,"style")===""){ad.removeAttribute("style");ad.removeAttribute("data-mce-style")}S(ag.attributes,function(aj,ah){var ai;aj=q(aj,af);if(typeof(ah)==="number"){ah=aj;aa=0}if(!aa||f(c.getAttrib(aa,ah),aj)){if(ah=="class"){aj=c.getAttrib(ad,ah);if(aj){ai="";S(aj.split(/\s+/),function(ak){if(/mce\w+/.test(ak)){ai+=(ai?" ":"")+ak}});if(ai){c.setAttrib(ad,ah,ai);return}}}if(ah=="class"){ad.removeAttribute("className")}if(d.test(ah)){ad.removeAttribute("data-mce-"+ah)}ad.removeAttribute(ah)}});S(ag.classes,function(ah){ah=q(ah,af);if(!aa||c.hasClass(aa,ah)){c.removeClass(ad,ah)}});ab=c.getAttribs(ad);for(ac=0;acac?ac:ad]}if(aa.nodeType===3&&ae&&ad>=aa.nodeValue.length){aa=new t(aa,Z.getBody()).next()||aa}if(aa.nodeType===3&&!ae&&ad===0){aa=new t(aa,Z.getBody()).prev()||aa}return aa}function T(ak,aa,ai){var am="_mce_caret",ab=Z.settings.caret_debug;function ac(aq){var ap=c.create("span",{id:am,"data-mce-bogus":true,style:ab?"color:red":""});if(aq){ap.appendChild(Z.getDoc().createTextNode(F))}return ap}function aj(aq,ap){while(aq){if((aq.nodeType===3&&aq.nodeValue!==F)||aq.childNodes.length>1){return false}if(ap&&aq.nodeType===1){ap.push(aq)}aq=aq.firstChild}return true}function af(ap){while(ap){if(ap.id===am){return ap}ap=ap.parentNode}}function ae(ap){var aq;if(ap){aq=new t(ap,ap);for(ap=aq.current();ap;ap=aq.next()){if(ap.nodeType===3){return ap}}}}function ad(ar,aq){var at,ap;if(!ar){ar=af(r.getStart());if(!ar){while(ar=c.get(am)){ad(ar,false)}}}else{ap=r.getRng(true);if(aj(ar)){if(aq!==false){ap.setStartBefore(ar);ap.setEndBefore(ar)}c.remove(ar)}else{at=ae(ar);if(at.nodeValue.charAt(0)===F){at=at.deleteData(0,1)}c.remove(ar,1)}r.setRng(ap)}}function al(aq){var ap=aq.nodeName.toLowerCase();switch(ap){case"html","#document":return false;case"body":return true;default:return al(aq.parentNode)}}function ag(ap){return al(ap.startContainer)||al(ap.endContainer)}function ah(){var ar,ap,aw,av,at,aq,au;ar=r.getRng(true);av=ar.startOffset;aq=ar.startContainer;au=aq.nodeValue;ap=af(r.getStart());if(ap){aw=ae(ap)}if(au&&av>0&&av=0;av--){ar.appendChild(c.clone(az[av],false));ar=ar.firstChild}ar.appendChild(c.doc.createTextNode(F));ar=ar.firstChild;var at=c.getParent(aA,H);if(at&&c.isEmpty(at)){aA.parentNode.replaceChild(ay,aA)}else{c.insertAfter(ay,aA)}r.setCursorLocation(ar,1);if(c.isEmpty(aA)){c.remove(aA)}}}function ao(){var ap;ap=af(r.getStart());if(ap&&!c.isEmpty(ap)){a.walk(ap,function(aq){if(aq.nodeType==1&&aq.id!==am&&!c.isEmpty(aq)){c.setAttrib(aq,"data-mce-bogus",null)}},"childNodes")}}if(!Z._hasCaretEvents){Z.onBeforeGetContent.addToTop(function(){var ap=[],aq;if(aj(af(r.getStart()),ap)){aq=ap.length;while(aq--){c.setAttrib(ap[aq],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ap){Z[ap].addToTop(function(){ad();ao()})});Z.onKeyDown.addToTop(function(ap,ar){var aq=ar.keyCode;if(aq==8||aq==37||aq==39){ad(af(r.getStart()))}ao()});r.onSetContent.add(ao);Z._hasCaretEvents=true}if(ak=="apply"){ah()}else{an()}}function Q(ab){var aa=ab.startContainer,ah=ab.startOffset,ad,ag,af,ac,ae;if(aa.nodeType==3&&ah>=aa.nodeValue.length){ah=s(aa);aa=aa.parentNode;ad=true}if(aa.nodeType==1){ac=aa.childNodes;aa=ac[Math.min(ah,ac.length-1)];ag=new t(aa,c.getParent(aa,c.isBlock));if(ah>ac.length-1||ad){ag.next()}for(af=ag.current();af;af=ag.next()){if(af.nodeType==3&&!e(af)){ae=c.create("a",null,F);af.parentNode.insertBefore(ae,af);ab.setStart(af,0);r.setRng(ab);c.remove(ae);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(B){var v=e.getRng(true),G,j,A,u,p,M,C,o,k,n,t,J,x,D;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&!b.isIE11&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function z(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(US.y+S.h){f.getWin().scrollTo(0,U'}return R}function q(Q){var P,O,N;if(A.nodeType==3&&(Q?u>0:u0){return true}}}function L(){var P,O,N;if(A&&A.nodeType==3&&u>=A.nodeValue.length){if((!b.isIE||b.isIE11)&&!y()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if((b.isIE&&!b.isIE11)&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{}," ");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE||b.isIE11){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(B.isDefaultPrevented()){return}A=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;C=B.shiftKey;if(A.nodeType==1&&A.hasChildNodes()){D=u>A.childNodes.length-1;A=A.childNodes[Math.min(u,A.childNodes.length-1)]||A;if(D&&A.nodeType==3){u=A.nodeValue.length}else{u=0}}j=K(A);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||C){L()}return}if((x&&!C)||(!x&&C)){A=l(A,u)}p=i.getParent(A,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!B.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&C){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!C){L();return}}else{if((!x&&!C&&t!="LI")||(x&&C)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);z(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); +/** +* Name: editor_plugin_src.js (for pmGrids tinyMCE plugin) +**/ + +(function(){ + var strPluginURL; + tinymce.create('tinymce.plugins.pmGridsPlugin', { + init: function(ed, url) + { + strPluginURL = url; // store the URL for future use.. + ed.addCommand('mcepmGrids', function() { + pmGrids(); + }); + ed.addButton('pmGrids', { + title: 'pmGrids', + label : ' @#', + cmd: 'mcepmGrids', + image: url + '/img/grids.png' + }); + }, + createControl: function(n, cm) { + return null; + }, + getPluginURL: function() { + return strPluginURL; + } + }); + tinymce.PluginManager.add('pmGrids', tinymce.plugins.pmGridsPlugin); +})(); + +/** + * @function pmGrids + * @description The function intializes the plugin and also creates the popup + * window + * @param field_name deprecated + * @param win deprecated + */ +function pmGrids(field_name, win) { + //tinyMCE.activeEditor.anyVariable='path/to/ProcessMaker' + var strPluginPath = tinyMCE.activeEditor.plugins.pmGrids.getPluginURL(); // get the path to the uploader plugin + var strScriptURL = strPluginPath + "/pmGrids.html"; // loading the form + + tinyMCE.activeEditor.windowManager.open({ // open the plugin popup + file : strScriptURL, + title : 'ProcessMaker Grid Wizard', + width : '600px', + height : '230px', + resizable : "yes", + scrollbars : "no", + overflow : false, + inline : 1, // This parameter only has an effect if you use the inlinepopups plugin! + close_previous : "no" + }, { + window : win, + input : field_name + }); + + return false; +} + +/** + * @function closePluginPopup + * @description closes the plugin popup + */ +function closePluginPopup(){ + tinyMCEPopup.close(); // close popup window +} + + +/** + * @function updateEditorContent + * @description insert the editor content with a html code string + * @params serializedHTML String html code + */ +function updateEditorContent(serializedHTML){ + tinyMCE.activeEditor.execCommand('mceInsertRawHTML', false, serializedHTML); + closePluginPopup(); +} + + +/** +* Name: editor_plugin_src.js (for pmSimpleUploader tinyMCE plugin) +**/ + +(function(){ + var strPluginURL; + tinymce.create('tinymce.plugins.pmSimpleUploaderPlugin', { + init: function(ed, url) + { + strPluginURL = url; // store the URL for future use.. + ed.addCommand('mcepmSimpleUploader', function() { + pmSimpleUploader(); + }); + ed.addButton('pmSimpleUploader', { + title: 'pmSimpleUploader', + label : 'Upload File', + cmd: 'mcepmSimpleUploader', + image: url + '/img/pmSimpleUploader.png' + }); + }, + createControl: function(n, cm) { + return null; + }, + getPluginURL: function() { + return strPluginURL; + } + }); + tinymce.PluginManager.add('pmSimpleUploader', tinymce.plugins.pmSimpleUploaderPlugin); +})(); + +/** + * this function can get called from the plugin inint (above) or from the callback on advlink/advimg plugins.. + * in the latter case, win and type will be set.. In the rist case, we will just update the main editor window + * with the path of the uploaded file + */ +function pmSimpleUploader(field_name, url, type, win) { + var strPluginPath = tinyMCE.activeEditor.plugins.pmSimpleUploader.getPluginURL(); // get the path to the uploader plugin + var strUploaderURL = strPluginPath + "/uploader.php"; // generate the path to the uploader script + var strUploadPath = tinyMCE.activeEditor.getParam('plugin_pmSimpleUploader_upload_path'); // get the relative upload path + var strSubstitutePath = tinyMCE.activeEditor.getParam('plugin_pmSimpleUploader_upload_substitute_path'); // get the path we'll substitute for the for the upload path (i.e. fully qualified) + + if (strUploaderURL.indexOf("?") < 0){ // if we were called without any GET params + strUploaderURL = strUploaderURL + "?type=" + type + "&d=" + strUploadPath + "&subs=" + strSubstitutePath; // add our own params + } else { + strUploaderURL = strUploaderURL + "&type=" + type + "&d=" + strUploadPath + "&subs=" + strSubstitutePath; + } + tinyMCE.activeEditor.windowManager.open({ // open the plugin popup + file : strUploaderURL, + title : 'Upload from file', + width : 500, + height : 100, + resizable : "yes", + inline : 1, // This parameter only has an effect if you use the inlinepopups plugin! + close_previous : "no" + }, { + window : win, + input : field_name + }); + + return false; +} + +/** + * This function will get called when the uploader is done uploading the file and ready to update + * calling dialog and close the upload popup + * strReturnURL should be the string with the path to the uploaded file + */ + +function closePluginPopup(){ + tinyMCEPopup.close(); // close popup window +} + +/** + * This function update the content editor with the content template file + */ + +function updateEditorContent(serializedHTML){ + tinyMCE.activeEditor.execCommand('mceSetContent', false, serializedHTML); +} +/** +* Name: editor_plugin_src.js (for pmVariablePicker tinyMCE plugin) +**/ + +(function(){ + // set the base url setting + tinyMCE.baseURL = "/js/tinymce/jscripts/tiny_mce"; + var strPluginURL; + // the plugin init settings + tinymce.create('tinymce.plugins.pmVariablePickerPlugin', { + init: function(ed, url) + { + strPluginURL = url; // store the URL for future use.. + ed.addCommand('mcepmVariablePicker', function() { + pmVariablePicker(); + }); + ed.addButton('pmVariablePicker', { + title: 'pmVariablePicker', + label : ' @#', + cmd: 'mcepmVariablePicker', + image: url + '/img/picker.png' + }); + }, + createControl: function(n, cm) { + return null; + }, + getPluginURL: function() { + return strPluginURL; + } + }); + tinymce.PluginManager.add('pmVariablePicker', tinymce.plugins.pmVariablePickerPlugin); +})(); + +// this function can get called from the plugin inint (above) or from the callback on advlink/advimg plugins.. +// in the latter case, win and type will be set.. +/** + * @function pmVariablePicker + * @description Opens the plugin popup, loading the form inside it. + * @param field_name deprecated + * @param type deprecated + * @param win deprecated + * + */ +function pmVariablePicker(field_name, type, win) { + + var uloc=String(location); + var new_text = uloc.split('/'); + var loc='/'+new_text[3]+'/'+new_text[4]+'/'+new_text[5]+'/controls/varsAjax?displayOption=tinyMCE&sSymbol=@@&&sProcess='+tinyMCE.activeEditor.processID; + var strPluginPath = tinyMCE.activeEditor.plugins.pmVariablePicker.getPluginURL(); // get the path to the uploader plugin + var strUploaderURL = strPluginPath + "/uploader.php"; // generate the path to the uploader script + var strUploadPath = tinyMCE.activeEditor.getParam('plugin_pmVariablePicker_upload_path'); // get the relative upload path + var strSubstitutePath = tinyMCE.activeEditor.getParam('plugin_pmVariablePicker_upload_substitute_path'); // get the path we'll substitute for the for the upload path (i.e. fully qualified) + + if (strUploaderURL.indexOf("?") < 0){ // if we were called without any GET params + strUploaderURL = strUploaderURL + "?type=" + type + "&d=" + strUploadPath + "&subs=" + strSubstitutePath; // add our own params + } else { + strUploaderURL = strUploaderURL + "&type=" + type + "&d=" + strUploadPath + "&subs=" + strSubstitutePath; + } + //tinyMCE.activeEditor.anyVariable='path/to/ProcessMaker' + tinyMCE.activeEditor.windowManager.open({ // open the plugin popup + file : loc, + title : 'Upload Variable', + width : '600px', + height : '330px', + resizable : "yes", + scrollbars : "no", + overflow : false, + inline : 1, // This parameter only has an effect if you use the inlinepopups plugin! + close_previous : "no" + }, { + window : win, + input : field_name + }); + + return false; +} + +/** + * @function closePluginPopup + * @description closes the tinyMCE popup window + */ +function closePluginPopup(){ + tinyMCEPopup.close(); // close popup window +} + +/** + * @function updateEditorContent + * @description insert the editor content with a html code string + * @params serializedHTML String html code + */ +function updateEditorContent(serializedHTML){ + tinyMCE.activeEditor.execCommand('mceInsertContent', false, serializedHTML); +} + +/** + * @function insertFormVar + * @description alternate version of updateEditorContent this function is + * compatible with the variable picker calls, also closes the popup + * window + * @param fieldName String deprecated + * @param serializedHTML String the html code to be added. + */ +function insertFormVar(fieldName,serializedHTML){ + tinyMCEPopup.execCommand('mceInsertContent', false, serializedHTML); + closePluginPopup(); +} + +(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g$1');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); +(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380+parseInt(a.getLang("xhtmlxtras.attr_delta_width",0)),height:370+parseInt(a.getLang("xhtmlxtras.attr_delta_height",0)),inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})(); +(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\u00co-\u00ff^\uc397^u00f7\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'0')}}else{tinymce.DOM.add(k,"span",{},'0')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.keyCode})},_getCount:function(c){var a=0;var b=c.getContent({format:"raw"});if(b){b=b.replace(/\.\.\./g," ");b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," ");b=b.replace(/(\w+)(&.+?;)+(\w+)/,"$1$3").replace(/&.+?;/g," ");b=b.replace(this.cleanre,"");var d=b.match(this.countre);if(d){a=d.length}}return a},_count:function(a){var b=this;if(b.block){return}b.block=1;setTimeout(function(){if(!a.destroyed){var c=b._getCount(a);tinymce.DOM.setHTML(b.id,c.toString());setTimeout(function(){b.block=0},b.update_rate)}},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); +(function(d){var e=d.each;function c(g,h){var i=h.ownerDocument,f=i.createRange(),j;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);j=i.createElement("body");j.appendChild(f.cloneContents());return j.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length===0}function a(g,f){return parseInt(g.getAttribute(f)||1,10)}function b(E,D,H){var g,I,A,n;function x(K,J){K=K.cloneNode(J);K.removeAttribute("id");return K}function s(){var J=0;g=[];e(["thead","tbody","tfoot"],function(K){var L=D.select("> "+K+" tr",E);e(L,function(M,N){N+=J;e(D.select("> td, > th",M),function(T,O){var P,Q,R,S;if(g[N]){while(g[N][O]){O++}}R=a(T,"rowspan");S=a(T,"colspan");for(Q=N;Q'}return false}},"childNodes");J=x(J,false);r(J,"rowSpan",1);r(J,"colSpan",1);if(K){J.appendChild(K)}else{if(!d.isIE||d.isIE11){J.innerHTML='
'}}return J}function p(){var J=D.createRng(),K;e(D.select("tr",E),function(L){if(L.cells.length===0){D.remove(L)}});if(D.select("tr",E).length===0){J.setStartAfter(E);J.setEndAfter(E);H.setRng(J);D.remove(E);return}e(D.select("thead,tbody,tfoot",E),function(L){if(L.rows.length===0){D.remove(L)}});s();K=g[Math.min(g.length-1,I.y)];if(K){H.select(K[Math.min(K.length-1,I.x)].elm,true);H.collapse(true)}}function t(P,N,R,O){var M,K,J,L,Q;M=g[N][P].elm.parentNode;for(J=1;J<=R;J++){M=D.getNext(M,"tr");if(M){for(K=P;K>=0;K--){Q=g[N+J][K].elm;if(Q.parentNode==M){for(L=1;L<=O;L++){D.insertAfter(f(Q),Q)}break}}if(K==-1){for(L=1;L<=O;L++){M.insertBefore(f(M.cells[0]),M.cells[0])}}}}}function z(){e(g,function(J,K){e(J,function(M,L){var P,O,N;if(i(M)){M=M.elm;P=a(M,"colspan");O=a(M,"rowspan");if(P>1||O>1){r(M,"rowSpan",1);r(M,"colSpan",1);for(N=0;N1){r(P,"rowSpan",L+1);continue}}else{if(J>0&&g[J-1][O]){S=g[J-1][O].elm;L=a(S,"rowSpan");if(L>1){r(S,"rowSpan",L+1);continue}}}K=f(P);r(K,"colSpan",P.colSpan);R.appendChild(K);M=P}}if(R.hasChildNodes()){if(!N){D.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function h(K){var L,J;e(g,function(M){e(M,function(O,N){if(i(O)){L=N;if(K){return false}}});if(K){return !L}});e(g,function(P,Q){var M,N,O;if(!P[L]){return}M=P[L].elm;if(M!=J){O=a(M,"colspan");N=a(M,"rowspan");if(O==1){if(!K){D.insertAfter(f(M),M);t(L,Q,N-1,O)}else{M.parentNode.insertBefore(f(M),M);t(L,Q,N-1,O)}}else{r(M,"colSpan",M.colSpan+1)}J=M}})}function m(){var J=[];e(g,function(K){e(K,function(M,L){if(i(M)&&d.inArray(J,L)===-1){e(g,function(P){var N=P[L].elm,O;O=a(N,"colSpan");if(O>1){r(N,"colSpan",O-1)}else{D.remove(N)}});J.push(L)}})});p()}function l(){var K;function J(M){var N,L;e(M.cells,function(O){var P=a(O,"rowSpan");if(P>1){r(O,"rowSpan",P-1);N=C(O);t(N.x,N.y,1,1)}});N=C(M.cells[0]);e(g[N.y],function(O){var P;O=O.elm;if(O!=L){P=a(O,"rowSpan");if(P<=1){D.remove(O)}else{r(O,"rowSpan",P-1)}L=O}})}K=j();e(K.reverse(),function(L){J(L)});p()}function B(){var J=j();D.remove(J);p();return J}function G(){var J=j();e(J,function(L,K){J[K]=x(L,true)});return J}function y(L,K){if(!L){return}var M=j(),J=M[K?0:M.length-1],N=J.cells.length;e(g,function(P){var O;N=0;e(P,function(Q){if(Q.real){N+=Q.colspan}if(Q.elm.parentNode==J){O=1}});if(O){return false}});if(!K){L.reverse()}e(L,function(R){var Q=R.cells.length,O,P;for(P=0;PK){K=N}if(M>J){J=M}if(O.real){Q=O.colspan-1;P=O.rowspan-1;if(Q){if(N+Q>K){K=N+Q}}if(P){if(M+P>J){J=M+P}}}}})});return{x:K,y:J}}function u(R){var M,L,T,S,K,J,N,O,P,Q;A=C(R);if(I&&A){M=Math.min(I.x,A.x);L=Math.min(I.y,A.y);T=Math.max(I.x,A.x);S=Math.max(I.y,A.y);K=T;J=S;for(P=L;P<=J;P++){R=g[P][M];if(!R.real){if(M-(R.colspan-1)K){K=Q+N}}if(O){if(P+O>J){J=P+O}}}}}D.removeClass(D.select("td.mceSelected,th.mceSelected"),"mceSelected");for(P=L;P<=J;P++){for(Q=M;Q<=K;Q++){if(g[P][Q]){D.addClass(g[P][Q].elm,"mceSelected")}}}}}s();n=D.getParent(H.getStart(),"th,td");if(n){I=C(n);A=F();n=w(I.x,I.y)}d.extend(this,{deleteTable:q,split:z,merge:o,insertRow:k,insertCol:h,deleteCols:m,deleteRows:l,cutRows:B,copyRows:G,pasteRows:y,getPos:C,setStartCell:v,setEndCell:u})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,l,i=true;function k(o){var n=g.selection,m=g.dom.getParent(o||n.getNode(),"table");if(m){return new b(m,g.dom,n)}}function j(){g.getBody().style.webkitUserSelect="";if(i){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");i=false}}e([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(m){g.addButton(m[0],{title:m[1],cmd:m[2],ui:m[3]})});if(!d.isIE){g.onClick.add(function(m,n){n=n.target;if(n.nodeName==="TABLE"){m.selection.select(n);m.nodeChanged()}})}g.onPreProcess.add(function(n,o){var m,p,q,s=n.dom,r;m=s.select("table",o.node);p=m.length;while(p--){q=m[p];s.setAttrib(q,"data-mce-style","");if((r=s.getAttrib(q,"width"))){s.setStyle(q,"width",r);s.setAttrib(q,"width","")}if((r=s.getAttrib(q,"height"))){s.setStyle(q,"height",r);s.setAttrib(q,"height","")}}});g.onNodeChange.add(function(o,m,r){var q;r=o.selection.getStart();q=o.dom.getParent(r,"td,th,caption");m.setActive("table",r.nodeName==="TABLE"||!!q);if(q&&q.nodeName==="CAPTION"){q=0}m.setDisabled("delete_table",!q);m.setDisabled("delete_col",!q);m.setDisabled("delete_table",!q);m.setDisabled("delete_row",!q);m.setDisabled("col_after",!q);m.setDisabled("col_before",!q);m.setDisabled("row_after",!q);m.setDisabled("row_before",!q);m.setDisabled("row_props",!q);m.setDisabled("cell_props",!q);m.setDisabled("split_cells",!q);m.setDisabled("merge_cells",!q)});g.onInit.add(function(q){var o,s,p=q.dom,t;f=q.windowManager;q.onMouseDown.add(function(v,w){if(w.button!=2){j();s=p.getParent(w.target,"td,th");o=p.getParent(s,"table")}});p.bind(q.getDoc(),"mouseover",function(z){var x,w,y=z.target;if(s&&(t||y!=s)&&(y.nodeName=="TD"||y.nodeName=="TH")){w=p.getParent(y,"table");if(w==o){if(!t){t=k(w);t.setStartCell(s);q.getBody().style.webkitUserSelect="none"}t.setEndCell(y);i=true}x=q.selection.getSel();try{if(x.removeAllRanges){x.removeAllRanges()}else{x.empty()}}catch(v){}z.preventDefault()}});q.onMouseUp.add(function(y){var w,B=y.selection,v,C,A,z;function x(D,F){var E=new d.dom.TreeWalker(D,D);do{if(D.nodeType==3&&d.trim(D.nodeValue).length!==0){if(F){w.setStart(D,0)}else{w.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){w.setStartBefore(D)}else{w.setEndBefore(D)}return}D=(F?E.next():E.prev())}while(D)}if(s){if(t){y.getBody().style.webkitUserSelect=""}v=p.select("td.mceSelected,th.mceSelected");if(v.length>0){w=p.createRng();A=v[0];w.setStartBefore(A);w.setEndAfter(A);x(A,1);C=new d.dom.TreeWalker(A,p.getParent(v[0],"table"));do{if(A.nodeName=="TD"||A.nodeName=="TH"){if(!p.hasClass(A,"mceSelected")){break}z=A}A=C.next()}while(A);x(z);B.setRng(w)}y.nodeChanged();s=t=o=null}});q.onKeyUp.add(function(){j()});q.onKeyDown.add(function(v){m(v)});q.onMouseDown.add(function(v,w){if(w.button!=2){m(v)}});function n(A,w,x,C){var y=3,D=A.dom.getParent(w.startContainer,"TABLE"),z,v,B;if(D){z=D.parentNode}v=w.startContainer.nodeType==y&&w.startOffset===0&&w.endOffset===0&&C&&(x.nodeName==="TR"||x===z);B=(x.nodeName==="TD"||x.nodeName==="TH")&&!C;return v||B}function m(x){if(!d.isWebKit){return}var w=x.selection.getRng();var z=x.selection.getNode();var y=x.dom.getParent(w.startContainer,"TD,TH");if(!n(x,w,z,y)){return}if(!y){y=z}var v=y.lastChild;while(v.lastChild){v=v.lastChild}w.setEnd(v,v.nodeValue.length);x.selection.setRng(w)}q.plugins.table.fixTableCellSelection=m;if(q&&q.plugins.contextmenu){q.plugins.contextmenu.onContextMenu.add(function(x,v,z){var A,y=q.selection,w=y.getNode()||q.getBody();if(q.dom.getParent(z,"td")||q.dom.getParent(z,"th")||q.dom.select("td.mceSelected,th.mceSelected").length){v.removeAll();if(w.nodeName=="A"&&!q.dom.getAttrib(w,"name")){v.add({title:"advanced.link_desc",icon:"link",cmd:q.plugins.advlink?"mceAdvLink":"mceLink",ui:true});v.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});v.addSeparator()}if(w.nodeName=="IMG"&&w.className.indexOf("mceItem")==-1){v.add({title:"advanced.image_desc",icon:"image",cmd:q.plugins.advimage?"mceAdvImage":"mceImage",ui:true});v.addSeparator()}v.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});v.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});v.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});v.addSeparator();A=v.addMenu({title:"table.cell"});A.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});A.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});A.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});A=v.addMenu({title:"table.row"});A.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});A.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});A.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});A.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});A.addSeparator();A.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});A.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});A.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!l);A.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!l);A=v.addMenu({title:"table.col"});A.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});A.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});A.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{v.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}function u(z,K){var I=d.VK;var N=K.keyCode;function L(V,R,P){var Q=V?"previousSibling":"nextSibling";var W=z.dom.getParent(R,"tr");var U=W[Q];if(U){w(z,R,U,V);d.dom.Event.cancel(P);return true}else{var X=z.dom.getParent(W,"table");var T=W.parentNode;var O=T.nodeName.toLowerCase();if(O==="tbody"||O===(V?"tfoot":"thead")){var S=v(V,X,T,"tbody");if(S!==null){return H(V,S,R,P)}}return J(V,W,Q,X,P)}}function v(S,Q,R,U){var P=z.dom.select(">"+U,Q);var O=P.indexOf(R);if(S&&O===0||!S&&O===P.length-1){return y(S,Q)}else{if(O===-1){var T=R.tagName.toLowerCase()==="thead"?0:P.length-1;return P[T]}else{return P[O+(S?-1:1)]}}}function y(R,Q){var P=R?"thead":"tfoot";var O=z.dom.select(">"+P,Q);return O.length!==0?O[0]:null}function H(S,Q,P,R){var O=G(Q,S);if(O){w(z,P,O,S)}d.dom.Event.cancel(R);return true}function J(V,R,O,U,T){var P=U[O];if(P){C(P);return true}else{var S=z.dom.getParent(U,"td,th");if(S){return L(V,S,T)}else{var Q=G(R,!V);C(Q);return d.dom.Event.cancel(T)}}}function G(P,O){var Q=P&&P[O?"lastChild":"firstChild"];return Q&&Q.nodeName==="BR"?z.dom.getParent(Q,"td,th"):Q}function C(O){z.selection.setCursorLocation(O,0)}function x(){return N==I.UP||N==I.DOWN}function A(O){var Q=O.selection.getNode();var P=O.dom.getParent(Q,"tr");return P!==null}function M(P){var O=0;var Q=P;while(Q.previousSibling){Q=Q.previousSibling;O=O+a(Q,"colspan")}return O}function B(Q,O){var R=0;var P=0;e(Q.children,function(S,T){R=R+a(S,"colspan");P=T;if(R>O){return false}});return P}function w(Q,T,V,S){var U=M(Q.dom.getParent(T,"td,th"));var P=B(V,U);var O=V.childNodes[P];var R=G(O,S);C(R||O)}function E(O){var Q=z.selection.getNode();var R=z.dom.getParent(Q,"td,th");var P=z.dom.getParent(O,"td,th");return R&&R!==P&&F(R,P)}function F(P,O){return z.dom.getParent(P,"TABLE")===z.dom.getParent(O,"TABLE")}if(x()&&A(z)){var D=z.selection.getNode();setTimeout(function(){if(E(D)){L(!K.shiftKey&&N===I.UP,D,K)}},0)}}if(d.isWebKit){q.onKeyDown.add(u)}function r(){var v;v=q.getBody().lastChild;while(v&&v.nodeType==3&&!v.nodeValue.length){v=v.previousSibling}if(v&&v.nodeName==="TABLE"){if(q.settings.forced_root_block){q.dom.add(q.getBody(),q.settings.forced_root_block,null,d.isIE&&!d.isIE11?" ":'
')}else{q.dom.add(q.getBody(),"br",{"data-mce-bogus":"1"})}}}if(d.isGecko){q.onKeyDown.add(function(w,y){var v,x,z=w.dom;if(y.keyCode==37||y.keyCode==38){v=w.selection.getRng();x=z.getParent(v.startContainer,"table");if(x&&w.getBody().firstChild==x){if(c(v,x)){v=z.createRng();v.setStartBefore(x);v.setEndBefore(x);w.selection.setRng(v);y.preventDefault()}}}})}q.onKeyUp.add(r);q.onSetContent.add(r);q.onVisualAid.add(r);q.onPreProcess.add(function(v,x){var w=x.node.lastChild;if(w&&(w.nodeName=="BR"||(w.childNodes.length==1&&(w.firstChild.nodeName=="BR"||w.firstChild.nodeValue=="\u00a0")))&&w.previousSibling&&w.previousSibling.nodeName=="TABLE"){v.dom.remove(w)}});r();q.startContent=q.getContent({format:"raw"})});e({mceTableSplitCells:function(m){m.split()},mceTableMergeCells:function(n){var o,p,m;m=g.dom.getParent(g.selection.getNode(),"th,td");if(m){o=m.rowSpan;p=m.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0),10),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0),10),inline:1},{rows:o,cols:p,onaction:function(q){n.merge(m,q.cols,q.rows)},plugin_url:h})}else{n.merge()}},mceTableInsertRowBefore:function(m){m.insertRow(true)},mceTableInsertRowAfter:function(m){m.insertRow()},mceTableInsertColBefore:function(m){m.insertCol(true)},mceTableInsertColAfter:function(m){m.insertCol()},mceTableDeleteCol:function(m){m.deleteCols()},mceTableDeleteRow:function(m){m.deleteRows()},mceTableCutRow:function(m){l=m.cutRows()},mceTableCopyRow:function(m){l=m.copyRows()},mceTablePasteRowBefore:function(m){m.pasteRows(l,true)},mceTablePasteRowAfter:function(m){m.pasteRows(l)},mceTableDelete:function(m){m.deleteTable()}},function(n,m){g.addCommand(m,function(){var o=k();if(o){n(o);g.execCommand("mceRepaint");j()}})});e({mceInsertTable:function(m){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0),10),height:320+parseInt(g.getLang("table.table_delta_height",0),10),inline:1},{plugin_url:h,action:m?m.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0),10),height:295+parseInt(g.getLang("table.rowprops_delta_height",0),10),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0),10),height:295+parseInt(g.getLang("table.cellprops_delta_height",0),10),inline:1},{plugin_url:h})}},function(n,m){g.addCommand(m,function(o,p){n(p)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length0){for(m=j+1;m=0;m--){if(r(n[m])){return n[m]}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(n.id&&(l=tinymce.get(n.id||n.name))){l.focus()}else{window.setTimeout(function(){if(!tinymce.isWebKit){window.focus()}n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); +(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){window.focus();a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})(); +(function(){var c=tinymce.each,a={paste_auto_cleanup_on_paste:true,paste_enable_default_filters:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_max_consecutive_linebreaks:2,paste_text_use_dialog:false,paste_text_sticky:false,paste_text_sticky_default:false,paste_text_notifyalways:false,paste_text_linebreaktype:"combined",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(d,e){return d.getParam(e,a[e])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(d,e){var f=this;f.editor=d;f.url=e;f.onPreProcess=new tinymce.util.Dispatcher(f);f.onPostProcess=new tinymce.util.Dispatcher(f);f.onPreProcess.add(f._preProcess);f.onPostProcess.add(f._postProcess);f.onPreProcess.add(function(i,j){d.execCallback("paste_preprocess",i,j)});f.onPostProcess.add(function(i,j){d.execCallback("paste_postprocess",i,j)});d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){return false}});d.pasteAsPlainText=b(d,"paste_text_sticky_default");function h(l,j){var k=d.dom,i;f.onPreProcess.dispatch(f,l);l.node=k.create("div",0,l.content);if(tinymce.isGecko){i=d.selection.getRng(true);if(i.startContainer==i.endContainer&&i.startContainer.nodeType==3){if(l.node.childNodes.length===1&&/^(p|h[1-6]|pre)$/i.test(l.node.firstChild.nodeName)&&l.content.indexOf("__MCE_ITEM__")===-1){k.remove(l.node.firstChild,true)}}}f.onPostProcess.dispatch(f,l);l.content=d.serializer.serialize(l.node,{getInner:1,forced_root_block:""});if((!j)&&(d.pasteAsPlainText)){f._insertPlainText(l.content);if(!b(d,"paste_text_sticky")){d.pasteAsPlainText=false;d.controlManager.setActive("pastetext",false)}}else{f._insert(l.content)}}d.addCommand("mceInsertClipboardContent",function(i,j){h(j,true)});if(!b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(j,i){var k=tinymce.util.Cookie;d.pasteAsPlainText=!d.pasteAsPlainText;d.controlManager.setActive("pastetext",d.pasteAsPlainText);if((d.pasteAsPlainText)&&(!k.get("tinymcePasteText"))){if(b(d,"paste_text_sticky")){d.windowManager.alert(d.translate("paste.plaintext_mode_sticky"))}else{d.windowManager.alert(d.translate("paste.plaintext_mode"))}if(!b(d,"paste_text_notifyalways")){k.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}d.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});d.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function g(s){var l,p,j,t,k=d.selection,o=d.dom,q=d.getBody(),i,r;if(s.clipboardData||o.doc.dataTransfer){r=(s.clipboardData||o.doc.dataTransfer).getData("Text");if(d.pasteAsPlainText){s.preventDefault();h({content:o.encode(r).replace(/\r?\n/g,"
")});return}}if(o.get("_mcePaste")){return}l=o.add(q,"div",{id:"_mcePaste","class":"mcePaste","data-mce-bogus":"1"},"\uFEFF\uFEFF");if(q!=d.getDoc().body){i=o.getPos(d.selection.getStart(),q).y}else{i=q.scrollTop+o.getViewPort(d.getWin()).y}o.setStyles(l,{position:"absolute",left:tinymce.isGecko?-40:0,top:i-25,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){t=k.getRng();j=o.doc.body.createTextRange();j.moveToElementText(l);j.execCommand("Paste");o.remove(l);if(l.innerHTML==="\uFEFF\uFEFF"){d.execCommand("mcePasteWord");s.preventDefault();return}k.setRng(t);k.setContent("");setTimeout(function(){h({content:l.innerHTML})},0);return tinymce.dom.Event.cancel(s)}else{function m(n){n.preventDefault()}o.bind(d.getDoc(),"mousedown",m);o.bind(d.getDoc(),"keydown",m);p=d.selection.getRng();l=l.firstChild;j=d.getDoc().createRange();j.setStart(l,0);j.setEnd(l,2);k.setRng(j);window.setTimeout(function(){var u="",n;if(!o.select("div.mcePaste > div.mcePaste").length){n=o.select("div.mcePaste");c(n,function(w){var v=w.firstChild;if(v&&v.nodeName=="DIV"&&v.style.marginTop&&v.style.backgroundColor){o.remove(v,1)}c(o.select("span.Apple-style-span",w),function(x){o.remove(x,1)});c(o.select("br[data-mce-bogus]",w),function(x){o.remove(x)});if(w.parentNode.className!="mcePaste"){u+=w.innerHTML}})}else{u="

"+o.encode(r).replace(/\r?\n\r?\n/g,"

").replace(/\r?\n/g,"
")+"

"}c(o.select("div.mcePaste"),function(v){o.remove(v)});if(p){k.setRng(p)}h({content:u});o.unbind(d.getDoc(),"mousedown",m);o.unbind(d.getDoc(),"keydown",m)},0)}}if(b(d,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){d.onKeyDown.addToTop(function(i,j){if(((tinymce.isMac?j.metaKey:j.ctrlKey)&&j.keyCode==86)||(j.shiftKey&&j.keyCode==45)){g(j)}})}else{d.onPaste.addToTop(function(i,j){return g(j)})}}d.onInit.add(function(){d.controlManager.setActive("pastetext",d.pasteAsPlainText);if(b(d,"paste_block_drop")){d.dom.bind(d.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(i){i.preventDefault();i.stopPropagation();return false})}});f._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(g,e){var k=this.editor,j=e.content,p=tinymce.grep,n=tinymce.explode,f=tinymce.trim,l,i;function d(h){c(h,function(o){if(o.constructor==RegExp){j=j.replace(o,"")}else{j=j.replace(o[0],o[1])}})}if(k.settings.paste_enable_default_filters==false){return}if(tinymce.isIE&&document.documentMode>=9&&/<(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)/.test(e.content)){d([[/(?:
 [\s\r\n]+|
)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:
 [\s\r\n]+|
)*/g,"$1"]]);d([[/

/g,"

"],[/
/g," "],[/

/g,"
"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*( )+/gi,/( |]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/

]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"

$1

")}if(b(k,"paste_convert_middot_lists")){d([[//gi,"$&__MCE_ITEM__"],[/(]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([//gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/ /gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1");j=j.replace(/(<(ol|ul)[^>]*\s)(?:id|name|language|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/"/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/]*>/gi,"

"],[/<\/h[1-6][^>]*>/gi,"

"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/ /g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.( |\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*( |\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*[\w|'<'|'>']+\.( |\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/ /gi," "],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length"]])}else{if(f=="p"){e([[/\n+/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"]])}else{e([[/\n\n/g,"

"],[/^(.*<\/p>)(

)$/,"

$1"],[/\n/g,"
"]])}}}h.execCommand("mceInsertContent",false,j)}},_legacySupport:function(){var e=this,d=e.editor;d.addCommand("mcePasteWord",function(){d.windowManager.open({file:e.url+"/pasteword.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})});if(b(d,"paste_text_use_dialog")){d.addCommand("mcePasteText",function(){d.windowManager.open({file:e.url+"/pastetext.htm",width:parseInt(b(d,"paste_dialog_width")),height:parseInt(b(d,"paste_dialog_height")),inline:1})})}d.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); +(function(){var a=tinymce.explode("id,name,style,align,class,hspace,vspace,bgcolor,type"),c=tinymce.makeMap(a.join(",")),d=a.concat(tinymce.explode("width, height")),b=tinymce.makeMap(d.join(",")),h=tinymce.html.Node,g,j,i=tinymce.util.JSON;g=[["Flash","d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["ShockWave","166b1bca-3f9c-11cf-8075-444553540000","application/x-director","http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"],["WindowsMedia","6bf52a52-394a-11d3-b153-00c04f79faa6,22d6f312-b0f6-11d0-94ab-0080c74c7e95,05589fa1-c356-11ce-bf01-00aa0055595a","application/x-mplayer2","http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701"],["QuickTime","02bf25d5-8c17-4b23-bc80-d3488abddc6b","video/quicktime","http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"],["RealMedia","cfcdaa03-8be4-11cf-b84b-0020afbbccfa","audio/x-pn-realaudio-plugin","http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"],["Java","8ad9c840-044e-11d1-b3e9-00805f499d93","application/x-java-applet","http://java.sun.com/products/plugin/autodl/jinstall-1_5_0-windows-i586.cab#Version=1,5,0,0"],["Silverlight","dfeaf541-f3e1-4c24-acac-99c30715084a","application/x-silverlight-2"],["Iframe"],["Video"],["EmbeddedAudio"],["Audio"],["Object"]];function f(k){return typeof(k)=="string"?k.replace(/[^0-9%]/g,""):k}function e(m){var k,l;if(m&&!m.splice){k=[];for(l=0;true;l++){if(m[l]){k[l]=m[l]}else{break}}return k}return m}tinymce.create("tinymce.plugins.MediaPlugin",{init:function(o,k){var s=this,m={},n,q,r,l;function p(t){return t&&t.nodeName==="IMG"&&o.dom.hasClass(t,"mceItemMedia")}s.editor=o;s.url=k;j="";for(n=0;n0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){F.params.flashvars=N}K=q.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){F.params[O]=""+P})}}function x(K,J,I,L){G=new h("object",1).attr({id:K.attr("id"),width:f(K.attr("width")),height:f(K.attr("height")),style:J});tinymce.each(I,function(N){var O=L[N];if(N=="class"&&O){O=O.replace(/mceItem.+ ?/g,"")}if(O&&N!="type"){G.attr(N,O)}});for(var n in L.params){var M;M=new h("param",1);M.shortEnded=true;y=L.params[n];if(n==="src"&&r.name==="WindowsMedia"){n="url"}M.attr({name:n,value:y});G.append(M)}if(L.object_html){y=new h("#text",3);y.raw=true;y.value=L.object_html;G.append(y)}if(D){D.append(G)}return G}F=z.attr("data-mce-json");if(!F){return}F=i.parse(F);r=this.getType(z.attr("class"));C=z.attr("data-mce-style");if(!C){C=z.attr("style");if(C){C=q.dom.serializeStyle(q.dom.parseStyle(C,"img"))}}F.width=z.attr("width")||F.width;F.height=z.attr("height")||F.height;if(r.name==="Iframe"){A=new h("iframe",1);tinymce.each(d,function(n){var I=z.attr(n);if(n=="class"&&I){I=I.replace(/mceItem.+ ?/g,"")}if(I&&I.length>0){A.attr(n,I)}});for(H in F.params){A.attr(H,F.params[H])}A.attr({style:C,src:F.params.src});z.replace(A);return}if(this.editor.settings.media_use_script){A=new h("script",1).attr("type","text/javascript");y=new h("#text",3);y.value="write"+r.name+"("+i.serialize(tinymce.extend(F.params,{width:z.attr("width"),height:z.attr("height")}))+");";A.append(y);z.replace(A);return}if(r.name==="Video"&&F.video.sources[0]){D=new h("video",1).attr(tinymce.extend({id:z.attr("id"),width:f(z.attr("width")),height:f(z.attr("height")),style:C},F.video.attrs));if(F.video.attrs){m=F.video.attrs.poster}l=F.video.sources=e(F.video.sources);for(B=0;B1&&W.charCodeAt(W.length-1)==32){return(U.endOffset==W.length-1)}else{return(U.endOffset==W.length)}}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function I(){var W=y.selection.getNode();var V="h1,h2,h3,h4,h5,h6,p,div";var U=y.dom.is(W,V)&&W.parentNode.tagName==="LI"&&W.parentNode.lastChild===W;return y.selection.isCollapsed()&&U&&C()}function K(W,Y){if(A(Y)&&I()){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinymce.isIE6||tinymce.isIE7||tinyMCE.isIE8){W.selection.setCursorLocation(V,1)}else{W.selection.setCursorLocation(V,0)}Y.preventDefault()}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;y.selection.setCursorLocation(W,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=N;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==J){if(tinymce.isIE6||tinymce.isIE7||tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function L(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){L(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;L(U,W)}}}function Q(W,aa){function X(ab){var ad=[];var ae=new tinymce.dom.TreeWalker(ab.firstChild,ab);for(var ac=ae.current();ac;ac=ae.next()){if(W.dom.is(ac,"ol,ul,li")){ad.push(ac)}}return ad}if(aa.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Z=W.dom.getParent(U,"ol,ul"),V=W.selection.getRng();if(Z&&Z.firstChild===U&&V.startOffset==0){var Y=X(U);Y.unshift(U);W.execCommand("Outdent",false,Y);W.undoManager.add();return r.cancel(aa)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=M(V)});y.onKeyDown.add(D);y.onKeyDown.add(u);y.onKeyDown.add(K);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},applyList:function(y,v){var C=this,z=C.ed,I=z.dom,s=[],H=false,u=false,w=false,B,G=z.selection.getSelectedBlocks();function E(t){if(t&&t.tagName==="BR"){I.remove(t)}}function F(M){var N=I.create(y),t;function L(O){if(O.style.marginLeft||O.style.paddingLeft){C.adjustPaddingFunction(false)(O)}}if(M.tagName==="LI"){}else{if(M.tagName==="P"||M.tagName==="DIV"||M.tagName==="BODY"){K(M,function(P,O){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(M.tagName==="P"||G.length>1)){I.split(t.parentNode.parentNode,t.parentNode)}m(t.parentNode,true)}return}else{t=I.create("li");I.insertAfter(t,M);t.appendChild(M);L(M);M=t}}I.insertAfter(N,M);N.appendChild(M);m(N,true);s.push(M)}function J(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}if(t.childNodes.length===0){t.innerHTML='
'}F(t)}function K(Q,T){var N,R,O=3,L=1,t="br,ul,ol,p,div,h1,h2,h3,h4,h5,h6,table,blockquote,address,pre,form,center,dl";function P(X,U){var V=I.createRng(),W;g.keep=true;z.selection.moveToBookmark(g);g.keep=false;W=z.selection.getRng(true);if(!U){U=X.parentNode.lastChild}V.setStartBefore(X);V.setEndAfter(U);return !(V.compareBoundaryPoints(O,W)>0||V.compareBoundaryPoints(L,W)<=0)}function S(U){if(U.nextSibling){return U.nextSibling}if(!I.isBlock(U.parentNode)&&U.parentNode!==I.getRoot()){return S(U.parentNode)}}N=Q.firstChild;var M=false;e(I.select(t,Q),function(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});M=(N&&P(N,undefined));N=Q.firstChild;e(I.select(t,Q),function(V){var U=S(V);if(V.hasAttribute&&V.hasAttribute("_mce_bogus")){return true}if(I.hasClass(V,"_mce_tagged_br")){T(N,V,R);R=null}else{R=V}N=U});if(M){T(N,undefined,R)}}function D(t){K(t,function(M,L,N){J(M,L);E(L);E(N)})}function A(t){if(tinymce.inArray(s,t)!==-1){return}if(t.parentNode.tagName===v){I.split(t.parentNode,t);F(t);o(t.parentNode,false)}s.push(t)}function x(M){var O,N,L,t;if(tinymce.inArray(s,M)!==-1){return}M=c(M,I);while(I.is(M.parentNode,"ol,ul,li")){I.split(M.parentNode,M)}s.push(M);M=I.rename(M,"p");L=m(M,false,z.settings.force_br_newlines);if(L===M){O=M.firstChild;while(O){if(I.isBlock(O)){O=I.split(O.parentNode,O);t=true;N=O.nextSibling&&O.nextSibling.firstChild}else{N=O.nextSibling;if(t&&O.tagName==="BR"){I.remove(O)}t=false}O=N}}}e(G,function(t){t=k(t,I);if(t.tagName===v||(t.tagName==="LI"&&t.parentNode.tagName===v)){u=true}else{if(t.tagName===y||(t.tagName==="LI"&&t.parentNode.tagName===y)){H=true}else{w=true}}});if(w&&!H||u||G.length===0){B={LI:A,H1:F,H2:F,H3:F,H4:F,H5:F,H6:F,P:F,BODY:F,DIV:G.length>1?F:D,defaultAction:D,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks(),processEvenIfEmpty:true}}this.process(B)},indent:function(){var u=this.ed,w=u.dom,x=[];function s(z){var y=w.create("li",{style:"list-style-type: none;"});w.insertAfter(y,z);return y}function t(B){var y=s(B),D=w.getParent(B,"ol,ul"),C=D.tagName,E=w.getStyle(D,"list-style-type"),A={},z;if(E!==""){A.style="list-style-type: "+E+";"}z=w.create(C,A);y.appendChild(z);return z}function v(z){if(!d(u,z,x)){z=c(z,w);var y=t(z);y.appendChild(z);m(y.parentNode,false);m(y,false);x.push(z)}}this.process({LI:v,defaultAction:this.adjustPaddingFunction(true),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||!y.processEvenIfEmpty&&E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x,true)}function C(s,t){return t>=0&&s.hasChildNodes()&&t0){t=s.shift();w.removeClass(t,"_mce_act_on");u(t);s=w.select("._mce_act_on")}},adjustPaddingFunction:function(u){var s,v,t=this.ed;s=t.settings.indentation;v=/[a-z%]+/i.exec(s);s=parseInt(s,10);return function(w){var y,x;y=parseInt(t.dom.getStyle(w,"margin-left")||0,10)+parseInt(t.dom.getStyle(w,"padding-left")||0,10);if(u){x=y+s}else{x=y-s}t.dom.setStyle(w,"padding-left","");t.dom.setStyle(w,"margin-left",x>0?x+v:"")}},selectedBlocks:function(){var s=this.ed,t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},getInfo:function(){return{longname:"Lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/lists",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("lists",tinymce.plugins.Lists)}()); +(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length',a="mcePageBreak",c=b.getParam("pagebreak_separator",""),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); +(function(){tinymce.create("tinymce.plugins.ExampleDependencyPlugin",{init:function(a,b){},getInfo:function(){return{longname:"Example Dependency plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency",version:"1.0"}}});tinymce.PluginManager.add("example_dependency",tinymce.plugins.ExampleDependencyPlugin,["example"])})(); +(function(){var h=tinymce.dom.TreeWalker;var d="contenteditable",c="data-mce-"+d;var i=tinymce.VK;var e,j,b;function g(t){var p=t.dom,v=t.selection,u="mce_noneditablecaret",x="\uFEFF",m=t.getParam("noneditable_prevent_delete");function s(z){var y;if(z.nodeType===1){y=z.getAttribute(c);if(y&&y!=="inherit"){return y}y=z.contentEditable;if(y!=="inherit"){return y}}return null}function l(y){var z;while(y){z=s(y);if(z){return z==="false"?y:null}y=y.parentNode}}function r(y){while(y){if(y.id===u){return y}y=y.parentNode}}function q(y){var z;if(y){z=new h(y,y);for(y=z.current();y;y=z.next()){if(y.nodeType===3){return y}}}}function k(B,A){var y,z;if(s(B)==="false"){if(p.isBlock(B)){v.select(B);return}}z=p.createRng();if(s(B)==="true"){if(!B.firstChild){B.appendChild(t.getDoc().createTextNode("\u00a0"))}B=B.firstChild;A=true}y=p.create("span",{id:u,"data-mce-bogus":true},x);if(A){B.parentNode.insertBefore(y,B)}else{p.insertAfter(y,B)}z.setStart(y.firstChild,1);z.collapse(true);v.setRng(z);return y}function o(y){var C,A,B,z;if(y){z=v.getRng(true);z.setStartBefore(y);z.setEndBefore(y);C=q(y);if(C&&C.nodeValue.charAt(0)==x){C=C.deleteData(0,1)}p.remove(y,true);v.setRng(z)}else{A=r(v.getStart());while((y=p.get(u))&&y!==B){if(A!==y){C=q(y);if(C&&C.nodeValue.charAt(0)==x){C=C.deleteData(0,1)}p.remove(y,true)}B=y}}}function w(){var y,C,A,z,B;function D(G,I){var F,K,J,H,E;F=z.startContainer;K=z.startOffset;if(F.nodeType==3){E=F.nodeValue.length;if((K>0&&K0?K-1:K;F=F.childNodes[L];if(F.hasChildNodes()){F=F.firstChild}}else{return !I?G:null}}J=new h(F,G);while(H=J[I?"prev":"next"]()){if(H.nodeType===3&&H.nodeValue.length>0){return}else{if(s(H)==="true"){return H}}}return G}o();A=v.isCollapsed();y=l(v.getStart());C=l(v.getEnd());if(y||C){z=v.getRng(true);if(A){y=y||C;if(D(y,true)){B=D(y,true);k(B,true)}else{if(D(y,false)){B=D(y,false);k(B,false)}else{v.select(y)}}}else{z=v.getRng(true);if(y){z.setStartBefore(y)}if(C){z.setEndAfter(C)}v.setRng(z)}}}function n(D,Q){var G=Q.keyCode,S,J,y,F,A,I=false,z;function B(U,T){while(U=U[T?"previousSibling":"nextSibling"]){if(U.nodeType!==3||U.nodeValue.length>0){return U}}}function K(T,U){v.select(T);v.collapse(U)}function P(X){var W,V,Z,U;function T(ab){var aa=V;while(aa){if(aa===ab){return}aa=aa.parentNode}p.remove(ab);w()}function Y(){var ab,ac,aa=D.schema.getNonEmptyElements();ac=new tinymce.dom.TreeWalker(V,D.getBody());while(ab=(X?ac.prev():ac.next())){if(aa[ab.nodeName.toLowerCase()]){break}if(ab.nodeType===3&&tinymce.trim(ab.nodeValue).length>0){break}if(s(ab)==="false"){if(!m){T(ab)}return true}}if(l(ab)){return true}return false}W=v.getRng(true);V=W.startContainer;Z=W.startOffset;V=r(V)||V;if(v.isCollapsed()){if(U=l(V)){T(U);return false}if(V.nodeType==3&&(X?Z>0:Z124)&&G!=i.DELETE&&G!=i.BACKSPACE){if((tinymce.isMac?Q.metaKey:Q.ctrlKey)&&(G==67||G==88||G==86)){return}Q.preventDefault();if(G==i.LEFT||G==i.RIGHT){var C=G==i.LEFT;if(D.dom.isBlock(S)){var H=C?S.previousSibling:S.nextSibling;var N=new h(H,H);var L=C?N.prev():N.next();K(L,!C)}else{K(S,C)}}}else{if(G==i.LEFT||G==i.RIGHT||G==i.BACKSPACE||G==i.DELETE){J=r(y);if(J){O(G,J,Q)}if((G==i.BACKSPACE||G==i.DELETE)&&!P(G==i.BACKSPACE)){Q.preventDefault();return false}if(m&&I){var R=confirm(D.getLang("noneditable.confirm_delete"));if(!R){Q.preventDefault();return false}}}}}t.onMouseUp.addToTop(w);t.onMouseDown.addToTop(w);t.onKeyDown.addToTop(n);t.onKeyUp.addToTop(w)}function a(k){return" "+tinymce.trim(k.getParam("noneditable_editable_class","mceEditable"))+" "}function f(k){return" "+tinymce.trim(k.getParam("noneditable_noneditable_class","mceNonEditable"))+" "}tinymce.PluginManager.requireLangPack("noneditable");tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(l){function k(n,o){var p=b.length,q=o.content,m=tinymce.trim(j);if(o.format=="raw"){return}while(p--){q=q.replace(b[p],function(t){var s=arguments,r=s[s.length-2];if(r>0&&q.charAt(r-1)=='"'){return t}return''+n.dom.encode(typeof(s[1])==="string"?s[1]:s[0])+""})}o.content=q}e=a(l);j=f(l);b=l.getParam("noneditable_regexp");if(b&&!b.length){b=[b]}l.onPreInit.add(function(){g(l);if(b){l.selection.onBeforeSetContent.add(k);l.onBeforeSetContent.add(k)}l.parser.addAttributeFilter("class",function(m){var n=m.length,o,p;while(n--){p=m[n];o=" "+p.attr("class")+" ";if(o.indexOf(e)!==-1){p.attr(c,"true")}else{if(o.indexOf(j)!==-1){p.attr(c,"false")}}}});l.serializer.addAttributeFilter(c,function(m){var n=m.length,o;while(n--){o=m[n];if(b&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(d,null);o.attr(c,null)}}});l.parser.addAttributeFilter(d,function(m){var n=m.length,o;while(n--){o=m[n];o.attr(c,o.attr(d));o.attr(d,null)}})})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); +(function(){var b=tinymce.each,a=tinymce.html.Node;tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(c,d){var e=this;e.editor=c;c.addCommand("mceFullPageProperties",function(){c.windowManager.open({file:d+"/fullpage.htm",width:430+parseInt(c.getLang("fullpage.delta_width",0)),height:495+parseInt(c.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:d,data:e._htmlToData()})});c.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});c.onBeforeSetContent.add(e._setContent,e);c.onGetContent.add(e._getContent,e)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_htmlToData:function(){var e=this._parseHeader(),g={},h,f,d=this.editor;function c(k,i){var j=k.attr(i);return j||""}g.fontface=d.getParam("fullpage_default_fontface","");g.fontsize=d.getParam("fullpage_default_fontsize","");h=e.firstChild;if(h.type==7){g.xml_pi=true;f=/encoding="([^"]+)"/.exec(h.value);if(f){g.docencoding=f[1]}}h=e.getAll("#doctype")[0];if(h){g.doctype=""}h=e.getAll("title")[0];if(h&&h.firstChild){g.metatitle=h.firstChild.value}b(e.getAll("meta"),function(l){var j=l.attr("name"),i=l.attr("http-equiv"),k;if(j){g["meta"+j.toLowerCase()]=l.attr("content")}else{if(i=="Content-Type"){k=/charset\s*=\s*(.*)\s*/gi.exec(l.attr("content"));if(k){g.docencoding=k[1]}}}});h=e.getAll("html")[0];if(h){g.langcode=c(h,"lang")||c(h,"xml:lang")}h=e.getAll("link")[0];if(h&&h.attr("rel")=="stylesheet"){g.stylesheet=h.attr("href")}h=e.getAll("body")[0];if(h){g.langdir=c(h,"dir");g.style=c(h,"style");g.visited_color=c(h,"vlink");g.link_color=c(h,"link");g.active_color=c(h,"alink")}return g},_dataToHtml:function(g){var f,d,h,j,k,e=this.editor.dom;function c(n,l,m){n.attr(l,m?m:undefined)}function i(l){if(d.firstChild){d.insert(l,d.firstChild)}else{d.append(l)}}f=this._parseHeader();d=f.getAll("head")[0];if(!d){j=f.getAll("html")[0];d=new a("head",1);if(j.firstChild){j.insert(d,j.firstChild,true)}else{j.append(d)}}j=f.firstChild;if(g.xml_pi){k='version="1.0"';if(g.docencoding){k+=' encoding="'+g.docencoding+'"'}if(j.type!=7){j=new a("xml",7);f.insert(j,f.firstChild,true)}j.value=k}else{if(j&&j.type==7){j.remove()}}j=f.getAll("#doctype")[0];if(g.doctype){if(!j){j=new a("#doctype",10);if(g.xml_pi){f.insert(j,f.firstChild)}else{i(j)}}j.value=g.doctype.substring(9,g.doctype.length-1)}else{if(j){j.remove()}}j=f.getAll("title")[0];if(g.metatitle){if(!j){j=new a("title",1);j.append(new a("#text",3)).value=g.metatitle;i(j)}}if(g.docencoding){j=null;b(f.getAll("meta"),function(l){if(l.attr("http-equiv")=="Content-Type"){j=l}});if(!j){j=new a("meta",1);j.attr("http-equiv","Content-Type");j.shortEnded=true;i(j)}j.attr("content","text/html; charset="+g.docencoding)}b("keywords,description,author,copyright,robots".split(","),function(m){var l=f.getAll("meta"),n,p,o=g["meta"+m];for(n=0;n"))},_parseHeader:function(){return new tinymce.html.DomParser({validate:false,root_name:"#document"}).parse(this.head)},_setContent:function(g,d){var m=this,i,c,h=d.content,f,l="",e=m.editor.dom,j;function k(n){return n.replace(/<\/?[A-Z]+/g,function(o){return o.toLowerCase()})}if(d.format=="raw"&&m.head){return}if(d.source_view&&g.getParam("fullpage_hide_in_source_view")){return}h=h.replace(/<(\/?)BODY/gi,"<$1body");i=h.indexOf("",i);m.head=k(h.substring(0,i+1));c=h.indexOf("\n"}f=m._parseHeader();b(f.getAll("style"),function(n){if(n.firstChild){l+=n.firstChild.value}});j=f.getAll("body")[0];if(j){e.setAttribs(m.editor.getBody(),{style:j.attr("style")||"",dir:j.attr("dir")||"",vLink:j.attr("vlink")||"",link:j.attr("link")||"",aLink:j.attr("alink")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_getDefaultHeader:function(){var f="",c=this.editor,e,d="";if(c.getParam("fullpage_default_xml_pi")){f+='\n'}f+=c.getParam("fullpage_default_doctype",'');f+="\n\n\n";if(e=c.getParam("fullpage_default_title")){f+=""+e+"\n"}if(e=c.getParam("fullpage_default_encoding")){f+='\n'}if(e=c.getParam("fullpage_default_font_family")){d+="font-family: "+e+";"}if(e=c.getParam("fullpage_default_font_size")){d+="font-size: "+e+";"}if(e=c.getParam("fullpage_default_text_color")){d+="color: "+e+";"}f+="\n\n";return f},_getContent:function(d,e){var c=this;if(!e.source_view||!d.getParam("fullpage_hide_in_source_view")){e.content=tinymce.trim(c.head)+"\n"+tinymce.trim(e.content)+"\n"+tinymce.trim(c.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); +(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;gh[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); +(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.schema;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"justify"}},bold:[{inline:"b",remove:"all"},{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}}],italic:[{inline:"i",remove:"all"},{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}}],underline:[{inline:"u",remove:"all"},{inline:"span",styles:{textDecoration:"underline"},exact:true}],strikethrough:[{inline:"strike",remove:"all"},{inline:"span",styles:{textDecoration:"line-through"},exact:true}],fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",attributes:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});a.each("b,i,u,strike".split(","),function(f){d.addValidElements(f+"[*]")});if(!d.getElementRule("font")){d.addValidElements("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.getElementRule(f),g;if(h){if(!h.attributes.align){h.attributes.align={};h.attributesOrder.push("align")}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce); +(function(){var b=tinymce.DOM;var a=function(d,f,e){var c=function(g){var i=d.controlManager.get(g);var h=f.controlManager.get(g);if(i&&h){h.displayColor(i.value)}};c("forecolor");c("backcolor");f.setContent(d.getContent({format:"raw"}),{format:"raw"});f.selection.moveToBookmark(e);if(d.plugins.spellchecker&&f.plugins.spellchecker){f.plugins.spellchecker.setLanguage(d.plugins.spellchecker.selectedLang)}};tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(i,c){var l=this,m={},k=b.doc.documentElement,d,o,h,g,f,e,j;i.addCommand("mceFullScreen",function(){var q,r;if(i.getParam("fullscreen_is_enabled")){if(i.getParam("fullscreen_new_window")){closeFullscreen()}else{b.win.setTimeout(function(){var t=i;var s=tinyMCE.get(t.getParam("fullscreen_editor_id"));s.plugins.fullscreen.saveState(t);tinyMCE.remove(t)},10)}return}if(i.getParam("fullscreen_new_window")){l.fullscreenSettings={bookmark:i.selection.getBookmark()};q=b.win.open(c+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{q.resizeTo(screen.availWidth,screen.availHeight)}catch(p){}}else{o=b.getStyle(b.doc.body,"overflow",1)||"auto";h=b.getStyle(k,"overflow",1);d=b.getViewPort();g=d.x;f=d.y;if(tinymce.isOpera&&o=="visible"){o="auto"}if(tinymce.isIE&&o=="scroll"){o="auto"}if(tinymce.isIE&&(h=="visible"||h=="scroll")){h="auto"}if(o=="0px"){o=""}b.setStyle(b.doc.body,"overflow","hidden");k.style.overflow="hidden";d=b.getViewPort();b.win.scrollTo(0,0);if(tinymce.isIE){d.h-=1}if(tinymce.isIE6||document.compatMode=="BackCompat"){e="absolute;top:"+d.y}else{e="fixed;top:0"}n=b.add(b.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+e+";left:0;width:"+d.w+"px;height:"+d.h+"px;z-index:200000;"});b.add(n,"div",{id:"mce_fullscreen"});tinymce.each(i.settings,function(s,t){m[t]=s});m.id="mce_fullscreen";m.width=n.clientWidth;m.height=n.clientHeight-15;m.fullscreen_is_enabled=true;m.fullscreen_editor_id=i.id;m.theme_advanced_resizing=false;m.save_onsavecallback=function(){i.setContent(tinyMCE.get(m.id).getContent());i.execCommand("mceSave")};tinymce.each(i.getParam("fullscreen_settings"),function(t,s){m[s]=t});l.fullscreenSettings={bookmark:i.selection.getBookmark(),fullscreen_overflow:o,fullscreen_html_overflow:h,fullscreen_scrollx:g,fullscreen_scrolly:f};if(m.theme_advanced_toolbar_location==="external"){m.theme_advanced_toolbar_location="top"}tinyMCE.oldSettings=tinyMCE.settings;l.fullscreenEditor=new tinymce.Editor("mce_fullscreen",m);l.fullscreenEditor.onInit.add(function(){l.loadState(l.fullscreenEditor)});l.fullscreenEditor.render();l.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");l.fullscreenElement.update();l.resizeFunc=tinymce.dom.Event.add(b.win,"resize",function(){var v=tinymce.DOM.getViewPort(),t=l.fullscreenEditor,s,u;s=t.dom.getSize(t.getContainer().getElementsByTagName("table")[0]);u=t.dom.getSize(t.getContainer().getElementsByTagName("iframe")[0]);t.theme.resizeTo(v.w-s.w+u.w,v.h-s.h+u.h)})}});i.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});i.onNodeChange.add(function(q,p){p.setActive("fullscreen",q.getParam("fullscreen_is_enabled"))});l.loadState=function(p){if(!(p&&l.fullscreenSettings)){throw"No fullscreen editor to load to"}a(i,p,l.fullscreenSettings.bookmark);p.focus()};l.saveState=function(q){if(!(q&&l.fullscreenSettings)){throw"No fullscreen editor to restore from"}var p=l.fullscreenSettings;a(q,i,q.selection.getBookmark());if(!i.getParam("fullscreen_new_window")){tinymce.dom.Event.remove(b.win,"resize",l.resizeFunc);delete l.resizeFunc;b.remove("mce_fullscreen_container");b.doc.documentElement.style.overflow=p.fullscreen_html_overflow;b.setStyle(b.doc.body,"overflow",p.fullscreen_overflow);b.win.scrollTo(p.fullscreen_scrollx,p.fullscreen_scrolly)}tinyMCE.settings=tinyMCE.oldSettings;delete tinyMCE.oldSettings;delete l.fullscreenEditor;delete l.fullscreenElement;delete l.fullscreenSettings;b.win.setTimeout(function(){i.selection.moveToBookmark(j);i.focus()},10)}},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); +(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); +(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(s,j){var z=this,i,k="",r=z.editor,g=0,v=0,h,m,o,q,l,x,y,n;s=s||{};j=j||{};if(!s.inline){return z.parent(s,j)}n=z._frontWindow();if(n&&d.get(n.id+"_ifr")){n.focussedElement=d.get(n.id+"_ifr").contentWindow.document.activeElement}if(!s.type){z.bookmark=r.selection.getBookmark(1)}i=d.uniqueId("mce_inlinepopups_");h=d.getViewPort();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240)+(tinymce.isIE?8:0);s.min_width=parseInt(s.min_width||150);s.min_height=parseInt(s.min_height||100);s.max_width=parseInt(s.max_width||2000);s.max_height=parseInt(s.max_height||2000);s.left=s.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(s.width/2)));s.top=s.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(s.height/2)));s.movable=s.resizable=true;j.mce_width=s.width;j.mce_height=s.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=s.auto_focus;z.features=s;z.params=j;z.onOpen.dispatch(z,s,j);if(s.type){k+=" mceModal";if(s.type){k+=" mce"+s.type.substring(0,1).toUpperCase()+s.type.substring(1)}s.resizable=false}if(s.statusbar){k+=" mceStatusbar"}if(s.resizable){k+=" mceResizable"}if(s.minimizable){k+=" mceMinimizable"}if(s.maximizable){k+=" mceMaximizable"}if(s.movable){k+=" mceMovable"}z._addAll(d.doc.body,["div",{id:i,role:"dialog","aria-labelledby":s.type?i+"_content":i+"_title","class":(r.settings.inlinepopups_skin||"clearlooks2")+(tinymce.isIE&&window.getSelection?" ie9":""),style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},s.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft",tabindex:"0"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight",tabindex:"0"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!s.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;v+=d.get(i+"_top").clientHeight;v+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:s.top,left:s.left,width:s.width+g,height:s.height+v});y=s.url||s.file;if(y){if(tinymce.relaxedDomain){y+=(y.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}y=tinymce._addVer(y)}if(!s.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:s.width,height:s.height});d.setAttrib(i+"_ifr","src",y)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(s.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",s.content.replace("\n","
"));a.add(i,"keyup",function(f){var p=27;if(f.keyCode===p){s.button_func(false);return a.cancel(f)}});a.add(i,"keydown",function(f){var t,p=9;if(f.keyCode===p){t=d.select("a.mceCancel",i+"_wrapper")[0];if(t&&t!==f.target){t.focus()}else{d.get(i+"_ok").focus()}return a.cancel(f)}})}o=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=z.windows[i];z.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceClose"){z.close(null,i);return a.cancel(t)}else{if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return z._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return z._startDrag(i,t,u.className.substring(13))}}}}}}});q=a.add(i,"click",function(f){var p=f.target;z.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":z.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":s.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});a.add([i+"_left",i+"_right"],"focus",function(p){var t=d.get(i+"_ifr");if(t){var f=t.contentWindow.document.body;var u=d.select(":input:enabled,*[tabindex=0]",f);if(p.target.id===(i+"_left")){u[u.length-1].focus()}else{u[0].focus()}}else{d.get(i+"_ok").focus()}});x=z.windows[i]={id:i,mousedown_func:o,click_func:q,element:new b(i,{blocker:1,container:r.getContainer()}),iframeElement:new b(i+"_ifr"),features:s,deltaWidth:g,deltaHeight:v};x.iframeElement.on("focus",function(){z.focus(i)});if(z.count==0&&z.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(z.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:z.zIndex-1}});d.show("mceModalBlocker");d.setAttrib(d.doc.body,"aria-hidden","true")}else{d.setStyle("mceModalBlocker","z-index",z.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}d.setAttrib(i,"aria-hidden","false");z.focus(i);z._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}z.count++;return x},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h;if(f.focussedElement){f.focussedElement.focus()}else{if(d.get(h+"_ok")){d.get(f.id+"_ok").focus()}else{if(d.get(f.id+"_ifr")){d.get(f.id+"_ifr").focus()}}}}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;gf){g=h;f=h.zIndex}});return g},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); +(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this,e=0;if(a.getParam("fullscreen_is_enabled")){return}function b(){var j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}d.editor=a;d.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight));d.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0));a.onInit.add(function(f){f.dom.setStyle(f.getBody(),"paddingBottom",f.getParam("autoresize_bottom_margin",50)+"px")});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onLoad.add(b);a.onLoadContent.add(b)}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); +(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(f){var i=this,g,d,j,e;i.editor=f;d=f.settings.contextmenu_never_use_native;i.onContextMenu=new tinymce.util.Dispatcher(this);e=function(k){h(f,k)};g=f.onContextMenu.add(function(k,l){if((j!==0?j:l.ctrlKey)&&!d){return}a.cancel(l);if(l.target.nodeName=="IMG"){k.selection.select(l.target)}i._getMenu(k).showMenu(l.clientX||l.pageX,l.clientY||l.pageY);a.add(k.getDoc(),"click",e);k.nodeChanged()});f.onRemove.add(function(){if(i._menu){i._menu.removeAll()}});function h(k,l){j=0;if(l&&l.button==2){j=l.ctrlKey;return}if(i._menu){i._menu.removeAll();i._menu.destroy();a.remove(k.getDoc(),"click",e);i._menu=null}}f.onMouseDown.add(h);f.onKeyDown.add(h);f.onKeyDown.add(function(k,l){if(l.shiftKey&&!l.ctrlKey&&!l.altKey&&l.keyCode===121){a.cancel(l);g(k,l)}})},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(e){var g=this,d=g._menu,j=e.selection,f=j.isCollapsed(),h=j.getNode()||e.getBody(),i,k;if(d){d.removeAll();d.destroy()}k=b.getPos(e.getContentAreaContainer());d=e.controlManager.createDropMenu("contextmenu",{offset_x:k.x+e.getParam("contextmenu_offset_x",0),offset_y:k.y+e.getParam("contextmenu_offset_y",0),constrain:1,keyboard_focus:true});g._menu=d;d.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(f);d.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(f);d.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((h.nodeName=="A"&&!e.dom.getAttrib(h,"name"))||!f){d.addSeparator();d.add({title:"advanced.link_desc",icon:"link",cmd:e.plugins.advlink?"mceAdvLink":"mceLink",ui:true});d.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}d.addSeparator();d.add({title:"advanced.image_desc",icon:"image",cmd:e.plugins.advimage?"mceAdvImage":"mceImage",ui:true});d.addSeparator();i=d.addMenu({title:"contextmenu.align"});i.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});i.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});i.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});i.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});g.onContextMenu.dispatch(g,d,h,f);return d}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); +(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square");if(tinymce.isIE&&/MSIE [2-7]/.test(navigator.userAgent)){d.isIE7=true}},createControl:function(d,b){var f=this,e,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})(); +(function(){tinymce.create("tinymce.plugins.AutolinkPlugin",{init:function(a,b){var c=this;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}a.onKeyPress.add(function(d,f){if(f.which==41){return c.handleEclipse(d)}});a.onKeyUp.add(function(d,f){if(f.keyCode==32){return c.handleSpacebar(d)}})},handleEclipse:function(a){this.parseCurrentLine(a,-1,"(",true)},handleSpacebar:function(a){this.parseCurrentLine(a,0,"",true)},handleEnter:function(a){this.parseCurrentLine(a,-1,"",false)},parseCurrentLine:function(i,d,b,g){var a,f,c,n,k,m,h,e,j;a=i.selection.getRng(true).cloneRange();if(a.startOffset<5){e=a.endContainer.previousSibling;if(e==null){if(a.endContainer.firstChild==null||a.endContainer.firstChild.nextSibling==null){return}e=a.endContainer.firstChild.nextSibling}j=e.length;a.setStart(e,j);a.setEnd(e,j);if(a.endOffset<5){return}f=a.endOffset;n=e}else{n=a.endContainer;if(n.nodeType!=3&&n.firstChild){while(n.nodeType!=3&&n.firstChild){n=n.firstChild}if(n.nodeType==3){a.setStart(n,0);a.setEnd(n,n.nodeValue.length)}}if(a.endOffset==1){f=2}else{f=a.endOffset-1-d}}c=f;do{a.setStart(n,f>=2?f-2:0);a.setEnd(n,f>=1?f-1:0);f-=1}while(a.toString()!=" "&&a.toString()!=""&&a.toString().charCodeAt(0)!=160&&(f-2)>=0&&a.toString()!=b);if(a.toString()==b||a.toString().charCodeAt(0)==160){a.setStart(n,f);a.setEnd(n,c);f+=1}else{if(a.startOffset==0){a.setStart(n,0);a.setEnd(n,c)}else{a.setStart(n,f);a.setEnd(n,c)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();if(tinyMCE.isWebKit){i.selection.collapse(false);var l=Math.min(n.length,c+1);a.setStart(n,l);a.setEnd(n,l);i.selection.setRng(a)}}},getInfo:function(){return{longname:"Autolink",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autolink",tinymce.plugins.AutolinkPlugin)})(); +(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(b,c){var d=this;d.editor=b;function a(e){var h=b.dom,g,f=b.selection.getSelectedBlocks();if(f.length){g=h.getAttrib(f[0],"dir");tinymce.each(f,function(i){if(!h.getParent(i.parentNode,"*[dir='"+e+"']",h.getRoot())){if(g!=e){h.setAttrib(i,"dir",e)}else{h.setAttrib(i,"dir",null)}}});b.nodeChanged()}}b.addCommand("mceDirectionLTR",function(){a("ltr")});b.addCommand("mceDirectionRTL",function(){a("rtl")});b.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});b.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});b.onNodeChange.add(d._nodeChange,d)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); +(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce); +(function(i){var k=i.DOM,h=i.dom.Event,c=i.extend,f=i.each,a=i.util.Cookie,e,d=i.explode;var g=function(m,n){var o=n.theme_advanced_default_font_size;var l=n.theme_advanced_default_font_family;if(o){m.style.fontSize=o}if(l){m.style.fontFamily=l}};var j=function(m){var n=m.theme_advanced_default_font_size;var l=m.theme_advanced_default_font_family;return !!(n||l)};function b(r,o){var m,n,q=r.dom,l="",p,t;previewStyles=r.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function s(u){return u.replace(/%(\w+)/g,"")}m=o.block||o.inline||"span";n=q.create(m);f(o.styles,function(v,u){v=s(v);if(v){q.setStyle(n,u,v)}});f(o.attributes,function(v,u){v=s(v);if(v){q.setAttrib(n,u,v)}});f(o.classes,function(u){u=s(u);if(!q.hasClass(n,u)){q.addClass(n,u)}});q.setStyles(n,{position:"absolute",left:-65535});r.getBody().appendChild(n);p=q.getStyle(r.getBody(),"fontSize",true);p=/px$/.test(p)?parseInt(p,10):0;f(previewStyles.split(" "),function(u){var v=q.getStyle(n,u,true);if(u=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(v)){v=q.getStyle(r.getBody(),u,true);if(q.toHex(v).toLowerCase()=="#ffffff"){return}}if(u=="font-size"){if(/em|%$/.test(v)){if(p===0){return}v=parseFloat(v,10)/(/%$/.test(v)?100:1);v=(v*p)+"px"}}l+=u+":"+v+";"});q.remove(n);return l}i.ThemeManager.requireLangPack("advanced");i.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(m,n){var p=this,q,l,r;p.editor=m;p.url=n;p.onResolveName=new i.util.Dispatcher(this);q=m.settings;m.forcedHighContrastMode=m.settings.detect_highcontrast&&p._isHighContrast();m.settings.skin=m.forcedHighContrastMode?"highcontrast":m.settings.skin;if(!q.theme_advanced_buttons1){q=c({theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap"},q)}p.settings=q=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",theme_advanced_fonts:"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_font_selector:"span",theme_advanced_show_current_color:0,readonly:m.settings.readonly},q);if(!q.font_size_style_values){q.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(i.is(q.theme_advanced_font_sizes,"string")){q.font_size_style_values=i.explode(q.font_size_style_values);q.font_size_classes=i.explode(q.font_size_classes||"");r={};m.settings.theme_advanced_font_sizes=q.theme_advanced_font_sizes;f(m.getParam("theme_advanced_font_sizes","","hash"),function(t,s){var o;if(s==t&&t>=1&&t<=7){s=t+" ("+p.sizes[t-1]+"pt)";o=q.font_size_classes[t-1];t=q.font_size_style_values[t-1]||(p.sizes[t-1]+"pt")}if(/^\s*\./.test(t)){o=t.replace(/\./g,"")}r[s]=o?{"class":o}:{fontSize:t}});q.theme_advanced_font_sizes=r}if((l=q.theme_advanced_path_location)&&l!="none"){q.theme_advanced_statusbar_location=q.theme_advanced_path_location}if(q.theme_advanced_statusbar_location=="none"){q.theme_advanced_statusbar_location=0}if(m.settings.content_css!==false){m.contentCSS.push(m.baseURI.toAbsolute(n+"/skins/"+m.settings.skin+"/content.css"))}m.onInit.add(function(){if(!m.settings.readonly){m.onNodeChange.add(p._nodeChanged,p);m.onKeyUp.add(p._updateUndoStatus,p);m.onMouseUp.add(p._updateUndoStatus,p);m.dom.bind(m.dom.getRoot(),"dragend",function(){p._updateUndoStatus(m)})}g(m.getBody(),m.settings)});m.onSetProgressState.add(function(t,o,u){var v,w=t.id,s;if(o){p.progressTimer=setTimeout(function(){v=t.getContainer();v=v.insertBefore(k.create("DIV",{style:"position:relative"}),v.firstChild);s=k.get(t.id+"_tbl");k.add(v,"div",{id:w+"_blocker","class":"mceBlocker",style:{width:s.clientWidth+2,height:s.clientHeight+2}});k.add(v,"div",{id:w+"_progress","class":"mceProgress",style:{left:s.clientWidth/2,top:s.clientHeight/2}})},u||0)}else{k.remove(w+"_blocker");k.remove(w+"_progress");clearTimeout(p.progressTimer)}});k.loadCSS(q.editor_css?m.documentBaseURI.toAbsolute(q.editor_css):n+"/skins/"+m.settings.skin+"/ui.css");if(q.skin_variant){k.loadCSS(n+"/skins/"+m.settings.skin+"/ui_"+q.skin_variant+".css")}},_isHighContrast:function(){var l,m=k.add(k.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});l=(k.getStyle(m,"background-color",true)+"").toLowerCase().replace(/ /g,"");k.remove(m);return l!="rgb(171,239,86)"&&l!="#abef56"},createControl:function(p,l){var m,o;if(o=l.createControl(p)){return o}switch(p){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((m=this.controls[p])){return l.createButton(p,{title:"advanced."+m[0],cmd:m[1],ui:m[2],value:m[3]})}},execCommand:function(n,m,o){var l=this["_"+n];if(l){l.call(this,m,o);return true}return false},_importClasses:function(n){var l=this.editor,m=l.controlManager.get("styleselect");if(m.getLength()==0){f(l.dom.getClasses(),function(s,p){var r="style_"+p,q;q={inline:"span",attributes:{"class":s["class"]},selector:"*"};l.formatter.register(r,q);m.add(s["class"],r,{style:function(){return b(l,q)}})})}},_createStyleSelect:function(q){var o=this,l=o.editor,m=l.controlManager,p;p=m.createListBox("styleselect",{title:"advanced.style_select",onselect:function(s){var t,n=[],r;f(p.items,function(u){n.push(u.value)});l.focus();l.undoManager.add();t=l.formatter.matchAll(n);i.each(t,function(u){if(!s||u==s){if(u){l.formatter.remove(u)}r=true}});if(!r){l.formatter.apply(s)}l.undoManager.add();l.nodeChanged();return false}});l.onPreInit.add(function(){var r=0,n=l.getParam("style_formats");if(n){f(n,function(s){var t,u=0;f(s,function(){u++});if(u>1){t=s.name=s.name||"style_"+(r++);l.formatter.register(t,s);p.add(s.title,t,{style:function(){return b(l,s)}})}else{p.add(s.title)}})}else{f(l.getParam("theme_advanced_styles","","hash"),function(v,u){var t,s;if(v){t="style_"+(r++);s={inline:"span",classes:v,selector:"*"};l.formatter.register(t,s);p.add(o.editor.translate(u),t,{style:function(){return b(l,s)}})}})}});if(p.getLength()==0){p.onPostRender.add(function(r,s){if(!p.NativeListBox){h.add(s.id+"_text","focus",o._importClasses,o);h.add(s.id+"_text","mousedown",o._importClasses,o);h.add(s.id+"_open","focus",o._importClasses,o);h.add(s.id+"_open","mousedown",o._importClasses,o)}else{h.add(s.id,"focus",o._importClasses,o)}})}return p},_createFontSelect:function(){var n,m=this,l=m.editor;n=l.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){l.execCommand("FontName",false,p.value);return}l.execCommand("FontName",false,o);n.select(function(q){return o==q});if(p&&p.value==o){n.select(null)}return false}});if(n){f(l.getParam("theme_advanced_fonts",m.settings.theme_advanced_fonts,"hash"),function(p,o){n.add(l.translate(o),p,{style:p.indexOf("dings")==-1?"font-family:"+p:""})})}return n},_createFontSizeSelect:function(){var o=this,m=o.editor,p,n=0,l=[];p=m.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(q){var r=p.items[p.selectedIndex];if(!q&&r){r=r.value;if(r["class"]){m.formatter.toggle("fontsize_class",{value:r["class"]});m.undoManager.add();m.nodeChanged()}else{m.execCommand("FontSize",false,r.fontSize)}return}if(q["class"]){m.focus();m.undoManager.add();m.formatter.toggle("fontsize_class",{value:q["class"]});m.undoManager.add();m.nodeChanged()}else{m.execCommand("FontSize",false,q.fontSize)}p.select(function(s){return q==s});if(r&&(r.value.fontSize==q.fontSize||r.value["class"]&&r.value["class"]==q["class"])){p.select(null)}return false}});if(p){f(o.settings.theme_advanced_font_sizes,function(r,q){var s=r.fontSize;if(s>=1&&s<=7){s=o.sizes[parseInt(s)-1]+"pt"}p.add(q,r,{style:"font-size:"+s,"class":"mceFontSize"+(n++)+(" "+(r["class"]||""))})})}return p},_createBlockFormats:function(){var n,l={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},m=this;n=m.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(o){m.editor.execCommand("FormatBlock",false,o);return false}});if(n){f(m.editor.getParam("theme_advanced_blockformats",m.settings.theme_advanced_blockformats,"hash"),function(p,o){n.add(m.editor.translate(o!=p?o:l[p]),p,{"class":"mce_formatPreview mce_"+p,style:function(){return b(m.editor,{block:p})}})})}return n},_createForeColorMenu:function(){var q,m=this,n=m.settings,p={},l;if(n.theme_advanced_more_colors){p.more_colors_func=function(){m._mceColorPicker(0,{color:q.value,func:function(o){q.setColor(o)}})}}if(l=n.theme_advanced_text_colors){p.colors=l}if(n.theme_advanced_default_foreground_color){p.default_color=n.theme_advanced_default_foreground_color}p.title="advanced.forecolor_desc";p.cmd="ForeColor";p.scope=this;q=m.editor.controlManager.createColorSplitButton("forecolor",p);return q},_createBackColorMenu:function(){var q,m=this,n=m.settings,p={},l;if(n.theme_advanced_more_colors){p.more_colors_func=function(){m._mceColorPicker(0,{color:q.value,func:function(o){q.setColor(o)}})}}if(l=n.theme_advanced_background_colors){p.colors=l}if(n.theme_advanced_default_background_color){p.default_color=n.theme_advanced_default_background_color}p.title="advanced.backcolor_desc";p.cmd="HiliteColor";p.scope=this;q=m.editor.controlManager.createColorSplitButton("backcolor",p);return q},renderUI:function(q){var u,r,v,y=this,w=y.editor,z=y.settings,x,m,l;if(w.settings){w.settings.aria_label=z.aria_label+w.getLang("advanced.help_shortcut")}u=m=k.create("span",{role:"application","aria-labelledby":w.id+"_voice",id:w.id+"_parent","class":"mceEditor "+w.settings.skin+"Skin"+(z.skin_variant?" "+w.settings.skin+"Skin"+y._ufirst(z.skin_variant):"")+(w.settings.directionality=="rtl"?" mceRtl":"")});k.add(u,"span",{"class":"mceVoiceLabel",style:"display:none;",id:w.id+"_voice"},z.aria_label);if(!k.boxModel){u=k.add(u,"div",{"class":"mceOldBoxModel"})}u=x=k.add(u,"table",{role:"presentation",id:w.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});u=v=k.add(u,"tbody");switch((z.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":r=y._rowLayout(z,v,q);break;case"customlayout":r=w.execCallback("theme_advanced_custom_layout",z,v,q,m);break;default:r=y._simpleLayout(z,v,q,m)}u=q.targetNode;l=x.rows;k.addClass(l[0],"mceFirst");k.addClass(l[l.length-1],"mceLast");f(k.select("tr",v),function(o){k.addClass(o.firstChild,"mceFirst");k.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(k.get(z.theme_advanced_toolbar_container)){k.get(z.theme_advanced_toolbar_container).appendChild(m)}else{k.insertAfter(m,u)}h.add(w.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){y._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!w.getParam("accessibility_focus")){h.add(k.add(m,"a",{href:"#"},""),"focus",function(){tinyMCE.get(w.id).focus()})}if(z.theme_advanced_toolbar_location=="external"){q.deltaHeight=0}y.deltaHeight=q.deltaHeight;q.targetNode=null;w.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(i.isWebKit){window.focus()}y.toolbarGroup.focus();return h.cancel(n)}else{if(n.keyCode===o){k.get(p.id+"_path_row").focus();return h.cancel(n)}}}});w.addShortcut("alt+0","","mceShortcuts",y);return{iframeContainer:r,editorContainer:w.id+"_parent",sizeContainer:x,deltaHeight:q.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:i.majorVersion+"."+i.minorVersion}},resizeBy:function(l,m){var n=k.get(this.editor.id+"_ifr");this.resizeTo(n.clientWidth+l,n.clientHeight+m)},resizeTo:function(l,p,n){var m=this.editor,o=this.settings,q=k.get(m.id+"_tbl"),r=k.get(m.id+"_ifr");l=Math.max(o.theme_advanced_resizing_min_width||100,l);p=Math.max(o.theme_advanced_resizing_min_height||100,p);l=Math.min(o.theme_advanced_resizing_max_width||65535,l);p=Math.min(o.theme_advanced_resizing_max_height||65535,p);k.setStyle(q,"height","");k.setStyle(r,"height",p);if(o.theme_advanced_resize_horizontal){k.setStyle(q,"width","");k.setStyle(r,"width",l);if(l"));k.setHTML(p,w.join(""))},_addStatusBar:function(u,m){var p,y=this,v=y.editor,z=y.settings,l,w,x,q;p=k.add(u,"tr");p=q=k.add(p,"td",{"class":"mceStatusbar"});p=k.add(p,"div",{id:v.id+"_path_row",role:"group","aria-labelledby":v.id+"_path_voice"});if(z.theme_advanced_path){k.add(p,"span",{id:v.id+"_path_voice"},v.translate("advanced.path"));k.add(p,"span",{},": ")}else{k.add(p,"span",{}," ")}if(z.theme_advanced_resizing){k.add(q,"a",{id:v.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(z.theme_advanced_resizing_use_cookie){v.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+v.id+"_size"),r=k.get(v.id+"_tbl");if(!n){return}y.resizeTo(n.cw,n.ch)})}v.onPostRender.add(function(){h.add(v.id+"_resize","click",function(n){n.preventDefault()});h.add(v.id+"_resize","mousedown",function(G){var t,r,s,o,F,C,D,I,n,H,A;function B(J){J.preventDefault();n=D+(J.screenX-F);H=I+(J.screenY-C);y.resizeTo(n,H)}function E(J){h.remove(k.doc,"mousemove",t);h.remove(v.getDoc(),"mousemove",r);h.remove(k.doc,"mouseup",s);h.remove(v.getDoc(),"mouseup",o);n=D+(J.screenX-F);H=I+(J.screenY-C);y.resizeTo(n,H,true);v.nodeChanged()}G.preventDefault();F=G.screenX;C=G.screenY;A=k.get(y.editor.id+"_ifr");D=n=A.clientWidth;I=H=A.clientHeight;t=h.add(k.doc,"mousemove",B);r=h.add(v.getDoc(),"mousemove",B);s=h.add(k.doc,"mouseup",E);o=h.add(v.getDoc(),"mouseup",E)})})}m.deltaHeight-=21;p=u=null},_updateUndoStatus:function(m){var l=m.controlManager,n=m.undoManager;l.setDisabled("undo",!n.hasUndo()&&!n.typing);l.setDisabled("redo",!n.hasRedo())},_nodeChanged:function(u,z,I,y,J){var D=this,H,K=0,C,L,E=D.settings,B,q,A,G,r,o,m;i.each(D.stateControls,function(n){z.setActive(n,u.queryCommandState(D.controls[n][1]))});var x=function(t,n){var p,t,s=n;if(typeof(n)=="string"){s=function(v){return v.nodeName==n}}for(p=0;p0){L.mark(p)}})}if(L=z.get("formatselect")){H=w(u.dom.isBlock);if(H){L.select(H.nodeName.toLowerCase())}}l(function(s){var p;if(s.nodeName==="SPAN"){if(!B&&s.className){B=s.className}}p=u.dom.is(s,E.theme_advanced_font_selector);if(p||j(u.settings)){if(!q&&s.style.fontSize){q=s.style.fontSize}if(!A&&s.style.fontFamily){A=s.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!G&&s.style.color){G=s.style.color}if(!r&&s.style.backgroundColor){r=s.style.backgroundColor}}return false});if(L=z.get("fontselect")){L.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==A})}if(L=z.get("fontsizeselect")){if(E.theme_advanced_runtime_fontsize&&!q&&!B){q=u.dom.getStyle(I,"fontSize",true)}L.select(function(n){if(n.fontSize&&n.fontSize===q){return true}if(n["class"]&&n["class"]===B){return true}})}if(E.theme_advanced_show_current_color){function F(p,n){if(L=z.get(p)){if(!n){n=L.settings.default_color}if(n!==L.value){L.displayColor(n)}}}F("forecolor",G);F("backcolor",r)}if(E.theme_advanced_show_current_color){function F(p,n){if(L=z.get(p)){if(!n){n=L.settings.default_color}if(n!==L.value){L.displayColor(n)}}}F("forecolor",G);F("backcolor",r)}if(E.theme_advanced_path&&E.theme_advanced_statusbar_location){H=k.get(u.id+"_path")||k.add(u.id+"_path_row","span",{id:u.id+"_path"});if(D.statusKeyboardNavigation){D.statusKeyboardNavigation.destroy();D.statusKeyboardNavigation=null}k.setHTML(H,"");w(function(M){var p=M.nodeName.toLowerCase(),s,v,t="";if(M.nodeType!=1||p==="br"||M.getAttribute("data-mce-bogus")||k.hasClass(M,"mceItemHidden")||k.hasClass(M,"mceItemRemoved")){return}if(i.isIE&&M.scopeName!=="HTML"&&M.scopeName){p=M.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(C=k.getAttrib(M,"src")){t+="src: "+C+" "}break;case"a":if(C=k.getAttrib(M,"name")){t+="name: "+C+" ";p+="#"+C}if(C=k.getAttrib(M,"href")){t+="href: "+C+" "}break;case"font":if(C=k.getAttrib(M,"face")){t+="font: "+C+" "}if(C=k.getAttrib(M,"size")){t+="size: "+C+" "}if(C=k.getAttrib(M,"color")){t+="color: "+C+" "}break;case"span":if(C=k.getAttrib(M,"style")){t+="style: "+C+" "}break}if(C=k.getAttrib(M,"id")){t+="id: "+C+" "}if(C=M.className){C=C.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(C){t+="class: "+C+" ";if(u.dom.isBlock(M)||p=="img"||p=="span"){p+="."+C}}}p=p.replace(/(html:)/g,"");p={name:p,node:M,title:t};D.onResolveName.dispatch(D,p);t=p.title;p=p.name;v=k.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(K++)},p);if(H.hasChildNodes()){H.insertBefore(k.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),H.firstChild);H.insertBefore(v,H.firstChild)}else{H.appendChild(v)}},u.getBody());if(k.select("a",H).length>0){D.statusKeyboardNavigation=new i.ui.KeyboardNavigation({root:u.id+"_path_row",items:k.select("a",H),excludeFromTabOrder:true,onCancel:function(){u.focus()}},k)}}},_sel:function(l){this.editor.execCommand("mceSelectNodeDepth",false,l)},_mceInsertAnchor:function(n,m){var l=this.editor;l.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(l.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(l.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var l=this.editor;l.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(l.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(l.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var l=this.editor;l.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var l=this.editor;l.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(n,m){var l=this.editor;m=m||{};l.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(l.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(l.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:m.color,func:m.func,theme_url:this.url})},_mceCodeEditor:function(m,n){var l=this.editor;l.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(l.getParam("theme_advanced_source_editor_width",720)),height:parseInt(l.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(m,n){var l=this.editor;if(l.dom.getAttrib(l.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}l.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(l.getLang("advanced.image_delta_width",0)),height:275+parseInt(l.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(m,n){var l=this.editor;l.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(l.getLang("advanced.link_delta_width",0)),height:200+parseInt(l.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var l=this.editor;l.windowManager.confirm("advanced.newdocument",function(m){if(m){l.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var l=this;this._mceColorPicker(0,{color:l.fgColor,func:function(m){l.fgColor=m;l.editor.execCommand("ForeColor",false,m)}})},_mceBackColor:function(){var l=this;this._mceColorPicker(0,{color:l.bgColor,func:function(m){l.bgColor=m;l.editor.execCommand("HiliteColor",false,m)}})},_ufirst:function(l){return l.substring(0,1).toUpperCase()+l.substring(1)}});i.ThemeManager.add("advanced",i.themes.AdvancedTheme)}(tinymce)); +(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); +(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); +(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); +(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?' ':" ")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})(); +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + +// Kludges for bugs and behavior differences that can't be feature +// detected are enabled based on userAgent etc sniffing. +var userAgent = navigator.userAgent +var platform = navigator.platform + +var gecko = /gecko\/\d/i.test(userAgent) +var ie_upto10 = /MSIE \d/.test(userAgent) +var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent) +var edge = /Edge\/(\d+)/.exec(userAgent) +var ie = ie_upto10 || ie_11up || edge +var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]) +var webkit = !edge && /WebKit\//.test(userAgent) +var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent) +var chrome = !edge && /Chrome\//.test(userAgent) +var presto = /Opera\//.test(userAgent) +var safari = /Apple Computer/.test(navigator.vendor) +var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent) +var phantom = /PhantomJS/.test(userAgent) + +var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent) +var android = /Android/.test(userAgent) +// This is woefully incomplete. Suggestions for alternative methods welcome. +var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent) +var mac = ios || /Mac/.test(platform) +var chromeOS = /\bCrOS\b/.test(userAgent) +var windows = /win/i.test(platform) + +var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/) +if (presto_version) { presto_version = Number(presto_version[1]) } +if (presto_version && presto_version >= 15) { presto = false; webkit = true } +// Some browsers use the wrong event properties to signal cmd/ctrl on OS X +var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)) +var captureRightClick = gecko || (ie && ie_version >= 9) + +function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + +var rmClass = function(node, cls) { + var current = node.className + var match = classTest(cls).exec(current) + if (match) { + var after = current.slice(match.index + match[0].length) + node.className = current.slice(0, match.index) + (after ? match[1] + after : "") + } +} + +function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild) } + return e +} + +function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) +} + +function elt(tag, content, className, style) { + var e = document.createElement(tag) + if (className) { e.className = className } + if (style) { e.style.cssText = style } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)) } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } } + return e +} +// wrapper for elt, which removes the elt from the accessibility tree +function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style) + e.setAttribute("role", "presentation") + return e +} + +var range +if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange() + r.setEnd(endNode || node, end) + r.setStart(node, start) + return r +} } +else { range = function(node, start, end) { + var r = document.body.createTextRange() + try { r.moveToElementText(node.parentNode) } + catch(e) { return r } + r.collapse(true) + r.moveEnd("character", end) + r.moveStart("character", start) + return r +} } + +function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host } + if (child == parent) { return true } + } while (child = child.parentNode) +} + +function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement + try { + activeElement = document.activeElement + } catch(e) { + activeElement = document.body || null + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement } + return activeElement +} + +function addClass(node, cls) { + var current = node.className + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls } +} +function joinClasses(a, b) { + var as = a.split(" ") + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } } + return b +} + +var selectInput = function(node) { node.select() } +if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } } +else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select() } catch(_e) {} } } + +function bind(f) { + var args = Array.prototype.slice.call(arguments, 1) + return function(){return f.apply(null, args)} +} + +function copyObj(obj, target, overwrite) { + if (!target) { target = {} } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop] } } + return target +} + +// Counts the column offset in a string, taking tabs into account. +// Used mostly to find indentation. +function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/) + if (end == -1) { end = string.length } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i) + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i + n += tabSize - (n % tabSize) + i = nextTab + 1 + } +} + +var Delayed = function() {this.id = null}; +Delayed.prototype.set = function (ms, f) { + clearTimeout(this.id) + this.id = setTimeout(f, ms) +}; + +function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 +} + +// Number of pixels added to scroller and sizer to hide scrollbar +var scrollerGap = 30 + +// Returned or thrown by various protocols to signal 'I'm not +// handling this'. +var Pass = {toString: function(){return "CodeMirror.Pass"}} + +// Reused option objects for setSelection & friends +var sel_dontScroll = {scroll: false}; +var sel_mouse = {origin: "*mouse"}; +var sel_move = {origin: "+move"}; +// The inverse of countColumn -- find the offset that corresponds to +// a particular column. +function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos) + if (nextTab == -1) { nextTab = string.length } + var skipped = nextTab - pos + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos + col += tabSize - (col % tabSize) + pos = nextTab + 1 + if (col >= goal) { return pos } + } +} + +var spaceStrs = [""] +function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " ") } + return spaceStrs[n] +} + +function lst(arr) { return arr[arr.length-1] } + +function map(array, f) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) } + return out +} + +function insertSorted(array, value, score) { + var pos = 0, priority = score(value) + while (pos < array.length && score(array[pos]) <= priority) { pos++ } + array.splice(pos, 0, value) +} + +function nothing() {} + +function createObj(base, props) { + var inst + if (Object.create) { + inst = Object.create(base) + } else { + nothing.prototype = base + inst = new nothing() + } + if (props) { copyObj(props, inst) } + return inst +} + +var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/ +function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) +} +function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) +} + +function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true +} + +// Extending unicode characters. A series of a non-extending char + +// any number of extending chars is treated as a single unit as far +// as editing and measuring is concerned. This is not fully correct, +// since some scripts/fonts/browsers also treat other configurations +// of code points as a group. +var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/ +function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + +// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. +function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir } + return pos +} + +// Returns the value from the range [`from`; `to`] that satisfies +// `pred` and is closest to `from`. Assumes that at least `to` satisfies `pred`. +function findFirst(pred, from, to) { + for (;;) { + if (Math.abs(from - to) <= 1) { return pred(from) ? from : to } + var mid = Math.floor((from + to) / 2) + if (pred(mid)) { to = mid } + else { from = mid } + } +} + +// The display handles the DOM integration, both for input reading +// and content drawing. It holds references to DOM nodes and +// display-related state. + +function Display(place, doc, input) { + var d = this + this.input = input + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler") + d.scrollbarFiller.setAttribute("cm-not-content", "true") + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler") + d.gutterFiller.setAttribute("cm-not-content", "true") + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code") + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1") + d.cursorDiv = elt("div", null, "CodeMirror-cursors") + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure") + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure") + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none") + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines") + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative") + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer") + d.sizerWidth = null + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;") + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters") + d.lineGutter = null + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll") + d.scroller.setAttribute("tabIndex", "-1") + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror") + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper) } + else { place(d.wrapper) } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first + d.reportedViewFrom = d.reportedViewTo = doc.first + // Information about the rendered lines. + d.view = [] + d.renderedView = null + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null + // Empty space (in pixels) above the view + d.viewOffset = 0 + d.lastWrapHeight = d.lastWrapWidth = 0 + d.updateLineNumbers = null + + d.nativeBarWidth = d.barHeight = d.barWidth = 0 + d.scrollbarsClipped = false + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null + d.maxLineLength = 0 + d.maxLineChanged = false + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null + + // True when shift is held down. + d.shift = false + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null + + d.activeTouch = null + + input.init(d) +} + +// Find the line object corresponding to the given line number. +function getLine(doc, n) { + n -= doc.first + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize() + if (n < sz) { chunk = child; break } + n -= sz + } + } + return chunk.lines[n] +} + +// Get the part of a document between two positions, as an array of +// strings. +function getBetween(doc, start, end) { + var out = [], n = start.line + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text + if (n == end.line) { text = text.slice(0, end.ch) } + if (n == start.line) { text = text.slice(start.ch) } + out.push(text) + ++n + }) + return out +} +// Get the lines between from and to, as array of strings. +function getLines(doc, from, to) { + var out = [] + doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value + return out +} + +// Update the height of a line, propagating the height change +// upwards to parent nodes. +function updateLineHeight(line, height) { + var diff = height - line.height + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } } +} + +// Given a line object, find its line number by walking up through +// its parent links. +function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line) + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize() + } + } + return no + cur.first +} + +// Find the line at the given vertical position, using the height +// information in the document tree. +function lineAtHeight(chunk, h) { + var n = chunk.first + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height + if (h < ch) { chunk = child; continue outer } + h -= ch + n += child.chunkSize() + } + return n + } while (!chunk.lines) + var i = 0 + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height + if (h < lh) { break } + h -= lh + } + return n + i +} + +function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + +function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) +} + +// A Pos instance represents a position within the text. +function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line + this.ch = ch + this.sticky = sticky +} + +// Compare two positions, return 0 if they are the same, a negative +// number when a is less, and a positive number otherwise. +function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + +function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + +function copyPos(x) {return Pos(x.line, x.ch)} +function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } +function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + +// Most of the external API clips given positions to make sure they +// actually exist within the document. +function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} +function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1 + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) +} +function clipToLen(pos, linelen) { + var ch = pos.ch + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } +} +function clipPosArray(doc, array) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) } + return out +} + +// Optimize some code when these features are not used. +var sawReadOnlySpans = false; +var sawCollapsedSpans = false; +function seeReadOnlySpans() { + sawReadOnlySpans = true +} + +function seeCollapsedSpans() { + sawCollapsedSpans = true +} + +// TEXTMARKER SPANS + +function MarkedSpan(marker, from, to) { + this.marker = marker + this.from = from; this.to = to +} + +// Search an array of spans for a span matching the given marker. +function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.marker == marker) { return span } + } } +} +// Remove a span from an array, returning undefined if no spans are +// left (we don't store arrays for lines without spans). +function removeMarkedSpan(spans, span) { + var r + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } } + return r +} +// Add a span to a line. +function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span] + span.marker.attachLine(line) +} + +// Used for the algorithm that adjusts markers for a change in the +// document. These functions cut an array of spans at a given +// character position, returning an array of remaining chunks (or +// undefined if nothing remains). +function markedSpansBefore(old, startCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh) + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)) + } + } } + return nw +} +function markedSpansAfter(old, endCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh) + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)) + } + } } + return nw +} + +// Given a change object, compute the new set of marker spans that +// cover the line in which the change took place. Removes spans +// entirely within the change, reconnects spans belonging to the +// same marker that appear on both sides of the change, and cuts off +// spans partially within the change. Returns an array of span +// arrays with one element for each line in (after) the change. +function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0 + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert) + var last = markedSpansAfter(oldLast, endCh, isInsert) + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0) + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i] + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker) + if (!found) { span.to = startCh } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1] + if (span$1.to != null) { span$1.to += offset } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker) + if (!found$1) { + span$1.from = offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } else { + span$1.from += offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first) } + if (last && last != first) { last = clearEmptySpans(last) } + + var newMarkers = [first] + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers) } + newMarkers.push(last) + } + return newMarkers +} + +// Remove spans that are empty and don't have a clearWhenEmpty +// option of false. +function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1) } + } + if (!spans.length) { return null } + return spans +} + +// Used to 'clip' out readOnly ranges when making a change. +function removeReadOnlyRanges(doc, from, to) { + var markers = null + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark) } + } } + }) + if (!markers) { return null } + var parts = [{from: from, to: to}] + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0) + for (var j = 0; j < parts.length; ++j) { + var p = parts[j] + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to) + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}) } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}) } + parts.splice.apply(parts, newParts) + j += newParts.length - 3 + } + } + return parts +} + +// Connect or disconnect spans from a line. +function detachMarkedSpans(line) { + var spans = line.markedSpans + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line) } + line.markedSpans = null +} +function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line) } + line.markedSpans = spans +} + +// Helpers used when computing which overlapping collapsed span +// counts as the larger one. +function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } +function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + +// Returns a number indicating which of two overlapping collapsed +// spans is larger (and thus includes the other). Falls back to +// comparing ids when the spans cover exactly the same range. +function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find() + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b) + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b) + if (toCmp) { return toCmp } + return b.id - a.id +} + +// Find out whether a line ends or starts in a collapsed span. If +// so, return the marker for that span. +function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker } + } } + return found +} +function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } +function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + +// Test whether there exists a collapsed span that partially +// overlaps (covers the start or end, but not both) of a new span. +// Such overlap is not allowed. +function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo) + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i] + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0) + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker) + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker) + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } +} + +// A visual line is a line as drawn on the screen. Folding, for +// example, can cause multiple logical lines to appear on the same +// visual line. This finds the start of the visual line that the +// given line is part of (usually that is the line itself). +function visualLine(line) { + var merged + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line } + return line +} + +function visualLineEnd(line) { + var merged + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return line +} + +// Returns an array of logical lines that continue the visual line +// started by the argument, or undefined if there are no such lines. +function visualLineContinued(line) { + var merged, lines + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line) + } + return lines +} + +// Get the line number of the start of the visual line that the +// given line number is part of. +function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line) + if (line == vis) { return lineN } + return lineNo(vis) +} + +// Get the line number of the start of the next visual line after +// the given line. +function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return lineNo(line) + 1 +} + +// Compute whether a line is hidden. Lines count as hidden when they +// are part of a visual line that starts with another line, or when +// they are entirely covered by collapsed, non-widget span. +function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } +} +function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true) + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i] + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } +} + +// Find the height above the given line. +function heightAtLine(lineObj) { + lineObj = visualLine(lineObj) + + var h = 0, chunk = lineObj.parent + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i] + if (line == lineObj) { break } + else { h += line.height } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1] + if (cur == chunk) { break } + else { h += cur.height } + } + } + return h +} + +// Compute the character length of a line, taking into account +// collapsed ranges (see markText) that might hide parts, and join +// other lines onto it. +function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true) + cur = found.from.line + len += found.from.ch - found.to.ch + } + cur = line + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true) + len -= cur.text.length - found$1.from.ch + cur = found$1.to.line + len += cur.text.length - found$1.to.ch + } + return len +} + +// Find the longest line in the document. +function findMaxLine(cm) { + var d = cm.display, doc = cm.doc + d.maxLine = getLine(doc, doc.first) + d.maxLineLength = lineLength(d.maxLine) + d.maxLineChanged = true + doc.iter(function (line) { + var len = lineLength(line) + if (len > d.maxLineLength) { + d.maxLineLength = len + d.maxLine = line + } + }) +} + +// BIDI HELPERS + +function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr") } + var found = false + for (var i = 0; i < order.length; ++i) { + var part = order[i] + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr") + found = true + } + } + if (!found) { f(from, to, "ltr") } +} + +var bidiOther = null +function getBidiPartAt(order, ch, sticky) { + var found + bidiOther = null + for (var i = 0; i < order.length; ++i) { + var cur = order[i] + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i } + else { bidiOther = i } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i } + else { bidiOther = i } + } + } + return found != null ? found : bidiOther +} + +// Bidirectional ordering algorithm +// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm +// that this (partially) implements. + +// One-char codes used for character types: +// L (L): Left-to-Right +// R (R): Right-to-Left +// r (AL): Right-to-Left Arabic +// 1 (EN): European Number +// + (ES): European Number Separator +// % (ET): European Number Terminator +// n (AN): Arabic Number +// , (CS): Common Number Separator +// m (NSM): Non-Spacing Mark +// b (BN): Boundary Neutral +// s (B): Paragraph Separator +// t (S): Segment Separator +// w (WS): Whitespace +// N (ON): Other Neutrals + +// Returns null if characters are ordered as they appear +// (left-to-right), or an array of sections ({from, to, level} +// objects) in the order in which they occur visually. +var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN" + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111" + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/ + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/ + + function BidiSpan(level, from, to) { + this.level = level + this.from = from; this.to = to + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R" + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = [] + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))) } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1] + if (type == "m") { types[i$1] = prev } + else { prev = type } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2] + if (type$1 == "1" && cur == "r") { types[i$2] = "n" } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3] + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 } + prev$1 = type$2 + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4] + if (type$3 == ",") { types[i$4] = "N" } + else if (type$3 == "%") { + var end = (void 0) + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N" + for (var j = i$4; j < end; ++j) { types[j] = replace } + i$4 = end - 1 + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5] + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" } + else if (isStrong.test(type$4)) { cur$1 = type$4 } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0) + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L" + var after = (end$1 < len ? types[end$1] : outerType) == "L" + var replace$1 = before == after ? (before ? "L" : "R") : outerType + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 } + i$6 = end$1 - 1 + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7 + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)) + } else { + var pos = i$7, at = order.length + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) } + var nstart = j$2 + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)) + pos = j$2 + } else { ++j$2 } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) } + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length + order.unshift(new BidiSpan(0, 0, m[0].length)) + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length + order.push(new BidiSpan(0, len - m[0].length, len)) + } + + return direction == "rtl" ? order.reverse() : order + } +})() + +// Get the bidi ordering for the given line (and cache it). Returns +// false for lines that are fully left-to-right, and an array of +// BidiSpan objects otherwise. +function getOrder(line, direction) { + var order = line.order + if (order == null) { order = line.order = bidiOrdering(line.text, direction) } + return order +} + +function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir) + return target < 0 || target > line.text.length ? null : target +} + +function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir) + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") +} + +function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + var order = getOrder(lineObj, cm.doc.direction) + if (order) { + var part = dir < 0 ? lst(order) : order[0] + var moveInStorageOrder = (dir < 0) == (part.level == 1) + var sticky = moveInStorageOrder ? "after" : "before" + var ch + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0) { + var prep = prepareMeasureForLine(cm, lineObj) + ch = dir < 0 ? lineObj.text.length - 1 : 0 + var targetTop = measureCharPrepared(cm, prep, ch).top + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch) + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1, true) } + } else { ch = dir < 0 ? part.to : part.from } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") +} + +function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction) + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length + start.sticky = "before" + } else if (start.ch <= 0) { + start.ch = 0 + start.sticky = "after" + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos] + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); } + var prep + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line) + return wrappedLineExtentChar(cm, line, prep, ch) + } + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch) + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0) + var ch = mv(start, moveInStorageOrder ? 1 : -1) + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after" + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); } + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos] + var moveInStorageOrder = (dir > 0) == (part.level != 1) + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1) + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1) + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + } + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent) + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1) + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)) + if (res) { return res } + } + + // Case 4: Nowhere to move + return null +} + +// EVENT HANDLING + +// Lightweight event framework. on/off also work on DOM nodes, +// registering native DOM handlers. + +var noHandlers = [] + +var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false) + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f) + } else { + var map = emitter._handlers || (emitter._handlers = {}) + map[type] = (map[type] || noHandlers).concat(f) + } +} + +function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers +} + +function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false) + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f) + } else { + var map = emitter._handlers, arr = map && map[type] + if (arr) { + var index = indexOf(arr, f) + if (index > -1) + { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)) } + } + } +} + +function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type) + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2) + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) } +} + +// The DOM events that CodeMirror handles can be overridden by +// registering a (non-DOM) handler on the editor for the event name, +// and preventDefault-ing the event in that handler. +function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} } + signal(cm, override || e.type, cm, e) + return e_defaultPrevented(e) || e.codemirrorIgnore +} + +function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []) + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]) } } +} + +function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 +} + +// Add on and off methods to a constructor's prototype, to make +// registering events on such objects more convenient. +function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f)} + ctor.prototype.off = function(type, f) {off(this, type, f)} +} + +// Due to the fact that we still support jurassic IE versions, some +// compatibility wrappers are needed. + +function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault() } + else { e.returnValue = false } +} +function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation() } + else { e.cancelBubble = true } +} +function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false +} +function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)} + +function e_target(e) {return e.target || e.srcElement} +function e_button(e) { + var b = e.which + if (b == null) { + if (e.button & 1) { b = 1 } + else if (e.button & 2) { b = 3 } + else if (e.button & 4) { b = 2 } + } + if (mac && e.ctrlKey && b == 1) { b = 3 } + return b +} + +// Detect drag-and-drop +var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div') + return "draggable" in div || "dragDrop" in div +}() + +var zwspSupported +function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b") + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])) + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px") + node.setAttribute("cm-text", "") + return node +} + +// Feature-detect IE's crummy client rect reporting for bidi text +var badBidiRects +function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")) + var r0 = range(txt, 0, 1).getBoundingClientRect() + var r1 = range(txt, 1, 2).getBoundingClientRect() + removeChildren(measure) + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) +} + +// See if "".split is the broken IE version, if so, provide an +// alternative way to split lines. +var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length + while (pos <= l) { + var nl = string.indexOf("\n", pos) + if (nl == -1) { nl = string.length } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl) + var rt = line.indexOf("\r") + if (rt != -1) { + result.push(line.slice(0, rt)) + pos += rt + 1 + } else { + result.push(line) + pos = nl + 1 + } + } + return result +} : function (string) { return string.split(/\r\n?|\n/); } + +var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } +} : function (te) { + var range + try {range = te.ownerDocument.selection.createRange()} + catch(e) {} + if (!range || range.parentElement() != te) { return false } + return range.compareEndPoints("StartToEnd", range) != 0 +} + +var hasCopyEvent = (function () { + var e = elt("div") + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;") + return typeof e.oncopy == "function" +})() + +var badZoomedRects = null +function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")) + var normal = node.getBoundingClientRect() + var fromRange = range(node, 0, 1).getBoundingClientRect() + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 +} + +var modes = {}; +var mimeModes = {}; +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2) } + modes[name] = mode +} + +function defineMIME(mime, spec) { + mimeModes[mime] = spec +} + +// Given a MIME type, a {name, ...options} config object, or a name +// string, return a mode config object. +function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec] + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name] + if (typeof found == "string") { found = {name: found} } + spec = createObj(found, spec) + spec.name = found.name + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } +} + +// Given a mode spec (anything that resolveMode accepts), find and +// initialize an actual mode object. +function getMode(options, spec) { + spec = resolveMode(spec) + var mfactory = modes[spec.name] + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec) + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name] + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] } + modeObj[prop] = exts[prop] + } + } + modeObj.name = spec.name + if (spec.helperType) { modeObj.helperType = spec.helperType } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1] } } + + return modeObj +} + +// This can be used to attach properties to mode objects from +// outside the actual mode definition. +var modeExtensions = {} +function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}) + copyObj(properties, exts) +} + +function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {} + for (var n in state) { + var val = state[n] + if (val instanceof Array) { val = val.concat([]) } + nstate[n] = val + } + return nstate +} + +// Given a mode and a state (for that mode), find the inner mode and +// state at the position that the state refers to. +function innerMode(mode, state) { + var info + while (mode.innerMode) { + info = mode.innerMode(state) + if (!info || info.mode == mode) { break } + state = info.state + mode = info.mode + } + return info || {mode: mode, state: state} +} + +function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true +} + +// STRING STREAM + +// Fed to the mode parsers, provides helper functions to make +// parsers more succinct. + +var StringStream = function(string, tabSize) { + this.pos = this.start = 0 + this.string = string + this.tabSize = tabSize || 8 + this.lastColumnPos = this.lastColumnValue = 0 + this.lineStart = 0 +}; + +StringStream.prototype.eol = function () {return this.pos >= this.string.length}; +StringStream.prototype.sol = function () {return this.pos == this.lineStart}; +StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; +StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } +}; +StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos) + var ok + if (typeof match == "string") { ok = ch == match } + else { ok = ch && (match.test ? match.test(ch) : match(ch)) } + if (ok) {++this.pos; return ch} +}; +StringStream.prototype.eatWhile = function (match) { + var start = this.pos + while (this.eat(match)){} + return this.pos > start +}; +StringStream.prototype.eatSpace = function () { + var this$1 = this; + + var start = this.pos + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos } + return this.pos > start +}; +StringStream.prototype.skipToEnd = function () {this.pos = this.string.length}; +StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos) + if (found > -1) {this.pos = found; return true} +}; +StringStream.prototype.backUp = function (n) {this.pos -= n}; +StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue) + this.lastColumnPos = this.start + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; } + var substr = this.string.substr(this.pos, pattern.length) + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern) + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length } + return match + } +}; +StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; +StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n + try { return inner() } + finally { this.lineStart -= n } +}; + +// Compute a style array (an array starting with a mode generation +// -- for invalidation -- followed by pairs of end positions and +// style strings), which is used to highlight the tokens on the +// line. +function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {} + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd) + + // Run overlays, adjust style array. + var loop = function ( o ) { + var overlay = cm.state.overlays[o], i = 1, at = 0 + runMode(cm, line.text, overlay.mode, true, function (end, style) { + var start = i + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i] + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end) } + i += 2 + at = Math.min(end, i_end) + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style) + i = start + 2 + } else { + for (; start < i; start += 2) { + var cur = st[start+1] + st[start+1] = (cur ? cur + " " : "") + "overlay " + style + } + } + }, lineClasses) + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} +} + +function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var state = getStateBefore(cm, lineNo(line)) + var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state) + line.stateAfter = state + line.styles = result.styles + if (result.classes) { line.styleClasses = result.classes } + else if (line.styleClasses) { line.styleClasses = null } + if (updateFrontier === cm.doc.frontier) { cm.doc.frontier++ } + } + return line.styles +} + +function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display + if (!doc.mode.startState) { return true } + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter + if (!state) { state = startState(doc.mode) } + else { state = copyState(doc.mode, state) } + doc.iter(pos, n, function (line) { + processLine(cm, line.text, state) + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo + line.stateAfter = save ? copyState(doc.mode, state) : null + ++pos + }) + if (precise) { doc.frontier = pos } + return state +} + +// Lightweight form of highlight -- proceed over this line and +// update state, but don't save a style array. Used for lines that +// aren't currently visible. +function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode + var stream = new StringStream(text, cm.options.tabSize) + stream.start = stream.pos = startAt || 0 + if (text == "") { callBlankLine(mode, state) } + while (!stream.eol()) { + readToken(mode, stream, state) + stream.start = stream.pos + } +} + +function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state) + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } +} + +function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode } + var style = mode.token(stream, state) + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") +} + +// Utility for getTokenAt and getLineTokens +function takeToken(cm, pos, precise, asArray) { + var getObj = function (copy) { return ({ + start: stream.start, end: stream.pos, + string: stream.current(), + type: style || null, + state: copy ? copyState(doc.mode, state) : state + }); } + + var doc = cm.doc, mode = doc.mode, style + pos = clipPos(doc, pos) + var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise) + var stream = new StringStream(line.text, cm.options.tabSize), tokens + if (asArray) { tokens = [] } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos + style = readToken(mode, stream, state) + if (asArray) { tokens.push(getObj(true)) } + } + return asArray ? tokens : getObj() +} + +function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/) + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length) + var prop = lineClass[1] ? "bgClass" : "textClass" + if (output[prop] == null) + { output[prop] = lineClass[2] } + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2] } + } } + return type +} + +// Run the given mode's parser over a line, calling f for each token. +function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans } + var curStart = 0, curStyle = null + var stream = new StringStream(text, cm.options.tabSize), style + var inner = cm.options.addModeClass && [null] + if (text == "") { extractLineClasses(callBlankLine(mode, state), lineClasses) } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false + if (forceToEnd) { processLine(cm, text, state, stream.pos) } + stream.pos = text.length + style = null + } else { + style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses) + } + if (inner) { + var mName = inner[0].name + if (mName) { style = "m-" + (style ? mName + " " + style : mName) } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000) + f(curStart, curStyle) + } + curStyle = style + } + stream.start = stream.pos + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000) + f(pos, curStyle) + curStart = pos + } +} + +// Finds the line to start with when starting a parse. Tries to +// find a line with a stateAfter, so that it can start with a +// valid state. If that fails, it returns the line with the +// smallest indentation, which tends to need the least context to +// parse correctly. +function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100) + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1) + if (line.stateAfter && (!precise || search <= doc.frontier)) { return search } + var indented = countColumn(line.text, null, cm.options.tabSize) + if (minline == null || minindent > indented) { + minline = search - 1 + minindent = indented + } + } + return minline +} + +// LINE DATA STRUCTURE + +// Line objects. These hold state related to a line, including +// highlighting info (the styles array). +var Line = function(text, markedSpans, estimateHeight) { + this.text = text + attachMarkedSpans(this, markedSpans) + this.height = estimateHeight ? estimateHeight(this) : 1 +}; + +Line.prototype.lineNo = function () { return lineNo(this) }; +eventMixin(Line) + +// Change the content (text, markers) of a line. Automatically +// invalidates cached information and tries to re-estimate the +// line's height. +function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + if (line.order != null) { line.order = null } + detachMarkedSpans(line) + attachMarkedSpans(line, markedSpans) + var estHeight = estimateHeight ? estimateHeight(line) : 1 + if (estHeight != line.height) { updateLineHeight(line, estHeight) } +} + +// Detach a line from the document tree and its markers. +function cleanUpLine(line) { + line.parent = null + detachMarkedSpans(line) +} + +// Convert a style as returned by a mode (either null, or a string +// containing one or more styles) to a CSS style. This is cached, +// and also looks for line-wide styles. +var styleToClassCache = {}; +var styleToClassCacheWithMode = {}; +function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) +} + +// Render the DOM representation of the text of a line. Also builds +// up a 'line map', which points at the DOM nodes that represent +// specific stretches of text, and is used by the measuring code. +// The returned object contains the DOM node, this map, and +// information about line-wide styles that were set by the mode. +function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null) + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")} + lineView.measure = {} + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0) + builder.pos = 0 + builder.addToken = buildToken + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order) } + builder.map = [] + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line) + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)) + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map + lineView.measure.cache = {} + } else { + ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}) + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack" } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre) + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") } + + return builder +} + +function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar") + token.title = "\\u" + ch.charCodeAt(0).toString(16) + token.setAttribute("aria-label", token.title) + return token +} + +// Build up the DOM representation for a single token, and add it to +// the line map. Takes care to render special characters separately. +function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text + var special = builder.cm.state.specialChars, mustWrap = false + var content + if (!special.test(text)) { + builder.col += text.length + content = document.createTextNode(displayText) + builder.map.push(builder.pos, builder.pos + text.length, content) + if (ie && ie_version < 9) { mustWrap = true } + builder.pos += text.length + } else { + content = document.createDocumentFragment() + var pos = 0 + while (true) { + special.lastIndex = pos + var m = special.exec(text) + var skipped = m ? m.index - pos : text.length - pos + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) } + else { content.appendChild(txt) } + builder.map.push(builder.pos, builder.pos + skipped, txt) + builder.col += skipped + builder.pos += skipped + } + if (!m) { break } + pos += skipped + 1 + var txt$1 = (void 0) + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")) + txt$1.setAttribute("role", "presentation") + txt$1.setAttribute("cm-text", "\t") + builder.col += tabWidth + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")) + txt$1.setAttribute("cm-text", m[0]) + builder.col += 1 + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]) + txt$1.setAttribute("cm-text", m[0]) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) } + else { content.appendChild(txt$1) } + builder.col += 1 + } + builder.map.push(builder.pos, builder.pos + 1, txt$1) + builder.pos++ + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || "" + if (startStyle) { fullStyle += startStyle } + if (endStyle) { fullStyle += endStyle } + var token = elt("span", [content], fullStyle, css) + if (title) { token.title = title } + return builder.content.appendChild(token) + } + builder.content.appendChild(content) +} + +function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = "" + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i) + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0" } + result += ch + spaceBefore = ch == " " + } + return result +} + +// Work around nonsense dimensions being reported for stretches of +// right-to-left text. +function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border" + var start = builder.pos, end = start + text.length + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0) + for (var i = 0; i < order.length; i++) { + part = order[i] + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css) + startStyle = null + text = text.slice(part.to - start) + start = part.to + } + } +} + +function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")) } + widget.setAttribute("cm-marker", marker.id) + } + if (widget) { + builder.cm.display.input.setUneditable(widget) + builder.content.appendChild(widget) + } + builder.pos += size + builder.trailingSpace = false +} + +// Outputs a number of spans to make up a line, taking highlighting +// and marked text into account. +function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0 + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = "" + collapsed = null; nextChange = Infinity + var foundBookmarks = [], endStyles = (void 0) + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m) + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to + spanEndStyle = "" + } + if (m.className) { spanStyle += " " + m.className } + if (m.css) { css = (css ? css + ";" : "") + m.css } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) } + if (m.title && !title) { title = m.title } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null) + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange) + while (true) { + if (text) { + var end = pos + text.length + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css) + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end + spanStartStyle = "" + } + text = allText.slice(at, at = styles[i++]) + style = interpretTokenStyle(styles[i++], builder.cm.options) + } + } +} + + +// These objects are used to represent the visible (currently drawn) +// part of the document. A LineView may correspond to multiple +// logical lines, if those are connected by collapsed ranges. +function LineView(doc, line, lineN) { + // The starting line + this.line = line + // Continuing lines, if any + this.rest = visualLineContinued(line) + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1 + this.node = this.text = null + this.hidden = lineIsHidden(doc, line) +} + +// Create a range of LineView objects for the given lines. +function buildViewArray(cm, from, to) { + var array = [], nextPos + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos) + nextPos = pos + view.size + array.push(view) + } + return array +} + +var operationGroup = null + +function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op) + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + } + } +} + +function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0 + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null) } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j] + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } } + } + } while (i < callbacks.length) +} + +function finishOperation(op, endCb) { + var group = op.ownsGroup + if (!group) { return } + + try { fireCallbacksForOps(group) } + finally { + operationGroup = null + endCb(group) + } +} + +var orphanDelayedCallbacks = null + +// Often, we want to signal events at a point where we are in the +// middle of some work, but don't want the handler to start calling +// other methods on the editor, which might be in an inconsistent +// state or simply not expect any other events to happen. +// signalLater looks whether there are any handlers, and schedules +// them to be executed when the last operation ends, or, if no +// operation is active, when a timeout fires. +function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type) + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list + if (operationGroup) { + list = operationGroup.delayedCallbacks + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks + } else { + list = orphanDelayedCallbacks = [] + setTimeout(fireOrphanDelayed, 0) + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }) + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); +} + +function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks + orphanDelayedCallbacks = null + for (var i = 0; i < delayed.length; ++i) { delayed[i]() } +} + +// When an aspect of a line changes, a string is added to +// lineView.changes. This updates the relevant part of the line's +// DOM structure. +function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j] + if (type == "text") { updateLineText(cm, lineView) } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) } + else if (type == "class") { updateLineClasses(cm, lineView) } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims) } + } + lineView.changes = null +} + +// Lines with gutter elements, widgets or a background class need to +// be wrapped, and have the extra elements added to the wrapper div +function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative") + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) } + lineView.node.appendChild(lineView.text) + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 } + } + return lineView.node +} + +function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass + if (cls) { cls += " CodeMirror-linebackground" } + if (lineView.background) { + if (cls) { lineView.background.className = cls } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null } + } else if (cls) { + var wrap = ensureLineWrapped(lineView) + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild) + cm.display.input.setUneditable(lineView.background) + } +} + +// Wrapper around buildLineContent which will reuse the structure +// in display.externalMeasured when possible. +function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null + lineView.measure = ext.measure + return ext.built + } + return buildLineContent(cm, lineView) +} + +// Redraw the line's text. Interacts with the background and text +// classes because the mode may output tokens that influence these +// classes. +function updateLineText(cm, lineView) { + var cls = lineView.text.className + var built = getLineContent(cm, lineView) + if (lineView.text == lineView.node) { lineView.node = built.pre } + lineView.text.parentNode.replaceChild(built.pre, lineView.text) + lineView.text = built.pre + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass + lineView.textClass = built.textClass + updateLineClasses(cm, lineView) + } else if (cls) { + lineView.text.className = cls + } +} + +function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView) + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass } + else if (lineView.node != lineView.text) + { lineView.node.className = "" } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass + lineView.text.className = textClass || "" +} + +function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter) + lineView.gutter = null + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground) + lineView.gutterBackground = null + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView) + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(lineView.gutterBackground) + wrap.insertBefore(lineView.gutterBackground, lineView.text) + } + var markers = lineView.line.gutterMarkers + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView) + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(gutterWrap) + wrap$1.insertBefore(gutterWrap, lineView.text) + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) } + if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id] + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) } + } } + } +} + +function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null } + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling + if (node.className == "CodeMirror-linewidget") + { lineView.node.removeChild(node) } + } + insertLineWidgets(cm, lineView, dims) +} + +// Build a line's DOM representation from scratch +function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView) + lineView.text = lineView.node = built.pre + if (built.bgClass) { lineView.bgClass = built.bgClass } + if (built.textClass) { lineView.textClass = built.textClass } + + updateLineClasses(cm, lineView) + updateLineGutter(cm, lineView, lineN, dims) + insertLineWidgets(cm, lineView, dims) + return lineView.node +} + +// A lineView may contain multiple logical lines (when merged by +// collapsed spans). The widgets for all of them need to be drawn. +function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true) + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } } +} + +function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView) + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget") + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") } + positionLineWidget(widget, node, lineView, dims) + cm.display.input.setUneditable(node) + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text) } + else + { wrap.appendChild(node) } + signalLater(widget, "redraw") + } +} + +function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + ;(lineView.alignable || (lineView.alignable = [])).push(node) + var width = dims.wrapperWidth + node.style.left = dims.fixedPos + "px" + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth + node.style.paddingLeft = dims.gutterTotalWidth + "px" + } + node.style.width = width + "px" + } + if (widget.coverGutter) { + node.style.zIndex = 5 + node.style.position = "relative" + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" } + } +} + +function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;" + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) + } + return widget.height = widget.node.parentNode.offsetHeight +} + +// Return true when the given mouse event happened in a widget +function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } +} + +// POSITION MEASUREMENT + +function paddingTop(display) {return display.lineSpace.offsetTop} +function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} +function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")) + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)} + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data } + return data +} + +function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } +function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth +} +function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight +} + +// Ensure the lineView.wrapping.heights array is populated. This is +// an array of bottom offsets for the lines that make up a drawn +// line. When lineWrapping is on, there might be more than one +// height. +function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping + var curWidth = wrapping && displayWidth(cm) + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = [] + if (wrapping) { + lineView.measure.width = curWidth + var rects = lineView.text.firstChild.getClientRects() + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1] + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top) } + } + } + heights.push(rect.bottom - rect.top) + } +} + +// Find a line map (mapping character offsets to text nodes) and a +// measurement cache for the given line number. (A line view might +// contain multiple lines when collapsed ranges are present.) +function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } +} + +// Render a line into the hidden node display.externalMeasured. Used +// when measurement is needed for a line that's not in the viewport. +function updateExternalMeasurement(cm, line) { + line = visualLine(line) + var lineN = lineNo(line) + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN) + view.lineN = lineN + var built = view.built = buildLineContent(cm, view) + view.text = built.pre + removeChildrenAndAdd(cm.display.lineMeasure, built.pre) + return view +} + +// Get a {top, bottom, left, right} box (in line-local coordinates) +// for a given character. +function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) +} + +// Find a line view that corresponds to the given line number. +function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } +} + +// Measurement can be split in two steps, the set-up work that +// applies to the whole line, and the measurement of the actual +// character. Functions like coordsChar, that need to do a lot of +// measurements in a row, can thus ensure that the set-up work is +// only done once. +function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line) + var view = findViewForLine(cm, lineN) + if (view && !view.text) { + view = null + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)) + cm.curOp.forceUpdate = true + } + if (!view) + { view = updateExternalMeasurement(cm, line) } + + var info = mapFromLineView(view, line, lineN) + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } +} + +// Given a prepared measurement object, measures the position of an +// actual character (or fetches it from the cache). +function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1 } + var key = ch + (bias || ""), found + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key] + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect() } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect) + prepared.hasHeights = true + } + found = measureCharInner(cm, prepared, ch, bias) + if (!found.bogus) { prepared.cache[key] = found } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} +} + +var nullRect = {left: 0, right: 0, top: 0, bottom: 0} + +function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i] + mEnd = map[i + 1] + if (ch < mStart) { + start = 0; end = 1 + collapse = "left" + } else if (ch < mEnd) { + start = ch - mStart + end = start + 1 + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart + start = end - 1 + if (ch >= mEnd) { collapse = "right" } + } + if (start != null) { + node = map[i + 2] + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias } + if (bias == "left" && start == 0) + { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2] + collapse = "left" + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2] + collapse = "right" + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} +} + +function getUsefulRect(rects, bias) { + var rect = nullRect + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect +} + +function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias) + var node = place.node, start = place.start, end = place.end, collapse = place.collapse + + var rect + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect() } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) } + if (rect.left || rect.right || start == 0) { break } + end = start + start = start - 1 + collapse = "right" + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right" } + var rects + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0] } + else + { rect = node.getBoundingClientRect() } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0] + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} } + else + { rect = nullRect } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top + var mid = (rtop + rbot) / 2 + var heights = prepared.view.measure.heights + var i = 0 + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i] + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot} + if (!rect.left && !rect.right) { result.bogus = true } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot } + + return result +} + +// Work around problem with bounding client rects on ranges being +// returned incorrectly when zoomed on IE10 and below. +function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI + var scaleY = screen.logicalYDPI / screen.deviceYDPI + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} +} + +function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {} + lineView.measure.heights = null + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {} } } + } +} + +function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null + removeChildren(cm.display.lineMeasure) + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]) } +} + +function clearCaches(cm) { + clearLineMeasurementCache(cm) + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true } + cm.display.lineNumChars = null +} + +function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft +} +function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop +} + +// Converts a {top, bottom, left, right} box from line-local +// coordinates into another coordinate system. Context may be one of +// "line", "div" (display.lineDiv), "local"./null (editor), "window", +// or "page". +function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets && lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]) + rect.top += size; rect.bottom += size + } } } + if (context == "line") { return rect } + if (!context) { context = "local" } + var yOff = heightAtLine(lineObj) + if (context == "local") { yOff += paddingTop(cm.display) } + else { yOff -= cm.display.viewOffset } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect() + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()) + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()) + rect.left += xOff; rect.right += xOff + } + rect.top += yOff; rect.bottom += yOff + return rect +} + +// Coverts a box from "div" coords to another coordinate system. +// Context may be "window", "page", "div", or "local"./null. +function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX() + top -= pageScrollY() + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect() + left += localBox.left + top += localBox.top + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect() + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} +} + +function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line) } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) +} + +// Returns a box for a given cursor position, which may have an +// 'other' property containing the position of the secondary cursor +// on a bidi boundary. +// A cursor Pos(line, char, "before") is on the same visual line as `char - 1` +// and after `char - 1` in writing order of `char - 1` +// A cursor Pos(line, char, "after") is on the same visual line as `char` +// and before `char` in writing order of `char` +// Examples (upper-case letters are RTL, lower-case are LTR): +// Pos(0, 1, ...) +// before after +// ab a|b a|b +// aB a|B aB| +// Ab |Ab A|b +// AB B|A B|A +// Every position after the last character on a line is considered to stick +// to the last character on the line. +function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line) + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight) + if (right) { m.left = m.right; } else { m.right = m.left } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky + if (ch >= lineObj.text.length) { + ch = lineObj.text.length + sticky = "before" + } else if (ch <= 0) { + ch = 0 + sticky = "after" + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = (part.level % 2) != 0 + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky) + var other = bidiOther + var val = getBidi(ch, partPos, sticky == "before") + if (other != null) { val.other = getBidi(ch, other, sticky != "before") } + return val +} + +// Used to cheaply estimate the coordinates for a position. Used for +// intermediate scroll updates. +function estimateCoords(cm, pos) { + var left = 0 + pos = clipPos(cm.doc, pos) + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch } + var lineObj = getLine(cm.doc, pos.line) + var top = heightAtLine(lineObj) + paddingTop(cm.display) + return {left: left, right: left, top: top, bottom: top + lineObj.height} +} + +// Positions returned by coordsChar contain some extra information. +// xRel is the relative x position of the input coordinates compared +// to the found position (so xRel > 0 means the coordinates are to +// the right of the character position, for example). When outside +// is true, that means the coordinates lie outside the line's +// vertical range. +function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky) + pos.xRel = xRel + if (outside) { pos.outside = true } + return pos +} + +// Compute the character position closest to the given coordinates. +// Input must be lineSpace-local ("div" coordinate system). +function coordsChar(cm, x, y) { + var doc = cm.doc + y += cm.display.viewOffset + if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1 + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } + if (x < 0) { x = 0 } + + var lineObj = getLine(doc, lineN) + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y) + var merged = collapsedSpanAtEnd(lineObj) + var mergedPos = merged && merged.find(0, true) + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + { lineN = lineNo(lineObj = mergedPos.to.line) } + else + { return found } + } +} + +function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + var measure = function (ch) { return intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line"); } + var end = lineObj.text.length + var begin = findFirst(function (ch) { return measure(ch - 1).bottom <= y; }, end, 0) + end = findFirst(function (ch) { return measure(ch).top > y; }, begin, end) + return {begin: begin, end: end} +} + +function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) +} + +function coordsCharInner(cm, lineObj, lineNo, x, y) { + y -= heightAtLine(lineObj) + var begin = 0, end = lineObj.text.length + var preparedMeasure = prepareMeasureForLine(cm, lineObj) + var pos + var order = getOrder(lineObj, cm.doc.direction) + if (order) { + if (cm.options.lineWrapping) { + ;var assign; + ((assign = wrappedLineExtent(cm, lineObj, preparedMeasure, y), begin = assign.begin, end = assign.end, assign)) + } + pos = new Pos(lineNo, begin) + var beginLeft = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left + var dir = beginLeft < x ? 1 : -1 + var prevDiff, diff = beginLeft - x, prevPos + do { + prevDiff = diff + prevPos = pos + pos = moveVisually(cm, lineObj, pos, dir) + if (pos == null || pos.ch < begin || end <= (pos.sticky == "before" ? pos.ch - 1 : pos.ch)) { + pos = prevPos + break + } + diff = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left - x + } while ((dir < 0) != (diff < 0) && (Math.abs(diff) <= Math.abs(prevDiff))) + if (Math.abs(diff) > Math.abs(prevDiff)) { + if ((diff < 0) == (prevDiff < 0)) { throw new Error("Broke out of infinite loop in coordsCharInner") } + pos = prevPos + } + } else { + var ch = findFirst(function (ch) { + var box = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line") + if (box.top > y) { + // For the cursor stickiness + end = Math.min(ch, end) + return true + } + else if (box.bottom <= y) { return false } + else if (box.left > x) { return true } + else if (box.right < x) { return false } + else { return (x - box.left < box.right - x) } + }, begin, end) + ch = skipExtendingChars(lineObj.text, ch, 1) + pos = new Pos(lineNo, ch, ch == end ? "before" : "after") + } + var coords = cursorCoords(cm, pos, "line", lineObj, preparedMeasure) + if (y < coords.top || coords.bottom < y) { pos.outside = true } + pos.xRel = x < coords.left ? -1 : (x > coords.right ? 1 : 0) + return pos +} + +var measureText +// Compute the default text height. +function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre") + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")) + measureText.appendChild(elt("br")) + } + measureText.appendChild(document.createTextNode("x")) + } + removeChildrenAndAdd(display.measure, measureText) + var height = measureText.offsetHeight / 50 + if (height > 3) { display.cachedTextHeight = height } + removeChildren(display.measure) + return height || 1 +} + +// Compute the default character width. +function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx") + var pre = elt("pre", [anchor]) + removeChildrenAndAdd(display.measure, pre) + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10 + if (width > 2) { display.cachedCharWidth = width } + return width || 10 +} + +// Do a bulk-read of the DOM positions and sizes needed to draw the +// view, so that we don't interleave reading and writing to the DOM. +function getDimensions(cm) { + var d = cm.display, left = {}, width = {} + var gutterLeft = d.gutters.clientLeft + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft + width[cm.options.gutters[i]] = n.clientWidth + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} +} + +// Computes display.scroller.scrollLeft + display.gutters.offsetWidth, +// but using getBoundingClientRect to get a sub-pixel-accurate +// result. +function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left +} + +// Returns a function that estimates the height of a line, to use as +// first approximation until the line becomes visible (and is thus +// properly measurable). +function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3) + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0 + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } +} + +function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm) + doc.iter(function (line) { + var estHeight = est(line) + if (estHeight != line.height) { updateLineHeight(line, estHeight) } + }) +} + +// Given a mouse event, find the corresponding position. If liberal +// is false, it checks whether a gutter or scrollbar was clicked, +// and returns null if it was. forRect is used by rectangular +// selections, and tries to estimate a character position even for +// coordinates beyond the right of the text. +function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect() + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top } + catch (e) { return null } + var coords = coordsChar(cm, x, y), line + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)) + } + return coords +} + +// Find the view element corresponding to a given line. Return null +// when the line isn't visible. +function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom + if (n < 0) { return null } + var view = cm.display.view + for (var i = 0; i < view.length; i++) { + n -= view[i].size + if (n < 0) { return i } + } +} + +function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()) +} + +function prepareSelection(cm, primary) { + var doc = cm.doc, result = {} + var curFragment = result.cursors = document.createDocumentFragment() + var selFragment = result.selection = document.createDocumentFragment() + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (primary === false && i == doc.sel.primIndex) { continue } + var range = doc.sel.ranges[i] + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } + var collapsed = range.empty() + if (collapsed || cm.options.showCursorWhenSelecting) + { drawSelectionCursor(cm, range.head, curFragment) } + if (!collapsed) + { drawSelectionRange(cm, range, selFragment) } + } + return result +} + +// Draws a cursor for the given range +function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine) + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")) + cursor.style.left = pos.left + "px" + cursor.style.top = pos.top + "px" + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px" + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")) + otherCursor.style.display = "" + otherCursor.style.left = pos.other.left + "px" + otherCursor.style.top = pos.other.top + "px" + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px" + } +} + +// Draws the given range as a highlighted selection +function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc + var fragment = document.createDocumentFragment() + var padding = paddingH(cm.display), leftSide = padding.left + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right + + function add(left, top, width, bottom) { + if (top < 0) { top = 0 } + top = Math.round(top) + bottom = Math.round(bottom) + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))) + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line) + var lineLen = lineObj.text.length + var start, end + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + iterateBidiSections(getOrder(lineObj, doc.direction), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right + if (from == to) { + rightPos = leftPos + left = right = leftPos.left + } else { + rightPos = coords(to - 1, "right") + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp } + left = leftPos.left + right = rightPos.right + } + if (fromArg == null && from == 0) { left = leftSide } + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom) + left = leftSide + if (leftPos.bottom < rightPos.top) { add(left, leftPos.bottom, null, rightPos.top) } + } + if (toArg == null && to == lineLen) { right = rightSide } + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + { start = leftPos } + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + { end = rightPos } + if (left < leftSide + 1) { left = leftSide } + add(left, rightPos.top, right - left, rightPos.bottom) + }) + return {start: start, end: end} + } + + var sFrom = range.from(), sTo = range.to() + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch) + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line) + var singleVLine = visualLine(fromLine) == visualLine(toLine) + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom) + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom) + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom) + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top) } + } + + output.appendChild(fragment) +} + +// Cursor-blinking +function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display + clearInterval(display.blinker) + var on = true + display.cursorDiv.style.visibility = "" + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, + cm.options.cursorBlinkRate) } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden" } +} + +function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } +} + +function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false + onBlur(cm) + } }, 100) +} + +function onFocus(cm, e) { + if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e) + cm.state.focused = true + addClass(cm.display.wrapper, "CodeMirror-focused") + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset() + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730 + } + cm.display.input.receivedFocus() + } + restartBlink(cm) +} +function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e) + cm.state.focused = false + rmClass(cm.display.wrapper, "CodeMirror-focused") + } + clearInterval(cm.display.blinker) + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150) +} + +// Re-align line numbers and gutter marks to compensate for +// horizontal scrolling. +function alignHorizontally(cm) { + var display = cm.display, view = display.view + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft + var gutterW = display.gutters.offsetWidth, left = comp + "px" + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left } + } + var align = view[i].alignable + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px" } +} + +// Used to ensure that the line number gutter is still the right +// size for the current document size. Returns true when an update +// is needed. +function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")) + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW + display.lineGutter.style.width = "" + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1 + display.lineNumWidth = display.lineNumInnerWidth + padding + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1 + display.lineGutter.style.width = display.lineNumWidth + "px" + updateGutterSpace(cm) + return true + } + return false +} + +// Read the actual heights of the rendered lines, and update their +// stored heights to match. +function updateHeightsInViewport(cm) { + var display = cm.display + var prevBottom = display.lineDiv.offsetTop + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height = (void 0) + if (cur.hidden) { continue } + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight + height = bot - prevBottom + prevBottom = bot + } else { + var box = cur.node.getBoundingClientRect() + height = box.bottom - box.top + } + var diff = cur.line.height - height + if (height < 2) { height = textHeight(display) } + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height) + updateWidgetHeight(cur.line) + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]) } } + } + } +} + +// Read and store the height of line widgets associated with the +// given line. +function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) + { line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight } } +} + +// Compute the lines that are visible in a given viewport (defaults +// the the current scroll position). viewport may contain top, +// height, and ensure (see op.scrollToPos) properties. +function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop + top = Math.floor(top - paddingTop(display)) + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom) + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line + if (ensureFrom < from) { + from = ensureFrom + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight) + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight) + to = ensureTo + } + } + return {from: from, to: Math.max(to, from + 1)} +} + +// Sync the scrollable area and scrollbars, ensure the viewport +// covers the visible area. +function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + cm.doc.scrollTop = val + if (!gecko) { updateDisplaySimple(cm, {top: val}) } + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val } + cm.display.scrollbars.setScrollTop(val) + if (gecko) { updateDisplaySimple(cm) } + startWorker(cm, 100) +} +// Sync scroller and scrollbar, ensure the gutter elements are +// aligned. +function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) { return } + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) + cm.doc.scrollLeft = val + alignHorizontally(cm) + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val } + cm.display.scrollbars.setScrollLeft(val) +} + +// Since the delta values reported on mouse wheel events are +// unstandardized between browsers and even browser versions, and +// generally horribly unpredictable, this code starts by measuring +// the scroll effect that the first few mouse wheel events have, +// and, from that, detects the way it can convert deltas to pixel +// offsets afterwards. +// +// The reason we want to know the amount a wheel event will scroll +// is that it gives us a chance to update the display before the +// actual scrolling happens, reducing flickering. + +var wheelSamples = 0; +var wheelPixelsPerUnit = null; +// Fill in a browser-detected starting value on browsers where we +// know one. These don't have to be accurate -- the result of them +// being wrong would just be a slight flicker on the first wheel +// scroll (if it is large enough). +if (ie) { wheelPixelsPerUnit = -.53 } +else if (gecko) { wheelPixelsPerUnit = 15 } +else if (chrome) { wheelPixelsPerUnit = -.7 } +else if (safari) { wheelPixelsPerUnit = -1/3 } + +function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail } + else if (dy == null) { dy = e.wheelDelta } + return {x: dx, y: dy} +} +function wheelEventPixels(e) { + var delta = wheelEventDelta(e) + delta.x *= wheelPixelsPerUnit + delta.y *= wheelPixelsPerUnit + return delta +} + +function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y + + var display = cm.display, scroll = display.scroller + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth + var canScrollY = scroll.scrollHeight > scroll.clientHeight + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + { setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))) } + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))) + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e) } + display.wheelStartX = null // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight + if (pixels < 0) { top = Math.max(0, top + pixels - 50) } + else { bot = Math.min(cm.doc.height, bot + pixels + 50) } + updateDisplaySimple(cm, {top: top, bottom: bot}) + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop + display.wheelDX = dx; display.wheelDY = dy + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX + var movedY = scroll.scrollTop - display.wheelStartY + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX) + display.wheelStartX = display.wheelStartY = null + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1) + ++wheelSamples + }, 200) + } else { + display.wheelDX += dx; display.wheelDY += dy + } + } +} + +// SCROLLBARS + +// Prepare DOM reads needed to update the scrollbars. Done in one +// shot to minimize update/measure roundtrips. +function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth + var docH = Math.round(cm.doc.height + paddingVert(cm.display)) + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } +} + +var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar") + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar") + place(vert); place(horiz) + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") } + }) + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") } + }) + + this.checkedZeroWidth = false + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" } +}; + +NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1 + var needsV = measure.scrollHeight > measure.clientHeight + 1 + var sWidth = measure.nativeBarWidth + + if (needsV) { + this.vert.style.display = "block" + this.vert.style.bottom = needsH ? sWidth + "px" : "0" + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0) + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px" + } else { + this.vert.style.display = "" + this.vert.firstChild.style.height = "0" + } + + if (needsH) { + this.horiz.style.display = "block" + this.horiz.style.right = needsV ? sWidth + "px" : "0" + this.horiz.style.left = measure.barLeft + "px" + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0) + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px" + } else { + this.horiz.style.display = "" + this.horiz.firstChild.style.width = "0" + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack() } + this.checkedZeroWidth = true + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} +}; + +NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") } +}; + +NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert") } +}; + +NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px" + this.horiz.style.height = this.vert.style.width = w + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none" + this.disableHoriz = new Delayed + this.disableVert = new Delayed +}; + +NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto" + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect() + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1) + if (elt != bar) { bar.style.pointerEvents = "none" } + else { delay.set(1000, maybeDisable) } + } + delay.set(1000, maybeDisable) +}; + +NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode + parent.removeChild(this.horiz) + parent.removeChild(this.vert) +}; + +var NullScrollbars = function () {}; + +NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; +NullScrollbars.prototype.setScrollLeft = function () {}; +NullScrollbars.prototype.setScrollTop = function () {}; +NullScrollbars.prototype.clear = function () {}; + +function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm) } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight + updateScrollbarsInner(cm, measure) + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm) } + updateScrollbarsInner(cm, measureForScrollbars(cm)) + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight + } +} + +// Re-synchronize the fake scrollbars with the actual size of the +// content. +function updateScrollbarsInner(cm, measure) { + var d = cm.display + var sizes = d.scrollbars.update(measure) + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px" + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px" + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block" + d.scrollbarFiller.style.height = sizes.bottom + "px" + d.scrollbarFiller.style.width = sizes.right + "px" + } else { d.scrollbarFiller.style.display = "" } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block" + d.gutterFiller.style.height = sizes.bottom + "px" + d.gutterFiller.style.width = measure.gutterWidth + "px" + } else { d.gutterFiller.style.display = "" } +} + +var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars} + +function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear() + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller) + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) } + }) + node.setAttribute("cm-not-content", "true") + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos) } + else { setScrollTop(cm, pos) } + }, cm) + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) } +} + +// SCROLLING THINGS INTO VIEW + +// If an editor sits on the top or bottom of the window, partially +// scrolled out of view, this ensures that the cursor is visible. +function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null + if (rect.top + box.top < 0) { doScroll = true } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")) + cm.display.lineSpace.appendChild(scrollNode) + scrollNode.scrollIntoView(doScroll) + cm.display.lineSpace.removeChild(scrollNode) + } +} + +// Scroll a given position into view (immediately), verifying that +// it actually became visible (as line heights are accurately +// measured, the position of something may 'drift' during drawing). +function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0 } + var rect + for (var limit = 0; limit < 5; limit++) { + var changed = false + var coords = cursorCoords(cm, pos) + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end) + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin} + var scrollPos = calculateScrollPos(cm, rect) + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop) + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft) + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true } + } + if (!changed) { break } + } + return rect +} + +// Scroll a given set of coordinates into view (immediately). +function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect) + if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop) } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) } +} + +// Calculate a new scroll position needed to scroll the given +// rectangle into view. Returns an object with scrollTop and +// scrollLeft properties. When these are undefined, the +// vertical/horizontal position does not need to be adjusted. +function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display) + if (rect.top < 0) { rect.top = 0 } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop + var screen = displayHeight(cm), result = {} + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen } + var docBottom = cm.doc.height + paddingVert(display) + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen) + if (newTop != screentop) { result.scrollTop = newTop } + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0) + var tooWide = rect.right - rect.left > screenw + if (tooWide) { rect.right = rect.left + screenw } + if (rect.left < 10) + { result.scrollLeft = 0 } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)) } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw } + return result +} + +// Store a relative adjustment to the scroll position in the current +// operation (to be applied when the operation finishes). +function addToScrollPos(cm, left, top) { + if (left != null || top != null) { resolveScrollToPos(cm) } + if (left != null) + { cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left } + if (top != null) + { cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top } +} + +// Make sure that at the end of the operation the current cursor is +// shown. +function ensureCursorVisible(cm) { + resolveScrollToPos(cm) + var cur = cm.getCursor(), from = cur, to = cur + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur + to = Pos(cur.line, cur.ch + 1) + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin} +} + +// When an operation has its scrollToPos property set, and another +// scroll action is applied before the end of the operation, this +// 'simulates' scrolling that position into view in a cheap way, so +// that the effect of intermediate scroll commands is not ignored. +function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos + if (range) { + cm.curOp.scrollToPos = null + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to) + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - range.margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + range.margin + }) + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop) + } +} + +// Operations are used to wrap a series of changes to the editor +// state in such a way that each change won't have to update the +// cursor and display (which would be awkward, slow, and +// error-prone). Instead, display updates are batched and then all +// combined and executed at once. + +var nextOpId = 0 +// Start a new operation. +function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + } + pushOperation(cm.curOp) +} + +// Finish an operation, updating the display and signalling delayed events +function endOperation(cm) { + var op = cm.curOp + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null } + endOperations(group) + }) +} + +// The DOM updates done when an operation finishes are batched so +// that the minimum number of relayouts are required. +function endOperations(group) { + var ops = group.ops + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]) } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]) } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]) } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]) } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]) } +} + +function endOperation_R1(op) { + var cm = op.cm, display = cm.display + maybeClipScrollbars(cm) + if (op.updateMaxLine) { findMaxLine(cm) } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate) +} + +function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update) +} + +function endOperation_R2(op) { + var cm = op.cm, display = cm.display + if (op.updatedDisplay) { updateHeightsInViewport(cm) } + + op.barMeasure = measureForScrollbars(cm) + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3 + cm.display.sizerWidth = op.adjustWidthTo + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth) + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)) + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(op.focus) } +} + +function endOperation_W2(op) { + var cm = op.cm + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px" + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) } + cm.display.maxLineChanged = false + } + + var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus) } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure) } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure) } + + if (op.selectionChanged) { restartBlink(cm) } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing) } + if (takeFocus) { ensureFocus(op.cm) } +} + +function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { + doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)) + display.scrollbars.setScrollTop(doc.scrollTop) + display.scroller.scrollTop = doc.scrollTop + } + if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { + doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)) + display.scrollbars.setScrollLeft(doc.scrollLeft) + display.scroller.scrollLeft = doc.scrollLeft + alignHorizontally(cm) + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin) + maybeScrollWindow(cm, rect) + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs) } + if (op.update) + { op.update.finish() } +} + +// Run the given function in an operation +function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm) + try { return f() } + finally { endOperation(cm) } +} +// Wraps a function in an operation. Returns the wrapped function. +function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm) + try { return f.apply(cm, arguments) } + finally { endOperation(cm) } + } +} +// Used to add methods to editor and doc instances, wrapping them in +// operations. +function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this) + try { return f.apply(this, arguments) } + finally { endOperation(this) } + } +} +function docMethodOp(f) { + return function() { + var cm = this.cm + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm) + try { return f.apply(this, arguments) } + finally { endOperation(cm) } + } +} + +// Updates the display.view data structure for a given change to the +// document. From and to are in pre-change coordinates. Lendiff is +// the amount of lines added or subtracted by the change. This is +// used for changes that span multiple lines, or change the way +// lines are divided into visual lines. regLineChange (below) +// registers single-line changes. +function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first } + if (to == null) { to = cm.doc.first + cm.doc.size } + if (!lendiff) { lendiff = 0 } + + var display = cm.display + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from } + + cm.curOp.viewChanged = true + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm) } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm) + } else { + display.viewFrom += lendiff + display.viewTo += lendiff + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm) + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cut) { + display.view = display.view.slice(cut.index) + display.viewFrom = cut.lineN + display.viewTo += lendiff + } else { + resetView(cm) + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1) + if (cut$1) { + display.view = display.view.slice(0, cut$1.index) + display.viewTo = cut$1.lineN + } else { + resetView(cm) + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1) + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)) + display.viewTo += lendiff + } else { + resetView(cm) + } + } + + var ext = display.externalMeasured + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null } + } +} + +// Register a change to a single line. Type must be one of "text", +// "gutter", "class", "widget" +function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true + var display = cm.display, ext = cm.display.externalMeasured + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)] + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []) + if (indexOf(arr, type) == -1) { arr.push(type) } +} + +// Clear the view. +function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first + cm.display.view = [] + cm.display.viewOffset = 0 +} + +function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom + for (var i = 0; i < index; i++) + { n += view[i].size } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN + index++ + } else { + diff = n - oldN + } + oldN += diff; newN += diff + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size + index += dir + } + return {index: index, lineN: newN} +} + +// Force the view to cover a given range, adding empty view element +// or clipping off existing ones as needed. +function adjustView(cm, from, to) { + var display = cm.display, view = display.view + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to) + display.viewFrom = from + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)) } + display.viewFrom = from + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)) } + } + display.viewTo = to +} + +// Count the number of lines in the view whose DOM representation is +// out of date (or nonexistent). +function countDirtyView(cm) { + var view = cm.display.view, dirty = 0 + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty } + } + return dirty +} + +// HIGHLIGHT WORKER + +function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)) } +} + +function highlightWorker(cm) { + var doc = cm.doc + if (doc.frontier < doc.first) { doc.frontier = doc.first } + if (doc.frontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)) + var changedLines = [] + + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength + var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true) + line.styles = highlighted.styles + var oldCls = line.styleClasses, newCls = highlighted.classes + if (newCls) { line.styleClasses = newCls } + else if (oldCls) { line.styleClasses = null } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass) + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] } + if (ischange) { changedLines.push(doc.frontier) } + line.stateAfter = tooLong ? state : copyState(doc.mode, state) + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, state) } + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null + } + ++doc.frontier + if (+new Date > end) { + startWorker(cm, cm.options.workDelay) + return true + } + }) + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text") } + }) } +} + +// DISPLAY DRAWING + +var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display + + this.viewport = viewport + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport) + this.editorIsHidden = !display.wrapper.offsetWidth + this.wrapperHeight = display.wrapper.clientHeight + this.wrapperWidth = display.wrapper.clientWidth + this.oldDisplayWidth = displayWidth(cm) + this.force = force + this.dims = getDimensions(cm) + this.events = [] +}; + +DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments) } +}; +DisplayUpdate.prototype.finish = function () { + var this$1 = this; + + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this$1.events[i]) } +}; + +function maybeClipScrollbars(cm) { + var display = cm.display + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth + display.heightForcer.style.height = scrollGap(cm) + "px" + display.sizer.style.marginBottom = -display.nativeBarWidth + "px" + display.sizer.style.borderRightWidth = scrollGap(cm) + "px" + display.scrollbarsClipped = true + } +} + +// Does the actual updating of the line display. Bails out +// (returning false) when there is nothing to be done and forced is +// false. +function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc + + if (update.editorIsHidden) { + resetView(cm) + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm) + update.dims = getDimensions(cm) + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first) + var to = Math.min(end, update.visible.to + cm.options.viewportMargin) + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from) + to = visualLineEndNo(cm.doc, to) + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth + adjustView(cm, from, to) + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)) + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px" + + var toUpdate = countDirtyView(cm) + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt() + if (toUpdate > 4) { display.lineDiv.style.display = "none" } + patchDisplay(cm, display.updateLineNumbers, update.dims) + if (toUpdate > 4) { display.lineDiv.style.display = "" } + display.renderedView = display.view + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) { focused.focus() } + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv) + removeChildren(display.selectionDiv) + display.gutters.style.height = display.sizer.style.minHeight = 0 + + if (different) { + display.lastWrapHeight = update.wrapperHeight + display.lastWrapWidth = update.wrapperWidth + startWorker(cm, 400) + } + + display.updateLineNumbers = null + + return true +} + +function postUpdateDisplay(cm, update) { + var viewport = update.viewport + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport) + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + } + + update.signal(cm, "update", cm) + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo) + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo + } +} + +function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport) + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm) + postUpdateDisplay(cm, update) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + update.finish() + } +} + +// Sync the actual display DOM structure with display.view, removing +// nodes for lines that are no longer in view, and creating the ones +// that are not there yet, and updating the ones that are out of +// date. +function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers + var container = display.lineDiv, cur = container.firstChild + + function rm(node) { + var next = node.nextSibling + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none" } + else + { node.parentNode.removeChild(node) } + return next + } + + var view = display.view, lineN = display.viewFrom + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims) + container.insertBefore(node, cur) + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur) } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false } + updateLineForChanges(cm, lineView, lineN, dims) + } + if (updateNumber) { + removeChildren(lineView.lineNumber) + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))) + } + cur = lineView.node.nextSibling + } + lineN += lineView.size + } + while (cur) { cur = rm(cur) } +} + +function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth + cm.display.sizer.style.marginLeft = width + "px" +} + +function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px" + cm.display.heightForcer.style.top = measure.docHeight + "px" + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px" +} + +// Rebuild the gutter elements, ensure the margin to the left of the +// code matches their width. +function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters + removeChildren(gutters) + var i = 0 + for (; i < specs.length; ++i) { + var gutterClass = specs[i] + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)) + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt + gElt.style.width = (cm.display.lineNumWidth || 1) + "px" + } + } + gutters.style.display = i ? "" : "none" + updateGutterSpace(cm) +} + +// Make sure the gutters options contains the element +// "CodeMirror-linenumbers" when the lineNumbers option is true. +function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers") + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]) + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0) + options.gutters.splice(found, 1) + } +} + +// Selection objects are immutable. A new one is created every time +// the selection changes. A selection is one or more non-overlapping +// (and non-touching) ranges, sorted, and an integer that indicates +// which one is the primary selection (the one that's scrolled into +// view, that getCursor returns, etc). +var Selection = function(ranges, primIndex) { + this.ranges = ranges + this.primIndex = primIndex +}; + +Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + +Selection.prototype.equals = function (other) { + var this$1 = this; + + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this$1.ranges[i], there = other.ranges[i] + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true +}; + +Selection.prototype.deepCopy = function () { + var this$1 = this; + + var out = [] + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) } + return new Selection(out, this.primIndex) +}; + +Selection.prototype.somethingSelected = function () { + var this$1 = this; + + for (var i = 0; i < this.ranges.length; i++) + { if (!this$1.ranges[i].empty()) { return true } } + return false +}; + +Selection.prototype.contains = function (pos, end) { + var this$1 = this; + + if (!end) { end = pos } + for (var i = 0; i < this.ranges.length; i++) { + var range = this$1.ranges[i] + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 +}; + +var Range = function(anchor, head) { + this.anchor = anchor; this.head = head +}; + +Range.prototype.from = function () { return minPos(this.anchor, this.head) }; +Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; +Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + +// Take an unsorted, potentially overlapping set of ranges, and +// build a selection out of it. 'Consumes' ranges array (modifying +// it). +function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex] + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }) + primIndex = indexOf(ranges, prim) + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1] + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()) + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head + if (i <= primIndex) { --primIndex } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)) + } + } + return new Selection(ranges, primIndex) +} + +function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) +} + +// Compute the position of the end of a change (its 'to' property +// refers to the pre-change end). +function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) +} + +// Adjust a position to refer to the post-change position of the +// same text, or the end of the change if the change covers it. +function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch } + return Pos(line, ch) +} + +function computeSelAfterChange(doc, change) { + var out = [] + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i] + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))) + } + return normalizeSelection(out, doc.sel.primIndex) +} + +function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } +} + +// Used by replaceSelections to allow moving the selection to the +// start or around the replaced test. Hint may be "start" or "around". +function computeReplacedSel(doc, changes, hint) { + var out = [] + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev + for (var i = 0; i < changes.length; i++) { + var change = changes[i] + var from = offsetPos(change.from, oldPrev, newPrev) + var to = offsetPos(changeEnd(change), oldPrev, newPrev) + oldPrev = change.to + newPrev = to + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0 + out[i] = new Range(inv ? to : from, inv ? from : to) + } else { + out[i] = new Range(from, from) + } + } + return new Selection(out, doc.sel.primIndex) +} + +// Used to get the editor into a consistent state again when options change. + +function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption) + resetModeState(cm) +} + +function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + }) + cm.doc.frontier = cm.doc.first + startWorker(cm, 100) + cm.state.modeGen++ + if (cm.curOp) { regChange(cm) } +} + +// DOCUMENT DATA STRUCTURE + +// By default, updates that start and end at the beginning of a line +// are treated specially, in order to make the association of line +// widgets and marker elements with the text behave more intuitive. +function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) +} + +// Perform a change on the document data structure. +function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight) + signalLater(line, "change", line, change) + } + function linesFor(start, end) { + var result = [] + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight)) } + return result + } + + var from = change.from, to = change.to, text = change.text + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line) + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)) + doc.remove(text.length, doc.size - text.length) + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1) + update(lastLine, lastLine.text, lastSpans) + if (nlines) { doc.remove(from.line, nlines) } + if (added.length) { doc.insert(from.line, added) } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans) + } else { + var added$1 = linesFor(1, text.length - 1) + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)) + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + doc.insert(from.line + 1, added$1) + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)) + doc.remove(from.line + 1, nlines) + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans) + var added$2 = linesFor(1, text.length - 1) + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) } + doc.insert(from.line + 1, added$2) + } + + signalLater(doc, "change", doc, change) +} + +// Call f for all linked documents. +function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i] + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared) + propagate(rel.doc, doc, shared) + } } + } + propagate(doc, null, true) +} + +// Attach a document to an editor. +function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc + doc.cm = cm + estimateLineHeights(cm) + loadMode(cm) + setDirectionClass(cm) + if (!cm.options.lineWrapping) { findMaxLine(cm) } + cm.options.mode = doc.modeOption + regChange(cm) +} + +function setDirectionClass(cm) { + ;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl") +} + +function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm) + regChange(cm) + }) +} + +function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = [] + this.undoDepth = Infinity + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0 + this.lastOp = this.lastSelOp = null + this.lastOrigin = this.lastSelOrigin = null + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1 +} + +// Create a history change event from an updateDoc-style change +// object. +function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)} + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1) + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true) + return histChange +} + +// Pop all selection events off the end of a history array. Stop at +// a change event. +function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array) + if (last.ranges) { array.pop() } + else { break } + } +} + +// Find the top change event in the history. Pop off selection +// events that are in the way. +function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done) + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop() + return lst(hist.done) + } +} + +// Register a change in the history. Merges changes that are within +// a single operation, or are close together with an origin that +// allows merging (starting with "+") into a single event. +function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history + hist.undone.length = 0 + var time = +new Date, cur + var last + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes) + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change) + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)) + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done) + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done) } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation} + hist.done.push(cur) + while (hist.done.length > hist.undoDepth) { + hist.done.shift() + if (!hist.done[0].ranges) { hist.done.shift() } + } + } + hist.done.push(selAfter) + hist.generation = ++hist.maxGeneration + hist.lastModTime = hist.lastSelTime = time + hist.lastOp = hist.lastSelOp = opId + hist.lastOrigin = hist.lastSelOrigin = change.origin + + if (!last) { signal(doc, "historyAdded") } +} + +function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0) + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) +} + +// Called whenever the selection changes, sets the new selection as +// the pending selection in the history, and pushes the old pending +// selection into the 'done' array when it was significantly +// different (in number of selected ranges, emptiness, or time). +function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel } + else + { pushSelectionToHistory(sel, hist.done) } + + hist.lastSelTime = +new Date + hist.lastSelOrigin = origin + hist.lastSelOp = opId + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone) } +} + +function pushSelectionToHistory(sel, dest) { + var top = lst(dest) + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel) } +} + +// Used to store marked span information in the history. +function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0 + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans } + ++n + }) +} + +// When un/re-doing restores text containing marked spans, those +// that have been explicitly cleared should not be restored. +function removeClearedSpans(spans) { + if (!spans) { return null } + var out + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } } + else if (out) { out.push(spans[i]) } + } + return !out ? spans : out.length ? out : null +} + +// Retrieve and filter the old marked spans stored in a change event. +function getOldSpans(doc, change) { + var found = change["spans_" + doc.id] + if (!found) { return null } + var nw = [] + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])) } + return nw +} + +// Used for un/re-doing changes from the history. Combines the +// result of computing the existing spans with the set of spans that +// existed in the history (so that deleting around a span and then +// undoing brings back the span). +function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change) + var stretched = stretchSpansOverChange(doc, change) + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i] + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j] + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span) + } + } else if (stretchCur) { + old[i] = stretchCur + } + } + return old +} + +// Used both to provide a JSON-safe object in .getHistory, and, when +// detaching a document, to split the history in two +function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = [] + for (var i = 0; i < events.length; ++i) { + var event = events[i] + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event) + continue + } + var changes = event.changes, newChanges = [] + copy.push({changes: newChanges}) + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0) + newChanges.push({from: change.from, to: change.to, text: change.text}) + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop] + delete change[prop] + } + } } } + } + } + return copy +} + +// The 'scroll' parameter given to many of these indicated whether +// the new cursor position should be scrolled into view after +// modifying the selection. + +// If shift is held or the extend flag is set, extends a range to +// include a given position (and optionally a second position). +// Otherwise, simply returns the range between the given positions. +// Used for cursor motion and such. +function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor + if (other) { + var posBefore = cmp(head, anchor) < 0 + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head + head = other + } else if (posBefore != (cmp(head, other) < 0)) { + head = other + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } +} + +// Extend the primary selection range, discard the rest. +function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options) +} + +// Extend all selections (pos is an array of selections with length +// equal the number of selections) +function extendSelections(doc, heads, options) { + var out = [] + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null) } + var newSel = normalizeSelection(out, doc.sel.primIndex) + setSelection(doc, newSel, options) +} + +// Updates a single range in the selection. +function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0) + ranges[i] = range + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options) +} + +// Reset the selection to a single range. +function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options) +} + +// Give beforeSelectionChange handlers a change to influence a +// selection update. +function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + var this$1 = this; + + this.ranges = [] + for (var i = 0; i < ranges.length; i++) + { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)) } + }, + origin: options && options.origin + } + signal(doc, "beforeSelectionChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) } + if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } + else { return sel } +} + +function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done) + if (last && last.ranges) { + done[done.length - 1] = sel + setSelectionNoUndo(doc, sel, options) + } else { + setSelection(doc, sel, options) + } +} + +// Set a new selection. +function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options) + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options) +} + +function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options) } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1) + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)) + + if (!(options && options.scroll === false) && doc.cm) + { ensureCursorVisible(doc.cm) } +} + +function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true + signalCursorActivity(doc.cm) + } + signalLater(doc, "cursorActivity", doc) +} + +// Verify that the selection does not partially select any atomic +// marked ranges. +function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll) +} + +// Return a selection that does not partially select any atomic +// ranges. +function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i] + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear) + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear) + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i) } + out[i] = new Range(newAnchor, newHead) + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel +} + +function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line) + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter") + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0) + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1) + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null) } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos +} + +// Ensure a given position is not inside an atomic range. +function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1 + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)) + if (!found) { + doc.cantEdit = true + return Pos(doc.first, 0) + } + return found +} + +function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } +} + +function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll) +} + +// UPDATING + +// Allow "beforeChange" event handlers to influence a change +function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + } + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from) } + if (to) { obj.to = clipPos(doc, to) } + if (text) { obj.text = text } + if (origin !== undefined) { obj.origin = origin } + } } + signal(doc, "beforeChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) } + + if (obj.canceled) { return null } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} +} + +// Apply a change to a document, and add it to the document's +// history, and propagating it to all linked documents. +function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true) + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to) + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}) } + } else { + makeChangeInner(doc, change) + } +} + +function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change) + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN) + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)) + var rebased = [] + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)) + }) +} + +// Revert a change stored in a document's history. +function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0 + for (; i < source.length; i++) { + event = source[i] + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null + + for (;;) { + event = source.pop() + if (event.ranges) { + pushSelectionToHistory(event, dest) + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}) + return + } + selAfter = event + } + else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = [] + pushSelectionToHistory(selAfter, dest) + dest.push({changes: antiChanges, generation: hist.generation}) + hist.generation = event.generation || ++hist.maxGeneration + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange") + + var loop = function ( i ) { + var change = event.changes[i] + change.origin = type + if (filter && !filterChange(doc, change, false)) { + source.length = 0 + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)) + + var after = i ? computeSelAfterChange(doc, change) : lst(source) + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)) + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) } + var rebased = [] + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)) + }) + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } +} + +// Sub-views need their line numbers shifted when text is added +// above or below them in the parent document. +function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex) + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance) + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter") } + } +} + +// More lower-level change function, handling only a single document +// (not linked ones). +function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line) + shiftDoc(doc, shift) + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin} + } + var last = doc.lastLine() + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin} + } + + change.removed = getBetween(doc, change.from, change.to) + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change) } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) } + else { updateDoc(doc, change, spans) } + setSelectionNoUndo(doc, selAfter, sel_dontScroll) +} + +// Handle the interaction of a change to a document with the editor +// that this document is part of. +function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to + + var recomputeMaxLength = false, checkWidthStart = from.line + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))) + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true + return true + } + }) + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm) } + + updateDoc(doc, change, spans, estimateHeight(cm)) + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line) + if (len > display.maxLineLength) { + display.maxLine = line + display.maxLineLength = len + display.maxLineChanged = true + recomputeMaxLength = false + } + }) + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true } + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line) + startWorker(cm, 400) + + var lendiff = change.text.length - (to.line - from.line) - 1 + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm) } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text") } + else + { regChange(cm, from.line, to.line + 1, lendiff) } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change") + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + } + if (changeHandler) { signalLater(cm, "change", cm, obj) } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) } + } + cm.display.selForContextMenu = null +} + +function replaceRange(doc, code, from, to, origin) { + if (!to) { to = from } + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp } + if (typeof code == "string") { code = doc.splitLines(code) } + makeChange(doc, {from: from, to: to, text: code, origin: origin}) +} + +// Rebasing/resetting history to deal with externally-sourced changes + +function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff + } else if (from < pos.line) { + pos.line = from + pos.ch = 0 + } +} + +// Tries to rebase an array of history events given a change in the +// document. If the change touches the same lines as the event, the +// event, and everything 'behind' it, is discarded. If the change is +// before the event, the event's positions are updated. Uses a +// copy-on-write scheme for the positions, to avoid having to +// reallocate them all on every rebase, but also avoid problems with +// shared position objects being unsafely updated. +function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff) + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff) + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1] + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch) + cur.to = Pos(cur.to.line + diff, cur.to.ch) + } else if (from <= cur.to.line) { + ok = false + break + } + } + if (!ok) { + array.splice(0, i + 1) + i = 0 + } + } +} + +function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1 + rebaseHistArray(hist.done, from, to, diff) + rebaseHistArray(hist.undone, from, to, diff) +} + +// Utility for applying a change to a line by handle or number, +// returning the number and optionally registering the line as +// changed. +function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) } + else { no = lineNo(handle) } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) } + return line +} + +// The document is represented as a BTree consisting of leaves, with +// chunk of lines in them, and branches, with up to ten leaves or +// other branch nodes below them. The top node is always a branch +// node, and is the document object itself (meaning it has +// additional methods and properties). +// +// All nodes have parent links. The tree is used both to go from +// line numbers to line objects, and to go from objects to numbers. +// It also indexes by height, and is used to convert between height +// and line object, and to find the total height of the document. +// +// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + +var LeafChunk = function(lines) { + var this$1 = this; + + this.lines = lines + this.parent = null + var height = 0 + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this$1 + height += lines[i].height + } + this.height = height +}; + +LeafChunk.prototype.chunkSize = function () { return this.lines.length }; + +// Remove the n lines at offset 'at'. +LeafChunk.prototype.removeInner = function (at, n) { + var this$1 = this; + + for (var i = at, e = at + n; i < e; ++i) { + var line = this$1.lines[i] + this$1.height -= line.height + cleanUpLine(line) + signalLater(line, "delete") + } + this.lines.splice(at, n) +}; + +// Helper used to collapse a small branch into a single leaf. +LeafChunk.prototype.collapse = function (lines) { + lines.push.apply(lines, this.lines) +}; + +// Insert the given array of lines at offset 'at', count them as +// having the given height. +LeafChunk.prototype.insertInner = function (at, lines, height) { + var this$1 = this; + + this.height += height + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)) + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 } +}; + +// Used to iterate over a part of the tree. +LeafChunk.prototype.iterN = function (at, n, op) { + var this$1 = this; + + for (var e = at + n; at < e; ++at) + { if (op(this$1.lines[at])) { return true } } +}; + +var BranchChunk = function(children) { + var this$1 = this; + + this.children = children + var size = 0, height = 0 + for (var i = 0; i < children.length; ++i) { + var ch = children[i] + size += ch.chunkSize(); height += ch.height + ch.parent = this$1 + } + this.size = size + this.height = height + this.parent = null +}; + +BranchChunk.prototype.chunkSize = function () { return this.size }; + +BranchChunk.prototype.removeInner = function (at, n) { + var this$1 = this; + + this.size -= n + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height + child.removeInner(at, rm) + this$1.height -= oldHeight - child.height + if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null } + if ((n -= rm) == 0) { break } + at = 0 + } else { at -= sz } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = [] + this.collapse(lines) + this.children = [new LeafChunk(lines)] + this.children[0].parent = this + } +}; + +BranchChunk.prototype.collapse = function (lines) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) } +}; + +BranchChunk.prototype.insertInner = function (at, lines, height) { + var this$1 = this; + + this.size += lines.length + this.height += height + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at <= sz) { + child.insertInner(at, lines, height) + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25 + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)) + child.height -= leaf.height + this$1.children.splice(++i, 0, leaf) + leaf.parent = this$1 + } + child.lines = child.lines.slice(0, remaining) + this$1.maybeSpill() + } + break + } + at -= sz + } +}; + +// When a node has grown, check whether it should be split. +BranchChunk.prototype.maybeSpill = function () { + if (this.children.length <= 10) { return } + var me = this + do { + var spilled = me.children.splice(me.children.length - 5, 5) + var sibling = new BranchChunk(spilled) + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children) + copy.parent = me + me.children = [copy, sibling] + me = copy + } else { + me.size -= sibling.size + me.height -= sibling.height + var myIndex = indexOf(me.parent.children, me) + me.parent.children.splice(myIndex + 1, 0, sibling) + } + sibling.parent = me.parent + } while (me.children.length > 10) + me.parent.maybeSpill() +}; + +BranchChunk.prototype.iterN = function (at, n, op) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var used = Math.min(n, sz - at) + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0 + } else { at -= sz } + } +}; + +// Line widgets are block elements displayed above or below a line. + +var LineWidget = function(doc, node, options) { + var this$1 = this; + + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this$1[opt] = options[opt] } } } + this.doc = doc + this.node = node +}; + +LineWidget.prototype.clear = function () { + var this$1 = this; + + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line) + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } } + if (!ws.length) { line.widgets = null } + var height = widgetHeight(this) + updateLineHeight(line, Math.max(0, line.height - height)) + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height) + regLineChange(cm, no, "widget") + }) + signalLater(cm, "lineWidgetCleared", cm, this, no) + } +}; + +LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line + this.height = null + var diff = widgetHeight(this) - oldH + if (!diff) { return } + updateLineHeight(line, line.height + diff) + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true + adjustScrollWhenAboveVisible(cm, line, diff) + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)) + }) + } +}; +eventMixin(LineWidget) + +function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollPos(cm, null, diff) } +} + +function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options) + var cm = doc.cm + if (cm && widget.noHScroll) { cm.display.alignWidgets = true } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []) + if (widget.insertAt == null) { widgets.push(widget) } + else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) } + widget.line = line + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop + updateLineHeight(line, line.height + widgetHeight(widget)) + if (aboveVisible) { addToScrollPos(cm, null, widget.height) } + cm.curOp.forceUpdate = true + } + return true + }) + signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)) + return widget +} + +// TEXTMARKERS + +// Created with markText and setBookmark methods. A TextMarker is a +// handle that can be used to clear or find a marked position in the +// document. Line objects hold arrays (markedSpans) containing +// {from, to, marker} object pointing to such marker objects, and +// indicating that such a marker is present on that line. Multiple +// lines may point to the same marker when it spans across lines. +// The spans will have null for their from/to properties when the +// marker continues beyond the start/end of the line. Markers have +// links back to the lines they currently touch. + +// Collapsed markers have unique ids, in order to be able to order +// them, which is needed for uniquely determining an outer marker +// when they overlap (they may nest, but not partially overlap). +var nextMarkerId = 0 + +var TextMarker = function(doc, type) { + this.lines = [] + this.type = type + this.doc = doc + this.id = ++nextMarkerId +}; + +// Clear the marker. +TextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp + if (withOp) { startOperation(cm) } + if (hasHandler(this, "clear")) { + var found = this.find() + if (found) { signalLater(this, "clear", found.from, found.to) } + } + var min = null, max = null + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") } + else if (cm) { + if (span.to != null) { max = lineNo(line) } + if (span.from != null) { min = lineNo(line) } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span) + if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)) } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual) + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual + cm.display.maxLineLength = len + cm.display.maxLineChanged = true + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) } + this.lines.length = 0 + this.explicitlyCleared = true + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false + if (cm) { reCheckSelection(cm.doc) } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max) } + if (withOp) { endOperation(cm) } + if (this.parent) { this.parent.clear() } +}; + +// Find the position of the marker in the document. Returns a {from, +// to} object by default. Side can be passed to get a specific side +// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the +// Pos objects returned contain a line object, rather than a line +// number (used to prevent looking up the same line twice). +TextMarker.prototype.find = function (side, lineObj) { + var this$1 = this; + + if (side == null && this.type == "bookmark") { side = 1 } + var from, to + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from) + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to) + if (side == 1) { return to } + } + } + return from && {from: from, to: to} +}; + +// Signals that the marker's widget changed, and surrounding layout +// should be recomputed. +TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line) + var view = findViewForLine(cm, lineN) + if (view) { + clearLineMeasurementCacheFor(view) + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true + } + cm.curOp.updateMaxLine = true + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height + widget.height = null + var dHeight = widgetHeight(widget) - oldHeight + if (dHeight) + { updateLineHeight(line, line.height + dHeight) } + } + signalLater(cm, "markerChanged", cm, this$1) + }) +}; + +TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) } + } + this.lines.push(line) +}; + +TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1) + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this) + } +}; +eventMixin(TextMarker) + +// Create a marker, wire it up to the right lines, and +function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to) + if (options) { copyObj(options, marker, false) } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget") + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") } + if (options.insertLeft) { marker.widgetNode.insertLeft = true } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans() + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) } + + var curLine = from.line, cm = doc.cm, updateMaxLine + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)) + ++curLine + }) + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) } + }) } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) } + + if (marker.readOnly) { + seeReadOnlySpans() + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory() } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId + marker.atomic = true + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1) } + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } } + if (marker.atomic) { reCheckSelection(cm.doc) } + signalLater(cm, "markerAdded", cm, marker) + } + return marker +} + +// SHARED TEXTMARKERS + +// A shared marker spans multiple linked documents. It is +// implemented as a meta-marker-object controlling multiple normal +// markers. +var SharedTextMarker = function(markers, primary) { + var this$1 = this; + + this.markers = markers + this.primary = primary + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this$1 } +}; + +SharedTextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true + for (var i = 0; i < this.markers.length; ++i) + { this$1.markers[i].clear() } + signalLater(this, "clear") +}; + +SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) +}; +eventMixin(SharedTextMarker) + +function markTextShared(doc, from, to, options, type) { + options = copyObj(options) + options.shared = false + var markers = [markText(doc, from, to, options, type)], primary = markers[0] + var widget = options.widgetNode + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true) } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)) + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers) + }) + return new SharedTextMarker(markers, primary) +} + +function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) +} + +function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find() + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to) + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type) + marker.markers.push(subMark) + subMark.parent = marker + } + } +} + +function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc] + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }) + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j] + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null + marker.markers.splice(j--, 1) + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); +} + +var nextDocId = 0 +var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0 } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]) + this.first = firstLine + this.scrollTop = this.scrollLeft = 0 + this.cantEdit = false + this.cleanGeneration = 1 + this.frontier = firstLine + var start = Pos(firstLine, 0) + this.sel = simpleSelection(start) + this.history = new History(null) + this.id = ++nextDocId + this.modeOption = mode + this.lineSep = lineSep + this.direction = (direction == "rtl") ? "rtl" : "ltr" + this.extend = false + + if (typeof text == "string") { text = this.splitLines(text) } + updateDoc(this, {from: start, to: start, text: text}) + setSelection(this, simpleSelection(start), sel_dontScroll) +} + +Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op) } + else { this.iterN(this.first, this.first + this.size, from) } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0 + for (var i = 0; i < lines.length; ++i) { height += lines[i].height } + this.insertInner(at - this.first, lines, height) + }, + remove: function(at, n) { this.removeInner(at - this.first, n) }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1 + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true) + if (this.cm) { this.cm.scrollTo(0, 0) } + setSelection(this, simpleSelection(top), sel_dontScroll) + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from) + to = to ? clipPos(this, to) : from + replaceRange(this, code, from, to, origin) + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line) } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range = this.sel.primary(), pos + if (start == null || start == "head") { pos = range.head } + else if (start == "anchor") { pos = range.anchor } + else if (start == "end" || start == "to" || start === false) { pos = range.to() } + else { pos = range.from() } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options) + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options) + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options) + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options) + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f) + extendSelections(this, clipPosArray(this, heads), options) + }), + setSelections: docMethodOp(function(ranges, primary, options) { + var this$1 = this; + + if (!ranges.length) { return } + var out = [] + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this$1, ranges[i].anchor), + clipPos(this$1, ranges[i].head)) } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) } + setSelection(this, normalizeSelection(out, primary), options) + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0) + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))) + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options) + }), + + getSelection: function(lineSep) { + var this$1 = this; + + var ranges = this.sel.ranges, lines + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + lines = lines ? lines.concat(sel) : sel + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var this$1 = this; + + var parts = [], ranges = this.sel.ranges + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) } + parts[i] = sel + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = [] + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code } + this.replaceSelections(dup, collapse, origin || "+input") + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var this$1 = this; + + var changes = [], sel = this.sel + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + changes[i] = {from: range.from(), to: range.to(), text: this$1.splitLines(code[i]), origin: origin} + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse) + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this$1, changes[i$1]) } + if (newSel) { setSelectionReplaceHistory(this, newSel) } + else if (this.cm) { ensureCursorVisible(this.cm) } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}), + + setExtending: function(val) {this.extend = val}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0 + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } } + return {undo: done, redo: undone} + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration)}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true) + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration) + hist.done = copyHistoryArray(histData.done.slice(0), null, true) + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true) + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}) + markers[gutterID] = value + if (!value && isEmpty(markers)) { line.gutterMarkers = null } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null } + return true + }) + } + }) + }), + + lineInfo: function(line) { + var n + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line + line = getLine(this, line) + if (!line) { return null } + } else { + n = lineNo(line) + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + if (!line[prop]) { line[prop] = cls } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + var cur = line[prop] + if (!cur) { return false } + else if (cls == null) { line[prop] = null } + else { + var found = cur.match(classTest(cls)) + if (!found) { return false } + var end = found.index + found[0].length + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear() }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents} + pos = clipPos(this, pos) + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos) + var markers = [], spans = getLine(this, pos.line).markedSpans + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker) } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to) + var found = [], lineNo = from.line + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i] + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker) } + } } + ++lineNo + }) + return found + }, + getAllMarks: function() { + var markers = [] + this.iter(function (line) { + var sps = line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker) } } } + }) + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length + this.iter(function (line) { + var sz = line.text.length + sepSize + if (sz > off) { ch = off; return true } + off -= sz + ++lineNo + }) + return clipPos(this, Pos(lineNo, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords) + var index = coords.ch + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize + }) + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction) + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft + doc.sel = this.sel + doc.extend = false + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth + doc.setHistory(this.getHistory()) + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {} } + var from = this.first, to = this.first + this.size + if (options.from != null && options.from > from) { from = options.from } + if (options.to != null && options.to < to) { to = options.to } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction) + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}) + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}] + copySharedMarkers(copy, findSharedMarkers(this)) + return copy + }, + unlinkDoc: function(other) { + var this$1 = this; + + if (other instanceof CodeMirror) { other = other.doc } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this$1.linked[i] + if (link.doc != other) { continue } + this$1.linked.splice(i, 1) + other.unlinkDoc(this$1) + detachSharedMarkers(findSharedMarkers(this$1)) + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id] + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true) + other.history = new History(null) + other.history.done = copyHistoryArray(this.history.done, splitIds) + other.history.undone = copyHistoryArray(this.history.undone, splitIds) + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f)}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr" } + if (dir == this.direction) { return } + this.direction = dir + this.iter(function (line) { return line.order = null; }) + if (this.cm) { directionChanged(this.cm) } + }) +}) + +// Public alias. +Doc.prototype.eachLine = Doc.prototype.iter + +// Kludge to work around strange IE behavior where it'll sometimes +// re-fire a series of drag-related events right after the drop (#1551) +var lastDrop = 0 + +function onDrop(e) { + var cm = this + clearDragCursor(cm) + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e) + if (ie) { lastDrop = +new Date } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0 + var loadFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + { return } + + var reader = new FileReader + reader.onload = operation(cm, function () { + var content = reader.result + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" } + text[i] = content + if (++read == n) { + pos = clipPos(cm.doc, pos) + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"} + makeChange(cm.doc, change) + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))) + } + }) + reader.readAsText(file) + } + for (var i = 0; i < n; ++i) { loadFile(files[i], i) } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e) + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20) + return + } + try { + var text$1 = e.dataTransfer.getData("Text") + if (text$1) { + var selected + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections() } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)) + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } } + cm.replaceSelection(text$1, "around", "paste") + cm.display.input.focus() + } + } + catch(e){} + } +} + +function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()) + e.dataTransfer.effectAllowed = "copyMove" + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;") + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" + if (presto) { + img.width = img.height = 1 + cm.display.wrapper.appendChild(img) + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop + } + e.dataTransfer.setDragImage(img, 0, 0) + if (presto) { img.parentNode.removeChild(img) } + } +} + +function onDragOver(cm, e) { + var pos = posFromMouse(cm, e) + if (!pos) { return } + var frag = document.createDocumentFragment() + drawSelectionCursor(cm, pos, frag) + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors") + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv) + } + removeChildrenAndAdd(cm.display.dragCursor, frag) +} + +function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor) + cm.display.dragCursor = null + } +} + +// These must be handled carefully, because naively registering a +// handler for each editor will cause the editors to never be +// garbage collected. + +function forEachCodeMirror(f) { + if (!document.body.getElementsByClassName) { return } + var byClass = document.body.getElementsByClassName("CodeMirror") + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror + if (cm) { f(cm) } + } +} + +var globalsRegistered = false +function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers() + globalsRegistered = true +} +function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null + forEachCodeMirror(onResize) + }, 100) } + }) + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }) +} +// Called when the window resizes +function onResize(cm) { + var d = cm.display + if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) + { return } + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + d.scrollbarsClipped = false + cm.setSize() +} + +var keyNames = { + 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" +} + +// Number keys +for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) } +// Alphabetic keys +for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) } +// Function keys +for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 } + +var keyMap = {} + +keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" +} +// Note that the save and find-related commands aren't defined by +// default. User code or addons can define them. Unknown commands +// are simply ignored. +keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" +} +// Very basic readline/emacs-style bindings, which are standard on Mac. +keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" +} +keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + fallthrough: ["basic", "emacsy"] +} +keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault + +// KEYMAP DISPATCH + +function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/) + name = parts[parts.length - 1] + var alt, ctrl, shift, cmd + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i] + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true } + else if (/^a(lt)?$/i.test(mod)) { alt = true } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true } + else if (/^s(hift)?$/i.test(mod)) { shift = true } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name } + if (ctrl) { name = "Ctrl-" + name } + if (cmd) { name = "Cmd-" + name } + if (shift) { name = "Shift-" + name } + return name +} + +// This is a kludge to keep keymaps mostly working as raw objects +// (backwards compatibility) while at the same time support features +// like normalization and multi-stroke key bindings. It compiles a +// new normalized keymap, and then updates the old object to reflect +// this. +function normalizeKeyMap(keymap) { + var copy = {} + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname] + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName) + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0) + if (i == keys.length - 1) { + name = keys.join(" ") + val = value + } else { + name = keys.slice(0, i + 1).join(" ") + val = "..." + } + var prev = copy[name] + if (!prev) { copy[name] = val } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname] + } } + for (var prop in copy) { keymap[prop] = copy[prop] } + return keymap +} + +function lookupKey(key, map, handle, context) { + map = getKeyMap(map) + var found = map.call ? map.call(key, context) : map[key] + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + { return lookupKey(key, map.fallthrough, handle, context) } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context) + if (result) { return result } + } + } +} + +// Modifier key presses don't count as 'real' key presses for the +// purpose of keymap fallthrough. +function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode] + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" +} + +// Look up the name of a key as indicated by an event object. +function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var base = keyNames[event.keyCode], name = base + if (name == null || event.altGraphKey) { return false } + if (event.altKey && base != "Alt") { name = "Alt-" + name } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name } + return name +} + +function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val +} + +// Helper for deleting text near the selection(s), used to implement +// backspace, delete, and similar functionality. +function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = [] + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]) + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop() + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from + break + } + } + kill.push(toKill) + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") } + ensureCursorVisible(cm) + }) +} + +// Commands are parameter-less actions that can be performed on an +// editor, mostly used for keybindings. +var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var leftPos = cm.coordsChar({left: 0, top: top}, "div") + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var pos = cm.coordsChar({left: 0, top: top}, "div") + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from() + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize) + spaces.push(spaceStr(tabSize - col % tabSize)) + } + cm.replaceSelections(spaces) + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add") } + else { cm.execCommand("insertTab") } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = [] + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1) + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose") + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text + if (prev) { + cur = new Pos(cur.line, 1) + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose") + } + } + } + newSel.push(new Range(cur, cur)) + } + cm.setSelections(newSel) + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections() + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") } + sels = cm.listSelections() + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true) } + ensureCursorVisible(cm) + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } +} + + +function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLine(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, visual, lineN, 1) +} +function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLineEnd(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, line, lineN, -1) +} +function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line) + var line = getLine(cm.doc, start.line) + var order = getOrder(line, cm.doc.direction) + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)) + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start +} + +// Run a handler that was bound to a key. +function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound] + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled() + var prevShift = cm.display.shift, done = false + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true } + if (dropShift) { cm.display.shift = false } + done = bound(cm) != Pass + } finally { + cm.display.shift = prevShift + cm.state.suppressEdits = false + } + return done +} + +function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm) + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) +} + +var stopSeq = new Delayed +function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq + if (seq) { + if (isModifierKey(name)) { return "handled" } + stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null + cm.display.input.reset() + } + }) + name = seq + " " + name + } + var result = lookupKeyForEditor(cm, name, handle) + + if (result == "multi") + { cm.state.keySeq = name } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e) } + + if (result == "handled" || result == "multi") { + e_preventDefault(e) + restartBlink(cm) + } + + if (seq && !result && /\'$/.test(name)) { + e_preventDefault(e) + return true + } + return !!result +} + +// Handle a key from the keydown event. +function handleKeyBinding(cm, e) { + var name = keyName(e, true) + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } +} + +// Handle a key from the keypress event +function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) +} + +var lastStoppedKey = null +function onKeyDown(e) { + var cm = this + cm.curOp.focus = activeElt() + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false } + var code = e.keyCode + cm.display.shift = code == 16 || e.shiftKey + var handled = handleKeyBinding(cm, e) + if (presto) { + lastStoppedKey = handled ? code : null + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut") } + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm) } +} + +function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv + addClass(lineDiv, "CodeMirror-crosshair") + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair") + off(document, "keyup", up) + off(document, "mouseover", up) + } + } + on(document, "keyup", up) + on(document, "mouseover", up) +} + +function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false } + signalDOMEvent(this, e) +} + +function onKeyPress(e) { + var cm = this + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode) + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e) +} + +// A mouse down can be a single click, double click, triple click, +// start of selection drag, start of text drag, new cursor +// (ctrl-click), rectangle drag (alt-drag), or xwin +// middle-click-paste. Or it might be a click on something we should +// not interfere with, such as a scrollbar or widget. +function onMouseDown(e) { + var cm = this, display = cm.display + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled() + display.shift = e.shiftKey + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false + setTimeout(function () { return display.scroller.draggable = true; }, 100) + } + return + } + if (clickInGutter(cm, e)) { return } + var start = posFromMouse(cm, e) + window.focus() + + switch (e_button(e)) { + case 1: + // #3261: make sure, that we're not starting a second selection + if (cm.state.selectingText) + { cm.state.selectingText(e) } + else if (start) + { leftButtonDown(cm, e, start) } + else if (e_target(e) == display.scroller) + { e_preventDefault(e) } + break + case 2: + if (webkit) { cm.state.lastMiddleDown = +new Date } + if (start) { extendSelection(cm.doc, start) } + setTimeout(function () { return display.input.focus(); }, 20) + e_preventDefault(e) + break + case 3: + if (captureRightClick) { onContextMenu(cm, e) } + else { delayBlurEvent(cm) } + break + } +} + +var lastClick; +var lastDoubleClick; +function leftButtonDown(cm, e, start) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0) } + else { cm.curOp.focus = activeElt() } + + var now = +new Date, type + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple" + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double" + lastDoubleClick = {time: now, pos: start} + } else { + type = "single" + lastClick = {time: now, pos: start} + } + + var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + type == "single" && (contained = sel.contains(start)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && + (cmp(contained.to(), start) > 0 || start.xRel < 0)) + { leftButtonStartDrag(cm, e, start, modifier) } + else + { leftButtonSelect(cm, e, start, type, modifier) } +} + +// Start a text drag. When it ends, see if any dragging actually +// happen, and treat as a click if it didn't. +function leftButtonStartDrag(cm, e, start, modifier) { + var display = cm.display, moved = false + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false } + cm.state.draggingText = false + off(document, "mouseup", dragEnd) + off(document, "mousemove", mouseMove) + off(display.scroller, "dragstart", dragStart) + off(display.scroller, "drop", dragEnd) + if (!moved) { + e_preventDefault(e) + if (!modifier) + { extendSelection(cm.doc, start) } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) } + else + { display.input.focus() } + } + }) + var mouseMove = function(e2) { + moved = moved || Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) >= 10 + } + var dragStart = function () { return moved = true; } + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true } + cm.state.draggingText = dragEnd + dragEnd.copy = mac ? e.altKey : e.ctrlKey + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop() } + on(document, "mouseup", dragEnd) + on(document, "mousemove", mouseMove) + on(display.scroller, "dragstart", dragStart) + on(display.scroller, "drop", dragEnd) + + delayBlurEvent(cm) + setTimeout(function () { return display.input.focus(); }, 20) +} + +// Normal selection, as opposed to text dragging. +function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc + e_preventDefault(e) + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges + if (addNew && !e.shiftKey) { + ourIndex = doc.sel.contains(start) + if (ourIndex > -1) + { ourRange = ranges[ourIndex] } + else + { ourRange = new Range(start, start) } + } else { + ourRange = doc.sel.primary() + ourIndex = doc.sel.primIndex + } + + if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { + type = "rect" + if (!addNew) { ourRange = new Range(start, start) } + start = posFromMouse(cm, e, true, true) + ourIndex = -1 + } else if (type == "double") { + var word = cm.findWordAt(start) + if (cm.display.shift || doc.extend) + { ourRange = extendRange(doc, ourRange, word.anchor, word.head) } + else + { ourRange = word } + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))) + if (cm.display.shift || doc.extend) + { ourRange = extendRange(doc, ourRange, line.anchor, line.head) } + else + { ourRange = line } + } else { + ourRange = extendRange(doc, ourRange, start) + } + + if (!addNew) { + ourIndex = 0 + setSelection(doc, new Selection([ourRange], 0), sel_mouse) + startSel = doc.sel + } else if (ourIndex == -1) { + ourIndex = ranges.length + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}) + } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}) + startSel = doc.sel + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse) + } + + var lastPos = start + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize) + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize) + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol) + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize) + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) } + } + if (!ranges.length) { ranges.push(new Range(start, start)) } + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}) + cm.scrollIntoView(pos) + } else { + var oldRange = ourRange + var anchor = oldRange.anchor, head = pos + if (type != "single") { + var range + if (type == "double") + { range = cm.findWordAt(pos) } + else + { range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))) } + if (cmp(range.anchor, anchor) > 0) { + head = range.head + anchor = minPos(oldRange.from(), range.anchor) + } else { + head = range.anchor + anchor = maxPos(oldRange.to(), range.head) + } + } + var ranges$1 = startSel.ranges.slice(0) + ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head) + setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse) + } + } + + var editorSize = display.wrapper.getBoundingClientRect() + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0 + + function extend(e) { + var curCount = ++counter + var cur = posFromMouse(cm, e, true, type == "rect") + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt() + extendTo(cur) + var visible = visibleLines(display, doc) + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0 + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside + extend(e) + }), 50) } + } + } + + function done(e) { + cm.state.selectingText = false + counter = Infinity + e_preventDefault(e) + display.input.focus() + off(document, "mousemove", move) + off(document, "mouseup", up) + doc.history.lastSelOrigin = null + } + + var move = operation(cm, function (e) { + if (!e_button(e)) { done(e) } + else { extend(e) } + }) + var up = operation(cm, done) + cm.state.selectingText = up + on(document, "mousemove", move) + on(document, "mouseup", up) +} + + +// Determines whether an event happened in the gutter, and fires the +// handlers for the corresponding event. +function gutterEvent(cm, e, type, prevent) { + var mX, mY + try { mX = e.clientX; mY = e.clientY } + catch(e) { return false } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e) } + + var display = cm.display + var lineBox = display.lineDiv.getBoundingClientRect() + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i] + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY) + var gutter = cm.options.gutters[i] + signal(cm, type, cm, line, gutter, e) + return e_defaultPrevented(e) + } + } +} + +function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) +} + +// CONTEXT MENU HANDLING + +// To make the context menu work, we need to briefly unhide the +// textarea (making it as unobtrusive as possible) to let the +// right-click take effect on it. +function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + cm.display.input.onContextMenu(e) +} + +function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) +} + +function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-") + clearCaches(cm) +} + +var Init = {toString: function(){return "CodeMirror.Init"}} + +var defaults = {} +var optionHandlers = {} + +function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle } + } + + CodeMirror.defineOption = option + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true) + option("mode", null, function (cm, val) { + cm.doc.modeOption = val + loadMode(cm) + }, true) + + option("indentUnit", 2, loadMode, true) + option("indentWithTabs", false) + option("smartIndent", true) + option("tabSize", 4, function (cm) { + resetModeState(cm) + clearCaches(cm) + regChange(cm) + }, true) + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos) + if (found == -1) { break } + pos = found + val.length + newBreaks.push(Pos(lineNo, found)) + } + lineNo++ + }) + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) } + }) + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g") + if (old != Init) { cm.refresh() } + }) + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true) + option("electricChars", true) + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true) + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true) + option("rtlMoveVisually", !windows) + option("wholeLineUpdateBefore", true) + + option("theme", "default", function (cm) { + themeChanged(cm) + guttersChanged(cm) + }, true) + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val) + var prev = old != Init && getKeyMap(old) + if (prev && prev.detach) { prev.detach(cm, next) } + if (next.attach) { next.attach(cm, prev || null) } + }) + option("extraKeys", null) + + option("lineWrapping", false, wrappingChanged, true) + option("gutters", [], function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0" + cm.refresh() + }, true) + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true) + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm) + updateScrollbars(cm) + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop) + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft) + }, true) + option("lineNumbers", false, function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("firstLineNumber", 1, guttersChanged, true) + option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true) + option("showCursorWhenSelecting", false, updateSelection, true) + + option("resetSelectionOnContextMenu", true) + option("lineWiseCopyCut", true) + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm) + cm.display.input.blur() + cm.display.disabled = true + } else { + cm.display.disabled = false + } + cm.display.input.readOnlyChanged(val) + }) + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true) + option("dragDrop", true, dragDropChanged) + option("allowDropFileTypes", null) + + option("cursorBlinkRate", 530) + option("cursorScrollMargin", 0) + option("cursorHeight", 1, updateSelection, true) + option("singleCursorHeightPerLine", true, updateSelection, true) + option("workTime", 100) + option("workDelay", 100) + option("flattenSpans", true, resetModeState, true) + option("addModeClass", false, resetModeState, true) + option("pollInterval", 100) + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }) + option("historyEventDelay", 1250) + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true) + option("maxHighlightLength", 10000, resetModeState, true) + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition() } + }) + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }) + option("autofocus", null) + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true) +} + +function guttersChanged(cm) { + updateGutters(cm) + regChange(cm) + alignHorizontally(cm) +} + +function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions + var toggle = value ? on : off + toggle(cm.display.scroller, "dragstart", funcs.start) + toggle(cm.display.scroller, "dragenter", funcs.enter) + toggle(cm.display.scroller, "dragover", funcs.over) + toggle(cm.display.scroller, "dragleave", funcs.leave) + toggle(cm.display.scroller, "drop", funcs.drop) + } +} + +function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap") + cm.display.sizer.style.minWidth = "" + cm.display.sizerWidth = null + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap") + findMaxLine(cm) + } + estimateLineHeights(cm) + regChange(cm) + clearCaches(cm) + setTimeout(function () { return updateScrollbars(cm); }, 100) +} + +// A CodeMirror instance represents an editor. This is the object +// that user code is usually dealing with. + +function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {} + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false) + setGuttersForLineNumbers(options) + + var doc = options.value + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction) } + this.doc = doc + + var input = new CodeMirror.inputStyles[options.inputStyle](this) + var display = this.display = new Display(place, doc, input) + display.wrapper.CodeMirror = this + updateGutters(this) + themeChanged(this) + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap" } + initScrollbars(this) + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + } + + if (options.autofocus && !mobile) { display.input.focus() } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) } + + registerEventHandlers(this) + ensureGlobalHandlers() + + startOperation(this) + this.curOp.forceUpdate = true + attachDoc(this, doc) + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(bind(onFocus, this), 20) } + else + { onBlur(this) } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this$1, options[opt], Init) } } + maybeUpdateLineNumberWidth(this) + if (options.finishInit) { options.finishInit(this) } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) } + endOperation(this) + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto" } +} + +// The default configuration options. +CodeMirror.defaults = defaults +// Functions to run when options are changed. +CodeMirror.optionHandlers = optionHandlers + +// Attach the necessary event handlers when initializing the editor +function registerEventHandlers(cm) { + var d = cm.display + on(d.scroller, "mousedown", operation(cm, onMouseDown)) + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e) + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e) + var word = cm.findWordAt(pos) + extendSelection(cm.doc, word.anchor, word.head) + })) } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) } + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0} + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000) + prevTouch = d.activeTouch + prevTouch.end = +new Date + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0] + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { + d.input.ensurePolled() + clearTimeout(touchFinished) + var now = +new Date + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null} + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX + d.activeTouch.top = e.touches[0].pageY + } + } + }) + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true } + }) + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos) } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos) } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + cm.setSelection(range.anchor, range.head) + cm.focus() + e_preventDefault(e) + } + finishTouch() + }) + on(d.scroller, "touchcancel", finishTouch) + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop) + setScrollLeft(cm, d.scroller.scrollLeft, true) + signal(cm, "scroll", cm) + } + }) + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }) + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }) + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }) + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }} + } + + var inp = d.input.getField() + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }) + on(inp, "keydown", operation(cm, onKeyDown)) + on(inp, "keypress", operation(cm, onKeyPress)) + on(inp, "focus", function (e) { return onFocus(cm, e); }) + on(inp, "blur", function (e) { return onBlur(cm, e); }) +} + +var initHooks = [] +CodeMirror.defineInitHook = function (f) { return initHooks.push(f); } + +// Indent the given line. The how parameter can be "smart", +// "add"/null, "subtract", or "prev". When aggressive is false +// (typically set to true for forced single-line indents), empty +// lines are not indented, and places where the mode returns Pass +// are left alone. +function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state + if (how == null) { how = "add" } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev" } + else { state = getStateBefore(cm, n) } + } + + var tabSize = cm.options.tabSize + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize) + if (line.stateAfter) { line.stateAfter = null } + var curSpaceString = line.text.match(/^\s*/)[0], indentation + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0 + how = "not" + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text) + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev" + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) } + else { indentation = 0 } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit + } else if (typeof how == "number") { + indentation = curSpace + how + } + indentation = Math.max(0, indentation) + + var indentString = "", pos = 0 + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} } + if (pos < indentation) { indentString += spaceStr(indentation - pos) } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input") + line.stateAfter = null + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1] + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length) + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)) + break + } + } + } +} + +// This will be set to a {lineWise: bool, text: [string]} object, so +// that, when pasting, we know what kind of selections the copied +// text was made out of. +var lastCopied = null + +function setLastCopied(newLastCopied) { + lastCopied = newLastCopied +} + +function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc + cm.display.shift = false + if (!sel) { sel = doc.sel } + + var paste = cm.state.pasteIncoming || origin == "paste" + var textLines = splitLinesAuto(inserted), multiPaste = null + // When pasing N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = [] + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])) } + } + } else if (textLines.length == sel.ranges.length) { + multiPaste = map(textLines, function (l) { return [l]; }) + } + } + + var updateInput + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1] + var from = range.from(), to = range.to() + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted) } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) } + else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + { from = to = Pos(from.line, 0) } + } + updateInput = cm.curOp.updateInput + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")} + makeChange(cm.doc, changeEvent) + signalLater(cm, "inputRead", cm, changeEvent) + } + if (inserted && !paste) + { triggerElectric(cm, inserted) } + + ensureCursorVisible(cm) + cm.curOp.updateInput = updateInput + cm.curOp.typing = true + cm.state.pasteIncoming = cm.state.cutIncoming = false +} + +function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text") + if (pasted) { + e.preventDefault() + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) } + return true + } +} + +function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i] + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } + var mode = cm.getModeAt(range.head) + var indented = false + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart") + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + { indented = indentLine(cm, range.head.line, "smart") } + } + if (indented) { signalLater(cm, "electricInput", cm, range.head.line) } + } +} + +function copyableRanges(cm) { + var text = [], ranges = [] + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)} + ranges.push(lineRange) + text.push(cm.getRange(lineRange.anchor, lineRange.head)) + } + return {text: text, ranges: ranges} +} + +function disableBrowserMagic(field, spellcheck) { + field.setAttribute("autocorrect", "off") + field.setAttribute("autocapitalize", "off") + field.setAttribute("spellcheck", !!spellcheck) +} + +function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none") + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;") + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px" } + else { te.setAttribute("wrap", "off") } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black" } + disableBrowserMagic(te) + return div +} + +// The publicly visible API. Note that methodOp(f) means +// 'wrap f in an operation, performed on its `this` parameter'. + +// This is not the complete set of editor methods. Most of the +// methods defined on the Doc type are also injected into +// CodeMirror.prototype, for backwards compatibility and +// convenience. + +function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + var helpers = CodeMirror.helpers = {} + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus()}, + + setOption: function(option, value) { + var options = this.options, old = options[option] + if (options[option] == value && option != "mode") { return } + options[option] = value + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old) } + signal(this, "optionChange", this, option) + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)) + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1) + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec) + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }) + this.state.modeGen++ + regChange(this) + }), + removeOverlay: methodOp(function(spec) { + var this$1 = this; + + var overlays = this.state.overlays + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1) + this$1.state.modeGen++ + regChange(this$1) + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" } + else { dir = dir ? "add" : "subtract" } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) } + }), + indentSelection: methodOp(function(how) { + var this$1 = this; + + var ranges = this.doc.sel.ranges, end = -1 + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i] + if (!range.empty()) { + var from = range.from(), to = range.to() + var start = Math.max(end, from.line) + end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1 + for (var j = start; j < end; ++j) + { indentLine(this$1, j, how) } + var newRanges = this$1.doc.sel.ranges + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) } + } else if (range.head.line > end) { + indentLine(this$1, range.head.line, how, true) + end = range.head.line + if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos) + var styles = getLineStyles(this, getLine(this.doc, pos.line)) + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch + var type + if (ch == 0) { type = styles[2] } + else { for (;;) { + var mid = (before + after) >> 1 + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1 } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1 + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var this$1 = this; + + var found = [] + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos) + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]) } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]] + if (val) { found.push(val) } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]) + } else if (help[mode.name]) { + found.push(help[mode.name]) + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1] + if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) + { found.push(cur.val) } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line) + return getStateBefore(this, line + 1, precise) + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary() + if (start == null) { pos = range.head } + else if (typeof start == "object") { pos = clipPos(this.doc, start) } + else { pos = start ? range.from() : range.to() } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page") + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1 + if (line < this.doc.first) { line = this.doc.first } + else if (line > last) { line = last; end = true } + lineObj = getLine(this.doc, line) + } else { + lineObj = line + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display + pos = cursorCoords(this, clipPos(this.doc, pos)) + var top = pos.bottom, left = pos.left + node.style.position = "absolute" + node.setAttribute("cm-ignore-events", "true") + this.display.input.setUneditable(node) + display.sizer.appendChild(node) + if (vert == "over") { + top = pos.top + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth) + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth } + } + node.style.top = top + "px" + node.style.left = node.style.right = "" + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth + node.style.right = "0px" + } else { + if (horiz == "left") { left = 0 } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 } + node.style.left = left + "px" + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}) } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text) }), + + findPosH: function(from, amount, unit, visually) { + var this$1 = this; + + var dir = 1 + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + cur = findPosH(this$1.doc, cur, dir, unit, visually) + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) + { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range.from() : range.to() } + }, sel_move) + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete") } + else + { deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false) + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} + }) } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var this$1 = this; + + var dir = 1, x = goalColumn + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this$1, cur, "div") + if (x == null) { x = coords.left } + else { coords.left = x } + cur = findPosV(this$1, coords, dir, unit) + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = [] + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected() + doc.extendSelectionsBy(function (range) { + if (collapse) + { return dir < 0 ? range.from() : range.to() } + var headPos = cursorCoords(this$1, range.head, "div") + if (range.goalColumn != null) { headPos.left = range.goalColumn } + goals.push(headPos.left) + var pos = findPosV(this$1, headPos, dir, unit) + if (unit == "page" && range == doc.sel.primary()) + { addToScrollPos(this$1, null, charCoords(this$1, pos, "div").top - headPos.top) } + return pos + }, sel_move) + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i] } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text + var start = pos.ch, end = pos.ch + if (line) { + var helper = this.getHelper(pos, "wordChars") + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end } + var startChar = line.charAt(start) + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); } + while (start > 0 && check(line.charAt(start - 1))) { --start } + while (end < line.length && check(line.charAt(end))) { ++end } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite") } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") } + + signal(this, "overwriteToggle", this, this.state.overwrite) + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) { resolveScrollToPos(this) } + if (x != null) { this.curOp.scrollLeft = x } + if (y != null) { this.curOp.scrollTop = y } + }), + getScrollInfo: function() { + var scroller = this.display.scroller + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null} + if (margin == null) { margin = this.options.cursorScrollMargin } + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null} + } else if (range.from == null) { + range = {from: range, to: null} + } + if (!range.to) { range.to = range.from } + range.margin = margin || 0 + + if (range.from.line != null) { + resolveScrollToPos(this) + this.curOp.scrollToPos = range + } else { + var sPos = calculateScrollPos(this, { + left: Math.min(range.from.left, range.to.left), + top: Math.min(range.from.top, range.to.top) - range.margin, + right: Math.max(range.from.right, range.to.right), + bottom: Math.max(range.from.bottom, range.to.bottom) + range.margin + }) + this.scrollTo(sPos.scrollLeft, sPos.scrollTop) + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } + if (width != null) { this.display.wrapper.style.width = interpret(width) } + if (height != null) { this.display.wrapper.style.height = interpret(height) } + if (this.options.lineWrapping) { clearLineMeasurementCache(this) } + var lineNo = this.display.viewFrom + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } + ++lineNo + }) + this.curOp.forceUpdate = true + signal(this, "refresh", this) + }), + + operation: function(f){return runInOp(this, f)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight + regChange(this) + this.curOp.forceUpdate = true + clearCaches(this) + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop) + updateGutterSpace(this) + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + { estimateLineHeights(this) } + signal(this, "refresh", this) + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc + old.cm = null + attachDoc(this, doc) + clearCaches(this) + this.display.input.reset() + this.scrollTo(doc.scrollLeft, doc.scrollTop) + this.curOp.forceScroll = true + signalLater(this, "swapDoc", this, old) + return old + }), + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + } + eventMixin(CodeMirror) + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} } + helpers[type][name] = value + } + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value) + helpers[type]._global.push({pred: predicate, val: value}) + } +} + +// Used for horizontal relative motion. Dir is -1 or 1 (left or +// right), unit can be "char", "column" (like char, but doesn't +// cross line boundaries), "word" (across next word), or "group" (to +// the start of next group of word or non-word-non-whitespace +// chars). The visually param controls whether, in right-to-left +// text, direction 1 means to move towards the next index in the +// string, or towards the character to the right of the current +// position. The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos + var origDir = dir + var lineObj = getLine(doc, pos.line) + function findNextLine() { + var l = pos.line + dir + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky) + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next + if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir) + } else { + next = moveLogically(lineObj, pos, dir) + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir) } + else + { return false } + } else { + pos = next + } + return true + } + + if (unit == "char") { + moveOnce() + } else if (unit == "column") { + moveOnce(true) + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group" + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars") + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n" + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p" + if (group && !first && !type) { type = "s" } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after"} + break + } + + if (type) { sawType = type } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true) + if (equalCursorPos(oldPos, result)) { result.hitSide = true } + return result +} + +// For relative vertical movement. Dir may be -1 or 1. Unit can be +// "page" or "line". The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight) + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3) + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3 + } + var target + for (;;) { + target = coordsChar(cm, x, y) + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5 + } + return target +} + +// CONTENTEDITABLE INPUT STYLE + +var ContentEditableInput = function(cm) { + this.cm = cm + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null + this.polling = new Delayed() + this.composing = null + this.gracePeriod = false + this.readDOMTimeout = null +}; + +ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm + var div = input.div = display.lineDiv + disableBrowserMagic(div, cm.options.spellcheck) + + on(div, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20) } + }) + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false} + }) + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false} } + }) + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() } + this$1.composing.done = true + } + }) + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }) + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon() } + }) + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + if (e.type == "cut") { cm.replaceSelection("", null, "cut") } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll) + cm.replaceSelection("", null, "cut") + }) + } + } + if (e.clipboardData) { + e.clipboardData.clearData() + var content = lastCopied.text.join("\n") + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content) + if (e.clipboardData.getData("Text") == content) { + e.preventDefault() + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild) + te.value = lastCopied.text.join("\n") + var hadFocus = document.activeElement + selectInput(te) + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge) + hadFocus.focus() + if (hadFocus == div) { input.showPrimarySelection() } + }, 50) + } + on(div, "copy", onCopyCut) + on(div, "cut", onCopyCut) +}; + +ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false) + result.focus = this.cm.state.focused + return result +}; + +ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection() } + this.showMultipleSelections(info) +}; + +ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary() + var from = prim.from(), to = prim.to() + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges() + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset) + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0} + var end = to.line < cm.display.viewTo && posToDOM(cm, to) + if (!end) { + var measure = view[view.length - 1].measure + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]} + } + + if (!start || !end) { + sel.removeAllRanges() + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng + try { rng = range(start.node, start.offset, end.offset, end.node) } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset) + if (!rng.collapsed) { + sel.removeAllRanges() + sel.addRange(rng) + } + } else { + sel.removeAllRanges() + sel.addRange(rng) + } + if (old && sel.anchorNode == null) { sel.addRange(old) } + else if (gecko) { this.startGracePeriod() } + } + this.rememberSelection() +}; + +ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod) + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) } + }, 20) +}; + +ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors) + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection) +}; + +ContentEditableInput.prototype.rememberSelection = function () { + var sel = window.getSelection() + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset +}; + +ContentEditableInput.prototype.selectionInEditor = function () { + var sel = window.getSelection() + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer + return contains(this.div, node) +}; + +ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor()) + { this.showSelection(this.prepareSelection(), true) } + this.div.focus() + } +}; +ContentEditableInput.prototype.blur = function () { this.div.blur() }; +ContentEditableInput.prototype.getField = function () { return this.div }; + +ContentEditableInput.prototype.supportsTouch = function () { return true }; + +ContentEditableInput.prototype.receivedFocus = function () { + var input = this + if (this.selectionInEditor()) + { this.pollSelection() } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection() + input.polling.set(input.cm.options.pollInterval, poll) + } + } + this.polling.set(this.cm.options.pollInterval, poll) +}; + +ContentEditableInput.prototype.selectionChanged = function () { + var sel = window.getSelection() + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset +}; + +ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = window.getSelection(), cm = this.cm + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}) + this.blur() + this.focus() + return + } + if (this.composing) { return } + this.rememberSelection() + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var head = domToPos(cm, sel.focusNode, sel.focusOffset) + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll) + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true } + }) } +}; + +ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout) + this.readDOMTimeout = null + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary() + var from = sel.from(), to = sel.to() + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0) } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line) + fromNode = display.view[0].node + } else { + fromLine = lineNo(display.view[fromIndex].line) + fromNode = display.view[fromIndex - 1].node.nextSibling + } + var toIndex = findViewIndex(cm, to.line) + var toLine, toNode + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1 + toNode = display.lineDiv.lastChild + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1 + toNode = display.view[toIndex + 1].node.previousSibling + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)) + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)) + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ } + else { break } + } + + var cutFront = 0, cutEnd = 0 + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length) + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront } + var newBot = lst(newText), oldBot = lst(oldText) + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)) + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront-- + cutEnd++ + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "") + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "") + + var chFrom = Pos(fromLine, cutFront) + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0) + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input") + return true + } +}; + +ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout) + this.composing = null + this.updateFromDOM() + this.div.blur() + this.div.focus() +}; +ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null } + else { return } + } + this$1.updateFromDOM() + }, 80) +}; + +ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }) } +}; + +ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false" +}; + +ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0) { return } + e.preventDefault() + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) } +}; + +ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor") +}; + +ContentEditableInput.prototype.onContextMenu = function () {}; +ContentEditableInput.prototype.resetPosition = function () {}; + +ContentEditableInput.prototype.needsContentAttribute = true + +function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line) + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line) + var info = mapFromLineView(view, line, pos.line) + + var order = getOrder(line, cm.doc.direction), side = "left" + if (order) { + var partPos = getBidiPartAt(order, pos.ch) + side = partPos % 2 ? "right" : "left" + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side) + result.offset = result.collapse == "right" ? result.end : result.start + return result +} + +function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false +} + +function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + +function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator() + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep + closing = false + } + } + function addText(str) { + if (str) { + close() + text += str + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text") + if (cmText != null) { + addText(cmText || node.textContent.replace(/\u200b/g, "")) + return + } + var markerID = node.getAttribute("cm-marker"), range + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)) + if (found.length && (range = found[0].find())) + { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)) } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p)$/i.test(node.nodeName) + if (isBlock) { close() } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]) } + if (isBlock) { closing = true } + } else if (node.nodeType == 3) { + addText(node.nodeValue) + } + } + for (;;) { + walk(from) + if (from == to) { break } + from = from.nextSibling + } + return text +} + +function domToPos(cm, node, offset) { + var lineNode + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset] + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0 + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i] + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } +} + +function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true + node = wrapper.childNodes[offset] + offset = 0 + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild + if (offset) { offset = textNode.nodeValue.length } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode } + var measure = lineView.measure, maps = measure.maps + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i] + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2] + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]) + var ch = map[j] + offset + if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)] } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset) + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0) + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1) + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length } + } +} + +// TEXTAREA INPUT STYLE + +var TextareaInput = function(cm) { + this.cm = cm + // See input.poll and input.reset + this.prevInput = "" + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false + // Self-resetting timeout for the poller + this.polling = new Delayed() + // Tracks when input.reset has punted to just putting a short + // string into the textarea instead of the full selection. + this.inaccurateSelection = false + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false + this.composing = null +}; + +TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm + + // Wraps and hides input textarea + var div = this.wrapper = hiddenTextarea() + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var te = this.textarea = div.firstChild + display.wrapper.insertBefore(div, display.wrapper.firstChild) + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px" } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null } + input.poll() + }) + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = true + input.fastPoll() + }) + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + if (input.inaccurateSelection) { + input.prevInput = "" + input.inaccurateSelection = false + te.value = lastCopied.text.join("\n") + selectInput(te) + } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll) + } else { + input.prevInput = "" + te.value = ranges.text.join("\n") + selectInput(te) + } + } + if (e.type == "cut") { cm.state.cutIncoming = true } + } + on(te, "cut", prepareCopyCut) + on(te, "copy", prepareCopyCut) + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + cm.state.pasteIncoming = true + input.focus() + }) + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e) } + }) + + on(te, "compositionstart", function () { + var start = cm.getCursor("from") + if (input.composing) { input.composing.range.clear() } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + } + }) + on(te, "compositionend", function () { + if (input.composing) { + input.poll() + input.composing.range.clear() + input.composing = null + } + }) +}; + +TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc + var result = prepareSelection(cm) + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div") + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect() + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + } + + return result +}; + +TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display + removeChildrenAndAdd(display.cursorDiv, drawn.cursors) + removeChildrenAndAdd(display.selectionDiv, drawn.selection) + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px" + this.wrapper.style.left = drawn.teLeft + "px" + } +}; + +// Reset the input to correspond to the selection (or to be empty, +// when not typing and nothing is selected) +TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending) { return } + var minimal, selected, cm = this.cm, doc = cm.doc + if (cm.somethingSelected()) { + this.prevInput = "" + var range = doc.sel.primary() + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000) + var content = minimal ? "-" : selected || cm.getSelection() + this.textarea.value = content + if (cm.state.focused) { selectInput(this.textarea) } + if (ie && ie_version >= 9) { this.hasSelection = content } + } else if (!typing) { + this.prevInput = this.textarea.value = "" + if (ie && ie_version >= 9) { this.hasSelection = null } + } + this.inaccurateSelection = minimal +}; + +TextareaInput.prototype.getField = function () { return this.textarea }; + +TextareaInput.prototype.supportsTouch = function () { return false }; + +TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus() } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } +}; + +TextareaInput.prototype.blur = function () { this.textarea.blur() }; + +TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0 +}; + +TextareaInput.prototype.receivedFocus = function () { this.slowPoll() }; + +// Poll for input changes, using the normal rate of polling. This +// runs as long as the editor is focused. +TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll() + if (this$1.cm.state.focused) { this$1.slowPoll() } + }) +}; + +// When an event has just come in that is likely to add or change +// something in the input textarea, we poll faster, to ensure that +// the change appears on the screen quickly. +TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this + input.pollingFast = true + function p() { + var changed = input.poll() + if (!changed && !missed) {missed = true; input.polling.set(60, p)} + else {input.pollingFast = false; input.slowPoll()} + } + input.polling.set(20, p) +}; + +// Read input from the textarea, and update the document to match. +// When something is selected, it is present in the textarea, and +// selected (unless it is huge, in which case a placeholder is +// used). When nothing is selected, the cursor sits after previously +// seen text (can be empty), which is stored in prevInput (we must +// not reset the textarea when typing, because that breaks IME). +TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset() + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0) + if (first == 0x200b && !prevInput) { prevInput = "\u200b" } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length) + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null) + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" } + else { this$1.prevInput = text } + + if (this$1.composing) { + this$1.composing.range.clear() + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}) + } + }) + return true +}; + +TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false } +}; + +TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null } + this.fastPoll() +}; + +TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText + input.wrapper.style.cssText = "position: absolute" + var wrapperBox = input.wrapper.getBoundingClientRect() + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);" + var oldScrollY + if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712) + display.input.focus() + if (webkit) { window.scrollTo(null, oldScrollY) } + display.input.reset() + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " " } + input.contextMenuPending = true + display.selForContextMenu = cm.doc.sel + clearTimeout(display.detectingSelectAll) + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected() + var extval = "\u200b" + (selected ? te.value : "") + te.value = "\u21da" // Used to catch context-menu undo + te.value = extval + input.prevInput = selected ? "" : "\u200b" + te.selectionStart = 1; te.selectionEnd = extval.length + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel + } + } + function rehide() { + input.contextMenuPending = false + input.wrapper.style.cssText = oldWrapperCSS + te.style.cssText = oldCSS + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm) + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500) + } else { + display.selForContextMenu = null + display.input.reset() + } + } + display.detectingSelectAll = setTimeout(poll, 200) + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack() } + if (captureRightClick) { + e_stop(e) + var mouseup = function () { + off(window, "mouseup", mouseup) + setTimeout(rehide, 20) + } + on(window, "mouseup", mouseup) + } else { + setTimeout(rehide, 50) + } +}; + +TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset() } +}; + +TextareaInput.prototype.setUneditable = function () {}; + +TextareaInput.prototype.needsContentAttribute = false + +function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {} + options.value = textarea.value + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt() + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body + } + + function save() {textarea.value = cm.getValue()} + + var realSubmit + if (textarea.form) { + on(textarea.form, "submit", save) + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form + realSubmit = form.submit + try { + var wrappedSubmit = form.submit = function () { + save() + form.submit = realSubmit + form.submit() + form.submit = wrappedSubmit + } + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save + cm.getTextArea = function () { return textarea; } + cm.toTextArea = function () { + cm.toTextArea = isNaN // Prevent this from being ran twice + save() + textarea.parentNode.removeChild(cm.getWrapperElement()) + textarea.style.display = "" + if (textarea.form) { + off(textarea.form, "submit", save) + if (typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit } + } + } + } + + textarea.style.display = "none" + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options) + return cm +} + +function addLegacyProps(CodeMirror) { + CodeMirror.off = off + CodeMirror.on = on + CodeMirror.wheelEventPixels = wheelEventPixels + CodeMirror.Doc = Doc + CodeMirror.splitLines = splitLinesAuto + CodeMirror.countColumn = countColumn + CodeMirror.findColumn = findColumn + CodeMirror.isWordChar = isWordCharBasic + CodeMirror.Pass = Pass + CodeMirror.signal = signal + CodeMirror.Line = Line + CodeMirror.changeEnd = changeEnd + CodeMirror.scrollbarModel = scrollbarModel + CodeMirror.Pos = Pos + CodeMirror.cmpPos = cmp + CodeMirror.modes = modes + CodeMirror.mimeModes = mimeModes + CodeMirror.resolveMode = resolveMode + CodeMirror.getMode = getMode + CodeMirror.modeExtensions = modeExtensions + CodeMirror.extendMode = extendMode + CodeMirror.copyState = copyState + CodeMirror.startState = startState + CodeMirror.innerMode = innerMode + CodeMirror.commands = commands + CodeMirror.keyMap = keyMap + CodeMirror.keyName = keyName + CodeMirror.isModifierKey = isModifierKey + CodeMirror.lookupKey = lookupKey + CodeMirror.normalizeKeyMap = normalizeKeyMap + CodeMirror.StringStream = StringStream + CodeMirror.SharedTextMarker = SharedTextMarker + CodeMirror.TextMarker = TextMarker + CodeMirror.LineWidget = LineWidget + CodeMirror.e_preventDefault = e_preventDefault + CodeMirror.e_stopPropagation = e_stopPropagation + CodeMirror.e_stop = e_stop + CodeMirror.addClass = addClass + CodeMirror.contains = contains + CodeMirror.rmClass = rmClass + CodeMirror.keyNames = keyNames +} + +// EDITOR CONSTRUCTOR + +defineOptions(CodeMirror) + +addEditorMethods(CodeMirror) + +// Set up methods on CodeMirror's prototype to redirect to the editor's document. +var dontDelegate = "iter insert remove copy getEditor constructor".split(" ") +for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]) } } + +eventMixin(Doc) + +// INPUT HANDLING + +CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput} + +// MODE DEFINITION AND QUERYING + +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name } + defineMode.apply(this, arguments) +} + +CodeMirror.defineMIME = defineMIME + +// Minimal default mode. +CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }) +CodeMirror.defineMIME("text/plain", "null") + +// EXTENSIONS + +CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func +} +CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func +} + +CodeMirror.fromTextArea = fromTextArea + +addLegacyProps(CodeMirror) + +CodeMirror.version = "5.25.2" + +return CodeMirror; + +}))); +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var HINT_ELEMENT_CLASS = "CodeMirror-hint"; + var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active"; + + // This is the old interface, kept around for now to stay + // backwards-compatible. + CodeMirror.showHint = function(cm, getHints, options) { + if (!getHints) return cm.showHint(options); + if (options && options.async) getHints.async = true; + var newOpts = {hint: getHints}; + if (options) for (var prop in options) newOpts[prop] = options[prop]; + return cm.showHint(newOpts); + }; + + CodeMirror.defineExtension("showHint", function(options) { + options = parseOptions(this, this.getCursor("start"), options); + var selections = this.listSelections() + if (selections.length > 1) return; + // By default, don't allow completion when something is selected. + // A hint function can have a `supportsSelection` property to + // indicate that it can handle selections. + if (this.somethingSelected()) { + if (!options.hint.supportsSelection) return; + // Don't try with cross-line selections + for (var i = 0; i < selections.length; i++) + if (selections[i].head.line != selections[i].anchor.line) return; + } + + if (this.state.completionActive) this.state.completionActive.close(); + var completion = this.state.completionActive = new Completion(this, options); + if (!completion.options.hint) return; + + CodeMirror.signal(this, "startCompletion", this); + completion.update(true); + }); + + function Completion(cm, options) { + this.cm = cm; + this.options = options; + this.widget = null; + this.debounce = 0; + this.tick = 0; + this.startPos = this.cm.getCursor("start"); + this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length; + + var self = this; + cm.on("cursorActivity", this.activityFunc = function() { self.cursorActivity(); }); + } + + var requestAnimationFrame = window.requestAnimationFrame || function(fn) { + return setTimeout(fn, 1000/60); + }; + var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout; + + Completion.prototype = { + close: function() { + if (!this.active()) return; + this.cm.state.completionActive = null; + this.tick = null; + this.cm.off("cursorActivity", this.activityFunc); + + if (this.widget && this.data) CodeMirror.signal(this.data, "close"); + if (this.widget) this.widget.close(); + CodeMirror.signal(this.cm, "endCompletion", this.cm); + }, + + active: function() { + return this.cm.state.completionActive == this; + }, + + pick: function(data, i) { + var completion = data.list[i]; + if (completion.hint) completion.hint(this.cm, data, completion); + else this.cm.replaceRange(getText(completion), completion.from || data.from, + completion.to || data.to, "complete"); + CodeMirror.signal(data, "pick", completion); + this.close(); + }, + + cursorActivity: function() { + if (this.debounce) { + cancelAnimationFrame(this.debounce); + this.debounce = 0; + } + + var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line); + if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || + pos.ch < this.startPos.ch || this.cm.somethingSelected() || + (pos.ch && this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) { + this.close(); + } else { + var self = this; + this.debounce = requestAnimationFrame(function() {self.update();}); + if (this.widget) this.widget.disable(); + } + }, + + update: function(first) { + if (this.tick == null) return + var self = this, myTick = ++this.tick + fetchHints(this.options.hint, this.cm, this.options, function(data) { + if (self.tick == myTick) self.finishUpdate(data, first) + }) + }, + + finishUpdate: function(data, first) { + if (this.data) CodeMirror.signal(this.data, "update"); + + var picked = (this.widget && this.widget.picked) || (first && this.options.completeSingle); + if (this.widget) this.widget.close(); + + if (data && this.data && isNewCompletion(this.data, data)) return; + this.data = data; + + if (data && data.list.length) { + if (picked && data.list.length == 1) { + this.pick(data, 0); + } else { + this.widget = new Widget(this, data); + CodeMirror.signal(data, "shown"); + } + } + } + }; + + function isNewCompletion(old, nw) { + var moved = CodeMirror.cmpPos(nw.from, old.from) + return moved > 0 && old.to.ch - old.from.ch != nw.to.ch - nw.from.ch + } + + function parseOptions(cm, pos, options) { + var editor = cm.options.hintOptions; + var out = {}; + for (var prop in defaultOptions) out[prop] = defaultOptions[prop]; + if (editor) for (var prop in editor) + if (editor[prop] !== undefined) out[prop] = editor[prop]; + if (options) for (var prop in options) + if (options[prop] !== undefined) out[prop] = options[prop]; + if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos) + return out; + } + + function getText(completion) { + if (typeof completion == "string") return completion; + else return completion.text; + } + + function buildKeyMap(completion, handle) { + var baseMap = { + Up: function() {handle.moveFocus(-1);}, + Down: function() {handle.moveFocus(1);}, + PageUp: function() {handle.moveFocus(-handle.menuSize() + 1, true);}, + PageDown: function() {handle.moveFocus(handle.menuSize() - 1, true);}, + Home: function() {handle.setFocus(0);}, + End: function() {handle.setFocus(handle.length - 1);}, + Enter: handle.pick, + Tab: handle.pick, + Esc: handle.close + }; + var custom = completion.options.customKeys; + var ourMap = custom ? {} : baseMap; + function addBinding(key, val) { + var bound; + if (typeof val != "string") + bound = function(cm) { return val(cm, handle); }; + // This mechanism is deprecated + else if (baseMap.hasOwnProperty(val)) + bound = baseMap[val]; + else + bound = val; + ourMap[key] = bound; + } + if (custom) + for (var key in custom) if (custom.hasOwnProperty(key)) + addBinding(key, custom[key]); + var extra = completion.options.extraKeys; + if (extra) + for (var key in extra) if (extra.hasOwnProperty(key)) + addBinding(key, extra[key]); + return ourMap; + } + + function getHintElement(hintsElement, el) { + while (el && el != hintsElement) { + if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el; + el = el.parentNode; + } + } + + function Widget(completion, data) { + this.completion = completion; + this.data = data; + this.picked = false; + var widget = this, cm = completion.cm; + + var hints = this.hints = document.createElement("ul"); + hints.className = "CodeMirror-hints"; + this.selectedHint = data.selectedHint || 0; + + var completions = data.list; + for (var i = 0; i < completions.length; ++i) { + var elt = hints.appendChild(document.createElement("li")), cur = completions[i]; + var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS); + if (cur.className != null) className = cur.className + " " + className; + elt.className = className; + if (cur.render) cur.render(elt, data, cur); + else elt.appendChild(document.createTextNode(cur.displayText || getText(cur))); + elt.hintId = i; + } + + var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null); + var left = pos.left, top = pos.bottom, below = true; + hints.style.left = left + "px"; + hints.style.top = top + "px"; + // If we're at the edge of the screen, then we want the menu to appear on the left of the cursor. + var winW = window.innerWidth || Math.max(document.body.offsetWidth, document.documentElement.offsetWidth); + var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight); + (completion.options.container || document.body).appendChild(hints); + var box = hints.getBoundingClientRect(), overlapY = box.bottom - winH; + var scrolls = hints.scrollHeight > hints.clientHeight + 1 + var startScroll = cm.getScrollInfo(); + + if (overlapY > 0) { + var height = box.bottom - box.top, curTop = pos.top - (pos.bottom - box.top); + if (curTop - height > 0) { // Fits above cursor + hints.style.top = (top = pos.top - height) + "px"; + below = false; + } else if (height > winH) { + hints.style.height = (winH - 5) + "px"; + hints.style.top = (top = pos.bottom - box.top) + "px"; + var cursor = cm.getCursor(); + if (data.from.ch != cursor.ch) { + pos = cm.cursorCoords(cursor); + hints.style.left = (left = pos.left) + "px"; + box = hints.getBoundingClientRect(); + } + } + } + var overlapX = box.right - winW; + if (overlapX > 0) { + if (box.right - box.left > winW) { + hints.style.width = (winW - 5) + "px"; + overlapX -= (box.right - box.left) - winW; + } + hints.style.left = (left = pos.left - overlapX) + "px"; + } + if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) + node.style.paddingRight = cm.display.nativeBarWidth + "px" + + cm.addKeyMap(this.keyMap = buildKeyMap(completion, { + moveFocus: function(n, avoidWrap) { widget.changeActive(widget.selectedHint + n, avoidWrap); }, + setFocus: function(n) { widget.changeActive(n); }, + menuSize: function() { return widget.screenAmount(); }, + length: completions.length, + close: function() { completion.close(); }, + pick: function() { widget.pick(); }, + data: data + })); + + if (completion.options.closeOnUnfocus) { + var closingOnBlur; + cm.on("blur", this.onBlur = function() { closingOnBlur = setTimeout(function() { completion.close(); }, 100); }); + cm.on("focus", this.onFocus = function() { clearTimeout(closingOnBlur); }); + } + + cm.on("scroll", this.onScroll = function() { + var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect(); + var newTop = top + startScroll.top - curScroll.top; + var point = newTop - (window.pageYOffset || (document.documentElement || document.body).scrollTop); + if (!below) point += hints.offsetHeight; + if (point <= editor.top || point >= editor.bottom) return completion.close(); + hints.style.top = newTop + "px"; + hints.style.left = (left + startScroll.left - curScroll.left) + "px"; + }); + + CodeMirror.on(hints, "dblclick", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) {widget.changeActive(t.hintId); widget.pick();} + }); + + CodeMirror.on(hints, "click", function(e) { + var t = getHintElement(hints, e.target || e.srcElement); + if (t && t.hintId != null) { + widget.changeActive(t.hintId); + if (completion.options.completeOnSingleClick) widget.pick(); + } + }); + + CodeMirror.on(hints, "mousedown", function() { + setTimeout(function(){cm.focus();}, 20); + }); + + CodeMirror.signal(data, "select", completions[0], hints.firstChild); + return true; + } + + Widget.prototype = { + close: function() { + if (this.completion.widget != this) return; + this.completion.widget = null; + this.hints.parentNode.removeChild(this.hints); + this.completion.cm.removeKeyMap(this.keyMap); + + var cm = this.completion.cm; + if (this.completion.options.closeOnUnfocus) { + cm.off("blur", this.onBlur); + cm.off("focus", this.onFocus); + } + cm.off("scroll", this.onScroll); + }, + + disable: function() { + this.completion.cm.removeKeyMap(this.keyMap); + var widget = this; + this.keyMap = {Enter: function() { widget.picked = true; }}; + this.completion.cm.addKeyMap(this.keyMap); + }, + + pick: function() { + this.completion.pick(this.data, this.selectedHint); + }, + + changeActive: function(i, avoidWrap) { + if (i >= this.data.list.length) + i = avoidWrap ? this.data.list.length - 1 : 0; + else if (i < 0) + i = avoidWrap ? 0 : this.data.list.length - 1; + if (this.selectedHint == i) return; + var node = this.hints.childNodes[this.selectedHint]; + node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, ""); + node = this.hints.childNodes[this.selectedHint = i]; + node.className += " " + ACTIVE_HINT_ELEMENT_CLASS; + if (node.offsetTop < this.hints.scrollTop) + this.hints.scrollTop = node.offsetTop - 3; + else if (node.offsetTop + node.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) + this.hints.scrollTop = node.offsetTop + node.offsetHeight - this.hints.clientHeight + 3; + CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node); + }, + + screenAmount: function() { + return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1; + } + }; + + function applicableHelpers(cm, helpers) { + if (!cm.somethingSelected()) return helpers + var result = [] + for (var i = 0; i < helpers.length; i++) + if (helpers[i].supportsSelection) result.push(helpers[i]) + return result + } + + function fetchHints(hint, cm, options, callback) { + if (hint.async) { + hint(cm, callback, options) + } else { + var result = hint(cm, options) + if (result && result.then) result.then(callback) + else callback(result) + } + } + + function resolveAutoHints(cm, pos) { + var helpers = cm.getHelpers(pos, "hint"), words + if (helpers.length) { + var resolved = function(cm, callback, options) { + var app = applicableHelpers(cm, helpers); + function run(i) { + if (i == app.length) return callback(null) + fetchHints(app[i], cm, options, function(result) { + if (result && result.list.length > 0) callback(result) + else run(i + 1) + }) + } + run(0) + } + resolved.async = true + resolved.supportsSelection = true + return resolved + } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) { + return function(cm) { return CodeMirror.hint.fromList(cm, {words: words}) } + } else if (CodeMirror.hint.anyword) { + return function(cm, options) { return CodeMirror.hint.anyword(cm, options) } + } else { + return function() {} + } + } + + CodeMirror.registerHelper("hint", "auto", { + resolve: resolveAutoHints + }); + + CodeMirror.registerHelper("hint", "fromList", function(cm, options) { + var cur = cm.getCursor(), token = cm.getTokenAt(cur); + var to = CodeMirror.Pos(cur.line, token.end); + if (token.string && /\w/.test(token.string[token.string.length - 1])) { + var term = token.string, from = CodeMirror.Pos(cur.line, token.start); + } else { + var term = "", from = to; + } + var found = []; + for (var i = 0; i < options.words.length; i++) { + var word = options.words[i]; + if (word.slice(0, term.length) == term) + found.push(word); + } + + if (found.length) return {list: found, from: from, to: to}; + }); + + CodeMirror.commands.autocomplete = CodeMirror.showHint; + + var defaultOptions = { + hint: CodeMirror.hint.auto, + completeSingle: true, + alignWithWord: true, + closeCharacters: /[\s()\[\]{};:>,]/, + closeOnUnfocus: true, + completeOnSingleClick: true, + container: null, + customKeys: null, + extraKeys: null + }; + + CodeMirror.defineOption("hintOptions", null); +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var Pos = CodeMirror.Pos; + + function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); + } + + function arrayContains(arr, item) { + if (!Array.prototype.indexOf) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + return true; + } + } + return false; + } + return arr.indexOf(item) != -1; + } + + function scriptHint(editor, keywords, getToken, options) { + // Find the token at the cursor + var cur = editor.getCursor(), token = getToken(editor, cur); + if (/\b(?:string|comment)\b/.test(token.type)) return; + token.state = CodeMirror.innerMode(editor.getMode(), token.state).state; + + // If it's not a 'word-style' token, ignore the token. + if (!/^[\w$_]*$/.test(token.string)) { + token = {start: cur.ch, end: cur.ch, string: "", state: token.state, + type: token.string == "." ? "property" : null}; + } else if (token.end > cur.ch) { + token.end = cur.ch; + token.string = token.string.slice(0, cur.ch - token.start); + } + + var tprop = token; + // If it is a property, find out what it is a property of. + while (tprop.type == "property") { + tprop = getToken(editor, Pos(cur.line, tprop.start)); + if (tprop.string != ".") return; + tprop = getToken(editor, Pos(cur.line, tprop.start)); + if (!context) var context = []; + context.push(tprop); + } + return {list: getCompletions(token, context, keywords, options), + from: Pos(cur.line, token.start), + to: Pos(cur.line, token.end)}; + } + + function javascriptHint(editor, options) { + return scriptHint(editor, javascriptKeywords, + function (e, cur) {return e.getTokenAt(cur);}, + options); + }; + CodeMirror.registerHelper("hint", "javascript", javascriptHint); + + function getCoffeeScriptToken(editor, cur) { + // This getToken, it is for coffeescript, imitates the behavior of + // getTokenAt method in javascript.js, that is, returning "property" + // type and treat "." as indepenent token. + var token = editor.getTokenAt(cur); + if (cur.ch == token.start + 1 && token.string.charAt(0) == '.') { + token.end = token.start; + token.string = '.'; + token.type = "property"; + } + else if (/^\.[\w$_]*$/.test(token.string)) { + token.type = "property"; + token.start++; + token.string = token.string.replace(/\./, ''); + } + return token; + } + + function coffeescriptHint(editor, options) { + return scriptHint(editor, coffeescriptKeywords, getCoffeeScriptToken, options); + } + CodeMirror.registerHelper("hint", "coffeescript", coffeescriptHint); + + var stringProps = ("charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight " + + "toUpperCase toLowerCase split concat match replace search").split(" "); + var arrayProps = ("length concat join splice push pop shift unshift slice reverse sort indexOf " + + "lastIndexOf every some filter forEach map reduce reduceRight ").split(" "); + var funcProps = "prototype apply call bind".split(" "); + var javascriptKeywords = ("break case catch continue debugger default delete do else false finally for function " + + "if in instanceof new null return switch throw true try typeof var void while with").split(" "); + var coffeescriptKeywords = ("and break catch class continue delete do else extends false finally for " + + "if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes").split(" "); + + function forAllProps(obj, callback) { + if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) { + for (var name in obj) callback(name) + } else { + for (var o = obj; o; o = Object.getPrototypeOf(o)) + Object.getOwnPropertyNames(o).forEach(callback) + } + } + + function getCompletions(token, context, keywords, options) { + var found = [], start = token.string, global = options && options.globalScope || window; + function maybeAdd(str) { + if (str.lastIndexOf(start, 0) == 0 && !arrayContains(found, str)) found.push(str); + } + function gatherCompletions(obj) { + if (typeof obj == "string") forEach(stringProps, maybeAdd); + else if (obj instanceof Array) forEach(arrayProps, maybeAdd); + else if (obj instanceof Function) forEach(funcProps, maybeAdd); + forAllProps(obj, maybeAdd) + } + + if (context && context.length) { + // If this is a property, see if it belongs to some object we can + // find in the current environment. + var obj = context.pop(), base; + if (obj.type && obj.type.indexOf("variable") === 0) { + if (options && options.additionalContext) + base = options.additionalContext[obj.string]; + if (!options || options.useGlobalScope !== false) + base = base || global[obj.string]; + } else if (obj.type == "string") { + base = ""; + } else if (obj.type == "atom") { + base = 1; + } else if (obj.type == "function") { + if (global.jQuery != null && (obj.string == '$' || obj.string == 'jQuery') && + (typeof global.jQuery == 'function')) + base = global.jQuery(); + else if (global._ != null && (obj.string == '_') && (typeof global._ == 'function')) + base = global._(); + } + while (base != null && context.length) + base = base[context.pop().string]; + if (base != null) gatherCompletions(base); + } else { + // If not, just look in the global object and any local scope + // (reading into JS mode internals to get at the local and global variables) + for (var v = token.state.localVars; v; v = v.next) maybeAdd(v.name); + for (var v = token.state.globalVars; v; v = v.next) maybeAdd(v.name); + if (!options || options.useGlobalScope !== false) + gatherCompletions(global); + forEach(keywords, maybeAdd); + } + return found; + } +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../../mode/sql/sql")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../../mode/sql/sql"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var tables; + var defaultTable; + var keywords; + var identifierQuote; + var CONS = { + QUERY_DIV: ";", + ALIAS_KEYWORD: "AS" + }; + var Pos = CodeMirror.Pos, cmpPos = CodeMirror.cmpPos; + + function isArray(val) { return Object.prototype.toString.call(val) == "[object Array]" } + + function getKeywords(editor) { + var mode = editor.doc.modeOption; + if (mode === "sql") mode = "text/x-sql"; + return CodeMirror.resolveMode(mode).keywords; + } + + function getIdentifierQuote(editor) { + var mode = editor.doc.modeOption; + if (mode === "sql") mode = "text/x-sql"; + return CodeMirror.resolveMode(mode).identifierQuote || "`"; + } + + function getText(item) { + return typeof item == "string" ? item : item.text; + } + + function wrapTable(name, value) { + if (isArray(value)) value = {columns: value} + if (!value.text) value.text = name + return value + } + + function parseTables(input) { + var result = {} + if (isArray(input)) { + for (var i = input.length - 1; i >= 0; i--) { + var item = input[i] + result[getText(item).toUpperCase()] = wrapTable(getText(item), item) + } + } else if (input) { + for (var name in input) + result[name.toUpperCase()] = wrapTable(name, input[name]) + } + return result + } + + function getTable(name) { + return tables[name.toUpperCase()] + } + + function shallowClone(object) { + var result = {}; + for (var key in object) if (object.hasOwnProperty(key)) + result[key] = object[key]; + return result; + } + + function match(string, word) { + var len = string.length; + var sub = getText(word).substr(0, len); + return string.toUpperCase() === sub.toUpperCase(); + } + + function addMatches(result, search, wordlist, formatter) { + if (isArray(wordlist)) { + for (var i = 0; i < wordlist.length; i++) + if (match(search, wordlist[i])) result.push(formatter(wordlist[i])) + } else { + for (var word in wordlist) if (wordlist.hasOwnProperty(word)) { + var val = wordlist[word] + if (!val || val === true) + val = word + else + val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text + if (match(search, val)) result.push(formatter(val)) + } + } + } + + function cleanName(name) { + // Get rid name from identifierQuote and preceding dot(.) + if (name.charAt(0) == ".") { + name = name.substr(1); + } + // replace doublicated identifierQuotes with single identifierQuotes + // and remove single identifierQuotes + var nameParts = name.split(identifierQuote+identifierQuote); + for (var i = 0; i < nameParts.length; i++) + nameParts[i] = nameParts[i].replace(new RegExp(identifierQuote,"g"), ""); + return nameParts.join(identifierQuote); + } + + function insertIdentifierQuotes(name) { + var nameParts = getText(name).split("."); + for (var i = 0; i < nameParts.length; i++) + nameParts[i] = identifierQuote + + // doublicate identifierQuotes + nameParts[i].replace(new RegExp(identifierQuote,"g"), identifierQuote+identifierQuote) + + identifierQuote; + var escaped = nameParts.join("."); + if (typeof name == "string") return escaped; + name = shallowClone(name); + name.text = escaped; + return name; + } + + function nameCompletion(cur, token, result, editor) { + // Try to complete table, column names and return start position of completion + var useIdentifierQuotes = false; + var nameParts = []; + var start = token.start; + var cont = true; + while (cont) { + cont = (token.string.charAt(0) == "."); + useIdentifierQuotes = useIdentifierQuotes || (token.string.charAt(0) == identifierQuote); + + start = token.start; + nameParts.unshift(cleanName(token.string)); + + token = editor.getTokenAt(Pos(cur.line, token.start)); + if (token.string == ".") { + cont = true; + token = editor.getTokenAt(Pos(cur.line, token.start)); + } + } + + // Try to complete table names + var string = nameParts.join("."); + addMatches(result, string, tables, function(w) { + return useIdentifierQuotes ? insertIdentifierQuotes(w) : w; + }); + + // Try to complete columns from defaultTable + addMatches(result, string, defaultTable, function(w) { + return useIdentifierQuotes ? insertIdentifierQuotes(w) : w; + }); + + // Try to complete columns + string = nameParts.pop(); + var table = nameParts.join("."); + + var alias = false; + var aliasTable = table; + // Check if table is available. If not, find table by Alias + if (!getTable(table)) { + var oldTable = table; + table = findTableByAlias(table, editor); + if (table !== oldTable) alias = true; + } + + var columns = getTable(table); + if (columns && columns.columns) + columns = columns.columns; + + if (columns) { + addMatches(result, string, columns, function(w) { + var tableInsert = table; + if (alias == true) tableInsert = aliasTable; + if (typeof w == "string") { + w = tableInsert + "." + w; + } else { + w = shallowClone(w); + w.text = tableInsert + "." + w.text; + } + return useIdentifierQuotes ? insertIdentifierQuotes(w) : w; + }); + } + + return start; + } + + function eachWord(lineText, f) { + if (!lineText) return; + var excepted = /[,;]/g; + var words = lineText.split(" "); + for (var i = 0; i < words.length; i++) { + f(words[i]?words[i].replace(excepted, '') : ''); + } + } + + function findTableByAlias(alias, editor) { + var doc = editor.doc; + var fullQuery = doc.getValue(); + var aliasUpperCase = alias.toUpperCase(); + var previousWord = ""; + var table = ""; + var separator = []; + var validRange = { + start: Pos(0, 0), + end: Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).length) + }; + + //add separator + var indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV); + while(indexOfSeparator != -1) { + separator.push(doc.posFromIndex(indexOfSeparator)); + indexOfSeparator = fullQuery.indexOf(CONS.QUERY_DIV, indexOfSeparator+1); + } + separator.unshift(Pos(0, 0)); + separator.push(Pos(editor.lastLine(), editor.getLineHandle(editor.lastLine()).text.length)); + + //find valid range + var prevItem = null; + var current = editor.getCursor() + for (var i = 0; i < separator.length; i++) { + if ((prevItem == null || cmpPos(current, prevItem) > 0) && cmpPos(current, separator[i]) <= 0) { + validRange = {start: prevItem, end: separator[i]}; + break; + } + prevItem = separator[i]; + } + + var query = doc.getRange(validRange.start, validRange.end, false); + + for (var i = 0; i < query.length; i++) { + var lineText = query[i]; + eachWord(lineText, function(word) { + var wordUpperCase = word.toUpperCase(); + if (wordUpperCase === aliasUpperCase && getTable(previousWord)) + table = previousWord; + if (wordUpperCase !== CONS.ALIAS_KEYWORD) + previousWord = word; + }); + if (table) break; + } + return table; + } + + CodeMirror.registerHelper("hint", "sql", function(editor, options) { + tables = parseTables(options && options.tables) + var defaultTableName = options && options.defaultTable; + var disableKeywords = options && options.disableKeywords; + defaultTable = defaultTableName && getTable(defaultTableName); + keywords = getKeywords(editor); + identifierQuote = getIdentifierQuote(editor); + + if (defaultTableName && !defaultTable) + defaultTable = findTableByAlias(defaultTableName, editor); + + defaultTable = defaultTable || []; + + if (defaultTable.columns) + defaultTable = defaultTable.columns; + + var cur = editor.getCursor(); + var result = []; + var token = editor.getTokenAt(cur), start, end, search; + if (token.end > cur.ch) { + token.end = cur.ch; + token.string = token.string.slice(0, cur.ch - token.start); + } + + if (token.string.match(/^[.`"\w@]\w*$/)) { + search = token.string; + start = token.start; + end = token.end; + } else { + start = end = cur.ch; + search = ""; + } + if (search.charAt(0) == "." || search.charAt(0) == identifierQuote) { + start = nameCompletion(cur, token, result, editor); + } else { + addMatches(result, search, tables, function(w) {return w;}); + addMatches(result, search, defaultTable, function(w) {return w;}); + if (!disableKeywords) + addMatches(result, search, keywords, function(w) {return w.toUpperCase();}); + } + + return {list: result, from: Pos(cur.line, start), to: Pos(cur.line, end)}; + }); +}); + +(function () { + var Pos = CodeMirror.Pos; + + function forEach(arr, f) { + for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]); + } + + function arrayContains(arr, item) { + if (!Array.prototype.indexOf) { + var i = arr.length; + while (i--) { + if (arr[i] === item) { + return true; + } + } + return false; + } + return arr.indexOf(item) != -1; + } + + function scriptHint(editor, keywords, getToken, options) { + // Find the token at the cursor + var cur = editor.getCursor(), token = getToken(editor, cur), tprop = token; + var sToken = token.string.trim(); + + if ( sToken == "(") { + token = tprop = getToken(editor, Pos(cur.line, tprop.start)); + return {list: getCompletions(token.string, keywords, options), + from: Pos(cur.line, token.start), + to: Pos(cur.line, token.end + 1)}; + } + if ( sToken == "=") { + return {list: getCompletions(token.string, keywords, options), + from: Pos(cur.line, token.start + 1), + to: Pos(cur.line, token.end)}; + } + return {list: getCompletions(token.string, keywords, options), + from: Pos(cur.line, token.start), + to: Pos(cur.line, token.end)}; + } + + CodeMirror.phpHint = function(editor, options) { + return scriptHint(editor, phpPMFunctions, function (e, cur) {return e.getTokenAt(cur);}, options); + }; + + var SPACE = " "; + var arrayFunctions = []; + + var formatDate = "formatDate"; + var formatDateFunction = [formatDate+"($date,$format,$language);",formatDate+"($date,$format);"]; + arrayFunctions[formatDate] = formatDateFunction; + + var getCurrentDate = "getCurrentDate"; + var getCurrentDateFunction = [getCurrentDate+"()"]; + arrayFunctions[getCurrentDate] = getCurrentDateFunction; + + var getCurrentTime = "getCurrentTime"; + var getCurrentTimeFunction = [getCurrentTime+"()"]; + arrayFunctions[getCurrentTime] = getCurrentTimeFunction; + + var literalDate = "literalDate"; + var literalDateFunction = [literalDate+"($date,$Language)",literalDate+"($date)"]; + arrayFunctions[literalDate] = literalDateFunction; + + var capitalize = "capitalize"; + var capitalizeFunction = [capitalize+"($textToConvert)"]; + arrayFunctions[capitalize] = capitalizeFunction; + + var lowerCase = "lowerCase"; + var lowerCaseFunction = [lowerCase+"($textToConvert)"]; + arrayFunctions[lowerCase] = lowerCaseFunction; + + var upperCase = "upperCase"; + var upperCaseFunction = [upperCase+"($textToConvert)"]; + arrayFunctions[upperCase] = upperCaseFunction; + + var userInfo = "userInfo"; + var userInfoFunction = [userInfo+"($USER_ID)"]; + arrayFunctions[userInfo] = userInfoFunction; + + var executeQuery = "executeQuery"; + var executeQueryFunction = [executeQuery+"($sqlStatement,$DBConnectionUID)",executeQuery+"($sqlStatement)"]; + arrayFunctions[executeQuery] = executeQueryFunction; + + var orderGrid = "orderGrid"; + var orderGridFunction = ("orderGrid($gridName,$field,$criteria) orderGrid($gridName,$field)").split(SPACE); + arrayFunctions[orderGrid] = orderGridFunction; + + var evaluateFunction = "evaluateFunction"; + var evaluateFunctionFunction = [evaluateFunction+"($gridName,$Expression)"]; + arrayFunctions[evaluateFunction] = evaluateFunctionFunction; + + var PMFTotalCalculation = "PMFTotalCalculation"; + var PMFTotalCalculationFunction = [PMFTotalCalculation + "($gridName, $field, 'function')"]; + arrayFunctions[PMFTotalCalculation] = PMFTotalCalculationFunction; + + var PMFTaskCase = "PMFTaskCase"; + var PMFTaskCaseFunction = [PMFTaskCase+"($caseId)"]; + arrayFunctions[PMFTaskCase] = PMFTaskCaseFunction; + + var PMFTaskList = "PMFTaskList"; + var PMFTaskListFunction = [PMFTaskList+"($userId)"]; + arrayFunctions[PMFTaskList] = PMFTaskListFunction; + + var PMFUserList = "PMFUserList"; + var PMFUserListFunction = [PMFUserList+"()"]; + arrayFunctions[PMFUserList] = PMFUserListFunction; + + var PMFGroupList = "PMFGroupList"; + var PMFGroupListFunction = [PMFGroupList+"()"]; + arrayFunctions[PMFGroupList] = PMFGroupListFunction; + + var PMFRoleList = "PMFRoleList"; + var PMFRoleListFunction = [PMFRoleList+"()"]; + arrayFunctions[PMFRoleList] = PMFRoleListFunction; + + var PMFCaseList = "PMFCaseList"; + var PMFCaseListFunction = [PMFCaseList+"($userId)",PMFCaseList+"()"]; + arrayFunctions[PMFCaseList] = PMFCaseListFunction; + + var PMFProcessList = "PMFProcessList"; + var PMFProcessListFunction = [PMFProcessList+"()"]; + arrayFunctions[PMFProcessList] = PMFProcessListFunction; + + var PMFSendVariables = "PMFSendVariables"; + var PMFSendVariablesFunction = [PMFSendVariables+"($caseId,$variables)"]; + arrayFunctions[PMFSendVariables] = PMFSendVariablesFunction; + + var PMFDerivateCase = "PMFDerivateCase"; + var PMFDerivateCaseFunction = [PMFDerivateCase+"($caseId,$delegation,$executeTriggersBeforeAssigment)",PMFDerivateCase+"($caseId,$delegation)"]; + arrayFunctions[PMFDerivateCase] = PMFDerivateCaseFunction; + + var PMFNewCaseImpersonate = "PMFNewCaseImpersonate"; + var PMFNewCaseImpersonateFunction = [PMFNewCaseImpersonate+"($processId,$userId,$variables)"]; + arrayFunctions[PMFNewCaseImpersonate] = PMFNewCaseImpersonateFunction; + + var PMFNewCase = "PMFNewCase"; + var PMFNewCaseFunction = [PMFNewCase+"($processId,$userId,$taskId,$variables)"]; + arrayFunctions[PMFNewCase] = PMFNewCaseFunction; + + var PMFPauseCase = "PMFPauseCase"; + var PMFPauseCaseFunction = [PMFPauseCase+"($caseUid,$delIndex,$userUid,$unpauseDate)",PMFPauseCase+"($caseUid,$delIndex,$userUid)"]; + arrayFunctions[PMFPauseCase] = PMFPauseCaseFunction; + + var PMFAssignUserToGroup = "PMFAssignUserToGroup"; + var PMFAssignUserToGroupFunction = [PMFAssignUserToGroup+"($userId,$groupId)"]; + arrayFunctions[PMFAssignUserToGroup] = PMFAssignUserToGroupFunction; + + var PMFCreateUser = "PMFCreateUser"; + var PMFCreateUserFunction = [PMFCreateUser+"($userId,$password,$firstname,$lastname,$email,$role)"]; + arrayFunctions[PMFCreateUser] = PMFCreateUserFunction; + + var PMFUpdateUser = "PMFUpdateUser"; + var PMFUpdateUserFunction = [PMFUpdateUser+"($userUid,$userName,$firstName,$lastName,$email,$dueDate,$status,$role,$password)"]; + arrayFunctions[PMFUpdateUser] = PMFUpdateUserFunction; + + var PMFInformationUser = "PMFInformationUser"; + var PMFInformationUserFunction = [PMFInformationUser+"($userUid)"]; + arrayFunctions[PMFInformationUser] = PMFInformationUserFunction; + + var generateCode = "generateCode"; + var generateCodeFunction = [generateCode+"($size,$type)"]; + arrayFunctions[generateCode] = generateCodeFunction; + + var setCaseTrackerCode = "setCaseTrackerCode"; + var setCaseTrackerCodeFunction = [setCaseTrackerCode+"($caseId,$code,$pin)"]; + arrayFunctions[setCaseTrackerCode] = setCaseTrackerCodeFunction; + + var jumping = "jumping"; + var jumpingFunction = [jumping+"($caseId,$delegation)"]; + arrayFunctions[jumping] = jumpingFunction; + + var PMFRedirectToStep = "PMFRedirectToStep"; + var PMFRedirectToStepFunction = [PMFRedirectToStep+"($caseId,$delegation,$stepType,$stepId)"]; + arrayFunctions[PMFRedirectToStep] = PMFRedirectToStepFunction; + + var pauseCase = "pauseCase"; + var pauseCaseFunction = [pauseCase+"($caseId,$delegation,$userId,$unpauseDate)",pauseCase+"($caseId,$delegation,$userId)"]; + arrayFunctions[pauseCase] = pauseCaseFunction; + + var PMFUnpauseCase = "PMFUnpauseCase"; + var PMFUnpauseCaseFunction = [PMFUnpauseCase+"($caseId,$delegation,$userId,$unpauseDate)",PMFUnpauseCase+"($caseId,$delegation,$userId)"]; + arrayFunctions[PMFUnpauseCase] = PMFUnpauseCaseFunction; + + var PMFSendMessage = "PMFSendMessage"; + var PMFSendMessageFunction = [PMFSendMessage+"($caseId,$from,$to,$cc,$bcc,$subject,$template,$fields,$attachments)",PMFSendMessage+"($caseId,$from,$to,$cc,$bcc,$subject,$template,$fields)",PMFSendMessage+"($caseId,$from,$to,$cc,$bcc,$subject,$template)"]; + arrayFunctions[PMFSendMessage] = PMFSendMessageFunction; + + var PMFgetLabelOption = "PMFgetLabelOption"; + var PMFgetLabelOptionFunction = [PMFgetLabelOption+"($processId,$dynaformId,$fieldName,$optionId)"]; + arrayFunctions[PMFgetLabelOption] = PMFgetLabelOptionFunction; + + var PMFGenerateOutputDocument = "PMFGenerateOutputDocument"; + var PMFGenerateOutputDocumentFunction = [PMFGenerateOutputDocument+"($outputID)"]; + arrayFunctions[PMFGenerateOutputDocument] = PMFGenerateOutputDocumentFunction; + + var PMFGetUserEmailAddress = "PMFGetUserEmailAddress"; + var PMFGetUserEmailAddressFunction = [PMFGetUserEmailAddress+"($id,$APP_UID,$prefix)",PMFGetUserEmailAddress+"($id,$APP_UID)",PMFGetUserEmailAddress+"($id)"]; + arrayFunctions[PMFGetUserEmailAddress] = PMFGetUserEmailAddressFunction; + + var PMFGetNextAssignedUser = "PMFGetNextAssignedUser"; + var PMFGetNextAssignedUserFunction = (PMFGetNextAssignedUser+"($application,$task)").split(SPACE); + arrayFunctions[PMFGetNextAssignedUser] = PMFGetNextAssignedUserFunction; + + var PMFDeleteCase = "PMFDeleteCase"; + var PMFDeleteCaseFunction = ("PMFDeleteCase($caseId)").split(SPACE); + arrayFunctions[PMFDeleteCase] = PMFDeleteCaseFunction; + + var PMFCancelCase = "PMFCancelCase"; + var PMFCancelCaseFunction = [PMFCancelCase+"($caseUid,$delIndex,$userUid)"]; + arrayFunctions[PMFCancelCase] = PMFCancelCaseFunction; + + var PMFAddInputDocument = "PMFAddInputDocument"; + var PMFAddInputDocumentFunction = [PMFAddInputDocument+"($inputDocumentUid,$appDocUid,$docVersion,$appDocType,$appDocComment,$inputDocumentAction,$caseUid,$delIndex,$taskUid,$userUid,$option,$file)",PMFAddInputDocument+"($inputDocumentUid,$appDocUid,$docVersion,$appDocType,$appDocComment,$inputDocumentAction,$caseUid,$delIndex,$taskUid,$userUid,$option)",PMFAddInputDocument+"($inputDocumentUid,$appDocUid,$docVersion,$appDocType,$appDocComment,$inputDocumentAction,$caseUid,$delIndex,$taskUid,$userUid)"]; + arrayFunctions[PMFAddInputDocument] = PMFAddInputDocumentFunction; + + var PMFAddCaseNote = "PMFAddCaseNote"; + var PMFAddCaseNoteFunction = [PMFAddCaseNote+"($caseUid,$processUid,$taskUid,$userUid,$note,$sendMail)"]; + arrayFunctions[PMFAddCaseNote] = PMFAddCaseNoteFunction; + + var PMFGetCaseNotes = "PMFGetCaseNotes"; + var PMFGetCaseNotesFunction = [PMFGetCaseNotes+"($applicationID,$type,$userUid);",PMFGetCaseNotes+"($applicationID,$type)",PMFGetCaseNotes+"($applicationID)"]; + arrayFunctions[PMFGetCaseNotes] = PMFGetCaseNotesFunction; + + var phpPMFunctions = [formatDate,getCurrentDate,getCurrentTime,literalDate,capitalize,lowerCase,upperCase,userInfo,executeQuery,orderGrid, + evaluateFunction, PMFTotalCalculation, PMFTaskCase,PMFTaskList,PMFUserList,PMFGroupList,PMFRoleList,PMFCaseList,PMFProcessList,PMFSendVariables,PMFDerivateCase, + PMFNewCaseImpersonate,PMFNewCase,PMFPauseCase,PMFUnpauseCase,PMFAssignUserToGroup,PMFCreateUser,PMFUpdateUser,PMFInformationUser, + generateCode,setCaseTrackerCode,jumping,PMFRedirectToStep,pauseCase,PMFSendMessage,PMFgetLabelOption,PMFGenerateOutputDocument, + PMFGetUserEmailAddress,PMFGetNextAssignedUser,PMFDeleteCase,PMFCancelCase,PMFAddInputDocument,PMFAddCaseNote,PMFGetCaseNotes]; + + var phpKeywords = ("break case catch continue default do else false for function " + + "if new return switch throw true try var while").split(SPACE); + + function getCompletions(functionName, keywords, options) { + + var found = []; + + function maybeAdd(str) {// for keywords ? + if ( str.indexOf(functionName) == 0 && !arrayContains(found, str)) { + found.push(str); + } + } + + function yesAdd(str) { + if ( !arrayContains(found, str)) { + found.push(str); + } + } + + arrayFunction = arrayFunctions[functionName]; + + if (arrayFunction != undefined) { + forEach( arrayFunction, yesAdd); + } else { + if (functionName.trim() == "") { + forEach (phpKeywords, yesAdd); + forEach (keywords, yesAdd); + } else if (functionName == "=") { + forEach (phpPMFunctions, yesAdd); + } else { + for (index = 0; index < phpKeywords.length; index++) { + if ( phpKeywords[index].indexOf(functionName) == 0 ) { + found.push(phpKeywords[index]); + } + } + forEach(keywords, maybeAdd); + } + } + return found; + } +})(); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("./xml-hint")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "./xml-hint"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var langs = "ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "); + var targets = ["_blank", "_self", "_top", "_parent"]; + var charsets = ["ascii", "utf-8", "utf-16", "latin1", "latin1"]; + var methods = ["get", "post", "put", "delete"]; + var encs = ["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]; + var media = ["all", "screen", "print", "embossed", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "speech", + "3d-glasses", "resolution [>][<][=] [X]", "device-aspect-ratio: X/Y", "orientation:portrait", + "orientation:landscape", "device-height: [X]", "device-width: [X]"]; + var s = { attrs: {} }; // Simple tag, reused for a whole lot of tags + + var data = { + a: { + attrs: { + href: null, ping: null, type: null, + media: media, + target: targets, + hreflang: langs + } + }, + abbr: s, + acronym: s, + address: s, + applet: s, + area: { + attrs: { + alt: null, coords: null, href: null, target: null, ping: null, + media: media, hreflang: langs, type: null, + shape: ["default", "rect", "circle", "poly"] + } + }, + article: s, + aside: s, + audio: { + attrs: { + src: null, mediagroup: null, + crossorigin: ["anonymous", "use-credentials"], + preload: ["none", "metadata", "auto"], + autoplay: ["", "autoplay"], + loop: ["", "loop"], + controls: ["", "controls"] + } + }, + b: s, + base: { attrs: { href: null, target: targets } }, + basefont: s, + bdi: s, + bdo: s, + big: s, + blockquote: { attrs: { cite: null } }, + body: s, + br: s, + button: { + attrs: { + form: null, formaction: null, name: null, value: null, + autofocus: ["", "autofocus"], + disabled: ["", "autofocus"], + formenctype: encs, + formmethod: methods, + formnovalidate: ["", "novalidate"], + formtarget: targets, + type: ["submit", "reset", "button"] + } + }, + canvas: { attrs: { width: null, height: null } }, + caption: s, + center: s, + cite: s, + code: s, + col: { attrs: { span: null } }, + colgroup: { attrs: { span: null } }, + command: { + attrs: { + type: ["command", "checkbox", "radio"], + label: null, icon: null, radiogroup: null, command: null, title: null, + disabled: ["", "disabled"], + checked: ["", "checked"] + } + }, + data: { attrs: { value: null } }, + datagrid: { attrs: { disabled: ["", "disabled"], multiple: ["", "multiple"] } }, + datalist: { attrs: { data: null } }, + dd: s, + del: { attrs: { cite: null, datetime: null } }, + details: { attrs: { open: ["", "open"] } }, + dfn: s, + dir: s, + div: s, + dl: s, + dt: s, + em: s, + embed: { attrs: { src: null, type: null, width: null, height: null } }, + eventsource: { attrs: { src: null } }, + fieldset: { attrs: { disabled: ["", "disabled"], form: null, name: null } }, + figcaption: s, + figure: s, + font: s, + footer: s, + form: { + attrs: { + action: null, name: null, + "accept-charset": charsets, + autocomplete: ["on", "off"], + enctype: encs, + method: methods, + novalidate: ["", "novalidate"], + target: targets + } + }, + frame: s, + frameset: s, + h1: s, h2: s, h3: s, h4: s, h5: s, h6: s, + head: { + attrs: {}, + children: ["title", "base", "link", "style", "meta", "script", "noscript", "command"] + }, + header: s, + hgroup: s, + hr: s, + html: { + attrs: { manifest: null }, + children: ["head", "body"] + }, + i: s, + iframe: { + attrs: { + src: null, srcdoc: null, name: null, width: null, height: null, + sandbox: ["allow-top-navigation", "allow-same-origin", "allow-forms", "allow-scripts"], + seamless: ["", "seamless"] + } + }, + img: { + attrs: { + alt: null, src: null, ismap: null, usemap: null, width: null, height: null, + crossorigin: ["anonymous", "use-credentials"] + } + }, + input: { + attrs: { + alt: null, dirname: null, form: null, formaction: null, + height: null, list: null, max: null, maxlength: null, min: null, + name: null, pattern: null, placeholder: null, size: null, src: null, + step: null, value: null, width: null, + accept: ["audio/*", "video/*", "image/*"], + autocomplete: ["on", "off"], + autofocus: ["", "autofocus"], + checked: ["", "checked"], + disabled: ["", "disabled"], + formenctype: encs, + formmethod: methods, + formnovalidate: ["", "novalidate"], + formtarget: targets, + multiple: ["", "multiple"], + readonly: ["", "readonly"], + required: ["", "required"], + type: ["hidden", "text", "search", "tel", "url", "email", "password", "datetime", "date", "month", + "week", "time", "datetime-local", "number", "range", "color", "checkbox", "radio", + "file", "submit", "image", "reset", "button"] + } + }, + ins: { attrs: { cite: null, datetime: null } }, + kbd: s, + keygen: { + attrs: { + challenge: null, form: null, name: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + keytype: ["RSA"] + } + }, + label: { attrs: { "for": null, form: null } }, + legend: s, + li: { attrs: { value: null } }, + link: { + attrs: { + href: null, type: null, + hreflang: langs, + media: media, + sizes: ["all", "16x16", "16x16 32x32", "16x16 32x32 64x64"] + } + }, + map: { attrs: { name: null } }, + mark: s, + menu: { attrs: { label: null, type: ["list", "context", "toolbar"] } }, + meta: { + attrs: { + content: null, + charset: charsets, + name: ["viewport", "application-name", "author", "description", "generator", "keywords"], + "http-equiv": ["content-language", "content-type", "default-style", "refresh"] + } + }, + meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } }, + nav: s, + noframes: s, + noscript: s, + object: { + attrs: { + data: null, type: null, name: null, usemap: null, form: null, width: null, height: null, + typemustmatch: ["", "typemustmatch"] + } + }, + ol: { attrs: { reversed: ["", "reversed"], start: null, type: ["1", "a", "A", "i", "I"] } }, + optgroup: { attrs: { disabled: ["", "disabled"], label: null } }, + option: { attrs: { disabled: ["", "disabled"], label: null, selected: ["", "selected"], value: null } }, + output: { attrs: { "for": null, form: null, name: null } }, + p: s, + param: { attrs: { name: null, value: null } }, + pre: s, + progress: { attrs: { value: null, max: null } }, + q: { attrs: { cite: null } }, + rp: s, + rt: s, + ruby: s, + s: s, + samp: s, + script: { + attrs: { + type: ["text/javascript"], + src: null, + async: ["", "async"], + defer: ["", "defer"], + charset: charsets + } + }, + section: s, + select: { + attrs: { + form: null, name: null, size: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + multiple: ["", "multiple"] + } + }, + small: s, + source: { attrs: { src: null, type: null, media: null } }, + span: s, + strike: s, + strong: s, + style: { + attrs: { + type: ["text/css"], + media: media, + scoped: null + } + }, + sub: s, + summary: s, + sup: s, + table: s, + tbody: s, + td: { attrs: { colspan: null, rowspan: null, headers: null } }, + textarea: { + attrs: { + dirname: null, form: null, maxlength: null, name: null, placeholder: null, + rows: null, cols: null, + autofocus: ["", "autofocus"], + disabled: ["", "disabled"], + readonly: ["", "readonly"], + required: ["", "required"], + wrap: ["soft", "hard"] + } + }, + tfoot: s, + th: { attrs: { colspan: null, rowspan: null, headers: null, scope: ["row", "col", "rowgroup", "colgroup"] } }, + thead: s, + time: { attrs: { datetime: null } }, + title: s, + tr: s, + track: { + attrs: { + src: null, label: null, "default": null, + kind: ["subtitles", "captions", "descriptions", "chapters", "metadata"], + srclang: langs + } + }, + tt: s, + u: s, + ul: s, + "var": s, + video: { + attrs: { + src: null, poster: null, width: null, height: null, + crossorigin: ["anonymous", "use-credentials"], + preload: ["auto", "metadata", "none"], + autoplay: ["", "autoplay"], + mediagroup: ["movie"], + muted: ["", "muted"], + controls: ["", "controls"] + } + }, + wbr: s + }; + + var globalAttrs = { + accesskey: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], + "class": null, + contenteditable: ["true", "false"], + contextmenu: null, + dir: ["ltr", "rtl", "auto"], + draggable: ["true", "false", "auto"], + dropzone: ["copy", "move", "link", "string:", "file:"], + hidden: ["hidden"], + id: null, + inert: ["inert"], + itemid: null, + itemprop: null, + itemref: null, + itemscope: ["itemscope"], + itemtype: null, + lang: ["en", "es"], + spellcheck: ["true", "false"], + style: null, + tabindex: ["1", "2", "3", "4", "5", "6", "7", "8", "9"], + title: null, + translate: ["yes", "no"], + onclick: null, + rel: ["stylesheet", "alternate", "author", "bookmark", "help", "license", "next", "nofollow", "noreferrer", "prefetch", "prev", "search", "tag"] + }; + function populate(obj) { + for (var attr in globalAttrs) if (globalAttrs.hasOwnProperty(attr)) + obj.attrs[attr] = globalAttrs[attr]; + } + + populate(s); + for (var tag in data) if (data.hasOwnProperty(tag) && data[tag] != s) + populate(data[tag]); + + CodeMirror.htmlSchema = data; + function htmlHint(cm, options) { + var local = {schemaInfo: data}; + if (options) for (var opt in options) local[opt] = options[opt]; + return CodeMirror.hint.xml(cm, local); + } + CodeMirror.registerHelper("hint", "html", htmlHint); +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function expressionAllowed(stream, state, backUp) { + return /^(?:operator|sof|keyword c|case|new|export|default|[\[{}\(,;:]|=>)$/.test(state.lastType) || + (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) +} + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, + "await": C, "async": kw("async") + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "variable-3"}; + var tsKeywords = { + // object-like things + "interface": kw("class"), + "implements": C, + "namespace": C, + "module": kw("module"), + "enum": kw("module"), + "type": kw("type"), + + // scope modifiers + "public": kw("modifier"), + "private": kw("modifier"), + "protected": kw("modifier"), + "abstract": kw("modifier"), + + // operators + "as": operator, + + // types + "string": type, "number": type, "boolean": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/o/i)) { + stream.eatWhile(/[0-7]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/b/i)) { + stream.eatWhile(/[01]/i); + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; + return (known && state.lastType != ".") ? ret(known.type, known.style, word) : + ret("variable", "variable", word); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + if (isTS) { // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)) + if (m) arrow = m.index + } + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) { if (ch == "(") sawSomething = true; break; } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/]/.test(ch)) { + return; + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + cx.marked = "def"; + if (state.context) { + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + if (parserConfig.globalVars) + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) + indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) + cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); + if (type == "variable") return cont(pushlex("stat"), maybelabel); + if (type == "switch") return cont(pushlex("form"), parenExpr, pushlex("}", "switch"), expect("{"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "class") return cont(pushlex("form"), className, poplex); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex) + if (type == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";")); + if (type == "async") return cont(statement) + if (value == "@") return cont(expression, statement) + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, false); + } + function expressionNoComma(type) { + return expressionInner(type, true); + } + function parenExpr(type) { + if (type != "(") return pass() + return cont(pushlex(")"), expression, expect(")"), poplex) + } + function expressionInner(type, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class") return cont(pushlex("form"), classExpression, poplex); + if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeexpressionNoComma(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expressionNoComma); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value)) return cont(me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { return pass(quasi, me); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(expression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function(type) { + if (type == ".") return cont(noComma ? targetNoComma : target); + else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } + } + function targetNoComma(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (cx.style + " property"); + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (type == "modifier") { + return cont(objprop) + } else if (type == "[") { + return cont(expression, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expression); + } else if (type == ":") { + return pass(afterprop) + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function(type, value) { + if (type == end || value == end) return pass() + return pass(what) + }, proceed); + } + if (type == end || value == end) return cont(); + return cont(expect(end)); + } + return function(type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function typeexpr(type) { + if (type == "variable") {cx.marked = "variable-3"; return cont(afterType);} + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex) + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr) + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property" + return cont(typeprop) + } else if (value == "?") { + return cont(typeprop) + } else if (type == ":") { + return cont(typeexpr) + } + } + function typearg(type) { + if (type == "variable") return cont(typearg) + else if (type == ":") return cont(typeexpr) + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + if (value == "|" || type == ".") return cont(typeexpr) + if (type == "[") return cont(expect("]"), afterType) + } + function vardef() { + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (type == "modifier") return cont(pattern) + if (type == "variable") { register(value); return cont(); } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(pattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + return cont(expect(":"), pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type) { + if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybeinof); + return pass(expression, expect(";"), forspec2); + } + function formaybeinof(_type, value) { + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, functiondef) + } + function funarg(type) { + if (type == "spread") return cont(funarg); + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, classNameAfter) + if (value == "extends" || value == "implements" || (isTS && type == ",")) + return cont(isTS ? typeexpr : expression, classNameAfter); + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "variable" || cx.style == "keyword") { + if ((value == "async" || value == "static" || value == "get" || value == "set" || + (isTS && (value == "public" || value == "private" || value == "protected" || value == "readonly" || value == "abstract"))) && + cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { + cx.marked = "keyword"; + return cont(classBody); + } + cx.marked = "property"; + return cont(isTS ? classfield : functiondef, classBody); + } + if (type == "[") + return cont(expression, expect("]"), isTS ? classfield : functiondef, classBody) + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == ";") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody) + } + function classfield(type, value) { + if (value == "?") return cont(classfield) + if (type == ":") return cont(typeexpr, maybeAssign) + if (value == "=") return cont(expressionNoComma) + return pass(functiondef) + } + function afterExport(type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports) + } + function maybeAs(_type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || + isOperatorChar.test(textAfter.charAt(0)) || + /[,.]/.test(textAfter.charAt(0)); + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && + (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) && + (top == maybeoperatorComma || top == maybeoperatorNoComma) && + !/^[,\.=+\-*:?[\(]/.test(textAfter)))) + lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + + expressionAllowed: expressionAllowed, + skipExpression: function(state) { + var top = state.cc[state.cc.length - 1] + if (top == expression || top == expressionNoComma) state.cc.pop() + } + }; +}); + +CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/x-javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + var ie_lt8 = /MSIE \d/.test(navigator.userAgent) && + (document.documentMode == null || document.documentMode < 8); + + var Pos = CodeMirror.Pos; + + var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; + + function findMatchingBracket(cm, where, strict, config) { + var line = cm.getLineHandle(where.line), pos = where.ch - 1; + var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; + if (!match) return null; + var dir = match.charAt(1) == ">" ? 1 : -1; + if (strict && (dir > 0) != (pos == where.ch)) return null; + var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); + + var found = scanForBracket(cm, Pos(where.line, pos + (dir > 0 ? 1 : 0)), dir, style || null, config); + if (found == null) return null; + return {from: Pos(where.line, pos), to: found && found.pos, + match: found && found.ch == match.charAt(0), forward: dir > 0}; + } + + // bracketRegex is used to specify which type of bracket to scan + // should be a regexp, e.g. /[[\]]/ + // + // Note: If "where" is on an open bracket, then this bracket is ignored. + // + // Returns false when no bracket was found, null when it reached + // maxScanLines and gave up + function scanForBracket(cm, where, dir, style, config) { + var maxScanLen = (config && config.maxScanLineLength) || 10000; + var maxScanLines = (config && config.maxScanLines) || 1000; + + var stack = []; + var re = config && config.bracketRegex ? config.bracketRegex : /[(){}[\]]/; + var lineEnd = dir > 0 ? Math.min(where.line + maxScanLines, cm.lastLine() + 1) + : Math.max(cm.firstLine() - 1, where.line - maxScanLines); + for (var lineNo = where.line; lineNo != lineEnd; lineNo += dir) { + var line = cm.getLine(lineNo); + if (!line) continue; + var pos = dir > 0 ? 0 : line.length - 1, end = dir > 0 ? line.length : -1; + if (line.length > maxScanLen) continue; + if (lineNo == where.line) pos = where.ch - (dir < 0 ? 1 : 0); + for (; pos != end; pos += dir) { + var ch = line.charAt(pos); + if (re.test(ch) && (style === undefined || cm.getTokenTypeAt(Pos(lineNo, pos + 1)) == style)) { + var match = matching[ch]; + if ((match.charAt(1) == ">") == (dir > 0)) stack.push(ch); + else if (!stack.length) return {pos: Pos(lineNo, pos), ch: ch}; + else stack.pop(); + } + } + } + return lineNo - dir == (dir > 0 ? cm.lastLine() : cm.firstLine()) ? false : null; + } + + function matchBrackets(cm, autoclear, config) { + // Disable brace matching in long lines, since it'll cause hugely slow updates + var maxHighlightLen = cm.state.matchBrackets.maxHighlightLineLength || 1000; + var marks = [], ranges = cm.listSelections(); + for (var i = 0; i < ranges.length; i++) { + var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); + if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { + var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; + marks.push(cm.markText(match.from, Pos(match.from.line, match.from.ch + 1), {className: style})); + if (match.to && cm.getLine(match.to.line).length <= maxHighlightLen) + marks.push(cm.markText(match.to, Pos(match.to.line, match.to.ch + 1), {className: style})); + } + } + + if (marks.length) { + // Kludge to work around the IE bug from issue #1193, where text + // input stops going to the textare whever this fires. + if (ie_lt8 && cm.state.focused) cm.focus(); + + var clear = function() { + cm.operation(function() { + for (var i = 0; i < marks.length; i++) marks[i].clear(); + }); + }; + if (autoclear) setTimeout(clear, 800); + else return clear; + } + } + + var currentlyHighlighted = null; + function doMatchBrackets(cm) { + cm.operation(function() { + if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} + currentlyHighlighted = matchBrackets(cm, false, cm.state.matchBrackets); + }); + } + + CodeMirror.defineOption("matchBrackets", false, function(cm, val, old) { + if (old && old != CodeMirror.Init) { + cm.off("cursorActivity", doMatchBrackets); + if (currentlyHighlighted) {currentlyHighlighted(); currentlyHighlighted = null;} + } + if (val) { + cm.state.matchBrackets = typeof val == "object" ? val : {}; + cm.on("cursorActivity", doMatchBrackets); + } + }); + + CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); + CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ + return findMatchingBracket(this, pos, strict, config); + }); + CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ + return scanForBracket(this, pos, dir, style, config); + }); +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../xml/xml"), require("../javascript/javascript"), require("../css/css")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../xml/xml", "../javascript/javascript", "../css/css"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + var defaultTags = { + script: [ + ["lang", /(javascript|babel)/i, "javascript"], + ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i, "javascript"], + ["type", /./, "text/plain"], + [null, null, "javascript"] + ], + style: [ + ["lang", /^css$/i, "css"], + ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"], + ["type", /./, "text/plain"], + [null, null, "css"] + ] + }; + + function maybeBackup(stream, pat, style) { + var cur = stream.current(), close = cur.search(pat); + if (close > -1) { + stream.backUp(cur.length - close); + } else if (cur.match(/<\/?$/)) { + stream.backUp(cur.length); + if (!stream.match(pat, false)) stream.match(cur); + } + return style; + } + + var attrRegexpCache = {}; + function getAttrRegexp(attr) { + var regexp = attrRegexpCache[attr]; + if (regexp) return regexp; + return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"); + } + + function getAttrValue(text, attr) { + var match = text.match(getAttrRegexp(attr)) + return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : "" + } + + function getTagRegexp(tagName, anchored) { + return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i"); + } + + function addTags(from, to) { + for (var tag in from) { + var dest = to[tag] || (to[tag] = []); + var source = from[tag]; + for (var i = source.length - 1; i >= 0; i--) + dest.unshift(source[i]) + } + } + + function findMatchingMode(tagInfo, tagText) { + for (var i = 0; i < tagInfo.length; i++) { + var spec = tagInfo[i]; + if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2]; + } + } + + CodeMirror.defineMode("htmlmixed", function (config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, { + name: "xml", + htmlMode: true, + multilineTagIndentFactor: parserConfig.multilineTagIndentFactor, + multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag + }); + + var tags = {}; + var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes; + addTags(defaultTags, tags); + if (configTags) addTags(configTags, tags); + if (configScript) for (var i = configScript.length - 1; i >= 0; i--) + tags.script.unshift(["type", configScript[i].matches, configScript[i].mode]) + + function html(stream, state) { + var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName + if (tag && !/[<>\s\/]/.test(stream.current()) && + (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) && + tags.hasOwnProperty(tagName)) { + state.inTag = tagName + " " + } else if (state.inTag && tag && />$/.test(stream.current())) { + var inTag = /^([\S]+) (.*)/.exec(state.inTag) + state.inTag = null + var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2]) + var mode = CodeMirror.getMode(config, modeSpec) + var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false); + state.token = function (stream, state) { + if (stream.match(endTagA, false)) { + state.token = html; + state.localState = state.localMode = null; + return null; + } + return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState)); + }; + state.localMode = mode; + state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, "")); + } else if (state.inTag) { + state.inTag += stream.current() + if (stream.eol()) state.inTag += " " + } + return style; + }; + + return { + startState: function () { + var state = CodeMirror.startState(htmlMode); + return {token: html, inTag: null, localMode: null, localState: null, htmlState: state}; + }, + + copyState: function (state) { + var local; + if (state.localState) { + local = CodeMirror.copyState(state.localMode, state.localState); + } + return {token: state.token, inTag: state.inTag, + localMode: state.localMode, localState: local, + htmlState: CodeMirror.copyState(htmlMode, state.htmlState)}; + }, + + token: function (stream, state) { + return state.token(stream, state); + }, + + indent: function (state, textAfter) { + if (!state.localMode || /^\s*<\//.test(textAfter)) + return htmlMode.indent(state.htmlState, textAfter); + else if (state.localMode.indent) + return state.localMode.indent(state.localState, textAfter); + else + return CodeMirror.Pass; + }, + + innerMode: function (state) { + return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode}; + } + }; + }, "xml", "javascript", "css"); + + CodeMirror.defineMIME("text/html", "htmlmixed"); +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +var htmlConfig = { + autoSelfClosers: {'area': true, 'base': true, 'br': true, 'col': true, 'command': true, + 'embed': true, 'frame': true, 'hr': true, 'img': true, 'input': true, + 'keygen': true, 'link': true, 'meta': true, 'param': true, 'source': true, + 'track': true, 'wbr': true, 'menuitem': true}, + implicitlyClosed: {'dd': true, 'li': true, 'optgroup': true, 'option': true, 'p': true, + 'rp': true, 'rt': true, 'tbody': true, 'td': true, 'tfoot': true, + 'th': true, 'tr': true}, + contextGrabbers: { + 'dd': {'dd': true, 'dt': true}, + 'dt': {'dd': true, 'dt': true}, + 'li': {'li': true}, + 'option': {'option': true, 'optgroup': true}, + 'optgroup': {'optgroup': true}, + 'p': {'address': true, 'article': true, 'aside': true, 'blockquote': true, 'dir': true, + 'div': true, 'dl': true, 'fieldset': true, 'footer': true, 'form': true, + 'h1': true, 'h2': true, 'h3': true, 'h4': true, 'h5': true, 'h6': true, + 'header': true, 'hgroup': true, 'hr': true, 'menu': true, 'nav': true, 'ol': true, + 'p': true, 'pre': true, 'section': true, 'table': true, 'ul': true}, + 'rp': {'rp': true, 'rt': true}, + 'rt': {'rp': true, 'rt': true}, + 'tbody': {'tbody': true, 'tfoot': true}, + 'td': {'td': true, 'th': true}, + 'tfoot': {'tbody': true}, + 'th': {'td': true, 'th': true}, + 'thead': {'tbody': true, 'tfoot': true}, + 'tr': {'tr': true} + }, + doNotIndent: {"pre": true}, + allowUnquoted: true, + allowMissing: true, + caseFold: true +} + +var xmlConfig = { + autoSelfClosers: {}, + implicitlyClosed: {}, + contextGrabbers: {}, + doNotIndent: {}, + allowUnquoted: false, + allowMissing: false, + caseFold: false +} + +CodeMirror.defineMode("xml", function(editorConf, config_) { + var indentUnit = editorConf.indentUnit + var config = {} + var defaults = config_.htmlMode ? htmlConfig : xmlConfig + for (var prop in defaults) config[prop] = defaults[prop] + for (var prop in config_) config[prop] = config_[prop] + + // Return variables for tokenizers + var type, setStyle; + + function inText(stream, state) { + function chain(parser) { + state.tokenize = parser; + return parser(stream, state); + } + + var ch = stream.next(); + if (ch == "<") { + if (stream.eat("!")) { + if (stream.eat("[")) { + if (stream.match("CDATA[")) return chain(inBlock("atom", "]]>")); + else return null; + } else if (stream.match("--")) { + return chain(inBlock("comment", "-->")); + } else if (stream.match("DOCTYPE", true, true)) { + stream.eatWhile(/[\w\._\-]/); + return chain(doctype(1)); + } else { + return null; + } + } else if (stream.eat("?")) { + stream.eatWhile(/[\w\._\-]/); + state.tokenize = inBlock("meta", "?>"); + return "meta"; + } else { + type = stream.eat("/") ? "closeTag" : "openTag"; + state.tokenize = inTag; + return "tag bracket"; + } + } else if (ch == "&") { + var ok; + if (stream.eat("#")) { + if (stream.eat("x")) { + ok = stream.eatWhile(/[a-fA-F\d]/) && stream.eat(";"); + } else { + ok = stream.eatWhile(/[\d]/) && stream.eat(";"); + } + } else { + ok = stream.eatWhile(/[\w\.\-:]/) && stream.eat(";"); + } + return ok ? "atom" : "error"; + } else { + stream.eatWhile(/[^&<]/); + return null; + } + } + inText.isInText = true; + + function inTag(stream, state) { + var ch = stream.next(); + if (ch == ">" || (ch == "/" && stream.eat(">"))) { + state.tokenize = inText; + type = ch == ">" ? "endTag" : "selfcloseTag"; + return "tag bracket"; + } else if (ch == "=") { + type = "equals"; + return null; + } else if (ch == "<") { + state.tokenize = inText; + state.state = baseState; + state.tagName = state.tagStart = null; + var next = state.tokenize(stream, state); + return next ? next + " tag error" : "tag error"; + } else if (/[\'\"]/.test(ch)) { + state.tokenize = inAttribute(ch); + state.stringStartCol = stream.column(); + return state.tokenize(stream, state); + } else { + stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/); + return "word"; + } + } + + function inAttribute(quote) { + var closure = function(stream, state) { + while (!stream.eol()) { + if (stream.next() == quote) { + state.tokenize = inTag; + break; + } + } + return "string"; + }; + closure.isInAttribute = true; + return closure; + } + + function inBlock(style, terminator) { + return function(stream, state) { + while (!stream.eol()) { + if (stream.match(terminator)) { + state.tokenize = inText; + break; + } + stream.next(); + } + return style; + }; + } + function doctype(depth) { + return function(stream, state) { + var ch; + while ((ch = stream.next()) != null) { + if (ch == "<") { + state.tokenize = doctype(depth + 1); + return state.tokenize(stream, state); + } else if (ch == ">") { + if (depth == 1) { + state.tokenize = inText; + break; + } else { + state.tokenize = doctype(depth - 1); + return state.tokenize(stream, state); + } + } + } + return "meta"; + }; + } + + function Context(state, tagName, startOfLine) { + this.prev = state.context; + this.tagName = tagName; + this.indent = state.indented; + this.startOfLine = startOfLine; + if (config.doNotIndent.hasOwnProperty(tagName) || (state.context && state.context.noIndent)) + this.noIndent = true; + } + function popContext(state) { + if (state.context) state.context = state.context.prev; + } + function maybePopContext(state, nextTagName) { + var parentTagName; + while (true) { + if (!state.context) { + return; + } + parentTagName = state.context.tagName; + if (!config.contextGrabbers.hasOwnProperty(parentTagName) || + !config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)) { + return; + } + popContext(state); + } + } + + function baseState(type, stream, state) { + if (type == "openTag") { + state.tagStart = stream.column(); + return tagNameState; + } else if (type == "closeTag") { + return closeTagNameState; + } else { + return baseState; + } + } + function tagNameState(type, stream, state) { + if (type == "word") { + state.tagName = stream.current(); + setStyle = "tag"; + return attrState; + } else { + setStyle = "error"; + return tagNameState; + } + } + function closeTagNameState(type, stream, state) { + if (type == "word") { + var tagName = stream.current(); + if (state.context && state.context.tagName != tagName && + config.implicitlyClosed.hasOwnProperty(state.context.tagName)) + popContext(state); + if ((state.context && state.context.tagName == tagName) || config.matchClosing === false) { + setStyle = "tag"; + return closeState; + } else { + setStyle = "tag error"; + return closeStateErr; + } + } else { + setStyle = "error"; + return closeStateErr; + } + } + + function closeState(type, _stream, state) { + if (type != "endTag") { + setStyle = "error"; + return closeState; + } + popContext(state); + return baseState; + } + function closeStateErr(type, stream, state) { + setStyle = "error"; + return closeState(type, stream, state); + } + + function attrState(type, _stream, state) { + if (type == "word") { + setStyle = "attribute"; + return attrEqState; + } else if (type == "endTag" || type == "selfcloseTag") { + var tagName = state.tagName, tagStart = state.tagStart; + state.tagName = state.tagStart = null; + if (type == "selfcloseTag" || + config.autoSelfClosers.hasOwnProperty(tagName)) { + maybePopContext(state, tagName); + } else { + maybePopContext(state, tagName); + state.context = new Context(state, tagName, tagStart == state.indented); + } + return baseState; + } + setStyle = "error"; + return attrState; + } + function attrEqState(type, stream, state) { + if (type == "equals") return attrValueState; + if (!config.allowMissing) setStyle = "error"; + return attrState(type, stream, state); + } + function attrValueState(type, stream, state) { + if (type == "string") return attrContinuedState; + if (type == "word" && config.allowUnquoted) {setStyle = "string"; return attrState;} + setStyle = "error"; + return attrState(type, stream, state); + } + function attrContinuedState(type, stream, state) { + if (type == "string") return attrContinuedState; + return attrState(type, stream, state); + } + + return { + startState: function(baseIndent) { + var state = {tokenize: inText, + state: baseState, + indented: baseIndent || 0, + tagName: null, tagStart: null, + context: null} + if (baseIndent != null) state.baseIndent = baseIndent + return state + }, + + token: function(stream, state) { + if (!state.tagName && stream.sol()) + state.indented = stream.indentation(); + + if (stream.eatSpace()) return null; + type = null; + var style = state.tokenize(stream, state); + if ((style || type) && style != "comment") { + setStyle = null; + state.state = state.state(type || style, stream, state); + if (setStyle) + style = setStyle == "error" ? style + " error" : setStyle; + } + return style; + }, + + indent: function(state, textAfter, fullLine) { + var context = state.context; + // Indent multi-line strings (e.g. css). + if (state.tokenize.isInAttribute) { + if (state.tagStart == state.indented) + return state.stringStartCol + 1; + else + return state.indented + indentUnit; + } + if (context && context.noIndent) return CodeMirror.Pass; + if (state.tokenize != inTag && state.tokenize != inText) + return fullLine ? fullLine.match(/^(\s*)/)[0].length : 0; + // Indent the starts of attribute names. + if (state.tagName) { + if (config.multilineTagIndentPastTag !== false) + return state.tagStart + state.tagName.length + 2; + else + return state.tagStart + indentUnit * (config.multilineTagIndentFactor || 1); + } + if (config.alignCDATA && /$/, + blockCommentStart: "", + + configuration: config.htmlMode ? "html" : "xml", + helperType: config.htmlMode ? "html" : "xml", + + skipAttribute: function(state) { + if (state.state == attrValueState) + state.state = attrState + } + }; +}); + +CodeMirror.defineMIME("text/xml", "xml"); +CodeMirror.defineMIME("application/xml", "xml"); +if (!CodeMirror.mimeModes.hasOwnProperty("text/html")) + CodeMirror.defineMIME("text/html", {name: "xml", htmlMode: true}); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("css", function(config, parserConfig) { + var inline = parserConfig.inline + if (!parserConfig.propertyKeywords) parserConfig = CodeMirror.resolveMode("text/css"); + + var indentUnit = config.indentUnit, + tokenHooks = parserConfig.tokenHooks, + documentTypes = parserConfig.documentTypes || {}, + mediaTypes = parserConfig.mediaTypes || {}, + mediaFeatures = parserConfig.mediaFeatures || {}, + mediaValueKeywords = parserConfig.mediaValueKeywords || {}, + propertyKeywords = parserConfig.propertyKeywords || {}, + nonStandardPropertyKeywords = parserConfig.nonStandardPropertyKeywords || {}, + fontProperties = parserConfig.fontProperties || {}, + counterDescriptors = parserConfig.counterDescriptors || {}, + colorKeywords = parserConfig.colorKeywords || {}, + valueKeywords = parserConfig.valueKeywords || {}, + allowNested = parserConfig.allowNested, + lineComment = parserConfig.lineComment, + supportsAtComponent = parserConfig.supportsAtComponent === true; + + var type, override; + function ret(style, tp) { type = tp; return style; } + + // Tokenizers + + function tokenBase(stream, state) { + var ch = stream.next(); + if (tokenHooks[ch]) { + var result = tokenHooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == "@") { + stream.eatWhile(/[\w\\\-]/); + return ret("def", stream.current()); + } else if (ch == "=" || (ch == "~" || ch == "|") && stream.eat("=")) { + return ret(null, "compare"); + } else if (ch == "\"" || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "#") { + stream.eatWhile(/[\w\\\-]/); + return ret("atom", "hash"); + } else if (ch == "!") { + stream.match(/^\s*\w*/); + return ret("keyword", "important"); + } else if (/\d/.test(ch) || ch == "." && stream.eat(/\d/)) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (ch === "-") { + if (/[\d.]/.test(stream.peek())) { + stream.eatWhile(/[\w.%]/); + return ret("number", "unit"); + } else if (stream.match(/^-[\w\\\-]+/)) { + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ret("variable-2", "variable-definition"); + return ret("variable-2", "variable"); + } else if (stream.match(/^\w+-/)) { + return ret("meta", "meta"); + } + } else if (/[,+>*\/]/.test(ch)) { + return ret(null, "select-op"); + } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { + return ret("qualifier", "qualifier"); + } else if (/[:;{}\[\]\(\)]/.test(ch)) { + return ret(null, ch); + } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || + (ch == "d" && stream.match("omain(")) || + (ch == "r" && stream.match("egexp("))) { + stream.backUp(1); + state.tokenize = tokenParenthesized; + return ret("property", "word"); + } else if (/[\w\\\-]/.test(ch)) { + stream.eatWhile(/[\w\\\-]/); + return ret("property", "word"); + } else { + return ret(null, null); + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + if (quote == ")") stream.backUp(1); + break; + } + escaped = !escaped && ch == "\\"; + } + if (ch == quote || !escaped && quote != ")") state.tokenize = null; + return ret("string", "string"); + }; + } + + function tokenParenthesized(stream, state) { + stream.next(); // Must be '(' + if (!stream.match(/\s*[\"\')]/, false)) + state.tokenize = tokenString(")"); + else + state.tokenize = null; + return ret(null, "("); + } + + // Context management + + function Context(type, indent, prev) { + this.type = type; + this.indent = indent; + this.prev = prev; + } + + function pushContext(state, stream, type, indent) { + state.context = new Context(type, stream.indentation() + (indent === false ? 0 : indentUnit), state.context); + return type; + } + + function popContext(state) { + if (state.context.prev) + state.context = state.context.prev; + return state.context.type; + } + + function pass(type, stream, state) { + return states[state.context.type](type, stream, state); + } + function popAndPass(type, stream, state, n) { + for (var i = n || 1; i > 0; i--) + state.context = state.context.prev; + return pass(type, stream, state); + } + + // Parser + + function wordAsValue(stream) { + var word = stream.current().toLowerCase(); + if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "variable"; + } + + var states = {}; + + states.top = function(type, stream, state) { + if (type == "{") { + return pushContext(state, stream, "block"); + } else if (type == "}" && state.context.prev) { + return popContext(state); + } else if (supportsAtComponent && /@component/.test(type)) { + return pushContext(state, stream, "atComponentBlock"); + } else if (/^@(-moz-)?document$/.test(type)) { + return pushContext(state, stream, "documentTypes"); + } else if (/^@(media|supports|(-moz-)?document|import)$/.test(type)) { + return pushContext(state, stream, "atBlock"); + } else if (/^@(font-face|counter-style)/.test(type)) { + state.stateArg = type; + return "restricted_atBlock_before"; + } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { + return "keyframes"; + } else if (type && type.charAt(0) == "@") { + return pushContext(state, stream, "at"); + } else if (type == "hash") { + override = "builtin"; + } else if (type == "word") { + override = "tag"; + } else if (type == "variable-definition") { + return "maybeprop"; + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } else if (type == ":") { + return "pseudo"; + } else if (allowNested && type == "(") { + return pushContext(state, stream, "parens"); + } + return state.context.type; + }; + + states.block = function(type, stream, state) { + if (type == "word") { + var word = stream.current().toLowerCase(); + if (propertyKeywords.hasOwnProperty(word)) { + override = "property"; + return "maybeprop"; + } else if (nonStandardPropertyKeywords.hasOwnProperty(word)) { + override = "string-2"; + return "maybeprop"; + } else if (allowNested) { + override = stream.match(/^\s*:(?:\s|$)/, false) ? "property" : "tag"; + return "block"; + } else { + override += " error"; + return "maybeprop"; + } + } else if (type == "meta") { + return "block"; + } else if (!allowNested && (type == "hash" || type == "qualifier")) { + override = "error"; + return "block"; + } else { + return states.top(type, stream, state); + } + }; + + states.maybeprop = function(type, stream, state) { + if (type == ":") return pushContext(state, stream, "prop"); + return pass(type, stream, state); + }; + + states.prop = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" && allowNested) return pushContext(state, stream, "propBlock"); + if (type == "}" || type == "{") return popAndPass(type, stream, state); + if (type == "(") return pushContext(state, stream, "parens"); + + if (type == "hash" && !/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())) { + override += " error"; + } else if (type == "word") { + wordAsValue(stream); + } else if (type == "interpolation") { + return pushContext(state, stream, "interpolation"); + } + return "prop"; + }; + + states.propBlock = function(type, _stream, state) { + if (type == "}") return popContext(state); + if (type == "word") { override = "property"; return "maybeprop"; } + return state.context.type; + }; + + states.parens = function(type, stream, state) { + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == ")") return popContext(state); + if (type == "(") return pushContext(state, stream, "parens"); + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + if (type == "word") wordAsValue(stream); + return "parens"; + }; + + states.pseudo = function(type, stream, state) { + if (type == "meta") return "pseudo"; + + if (type == "word") { + override = "variable-3"; + return state.context.type; + } + return pass(type, stream, state); + }; + + states.documentTypes = function(type, stream, state) { + if (type == "word" && documentTypes.hasOwnProperty(stream.current())) { + override = "tag"; + return state.context.type; + } else { + return states.atBlock(type, stream, state); + } + }; + + states.atBlock = function(type, stream, state) { + if (type == "(") return pushContext(state, stream, "atBlock_parens"); + if (type == "}" || type == ";") return popAndPass(type, stream, state); + if (type == "{") return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top"); + + if (type == "interpolation") return pushContext(state, stream, "interpolation"); + + if (type == "word") { + var word = stream.current().toLowerCase(); + if (word == "only" || word == "not" || word == "and" || word == "or") + override = "keyword"; + else if (mediaTypes.hasOwnProperty(word)) + override = "attribute"; + else if (mediaFeatures.hasOwnProperty(word)) + override = "property"; + else if (mediaValueKeywords.hasOwnProperty(word)) + override = "keyword"; + else if (propertyKeywords.hasOwnProperty(word)) + override = "property"; + else if (nonStandardPropertyKeywords.hasOwnProperty(word)) + override = "string-2"; + else if (valueKeywords.hasOwnProperty(word)) + override = "atom"; + else if (colorKeywords.hasOwnProperty(word)) + override = "keyword"; + else + override = "error"; + } + return state.context.type; + }; + + states.atComponentBlock = function(type, stream, state) { + if (type == "}") + return popAndPass(type, stream, state); + if (type == "{") + return popContext(state) && pushContext(state, stream, allowNested ? "block" : "top", false); + if (type == "word") + override = "error"; + return state.context.type; + }; + + states.atBlock_parens = function(type, stream, state) { + if (type == ")") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state, 2); + return states.atBlock(type, stream, state); + }; + + states.restricted_atBlock_before = function(type, stream, state) { + if (type == "{") + return pushContext(state, stream, "restricted_atBlock"); + if (type == "word" && state.stateArg == "@counter-style") { + override = "variable"; + return "restricted_atBlock_before"; + } + return pass(type, stream, state); + }; + + states.restricted_atBlock = function(type, stream, state) { + if (type == "}") { + state.stateArg = null; + return popContext(state); + } + if (type == "word") { + if ((state.stateArg == "@font-face" && !fontProperties.hasOwnProperty(stream.current().toLowerCase())) || + (state.stateArg == "@counter-style" && !counterDescriptors.hasOwnProperty(stream.current().toLowerCase()))) + override = "error"; + else + override = "property"; + return "maybeprop"; + } + return "restricted_atBlock"; + }; + + states.keyframes = function(type, stream, state) { + if (type == "word") { override = "variable"; return "keyframes"; } + if (type == "{") return pushContext(state, stream, "top"); + return pass(type, stream, state); + }; + + states.at = function(type, stream, state) { + if (type == ";") return popContext(state); + if (type == "{" || type == "}") return popAndPass(type, stream, state); + if (type == "word") override = "tag"; + else if (type == "hash") override = "builtin"; + return "at"; + }; + + states.interpolation = function(type, stream, state) { + if (type == "}") return popContext(state); + if (type == "{" || type == ";") return popAndPass(type, stream, state); + if (type == "word") override = "variable"; + else if (type != "variable" && type != "(" && type != ")") override = "error"; + return "interpolation"; + }; + + return { + startState: function(base) { + return {tokenize: null, + state: inline ? "block" : "top", + stateArg: null, + context: new Context(inline ? "block" : "top", base || 0, null)}; + }, + + token: function(stream, state) { + if (!state.tokenize && stream.eatSpace()) return null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style && typeof style == "object") { + type = style[1]; + style = style[0]; + } + override = style; + state.state = states[state.state](type, stream, state); + return override; + }, + + indent: function(state, textAfter) { + var cx = state.context, ch = textAfter && textAfter.charAt(0); + var indent = cx.indent; + if (cx.type == "prop" && (ch == "}" || ch == ")")) cx = cx.prev; + if (cx.prev) { + if (ch == "}" && (cx.type == "block" || cx.type == "top" || + cx.type == "interpolation" || cx.type == "restricted_atBlock")) { + // Resume indentation from parent context. + cx = cx.prev; + indent = cx.indent; + } else if (ch == ")" && (cx.type == "parens" || cx.type == "atBlock_parens") || + ch == "{" && (cx.type == "at" || cx.type == "atBlock")) { + // Dedent relative to current context. + indent = Math.max(0, cx.indent - indentUnit); + cx = cx.prev; + } + } + return indent; + }, + + electricChars: "}", + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: lineComment, + fold: "brace" + }; +}); + + function keySet(array) { + var keys = {}; + for (var i = 0; i < array.length; ++i) { + keys[array[i].toLowerCase()] = true; + } + return keys; + } + + var documentTypes_ = [ + "domain", "regexp", "url", "url-prefix" + ], documentTypes = keySet(documentTypes_); + + var mediaTypes_ = [ + "all", "aural", "braille", "handheld", "print", "projection", "screen", + "tty", "tv", "embossed" + ], mediaTypes = keySet(mediaTypes_); + + var mediaFeatures_ = [ + "width", "min-width", "max-width", "height", "min-height", "max-height", + "device-width", "min-device-width", "max-device-width", "device-height", + "min-device-height", "max-device-height", "aspect-ratio", + "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", + "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", + "max-color", "color-index", "min-color-index", "max-color-index", + "monochrome", "min-monochrome", "max-monochrome", "resolution", + "min-resolution", "max-resolution", "scan", "grid", "orientation", + "device-pixel-ratio", "min-device-pixel-ratio", "max-device-pixel-ratio", + "pointer", "any-pointer", "hover", "any-hover" + ], mediaFeatures = keySet(mediaFeatures_); + + var mediaValueKeywords_ = [ + "landscape", "portrait", "none", "coarse", "fine", "on-demand", "hover", + "interlace", "progressive" + ], mediaValueKeywords = keySet(mediaValueKeywords_); + + var propertyKeywords_ = [ + "align-content", "align-items", "align-self", "alignment-adjust", + "alignment-baseline", "anchor-point", "animation", "animation-delay", + "animation-direction", "animation-duration", "animation-fill-mode", + "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "appearance", "azimuth", "backface-visibility", + "background", "background-attachment", "background-blend-mode", "background-clip", + "background-color", "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "baseline-shift", "binding", + "bleed", "bookmark-label", "bookmark-level", "bookmark-state", + "bookmark-target", "border", "border-bottom", "border-bottom-color", + "border-bottom-left-radius", "border-bottom-right-radius", + "border-bottom-style", "border-bottom-width", "border-collapse", + "border-color", "border-image", "border-image-outset", + "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-left", "border-left-color", + "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", + "border-spacing", "border-style", "border-top", "border-top-color", + "border-top-left-radius", "border-top-right-radius", "border-top-style", + "border-top-width", "border-width", "bottom", "box-decoration-break", + "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", + "caption-side", "clear", "clip", "color", "color-profile", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", + "column-rule-style", "column-rule-width", "column-span", "column-width", + "columns", "content", "counter-increment", "counter-reset", "crop", "cue", + "cue-after", "cue-before", "cursor", "direction", "display", + "dominant-baseline", "drop-initial-after-adjust", + "drop-initial-after-align", "drop-initial-before-adjust", + "drop-initial-before-align", "drop-initial-size", "drop-initial-value", + "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", + "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", + "float", "float-offset", "flow-from", "flow-into", "font", "font-feature-settings", + "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", + "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", + "font-variant-ligatures", "font-variant-numeric", "font-variant-position", + "font-weight", "grid", "grid-area", "grid-auto-columns", "grid-auto-flow", + "grid-auto-rows", "grid-column", "grid-column-end", "grid-column-gap", + "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-gap", + "grid-row-start", "grid-template", "grid-template-areas", "grid-template-columns", + "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", + "inline-box-align", "justify-content", "left", "letter-spacing", + "line-break", "line-height", "line-stacking", "line-stacking-ruby", + "line-stacking-shift", "line-stacking-strategy", "list-style", + "list-style-image", "list-style-position", "list-style-type", "margin", + "margin-bottom", "margin-left", "margin-right", "margin-top", + "marks", "marquee-direction", "marquee-loop", + "marquee-play-count", "marquee-speed", "marquee-style", "max-height", + "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", + "nav-left", "nav-right", "nav-up", "object-fit", "object-position", + "opacity", "order", "orphans", "outline", + "outline-color", "outline-offset", "outline-style", "outline-width", + "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", + "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", + "page", "page-break-after", "page-break-before", "page-break-inside", + "page-policy", "pause", "pause-after", "pause-before", "perspective", + "perspective-origin", "pitch", "pitch-range", "play-during", "position", + "presentation-level", "punctuation-trim", "quotes", "region-break-after", + "region-break-before", "region-break-inside", "region-fragment", + "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", + "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", + "ruby-position", "ruby-span", "shape-image-threshold", "shape-inside", "shape-margin", + "shape-outside", "size", "speak", "speak-as", "speak-header", + "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", + "tab-size", "table-layout", "target", "target-name", "target-new", + "target-position", "text-align", "text-align-last", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-skip", + "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-height", + "text-indent", "text-justify", "text-outline", "text-overflow", "text-shadow", + "text-size-adjust", "text-space-collapse", "text-transform", "text-underline-position", + "text-wrap", "top", "transform", "transform-origin", "transform-style", + "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", + "user-select", "vertical-align", "visibility", "voice-balance", "voice-duration", + "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "volume", "white-space", "widows", "width", "will-change", "word-break", + "word-spacing", "word-wrap", "z-index", + // SVG-specific + "clip-path", "clip-rule", "mask", "enable-background", "filter", "flood-color", + "flood-opacity", "lighting-color", "stop-color", "stop-opacity", "pointer-events", + "color-interpolation", "color-interpolation-filters", + "color-rendering", "fill", "fill-opacity", "fill-rule", "image-rendering", + "marker", "marker-end", "marker-mid", "marker-start", "shape-rendering", "stroke", + "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", + "stroke-miterlimit", "stroke-opacity", "stroke-width", "text-rendering", + "baseline-shift", "dominant-baseline", "glyph-orientation-horizontal", + "glyph-orientation-vertical", "text-anchor", "writing-mode" + ], propertyKeywords = keySet(propertyKeywords_); + + var nonStandardPropertyKeywords_ = [ + "scrollbar-arrow-color", "scrollbar-base-color", "scrollbar-dark-shadow-color", + "scrollbar-face-color", "scrollbar-highlight-color", "scrollbar-shadow-color", + "scrollbar-3d-light-color", "scrollbar-track-color", "shape-inside", + "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", + "searchfield-results-decoration", "zoom" + ], nonStandardPropertyKeywords = keySet(nonStandardPropertyKeywords_); + + var fontProperties_ = [ + "font-family", "src", "unicode-range", "font-variant", "font-feature-settings", + "font-stretch", "font-weight", "font-style" + ], fontProperties = keySet(fontProperties_); + + var counterDescriptors_ = [ + "additive-symbols", "fallback", "negative", "pad", "prefix", "range", + "speak-as", "suffix", "symbols", "system" + ], counterDescriptors = keySet(counterDescriptors_); + + var colorKeywords_ = [ + "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", + "bisque", "black", "blanchedalmond", "blue", "blueviolet", "brown", + "burlywood", "cadetblue", "chartreuse", "chocolate", "coral", "cornflowerblue", + "cornsilk", "crimson", "cyan", "darkblue", "darkcyan", "darkgoldenrod", + "darkgray", "darkgreen", "darkkhaki", "darkmagenta", "darkolivegreen", + "darkorange", "darkorchid", "darkred", "darksalmon", "darkseagreen", + "darkslateblue", "darkslategray", "darkturquoise", "darkviolet", + "deeppink", "deepskyblue", "dimgray", "dodgerblue", "firebrick", + "floralwhite", "forestgreen", "fuchsia", "gainsboro", "ghostwhite", + "gold", "goldenrod", "gray", "grey", "green", "greenyellow", "honeydew", + "hotpink", "indianred", "indigo", "ivory", "khaki", "lavender", + "lavenderblush", "lawngreen", "lemonchiffon", "lightblue", "lightcoral", + "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightpink", + "lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", + "lightsteelblue", "lightyellow", "lime", "limegreen", "linen", "magenta", + "maroon", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", + "mediumseagreen", "mediumslateblue", "mediumspringgreen", "mediumturquoise", + "mediumvioletred", "midnightblue", "mintcream", "mistyrose", "moccasin", + "navajowhite", "navy", "oldlace", "olive", "olivedrab", "orange", "orangered", + "orchid", "palegoldenrod", "palegreen", "paleturquoise", "palevioletred", + "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", + "purple", "rebeccapurple", "red", "rosybrown", "royalblue", "saddlebrown", + "salmon", "sandybrown", "seagreen", "seashell", "sienna", "silver", "skyblue", + "slateblue", "slategray", "snow", "springgreen", "steelblue", "tan", + "teal", "thistle", "tomato", "turquoise", "violet", "wheat", "white", + "whitesmoke", "yellow", "yellowgreen" + ], colorKeywords = keySet(colorKeywords_); + + var valueKeywords_ = [ + "above", "absolute", "activeborder", "additive", "activecaption", "afar", + "after-white-space", "ahead", "alias", "all", "all-scroll", "alphabetic", "alternate", + "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", + "arabic-indic", "armenian", "asterisks", "attr", "auto", "auto-flow", "avoid", "avoid-column", "avoid-page", + "avoid-region", "background", "backwards", "baseline", "below", "bidi-override", "binary", + "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", + "both", "bottom", "break", "break-all", "break-word", "bullets", "button", "button-bevel", + "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "calc", "cambodian", + "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", + "cell", "center", "checkbox", "circle", "cjk-decimal", "cjk-earthly-branch", + "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", + "col-resize", "collapse", "color", "color-burn", "color-dodge", "column", "column-reverse", + "compact", "condensed", "contain", "content", "contents", + "content-box", "context-menu", "continuous", "copy", "counter", "counters", "cover", "crop", + "cross", "crosshair", "currentcolor", "cursive", "cyclic", "darken", "dashed", "decimal", + "decimal-leading-zero", "default", "default-button", "dense", "destination-atop", + "destination-in", "destination-out", "destination-over", "devanagari", "difference", + "disc", "discard", "disclosure-closed", "disclosure-open", "document", + "dot-dash", "dot-dot-dash", + "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", + "element", "ellipse", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", + "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", + "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", + "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", + "ethiopic-halehame-gez", "ethiopic-halehame-om-et", + "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", + "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", + "ethiopic-numeric", "ew-resize", "exclusion", "expanded", "extends", "extra-condensed", + "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "flex", "flex-end", "flex-start", "footnotes", + "forwards", "from", "geometricPrecision", "georgian", "graytext", "grid", "groove", + "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hard-light", "hebrew", + "help", "hidden", "hide", "higher", "highlight", "highlighttext", + "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "hue", "icon", "ignore", + "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", + "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", + "inline-block", "inline-flex", "inline-grid", "inline-table", "inset", "inside", "intrinsic", "invert", + "italic", "japanese-formal", "japanese-informal", "justify", "kannada", + "katakana", "katakana-iroha", "keep-all", "khmer", + "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", + "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", + "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", + "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", + "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", + "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", + "media-controls-background", "media-current-time-display", + "media-fullscreen-button", "media-mute-button", "media-play-button", + "media-return-to-realtime-button", "media-rewind-button", + "media-seek-back-button", "media-seek-forward-button", "media-slider", + "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", + "media-volume-slider-container", "media-volume-sliderthumb", "medium", + "menu", "menulist", "menulist-button", "menulist-text", + "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", + "mix", "mongolian", "monospace", "move", "multiple", "multiply", "myanmar", "n-resize", + "narrower", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", + "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", + "ns-resize", "numbers", "numeric", "nw-resize", "nwse-resize", "oblique", "octal", "opacity", "open-quote", + "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", + "outside", "outside-shape", "overlay", "overline", "padding", "padding-box", + "painted", "page", "paused", "persian", "perspective", "plus-darker", "plus-lighter", + "pointer", "polygon", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", + "progress", "push-button", "radial-gradient", "radio", "read-only", + "read-write", "read-write-plaintext-only", "rectangle", "region", + "relative", "repeat", "repeating-linear-gradient", + "repeating-radial-gradient", "repeat-x", "repeat-y", "reset", "reverse", + "rgb", "rgba", "ridge", "right", "rotate", "rotate3d", "rotateX", "rotateY", + "rotateZ", "round", "row", "row-resize", "row-reverse", "rtl", "run-in", "running", + "s-resize", "sans-serif", "saturation", "scale", "scale3d", "scaleX", "scaleY", "scaleZ", "screen", + "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", + "searchfield-cancel-button", "searchfield-decoration", + "searchfield-results-button", "searchfield-results-decoration", + "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", + "simp-chinese-formal", "simp-chinese-informal", "single", + "skew", "skewX", "skewY", "skip-white-space", "slide", "slider-horizontal", + "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", + "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", + "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "spell-out", "square", + "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", + "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", + "table-caption", "table-cell", "table-column", "table-column-group", + "table-footer-group", "table-header-group", "table-row", "table-row-group", + "tamil", + "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", + "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", + "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", + "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", + "trad-chinese-formal", "trad-chinese-informal", "transform", + "translate", "translate3d", "translateX", "translateY", "translateZ", + "transparent", "ultra-condensed", "ultra-expanded", "underline", "unset", "up", + "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", + "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", + "var", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", + "visibleStroke", "visual", "w-resize", "wait", "wave", "wider", + "window", "windowframe", "windowtext", "words", "wrap", "wrap-reverse", "x-large", "x-small", "xor", + "xx-large", "xx-small" + ], valueKeywords = keySet(valueKeywords_); + + var allWords = documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_) + .concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_) + .concat(valueKeywords_); + CodeMirror.registerHelper("hintWords", "css", allWords); + + function tokenCComment(stream, state) { + var maybeEnd = false, ch; + while ((ch = stream.next()) != null) { + if (maybeEnd && ch == "/") { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return ["comment", "comment"]; + } + + CodeMirror.defineMIME("text/css", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css" + }); + + CodeMirror.defineMIME("text/x-scss", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + ":": function(stream) { + if (stream.match(/\s*\{/, false)) + return [null, null] + return false; + }, + "$": function(stream) { + stream.match(/^[\w-]+/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "#": function(stream) { + if (!stream.eat("{")) return false; + return [null, "interpolation"]; + } + }, + name: "css", + helperType: "scss" + }); + + CodeMirror.defineMIME("text/x-less", { + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + mediaValueKeywords: mediaValueKeywords, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + fontProperties: fontProperties, + allowNested: true, + lineComment: "//", + tokenHooks: { + "/": function(stream, state) { + if (stream.eat("/")) { + stream.skipToEnd(); + return ["comment", "comment"]; + } else if (stream.eat("*")) { + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } else { + return ["operator", "operator"]; + } + }, + "@": function(stream) { + if (stream.eat("{")) return [null, "interpolation"]; + if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; + stream.eatWhile(/[\w\\\-]/); + if (stream.match(/^\s*:/, false)) + return ["variable-2", "variable-definition"]; + return ["variable-2", "variable"]; + }, + "&": function() { + return ["atom", "atom"]; + } + }, + name: "css", + helperType: "less" + }); + + CodeMirror.defineMIME("text/x-gss", { + documentTypes: documentTypes, + mediaTypes: mediaTypes, + mediaFeatures: mediaFeatures, + propertyKeywords: propertyKeywords, + nonStandardPropertyKeywords: nonStandardPropertyKeywords, + fontProperties: fontProperties, + counterDescriptors: counterDescriptors, + colorKeywords: colorKeywords, + valueKeywords: valueKeywords, + supportsAtComponent: true, + tokenHooks: { + "/": function(stream, state) { + if (!stream.eat("*")) return false; + state.tokenize = tokenCComment; + return tokenCComment(stream, state); + } + }, + name: "css", + helperType: "gss" + }); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +function Context(indented, column, type, info, align, prev) { + this.indented = indented; + this.column = column; + this.type = type; + this.info = info; + this.align = align; + this.prev = prev; +} +function pushContext(state, col, type, info) { + var indent = state.indented; + if (state.context && state.context.type == "statement" && type != "statement") + indent = state.context.indented; + return state.context = new Context(indent, col, type, info, null, state.context); +} +function popContext(state) { + var t = state.context.type; + if (t == ")" || t == "]" || t == "}") + state.indented = state.context.indented; + return state.context = state.context.prev; +} + +function typeBefore(stream, state, pos) { + if (state.prevToken == "variable" || state.prevToken == "variable-3") return true; + if (/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0, pos))) return true; + if (state.typeAtEndOfLine && stream.column() == stream.indentation()) return true; +} + +function isTopScope(context) { + for (;;) { + if (!context || context.type == "top") return true; + if (context.type == "}" && context.prev.info != "namespace") return false; + context = context.prev; + } +} + +CodeMirror.defineMode("clike", function(config, parserConfig) { + var indentUnit = config.indentUnit, + statementIndentUnit = parserConfig.statementIndentUnit || indentUnit, + dontAlignCalls = parserConfig.dontAlignCalls, + keywords = parserConfig.keywords || {}, + types = parserConfig.types || {}, + builtin = parserConfig.builtin || {}, + blockKeywords = parserConfig.blockKeywords || {}, + defKeywords = parserConfig.defKeywords || {}, + atoms = parserConfig.atoms || {}, + hooks = parserConfig.hooks || {}, + multiLineStrings = parserConfig.multiLineStrings, + indentStatements = parserConfig.indentStatements !== false, + indentSwitch = parserConfig.indentSwitch !== false, + namespaceSeparator = parserConfig.namespaceSeparator, + isPunctuationChar = parserConfig.isPunctuationChar || /[\[\]{}\(\),;\:\.]/, + numberStart = parserConfig.numberStart || /[\d\.]/, + number = parserConfig.number || /^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i, + isOperatorChar = parserConfig.isOperatorChar || /[+\-*&%=<>!?|\/]/, + isIdentifierChar = parserConfig.isIdentifierChar || /[\w\$_\xa1-\uffff]/; + + var curPunc, isDefKeyword; + + function tokenBase(stream, state) { + var ch = stream.next(); + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } + if (isPunctuationChar.test(ch)) { + curPunc = ch; + return null; + } + if (numberStart.test(ch)) { + stream.backUp(1) + if (stream.match(number)) return "number" + stream.next() + } + if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } + if (stream.eat("/")) { + stream.skipToEnd(); + return "comment"; + } + } + if (isOperatorChar.test(ch)) { + while (!stream.match(/^\/[\/*]/, false) && stream.eat(isOperatorChar)) {} + return "operator"; + } + stream.eatWhile(isIdentifierChar); + if (namespaceSeparator) while (stream.match(namespaceSeparator)) + stream.eatWhile(isIdentifierChar); + + var cur = stream.current(); + if (contains(keywords, cur)) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + if (contains(defKeywords, cur)) isDefKeyword = true; + return "keyword"; + } + if (contains(types, cur)) return "variable-3"; + if (contains(builtin, cur)) { + if (contains(blockKeywords, cur)) curPunc = "newstatement"; + return "builtin"; + } + if (contains(atoms, cur)) return "atom"; + return "variable"; + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next, end = false; + while ((next = stream.next()) != null) { + if (next == quote && !escaped) {end = true; break;} + escaped = !escaped && next == "\\"; + } + if (end || !(escaped || multiLineStrings)) + state.tokenize = null; + return "string"; + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = null; + break; + } + maybeEnd = (ch == "*"); + } + return "comment"; + } + + function maybeEOL(stream, state) { + if (parserConfig.typeFirstDefinitions && stream.eol() && isTopScope(state.context)) + state.typeAtEndOfLine = typeBefore(stream, state, stream.pos) + } + + // Interface + + return { + startState: function(basecolumn) { + return { + tokenize: null, + context: new Context((basecolumn || 0) - indentUnit, 0, "top", null, false), + indented: 0, + startOfLine: true, + prevToken: null + }; + }, + + token: function(stream, state) { + var ctx = state.context; + if (stream.sol()) { + if (ctx.align == null) ctx.align = false; + state.indented = stream.indentation(); + state.startOfLine = true; + } + if (stream.eatSpace()) { maybeEOL(stream, state); return null; } + curPunc = isDefKeyword = null; + var style = (state.tokenize || tokenBase)(stream, state); + if (style == "comment" || style == "meta") return style; + if (ctx.align == null) ctx.align = true; + + if (curPunc == ";" || curPunc == ":" || (curPunc == "," && stream.match(/^\s*(?:\/\/.*)?$/, false))) + while (state.context.type == "statement") popContext(state); + else if (curPunc == "{") pushContext(state, stream.column(), "}"); + else if (curPunc == "[") pushContext(state, stream.column(), "]"); + else if (curPunc == "(") pushContext(state, stream.column(), ")"); + else if (curPunc == "}") { + while (ctx.type == "statement") ctx = popContext(state); + if (ctx.type == "}") ctx = popContext(state); + while (ctx.type == "statement") ctx = popContext(state); + } + else if (curPunc == ctx.type) popContext(state); + else if (indentStatements && + (((ctx.type == "}" || ctx.type == "top") && curPunc != ";") || + (ctx.type == "statement" && curPunc == "newstatement"))) { + pushContext(state, stream.column(), "statement", stream.current()); + } + + if (style == "variable" && + ((state.prevToken == "def" || + (parserConfig.typeFirstDefinitions && typeBefore(stream, state, stream.start) && + isTopScope(state.context) && stream.match(/^\s*\(/, false))))) + style = "def"; + + if (hooks.token) { + var result = hooks.token(stream, state, style); + if (result !== undefined) style = result; + } + + if (style == "def" && parserConfig.styleDefs === false) style = "variable"; + + state.startOfLine = false; + state.prevToken = isDefKeyword ? "def" : style || curPunc; + maybeEOL(stream, state); + return style; + }, + + indent: function(state, textAfter) { + if (state.tokenize != tokenBase && state.tokenize != null || state.typeAtEndOfLine) return CodeMirror.Pass; + var ctx = state.context, firstChar = textAfter && textAfter.charAt(0); + if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev; + if (parserConfig.dontIndentStatements) + while (ctx.type == "statement" && parserConfig.dontIndentStatements.test(ctx.info)) + ctx = ctx.prev + if (hooks.indent) { + var hook = hooks.indent(state, ctx, textAfter); + if (typeof hook == "number") return hook + } + var closing = firstChar == ctx.type; + var switchBlock = ctx.prev && ctx.prev.info == "switch"; + if (parserConfig.allmanIndentation && /[{(]/.test(firstChar)) { + while (ctx.type != "top" && ctx.type != "}") ctx = ctx.prev + return ctx.indented + } + if (ctx.type == "statement") + return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit); + if (ctx.align && (!dontAlignCalls || ctx.type != ")")) + return ctx.column + (closing ? 0 : 1); + if (ctx.type == ")" && !closing) + return ctx.indented + statementIndentUnit; + + return ctx.indented + (closing ? 0 : indentUnit) + + (!closing && switchBlock && !/^(?:case|default)\b/.test(textAfter) ? indentUnit : 0); + }, + + electricInput: indentSwitch ? /^\s*(?:case .*?:|default:|\{\}?|\})$/ : /^\s*[{}]$/, + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + fold: "brace" + }; +}); + + function words(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + function contains(words, word) { + if (typeof words === "function") { + return words(word); + } else { + return words.propertyIsEnumerable(word); + } + } + var cKeywords = "auto if break case register continue return default do sizeof " + + "static else struct switch extern typedef union for goto while enum const volatile"; + var cTypes = "int long char short double float unsigned signed void size_t ptrdiff_t"; + + function cppHook(stream, state) { + if (!state.startOfLine) return false + for (var ch, next = null; ch = stream.peek();) { + if (ch == "\\" && stream.match(/^.$/)) { + next = cppHook + break + } else if (ch == "/" && stream.match(/^\/[\/\*]/, false)) { + break + } + stream.next() + } + state.tokenize = next + return "meta" + } + + function pointerHook(_stream, state) { + if (state.prevToken == "variable-3") return "variable-3"; + return false; + } + + function cpp14Literal(stream) { + stream.eatWhile(/[\w\.']/); + return "number"; + } + + function cpp11StringHook(stream, state) { + stream.backUp(1); + // Raw strings. + if (stream.match(/(R|u8R|uR|UR|LR)/)) { + var match = stream.match(/"([^\s\\()]{0,16})\(/); + if (!match) { + return false; + } + state.cpp11RawStringDelim = match[1]; + state.tokenize = tokenRawString; + return tokenRawString(stream, state); + } + // Unicode strings/chars. + if (stream.match(/(u8|u|U|L)/)) { + if (stream.match(/["']/, /* eat */ false)) { + return "string"; + } + return false; + } + // Ignore this hook. + stream.next(); + return false; + } + + function cppLooksLikeConstructor(word) { + var lastTwo = /(\w+)::~?(\w+)$/.exec(word); + return lastTwo && lastTwo[1] == lastTwo[2]; + } + + // C#-style strings where "" escapes a quote. + function tokenAtString(stream, state) { + var next; + while ((next = stream.next()) != null) { + if (next == '"' && !stream.eat('"')) { + state.tokenize = null; + break; + } + } + return "string"; + } + + // C++11 raw string literal is "( anything )", where + // can be a string up to 16 characters long. + function tokenRawString(stream, state) { + // Escape characters that have special regex meanings. + var delim = state.cpp11RawStringDelim.replace(/[^\w\s]/g, '\\$&'); + var match = stream.match(new RegExp(".*?\\)" + delim + '"')); + if (match) + state.tokenize = null; + else + stream.skipToEnd(); + return "string"; + } + + function def(mimes, mode) { + if (typeof mimes == "string") mimes = [mimes]; + var words = []; + function add(obj) { + if (obj) for (var prop in obj) if (obj.hasOwnProperty(prop)) + words.push(prop); + } + add(mode.keywords); + add(mode.types); + add(mode.builtin); + add(mode.atoms); + if (words.length) { + mode.helperType = mimes[0]; + CodeMirror.registerHelper("hintWords", mimes[0], words); + } + + for (var i = 0; i < mimes.length; ++i) + CodeMirror.defineMIME(mimes[i], mode); + } + + def(["text/x-csrc", "text/x-c", "text/x-chdr"], { + name: "clike", + keywords: words(cKeywords), + types: words(cTypes + " bool _Complex _Bool float_t double_t intptr_t intmax_t " + + "int8_t int16_t int32_t int64_t uintptr_t uintmax_t uint8_t uint16_t " + + "uint32_t uint64_t"), + blockKeywords: words("case do else for if switch while struct"), + defKeywords: words("struct"), + typeFirstDefinitions: true, + atoms: words("null true false"), + hooks: {"#": cppHook, "*": pointerHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def(["text/x-c++src", "text/x-c++hdr"], { + name: "clike", + keywords: words(cKeywords + " asm dynamic_cast namespace reinterpret_cast try explicit new " + + "static_cast typeid catch operator template typename class friend private " + + "this using const_cast inline public throw virtual delete mutable protected " + + "alignas alignof constexpr decltype nullptr noexcept thread_local final " + + "static_assert override"), + types: words(cTypes + " bool wchar_t"), + blockKeywords: words("catch class do else finally for if struct switch try while"), + defKeywords: words("class namespace struct enum union"), + typeFirstDefinitions: true, + atoms: words("true false null"), + dontIndentStatements: /^template$/, + isIdentifierChar: /[\w\$_~\xa1-\uffff]/, + hooks: { + "#": cppHook, + "*": pointerHook, + "u": cpp11StringHook, + "U": cpp11StringHook, + "L": cpp11StringHook, + "R": cpp11StringHook, + "0": cpp14Literal, + "1": cpp14Literal, + "2": cpp14Literal, + "3": cpp14Literal, + "4": cpp14Literal, + "5": cpp14Literal, + "6": cpp14Literal, + "7": cpp14Literal, + "8": cpp14Literal, + "9": cpp14Literal, + token: function(stream, state, style) { + if (style == "variable" && stream.peek() == "(" && + (state.prevToken == ";" || state.prevToken == null || + state.prevToken == "}") && + cppLooksLikeConstructor(stream.current())) + return "def"; + } + }, + namespaceSeparator: "::", + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-java", { + name: "clike", + keywords: words("abstract assert break case catch class const continue default " + + "do else enum extends final finally float for goto if implements import " + + "instanceof interface native new package private protected public " + + "return static strictfp super switch synchronized this throw throws transient " + + "try volatile while @interface"), + types: words("byte short int long float double boolean char void Boolean Byte Character Double Float " + + "Integer Long Number Object Short String StringBuffer StringBuilder Void"), + blockKeywords: words("catch class do else finally for if switch try while"), + defKeywords: words("class interface package enum @interface"), + typeFirstDefinitions: true, + atoms: words("true false null"), + number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, + hooks: { + "@": function(stream) { + // Don't match the @interface keyword. + if (stream.match('interface', false)) return false; + + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + }, + modeProps: {fold: ["brace", "import"]} + }); + + def("text/x-csharp", { + name: "clike", + keywords: words("abstract as async await base break case catch checked class const continue" + + " default delegate do else enum event explicit extern finally fixed for" + + " foreach goto if implicit in interface internal is lock namespace new" + + " operator out override params private protected public readonly ref return sealed" + + " sizeof stackalloc static struct switch this throw try typeof unchecked" + + " unsafe using virtual void volatile while add alias ascending descending dynamic from get" + + " global group into join let orderby partial remove select set value var yield"), + types: words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func" + + " Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32" + + " UInt64 bool byte char decimal double short int long object" + + " sbyte float string ushort uint ulong"), + blockKeywords: words("catch class do else finally for foreach if struct switch try while"), + defKeywords: words("class interface namespace struct var"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: { + "@": function(stream, state) { + if (stream.eat('"')) { + state.tokenize = tokenAtString; + return tokenAtString(stream, state); + } + stream.eatWhile(/[\w\$_]/); + return "meta"; + } + } + }); + + function tokenTripleString(stream, state) { + var escaped = false; + while (!stream.eol()) { + if (!escaped && stream.match('"""')) { + state.tokenize = null; + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + def("text/x-scala", { + name: "clike", + keywords: words( + + /* scala */ + "abstract case catch class def do else extends final finally for forSome if " + + "implicit import lazy match new null object override package private protected return " + + "sealed super this throw trait try type val var while with yield _ " + + + /* package scala */ + "assert assume require print println printf readLine readBoolean readByte readShort " + + "readChar readInt readLong readFloat readDouble" + ), + types: words( + "AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either " + + "Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable " + + "Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering " + + "Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder " + + "StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector " + + + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + ), + multiLineStrings: true, + blockKeywords: words("catch class do else finally for forSome if match switch try while"), + defKeywords: words("class def object package trait type val var"), + atoms: words("true false null"), + indentStatements: false, + indentSwitch: false, + isOperatorChar: /[+\-*&%=<>!?|\/#:@]/, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + if (!stream.match('""')) return false; + state.tokenize = tokenTripleString; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + "=": function(stream, state) { + var cx = state.context + if (cx.type == "}" && cx.align && stream.eat(">")) { + state.context = new Context(cx.indented, cx.column, cx.type, cx.info, null, cx.prev) + return "operator" + } else { + return false + } + } + }, + modeProps: {closeBrackets: {triples: '"'}} + }); + + function tokenKotlinString(tripleString){ + return function (stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!tripleString && !escaped && stream.match('"') ) {end = true; break;} + if (tripleString && stream.match('"""')) {end = true; break;} + next = stream.next(); + if(!escaped && next == "$" && stream.match('{')) + stream.skipTo("}"); + escaped = !escaped && next == "\\" && !tripleString; + } + if (end || !tripleString) + state.tokenize = null; + return "string"; + } + } + + def("text/x-kotlin", { + name: "clike", + keywords: words( + /*keywords*/ + "package as typealias class interface this super val " + + "var fun for is in This throw return " + + "break continue object if else while do try when !in !is as? " + + + /*soft keywords*/ + "file import where by get set abstract enum open inner override private public internal " + + "protected catch finally out final vararg reified dynamic companion constructor init " + + "sealed field property receiver param sparam lateinit data inline noinline tailrec " + + "external annotation crossinline const operator infix suspend" + ), + types: words( + /* package java.lang */ + "Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable " + + "Compiler Double Exception Float Integer Long Math Number Object Package Pair Process " + + "Runtime Runnable SecurityManager Short StackTraceElement StrictMath String " + + "StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void" + ), + intendSwitch: false, + indentStatements: false, + multiLineStrings: true, + number: /^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i, + blockKeywords: words("catch class do else finally for if where try while enum"), + defKeywords: words("class val var object package interface fun"), + atoms: words("true false null this"), + hooks: { + '"': function(stream, state) { + state.tokenize = tokenKotlinString(stream.match('""')); + return state.tokenize(stream, state); + } + }, + modeProps: {closeBrackets: {triples: '"'}} + }); + + def(["x-shader/x-vertex", "x-shader/x-fragment"], { + name: "clike", + keywords: words("sampler1D sampler2D sampler3D samplerCube " + + "sampler1DShadow sampler2DShadow " + + "const attribute uniform varying " + + "break continue discard return " + + "for while do if else struct " + + "in out inout"), + types: words("float int bool void " + + "vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 " + + "mat2 mat3 mat4"), + blockKeywords: words("for while do if else struct"), + builtin: words("radians degrees sin cos tan asin acos atan " + + "pow exp log exp2 sqrt inversesqrt " + + "abs sign floor ceil fract mod min max clamp mix step smoothstep " + + "length distance dot cross normalize ftransform faceforward " + + "reflect refract matrixCompMult " + + "lessThan lessThanEqual greaterThan greaterThanEqual " + + "equal notEqual any all not " + + "texture1D texture1DProj texture1DLod texture1DProjLod " + + "texture2D texture2DProj texture2DLod texture2DProjLod " + + "texture3D texture3DProj texture3DLod texture3DProjLod " + + "textureCube textureCubeLod " + + "shadow1D shadow2D shadow1DProj shadow2DProj " + + "shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod " + + "dFdx dFdy fwidth " + + "noise1 noise2 noise3 noise4"), + atoms: words("true false " + + "gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex " + + "gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 " + + "gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 " + + "gl_FogCoord gl_PointCoord " + + "gl_Position gl_PointSize gl_ClipVertex " + + "gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor " + + "gl_TexCoord gl_FogFragCoord " + + "gl_FragCoord gl_FrontFacing " + + "gl_FragData gl_FragDepth " + + "gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix " + + "gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse " + + "gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse " + + "gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose " + + "gl_ProjectionMatrixInverseTranspose " + + "gl_ModelViewProjectionMatrixInverseTranspose " + + "gl_TextureMatrixInverseTranspose " + + "gl_NormalScale gl_DepthRange gl_ClipPlane " + + "gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel " + + "gl_FrontLightModelProduct gl_BackLightModelProduct " + + "gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ " + + "gl_FogParameters " + + "gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords " + + "gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats " + + "gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits " + + "gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits " + + "gl_MaxDrawBuffers"), + indentSwitch: false, + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-nesc", { + name: "clike", + keywords: words(cKeywords + "as atomic async call command component components configuration event generic " + + "implementation includes interface module new norace nx_struct nx_union post provides " + + "signal task uses abstract extends"), + types: words(cTypes), + blockKeywords: words("case do else for if switch while struct"), + atoms: words("null true false"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + def("text/x-objectivec", { + name: "clike", + keywords: words(cKeywords + "inline restrict _Bool _Complex _Imaginary BOOL Class bycopy byref id IMP in " + + "inout nil oneway out Protocol SEL self super atomic nonatomic retain copy readwrite readonly"), + types: words(cTypes), + atoms: words("YES NO NULL NILL ON OFF true false"), + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$]/); + return "keyword"; + }, + "#": cppHook, + indent: function(_state, ctx, textAfter) { + if (ctx.type == "statement" && /^@\w/.test(textAfter)) return ctx.indented + } + }, + modeProps: {fold: "brace"} + }); + + def("text/x-squirrel", { + name: "clike", + keywords: words("base break clone continue const default delete enum extends function in class" + + " foreach local resume return this throw typeof yield constructor instanceof static"), + types: words(cTypes), + blockKeywords: words("case catch class else for foreach if switch try while"), + defKeywords: words("function local class"), + typeFirstDefinitions: true, + atoms: words("true false null"), + hooks: {"#": cppHook}, + modeProps: {fold: ["brace", "include"]} + }); + + // Ceylon Strings need to deal with interpolation + var stringTokenizer = null; + function tokenCeylonString(type) { + return function(stream, state) { + var escaped = false, next, end = false; + while (!stream.eol()) { + if (!escaped && stream.match('"') && + (type == "single" || stream.match('""'))) { + end = true; + break; + } + if (!escaped && stream.match('``')) { + stringTokenizer = tokenCeylonString(type); + end = true; + break; + } + next = stream.next(); + escaped = type == "single" && !escaped && next == "\\"; + } + if (end) + state.tokenize = null; + return "string"; + } + } + + def("text/x-ceylon", { + name: "clike", + keywords: words("abstracts alias assembly assert assign break case catch class continue dynamic else" + + " exists extends finally for function given if import in interface is let module new" + + " nonempty object of out outer package return satisfies super switch then this throw" + + " try value void while"), + types: function(word) { + // In Ceylon all identifiers that start with an uppercase are types + var first = word.charAt(0); + return (first === first.toUpperCase() && first !== first.toLowerCase()); + }, + blockKeywords: words("case catch class dynamic else finally for function if interface module new object switch try while"), + defKeywords: words("class dynamic function interface module object package value"), + builtin: words("abstract actual aliased annotation by default deprecated doc final formal late license" + + " native optional sealed see serializable shared suppressWarnings tagged throws variable"), + isPunctuationChar: /[\[\]{}\(\),;\:\.`]/, + isOperatorChar: /[+\-*&%=<>!?|^~:\/]/, + numberStart: /[\d#$]/, + number: /^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i, + multiLineStrings: true, + typeFirstDefinitions: true, + atoms: words("true false null larger smaller equal empty finished"), + indentSwitch: false, + styleDefs: false, + hooks: { + "@": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "meta"; + }, + '"': function(stream, state) { + state.tokenize = tokenCeylonString(stream.match('""') ? "triple" : "single"); + return state.tokenize(stream, state); + }, + '`': function(stream, state) { + if (!stringTokenizer || !stream.match('`')) return false; + state.tokenize = stringTokenizer; + stringTokenizer = null; + return state.tokenize(stream, state); + }, + "'": function(stream) { + stream.eatWhile(/[\w\$_\xa1-\uffff]/); + return "atom"; + }, + token: function(_stream, state, style) { + if ((style == "variable" || style == "variable-3") && + state.prevToken == ".") { + return "variable-2"; + } + } + }, + modeProps: { + fold: ["brace", "import"], + closeBrackets: {triples: '"'} + } + }); + +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror"), require("../htmlmixed/htmlmixed"), require("../clike/clike")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror", "../htmlmixed/htmlmixed", "../clike/clike"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + function keywords(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // Helper for phpString + function matchSequence(list, end, escapes) { + if (list.length == 0) return phpString(end); + return function (stream, state) { + var patterns = list[0]; + for (var i = 0; i < patterns.length; i++) if (stream.match(patterns[i][0])) { + state.tokenize = matchSequence(list.slice(1), end); + return patterns[i][1]; + } + state.tokenize = phpString(end, escapes); + return "string"; + }; + } + function phpString(closing, escapes) { + return function(stream, state) { return phpString_(stream, state, closing, escapes); }; + } + function phpString_(stream, state, closing, escapes) { + // "Complex" syntax + if (escapes !== false && stream.match("${", false) || stream.match("{$", false)) { + state.tokenize = null; + return "string"; + } + + // Simple syntax + if (escapes !== false && stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)) { + // After the variable name there may appear array or object operator. + if (stream.match("[", false)) { + // Match array operator + state.tokenize = matchSequence([ + [["[", null]], + [[/\d[\w\.]*/, "number"], + [/\$[a-zA-Z_][a-zA-Z0-9_]*/, "variable-2"], + [/[\w\$]+/, "variable"]], + [["]", null]] + ], closing, escapes); + } + if (stream.match(/\-\>\w/, false)) { + // Match object operator + state.tokenize = matchSequence([ + [["->", null]], + [[/[\w]+/, "variable"]] + ], closing, escapes); + } + return "variable-2"; + } + + var escaped = false; + // Normal string + while (!stream.eol() && + (escaped || escapes === false || + (!stream.match("{$", false) && + !stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/, false)))) { + if (!escaped && stream.match(closing)) { + state.tokenize = null; + state.tokStack.pop(); state.tokStack.pop(); + break; + } + escaped = stream.next() == "\\" && !escaped; + } + return "string"; + } + + var phpKeywords = "abstract and array as break case catch class clone const continue declare default " + + "do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final " + + "for foreach function global goto if implements interface instanceof namespace " + + "new or private protected public static switch throw trait try use var while xor " + + "die echo empty exit eval include include_once isset list require require_once return " + + "print unset __halt_compiler self static parent yield insteadof finally"; + var phpAtoms = "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__"; + var phpBuiltin = "func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count"; + CodeMirror.registerHelper("hintWords", "php", [phpKeywords, phpAtoms, phpBuiltin].join(" ").split(" ")); + CodeMirror.registerHelper("wordChars", "php", /[\w$]/); + + var phpConfig = { + name: "clike", + helperType: "php", + keywords: keywords(phpKeywords), + blockKeywords: keywords("catch do else elseif for foreach if switch try while finally"), + defKeywords: keywords("class function interface namespace trait"), + atoms: keywords(phpAtoms), + builtin: keywords(phpBuiltin), + multiLineStrings: true, + hooks: { + "$": function(stream) { + stream.eatWhile(/[\w\$_]/); + return "variable-2"; + }, + "<": function(stream, state) { + var before; + if (before = stream.match(/<<\s*/)) { + var quoted = stream.eat(/['"]/); + stream.eatWhile(/[\w\.]/); + var delim = stream.current().slice(before[0].length + (quoted ? 2 : 1)); + if (quoted) stream.eat(quoted); + if (delim) { + (state.tokStack || (state.tokStack = [])).push(delim, 0); + state.tokenize = phpString(delim, quoted != "'"); + return "string"; + } + } + return false; + }, + "#": function(stream) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + }, + "/": function(stream) { + if (stream.eat("/")) { + while (!stream.eol() && !stream.match("?>", false)) stream.next(); + return "comment"; + } + return false; + }, + '"': function(_stream, state) { + (state.tokStack || (state.tokStack = [])).push('"', 0); + state.tokenize = phpString('"'); + return "string"; + }, + "{": function(_stream, state) { + if (state.tokStack && state.tokStack.length) + state.tokStack[state.tokStack.length - 1]++; + return false; + }, + "}": function(_stream, state) { + if (state.tokStack && state.tokStack.length > 0 && + !--state.tokStack[state.tokStack.length - 1]) { + state.tokenize = phpString(state.tokStack[state.tokStack.length - 2]); + } + return false; + } + } + }; + + CodeMirror.defineMode("php", function(config, parserConfig) { + var htmlMode = CodeMirror.getMode(config, "text/html"); + var phpMode = CodeMirror.getMode(config, phpConfig); + + function dispatch(stream, state) { + var isPHP = state.curMode == phpMode; + if (stream.sol() && state.pending && state.pending != '"' && state.pending != "'") state.pending = null; + if (!isPHP) { + if (stream.match(/^<\?\w*/)) { + state.curMode = phpMode; + if (!state.php) state.php = CodeMirror.startState(phpMode, htmlMode.indent(state.html, "")) + state.curState = state.php; + return "meta"; + } + if (state.pending == '"' || state.pending == "'") { + while (!stream.eol() && stream.next() != state.pending) {} + var style = "string"; + } else if (state.pending && stream.pos < state.pending.end) { + stream.pos = state.pending.end; + var style = state.pending.style; + } else { + var style = htmlMode.token(stream, state.curState); + } + if (state.pending) state.pending = null; + var cur = stream.current(), openPHP = cur.search(/<\?/), m; + if (openPHP != -1) { + if (style == "string" && (m = cur.match(/[\'\"]$/)) && !/\?>/.test(cur)) state.pending = m[0]; + else state.pending = {end: stream.pos, style: style}; + stream.backUp(cur.length - openPHP); + } + return style; + } else if (isPHP && state.php.tokenize == null && stream.match("?>")) { + state.curMode = htmlMode; + state.curState = state.html; + if (!state.php.context.prev) state.php = null; + return "meta"; + } else { + return phpMode.token(stream, state.curState); + } + } + + return { + startState: function() { + var html = CodeMirror.startState(htmlMode) + var php = parserConfig.startOpen ? CodeMirror.startState(phpMode) : null + return {html: html, + php: php, + curMode: parserConfig.startOpen ? phpMode : htmlMode, + curState: parserConfig.startOpen ? php : html, + pending: null}; + }, + + copyState: function(state) { + var html = state.html, htmlNew = CodeMirror.copyState(htmlMode, html), + php = state.php, phpNew = php && CodeMirror.copyState(phpMode, php), cur; + if (state.curMode == htmlMode) cur = htmlNew; + else cur = phpNew; + return {html: htmlNew, php: phpNew, curMode: state.curMode, curState: cur, + pending: state.pending}; + }, + + token: dispatch, + + indent: function(state, textAfter) { + if ((state.curMode != phpMode && /^\s*<\//.test(textAfter)) || + (state.curMode == phpMode && /^\?>/.test(textAfter))) + return htmlMode.indent(state.html, textAfter); + return state.curMode.indent(state.curState, textAfter); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: "//", + + innerMode: function(state) { return {state: state.curState, mode: state.curMode}; } + }; + }, "htmlmixed", "clike"); + + CodeMirror.defineMIME("application/x-httpd-php", "php"); + CodeMirror.defineMIME("application/x-httpd-php-open", {name: "php", startOpen: true}); + CodeMirror.defineMIME("text/x-php", phpConfig); +}); + +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("sql", function(config, parserConfig) { + "use strict"; + + var client = parserConfig.client || {}, + atoms = parserConfig.atoms || {"false": true, "true": true, "null": true}, + builtin = parserConfig.builtin || {}, + keywords = parserConfig.keywords || {}, + operatorChars = parserConfig.operatorChars || /^[*+\-%<>!=&|~^]/, + support = parserConfig.support || {}, + hooks = parserConfig.hooks || {}, + dateSQL = parserConfig.dateSQL || {"date" : true, "time" : true, "timestamp" : true}; + + function tokenBase(stream, state) { + var ch = stream.next(); + + // call hooks from the mime type + if (hooks[ch]) { + var result = hooks[ch](stream, state); + if (result !== false) return result; + } + + if (support.hexNumber && + ((ch == "0" && stream.match(/^[xX][0-9a-fA-F]+/)) + || (ch == "x" || ch == "X") && stream.match(/^'[0-9a-fA-F]+'/))) { + // hex + // ref: http://dev.mysql.com/doc/refman/5.5/en/hexadecimal-literals.html + return "number"; + } else if (support.binaryNumber && + (((ch == "b" || ch == "B") && stream.match(/^'[01]+'/)) + || (ch == "0" && stream.match(/^b[01]+/)))) { + // bitstring + // ref: http://dev.mysql.com/doc/refman/5.5/en/bit-field-literals.html + return "number"; + } else if (ch.charCodeAt(0) > 47 && ch.charCodeAt(0) < 58) { + // numbers + // ref: http://dev.mysql.com/doc/refman/5.5/en/number-literals.html + stream.match(/^[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/); + support.decimallessFloat && stream.eat('.'); + return "number"; + } else if (ch == "?" && (stream.eatSpace() || stream.eol() || stream.eat(";"))) { + // placeholders + return "variable-3"; + } else if (ch == "'" || (ch == '"' && support.doubleQuote)) { + // strings + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + state.tokenize = tokenLiteral(ch); + return state.tokenize(stream, state); + } else if ((((support.nCharCast && (ch == "n" || ch == "N")) + || (support.charsetCast && ch == "_" && stream.match(/[a-z][a-z0-9]*/i))) + && (stream.peek() == "'" || stream.peek() == '"'))) { + // charset casting: _utf8'str', N'str', n'str' + // ref: http://dev.mysql.com/doc/refman/5.5/en/string-literals.html + return "keyword"; + } else if (/^[\(\),\;\[\]]/.test(ch)) { + // no highlighting + return null; + } else if (support.commentSlashSlash && ch == "/" && stream.eat("/")) { + // 1-line comment + stream.skipToEnd(); + return "comment"; + } else if ((support.commentHash && ch == "#") + || (ch == "-" && stream.eat("-") && (!support.commentSpaceRequired || stream.eat(" ")))) { + // 1-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + stream.skipToEnd(); + return "comment"; + } else if (ch == "/" && stream.eat("*")) { + // multi-line comments + // ref: https://kb.askmonty.org/en/comment-syntax/ + state.tokenize = tokenComment; + return state.tokenize(stream, state); + } else if (ch == ".") { + // .1 for 0.1 + if (support.zerolessFloat && stream.match(/^(?:\d+(?:e[+-]?\d+)?)/i)) { + return "number"; + } + // .table_name (ODBC) + // // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + if (support.ODBCdotTable && stream.match(/^[a-zA-Z_]+/)) { + return "variable-2"; + } + } else if (operatorChars.test(ch)) { + // operators + stream.eatWhile(operatorChars); + return null; + } else if (ch == '{' && + (stream.match(/^( )*(d|D|t|T|ts|TS)( )*'[^']*'( )*}/) || stream.match(/^( )*(d|D|t|T|ts|TS)( )*"[^"]*"( )*}/))) { + // dates (weird ODBC syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + return "number"; + } else { + stream.eatWhile(/^[_\w\d]/); + var word = stream.current().toLowerCase(); + // dates (standard SQL syntax) + // ref: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html + if (dateSQL.hasOwnProperty(word) && (stream.match(/^( )+'[^']*'/) || stream.match(/^( )+"[^"]*"/))) + return "number"; + if (atoms.hasOwnProperty(word)) return "atom"; + if (builtin.hasOwnProperty(word)) return "builtin"; + if (keywords.hasOwnProperty(word)) return "keyword"; + if (client.hasOwnProperty(word)) return "string-2"; + return null; + } + } + + // 'string', with char specified in quote escaped by '\' + function tokenLiteral(quote) { + return function(stream, state) { + var escaped = false, ch; + while ((ch = stream.next()) != null) { + if (ch == quote && !escaped) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && ch == "\\"; + } + return "string"; + }; + } + function tokenComment(stream, state) { + while (true) { + if (stream.skipTo("*")) { + stream.next(); + if (stream.eat("/")) { + state.tokenize = tokenBase; + break; + } + } else { + stream.skipToEnd(); + break; + } + } + return "comment"; + } + + function pushContext(stream, state, type) { + state.context = { + prev: state.context, + indent: stream.indentation(), + col: stream.column(), + type: type + }; + } + + function popContext(state) { + state.indent = state.context.indent; + state.context = state.context.prev; + } + + return { + startState: function() { + return {tokenize: tokenBase, context: null}; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (state.context && state.context.align == null) + state.context.align = false; + } + if (stream.eatSpace()) return null; + + var style = state.tokenize(stream, state); + if (style == "comment") return style; + + if (state.context && state.context.align == null) + state.context.align = true; + + var tok = stream.current(); + if (tok == "(") + pushContext(stream, state, ")"); + else if (tok == "[") + pushContext(stream, state, "]"); + else if (state.context && state.context.type == tok) + popContext(state); + return style; + }, + + indent: function(state, textAfter) { + var cx = state.context; + if (!cx) return CodeMirror.Pass; + var closing = textAfter.charAt(0) == cx.type; + if (cx.align) return cx.col + (closing ? 0 : 1); + else return cx.indent + (closing ? 0 : config.indentUnit); + }, + + blockCommentStart: "/*", + blockCommentEnd: "*/", + lineComment: support.commentSlashSlash ? "//" : support.commentHash ? "#" : null + }; +}); + +(function() { + "use strict"; + + // `identifier` + function hookIdentifier(stream) { + // MySQL/MariaDB identifiers + // ref: http://dev.mysql.com/doc/refman/5.6/en/identifier-qualifiers.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "`" && !stream.eat("`")) return "variable-2"; + } + stream.backUp(stream.current().length - 1); + return stream.eatWhile(/\w/) ? "variable-2" : null; + } + + // "identifier" + function hookIdentifierDoublequote(stream) { + // Standard SQL /SQLite identifiers + // ref: http://web.archive.org/web/20160813185132/http://savage.net.au/SQL/sql-99.bnf.html#delimited%20identifier + // ref: http://sqlite.org/lang_keywords.html + var ch; + while ((ch = stream.next()) != null) { + if (ch == "\"" && !stream.eat("\"")) return "variable-2"; + } + stream.backUp(stream.current().length - 1); + return stream.eatWhile(/\w/) ? "variable-2" : null; + } + + // variable token + function hookVar(stream) { + // variables + // @@prefix.varName @varName + // varName can be quoted with ` or ' or " + // ref: http://dev.mysql.com/doc/refman/5.5/en/user-variables.html + if (stream.eat("@")) { + stream.match(/^session\./); + stream.match(/^local\./); + stream.match(/^global\./); + } + + if (stream.eat("'")) { + stream.match(/^.*'/); + return "variable-2"; + } else if (stream.eat('"')) { + stream.match(/^.*"/); + return "variable-2"; + } else if (stream.eat("`")) { + stream.match(/^.*`/); + return "variable-2"; + } else if (stream.match(/^[0-9a-zA-Z$\.\_]+/)) { + return "variable-2"; + } + return null; + }; + + // short client keyword token + function hookClient(stream) { + // \N means NULL + // ref: http://dev.mysql.com/doc/refman/5.5/en/null-values.html + if (stream.eat("N")) { + return "atom"; + } + // \g, etc + // ref: http://dev.mysql.com/doc/refman/5.5/en/mysql-commands.html + return stream.match(/^[a-zA-Z.#!?]/) ? "variable-2" : null; + } + + // these keywords are used by all SQL dialects (however, a mode can still overwrite it) + var sqlKeywords = "alter and as asc between by count create delete desc distinct drop from group having in insert into is join like not on or order select set table union update values where limit "; + + // turn a space-separated list into an array + function set(str) { + var obj = {}, words = str.split(" "); + for (var i = 0; i < words.length; ++i) obj[words[i]] = true; + return obj; + } + + // A generic SQL Mode. It's not a standard, it just try to support what is generally supported + CodeMirror.defineMIME("text/x-sql", { + name: "sql", + keywords: set(sqlKeywords + "begin"), + builtin: set("bool boolean bit blob enum long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision real date datetime year unsigned signed decimal numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-mssql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "begin trigger proc view index for add constraint key primary foreign collate clustered nonclustered declare exec"), + builtin: set("bigint numeric bit smallint decimal smallmoney int tinyint money float real char varchar text nchar nvarchar ntext binary varbinary image cursor timestamp hierarchyid uniqueidentifier sql_variant xml table "), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date datetimeoffset datetime2 smalldatetime datetime time"), + hooks: { + "@": hookVar + } + }); + + CodeMirror.defineMIME("text/x-mysql", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general get global grant grants group group_concat handler hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show signal slave slow smallint snapshot soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + CodeMirror.defineMIME("text/x-mariadb", { + name: "sql", + client: set("charset clear connect edit ego exit go help nopager notee nowarning pager print prompt quit rehash source status system tee"), + keywords: set(sqlKeywords + "accessible action add after algorithm all always analyze asensitive at authors auto_increment autocommit avg avg_row_length before binary binlog both btree cache call cascade cascaded case catalog_name chain change changed character check checkpoint checksum class_origin client_statistics close coalesce code collate collation collations column columns comment commit committed completion concurrent condition connection consistent constraint contains continue contributors convert cross current current_date current_time current_timestamp current_user cursor data database databases day_hour day_microsecond day_minute day_second deallocate dec declare default delay_key_write delayed delimiter des_key_file describe deterministic dev_pop dev_samp deviance diagnostics directory disable discard distinctrow div dual dumpfile each elseif enable enclosed end ends engine engines enum errors escape escaped even event events every execute exists exit explain extended fast fetch field fields first flush for force foreign found_rows full fulltext function general generated get global grant grants group groupby_concat handler hard hash help high_priority hosts hour_microsecond hour_minute hour_second if ignore ignore_server_ids import index index_statistics infile inner innodb inout insensitive insert_method install interval invoker isolation iterate key keys kill language last leading leave left level limit linear lines list load local localtime localtimestamp lock logs low_priority master master_heartbeat_period master_ssl_verify_server_cert masters match max max_rows maxvalue message_text middleint migrate min min_rows minute_microsecond minute_second mod mode modifies modify mutex mysql_errno natural next no no_write_to_binlog offline offset one online open optimize option optionally out outer outfile pack_keys parser partition partitions password persistent phase plugin plugins prepare preserve prev primary privileges procedure processlist profile profiles purge query quick range read read_write reads real rebuild recover references regexp relaylog release remove rename reorganize repair repeatable replace require resignal restrict resume return returns revoke right rlike rollback rollup row row_format rtree savepoint schedule schema schema_name schemas second_microsecond security sensitive separator serializable server session share show shutdown signal slave slow smallint snapshot soft soname spatial specific sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_no_cache sql_small_result sqlexception sqlstate sqlwarning ssl start starting starts status std stddev stddev_pop stddev_samp storage straight_join subclass_origin sum suspend table_name table_statistics tables tablespace temporary terminated to trailing transaction trigger triggers truncate uncommitted undo uninstall unique unlock upgrade usage use use_frm user user_resources user_statistics using utc_date utc_time utc_timestamp value variables varying view views virtual warnings when while with work write xa xor year_month zerofill begin do then else loop repeat"), + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text bigint int int1 int2 int3 int4 int8 integer float float4 float8 double char varbinary varchar varcharacter precision date datetime year unsigned signed numeric"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber doubleQuote nCharCast charsetCast commentHash commentSpaceRequired"), + hooks: { + "@": hookVar, + "`": hookIdentifier, + "\\": hookClient + } + }); + + // provided by the phpLiteAdmin project - phpliteadmin.org + CodeMirror.defineMIME("text/x-sqlite", { + name: "sql", + // commands of the official SQLite client, ref: https://www.sqlite.org/cli.html#dotcmd + client: set("auth backup bail binary changes check clone databases dbinfo dump echo eqp exit explain fullschema headers help import imposter indexes iotrace limit lint load log mode nullvalue once open output print prompt quit read restore save scanstats schema separator session shell show stats system tables testcase timeout timer trace vfsinfo vfslist vfsname width"), + // ref: http://sqlite.org/lang_keywords.html + keywords: set(sqlKeywords + "abort action add after all analyze attach autoincrement before begin cascade case cast check collate column commit conflict constraint cross current_date current_time current_timestamp database default deferrable deferred detach each else end escape except exclusive exists explain fail for foreign full glob if ignore immediate index indexed initially inner instead intersect isnull key left limit match natural no notnull null of offset outer plan pragma primary query raise recursive references regexp reindex release rename replace restrict right rollback row savepoint temp temporary then to transaction trigger unique using vacuum view virtual when with without"), + // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. + builtin: set("bool boolean bit blob decimal double float long longblob longtext medium mediumblob mediumint mediumtext time timestamp tinyblob tinyint tinytext text clob bigint int int2 int8 integer float double char varchar date datetime year unsigned signed numeric real"), + // ref: http://sqlite.org/syntax/literal-value.html + atoms: set("null current_date current_time current_timestamp"), + // ref: http://sqlite.org/lang_expr.html#binaryops + operatorChars: /^[*+\-%<>!=&|/~]/, + // SQLite is weakly typed, ref: http://sqlite.org/datatype3.html. This is just a list of some common types. + dateSQL: set("date time timestamp datetime"), + support: set("decimallessFloat zerolessFloat"), + identifierQuote: "\"", //ref: http://sqlite.org/lang_keywords.html + hooks: { + // bind-parameters ref:http://sqlite.org/lang_expr.html#varparam + "@": hookVar, + ":": hookVar, + "?": hookVar, + "$": hookVar, + // The preferred way to escape Identifiers is using double quotes, ref: http://sqlite.org/lang_keywords.html + "\"": hookIdentifierDoublequote, + // there is also support for backtics, ref: http://sqlite.org/lang_keywords.html + "`": hookIdentifier + } + }); + + // the query language used by Apache Cassandra is called CQL, but this mime type + // is called Cassandra to avoid confusion with Contextual Query Language + CodeMirror.defineMIME("text/x-cassandra", { + name: "sql", + client: { }, + keywords: set("add all allow alter and any apply as asc authorize batch begin by clustering columnfamily compact consistency count create custom delete desc distinct drop each_quorum exists filtering from grant if in index insert into key keyspace keyspaces level limit local_one local_quorum modify nan norecursive nosuperuser not of on one order password permission permissions primary quorum rename revoke schema select set storage superuser table three to token truncate ttl two type unlogged update use user users using values where with writetime"), + builtin: set("ascii bigint blob boolean counter decimal double float frozen inet int list map static text timestamp timeuuid tuple uuid varchar varint"), + atoms: set("false true infinity NaN"), + operatorChars: /^[<>=]/, + dateSQL: { }, + support: set("commentSlashSlash decimallessFloat"), + hooks: { } + }); + + // this is based on Peter Raganitsch's 'plsql' mode + CodeMirror.defineMIME("text/x-plsql", { + name: "sql", + client: set("appinfo arraysize autocommit autoprint autorecovery autotrace blockterminator break btitle cmdsep colsep compatibility compute concat copycommit copytypecheck define describe echo editfile embedded escape exec execute feedback flagger flush heading headsep instance linesize lno loboffset logsource long longchunksize markup native newpage numformat numwidth pagesize pause pno recsep recsepchar release repfooter repheader serveroutput shiftinout show showmode size spool sqlblanklines sqlcase sqlcode sqlcontinue sqlnumber sqlpluscompatibility sqlprefix sqlprompt sqlterminator suffix tab term termout time timing trimout trimspool ttitle underline verify version wrap"), + keywords: set("abort accept access add all alter and any array arraylen as asc assert assign at attributes audit authorization avg base_table begin between binary_integer body boolean by case cast char char_base check close cluster clusters colauth column comment commit compress connect connected constant constraint crash create current currval cursor data_base database date dba deallocate debugoff debugon decimal declare default definition delay delete desc digits dispose distinct do drop else elseif elsif enable end entry escape exception exception_init exchange exclusive exists exit external fast fetch file for force form from function generic goto grant group having identified if immediate in increment index indexes indicator initial initrans insert interface intersect into is key level library like limited local lock log logging long loop master maxextents maxtrans member minextents minus mislabel mode modify multiset new next no noaudit nocompress nologging noparallel not nowait number_base object of off offline on online only open option or order out package parallel partition pctfree pctincrease pctused pls_integer positive positiven pragma primary prior private privileges procedure public raise range raw read rebuild record ref references refresh release rename replace resource restrict return returning returns reverse revoke rollback row rowid rowlabel rownum rows run savepoint schema segment select separate session set share snapshot some space split sql start statement storage subtype successful synonym tabauth table tables tablespace task terminate then to trigger truncate type union unique unlimited unrecoverable unusable update use using validate value values variable view views when whenever where while with work"), + builtin: set("abs acos add_months ascii asin atan atan2 average bfile bfilename bigserial bit blob ceil character chartorowid chr clob concat convert cos cosh count dec decode deref dual dump dup_val_on_index empty error exp false float floor found glb greatest hextoraw initcap instr instrb int integer isopen last_day least length lengthb ln lower lpad ltrim lub make_ref max min mlslabel mod months_between natural naturaln nchar nclob new_time next_day nextval nls_charset_decl_len nls_charset_id nls_charset_name nls_initcap nls_lower nls_sort nls_upper nlssort no_data_found notfound null number numeric nvarchar2 nvl others power rawtohex real reftohex round rowcount rowidtochar rowtype rpad rtrim serial sign signtype sin sinh smallint soundex sqlcode sqlerrm sqrt stddev string substr substrb sum sysdate tan tanh to_char text to_date to_label to_multi_byte to_number to_single_byte translate true trunc uid unlogged upper user userenv varchar varchar2 variance varying vsize xml"), + operatorChars: /^[*+\-%<>!=~]/, + dateSQL: set("date time timestamp"), + support: set("doubleQuote nCharCast zerolessFloat binaryNumber hexNumber") + }); + + // Created to support specific hive keywords + CodeMirror.defineMIME("text/x-hive", { + name: "sql", + keywords: set("select alter $elem$ $key$ $value$ add after all analyze and archive as asc before between binary both bucket buckets by cascade case cast change cluster clustered clusterstatus collection column columns comment compute concatenate continue create cross cursor data database databases dbproperties deferred delete delimited desc describe directory disable distinct distribute drop else enable end escaped exclusive exists explain export extended external false fetch fields fileformat first format formatted from full function functions grant group having hold_ddltime idxproperties if import in index indexes inpath inputdriver inputformat insert intersect into is items join keys lateral left like limit lines load local location lock locks mapjoin materialized minus msck no_drop nocompress not of offline on option or order out outer outputdriver outputformat overwrite partition partitioned partitions percent plus preserve procedure purge range rcfile read readonly reads rebuild recordreader recordwriter recover reduce regexp rename repair replace restrict revoke right rlike row schema schemas semi sequencefile serde serdeproperties set shared show show_database sort sorted ssl statistics stored streamtable table tables tablesample tblproperties temporary terminated textfile then tmp to touch transform trigger true unarchive undo union uniquejoin unlock update use using utc utc_tmestamp view when where while with"), + builtin: set("bool boolean long timestamp tinyint smallint bigint int float double date datetime unsigned string array struct map uniontype"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=]/, + dateSQL: set("date timestamp"), + support: set("ODBCdotTable doubleQuote binaryNumber hexNumber") + }); + + CodeMirror.defineMIME("text/x-pgsql", { + name: "sql", + client: set("source"), + // http://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html + keywords: set(sqlKeywords + "a abort abs absent absolute access according action ada add admin after aggregate all allocate also always analyse analyze any are array array_agg array_max_cardinality asensitive assertion assignment asymmetric at atomic attribute attributes authorization avg backward base64 before begin begin_frame begin_partition bernoulli binary bit_length blob blocked bom both breadth c cache call called cardinality cascade cascaded case cast catalog catalog_name ceil ceiling chain characteristics characters character_length character_set_catalog character_set_name character_set_schema char_length check checkpoint class class_origin clob close cluster coalesce cobol collate collation collation_catalog collation_name collation_schema collect column columns column_name command_function command_function_code comment comments commit committed concurrently condition condition_number configuration conflict connect connection connection_name constraint constraints constraint_catalog constraint_name constraint_schema constructor contains content continue control conversion convert copy corr corresponding cost covar_pop covar_samp cross csv cube cume_dist current current_catalog current_date current_default_transform_group current_path current_role current_row current_schema current_time current_timestamp current_transform_group_for_type current_user cursor cursor_name cycle data database datalink datetime_interval_code datetime_interval_precision day db deallocate dec declare default defaults deferrable deferred defined definer degree delimiter delimiters dense_rank depth deref derived describe descriptor deterministic diagnostics dictionary disable discard disconnect dispatch dlnewcopy dlpreviouscopy dlurlcomplete dlurlcompleteonly dlurlcompletewrite dlurlpath dlurlpathonly dlurlpathwrite dlurlscheme dlurlserver dlvalue do document domain dynamic dynamic_function dynamic_function_code each element else empty enable encoding encrypted end end-exec end_frame end_partition enforced enum equals escape event every except exception exclude excluding exclusive exec execute exists exp explain expression extension external extract false family fetch file filter final first first_value flag float floor following for force foreign fortran forward found frame_row free freeze fs full function functions fusion g general generated get global go goto grant granted greatest grouping groups handler header hex hierarchy hold hour id identity if ignore ilike immediate immediately immutable implementation implicit import including increment indent index indexes indicator inherit inherits initially inline inner inout input insensitive instance instantiable instead integrity intersect intersection invoker isnull isolation k key key_member key_type label lag language large last last_value lateral lead leading leakproof least left length level library like_regex link listen ln load local localtime localtimestamp location locator lock locked logged lower m map mapping match matched materialized max maxvalue max_cardinality member merge message_length message_octet_length message_text method min minute minvalue mod mode modifies module month more move multiset mumps name names namespace national natural nchar nclob nesting new next nfc nfd nfkc nfkd nil no none normalize normalized nothing notify notnull nowait nth_value ntile null nullable nullif nulls number object occurrences_regex octets octet_length of off offset oids old only open operator option options ordering ordinality others out outer output over overlaps overlay overriding owned owner p pad parameter parameter_mode parameter_name parameter_ordinal_position parameter_specific_catalog parameter_specific_name parameter_specific_schema parser partial partition pascal passing passthrough password percent percentile_cont percentile_disc percent_rank period permission placing plans pli policy portion position position_regex power precedes preceding prepare prepared preserve primary prior privileges procedural procedure program public quote range rank read reads reassign recheck recovery recursive ref references referencing refresh regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy reindex relative release rename repeatable replace replica requiring reset respect restart restore restrict result return returned_cardinality returned_length returned_octet_length returned_sqlstate returning returns revoke right role rollback rollup routine routine_catalog routine_name routine_schema row rows row_count row_number rule savepoint scale schema schema_name scope scope_catalog scope_name scope_schema scroll search second section security selective self sensitive sequence sequences serializable server server_name session session_user setof sets share show similar simple size skip snapshot some source space specific specifictype specific_name sql sqlcode sqlerror sqlexception sqlstate sqlwarning sqrt stable standalone start state statement static statistics stddev_pop stddev_samp stdin stdout storage strict strip structure style subclass_origin submultiset substring substring_regex succeeds sum symmetric sysid system system_time system_user t tables tablesample tablespace table_name temp template temporary then ties timezone_hour timezone_minute to token top_level_count trailing transaction transactions_committed transactions_rolled_back transaction_active transform transforms translate translate_regex translation treat trigger trigger_catalog trigger_name trigger_schema trim trim_array true truncate trusted type types uescape unbounded uncommitted under unencrypted unique unknown unlink unlisten unlogged unnamed unnest until untyped upper uri usage user user_defined_type_catalog user_defined_type_code user_defined_type_name user_defined_type_schema using vacuum valid validate validator value value_of varbinary variadic var_pop var_samp verbose version versioning view views volatile when whenever whitespace width_bucket window within work wrapper write xmlagg xmlattributes xmlbinary xmlcast xmlcomment xmlconcat xmldeclaration xmldocument xmlelement xmlexists xmlforest xmliterate xmlnamespaces xmlparse xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltext xmlvalidate year yes loop repeat"), + // http://www.postgresql.org/docs/9.5/static/datatype.html + builtin: set("bigint int8 bigserial serial8 bit varying varbit boolean bool box bytea character char varchar cidr circle date double precision float8 inet integer int int4 interval json jsonb line lseg macaddr money numeric decimal path pg_lsn point polygon real float4 smallint int2 smallserial serial2 serial serial4 text time without zone with timetz timestamp timestamptz tsquery tsvector txid_snapshot uuid xml"), + atoms: set("false true null unknown"), + operatorChars: /^[*+\-%<>!=&|^\/#@?~]/, + dateSQL: set("date time timestamp"), + support: set("ODBCdotTable decimallessFloat zerolessFloat binaryNumber hexNumber nCharCast charsetCast") + }); + + // Google's SQL-like query language, GQL + CodeMirror.defineMIME("text/x-gql", { + name: "sql", + keywords: set("ancestor and asc by contains desc descendant distinct from group has in is limit offset on order select superset where"), + atoms: set("false true"), + builtin: set("blob datetime first key __key__ string integer double boolean null"), + operatorChars: /^[*+\-%<>!=]/ + }); +}()); + +}); + +/* + How Properties of Mime Types are used by SQL Mode + ================================================= + + keywords: + A list of keywords you want to be highlighted. + builtin: + A list of builtin types you want to be highlighted (if you want types to be of class "builtin" instead of "keyword"). + operatorChars: + All characters that must be handled as operators. + client: + Commands parsed and executed by the client (not the server). + support: + A list of supported syntaxes which are not common, but are supported by more than 1 DBMS. + * ODBCdotTable: .tableName + * zerolessFloat: .1 + * doubleQuote + * nCharCast: N'string' + * charsetCast: _utf8'string' + * commentHash: use # char for comments + * commentSlashSlash: use // for comments + * commentSpaceRequired: require a space after -- for comments + atoms: + Keywords that must be highlighted as atoms,. Some DBMS's support more atoms than others: + UNKNOWN, INFINITY, UNDERFLOW, NaN... + dateSQL: + Used for date/time SQL standard syntax, because not all DBMS's support same temporal types. +*/ + diff --git a/workflow/public_html/lib/js/modernizr.js b/workflow/public_html/lib/js/modernizr.js new file mode 100644 index 000000000..2a6e0e42a --- /dev/null +++ b/workflow/public_html/lib/js/modernizr.js @@ -0,0 +1,4 @@ +/* Modernizr 2.7.1 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexboxlegacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function C(a){j.cssText=a}function D(a,b){return C(n.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a){var e=a[d];if(!F(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),H(e,b,c))}function J(){e.input=function(c){for(var d=0,e=c.length;d',a,""].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return I("flexWrap")},s.flexboxlegacy=function(){return I("boxDirection")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!I("indexedDB",a)},s.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return C("background-color:rgba(150,255,150,.5)"),F(j.backgroundColor,"rgba")},s.hsla=function(){return C("background-color:hsla(120,40%,100%,.5)"),F(j.backgroundColor,"rgba")||F(j.backgroundColor,"hsla")},s.multiplebgs=function(){return C("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return I("backgroundSize")},s.borderimage=function(){return I("borderImage")},s.borderradius=function(){return I("borderRadius")},s.boxshadow=function(){return I("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return D("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return I("animationName")},s.csscolumns=function(){return I("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return C((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),F(j.backgroundImage,"gradient")},s.cssreflections=function(){return I("boxReflect")},s.csstransforms=function(){return!!I("transform")},s.csstransforms3d=function(){var a=!!I("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return I("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var K in s)B(s,K)&&(x=K.toLowerCase(),e[x]=s[K](),v.push((e[x]?"":"no-")+x));return e.input||J(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)B(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},C(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.hasEvent=z,e.testProp=function(a){return G([a])},e.testAllProps=I,e.testStyles=y,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f>2,i=(3&t)<<4|r>>4,n=(15&r)<<2|s>>6,a=63&s,isNaN(r)?n=a=64:isNaN(s)&&(a=64),h=h+this.keyStr.charAt(o)+this.keyStr.charAt(i)+this.keyStr.charAt(n)+this.keyStr.charAt(a);return h},decode:function(e){var t,r,s,o,i,n,a,h="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,r=(15&i)<<4|n>>2,s=(3&n)<<6|a,h+=String.fromCharCode(t),64!==n&&(h+=String.fromCharCode(r)),64!==a&&(h+=String.fromCharCode(s));return h=this.utf8_decode(h)},utf8_encode:function(e){e=e.replace(/\r\n/g,"\n");var t,r,s="";for(t=0;tr?s+=String.fromCharCode(r):r>127&&2048>r?(s+=String.fromCharCode(r>>6|192),s+=String.fromCharCode(63&r|128)):(s+=String.fromCharCode(r>>12|224),s+=String.fromCharCode(r>>6&63|128),s+=String.fromCharCode(63&r|128));return s},utf8_decode:function(e){for(var t="",r=0,s=0,o=0,i=0;rs?(t+=String.fromCharCode(s),r++):s>191&&224>s?(o=e.charCodeAt(r+1),t+=String.fromCharCode((31&s)<<6|63&o),r+=2):(o=e.charCodeAt(r+1),i=e.charCodeAt(r+2),t+=String.fromCharCode((15&s)<<12|(63&o)<<6|63&i),r+=3);return t}},RestClient;if(RestClient=function(){this.VERSION="0.1.9\n",this.authorization={},this.server={},this.response={},this.headers={},this.accessToken={},this.autoUseRefreshToken=!0,this.autoStoreAccessToken=!0,this.authorizationType="none",this.contentType="application/json",this.sendOAuthBearerAuthorization=!1,this.dataType="json",this.oauth2NeedsAuthorization=!0,this.expiredAccessTokenMessage="",this.restfulBehavior=!0,this.backupAJAXURL=null,this.acceptType=null,this.RESTMethods={create:"POST",read:"GET",update:"PUT","delete":"DELETE"},this.OAUTH2GrantTypes={code:"authorization_code",implicit:"token",user:"password",client:"client_credentials",refresh:"refresh_token"},RestClient.prototype.initObject.call(this)},RestClient.prototype.HTTP_SUCCESS=["200","201","202","204","207"],RestClient.prototype.HTTP_BAD_REQUEST=400,RestClient.prototype.HTTP_UNAUTHORIZED=401,RestClient.prototype.OAUTH2_INVALID_GRANT="invalid_grant",RestClient.prototype.initObject=function(){this.authorization={},this.server={},this.response={},this.headers={},this.accessToken={},this.autoUseRefreshToken=!0,this.autoStoreAccessToken=!0,this.authorizationType="none",this.contentType="application/json",this.acceptType="application/json",this.sendOAuthBearerAuthorization=!1,this.oauth2NeedsAuthorization=!0,this.dataType="json",this.expiredAccessTokenMessage="The access token provided has expired."},RestClient.prototype.setUseRefreshTokenAutomatically=function(e){return _.isBoolean(e)&&(this.autoUseRefreshToken=e),this},RestClient.prototype.setStoreAccessTokenAutomatically=function(e){return _.isBoolean(e)&&(this.autoStoreAccessToken=e),this},RestClient.prototype.setAuthorizationType=function(e){var t={none:1,basic:1,oauth2:1};return t[e]&&(this.authorizationType=e),this},RestClient.prototype.setContentType=function(e){return this.contentType=e,this},RestClient.prototype.setAcceptType=function(e){var t={plain:"text/plain",xhtml_xml:"application/xhtml+xml",json:"application/json",xml:"application/xml",all:"*/*"};return t[e]&&(this.acceptType=t[e]),this},RestClient.prototype.setSendBearerAuthorization=function(e){return _.isBoolean(e)&&(this.sendOAuthBearerAuthorization=e),this},RestClient.prototype.setOAuth2NeedsAuthorization=function(e){return _.isBoolean(e)&&(this.oauth2NeedsAuthorization=e),this},RestClient.prototype.setDataType=function(e){var t={json:"application/json",plain:"text/plain",form:"application/x-www-form-urlencoded",html:"text/html"};return t[e]&&(this.dataType=e,this.contentType=t[e]),this},RestClient.prototype.setAccessTokenExpiredMessage=function(e){return this.expiredAccessTokenMessage=e,this},RestClient.prototype.getVersion=function(){return this.VERSION},RestClient.prototype.setClient=function(e,t,r){return this.authorization.client_id=e,this.authorization.client_secret=t,this.authorization.client_url="undefined"!==r?r:null,this},RestClient.prototype.setGrantType=function(e,t){return this.authorization.grant_type="undefined"!==this.OAUTH2GrantTypes[e]?this.OAUTH2GrantTypes[e]:null,this.authorization=_.extend(this.authorization,t),this},RestClient.prototype.setAuthorizationServer=function(e){var t,r=!0;return"undefined"==typeof e||null===e?r=!1:(t=/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/,e.match(t)?this.server.rest_auth_uri=e:r=!1),r},RestClient.prototype.setHeader=function(e,t){var r,s=!0;return e&&t?(r=JSON.parse('{"'+e+'" : "'+t+'"}'),this.headers=_.extend(this.headers,r)):s=!1,s},RestClient.prototype.JSONParse=function(e){var t;try{t=e?""===e?"":JSON.parse(e):""}catch(r){t="ERROR_PARSE"}return t},RestClient.prototype.setBasicCredentials=function(e,t){return this.authorization.basic_user=e,this.authorization.basic_password=t,this},RestClient.prototype.setAccessToken=function(e){return"object"==typeof e&&(this.accessToken=e),this},RestClient.prototype.setRestfulBehavior=function(e){return _.isBoolean(e)&&(this.restfulBehavior=e),this},RestClient.prototype.setBackupAjaxUrl=function(e){return this.backupAJAXURL=e,this},RestClient.prototype.toParams=function(e){var t=_.keys(e),r=[];return _.each(t,function(t){r.push(t+"="+e[t])}),r.join("&")},RestClient.prototype.prepareBody=function(e){var t="";return"json"===this.dataType||"jsonp"===this.dataType?"object"==typeof e&&(t=JSON.stringify(e)):t=this.toParams(e),t},RestClient.prototype.createXHR=function(){var e;if(window.XMLHttpRequest)e=new XMLHttpRequest;else try{e=new ActiveXObject("MSXML2.XMLHTTP")}catch(t){try{e=new ActiveXObject("Microsoft.XMLHTTP")}catch(r){}}return e?e:!1},RestClient.prototype.authorize=function(e){var t,r,s,o,i=this,n=!1,a="create",h=this.RESTMethods[a];t=RCBase64.encode(this.authorization.client_id+":"+this.authorization.client_secret),r=this.createXHR();try{r.open(h,this.server.rest_auth_uri,!1)}catch(c){return e.xhrfailure?e.xhrfailure(c,{}):this.XHRFailure(c,{}),n}if(r.onreadystatechange=function(){if(e.ready?e.ready(r):i.AuthorizeReady(r),4===r.readyState){if(o=i.JSONParse(r.responseText),-1!=i.HTTP_SUCCESS.indexOf(String(r.status))&&"ERROR_PARSE"!==o)if(i.autoStoreAccessToken&&(i.accessToken=o.token||{}),n=!0,e.success)try{e.success(r,o)}catch(t){throw new Error(t.message)}else i.AuthorizeSuccess(r,o);else if("ERROR_PARSE"===o&&(o={success:!1,error:{error:i.HTTP_BAD_REQUEST,error_description:"Response is not a valid JSON"}}),e.failure)try{e.failure(r,o)}catch(t){throw new Error(t.message)}else i.AuthorizeFailure(r,o);"function"==typeof e.complete&&e.complete(r,o)}},s={},this.authorization.grant_type)switch(s.grant_type=this.authorization.grant_type,this.authorization.grant_type){case"authorization_code":s.code=this.authorization.code;break;case"token":s.token=this.authorization.token;break;case"password":s.username=this.authorization.username,s.password=this.authorization.password;break;case"client_credentials":s.client_id=this.authorization.client_id,s.client_id=this.authorization.client_secret;break;case"refresh_token":s.refresh_token=this.authorization.refresh_token}return this.oauth2NeedsAuthorization&&r.setRequestHeader("Authorization","Basic "+t),r.setRequestHeader("Accept",this.acceptType),r.setRequestHeader("Content-Type",this.contentType),_.each(this.headers,function(e,t){r.setRequestHeader(t,e)}),r.send(this.prepareBody(s)),n},RestClient.prototype.prepareReqFields=function(e){var t;return t={success:!1,error:{error:this.HTTP_BAD_REQUEST,error_description:"Required fields not found"},fields:e}},RestClient.prototype.prepareConsumeUrl=function(e,t,r,s){var o,i,n=this.acceptType,a=this.contentType,h=!1;if(this.restfulBehavior)switch(e){case"read":o=t,r&&(o+=r),"oauth2"!==this.authorizationType||this.sendOAuthBearerAuthorization||(h=!0,o+="?access_token="+this.accessToken.access_token),s&&s!=={}&&(o+=h?"&":"?",o+=this.toParams(s)),i=null,null===a&&(a="application/json");break;case"create":o=t,i=s||{},"oauth2"!==this.authorizationType||this.sendOAuthBearerAuthorization||(i.access_token=this.accessToken.access_token),i=this.prepareBody(i);break;case"update":o=t,r&&(o+=r),i=s||{},"oauth2"!==this.authorizationType||this.sendOAuthBearerAuthorization||(i.access_token=this.accessToken.access_token),i=this.prepareBody(i);break;case"delete":o=t,r&&(o+=r),i=s||{},"oauth2"!==this.authorizationType||this.sendOAuthBearerAuthorization||(i.access_token=this.accessToken.access_token),i=this.prepareBody(i)}else o=this.backupAJAXURL,i={operation:e,url:t,id:r,data:s},i="data='"+encodeURIComponent(JSON.stringify(i))+"'",null===a&&(a="application/json");return n||(n="*/*"),{url:o,body:i,content_type:a,acceptType:n}},RestClient.prototype.getCall=function(e){return e.operation="read",this.consume(e)},RestClient.prototype.postCall=function(e){return e.operation="create",this.consume(e)},RestClient.prototype.putCall=function(e){return e.operation="update",this.consume(e)},RestClient.prototype.deleteCall=function(e){return e.operation="delete",this.consume(e)},RestClient.prototype.consume=function(e){var t,r,s,o,i,n,a,h,c,u,p,l,d,f,y,R={},T=!0,C=[],A=!1;if(e.operation?s=e.operation:(T=!1,C.push("operation")),e.url?c=e.url:(T=!1,C.push("url")),u=e.data||null,p=e.id||null,!T)return e.failure?e.failure(null,this.prepareReqFields(C)):this.ConsumeFailure(null,this.prepareReqFields(C)),T;l=this.prepareConsumeUrl(s,c,p,u),n=l.url,i=l.body,f=l.content_type,y=l.acceptType,r=this.createXHR(),o=this.restfulBehavior?this.RESTMethods[s]:this.RESTMethods.create;try{switch(r.open(o,n,!1),this.authorizationType){case"none":break;case"basic":t=RCBase64.encode(this.authorization.basic_user+":"+this.authorization.basic_password),r.setRequestHeader("Authorization","Basic "+t);break;case"oauth2":if(!this.accessToken.access_token)return T=!1,C.push("access_token"),h={success:!1,error:{error:this.HTTP_BAD_REQUEST,error_description:"Access Token not defined"}},e.failure?e.failure(null,this.prepareReqFields(C)):this.ConsumeFailure(null,this.prepareReqFields(C)),T;this.sendOAuthBearerAuthorization&&(d="Bearer "+this.accessToken.access_token,r.setRequestHeader("Authorization",d))}}catch(k){return e.xhrfailure?e.xhrfailure(k,u):this.XHRFailure(k,u),!1}return a=this,r.onreadystatechange=function(){if(e.ready?e.ready(r):a.ConsumeReady(r),4===r.readyState){if(R=a.JSONParse(r.responseText),-1!=a.HTTP_SUCCESS.indexOf(String(r.status))&&"ERROR_PARSE"!==R)if(a.autoStoreAccessToken&&(a.accessToken=R.token||{}),T=!0,e.success)try{e.success(r,R)}catch(t){throw new Error(t.message)}else a.AuthorizeSuccess(r,R);else if(T=!1,"ERROR_PARSE"===R?R={success:!1,error:{error:a.HTTP_BAD_REQUEST,error_description:"Response is not a valid JSON"}}:(R.error===a.OAUTH2_INVALID_GRANT&&R.error_description===a.expiredAccessTokenMessage&&(A=!0),r.status===a.HTTP_UNAUTHORIZED&&a.autoUseRefreshToken&&A&&(a.accessToken.refresh_token?(a.setGrantType("refresh",{refresh_token:a.accessToken.refresh_token}),a.authorize({success:function(){T=a.consume(e),T&&(e.autorefresh?e.autorefresh(a.accessToken):a.AuthorizeAutoRefresh(a.accessToken))},failure:function(t,r){T=!1,e.failure?e.failure(null,r):a.ConsumeFailure(null,r)}})):(T=!1,R={success:!1,error:{error:a.HTTP_UNAUTHORIZED,error_description:"Refresh token is not defined"}}))),e.failure)try{e.failure(r,R)}catch(t){throw new Error(t.message)}else a.AuthorizeFailure(r,R);"function"==typeof e.complete&&e.complete(r,R)}},r.setRequestHeader("Accept",y),r.setRequestHeader("Content-Type",f),_.each(this.headers,function(e,t){r.setRequestHeader(t,e)}),r.send(i),T},RestClient.prototype.XHRFailure=function(){},RestClient.prototype.AuthorizeSuccess=function(){},RestClient.prototype.AuthorizeFailure=function(){},RestClient.prototype.AuthorizeReady=function(){},RestClient.prototype.AuthorizeAutoRefresh=function(){},RestClient.prototype.ConsumeSuccess=function(){},RestClient.prototype.ConsumeFailure=function(){},RestClient.prototype.ConsumeReady=function(){},"undefined"!=typeof exports){module.exports={RestClient:RestClient,RCBase64:RCBase64};var _=require("underscore")} \ No newline at end of file diff --git a/workflow/public_html/lib/js/underscore-min.js b/workflow/public_html/lib/js/underscore-min.js new file mode 100644 index 000000000..f8728b3f2 --- /dev/null +++ b/workflow/public_html/lib/js/underscore-min.js @@ -0,0 +1,5 @@ +// Underscore.js 1.5.2 +// http://underscorejs.org +// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,g=e.filter,d=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,w=Object.keys,_=i.bind,j=function(n){return n instanceof j?n:this instanceof j?(this._wrapped=n,void 0):new j(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=j),exports._=j):n._=j,j.VERSION="1.5.2";var A=j.each=j.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a=j.keys(n),u=0,i=a.length;i>u;u++)if(t.call(e,n[a[u]],a[u],n)===r)return};j.map=j.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e.push(t.call(r,n,u,i))}),e)};var E="Reduce of empty array with no initial value";j.reduce=j.foldl=j.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=j.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(E);return r},j.reduceRight=j.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=j.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=j.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(E);return r},j.find=j.detect=function(n,t,r){var e;return O(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},j.filter=j.select=function(n,t,r){var e=[];return null==n?e:g&&n.filter===g?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&e.push(n)}),e)},j.reject=function(n,t,r){return j.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},j.every=j.all=function(n,t,e){t||(t=j.identity);var u=!0;return null==n?u:d&&n.every===d?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var O=j.some=j.any=function(n,t,e){t||(t=j.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};j.contains=j.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:O(n,function(n){return n===t})},j.invoke=function(n,t){var r=o.call(arguments,2),e=j.isFunction(t);return j.map(n,function(n){return(e?t:n[t]).apply(n,r)})},j.pluck=function(n,t){return j.map(n,function(n){return n[t]})},j.where=function(n,t,r){return j.isEmpty(t)?r?void 0:[]:j[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},j.findWhere=function(n,t){return j.where(n,t,!0)},j.max=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.max.apply(Math,n);if(!t&&j.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>e.computed&&(e={value:n,computed:a})}),e.value},j.min=function(n,t,r){if(!t&&j.isArray(n)&&n[0]===+n[0]&&n.length<65535)return Math.min.apply(Math,n);if(!t&&j.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;ae||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var F=function(n){return function(t,r,e){var u={},i=null==r?j.identity:k(r);return A(t,function(r,a){var o=i.call(e,r,a,t);n(u,o,r)}),u}};j.groupBy=F(function(n,t,r){(j.has(n,t)?n[t]:n[t]=[]).push(r)}),j.indexBy=F(function(n,t,r){n[t]=r}),j.countBy=F(function(n,t){j.has(n,t)?n[t]++:n[t]=1}),j.sortedIndex=function(n,t,r,e){r=null==r?j.identity:k(r);for(var u=r.call(e,t),i=0,a=n.length;a>i;){var o=i+a>>>1;r.call(e,n[o])=0})})},j.difference=function(n){var t=c.apply(e,o.call(arguments,1));return j.filter(n,function(n){return!j.contains(t,n)})},j.zip=function(){for(var n=j.max(j.pluck(arguments,"length").concat(0)),t=new Array(n),r=0;n>r;r++)t[r]=j.pluck(arguments,""+r);return t},j.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},j.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=j.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},j.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},j.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=new Array(e);e>u;)i[u++]=n,n+=r;return i};var R=function(){};j.bind=function(n,t){var r,e;if(_&&n.bind===_)return _.apply(n,o.call(arguments,1));if(!j.isFunction(n))throw new TypeError;return r=o.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(o.call(arguments)));R.prototype=n.prototype;var u=new R;R.prototype=null;var i=n.apply(u,r.concat(o.call(arguments)));return Object(i)===i?i:u}},j.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},j.bindAll=function(n){var t=o.call(arguments,1);if(0===t.length)throw new Error("bindAll must be passed function names");return A(t,function(t){n[t]=j.bind(n[t],n)}),n},j.memoize=function(n,t){var r={};return t||(t=j.identity),function(){var e=t.apply(this,arguments);return j.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},j.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},j.defer=function(n){return j.delay.apply(j,[n,1].concat(o.call(arguments,1)))},j.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var c=function(){o=r.leading===!1?0:new Date,a=null,i=n.apply(e,u)};return function(){var l=new Date;o||r.leading!==!1||(o=l);var f=t-(l-o);return e=this,u=arguments,0>=f?(clearTimeout(a),a=null,o=l,i=n.apply(e,u)):a||r.trailing===!1||(a=setTimeout(c,f)),i}},j.debounce=function(n,t,r){var e,u,i,a,o;return function(){i=this,u=arguments,a=new Date;var c=function(){var l=new Date-a;t>l?e=setTimeout(c,t-l):(e=null,r||(o=n.apply(i,u)))},l=r&&!e;return e||(e=setTimeout(c,t)),l&&(o=n.apply(i,u)),o}},j.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},j.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},j.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},j.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},j.keys=w||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)j.has(n,r)&&t.push(r);return t},j.values=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},j.pairs=function(n){for(var t=j.keys(n),r=t.length,e=new Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},j.invert=function(n){for(var t={},r=j.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},j.functions=j.methods=function(n){var t=[];for(var r in n)j.isFunction(n[r])&&t.push(r);return t.sort()},j.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},j.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},j.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)j.contains(r,u)||(t[u]=n[u]);return t},j.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]===void 0&&(n[r]=t[r])}),n},j.clone=function(n){return j.isObject(n)?j.isArray(n)?n.slice():j.extend({},n):n},j.tap=function(n,t){return t(n),n};var S=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof j&&(n=n._wrapped),t instanceof j&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==String(t);case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;var a=n.constructor,o=t.constructor;if(a!==o&&!(j.isFunction(a)&&a instanceof a&&j.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c=0,f=!0;if("[object Array]"==u){if(c=n.length,f=c==t.length)for(;c--&&(f=S(n[c],t[c],r,e)););}else{for(var s in n)if(j.has(n,s)&&(c++,!(f=j.has(t,s)&&S(n[s],t[s],r,e))))break;if(f){for(s in t)if(j.has(t,s)&&!c--)break;f=!c}}return r.pop(),e.pop(),f};j.isEqual=function(n,t){return S(n,t,[],[])},j.isEmpty=function(n){if(null==n)return!0;if(j.isArray(n)||j.isString(n))return 0===n.length;for(var t in n)if(j.has(n,t))return!1;return!0},j.isElement=function(n){return!(!n||1!==n.nodeType)},j.isArray=x||function(n){return"[object Array]"==l.call(n)},j.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){j["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),j.isArguments(arguments)||(j.isArguments=function(n){return!(!n||!j.has(n,"callee"))}),"function"!=typeof/./&&(j.isFunction=function(n){return"function"==typeof n}),j.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},j.isNaN=function(n){return j.isNumber(n)&&n!=+n},j.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},j.isNull=function(n){return null===n},j.isUndefined=function(n){return n===void 0},j.has=function(n,t){return f.call(n,t)},j.noConflict=function(){return n._=t,this},j.identity=function(n){return n},j.times=function(n,t,r){for(var e=Array(Math.max(0,n)),u=0;n>u;u++)e[u]=t.call(r,u);return e},j.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var I={escape:{"&":"&","<":"<",">":">",'"':""","'":"'"}};I.unescape=j.invert(I.escape);var T={escape:new RegExp("["+j.keys(I.escape).join("")+"]","g"),unescape:new RegExp("("+j.keys(I.unescape).join("|")+")","g")};j.each(["escape","unescape"],function(n){j[n]=function(t){return null==t?"":(""+t).replace(T[n],function(t){return I[n][t]})}}),j.result=function(n,t){if(null==n)return void 0;var r=n[t];return j.isFunction(r)?r.call(n):r},j.mixin=function(n){A(j.functions(n),function(t){var r=j[t]=n[t];j.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),z.call(this,r.apply(j,n))}})};var N=0;j.uniqueId=function(n){var t=++N+"";return n?n+t:t},j.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var q=/(.)^/,B={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},D=/\\|'|\r|\n|\t|\u2028|\u2029/g;j.template=function(n,t,r){var e;r=j.defaults({},r,j.templateSettings);var u=new RegExp([(r.escape||q).source,(r.interpolate||q).source,(r.evaluate||q).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(D,function(n){return"\\"+B[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=new Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,j);var c=function(n){return e.call(this,n,j)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},j.chain=function(n){return j(n).chain()};var z=function(n){return this._chain?j(n).chain():n};j.mixin(j),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];j.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],z.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];j.prototype[n]=function(){return z.call(this,t.apply(this._wrapped,arguments))}}),j.extend(j.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); diff --git a/workflow/public_html/lib/js/wz_jsgraphics.js b/workflow/public_html/lib/js/wz_jsgraphics.js new file mode 100644 index 000000000..1f9a7b9f4 --- /dev/null +++ b/workflow/public_html/lib/js/wz_jsgraphics.js @@ -0,0 +1,1108 @@ +/* This notice must be untouched at all times. + +wz_jsgraphics.js v. 3.05 +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Copyright (c) 2002-2009 Walter Zorn. All rights reserved. +Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com ) +Last modified: 2. 2. 2009 + +Performance optimizations for Internet Explorer +by Thomas Frank and John Holdsworth. +fillPolygon method implemented by Matthieu Haller. + +High Performance JavaScript Graphics Library. +Provides methods +- to draw lines, rectangles, ellipses, polygons + with specifiable line thickness, +- to fill rectangles, polygons, ellipses and arcs +- to draw text. +NOTE: Operations, functions and branching have rather been optimized +to efficiency and speed than to shortness of source code. + +LICENSE: LGPL + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License (LGPL) as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA, +or see http://www.gnu.org/copyleft/lesser.html +*/ + + +var jg_ok, jg_ie, jg_fast, jg_dom, jg_moz; + + +function _chkDHTM(wnd, x, i) +// Under XUL, owner of 'document' must be specified explicitly +{ + x = wnd.document.body || null; + jg_ie = x && typeof x.insertAdjacentHTML != "undefined" && wnd.document.createElement; + jg_dom = (x && !jg_ie && + typeof x.appendChild != "undefined" && + typeof wnd.document.createRange != "undefined" && + typeof (i = wnd.document.createRange()).setStartBefore != "undefined" && + typeof i.createContextualFragment != "undefined"); + jg_fast = jg_ie && wnd.document.all && !wnd.opera; + jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined"; + jg_ok = !!(jg_ie || jg_dom); +} + +function _pntCnvDom() +{ + var x = this.wnd.document.createRange(); + x.setStartBefore(this.cnv); + x = x.createContextualFragment(jg_fast? this._htmRpc() : this.htm); + if(this.cnv) this.cnv.appendChild(x); + this.htm = ""; +} + +function _pntCnvIe() +{ + if(this.cnv) this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this._htmRpc() : this.htm); + this.htm = ""; +} + +function _pntDoc() +{ + this.wnd.document.write(jg_fast? this._htmRpc() : this.htm); + this.htm = ''; +} + +function _pntN() +{ + ; +} + +function _mkDiv(x, y, w, h) +{ + this.htm += '

<\/div>'; +} + +function _mkDivIe(x, y, w, h) +{ + this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';'; +} + +function _mkDivPrt(x, y, w, h) +{ + this.htm += '
<\/div>'; +} + +var _regex = /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g; +function _htmRpc() +{ + return this.htm.replace( + _regex, + '
\n'); +} + +function _htmPrtRpc() +{ + return this.htm.replace( + _regex, + '
\n'); +} + +function _mkLin(x1, y1, x2, y2) +{ + if(x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + if(dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while(dx > 0) + {--dx; + ++x; + if(p > 0) + { + this._mkDiv(ox, y, x-ox, 1); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this._mkDiv(ox, y, x2-ox+1, 1); + } + + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if(y2 <= y1) + { + while(dy > 0) + {--dy; + if(p > 0) + { + this._mkDiv(x++, y, 1, oy-y+1); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this._mkDiv(x2, y2, 1, oy-y2+1); + } + else + { + while(dy > 0) + {--dy; + y += yIncr; + if(p > 0) + { + this._mkDiv(x++, oy, 1, y-oy); + p += pru; + oy = y; + } + else p += pr; + } + this._mkDiv(x2, oy, 1, y2-oy+1); + } + } +} + +function _mkLin2D(x1, y1, x2, y2) +{ + if(x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + var s = this.stroke; + if(dx >= dy) + { + if(dx > 0 && s-3 > 0) + { + var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; + _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.ceil(s/2); + + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while(dx > 0) + {--dx; + ++x; + if(p > 0) + { + this._mkDiv(ox, y, x-ox+ad, _s); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this._mkDiv(ox, y, x2-ox+ad+1, _s); + } + + else + { + if(s-3 > 0) + { + var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; + _s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.round(s/2); + + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if(y2 <= y1) + { + ++ad; + while(dy > 0) + {--dy; + if(p > 0) + { + this._mkDiv(x++, y, _s, oy-y+ad); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this._mkDiv(x2, y2, _s, oy-y2+ad); + } + else + { + while(dy > 0) + {--dy; + y += yIncr; + if(p > 0) + { + this._mkDiv(x++, oy, _s, y-oy+ad); + p += pru; + oy = y; + } + else p += pr; + } + this._mkDiv(x2, oy, _s, y2-oy+ad+1); + } + } +} + +function _mkLinDott(x1, y1, x2, y2) +{ + if(x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1, + drw = true; + if(dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx; + while(dx > 0) + {--dx; + if(drw) this._mkDiv(x, y, 1, 1); + drw = !drw; + if(p > 0) + { + y += yIncr; + p += pru; + } + else p += pr; + ++x; + } + } + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy; + while(dy > 0) + {--dy; + if(drw) this._mkDiv(x, y, 1, 1); + drw = !drw; + y += yIncr; + if(p > 0) + { + ++x; + p += pru; + } + else p += pr; + } + } + if(drw) this._mkDiv(x, y, 1, 1); +} + +function _mkOv(left, top, width, height) +{ + var a = (++width)>>1, b = (++height)>>1, + wod = width&1, hod = height&1, + cx = left+a, cy = top+b, + x = 0, y = b, + ox = 0, oy = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, + st = (aa2>>1)*(1-(b<<1)) + bb2, + tt = (bb2>>1) - aa2*((b<<1)-1), + w, h; + while(y > 0) + { + if(st < 0) + { + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) + { + st += bb2*((x<<1)+3) - aa4*(y-1); + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + w = x-ox; + h = oy-y; + if((w&2) && (h&2)) + { + this._mkOvQds(cx, cy, x-2, y+2, 1, 1, wod, hod); + this._mkOvQds(cx, cy, x-1, y+1, 1, 1, wod, hod); + } + else this._mkOvQds(cx, cy, x-1, oy, w, h, wod, hod); + ox = x; + oy = y; + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + } + w = a-ox+1; + h = (oy<<1)+hod; + y = cy-oy; + this._mkDiv(cx-a, y, w, h); + this._mkDiv(cx+ox+wod-1, y, w, h); +} + +function _mkOv2D(left, top, width, height) +{ + var s = this.stroke; + width += s+1; + height += s+1; + var a = width>>1, b = height>>1, + wod = width&1, hod = height&1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, + st = (aa2>>1)*(1-(b<<1)) + bb2, + tt = (bb2>>1) - aa2*((b<<1)-1); + + if(s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) + { + var ox = 0, oy = b, + w, h, + pxw; + while(y > 0) + { + if(st < 0) + { + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) + { + st += bb2*((x<<1)+3) - aa4*(y-1); + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + w = x-ox; + h = oy-y; + + if(w-1) + { + pxw = w+1+(s&1); + h = s; + } + else if(h-1) + { + pxw = s; + h += 1+(s&1); + } + else pxw = h = s; + this._mkOvQds(cx, cy, x-1, oy, pxw, h, wod, hod); + ox = x; + oy = y; + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + } + this._mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); + this._mkDiv(cx+a+wod-s, cy-oy, s, (oy<<1)+hod); + } + + else + { + var _a = (width-(s<<1))>>1, + _b = (height-(s<<1))>>1, + _x = 0, _y = _b, + _aa2 = (_a*_a)<<1, _aa4 = _aa2<<1, _bb2 = (_b*_b)<<1, _bb4 = _bb2<<1, + _st = (_aa2>>1)*(1-(_b<<1)) + _bb2, + _tt = (_bb2>>1) - _aa2*((_b<<1)-1), + + pxl = new Array(), + pxt = new Array(), + _pxb = new Array(); + pxl[0] = 0; + pxt[0] = b; + _pxb[0] = _b-1; + while(y > 0) + { + if(st < 0) + { + pxl[pxl.length] = x; + pxt[pxt.length] = y; + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) + { + pxl[pxl.length] = x; + st += bb2*((x<<1)+3) - aa4*(y-1); + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + pxt[pxt.length] = y; + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + + if(_y > 0) + { + if(_st < 0) + { + _st += _bb2*((_x<<1)+3); + _tt += _bb4*(++_x); + _pxb[_pxb.length] = _y-1; + } + else if(_tt < 0) + { + _st += _bb2*((_x<<1)+3) - _aa4*(_y-1); + _tt += _bb4*(++_x) - _aa2*(((_y--)<<1)-3); + _pxb[_pxb.length] = _y-1; + } + else + { + _tt -= _aa2*((_y<<1)-3); + _st -= _aa4*(--_y); + _pxb[_pxb.length-1]--; + } + } + } + + var ox = -wod, oy = b, + _oy = _pxb[0], + l = pxl.length, + w, h; + for(var i = 0; i < l; i++) + { + if(typeof _pxb[i] != "undefined") + { + if(_pxb[i] < _oy || pxt[i] < oy) + { + x = pxl[i]; + this._mkOvQds(cx, cy, x, oy, x-ox, oy-_oy, wod, hod); + ox = x; + oy = pxt[i]; + _oy = _pxb[i]; + } + } + else + { + x = pxl[i]; + this._mkDiv(cx-x, cy-oy, 1, (oy<<1)+hod); + this._mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + ox = x; + oy = pxt[i]; + } + } + this._mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); + this._mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + } +} + +function _mkOvDott(left, top, width, height) +{ + var a = (++width)>>1, b = (++height)>>1, + wod = width&1, hod = height&1, hodu = hod^1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, + st = (aa2>>1)*(1-(b<<1)) + bb2, + tt = (bb2>>1) - aa2*((b<<1)-1), + drw = true; + while(y > 0) + { + if(st < 0) + { + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) + { + st += bb2*((x<<1)+3) - aa4*(y-1); + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + if(drw && y >= hodu) this._mkOvQds(cx, cy, x, y, 1, 1, wod, hod); + drw = !drw; + } +} + +function _mkRect(x, y, w, h) +{ + var s = this.stroke; + this._mkDiv(x, y, w, s); + this._mkDiv(x+w, y, s, h); + this._mkDiv(x, y+h, w+s, s); + this._mkDiv(x, y+s, s, h-s); +} + +function _mkRectDott(x, y, w, h) +{ + this.drawLine(x, y, x+w, y); + this.drawLine(x+w, y, x+w, y+h); + this.drawLine(x, y+h, x+w, y+h); + this.drawLine(x, y, x, y+h); +} + +function jsgFont() +{ + this.PLAIN = 'font-weight:normal;'; + this.BOLD = 'font-weight:bold;'; + this.ITALIC = 'font-style:italic;'; + this.ITALIC_BOLD = this.ITALIC + this.BOLD; + this.BOLD_ITALIC = this.ITALIC_BOLD; +} +var Font = new jsgFont(); + +function jsgStroke() +{ + this.DOTTED = -1; +} +var Stroke = new jsgStroke(); + +function JSGraphics(cnv, wnd) +{ + this.setColor = function(x) + { + this.color = x.toLowerCase(); + }; + + this.setStroke = function(x) + { + this.stroke = x; + if(!(x+1)) + { + this.drawLine = _mkLinDott; + this._mkOv = _mkOvDott; + this.drawRect = _mkRectDott; + } + else if(x-1 > 0) + { + this.drawLine = _mkLin2D; + this._mkOv = _mkOv2D; + this.drawRect = _mkRect; + } + else + { + this.drawLine = _mkLin; + this._mkOv = _mkOv; + this.drawRect = _mkRect; + } + }; + + this.setPrintable = function(arg) + { + this.printable = arg; + if(jg_fast) + { + this._mkDiv = _mkDivIe; + this._htmRpc = arg? _htmPrtRpc : _htmRpc; + } + else this._mkDiv = arg? _mkDivPrt : _mkDiv; + }; + + this.setFont = function(fam, sz, sty) + { + this.ftFam = fam; + this.ftSz = sz; + this.ftSty = sty || Font.PLAIN; + }; + + this.drawPolyline = this.drawPolyLine = function(x, y) + { + for (var i=x.length - 1; i;) + {--i; + this.drawLine(x[i], y[i], x[i+1], y[i+1]); + } + }; + + this.fillRect = function(x, y, w, h) + { + this._mkDiv(x, y, w, h); + }; + + this.drawPolygon = function(x, y) + { + this.drawPolyline(x, y); + this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]); + }; + + this.drawEllipse = this.drawOval = function(x, y, w, h) + { + this._mkOv(x, y, w, h); + }; + + this.fillEllipse = this.fillOval = function(left, top, w, h) + { + var a = w>>1, b = h>>1, + wod = w&1, hod = h&1, + cx = left+a, cy = top+b, + x = 0, y = b, oy = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, + st = (aa2>>1)*(1-(b<<1)) + bb2, + tt = (bb2>>1) - aa2*((b<<1)-1), + xl, dw, dh; + if(w) while(y > 0) + { + if(st < 0) + { + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) + { + st += bb2*((x<<1)+3) - aa4*(y-1); + xl = cx-x; + dw = (x<<1)+wod; + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + dh = oy-y; + this._mkDiv(xl, cy-oy, dw, dh); + this._mkDiv(xl, cy+y+hod, dw, dh); + oy = y; + } + else + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + } + } + this._mkDiv(cx-a, cy-oy, w, (oy<<1)+hod); + }; + + this.fillArc = function(iL, iT, iW, iH, fAngA, fAngZ) + { + var a = iW>>1, b = iH>>1, + iOdds = (iW&1) | ((iH&1) << 16), + cx = iL+a, cy = iT+b, + x = 0, y = b, ox = x, oy = y, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb2 = (b*b)<<1, bb4 = bb2<<1, + st = (aa2>>1)*(1-(b<<1)) + bb2, + tt = (bb2>>1) - aa2*((b<<1)-1), + // Vars for radial boundary lines + xEndA, yEndA, xEndZ, yEndZ, + iSects = (1 << (Math.floor((fAngA %= 360.0)/180.0) << 3)) + | (2 << (Math.floor((fAngZ %= 360.0)/180.0) << 3)) + | ((fAngA >= fAngZ) << 16), + aBndA = new Array(b+1), aBndZ = new Array(b+1); + + // Set up radial boundary lines + fAngA *= Math.PI/180.0; + fAngZ *= Math.PI/180.0; + xEndA = cx+Math.round(a*Math.cos(fAngA)); + yEndA = cy+Math.round(-b*Math.sin(fAngA)); + _mkLinVirt(aBndA, cx, cy, xEndA, yEndA); + xEndZ = cx+Math.round(a*Math.cos(fAngZ)); + yEndZ = cy+Math.round(-b*Math.sin(fAngZ)); + _mkLinVirt(aBndZ, cx, cy, xEndZ, yEndZ); + + while(y > 0) + { + if(st < 0) // Advance x + { + st += bb2*((x<<1)+3); + tt += bb4*(++x); + } + else if(tt < 0) // Advance x and y + { + st += bb2*((x<<1)+3) - aa4*(y-1); + ox = x; + tt += bb4*(++x) - aa2*(((y--)<<1)-3); + this._mkArcDiv(ox, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); + oy = y; + } + else // Advance y + { + tt -= aa2*((y<<1)-3); + st -= aa4*(--y); + if(y && (aBndA[y] != aBndA[y-1] || aBndZ[y] != aBndZ[y-1])) + { + this._mkArcDiv(x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); + ox = x; + oy = y; + } + } + } + this._mkArcDiv(x, 0, oy, cx, cy, iOdds, aBndA, aBndZ, iSects); + if(iOdds >> 16) // Odd height + { + if(iSects >> 16) // Start-angle > end-angle + { + var xl = (yEndA <= cy || yEndZ > cy)? (cx - x) : cx; + this._mkDiv(xl, cy, x + cx - xl + (iOdds & 0xffff), 1); + } + else if((iSects & 0x01) && yEndZ > cy) + this._mkDiv(cx - x, cy, x, 1); + } + }; + +/* fillPolygon method, implemented by Matthieu Haller. +This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib. +C source of GD 1.8.4 found at http://www.boutell.com/gd/ + +THANKS to Kirsten Schulz for the polygon fixes! + +The intersection finding technique of this code could be improved +by remembering the previous intertersection, and by using the slope. +That could help to adjust intersections to produce a nice +interior_extrema. */ + this.fillPolygon = function(array_x, array_y) + { + var i; + var y; + var miny, maxy; + var x1, y1; + var x2, y2; + var ind1, ind2; + var ints; + + var n = array_x.length; + if(!n) return; + + miny = array_y[0]; + maxy = array_y[0]; + for(i = 1; i < n; i++) + { + if(array_y[i] < miny) + miny = array_y[i]; + + if(array_y[i] > maxy) + maxy = array_y[i]; + } + for(y = miny; y <= maxy; y++) + { + var polyInts = new Array(); + ints = 0; + for(i = 0; i < n; i++) + { + if(!i) + { + ind1 = n-1; + ind2 = 0; + } + else + { + ind1 = i-1; + ind2 = i; + } + y1 = array_y[ind1]; + y2 = array_y[ind2]; + if(y1 < y2) + { + x1 = array_x[ind1]; + x2 = array_x[ind2]; + } + else if(y1 > y2) + { + y2 = array_y[ind1]; + y1 = array_y[ind2]; + x2 = array_x[ind1]; + x1 = array_x[ind2]; + } + else continue; + + // Modified 11. 2. 2004 Walter Zorn + if((y >= y1) && (y < y2)) + polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); + + else if((y == maxy) && (y > y1) && (y <= y2)) + polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1); + } + polyInts.sort(_CompInt); + for(i = 0; i < ints; i+=2) + this._mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1); + } + }; + + this.drawString = function(txt, x, y) + { + this.htm += '
'+ + txt + + '<\/div>'; + }; + +/* drawStringRect() added by Rick Blommers. +Allows to specify the size of the text rectangle and to align the +text both horizontally (e.g. right) and vertically within that rectangle */ + this.drawStringRect = function(txt, x, y, width, halign) + { + this.htm += '
'+ + txt + + '<\/div>'; + }; + + this.drawImage = function(imgSrc, x, y, w, h, a) + { + this.htm += '
'+ + ''+ + '<\/div>'; + }; + + this.clear = function() + { + this.htm = ""; + if(this.cnv) this.cnv.innerHTML = ""; + }; + + this._mkOvQds = function(cx, cy, x, y, w, h, wod, hod) + { + var xl = cx - x, xr = cx + x + wod - w, yt = cy - y, yb = cy + y + hod - h; + if(xr > xl+w) + { + this._mkDiv(xr, yt, w, h); + this._mkDiv(xr, yb, w, h); + } + else + w = xr - xl + w; + this._mkDiv(xl, yt, w, h); + this._mkDiv(xl, yb, w, h); + }; + + this._mkArcDiv = function(x, y, oy, cx, cy, iOdds, aBndA, aBndZ, iSects) + { + var xrDef = cx + x + (iOdds & 0xffff), y2, h = oy - y, xl, xr, w; + + if(!h) h = 1; + x = cx - x; + + if(iSects & 0xff0000) // Start-angle > end-angle + { + y2 = cy - y - h; + if(iSects & 0x00ff) + { + if(iSects & 0x02) + { + xl = Math.max(x, aBndZ[y]); + w = xrDef - xl; + if(w > 0) this._mkDiv(xl, y2, w, h); + } + if(iSects & 0x01) + { + xr = Math.min(xrDef, aBndA[y]); + w = xr - x; + if(w > 0) this._mkDiv(x, y2, w, h); + } + } + else + this._mkDiv(x, y2, xrDef - x, h); + y2 = cy + y + (iOdds >> 16); + if(iSects & 0xff00) + { + if(iSects & 0x0100) + { + xl = Math.max(x, aBndA[y]); + w = xrDef - xl; + if(w > 0) this._mkDiv(xl, y2, w, h); + } + if(iSects & 0x0200) + { + xr = Math.min(xrDef, aBndZ[y]); + w = xr - x; + if(w > 0) this._mkDiv(x, y2, w, h); + } + } + else + this._mkDiv(x, y2, xrDef - x, h); + } + else + { + if(iSects & 0x00ff) + { + if(iSects & 0x02) + xl = Math.max(x, aBndZ[y]); + else + xl = x; + if(iSects & 0x01) + xr = Math.min(xrDef, aBndA[y]); + else + xr = xrDef; + y2 = cy - y - h; + w = xr - xl; + if(w > 0) this._mkDiv(xl, y2, w, h); + } + if(iSects & 0xff00) + { + if(iSects & 0x0100) + xl = Math.max(x, aBndA[y]); + else + xl = x; + if(iSects & 0x0200) + xr = Math.min(xrDef, aBndZ[y]); + else + xr = xrDef; + y2 = cy + y + (iOdds >> 16); + w = xr - xl; + if(w > 0) this._mkDiv(xl, y2, w, h); + } + } + }; + + this.setStroke(1); + this.setFont("verdana,geneva,helvetica,sans-serif", "12px", Font.PLAIN); + this.color = "#000000"; + this.htm = ""; + this.wnd = wnd || window; + + if(!jg_ok) _chkDHTM(this.wnd); + if(jg_ok) + { + if(cnv) + { + if(typeof(cnv) == "string") + this.cont = document.all? (this.wnd.document.all[cnv] || null) + : document.getElementById? (this.wnd.document.getElementById(cnv) || null) + : null; + else if(cnv == window.document) + this.cont = document.getElementsByTagName("body")[0]; + // If cnv is a direct reference to a canvas DOM node + // (option suggested by Andreas Luleich) + else this.cont = cnv; + // Create new canvas inside container DIV. Thus the drawing and clearing + // methods won't interfere with the container's inner html. + // Solution suggested by Vladimir. + this.cnv = this.wnd.document.createElement("div"); + this.cnv.style.fontSize=0; + this.cont.appendChild(this.cnv); + this.paint = jg_dom? _pntCnvDom : _pntCnvIe; + } + else + this.paint = _pntDoc; + } + else + this.paint = _pntN; + + this.setPrintable(false); +} + +function _mkLinVirt(aLin, x1, y1, x2, y2) +{ + var dx = Math.abs(x2-x1), dy = Math.abs(y2-y1), + x = x1, y = y1, + xIncr = (x1 > x2)? -1 : 1, + yIncr = (y1 > y2)? -1 : 1, + p, + i = 0; + if(dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1); + p = pr-dx; + while(dx > 0) + {--dx; + if(p > 0) // Increment y + { + aLin[i++] = x; + y += yIncr; + p += pru; + } + else p += pr; + x += xIncr; + } + } + else + { + var pr = dx<<1, + pru = pr - (dy<<1); + p = pr-dy; + while(dy > 0) + {--dy; + y += yIncr; + aLin[i++] = x; + if(p > 0) // Increment x + { + x += xIncr; + p += pru; + } + else p += pr; + } + } + for(var len = aLin.length, i = len-i; i;) + aLin[len-(i--)] = x; +}; + +function _CompInt(x, y) +{ + return(x - y); +} + diff --git a/workflow/public_html/lib/lib-mafe.log b/workflow/public_html/lib/lib-mafe.log new file mode 100644 index 000000000..10db0db52 --- /dev/null +++ b/workflow/public_html/lib/lib-mafe.log @@ -0,0 +1,30 @@ +[8 weeks ago] a9ede644 (origin/bugfix/PMCORE-2311-C) PMCORE-2311-C +[9 weeks ago] 734f5c8f (origin/bugfix/PMCORE-2311-B) PMCORE-2311-B +[9 weeks ago] e1b2fc4e (origin/bugfix/PMCORE-2136-C) PMCORE-2136-C +[9 weeks ago] 0e0de9d8 (origin/bugfix/PMCORE-2311-A) PMCORE-2311-A +[9 weeks ago] d6c268a9 (origin/bugfix/PMCORE-2136-B) PMCORE-2136-B +[9 weeks ago] db51b322 (origin/bugfix/PMCORE-2136-A) PMCORE-2136-A +[9 weeks ago] 18b5e64f PMCORE-2311 +[2 months ago] a1283ec8 (origin/bugfix/PMCORE-2278) PMCORE-2278 +[3 months ago] 440c12da (origin/bugfix/PMCORE-2136) PMCORE-2136 +[3 months ago] 2bf373db (origin/bugfix/PMCORE-561) PMCORE-561 +[3 months ago] 9af801bc (origin/bugfix/PMCORE-2040) PMCORE-2040 +[3 months ago] 4568d802 (origin/bugfix/PMCORE-2044) PMCORE-2044 +[3 months ago] 9166e496 (origin/feature/PMCORE-2095) Fix CR observations by Rodrigo +[3 months ago] 1f85f34e (origin/bugfix/PMCORE-694) PMCORE-694 +[3 months ago] a5ffc5de (origin/bugfix/PMCORE-2128) PMCORE-2128 +[3 months ago] 7ddb25d1 Fix PM observations +[3 months ago] 009637ed PMCORE-2099 +[3 months ago] 41259199 PMCORE-2096 +[4 months ago] 5b3dce87 Fix PM observations +[4 months ago] 7f2dcb73 (origin/bugfix/PMCORE-2099) PMCORE-2099 +[4 months ago] c0cb7a81 (origin/bugfix/PMCORE-2096) PMCORE-2096 +[4 months ago] c09985a7 (origin/feature/PMCORE-2112) PMCORE-2112: Add Fixed Location Property to geomap mobile control +[5 months ago] 8f7a7423 translate +[5 months ago] e3dd3b95 PMCORE-1829:default-vaule property does not have hint +[5 months ago] 24c0137d PMCORE-1828:Hint to max-date property of date-time control was not update +[5 months ago] 45574666 (origin/bugfix/PMCORE-1776) PMCORE-1776 +[5 months ago] 0b76dd90 (origin/bugfix/PMCORE-1745_B) PMCORE-1745: ABE - Email response >> the default email account is empty for the "receiver account" option +[5 months ago] 50aee6d9 (origin/bugfix/PMCORE-1745) PMCORE-1745: ABE - Email response >> the default email account is empty for the "receiver account" option +[6 months ago] 970aedbb PMCORE-1712:PMFTotalCalculation trigger Wizard help letters get out of the box +[6 months ago] e624023a (origin/bugfix/PMCORE-1688) PMCORE-1688 Review the composer from the release/3.5.0 \ No newline at end of file diff --git a/workflow/public_html/lib/lib-pmdynaform.log b/workflow/public_html/lib/lib-pmdynaform.log new file mode 100644 index 000000000..17c5b0638 --- /dev/null +++ b/workflow/public_html/lib/lib-pmdynaform.log @@ -0,0 +1,30 @@ +[4 days ago] 66a14701 (HEAD, origin/release/3.5.7, origin/release/3.5.6) PMCORE-2526:Radio control does not update after use "setValue" helper to clean the control +[3 weeks ago] 71439824 PMCORE-2378: Error opening Dynaform after saving with saveForm () +[3 weeks ago] 5ea6113a PMCORE-2425: Dynaform - Grid Control - Delete button is not working as expected +[3 weeks ago] fcd75b65 PMCORE-2462: Set empty value to Radio buttons is not working +[9 weeks ago] 7237fd1a PMCORE-1773:[20214 ] GetValue() method is returning the label instead of the Key for radio fields in Mobile. +[9 weeks ago] 731e77a1 (origin/bugfix/PMCORE-1341-A) PMCORE-1341-A +[10 weeks ago] 2073d30c [20214 ] GetValue() method is returning the label instead of the Key for radio fields in Mobile. +[3 months ago] 18035a13 PMCORE-1773:[20214 ] GetValue() method is returning the label instead of the Key for radio fields in Mobile. +[3 months ago] b41c162e (origin/bugfix/PMCORE-2161) PMCORE-2161: Wrong functionality of the dropdown controls in grid +[3 months ago] aa024a7a (origin/bugfix/PMCORE-1234) PMCORE-1234 +[3 months ago] 3728a520 (origin/bugfix/PMCORE-1751) PMCORE-1751 +[3 months ago] c580864a (origin/escapeSelector) escapeSelector methos was created +[3 months ago] 7565b8cc (origin/bugfix/PMCORE-2061) PMCORE-2061 +[4 months ago] c2246d87 (origin/feature/PMCORE-2114) PMCORE-2114: Javascript Helper functions for geomap control +[4 months ago] 1966b2ef (origin/bugfix/PMCORE-1961) PMCORE-1961 +[4 months ago] 4d3a8804 (origin/bugfix/PMCORE-759) PMCORE-759 +[4 months ago] 96ab5933 PMCORE-537:Bug with rows of the grid and multiple file +[4 months ago] 0cf32fc3 (origin/bugfix/PMCORE-2052) PMCORE-2052 +[4 months ago] 8db9a803 (origin/bugfix/PMCORE-2045) PMCORE-2045 +[4 months ago] 8dc912cc (origin/bugfix/PMCORE-2004, origin/bigfix/PMCORE-2004) PMCORE-2004: IE 11>> Values of suggest control are lost in the second task +[4 months ago] a03762cf (origin/bugfix/PMCORE-1998) PMCORE-1998 +[4 months ago] 7eef0679 (origin/bugfix/PMCORE-2009) PMCORE-2009: IE 11 >> Date time control validation does not disappear, when it is corrected +[4 months ago] 5c92fd62 (origin/bugfix/PMCORE-1112-A) PMCORE-1112-A +[4 months ago] 555883b5 (origin/bugfix/PMCORE-1837) PMCORE-1837 +[4 months ago] 570fa814 (origin/bugfix/PMCORE-559) PMCORE-559: [ZenDesk 11723] Date Time Control - Initial Selection Date Property when setting the format HH:mm is not displaying the time correctly +[5 months ago] a79bc677 (origin/bugfix/PMCORE-1112) PMCORE-1112 +[5 months ago] 8c8d2ba7 (origin/bugfix/PMCORE-1607-B) update v2 +[5 months ago] 87a2a94b update +[5 months ago] 09ae2de3 PMCORE-1607-B +[5 months ago] 6ccfe4bf PMCORE-1607-B \ No newline at end of file diff --git a/workflow/public_html/lib/lib-pmui.log b/workflow/public_html/lib/lib-pmui.log new file mode 100644 index 000000000..4a1b7642c --- /dev/null +++ b/workflow/public_html/lib/lib-pmui.log @@ -0,0 +1,30 @@ +[3 months ago] 582f50cd (origin/bugfix/PMCORE-2044) PMCORE-2044 +[4 months ago] 48b618c1 (origin/bugfix/PMCORE-2011) PMCORE-2011 +[1 year, 8 months ago] 581a6f26 (origin/bugfix/PMC-166) PMC-166 +[2 years ago] 62cc5a80 PMC-322:[Mantis 25900] Add the labels for some English fields in the English .po file} +[2 years ago] bcb72023 PMC-320:Does not works the "Del/Supr" Key after press "Enter" key in the "Confirm" frame +[2 years ago] be0c1479 PMC-171:The line to connect elements BPMN aren't delete using the Del/Supr key +[2 years, 1 month ago] 984ddb1f FBI-2394:Task deleted on CTRL+ALT+DELETE - Windows 10 +[2 years, 1 month ago] 29bcda88 (origin/bugfix/PMC-4) PMC-4: [Mantis-25811]When assigning triggers to execute before a dynaform, the sequence is getting out of order and the cardinal number is repeated or misplaced +[2 years, 8 months ago] 9eb86aa8 FBI-2383:Triggers > when we are going to edit the code of a trigger, the code is superimposed on the alert "required field" +[3 years, 2 months ago] 0aad8c90 (origin/improvement/FBI-2144) FBI-2144 +[3 years, 4 months ago] f78ce304 FBI-636 +[3 years, 5 months ago] 9c30bd36 FBI-1140 (Task Steps) Label "No Records Found" even if there is a trigger assigned +[3 years, 5 months ago] 809acfe1 FBI-1464: Improved solution +[3 years, 7 months ago] 31cf982c FBI-927: Add validation to avoid duplicated items in canvas +[3 years, 7 months ago] 85b88acb FBI-1781 +[3 years, 9 months ago] d347bbef FBI-992: Fix "Required field" to be permanently visible +[3 years, 10 months ago] 1db5a6b7 FBI-1513 Grammar mistakes found in the Create a Variable window +[3 years, 10 months ago] 7e5e9d35 FBI-1008 +[3 years, 11 months ago] 73fa18e2 FBI-1415: The lasso does not work when we move the process flow +[4 years, 2 months ago] e1d0f9ae FBI-1237: [PMUI] No es posible adicionar una nueva opcin en un checkgroupField +[4 years, 3 months ago] f8386bca FBI-1074 +[4 years, 3 months ago] 68134906 FBI-1041: Cost&Units: Al hacer click en SAVE después de dejar vacíos estos elementos, no es posible editarlos +[4 years, 4 months ago] 612abd38 FBI-1009 +[4 years, 4 months ago] de682c10 FBI-961: [Process Designer] Error guardar la fecha del datepicker de PMUI +[4 years, 4 months ago] 1d06ba1f FBI-898 +[4 years, 4 months ago] f8b8c64c FBI-847: Variable no permite editar el Name en IE 11 +[4 years, 4 months ago] 3951a241 FBI-801: Fixes +[4 years, 4 months ago] 2eaddf4e FBI-789 +[4 years, 4 months ago] 5e3e5f0d FBI-393: Fix connection decorator positioning +[4 years, 5 months ago] c4824521 FBI-670:(Custom Trigger) No se actualizan las listas de los triggers \ No newline at end of file diff --git a/workflow/public_html/lib/mafe/designer.min.js b/workflow/public_html/lib/mafe/designer.min.js new file mode 100644 index 000000000..864e0725a --- /dev/null +++ b/workflow/public_html/lib/mafe/designer.min.js @@ -0,0 +1,35237 @@ +var defaultCrown = { + items: [ + { + id: "task", + name: "Task".translate(), + className: "mafe-corona-task", + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'TASK'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-task'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "gateway", + name: 'Gateway'.translate(), + className: 'mafe-corona-gateway-exclusive', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'EXCLUSIVE'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-gateway-exclusive'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "intermediate", + name: 'Intermediate'.translate(), + className: 'mafe-corona-intermediate', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'INTERMEDIATE_EMAIL'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-intermediate-send-mesage'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "end", + name: 'End'.translate(), + className: 'mafe-corona-end', + eventOnClick: function (item) { + item.parent.hide(); + }, + eventOnMouseDown: function (item) { + item.canvas.canCreateShape = true; + item.canvas.canCreateShapeType = 'END'; + item.canvas.canCreateShapeClass = 'mafe-toolbar-end'; + item.canvas.connectStartShape = item.parent.parent; + }, + eventOnMouseOut: function (item) { + if (item.canvas.canCreateShape) { + item.parent.hide(); + } + } + }, + { + id: "flow", + name: 'Flow'.translate(), + className: 'mafe-corona-flow', + eventOnClick: function (item) { + item.parent.hide(); + item.parent.parent.canvas.hideAllFocusedLabels(); + }, + eventOnMouseDown: function (item) { + item.canvas.canConnect = true; + item.canvas.connectStartShape = item.parent.parent; + } + }, + { + id: "properties", + name: 'Properties'.translate(), + className: 'mafe-corona-settings', + eventOnClick: function (item) { + item.parent.hide(); + PMDesigner.saveAndOpenSettings(item.parent.parent, PMDesigner.shapeProperties); + } + }, + { + id: "delete", + name: 'Delete'.translate(), + className: 'mafe-corona-delete', + eventOnClick: function (item) { + PMUI.getActiveCanvas().removeElements(); + item.parent.hide(); + } + } + ] +}; + +var configCrown = { + 'PMActivity': { + 'DEFAULT': { + order: ["task", "gateway", "intermediate", "end", "flow", "properties", "delete"], + rows: 3, + cols: 3 + } + }, + 'PMGateway': { + 'PARALLEL': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'EXCLUSIVE': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INCLUSIVE': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + } + }, + 'PMEvent': { + 'START_EMPTY': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'START_MESSAGECATCH': { + order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'START_TIMER': { + order: ["task", "gateway", "intermediate", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'START_CONDITIONAL': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'START_SIGNALCATCH': { + order: ["task", "gateway", "intermediate", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_EMAIL': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_MESSAGETHROW': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_SIGNALTHROW': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_MESSAGECATCH': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_TIMER': { + order: ["task", "gateway", "end", "flow", "properties", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_CONDITIONAL': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'INTERMEDIATE_SIGNALCATCH': { + order: ["task", "gateway", "end", "flow", "delete"], + rows: 3, + cols: 2 + }, + 'END_EMPTY': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_EMAIL': { + order: ["flow", "properties", "delete"], + rows: 2, + cols: 2 + }, + 'END_MESSAGETHROW': { + order: ["flow", "properties", "delete"], + rows: 2, + cols: 2 + }, + 'END_ERRORTHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_SIGNALTHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'END_TERMINATETHROW': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + }, + 'PMPool': { + 'DEFAULT': { + order: ["delete"], + rows: 1, + cols: 1 + } + }, + 'PMParticipant': { + 'DEFAULT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + }, + 'PMArtifact': { + 'TEXT_ANNOTATION': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'GROUP': { + order: ["delete"], + rows: 1, + cols: 1 + } + }, + 'PMData': { + 'DATAOBJECT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATAINPUT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATAOUTPUT': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + }, + 'DATASTORE': { + order: ["flow", "delete"], + rows: 2, + cols: 1 + } + } +}; +var PMDesigner = {}, + LANG, + WORKSPACE, + SKIN, + DEFAULT_WINDOW_WIDTH, + DEFAULT_WINDOW_HEIGHT, + ENABLED_FEATURES, + DataDictionary, + enviromentVariables, + resizingFrame, + ViewTaskInformation; + +PMDesigner.defaultRules = window.defaultRules ? window.defaultRules : {}; +PMDesigner.defaultCrown = window.defaultCrown ? defaultCrown : {}; +PMDesigner.configCrown = window.configCrown ? configCrown : {}; +PMDesigner.modelRules = new ModelRules(PMDesigner.defaultRules); +PMDesigner.modelCrown = new ModelCrown(PMDesigner.defaultCrown); +PMDesigner.remoteUrl = ""; +PMDesigner.moddle = new BpmnModdle(); +PMDesigner.bpmnFactory = new BpmnFactory(PMDesigner.moddle); +PMDesigner.keyCodeF5 = 116; +PMDesigner.shapeProperties = function (shape) { + var typeShape = shape.type; + switch (typeShape) { + case "PMActivity": + PMDesigner.activityProperties(shape); + break; + case "PMGateway": + PMDesigner.gatewayProperties(shape); + break; + case "PMEvent": + shape.eventProperties(); + break; + } +}; + +/** + * function to get the enviroment variables (WORKSPACE, LANG, SKIN) + */ +enviromentVariables = function (variable) { + var url1, variables, WORKSPACE, LANG, SKIN; + if (window.parent) { + url1 = window.parent.location.pathname; + variables = url1.split('/'); + WORKSPACE = variables[1]; + WORKSPACE = WORKSPACE.substring(3); + LANG = variables[2]; + SKIN = variables[3]; + + if (variable == 'WORKSPACE') { + return WORKSPACE; + } else if (variable == 'LANG') { + return LANG; + } else if (variable == 'SKIN') { + return SKIN; + } else { + return null; + } + } +}; + +LANG = (typeof SYS_LANG !== "undefined") ? SYS_LANG : enviromentVariables('LANG'); +WORKSPACE = (typeof SYS_SYS !== "undefined") ? SYS_SYS : enviromentVariables('WORKSPACE'); +SKIN = (typeof SYS_SKIN !== "undefined") ? SYS_SKIN : enviromentVariables('SKIN'); + +DEFAULT_WINDOW_WIDTH = 943; +DEFAULT_WINDOW_HEIGHT = 520; +ENABLED_FEATURES = []; + +if (LANG != 'en') { + if (typeof __TRANSLATIONMAFE != "undefined" && typeof __TRANSLATIONMAFE[LANG] != 'undefined') { + PMUI.loadLanguage(__TRANSLATIONMAFE.en, 'en'); + PMUI.loadLanguage(__TRANSLATIONMAFE[LANG], LANG); + + PMUI.setDefaultLanguage('en'); + PMUI.setCurrentLanguage(LANG); + } +} + +PMDesigner.resizeFrame = function () { + if (parent.document.documentElement === document.documentElement) { + jQuery(".content").css("height", parseInt(jQuery(window).height())); + } else { + jQuery(".content").css("height", document.body.clientHeight); + + } +}; +resizingFrame = PMDesigner.resizeFrame; +PMDesigner.applyCanvasOptions = function () { + list = new PMUI.control.DropDownListControl({ + options: [], + style: { + cssClasses: [ + "mafe-dropdown-zoom" + ] + }, + width: 150, + onChange: function (newValue, previous) { + var canvas = PMDesigner.project.diagrams.find('id', newValue); + PMUI.getActiveCanvas().getHTML().style.display = 'none'; + PMUI.setActiveCanvas(canvas); + canvas.getHTML().style.display = 'inline'; + } + }); + //enable to support multidiagram + //jQuery(jQuery(".navBar li")[6]).append(list.getHTML()); + list.defineEvents(); + PMDesigner.canvasList = list; +}; +//Zoom +PMDesigner.ApplyOptionsZoom = function () { + list = new PMUI.control.DropDownListControl({ + id: '_idListZoom', + options: [ + { + label: "50%", + value: 1 + }, + { + label: "75%", + value: 2 + }, + { + label: "100%", + value: 3, + selected: true + }, + { + label: "125%", + value: 4 + }, + { + label: "150%", + value: 5 + } + ], + style: { + cssClasses: [ + "mafe-dropdown-zoom" + ] + }, + onChange: function (newValue, previous) { + var i; + newValue = parseInt(newValue, 10); + PMUI.getActiveCanvas().applyZoom(newValue); + } + }); + + //jQuery(jQuery(".navBar li")[4]).append(list.getHTML()); + jQuery(jQuery(".mafe-zoom-options")).append(list.getHTML()); + + list.defineEvents(); +}; +/** + * hides all requiered TinyControls + */ +PMDesigner.hideAllTinyEditorControls = function () { + var control, + i, + max, + j, + mapMax, + editor, + controlMap = [ + 'tinyeditor_fontselect', + 'tinyeditor_fontsizeselect', + 'tinyeditor_bullist', + 'tinyeditor_numlist', + 'tinyeditor_forecolor', + 'tinyeditor_backcolor' + ]; + for (i = 0, max = tinymce.editors.length; i < max; i += 1) { + editor = tinymce.editors[i]; + jQuery.each(editor.controlManager.controls, function (index, val) { + if (val && jQuery.isFunction(val.hideMenu)) { + val.hideMenu(); + } + }); + } + +}; + + +jQuery(document).ready(function ($) { + var setSaveButtonDisabled, + s, + sidebarCanvas, + project, + d, + downloadLink, + handlerExportNormal, + handlerExportGranular, + handler, + validatosr, + help, + option, + menu, + elem, + validatorLabel = "Validator".translate(); + /*************************************************** + * Defines the Process + ***************************************************/ + if (typeof prj_uid === "undefined") { + prj_uid = ''; + } + if (typeof prj_readonly === "undefined") { + prj_readonly = ''; + } + if (typeof credentials === "undefined") { + credentials = ''; + } else { + credentials = RCBase64.decode(credentials); + credentials = (credentials == '') ? "" : JSON.parse(credentials); + } + + if (prj_readonly !== 'true') { + $("#idContent").find(".content_controls").show(); + $(".bpmn_shapes").show(); + $('.bpmn_shapes_legend').hide(); + $("#idNavBar").show().css('height', '33px'); + } + + PMDesigner.createHTML(); + setSaveButtonDisabled = function (that) { + if (that.isDirty()) { + if (document.getElementsByClassName("mafe-save-process").length > 0) { + document.getElementsByClassName("mafe-save-process")[0].removeAttribute("style"); + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#FFF"; + + var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; + mafebuttonMenu.style.backgroundColor = "#0C9778"; + mafebuttonMenu.firstChild.src = "/lib/img/caret-down-w.png"; + } + } else { + if (document.getElementsByClassName("mafe-save-process").length > 0) { + document.getElementsByClassName("mafe-save-process")[0].style.backgroundColor = "#e8e8e8"; + document.getElementsByClassName("mafe-save-process")[0].style.color = "#000"; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].style.color = "#000"; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].text = "Save".translate(); + + var mafebuttonMenu = document.getElementsByClassName("mafe-button-menu")[0]; + mafebuttonMenu.style.backgroundColor = "#e8e8e8"; + mafebuttonMenu.firstChild.src = "/lib/img/caret-down.png"; + } + } + }; + sidebarCanvas = []; + for (s = 0; s < PMDesigner.sidebar.length; s += 1) { + sidebarCanvas = sidebarCanvas.concat(PMDesigner.sidebar[s].getSelectors()); + jQuery(".bpmn_shapes").append(PMDesigner.sidebar[s].getHTML()); + } + //Adding Sidebar to DOM + firstAbsuluteX = jQuery("#div-layout-canvas").offset().left; + + project = new PMProject({ + id: prj_uid, + name: 'Untitled Process', + readOnly: prj_readonly === "true", + keys: { + access_token: credentials.access_token, + expires_in: credentials.expires_in, + token_type: credentials.token_type, + scope: credentials.scope, + refresh_token: credentials.refresh_token, + client_id: credentials.client_id, + client_secret: credentials.client_secret + }, + listeners: { + create: function (self, element) { + var sh, i, + contDivergent = 0, + contConvergent = 0; + //Updating the background color for connections + jQuery(".pmui-intersection > div > div").css("background-color", "black"); + + if (element.type == "Connection") { + ///////////****************Changing the gatDirection*******************////////////////// + if (element.relatedObject.srcPort.parent.gat_type === "PARALLEL" || + element.relatedObject.srcPort.parent.gat_type === "INCLUSIVE" || + element.relatedObject.destPort.parent.gat_type === "PARALLEL" || + element.relatedObject.destPort.parent.gat_type === "INCLUSIVE") { + if (element.relatedObject.srcPort.parent.gat_type !== undefined) { + sh = element.relatedObject.srcPort.parent; + } else { + sh = element.relatedObject.destPort.parent; + } + + if (sh.gat_direction === "DIVERGING") { + for (i = 0; i < sh.ports.asArray().length; i += 1) { + if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnActivity") { + contDivergent += 1; + } + if (contDivergent > 1) { + sh.gat_direction = "CONVERGING"; + i = sh.ports.asArray().length; + } + } + } + if (sh.gat_direction === "CONVERGING") { + for (i = 0; i < sh.ports.asArray().length; i += 1) { + if (sh.ports.asArray()[i].connection.flo_element_origin_type === "bpmnGateway") { + contConvergent += 1; + } + if (contConvergent > 1) { + sh.gat_direction = "DIVERGING"; + i = sh.ports.asArray().length; + } + } + } + + } + } + setSaveButtonDisabled(self); + }, + update: function (self) { + //Updating the background color for connections + jQuery(".pmui-intersection > div > div").css("background-color", "black"); + setSaveButtonDisabled(self); + }, + remove: function (self) { + setSaveButtonDisabled(self); + }, + success: function (self, xhr, response) { + var message; + self.dirty = false; + setSaveButtonDisabled(self); + self.dirtyElements[0] = { + laneset: {}, + lanes: {}, + activities: {}, + events: {}, + gateways: {}, + flows: {}, + artifacts: {}, + lines: {}, + data: {}, + participants: {}, + startMessageEvent: {}, + startTimerEvent: {} + }; + self.updateIdentifiers(response); + PMDesigner.connectValidator.bpmnValidator(); + //if (PMDesigner.currentMsgFlash) { + PMDesigner.msgFlash('The process was saved successfully.'.translate(), document.body, 'success', 3000, 5); + PMDesigner.RoutingRuleSetOrder(); + //} + + }, + failure: function (self, xhr, response) { + var message; + if (response.error.code === 401) { + /*message = new PMUI.ui.FlashMessage({ + message: "It was not possible to establish a connection with the server".translate(), + duration: 5000, + appendTo: document.body, + severity: 'info' + }); + message.show();*/ + //self.remoteProxy.setUrl("/"+WORKSPACE+"/oauth2/token"); + //self.setRefreshToken(); + //self.remoteProxy.setUrl("/api/1.0/"+WORKSPACE+"/project/"+prj_uid); + //self.save(); + } else { + PMDesigner.msgFlash('Error saving the process.'.translate(), document.body, 'error', 3000, 5); + self.updateIdentifiers(response); + } + } + } + }); + PMDesigner.project = project; + //create a new restApi + PMDesigner.restApi = RestApi.createRestApi({ + serverUrl: '/rest/v10', + keys: PMDesigner.project.keys + }); + systemRest = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'system/enabled-features', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var result = response.pop(); + ENABLED_FEATURES = result.response; + navbarExportUpdate(); + }, + functionFailure: function (xhr, response) { + ENABLED_FEATURES = []; + } + }).setBaseEndPoint('').executeRestClient(); + PMDesigner.connectValidator = new ConnectValidator(); + for (d = 0; d < PMDesigner.sidebar.length; d += 1) { + PMDesigner.sidebar[d].activate(); + } + + $('.bpmn_shapes_legend').hide(); + project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); + project.load(); + + /*=========================================== + = ProcessMaker module = + ===========================================*/ + + //Renders content controls + PMDesigner.contentControl.show(); + new PMAction({ + selector: ".mafe-menu-eventmessages-create", + label: { + selector: ".mafe-menu-eventmessages-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.eventMessages.create(); + } + }); + + /*----- End of ProcessMaker module ------*/ + + /*======================================== + = Designer buttons = + ========================================*/ + + //Renders navBar Panel + PMDesigner.navbarPanel.show(); + // create Zoom options + PMDesigner.ApplyOptionsZoom(); + //the action to generate a .bpmn file with the export option. + downloadLink = $('.mafe-button-export-bpmn-process'); + downloadLink.click(function (e) { + PMDesigner.moddle.toXML(PMDesigner.businessObject, function (err, xmlStrUpdated) { + + setEncoded(downloadLink, PMDesigner.project.projectName + '.bpmn', xmlStrUpdated); + + // xmlStrUpdated contains new id and the added process + }); + + }); + option = $("
" + "Save as".translate() + "
"); + /** + * Add data tables + */ + $('body').append('
') + $('.validator_header').append('

' + validatorLabel + '

'); + $('.validator_header').append(''); + $('.validator_body').html('
'); + PMDesigner.validTable = $('#validator-table').DataTable({ + paging: false, + scrollY: 100, + searching: false, + "info": false, + scrollCollapse: true, + "columns": [ + { + name: 'numrow', + "title": "#", + width: '5%', + render: function (data, type, row, conf) { + return conf.row + 1; + } + }, + { + name: 'id', + className: 'never' + }, + { + "title": "Type".translate(), + width: '10%', + name: 'severity', + render: function (data, type, row, conf) { + var clasMap = { + Error: 'mafe-icon-error', + Warning: 'mafe-icon-warning' + }; + if (type === 'display') { + return ' ' + data; + } + return data; + } + }, + {name: 'element', "title": "Element".translate(), width: '15%'}, + {name: 'element-type', "title": "Element Type".translate(), width: '15%'}, + {name: 'description', "title": "Description".translate(), width: '45%'} + ] + }); + jQuery('#validator-table tbody').on('click', 'tr', function () { + var id = PMDesigner.validTable.row(this).data()[1], + shape; + if ($(this).hasClass('selected')) { + $(this).removeClass('selected'); + PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); + } + else { + PMDesigner.validTable.$('tr.selected').removeClass('selected'); + $(this).addClass('selected'); + PMUI.getActiveCanvas().hideAllCoronas().emptyCurrentSelection(); + shape = PMUI.getActiveCanvas().items.find('id', id); + PMUI.getActiveCanvas().addToSelection(shape.relatedObject); + } + }); + PMDesigner.validTable.columns([1]).visible(false); + /********finish datatables********/ + new PMAction({ + selector: ".mafe-validator-close", + tooltip: "Close Validator".translate(), + execute: true, + handler: function () { + $('.bpmn_validator').css('visibility', 'hidden'); + $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); + PMDesigner.validator = false; + } + }); + + menu = $("
"); + menu.append(option); + option.on("mouseout", function (e) { + menu.hide(); + }); + option.on("click", function (e) { + var saveas; + menu.hide(); + PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id); + PMDesigner.project.save(true); + saveas = new SaveAs(); + saveas.open(); + }); + $(".mafe-button-menu").on("click", function (e) { + e.stopPropagation(); + $(".mafe-save-process").append(menu); + menu.show(); + }); + + /*----- End of Designer buttons ------*/ + /*================================================= + = Full screen functionality = + =================================================*/ + if (parent.document.documentElement === document.documentElement) { + elem = document.documentElement; + } else { + elem = parent.document.getElementById("frameMain"); + } + PMDesigner.fullScreen = new FullScreen({ + element: elem, + onReadyScreen: function () { + setTimeout(function () { + PMDesigner.resizeFrame(); + }, 500); + }, + onCancelScreen: function () { + setTimeout(function () { + PMDesigner.resizeFrame(); + }, 500); + } + }); + /*----- End of Full screen functionality ------*/ + + /*============================================= + = Shapes and Controls Box = + =============================================*/ + PMDesigner.cookie = { + name: "PMDesigner", + object: {}, + get: function (cname) { + var name = cname + "=", i, c, + ca = document.cookie.split(';'); + for (i = 0; i < ca.length; i += 1) { + c = ca[i].trim(); + if (c.indexOf(name) == 0) + return c.substring(name.length, c.length); + } + return ""; + }, + remove: function (cname) { + jQuery.each(PMDesigner.cookie.object, function (index, val) { + if (index === cname) { + delete PMDesigner.cookie.object[cname]; + PMDesigner.cookie.refresh(); + } + }); + }, + refresh: function () { + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + }; + PMDesigner.localStorage = { + prefix: "PM_" + WORKSPACE + "_" + prj_uid, + object: {}, + remove: function (cname) { + var obj; + obj = localStorage.getItem(PMDesigner.localStorage.prefix); + obj = (obj === null) ? {} : JSON.parse(obj); + if (obj[cname]) { + delete obj[cname]; + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(obj)); + } + } + }; + if (Modernizr.localstorage) { + var localDesigner = localStorage.getItem(PMDesigner.localStorage.prefix); + localDesigner = (localDesigner === null) ? {} : JSON.parse(localDesigner); + PMDesigner.panelsPosition = localDesigner; + } else { + if (PMDesigner.cookie.get(PMDesigner.cookie.name) !== "") { + var positions, pLeft, pTop, html; + positions = JSON.parse(PMDesigner.cookie.get(PMDesigner.cookie.name)); + PMDesigner.cookie.object = positions; + PMDesigner.panelsPosition = positions; + } + } + if (typeof PMDesigner.panelsPosition === "object") { + var pst = PMDesigner.panelsPosition; + if (pst.navbar) { + pLeft = pst.navbar.x; + pTop = pst.navbar.y; + html = document.getElementsByClassName("navBar")[0]; + } + if (pst.bpmn) { + pLeft = 0; + pTop = 0; + html = document.getElementsByClassName("bpmn_shapes")[0]; + html.style.left = pLeft + "px"; + html.style.top = pTop + "px"; + } + if (pst.controls) { + pLeft = pst.controls.x; + pTop = pst.controls.y; + html = document.getElementsByClassName("content_controls")[0]; + html.style.left = pLeft + "px"; + html.style.top = pTop + "px"; + if (pTop > 503) { + $("#idContent").find(".content_controls").css({'top': '', 'left': ''}); + } + } + } + jQuery(".bpmn_shapes").draggable({ + handle: "div", + start: function () { + }, + drag: function () { + }, + stop: function (event) { + var pLeft, pTop, currentObj; + pLeft = parseInt(event.target.style.left); + pTop = parseInt(event.target.style.top); + bpmn = { + bpmn: { + x: pLeft, + y: pTop + } + }; + if (Modernizr.localstorage) { + currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); + currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); + jQuery.extend(true, currentObj, bpmn); + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); + } else { + jQuery.extend(true, PMDesigner.cookie.object, bpmn); + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + } + }); + jQuery(".content_controls").draggable({ + handle: "div", + start: function () { + }, + drag: function () { + jQuery("html").css("overflow", "hidden"); + }, + stop: function (event) { + jQuery("html").css("overflow", "auto"); + if (jQuery(this).position().top > $(window).height()) { + var x = $(window).height() - 30; + jQuery(this).css({'top': x + 'px'}); + } + var pLeft, pTop, currentObj; + pLeft = parseInt(event.target.style.left); + pTop = parseInt(event.target.style.top); + if (pTop < 90) + pTop = 90; + event.target.style.setProperty("top", pTop.toString() + "px"); + controls = { + controls: { + x: pLeft, + y: pTop + } + }; + if (Modernizr.localstorage) { + currentObj = localStorage.getItem(PMDesigner.localStorage.prefix); + currentObj = (currentObj === null) ? {} : JSON.parse(currentObj); + jQuery.extend(true, currentObj, controls); + localStorage.setItem(PMDesigner.localStorage.prefix, JSON.stringify(currentObj)); + } else { + jQuery.extend(true, PMDesigner.cookie.object, controls); + document.cookie = PMDesigner.cookie.name + "=" + JSON.stringify(PMDesigner.cookie.object); + } + } + }); + /*----- End of Shapes and Controls Box ------*/ + + //Resize window + PMDesigner.resizeFrame(); + + /*============================================== + = Autosave functionality = + ==============================================*/ + PMDesigner.project.setSaveInterval(40000); + setInterval(function () { + if (PMDesigner.project.isDirty() && PMDesigner.project.readOnly === false) { + PMDesigner.project.remoteProxy.setUrl(HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + prj_uid); + PMDesigner.msgFlash('Saving Process'.translate(), document.body, 'success', 5000, 5); + PMDesigner.project.save(true); + } + }, PMDesigner.project.saveInterval); + /*----- End of Autosave functionality ------*/ + + //Reviewing functionalities + if (!PMDesigner.supportBrowser("fullscreen")) { + var li = document.getElementsByClassName("mafe-button-fullscreen"); + if (li) { + li[0].parentElement.style.display = "none"; + } + } + jQuery('.mafe-zoom-options').attr('title', 'Zoom'.translate()).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery('.mafe-toolbar-lasso').mouseover(function (e) { + $('.mafe-toolbar-lasso').css('cursor', 'pointer'); + }); + jQuery('.mafe-toolbar-validation').mouseover(function (e) { + $('.mafe-toolbar-validation').css('cursor', 'pointer'); + }); + jQuery('.mafe-toolbar-lasso').click(function (e) { + if (!PMUI.getActiveCanvas().lassoEnabled) { + $('.mafe-toolbar-lasso').css('background-color', 'rgb(207, 207, 207)'); + PMUI.getActiveCanvas().lassoEnabled = true; + } else { + $('.mafe-toolbar-lasso').css('background-color', 'rgb(233, 233, 233)'); + PMUI.getActiveCanvas().lassoEnabled = false; + } + }); + + PMDesigner.helper = new IntroHelper({ + tooltipClass: 'general', + skipLabel: 'Quit'.translate(), + + nextLabel: 'Next →'.translate(), + prevLabel: '← Back'.translate(), + doneLabel: 'Done'.translate(), + steps: [ + { + intro: '
' + }, + { + element: '#idNavBar', + intro: 'The designer bar displays the process name and is used to control the process view (zoom, full screen view), the export, undo/redo and the save button.'.translate() + }, + + { + element: '.bpmn_shapes', + intro: 'Drag and drop the process elements that you want to include in the process design.'.translate() + + '
' + ' Task: Add to include an action in your process.'.translate() + + '
' + ' Gateway: Selects a path or divides the process into multiple paths and joins them together.'.translate() + + '
' + ' Start Event: The process always begins with a start event.'.translate() + + '
' + ' Intermediate Event: Used to define an event that happens in the middle of the process.'.translate() + + '
' + ' End Event: End the execution of the process.'.translate() + + '
' + ' Pool: Place each process in a separate pool.'.translate() + + '
' + ' Lane: Used to divide a process into different sections.'.translate() + }, + { + element: '#div-layout-canvas', + intro: "In the design area you can drop the process elements and order or arrange them to design your process.".translate() + }, + { + element: '.content_controls', + intro: '

' + + 'The process objects are used to add execution features to the current process design.'.translate() + + '
Variables: Define the process data.'.translate() + + '
Dynaforms: Create dynamic forms.'.translate() + + '
Triggers: Create scripts.'.translate() + + '
Output documents: Generate documents with process data.'.translate() + + '
DB connections: Connect to external databases.'.translate() + + '

', + position: 'left' + }, + { + intro: '
' + 'Select an element in the designer to display the quick toolbar with the list of the most used options available for that element.'.translate() + '
' + } + ], + onExit: function () { + var canvas = PMUI.getActiveCanvas(); + if (canvas && canvas.getGridLine() && canvas.getHTML()) { + canvas.getHTML().classList.add("pmui-pmcanvas"); + } + } + }); + + jQuery('.mafe-toolbar-validation').click(function (e) { + if (!PMDesigner.validator) { + $('.mafe-toolbar-validation').css('background-color', 'rgb(207, 207, 207)'); + PMDesigner.validator = true; + } else { + $('.bpmn_validator').css('visibility', 'hidden'); + $('.mafe-toolbar-validation').css('background-color', 'rgb(233, 233, 233)'); + PMDesigner.validator = false; + } + }); + if (inArray("jXsSi94bkRUcVZyRStNVExlTXhEclVadGRRcG9xbjNvTWVFQUF3cklKQVBiVT0=", ENABLED_FEATURES)) { + $("#idNavBar").find(".mafe-button-export-process").html( + $("#idNavBar").find(".mafe-button-export-process").text() + " ▼" + ); + } + + function inArray(needle, haystack) { + var i, + length = haystack.length; + for (i = 0; i < length; i += 1) { + if (haystack[i] == needle) return true; + } + return false; + } +}); + +window.onload = function () { + //Reset the scroll positions + window.scrollBy(-window.scrollX, -window.scrollY); + document.onkeydown = function (e) { + if (e.keyCode === 8 && e.target === document.body) { + e.stopPropagation(); + return false; + } + }; +}; +/*================================================== + = Components from the Panels = + ==================================================*/ + +PMDesigner.createHTML = function () { + var minShapes = document.createElement("span"), + minShapesLegend = document.createElement("span"), + refreshShapes = document.createElement("span"), + minControls = document.createElement("span"), + processObjects = document.createElement("span"), + refreshControls = document.createElement("span"), + refreshNavBar = document.createElement("span"); + minShapes.id = "minShapes"; + minShapesLegend.id = "minShapesLegend"; + refreshShapes.id = "resetShapes"; + minControls.id = "minControls"; + refreshControls.id = "resetControls"; + refreshNavBar.id = "resetNavBar"; + minShapes.className = "mafe-shapes-toggle"; + minShapesLegend.className = "mafe-shapes-toggle"; + refreshShapes.className = "mafe-shapes-refresh"; + minControls.className = "mafe-shapes-toggle"; + processObjects.className = "mafe-process-object"; + refreshControls.className = "mafe-shapes-refresh"; + refreshNavBar.className = "mafe-shapes-refresh"; + minShapes.title = "Minimize".translate(); + minShapesLegend.title = "Minimize".translate(); + refreshShapes.title = "reset".translate(); + minControls.title = "Minimize".translate(); + refreshControls.title = "Reset to original position".translate(); + refreshNavBar.title = "reset".translate(); + + jQuery(minShapes).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(minShapesLegend).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshShapes).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(minControls).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshControls).tooltip({tooltipClass: "mafe-action-tooltip"}); + jQuery(refreshNavBar).tooltip({tooltipClass: "mafe-action-tooltip"}); + + refreshControls.style.backgroundPosition = '0px 0px'; + processObjects.textContent = "Process Objects".translate(); + + minShapes.onclick = function () { + var i, + items = jQuery(".bpmn_shapes > ul"); + if (items.length > 0) { + for (i = 0; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + } + + } + } + }; + minShapesLegend.onclick = function () { + var i, + items = jQuery(".bpmn_shapes_legend").children(); + for (i = 1; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + } + } + }; + refreshShapes.onclick = function () { + jQuery(".bpmn_shapes").removeAttr('style'); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("bpmn"); + } else { + PMDesigner.cookie.remove("bpmn"); + } + }; + minControls.onclick = function () { + var i, + title = '', + items = jQuery(".content_controls > ul"); + + if (items.length > 0) { + for (i = 0; i < items.length; i += 1) { + if (jQuery(items[i]).css("display").toLowerCase() !== "none") { + jQuery(items[i]).css({ + display: 'none' + }); + title = "Maximize"; + $('#minControls').removeClass('mafe-shapes-toggle'); + $('#minControls').addClass('mafe-shapes-plus'); + } else { + jQuery(items[i]).css({ + display: 'block' + }); + title = "Minimize"; + $('#minControls').removeClass('mafe-shapes-plus'); + $('#minControls').addClass('mafe-shapes-toggle'); + + } + } + } + jQuery(minControls).tooltip({content: title.translate()}); + }; + refreshControls.onclick = function () { + jQuery(".content_controls").css({ + left: "auto", + right: "20px", + top: "90px" + }); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("controls"); + } else { + PMDesigner.cookie.remove("controls"); + } + }; + refreshNavBar.onclick = function () { + jQuery(".navBar").removeAttr('style'); + if (Modernizr.localstorage) { + PMDesigner.localStorage.remove("navbar"); + } else { + PMDesigner.cookie.remove("navbar"); + } + }; + + + jQuery(".bpmn_shapes>div").append(minShapes); + jQuery(".bpmn_shapes>div").append(refreshShapes); + jQuery(".content_controls>div").append(processObjects); + jQuery(".content_controls>div").append(minControls); + jQuery(".content_controls>div").append(refreshControls); + jQuery(".navBar>div").append(refreshNavBar); + jQuery(".bpmn_shapes_legend>div").append(minShapesLegend); + jQuery(".bpmn_shapes, .content_controls").on("contextmenu", function (e) { + e.preventDefault(); + }); + + PMDesigner.applyCanvasOptions(); + +}; + +/*----- End of Components from the Panels ------*/ + +/*===================================================== + = Get information about browser = + =====================================================*/ +PMDesigner.getBrowser = function () { + var match, + ua = navigator.userAgent.toLowerCase(); + if (ua) { + match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[1] || "", + version: match[2] || "0" + }; + } +}; +/*----- End of Get information about browser ------*/ + +PMDesigner.supportBrowser = function (functionality) { + var browser, el, module; + functionality = functionality.toLowerCase(); + switch (functionality) { + case "fullscreen": + browser = PMDesigner.getBrowser(); + if ((browser.browser === "msie") && (parseInt(browser.version, 10) <= 10)) { + try { + module = new ActiveXObject("WScript.Shell"); + } catch (e) { + module = false; + } + } else { + el = document.documentElement; + module = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen; + if (!module) { + module = false; + } + } + break; + case "": + break; + } + return module; +}; + +/*============================================================ + = Leave the current page Functionality = + ============================================================*/ +window.onbeforeunload = function (e) { + var message; + if ((PMDesigner.project.isDirty() + && !PMDesigner.project.readOnly) + || PMDesigner.project.isSave) { + message = "There are unsaved changes, if you leave the editor some changes won't be saved.".translate(); + e = e || window.event; + if (e) { + e.returnValue = message; + } + return message; + } +}; +/*----- End of Leave the current page Functionality ------*/ + +/*===================================================================== + = Validating coordinates for create a new shape = + =====================================================================*/ +PMUI.validCoordinatedToCreate = function (canvas, event, shape) { + var position, p, width, height, createElem = true, panels = [], message; + //navBar panel + position = jQuery(".navBar").offset(); + width = jQuery(".navBar").width(); + height = jQuery(".navBar").height(); + element = { + x1: position.left, + y1: position.top, + x2: position.left + width, + y2: position.top + height + }; + panels.push(element); + //BPMN panel + position = jQuery(".bpmn_shapes").offset(); + width = jQuery(".bpmn_shapes").width(); + height = jQuery(".bpmn_shapes").height(); + element = { + x1: position.left, + y1: position.top, + x2: position.left + width, + y2: position.top + height + }; + if (panels.length > 0) { + for (p = 0; p < panels.length; p += 1) { + if (((event.pageX >= panels[p].x1) && (event.pageX <= panels[p].x2)) + && ((event.pageY >= panels[p].y1) && (event.pageY <= panels[p].y2))) { + PMDesigner.msgFlash('Is not possible create the element in that area'.translate(), document.body, 'info', 3000, 5); + return false; + } + } + } + + return true; +}; +/*----- End of Validating coordinates for create a new shape ------*/ + +PMUI.pageCoordinatesToShapeCoordinates = function (shape, e, xCoord, yCoord, customShape) { + var coordinates, + x = (!xCoord) ? e.pageX : xCoord, + y = (!yCoord) ? e.pageY : yCoord, + orgX = (!xCoord) ? e.pageX : xCoord, + orgY = (!yCoord) ? e.pageY : yCoord, + canvas = shape.getCanvas(); + x += canvas.getLeftScroll() - shape.getAbsoluteX() - canvas.getX(); + y += canvas.getTopScroll() - shape.getAbsoluteY() - canvas.getY(); + coordinates = new PMUI.util.Point(x, y); + return coordinates; +}; + +PMDesigner.msgFlash = function (text, container, severity, duration, zorder) { + var msg; + if (!PMDesigner.currentMsgFlash) { + msg = new PMUI.ui.FlashMessage({ + id: '__msgFlashMessage', + severity: 'success' + }); + } else { + msg = PMDesigner.currentMsgFlash; + } + if (msg.html) + jQuery(msg.html).remove(); + msg.setMessage(text || ""); + msg.setAppendTo(container || document.body); + msg.setSeverity(severity || "success"); + msg.setDuration(duration || 3000); + msg.setZOrder(zorder || 100); + msg.show(); + PMDesigner.currentMsgFlash = msg; +}; + +PMDesigner.msgWinError = function (text) { + var msgError; + if (!PMDesigner.currentWinError) { + msgError = new PMUI.ui.MessageWindow({ + id: 'showMessageWindowFailure', + width: 490, + windowMessageType: 'error', + title: 'Error'.translate(), + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + msgError.close(); + }, + buttonType: "success" + } + ] + }); + } else { + msgError = PMDesigner.currentWinError; + } + msgError.setMessage(text || 'Error'.translate()); + msgError.showFooter(); + msgError.open(); + PMDesigner.currentWinError = msgError; +}; + +PMDesigner.msgWinWarning = function (text) { + var msgWarning; + if (!PMDesigner.currentWinWarning) { + msgWarning = new PMUI.ui.MessageWindow({ + id: 'showMessageWindowWarning', + windowMessageType: 'warning', + width: 490, + title: 'Warning'.translate(), + footerItems: [{ + text: 'Ok'.translate(), + buttonType: "success", handler: function () { + msgWarning.close(); + } + }] + }); + } else { + msgWarning = PMDesigner.currentWinWarning; + } + msgWarning.setMessage(text || 'Warning'.translate()); + msgWarning.showFooter(); + msgWarning.open(); + PMDesigner.currentWinWarning = msgWarning; +}; + +PMDesigner.modeReadOnly = function () { + var restClient; + if (prj_readonly === 'true') { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'cases/' + app_uid + '/tasks', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var viewTaskInformation = new ViewTaskInformation(); + viewTaskInformation.setData(response[0].response); + viewTaskInformation.setShapes(); + viewTaskInformation.showViewLegendsInformation(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + } +}; + +PMDesigner.reloadDataTable = function () { + $('.bpmn_validator').css('visibility', 'visible'); +}; + +/** + * Escape XML characters method. + * There are only five: + * " " + * ' ' + * < < + * > > + * & & + * + * @param {string} label + * @returns {string} + */ +PMDesigner.escapeXMLCharacters = function (label) { + return label + .replace(/&/g, "&") + .replace(/"/g, """) + .replace(/'/g, "'") + .replace(//g, ">"); +}; + +DataDictionary = function () { +}; +DataDictionary.prototype.getColor = function (value) { + switch (value) { + case 'TASK_IN_PROGRESS': + return 'red'; + case 'TASK_COMPLETED': + return 'green'; + case 'TASK_PENDING_NOT_EXECUTED': + return 'silver'; + case 'TASK_PARALLEL': + return 'orange'; + default: + return 'white'; + } +}; +DataDictionary.prototype.getStatus = function (value) { + switch (value) { + case 'TASK_IN_PROGRESS': + return 'Task in Progress'.translate(); + case 'TASK_COMPLETED': + return 'Completed Task'.translate(); + case 'TASK_PENDING_NOT_EXECUTED': + return 'Pending Task / Not Executed'.translate(); + case 'TASK_PARALLEL': + return 'Parallel Task'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasAssignType = function (value) { + switch (value) { + case 'BALANCED': + return 'Balanced'.translate(); + case 'MANUAL': + return 'Manual'.translate(); + case 'REPORT_TO': + return 'Report toO'.translate(); + case 'EVALUATE': + return 'Evaluate'.translate(); + case 'SELF_SERVICE': + return 'self Service'.translate(); + case 'SELF_SERVICE_EVALUATE': + return 'Self Service Evaluate'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasType = function (value) { + switch (value) { + case 'NORMAL': + return 'Normal'.translate(); + case 'SUBPROCESS': + return 'Sub Process'.translate(); + default: + return value; + } +}; +DataDictionary.prototype.getTasDerivation = function (value) { + switch (value) { + case 'NORMAL': + return 'Normal'.translate(); + default: + return value; + } +}; + +ViewTaskInformation = function (settings) { + ViewTaskInformation.prototype.init.call(this, settings); +}; +ViewTaskInformation.prototype.init = function () { + var that = this, + panelButton = new PMUI.core.Panel({ + layout: 'hbox', + items: [ + that.getButton('Information', function () { + that.showInformation(); + }), + that.getButton('Delegations', function () { + that.showDelegations(); + }), + that.getButton('Route', function () { + that.showRoute(); + }) + ] + }); + that.windowAbstract.showFooter(); + that.windowAbstract.addItem(panelButton); + that.windowAbstract.addItem(that.panelvertical); +}; +ViewTaskInformation.prototype.dataDictionary = new DataDictionary(); +ViewTaskInformation.prototype.data = null; +ViewTaskInformation.prototype.shapeData = null; +ViewTaskInformation.prototype.panelvertical = new PMUI.core.Panel({layout: 'vbox', width: 400}); +ViewTaskInformation.prototype.windowAbstract = new PMUI.ui.Window({id: 'windowAbstract', width: 500, height: 350}); +ViewTaskInformation.prototype.setData = function (data) { + this.data = data; +}; +ViewTaskInformation.prototype.setCursor = function (shape) { + shape.getHTML().onmouseover = function () { + this.style.cursor = 'pointer'; + }; + shape.getHTML().onmouseout = function () { + this.style.cursor = ''; + }; +}; +ViewTaskInformation.prototype.setShapes = function () { + var that = this, + shape, + diagrams, + i, + j, + dt = that.data; + for (i = 0; i < dt.length; i += 1) { + diagrams = PMDesigner.project.diagrams.asArray(); + for (j = 0; j < diagrams.length; j += 1) { + shape = diagrams[j].getCustomShapes().find('id', dt[i].tas_uid); + if (typeof shape != "undefined" && shape != null) { + shape.changeColor(that.dataDictionary.getColor(dt[i].status)); + shape.data = dt[i]; + shape.hasClick = function (event) { + that.setShapeData(this.data); + that.showInformation(); + }; + that.setCursor(shape); + } + } + } +}; +ViewTaskInformation.prototype.setShapeData = function (data) { + this.shapeData = data; +}; +ViewTaskInformation.prototype.addRowNewLine = function (label, value) { + var panelhorizontal = new PMUI.core.Panel({ + layout: 'hbox' + }); + panelhorizontal.addItem(new PMUI.ui.TextLabel({text: ''})); + this.panelvertical.addItem(panelhorizontal); + return panelhorizontal; +}; +ViewTaskInformation.prototype.addRow = function (label, value) { + var field1, field2, field3, panelhorizontal; + + field1 = new PMUI.ui.TextLabel({text: label.translate(), proportion: 0.3}); + field2 = new PMUI.ui.TextLabel({text: ':', proportion: 0.1}); + field3 = new PMUI.ui.TextLabel({text: value ? value + '' : '', proportion: 0.6}); + + panelhorizontal = new PMUI.core.Panel({ + layout: 'hbox' + }); + + panelhorizontal.addItem(field1); + panelhorizontal.addItem(field2); + panelhorizontal.addItem(field3); + this.panelvertical.addItem(panelhorizontal); + return panelhorizontal; +}; +ViewTaskInformation.prototype.clearRows = function () { + this.panelvertical.clearItems(); +}; +ViewTaskInformation.prototype.showInformation = function () { + var that = this; + that.clearRows(); + that.addRow('Title'.translate(), that.shapeData.tas_title); + that.addRow('Description'.translate(), that.shapeData.tas_description); + that.addRow('Status'.translate(), that.dataDictionary.getStatus(that.shapeData.status)); + that.addRow('Type'.translate(), that.dataDictionary.getTasType(that.shapeData.tas_type)); + that.addRow('Assign type'.translate(), that.dataDictionary.getTasAssignType(that.shapeData.tas_assign_type)); + that.addRow('Routing'.translate(), that.dataDictionary.getTasDerivation(that.shapeData.tas_derivation)); + that.addRow('Start'.translate(), that.shapeData.tas_start); + that.addRowNewLine(); + that.addRow('Last User Name'.translate(), that.shapeData.usr_username); + that.addRow('Last User'.translate(), that.shapeData.usr_firstname + ' ' + that.shapeData.usr_lastname); + + that.windowAbstract.setTitle('Information'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.showDelegations = function () { + var that = this, i, dt; + that.clearRows(); + dt = that.shapeData.delegations; + for (i = 0; i < dt.length; i += 1) { + that.addRow('User', dt[i].usr_username); + that.addRow('User Name', dt[i].usr_firstname + ' ' + dt[i].usr_lastname); + that.addRow('Duration', dt[i].del_duration); + that.addRow('Finish Date', dt[i].del_finish_date); + that.addRow('Index', dt[i].del_index); + that.addRow('Init Date', dt[i].del_init_date); + that.addRow('Task Due Date', dt[i].del_task_due_date); + that.addRowNewLine(); + } + + that.windowAbstract.setTitle('Delegations'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.showRoute = function () { + var that = this, i, dt; + that.clearRows(); + that.addRow('Type', that.shapeData.route.type); + that.addRowNewLine(); + dt = that.shapeData.route.to; + for (i = 0; i < dt.length; i += 1) { + that.addRow('Condition', dt[i].rou_condition); + that.addRow('Number', dt[i].rou_number); + that.addRowNewLine(); + } + + that.windowAbstract.setTitle('Route'.translate() + ' ' + that.shapeData.tas_title); + that.windowAbstract.open(); + that.windowAbstract.body.style.padding = '20px'; +}; +ViewTaskInformation.prototype.getButton = function (text, fn) { + return new PMUI.ui.Button({ + text: text.translate(), + width: 180, + height: 50, + style: { + cssProperties: { + marginRight: 10, + marginBottom: 10, + backgroundColor: '#474747', + borderRadius: 5, + padding: 5 + }, + cssClasses: ['mafeButton'] + }, + handler: fn + }); +}; +ViewTaskInformation.prototype.showViewLegendsInformation = function () { + var i, dt, legend, legendIcon, legendText; + $('.bpmn_shapes_legend').show(); + + i; + dt = [ + ['red', 'Task in Progress'.translate()], + ['green', 'Completed Task'.translate()], + ['silver', 'Pending Task / Not Executed'.translate()], + ['orange', 'Parallel Task'.translate()] + ]; + for (i = 0; i < dt.length; i += 1) { + legend = $("
"); + legendIcon = $("
").addClass("mafe-activity-task-" + dt[i][0]).addClass("icon-legend"); + legendText = $("
" + dt[i][1] + "
").addClass("text-legend"); + legend.append(legendIcon).append(legendText); + jQuery(".bpmn_shapes_legend").append(legend); + } + + jQuery(".bpmn_shapes_legend").draggable({ + handle: "div", + start: function () { + }, + drag: function (event, e, u) { + }, + stop: function (event) { + + } + }); +}; + +(function () { + /** + * @class PMUI.menu.ContextMenu + * Handles the context menu of designer + * contains all the menus for elements + * + * @extend PMUI.util.Factory + * @constructor + * This method creates a new instance of this object + * @param {Object} [settings] Constructor settings + */ + "use strict"; + var ContextMenu = function (settings) { + this.factory = null; + ContextMenu.prototype.init.call(this, settings); + }; + + ContextMenu.prototype.type = 'ContextMenu'; + + ContextMenu.prototype.family = 'ContextMenu'; + + /** + * Initializes the object. + * @param {Object} settings A JSON object with the config options. + * @private + */ + ContextMenu.prototype.init = function (settings) { + jQuery.extend(true, defaults, settings); + this.factory = new PMUI.util.Factory(defaults.factory); + }; + + /** + * Register a new context menu object into a product. + * + * Usage example: + * @example + * //Remember, this is an abstract class so it shouldn't be instantiate, + * //anyway we are instantiating it just for this example + * var additionalMenu = { + * id: "additionalMenu", + * text: "New Menu", + * onClick: function () { + * PMDesigner.msgWinWarning('This is a new Menu'); + * } + * }; + * // Assuming that you're using PMDesigner.contextMenuFactory as the default contextMenuFactory + * PMDesigner.contextMenuFactory.registerMenu("CANVAS", additionalMenu); + * + * @param {String} productName Name of the shape or product in factory. + * @param {Object} menu Object with menu values and actions. + * @private + */ + ContextMenu.prototype.registerMenu = function (productName, menu) { + if (typeof this.factory.products[productName] === 'undefined') { + console.log('Context Menu Warning: Cannot add Menu into: ' + productName + '. Please, review name.'); + } else { + if (this.factory.products[productName].items instanceof Array) { + this.factory.products[productName].items.push(menu); + } + } + }; + + /** + * Removes context menu object from product. + * + * Usage example: + * @example + * // Assuming that you're using PMDesigner.contextMenuFactory as the default contextMenuFactory + * // this example removes Canvas gridLines option + * PMDesigner.contextMenuFactory.removeMenu("CANVAS", "id", "menuGridLines"); + * + * @param {String} product Name of the shape or product in factory. + * @param {String} id Key to look through product. + * @param {String} value Name of the elementValue. + * @private + */ + ContextMenu.prototype.removeMenu = function (product, id, value) { + if (typeof this.factory.products[product] !== 'undefined') { + this.factory.products[product].items = _.reject(this.factory.products[product].items, function (menuValue) { + return menuValue[id] === value; + }); + } else { + console.log('Context Menu Warning: Cannot find ' + product + ' Menu. Please, review name.'); + } + }; + + /** + * Returns specific product. + * @param {String} type Name of product. + * @private + */ + ContextMenu.prototype.getProduct = function (type) { + return this.factory.products[type]; + }; + + var menuMessages = { + 'START': { + 'TIMER': 'Please configure cron to create cases.'.translate(), + 'CONDITIONAL': 'Please configure cron to create cases in base to a condition.'.translate(), + 'SIGNALCATCH': 'Please configure cron to create cases in base to a signal.'.translate() + }, + 'INTERMEDIATE': { + 'CATCH': { + 'TIMER': 'Please configure cron to wait for time event.'.translate(), + 'CONDITIONAL': 'Please configure cron to wait for time condition.'.translate(), + 'SIGNALCATCH': 'Please configure script to wait for a signal.'.translate() + }, + 'THROW': { + 'SIGNALTHROW': 'Please configure a script to send a signal.'.translate() + } + }, + 'END': { + 'ERRORTHROW': 'Please configure script to end with error status.'.translate(), + 'SIGNALTHROW': 'Please configure script to send a signal.'.translate(), + 'TERMINATETHROW': 'Please configure script to terminate case.'.translate() + } + }, + menu = {}, + rootMenu, + elementActivite, + typeMenu = { + text: "Gateway Type".translate(), + icon: "mafe-menu-properties-action", + id: "gatewaytype", + items: [ + { + id: "gatewayexclusive", + text: "Exclusive (XOR) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('EXCLUSIVE'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "gatewayparallel", + text: "Parallel (AND) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('PARALLEL'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "gatewayinclusive", + text: "Inclusive (OR) Gateway".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeTypeTo('INCLUSIVE'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + endMarker = { + text: "End Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "result", + items: [ + { + id: "endempty", + text: "Empty".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMPTY', 'Empty'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endemail", + text: "Email Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMAIL', 'Email Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endmessagethrow", + text: "Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGETHROW', 'Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "enderrorthrow", + text: "Error".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('ERRORTHROW', 'Error'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endsignalthrow", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALTHROW', 'Signal'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "endterminatethrow", + text: "Terminate".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TERMINATETHROW', 'Terminate'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + intermediateCatchMarker = { + text: "Intermediate Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "trigger", + items: [ + { + id: "intermediatemessagecatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatetimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediateconditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatesignalcatch", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + boundaryCatchMarker = { + text: "Boundary Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "eventType", + items: [ + { + id: "messageCatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + } + }, + { + id: "boundaryTimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + } + }, + { + id: "BoudaryConditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + } + }, + { + id: "BoudarySignal", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + } + }, + { + id: "BoudaryError", + text: "Error".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('ERRORCATCH', 'Error'); + } + } + ] + }, + intermediateThrowMarker = { + text: "Intermediate Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "result", + items: [ + { + id: "intermediateemail", + text: "Email Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMAIL', 'Email Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatemessagethrow", + text: "Send Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGETHROW', 'Send Message'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "intermediatesignalthrow", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALTHROW', 'Signal'); + PMDesigner.project.updateElement([]); + } + } + ] + }, + startCatchMarker = { + text: "Start Event Type".translate(), + icon: "mafe-menu-properties-action", + id: "trigger", + items: [ + { + id: "startempty", + text: "Empty".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('EMPTY', 'Empty'); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startmessagecatch", + text: "Receive Message".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('MESSAGECATCH', 'Receive Message'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "starttimer", + text: "Timer".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('TIMER', 'Timer'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startconditional", + text: "Conditional".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('CONDITIONAL', 'Conditional'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + }, + { + id: "startsignalcatch", + text: "Signal".translate(), + onClick: function (menuOption) { + var targetElement = menuOption + .getMenuTargetElement(); + targetElement.changeMarkerTo('SIGNALCATCH', 'Signal'); + rootMenu = menuOption.getRootMenu(); + rootMenu.getItems()[3].disable(); + PMDesigner.project.updateElement([]); + } + } + ] + }, + canvas = { + id: "menuCanvas", + width: 150, + items: [ + { + id: "menuEditProcess", + text: "Edit Process".translate(), + onClick: function (menuOption) { + PMDesigner.propertiesProcess(); + } + }, + { + id: "menuGridLines", + text: "Enable Grid Lines".translate(), + onClick: function () { + var canvas = PMUI.getActiveCanvas(); + if (canvas.toogleGridLine()) { + this.setText("Disable Grid Lines".translate()); + } else { + this.setText("Enable Grid Lines".translate()); + } + } + } + ], + onShow: function (menu) { + var canvas = PMUI.getActiveCanvas(); + if (canvas.currentConnection) { + canvas.currentConnection.hidePortsAndHandlers(); + } + if (canvas.isGridLine) { + menu.items.find('id', 'menuGridLines').setText("Disable Grid Lines".translate()); + } + + } + }, + task = { + id: "menuTask", + items: [ + { + id: "taskType", + text: "Task Type".translate(), + items: [ + { + id: "empty", + text: "Empty Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "sendtask", + text: "Send Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "receivetask", + text: "Receive Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "usertask", + text: "User Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "servicetask", + text: "Service Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "scripttask", + text: "Script Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "manualtask", + text: "Manual Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + }, + { + id: "businessrule", + text: "Business Rule Task".translate(), + onClick: function (menuOption) { + handlerMarkerType(menuOption); + } + } + ] + }, + { + id: "loopType", + text: "Marker Type".translate(), + items: [ + { + id: "empty", + text: "None".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "loop", + text: "Loop".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "parallel", + text: "Parallel".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + }, + { + id: "sequential", + text: "Sequential".translate(), + onClick: function (menuOption) { + handlerMarkerLoopType(menuOption); + } + } + ] + }, + { + id: "menuTaskSteps", + text: "Steps".translate(), + icon: "mafe-menu-task-steps", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.act_name = menuOption.getMenuTargetElement().act_name; + PMDesigner.act_uid = menuOption.getMenuTargetElement().act_uid; + PMDesigner.stepsTask = new stepsTask(); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.act_name = menuOption.getMenuTargetElement().act_name; + PMDesigner.act_uid = menuOption.getMenuTargetElement().act_uid; + PMDesigner.stepsTask = new stepsTask(); + } + } + }, + { + id: "menuTaskAssignedRules", + text: "Assignment Rules".translate(), + icon: "mafe-menu-users-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.assigmentRules(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.assigmentRules(menuOption.getMenuTargetElement()); + } + } + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuTaskProperties", + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.activityProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.activityProperties(menuOption.getMenuTargetElement()); + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection + .hidePortsAndHandlers(); + } + + if (targetElement.act_task_type == "SCRIPTTASK") { + menu.getItems()[1].setVisible(false); + menu.getItems()[2].setVisible(false); + menu.getItems()[3].setVisible(false); + } else { + menu.getItems()[1].setVisible(true); + menu.getItems()[2].setVisible(true); + menu.getItems()[3].setVisible(true); + } + + if (targetElement.act_task_type == "MANUALTASK" || targetElement.act_task_type == "USERTASK" || targetElement.act_task_type == "EMPTY") { + menu.getItems()[1].getItems()[2].setVisible(true); + } else { + menu.getItems()[1].getItems()[2].setVisible(false); + } + } + }, + subProcess = { + id: "menuSubProcess", + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().label.canvas + .hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete Routing Rule".translate(), + icon: "mafe-menu-delete-rules-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.RoutingRuleDeleteAllFlow(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.RoutingRuleDeleteAllFlow(menuOption.getMenuTargetElement()); + } + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + menuOption.parent.hide(); + + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuSubProperties", + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"); + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.propertiesSubProcess(menuOption + .getMenuTargetElement(menuOption.getMenuTargetElement())); + + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.propertiesSubProcess(menuOption + .getMenuTargetElement(menuOption.getMenuTargetElement())); + + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection + .hidePortsAndHandlers(); + } + } + }, + start = { + id: 'menuStart', + items: [ + startCatchMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuStartWebEntry", + text: "Web Entry".translate(), + icon: "mafe-menu-start-message-view", + //visible: false, + onClick: function (menuOption) { + var splitedID = menuOption.getMenuTargetElement().getID().split("-"), webEntry; + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + var webEntry; + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + webEntry = new WebEntry(menuOption.getMenuTargetElement()); + webEntry.render(); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + webEntry = new WebEntry(menuOption.getMenuTargetElement()); + webEntry.render(); + } + } + }, + { + id: "menuStartProperties", + text: "Properties".translate(), + icon: "mafe-menu-start-message-view", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "TIMER": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(), + shape, + propertyMap = ['MESSAGECATCH', 'TIMER']; + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (targetElement.evn_marker == 'TIMER') { + } + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + if (targetElement.evn_marker === 'MESSAGECATCH') { + var dt = menu.getItems(); + for (var i = 0; i < dt.length; i += 1) { + if (dt[i].id === 'idReceiveMessage') { + dt[i].setVisible(true); + } + } + } + //disabled weebentry for others pmEvent no support + if (targetElement.getPorts().asArray().length) { + shape = targetElement.getPorts().getFirst().getConnection().getDestPort().parent; + if (shape && (shape instanceof PMActivity) && targetElement.evn_marker === "EMPTY") { + menu.items.find('id', 'menuStartWebEntry').enable(); + } else if (shape && (shape instanceof PMEvent) && shape.evn_marker === "EMAIL" + && targetElement.evn_marker === "EMPTY") { + menu.items.find('id', 'menuStartWebEntry').enable(); + } else { + menu.items.find('id', 'menuStartWebEntry').disable(); + } + } else { + menu.items.find('id', 'menuStartWebEntry').disable(); + } + + //Enable && Disabled - Properties + if (targetElement.evn_type === "START" && propertyMap.indexOf(targetElement.evn_marker) >= 0) { + menu.items.find('id', 'menuStartProperties').enable(); + } else { + menu.items.find('id', 'menuStartProperties').disable(); + } + }, + onHide: function (menu) { + var dt = menu.getItems(), i; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].id === 'idReceiveMessage') { + dt[i].setVisible(false); + } + } + } + }, + end = { + id: 'menuEnd', + items: [ + endMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "menuEndProperties", + text: "Properties".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "EMAIL": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + } + } + ], + onShow: function (menu) { + var propertyMap = ['MESSAGETHROW', 'EMAIL'], + targetElement = menu.getTargetElement(); + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(targetElement); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + + + //Enable && Disabled - Properties + if (targetElement.evn_type === "END" && propertyMap.indexOf(targetElement.evn_marker) >= 0) { + menu.items.find('id', 'menuEndProperties').enable(); + } else { + menu.items.find('id', 'menuEndProperties').disable(); + } + } + }, + selection = { + id: 'menuSelection', + items: [ + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action" + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action" + } + ] + }, + evaluation = { + id: 'menuEvaluation', + items: [ + + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + alert("Working on this feature..."); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + alert("Working on this feature..."); + } + } + ] + }, + parallel = { + id: 'menuParallel', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + listeners: {}, + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + } + }, + exclusive = { + id: 'menuExclusive', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: "Delete".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + PMDesigner.RoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + var element = menu.getTargetElement(), propertyOption; + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(element); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + if (menu.items) { + if (element && element.gat_direction) { + propertyOption = menu.items.find("text", "Properties"); + if (propertyOption) { + if (element.gat_direction === 'CONVERGING') { + propertyOption.disable(); + } else { + propertyOption.enable(); + + } + } + } + } + + } + }, + inclusive = { + id: 'menuInclusive', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: 'Properties'.translate(), + icon: 'mafe-menu-properties-action', + onClick: function (menuOption) { + PMDesigner.RoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + var element = menu.getTargetElement(), propertyOption; + PMUI.getActiveCanvas().addToSelection(element); + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + if (menu.items) { + if (element && element.gat_direction) { + propertyOption = menu.items.find("text", "Properties"); + if (propertyOption) { + if (element.gat_direction === 'CONVERGING') { + propertyOption.disable(); + } else { + propertyOption.enable(); + + } + } + } + } + } + }, + complex = { + id: 'menuComplex', + items: [ + typeMenu, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + text: "Properties".translate(), + icon: "mafe-menu-properties-action", + onClick: function (menuOption) { + PMDesigner.complexRoutingRule(menuOption.getMenuTargetElement()); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + group = { + id: 'menuLine', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + dataObject = { + id: 'menuDataObject', + items: [ + { + id: "dataType", + text: "Data Type".translate(), + items: [ + { + id: "dataobject", + text: "Data Empty".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAOBJECT'); + } + }, + { + id: "datainput", + text: "Data Input".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAINPUT'); + } + }, + { + id: "dataoutput", + text: "Data Output".translate(), + onClick: function (menuOption) { + menuOption.getMenuTargetElement().switchDataType('DATAOUTPUT'); + } + } + ] + }, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + dataStore = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + textAnnotation = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }, + intermediate = { + id: 'intermediate', + items: [ + intermediateCatchMarker, + intermediateThrowMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + }, + { + id: "intermediateProperties", + text: "Properties".translate(), + icon: "mafe-menu-delete-action", + onClick: function (menuOption) { + var a = menuOption.getMenuTargetElement(), message_window, + splitedID = menuOption.getMenuTargetElement().getID().split("-"); + switch (a.getEventMarker()) { + case "EMAIL": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.emailEventProperties(menuOption.getMenuTargetElement()); + } + break; + case "TIMER": + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + PMDesigner.timerEventProperties(menuOption.getMenuTargetElement()); + } + break; + default : + var messageEventDefinition, + eventCurrent = menuOption.getMenuTargetElement(); + if (menuMessages[eventCurrent.evn_type][eventCurrent.evn_behavior][eventCurrent.evn_marker] !== undefined) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: 'Information'.translate(), + windowMessageType: 'info', + bodyHeight: 'auto', + message: menuMessages[eventCurrent.evn_type][eventCurrent.evn_behavior][eventCurrent.evn_marker], + footerItems: [ + { + text: 'Ok'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + //open property form + messageEventDefinition = new MessageEventDefinition(eventCurrent); + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + messageEventDefinition = new MessageEventDefinition(eventCurrent); + } + } + } + + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(), + propertyEnabled = ['MESSAGECATCH', 'MESSAGETHROW', 'EMAIL', 'TIMER']; + + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + if (targetElement.evn_behavior === 'CATCH') { + targetElement.menu.getItems()[0].setVisible(true); + targetElement.menu.getItems()[1].setVisible(false); + } else { + targetElement.menu.getItems()[0].setVisible(false); + targetElement.menu.getItems()[1].setVisible(true); + } + + //Enable && Disabled - Properties + if (propertyEnabled.indexOf(targetElement.evn_marker) >= 0) { + + menu.items.find('id', 'intermediateProperties').enable(); + } else { + menu.items.find('id', 'intermediateProperties').disable(); + } + } + }, + boundary = { + id: 'menuDataObject', + items: [ + boundaryCatchMarker, + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + var targetElement = menu.getTargetElement(); + + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + + } + }, + participant = { + id: 'menuDataObject', + items: [ + { + text: "Edit Label".translate(), + icon: "mafe-menu-edit-label-action", + onClick: function (menuOption) { + menuOption.getMenuTargetElement().label.canvas.hideAllFocusLabels(); + menuOption.getMenuTargetElement().label.getFocus(); + } + }, + { + text: 'Delete'.translate(), + icon: 'mafe-menu-delete-action', + onClick: function (menuOption) { + PMUI.getActiveCanvas().removeElements(); + } + } + ], + onShow: function (menu) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().addToSelection(menu.getTargetElement()); + if (PMUI.getActiveCanvas().currentConnection) { + PMUI.getActiveCanvas().currentConnection.hidePortsAndHandlers(); + } + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().hideAllFocusLabels(); + } + }; + var defaults = { + factory: { + products: { + 'CANVAS': canvas, + 'TASK': task, + 'SUB_PROCESS': subProcess, + 'START': start, + 'END': end, + 'SELECTION': selection, + 'EVALUATION': evaluation, + 'PARALLEL': parallel, + 'EXCLUSIVE': exclusive, + 'EVENTBASED': exclusive, + 'EXCLUSIVEEVENTBASED': exclusive, + 'PARALLELEVENTBASED': exclusive, + 'INCLUSIVE': inclusive, + 'COMPLEX': complex, + 'VERTICAL_LINE': group, + 'HORIZONTAL_LINE': group, + 'GROUP': group, + 'LANE': participant, + 'DATAOBJECT': dataObject, + 'DATASTORE': dataStore, + 'TEXT_ANNOTATION': textAnnotation, + 'V_LABEL': textAnnotation, + 'H_LABEL': textAnnotation, + 'INTERMEDIATE': intermediate, + 'BOUNDARY': boundary, + 'PARTICIPANT': participant, + 'POOL': participant + }, + + defaultProduct: 'START' + } + }; + + PMDesigner.contextMenuFactory = new ContextMenu(defaults.factory); + PMDesigner.getMenuFactory = function (type) { + if (prj_readonly === 'true') { + return {}; + } + return PMDesigner.contextMenuFactory.getProduct(type); + }; + /** + * Change task type marker + * @param menuOption + */ + function handlerMarkerType(menuOption) { + var result = true, + tempType = menuOption.getMenuTargetElement().getTaskType(); + menuOption.parent.hide(); + + menuOption.getMenuTargetElement().switchTaskType(menuOption.id.toUpperCase()); + + //validate if act loop type is parallel + if (menuOption.getMenuTargetElement().act_loop_type === "PARALLEL") { + handlerMarkerLoopType(menuOption, tempType) + } + + //to enable save button + PMDesigner.project.updateElement([]); + + } + + /** + * Change marker loop type + * @param menuOption + * @param type + * @returns {boolean} + */ + function handlerMarkerLoopType(menuOption, type) { + var message_window, + loopType = menuOption.id.toUpperCase(), + taskType = menuOption.getMenuTargetElement().act_task_type; + if (typeof type !== 'undefined' && type !== null) { + taskType = type; + } + + if (menuOption.getMenuTargetElement().act_loop_type === "PARALLEL") { + + message_window = new PMUI.ui.MessageWindow({ + id: "handlerMarkerType", + width: 490, + title: 'Parallel Marker Type'.translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: "The configuring of multiple instances will be lost".translate(), + footerItems: [ + { + text: 'Cancel'.translate(), + handler: function () { + menuOption.getMenuTargetElement().switchLoopType('PARALLEL'); + menuOption.getMenuTargetElement().switchTaskType(taskType); + message_window.close(); + return false; + }, + buttonType: "error" + }, + { + text: 'Continue'.translate(), + handler: function () { + try { + if (loopType == "loop" || loopType == "sequential") { + menuOption.getMenuTargetElement().switchLoopType(loopType.toUpperCase()); + } else { + menuOption.getMenuTargetElement().switchLoopType('EMPTY'); + } + PMDesigner.project.updateElement([]); + } catch (e) { + console.error("loop marker error", e.message); + } + message_window.close(); + return true; + }, + buttonType: "success" + } + + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + menuOption.parent.hide(); + menuOption.getMenuTargetElement().switchLoopType(loopType.toUpperCase()); + PMDesigner.project.updateElement([]); + return true; + } + } + +}()); + +(function () { + PMDesigner.shapeFactory = function (type, options) { + var customshape = null, + menuShape, + defaultOptions = null, + canvasName, + name, + id, + classEvent = "start", + pmCanvas = this.canvas, + corona = PMDesigner.defaultCrown, + wildcard; + + canvasName = new IncrementNameCanvas(pmCanvas); + name = canvasName.get(type); + + if (typeof options === 'undefined') { + options = {}; + if (type === 'START_MESSAGE') { + type = 'START'; + classEvent = "message"; + options.evn_marker = 'MESSAGECATCH'; + } + if (type === 'START_TIMER') { + type = 'START'; + classEvent = "timer"; + options.evn_marker = 'TIMER'; + } + + if (type === 'END_MESSAGE') { + type = 'END'; + classEvent = "message"; + options.evn_marker = 'MESSAGETHROW'; + } + if (type === 'END_EMAIL') { + type = 'END'; + classEvent = "email"; + options.evn_marker = 'EMAIL'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_SENDMESSAGE') { + type = 'INTERMEDIATE'; + classEvent = "sendmessage"; + options.evn_marker = 'MESSAGETHROW'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_RECEIVEMESSAGE') { + type = 'INTERMEDIATE'; + classEvent = "receivemessage"; + options.evn_marker = 'MESSAGECATCH'; + options.evn_behavior = 'CATCH'; + } + if (type === 'INTERMEDIATE_EMAIL') { + type = 'INTERMEDIATE'; + classEvent = "email"; + options.evn_marker = 'EMAIL'; + options.evn_behavior = 'THROW'; + } + if (type === 'INTERMEDIATE_TIMER') { + type = 'INTERMEDIATE'; + classEvent = "timer"; + options.evn_marker = 'TIMER'; + } + if (type === 'BOUNDARY_EVENT') { + type = 'BOUNDARY'; + classEvent = "receivemessage"; + options.evn_marker = 'EMPTY'; + options.evn_behavior = 'CATCH'; + } + + switch (type) { + case 'COMPLEX': + case 'PARALLEL': + case 'EXCLUSIVE': + case 'EVENTBASED': + case 'EXCLUSIVEEVENTBASED': + case 'PARALLELEVENTBASED': + case 'INCLUSIVE': + options.gat_type = type; + break; + } + } + if (type === 'DATAOBJECT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'dataobject'; + } + if (type === 'DATAINPUT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'datainput'; + } + if (type === 'DATAOUTPUT') { + type = 'DATAOBJECT'; + options.dat_object_type = 'dataoutput'; + } + + wildcard = [ + { + name: 'wildcard'.translate(), + className: 'mafe-wildcard', + onClick: null, + column: 2 + } + ]; + + switch (type) { + case 'TASK': + defaultOptions = { + canvas: pmCanvas, + width: 150, + height: 75, + act_type: 'TASK', + act_name: name, + act_task_type: 'EMPTY', + act_loop_type: 'EMPTY', + minHeight: 30, + minWidth: 150, + maxHeight: 50, + maxWidth: 170, + container: "activity", + labels: [ + { + message: name, + width: 0, + height: 0, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false + } + ], + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [ + 'mafe-activity-task' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + + ], + connectAtMiddlePoints: true, + resizeBehavior: 'activityResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmactivitydrop", + selectors: [ + "#BOUNDARY_EVENT", + ".mafe-event-boundary", + ".dragConnectHandler" + ] + }, + markers: [ + { + markerType: 'USERTASK', + x: 10, + y: 10, + position: 0, + markerZoomClasses: [] + }, + { + markerType: 'EMPTY', + x: 10, + y: 10, + position: 4, + markerZoomClasses: [] + } + ], + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ], + markerZoomClassesWarning: [ + "mafe-style-warning-marker-7", + "mafe-style-warning-marker-10", + "mafe-style-warning-marker-14", + "mafe-style-warning-marker-17", + "mafe-style-warning-marker-21" + ] + } + } + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateMarkerLayerClasses(defaultOptions); + defaultOptions.markers[1] + .markerZoomClasses = PMDesigner.updateLoopLayerClasses(defaultOptions); + customshape = new PMActivity(defaultOptions); + break; + case 'SUB_PROCESS': + defaultOptions = { + canvas: pmCanvas, + width: 150, + height: 75, + act_type: 'SUB_PROCESS', + act_loop_type: 'EMPTY', + act_name: name, + act_task_type: 'COLLAPSED', + minHeight: 30, + minWidth: 150, + maxHeight: 50, + maxWidth: 170, + container: "activity", + labels: [ + { + message: name, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false + } + ], + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [ + 'mafe-activity-subprocess' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + + ], + connectAtMiddlePoints: true, + resizeBehavior: 'activityResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmactivitydrop", + selectors: [ + "#BOUNDARY_EVENT", + ".mafe-event-boundary", + ".dragConnectHandler" + ] + }, + markers: [ + { + markerType: 'COLLAPSED', + x: 10, + y: 10, + position: 4, + markerZoomClasses: [ + "mafe-collapsed-marker-10", + "mafe-collapsed-marker-15", + "mafe-collapsed-marker-21", + "mafe-collapsed-marker-26", + "mafe-collapsed-marker-31" + ] + } + ], + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateMarkerLayerClasses(defaultOptions); + customshape = new PMActivity(defaultOptions); + break; + case 'START': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'START', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'catch', + evn_message: 'LEAD', + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-start'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-start-empty-16', + 'mafe-event-start-empty-24', + 'mafe-event-start-empty-33', + 'mafe-event-start-empty-41', + 'mafe-event-start-empty-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + case 'INTERMEDIATE': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'INTERMEDIATE', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'CATCH', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-intermediate'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-intermediate-16', + 'mafe-event-intermediate-24', + 'mafe-event-intermediate-33', + 'mafe-event-intermediate-41', + 'mafe-event-intermediate-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + case 'BOUNDARY': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'BOUNDARY', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'CATCH', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + style: { + cssClasses: ['mafe-event-boundary'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-intermediate-16', + 'mafe-event-intermediate-24', + 'mafe-event-intermediate-33', + 'mafe-event-intermediate-41', + 'mafe-event-intermediate-49' + ] + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + drag: 'nodrag' + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + + case 'END': + defaultOptions = { + canvas: pmCanvas, + width: 33, + height: 33, + evn_type: 'END', + evn_name: '', + evn_marker: 'EMPTY', + evn_behavior: 'throw', + labels: [ + { + message: '', + visible: true, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + style: { + cssClasses: ['mafe-event-end'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-event-end-empty-16', + 'mafe-event-end-empty-24', + 'mafe-event-end-empty-33', + 'mafe-event-end-empty-41', + 'mafe-event-end-empty-49' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateLayerClasses(defaultOptions); + customshape = new PMEvent(defaultOptions); + break; + + case 'COMPLEX': + case 'PARALLEL': + case 'EXCLUSIVE': + case 'EVENTBASED': + case 'EXCLUSIVEEVENTBASED': + case 'PARALLELEVENTBASED': + case 'INCLUSIVE': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 13 + } + } + ], + canvas: pmCanvas, + width: 41, + height: 41, + gat_type: 'EXCLUSIVE', + gat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-gateway-exclusive-20', + 'mafe-gateway-exclusive-30', + 'mafe-gateway-exclusive-41', + 'mafe-gateway-exclusive-51', + 'mafe-gateway-exclusive-61' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + validatorMarker: { + width: 12, + height: 12, + position: 2, + errors: { + style: { + markerZoomClassesError: [ + "mafe-style-error-marker-7", + "mafe-style-error-marker-10", + "mafe-style-error-marker-14", + "mafe-style-error-marker-17", + "mafe-style-error-marker-21" + ] + } + } + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.layers[0] + .zoomSprites = PMDesigner.updateGatewayLayerClasses(defaultOptions); + customshape = new PMGateway(defaultOptions); + break; + case 'GROUP': + defaultOptions = { + art_name: name, + art_type: 'GROUP', + canvas: pmCanvas, + width: 200, + height: 100, + style: { + cssClasses: ['mafe-artifact-group'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "background-layer", + priority: 1, + visible: true, + style: { + cssClasses: [ + 'mafe-artifact-group' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'annotationResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + } + }, + labels: [ + { + message: "", + width: 0, + height: 0, + position: { + location: 'top', + diffX: 2, + diffY: 0 + }, + attachEvents: false, + updateParent: true, + style: { + cssClasses: [ + 'mafe-label-annotation' + ] + } + } + ], + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMArtifact(defaultOptions); + break; + case 'TEXT_ANNOTATION': + defaultOptions = { + art_name: name, + art_type: 'TEXT_ANNOTATION', + canvas: pmCanvas, + width: 100, + height: 30, + style: { + cssClasses: ['mafe-artifact-annotation'] + }, + layers: [ + { + x: 0, + y: 0, + layerName: "background-layer", + priority: 1, + visible: true, + style: { + cssClasses: [ + 'mafe-artifact-annotation' + ] + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'annotationResize', + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + } + }, + labels: [ + { + message: name, + width: 0, + height: 0, + position: { + location: 'center', + diffX: 0, + diffY: 0 + }, + attachEvents: false, + updateParent: true + } + ], + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona, + focusLabel: true + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMArtifact(defaultOptions); + break; + + case 'DATAOBJECT': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + canvas: pmCanvas, + width: 33, + height: 41, + dat_type: 'DATAOBJECT', + dat_object_type: "dataobject", + dat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-dataobject-50', + 'mafe-dataobject-75', + 'mafe-dataobject-100', + 'mafe-dataobject-125', + 'mafe-dataobject-150' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + markers: [ + { + markerType: 'USERTASK', + x: 10, + y: 10, + position: 0 + } + ], + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + defaultOptions.markers[0] + .markerZoomClasses = PMDesigner.updateDataMarkerLayerClasses(defaultOptions); + customshape = new PMData(defaultOptions); + break; + + case 'DATASTORE': + defaultOptions = { + labels: [ + { + message: '', + visible: true, + width: 100, + position: { + location: 'bottom', + diffX: 0, + diffY: 0 + } + } + ], + canvas: pmCanvas, + width: 41, + height: 41, + dat_type: 'DATASTORE', + dat_name: '', + layers: [ + { + x: 0, + y: 0, + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssClasses: [] + }, + zoomSprites: [ + 'mafe-datastore-20', + 'mafe-datastore-30', + 'mafe-datastore-41', + 'mafe-datastore-51', + 'mafe-datastore-61' + ] + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + connectAtMiddlePoints: true, + resizeBehavior: 'NoResize', + resizeHandlers: { + type: "Rectangle", + total: 4, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + corona: corona + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMData(defaultOptions); + break; + case 'PARTICIPANT': + defaultOptions = { + width: 500, + height: 130, + "canvas": this, + "connectAtMiddlePoints": false, + topLeft: true, + connectionType: 'dotted', + resizeBehavior: "participantResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmconnection", + selectors: ['.dragConnectHandler'] + }, + "style": { + cssClasses: ["mafe-pool"] + + }, + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + }, + attachEvents: false + } + ], + par_name: name, + corona: corona, + focusLabel: true + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMParticipant(defaultOptions); + break; + case 'POOL': + if (options.lns_name) { + name = options.lns_name; + } else if (options.par_name) { + name = options.par_name; + } + defaultOptions = { + width: 700, + height: 200, + "canvas": pmCanvas, + "connectAtMiddlePoints": false, + topLeft: false, + connectionType: 'dotted', + resizeBehavior: "poolResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmcontainer", + selectors: [ + "#TASK", + "#SUB_PROCESS", + "#START", + "#START_MESSAGE", + "#START_TIMER", + "#END", + "#END_MESSAGE", + "#END_EMAIL", + "#INTERMEDIATE_SENDMESSAGE", + "#INTERMEDIATE_RECEIVEMESSAGE", + "#INTERMEDIATE_EMAIL", + "#INTERMEDIATE_TIMER", + "#EXCLUSIVE", + "#PARALLEL", + "#INCLUSIVE", + "#DATAOBJECT", + "#DATASTORE", + "#TEXT_ANNOTATION", + "#LANE", + "#GROUP", + ".mafe-event-start", + ".mafe-event-intermediate", + ".mafe-event-end", + ".pmui-pmactivity", + ".pmui-pmgateway", + ".pmui-pmdata", + ".mafe-artifact-annotation", + ".mafe-artifact-group", + ".port" + ] + }, + container: "pool", + "style": { + cssClasses: ["mafe-pool"] + + }, + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + }, + { + x: 0, + y: 0, + layerName: "second-layer", + priority: 2, + visible: false, + style: { + cssClasses: [] + } + } + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + }, + attachEvents: false + } + ], + lns_name: name, + focusLabel: true, + corona: corona + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMPool(defaultOptions); + break; + case 'LANE': + defaultOptions = { + width: 500, + height: 200, + "canvas": pmCanvas, + "connectAtMiddlePoints": false, + topLeft: true, + connectionType: 'dotted', + resizeBehavior: "laneResize", + resizeHandlers: { + type: "Rectangle", + total: 8, + resizableStyle: { + cssProperties: { + 'background-color': "rgb(0, 255, 0)", + 'border': '1px solid black' + } + }, + nonResizableStyle: { + cssProperties: { + 'background-color': "white", + 'border': '1px solid black' + } + } + }, + "drop": { + type: "pmcontainer", + selectors: [ + "#TASK", + "#SUB_PROCESS", + "#START", + "#START_MESSAGE", + "#START_TIMER", + "#END", + "#END_MESSAGE", + "#END_EMAIL", + "#INTERMEDIATE_SENDMESSAGE", + "#INTERMEDIATE_RECEIVEMESSAGE", + "#INTERMEDIATE_EMAIL", + "#INTERMEDIATE_TIMER", + "#EXCLUSIVE", + "#PARALLEL", + "#INCLUSIVE", + "#DATAOBJECT", + "#DATASTORE", + "#GROUP", + "#TEXT_ANNOTATION", + ".mafe-event-start", + ".mafe-event-intermediate", + ".mafe-event-end", + ".pmui-pmactivity", + ".pmui-pmgateway", + ".pmui-pmdata", + ".mafe-artifact-annotation", + ".mafe-artifact-group" + ] + }, + container: "lane", + layers: [ + { + layerName: "first-layer", + priority: 2, + visible: true, + style: { + cssProperties: {} + } + } + + ], + labels: [ + { + message: name, + width: 0, + height: 0, + orientation: 'vertical', + position: { + location: 'center-left', + diffX: 15, + diffY: 0 + } + } + ], + lan_name: name, + focusLabel: true + + }; + jQuery.extend(true, defaultOptions, options); + customshape = new PMLane(defaultOptions); + break; + + } + if (customshape && !pmCanvas.readOnly) { + customshape.attachListeners(); + customshape.extendedType = type; + menuShape = PMDesigner.getMenuFactory(type); + customshape.getHTML(); + customshape.setContextMenu(menuShape); + } + return customshape; + }; + PMDesigner.updateLayerClasses = function (options) { + return [ + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-16', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-24', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-33', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-41', + 'mafe-event-' + options.evn_type.toLowerCase() + '-' + options.evn_marker.toLowerCase() + '-49' + ]; + }; + PMDesigner.updateGatewayLayerClasses = function (options) { + return [ + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-20', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-30', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-41', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-51', + 'mafe-gateway-' + options.gat_type.toLowerCase() + '-61' + ]; + }; + PMDesigner.updateMarkerLayerClasses = function (options) { + if (options.act_task_type !== 'EMPTY') { + return [ + "mafe-" + options.act_task_type.toLowerCase() + "-marker-10", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-15", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-21", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-26", + "mafe-" + options.act_task_type.toLowerCase() + "-marker-31" + ]; + } + }; + PMDesigner.updateLoopLayerClasses = function (options) { + if (options.act_loop_type !== 'EMPTY') { + return [ + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-10", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-15", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-21", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-26", + "mafe-" + options.act_loop_type.toLowerCase() + "-marker-31" + ]; + } + }; + PMDesigner.updateDataMarkerLayerClasses = function (options) { + var type = options.dat_object_type.toLowerCase(); + if (type !== 'dataobject') { + return [ + "mafe-" + type + "-marker-10", + "mafe-" + type + "-marker-15", + "mafe-" + type + "-marker-21", + "mafe-" + type + "-marker-26", + "mafe-" + type + "-marker-31" + ]; + } + }; + /** + * Save a process and open the settings + * @param shape + * @param callback + */ + PMDesigner.saveAndOpenSettings= function (shape, callback) { + var splitedID; + + if(shape) { + splitedID = shape.getID().split("-"); + if ((splitedID && splitedID[0] === 'pmui') || PMDesigner.project.isDirty()) { + PMDesigner.restApi.execute({ + data: JSON.stringify(PMDesigner.project.getDirtyObject()), + method: "update", + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE + "/project/" + PMDesigner.project.id, + success: function (data, textStatus, xhr) { + PMDesigner.project.listeners.success(PMDesigner.project, textStatus, data); + PMDesigner.project.isSave = false; + if(callback) { + callback(shape); + } + }, + error: function (xhr, textStatus, errorThrown) { + PMDesigner.project.listeners.failure(that, textStatus, xhr); + PMDesigner.project.isSave = false; + } + }); + } else { + callback(shape); + } + } + + + }; +}()); +PMDesigner.sidebar = []; + +PMDesigner.sidebar.push( + new ToolbarPanel({ + buttons: [ + { + selector: 'TASK', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-task' + ], + tooltip: "Task".translate() + }, + { + selector: 'SUB_PROCESS', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-subprocess' + ], + tooltip: "Sub Process".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'EXCLUSIVE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-exclusive' + ], + tooltip: "Exclusive Gateway".translate() + }, + { + selector: 'PARALLEL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-parallel' + ], + tooltip: "Parallel gateway".translate() + }, + { + selector: 'INCLUSIVE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-gateway-inclusive' + ], + tooltip: "Inclusive Gateway".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'START', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-start' + ], + tooltip: "Start Event".translate() + }, + { + selector: 'START_TIMER', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-event-start-timer' + ], + tooltip: "Start Timer Event".translate() + }, + { + selector: 'INTERMEDIATE_EMAIL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-intermediate-send-mesage' + ], + tooltip: "Intermediate Email Event".translate() + }, + { + selector: 'INTERMEDIATE_TIMER', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-event-intermediate-timer' + ], + tooltip: "Intermediate Timer Event".translate() + }, + { + selector: 'END', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-end' + ], + tooltip: "End Event".translate() + }, + { + selector: 'END_EMAIL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-end-message' + ], + tooltip: "End Email Event ".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'DATAOBJECT', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-data-object' + ], + tooltip: "Data Object".translate() + }, + { + selector: 'DATASTORE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-data-store' + ], + tooltip: "Data Store".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'PARTICIPANT', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-blackbox' + ], + tooltip: " Black Box Pool".translate() + }, + { + selector: 'POOL', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-pool' + ], + tooltip: "Pool".translate() + }, + { + selector: 'LANE', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-lane' + ], + tooltip: "Lane".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'GROUP', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-group' + ], + tooltip: "Group".translate() + }, + { + selector: 'TEXT_ANNOTATION', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-annotation' + ], + tooltip: "Text Annotation".translate() + } + ] + }), + new ToolbarPanel({ + buttons: [ + { + selector: 'LASSO', + className: [ + 'mafe-designer-icon', + 'mafe-toolbar-lasso' + ], + tooltip: "Lasso".translate() + } + + ] + }) +); +ListDynaform = function () { + this.superTitle = 'Dynaforms'.translate(); + this.tableContainerHeight = 374; + this.buttonCreate = null; + this.onCreate = new Function(); + this.onShowId = new Function(); + this.onEdit = new Function(); + this.onDel = new Function(); + this.loaded = false; + this.clickedClose = true; + Mafe.Grid.call(this); + ListDynaform.prototype.init.call(this); +}; +ListDynaform.prototype = new Mafe.Grid(); +ListDynaform.prototype.init = function () { + var that = this; + that.buttonCreate = new PMUI.ui.Button({ + id: 'dynaformButtonNew', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: {cssClasses: ['mafe-button-create']}, + handler: function (event) { + that.onCreate(event); + } + }); + that.buttonCreate.defineEvents(); + that.setID('idListDynaform'); + that.setColumns([{ + id: 'copyuid', + title: 'Show ID'.translate(), + dataType: 'button', + buttonLabel: 'Show ID'.translate(), + buttonStyle: {cssClasses: ['mafe-button-show']}, + onButtonClick: function (row, grid) { + that.onShowId(row, grid); + } + }, { + id: 'dynaformGridPanelTitle', + title: 'Title'.translate(), + dataType: 'string', + width: '460px', + alignmentCell: 'left', + sortable: true, + columnData: 'dyn_title' + }, { + id: 'dynaformGridPanelEdit', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-edit']}, + buttonLabel: function (row, data) { + return 'Edit'.translate(); + }, + onButtonClick: function (row, grid) { + that.onEdit(row, grid); + } + }, { + id: 'dynaformGridPanelDelete', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-delete']}, + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + onButtonClick: function (row, grid) { + that.onDel(row, grid); + } + } + ]); +}; +ListDynaform.prototype.createHTML = function () { + Mafe.Grid.prototype.createHTML.call(this); + this.dom.toolbar.appendChild(this.buttonCreate.getHTML()); + return this.html; +}; +ListDynaform.prototype.load = function () { + var that = this; + that.clearItems(); + (new PMRestClient({ + endpoint: 'dynaforms', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.setDataItems(response); + that.sort('dyn_title', 'asc'); + that.loaded = true; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + that.loaded = false; + }, + messageError: 'There are problems getting the list of dynaforms, please try again.'.translate() + })).executeRestClient(); +}; +ListDynaform.prototype.getSuperTitle = function () { + return this.superTitle; +}; + +BlankDynaform = function () { + this.superTitle = 'Create Blank Dynaform'.translate(); + this.onSave = new Function(); + this.onSaveOpen = new Function(); + this.onCancel = new Function(); + this.buttons = null; + Mafe.Form.call(this); + BlankDynaform.prototype.init.call(this); +}; +BlankDynaform.prototype = new Mafe.Form(); +BlankDynaform.prototype.init = function () { + var that = this; + that.setID('formDynaformInformation'); + that.setTitle('Dynaform Information'.translate()); + that.setItems([{ + id: 'formDynaformInformationTitle', + pmType: 'text', + label: 'Title'.translate(), + value: '', + maxLength: 255, + placeholder: 'The Dynaform title'.translate(), + name: 'dyn_title', + required: true, + controlsWidth: 303 + }, { + id: 'formDynaformInformationDescription', + pmType: 'textarea', + rows: 200, + name: 'dyn_description', + width: 200, + label: 'Description'.translate(), + style: {cssClasses: ['mafe-textarea-resize']} + } + ]); + that.buttons = [ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSaveOpen', + text: 'Save & Open'.translate(), + buttonType: 'success', + handler: function () { + that.onSaveOpen(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSave', + text: 'Save'.translate(), + buttonType: 'success', + handler: function () { + that.onSave(); + } + }) + ]; +}; +BlankDynaform.prototype.getButtons = function () { + return this.buttons; +}; +BlankDynaform.prototype.getSuperTitle = function () { + return this.superTitle; +}; + +Dynaform = function (settings) { + this.listDynaform = null; + this.blankDynaform = null; + Mafe.Window.call(this, settings); + Dynaform.prototype.init.call(this, settings); +}; +Dynaform.prototype = new Mafe.Window(); +Dynaform.prototype.init = function (settings) { + var that = this; + that.listDynaform = new ListDynaform(); + that.setOnBeforeCloseHandler(function () { + this.clickedClose = true; + if (!that.blankDynaform.isVisible()) { + that.close(); + } else { + that.blankDynaform.onCancel(); + } + }); + that.listDynaform.load(); + that.listDynaform.onShowId = function (row, grid) { + showUID(row.getData().dyn_uid); + }; + that.listDynaform.onCreate = function () { + that.resetView(); + that.setTitle(that.blankDynaform.getSuperTitle()); + that.blankDynaform.setVisible(true); + that.setButtons(that.blankDynaform.getButtons()); + }; + that.listDynaform.onEdit = function (row, grid) { + that.edit(row, grid); + }; + that.listDynaform.onDel = function (row, grid) { + that.del(row, grid); + }; + + that.blankDynaform = new BlankDynaform(); + that.blankDynaform.onSave = function () { + that.saveBlank(false); + }; + that.blankDynaform.onSaveOpen = function () { + that.saveBlank(true); + }; + that.blankDynaform.onCancel = function () { + $("input,select,textarea").blur(); + var title = ""; + that.blankDynaform.loseChanges(title); + }; + that.blankDynaform.onYesConfirmCancellation = function () { + if (that.clickedClose) { + that.close(); + } + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + }; + + that.addItem(that.listDynaform); + that.addItem(that.blankDynaform); + + that.open(); + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + + // hard coding dyn_title textfield because enter keypress reload the current page + if (that.blankDynaform.getItems()[0] + && that.blankDynaform.getItems()[0].controls[0] + && that.blankDynaform.getItems()[0].controls[0].html) { + $(that.blankDynaform.getItems()[0].controls[0].html).keypress(function (e) { + if (e.which == 13) { + e.preventDefault(); + } + }); + } +}; +Dynaform.prototype.saveBlank = function (open) { + var that = this, + data, + restClient, + flagAux; + + if (!that.blankDynaform.isValid()) { + flagAux = that.blankDynaform.visible; + } else { + flagAux = that.blankDynaform.isValid(); + } + + if (flagAux) { + if (getData2PMUI(that.blankDynaform.html).dyn_title == "") { + return false; + } + } + + data = getData2PMUI(that.blankDynaform.html); + data['dyn_version'] = 2; + data['dyn_type'] = 'xmlform'; + restClient = new PMRestClient({ + endpoint: 'dynaform', + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + if (open) { + that.close(); + try { + PMUI.getActiveCanvas().emptyCurrentSelection(); + } catch (msg) { + } + PMDesigner.dynaformDesigner(response); + } else { + that.resetView(); + that.setTitle(that.listDynaform.getSuperTitle()); + that.listDynaform.setVisible(true); + that.listDynaform.load(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems creating the dynaform, please try again.'.translate(), + messageSuccess: 'Dynaform saved successfully'.translate(), + flashContainer: that.listDynaform + }); + restClient.executeRestClient(); +}; +Dynaform.prototype.edit = function (row, grid) { + this.close(); + try { + PMUI.getActiveCanvas().emptyCurrentSelection(); + } catch (msg) { + } + PMDesigner.dynaformDesigner(row.getData()); +}; +Dynaform.prototype.del = function (row, grid) { + var that = this, + confirmDeletion = new Mafe.ConfirmDeletion(); + confirmDeletion.setMessage('Do you want to delete this DynaForm?'.translate()); + confirmDeletion.setTitle("Dynaform".translate()); + confirmDeletion.onDelete = function () { + var restClient = new PMRestClient({ + endpoint: 'dynaform/' + row.getData().dyn_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.listDynaform.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems deleting the dynaform, please try again.'.translate(), + messageSuccess: 'Dynaform deleted successfully'.translate(), + flashContainer: that.listDynaform + }); + restClient.executeRestClient(); + }; +}; + +(function () { + PMDesigner.dynaform = function () { + var dynaform = new Dynaform(); + }; + PMDesigner.dynaform.create = function () { + var dynaform = new Dynaform(); + dynaform.resetView(); + dynaform.setTitle(dynaform.blankDynaform.getSuperTitle()); + dynaform.blankDynaform.setVisible(true); + dynaform.setButtons(dynaform.blankDynaform.getButtons()); + }; +}()); + +/** + * Updates the granular export feature after enabled features are loaded. + */ +var navbarExportUpdate = function () { + //Code export - export granular (handler) + var handlerExportNormal = function () { + var ws = enviromentVariables('WORKSPACE'); + if (!HTTP_SERVER_HOSTNAME) { + HTTP_SERVER_HOSTNAME = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); + } + location.href = HTTP_SERVER_HOSTNAME + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + "/export?access_token=" + PMDesigner.project.keys.access_token; + }; + + var handlerExportGranular = function () { + var optionExportNormal = $("
" + "Normal".translate() + "
"), + optionExportGranular = $("
" + "Custom".translate() + "
"), + menuExport = $("").hide(), + $item = $("#idNavBar").find(".mafe-button-export-process").closest("li"); + + menuExport.append(optionExportNormal).append(optionExportGranular); + if (!$item.find(".mafe-button-menu-container").length) { + $item.append(menuExport); + } + $(".ui-tooltip").hide(); + $(menuExport).slideToggle("slow"); + $item.on("mouseleave", function (e) { + if ($(this).find(".mafe-button-menu-container").eq(0).is(":visible")) { + var that = this; + $(that).find(".mafe-button-menu-container").remove(); + } + }); + + $(".sub-nav").on("click", ".normalExport", function (event) { + var ws = enviromentVariables('WORKSPACE'), + locationOrigin; + if (!window.location.origin) { + locationOrigin = window.location.protocol + "//" + window.location.hostname + + (window.location.port ? ':' + window.location.port : ''); + } else if (typeof HTTP_SERVER_HOSTNAME !== 'undefined') { + locationOrigin = HTTP_SERVER_HOSTNAME; + } else { + locationOrigin = window.location.origin; + } + location.href = locationOrigin + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + "/export?access_token=" + PMDesigner.project.keys.access_token; + }); + + $(".sub-nav").on("click", ".granularExport", function (event) { + PMDesigner.granularProcessExport(); + }); + }; + if (inArray("jXsSi94bkRUcVZyRStNVExlTXhEclVadGRRcG9xbjNvTWVFQUF3cklKQVBiVT0=", ENABLED_FEATURES)) { + handler = handlerExportGranular; + } else { + handler = handlerExportNormal; + } + +}; + +function inArray(needle, haystack) { + var i, + length = haystack.length; + for (i = 0; i < length; i += 1) { + if (haystack[i] == needle) return true; + } + return false; +} + +var defaultNavbarPanelMenus = { + array: [], + init: function () { + var closeVar = { + id: 'closeButton', + name: 'Close', + htmlProperty: { + id: 'closeButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-close', + child: [ + { + element: 'span', + class: 'mafe-button-close' + } + ] + } + + ] + }, + actions: { + selector: ".mafe-button-close", + tooltip: "Close".translate(), + execute: true, + handler: function () { + var message_window, + browser = PMDesigner.getBrowser(), + url = parent.location.href; + + if (PMDesigner.project.isDirty() && !PMDesigner.project.isSave) { + var message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: "cancelSaveSubprocPropertiesWin", + title: PMDesigner.project.projectName, + message: 'Save your changes and exit ?'.translate(), + footerItems: [ + { + pmType: 'label', + text: ' ' + }, { + text: "No".translate(), + handler: function () { + PMDesigner.project.isClose = true; + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + window.close(); + } else { + parent.location.href = url; + } + }, + buttonType: "error" + }, + + { + text: "Yes".translate(), + handler: function () { + PMDesigner.project.saveClose(true); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + window.close(); + } else { + parent.location.href = url; + } + } + } + } + }, + helpVar = { + id: 'helpButton', + name: 'Help', + htmlProperty: { + id: 'helpButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-help', + child: [ + { + element: 'span', + class: 'mafe-toolbar-help' + } + ] + } + ] + }, + actions: { + selector: ".mafe-toolbar-help", + tooltip: "Help".translate(), + execute: true, + handler: function () { + var canvas = PMUI.getActiveCanvas(); + PMDesigner.helper.startIntro(); + if (canvas && canvas.getHTML()) { + canvas.getHTML().classList.remove("pmui-pmcanvas"); + } + } + } + }, + saveVar = { + id: 'saveButton', + name: 'Save', + htmlProperty: { + id: 'saveButton', + element: 'li', + class: 'mafe-save-process', + child: [ + { + element: 'a', + class: 'mafe-button-save' + }, + { + element: 'span', + class: 'mafe-button-menu', + child: [ + { + element: 'img', + src: '/lib/img/caret-down.png' + } + ] + } + ] + }, + actions: { + selector: ".mafe-button-save", + tooltip: "Save process".translate(), + label: { + text: "Save".translate() + }, + execute: true, + handler: function () { + if (PMDesigner.project.isDirty() && PMDesigner.project.isSave === false) { + PMDesigner.project.isSave = true; + document.getElementsByClassName("mafe-save-process")[0].childNodes[0].text = "Saving"; + PMDesigner.project.save(true); + } + } + } + }, + exportButton = { + id: 'exportButton', + name: 'ExportButton', + htmlProperty: { + id: 'exportButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-export-process' + } + ] + }, + actions: { + selector: ".mafe-button-export-process", + tooltip: "Export process".translate(), + label: { + text: "Export Process".translate() + }, + execute: true, + handler: function () { + handler(); + } + } + }, + exportBpmnButton = { + id: 'exportBpmnButton', + name: 'ExportBpmn', + htmlProperty: { + id: 'exportBpmnButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-export-bpmn-process' + } + ] + }, + actions: { + selector: ".mafe-button-export-bpmn-process", + tooltip: "Export Diagram ".translate(), + label: { + text: "Export Diagram".translate() + }, + execute: false, + handler: function () { + } + } + }, + zoomVar = { + id: 'zoomOptions', + name: 'Zoom', + htmlProperty: { + id: 'zoomOptions', + element: 'li', + child: [ + { + element: 'span', + class: 'mafe-zoom-options' + } + ] + }, + actions: { + id: 'zoomOptions', + spanclass: 'mafe-zoom-options', + actions: 'zoom' + }, + aditionalAction: { + execute: PMDesigner.ApplyOptionsZoom() + } + }, + undo = { + id: 'undoButton', + name: 'Undo', + htmlProperty: { + id: 'undoButton', + element: 'li', + class: 'mafe-undo', + child: [ + { + element: 'b', + class: 'mafe-action-undo', + child: [ + { + element: 'span', + class: 'mafe-button-undo' + } + ] + } + ] + }, + actions: { + selector: ".mafe-action-undo", + tooltip: "Undo Action".translate(), + label: { + text: '' + }, + execute: true, + handler: function () { + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().commandStack.undo(); + } + } + }, + redo = { + id: 'redoButton', + name: 'Redo', + htmlProperty: { + id: 'redoButton', + element: 'li', + class: 'mafe-redo', + child: [ + { + element: 'b', + class: 'mafe-action-redo', + child: [ + { + element: 'span', + class: 'mafe-button-redo' + } + ] + } + ] + }, + actions: { + selector: ".mafe-action-redo", + tooltip: "Redo Action".translate(), + label: { + text: '' + }, + execute: true, + handler: function () { + PMUI.getActiveCanvas().hideDragConnectHandlers(); + PMUI.getActiveCanvas().commandStack.redo(); + } + } + }, + fullScreen = { + id: 'fullScreenButton', + name: 'FullScreen', + htmlProperty: { + id: 'fullScreenButton', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-button-fullscreen' + } + ] + }, + actions: { + selector: ".mafe-button-fullscreen", + tooltip: "Full Screen".translate(), + execute: true, + handler: function () { + PMDesigner.fullScreen.toggle(this); + } + } + }; + navbarExportUpdate(); + this.array = [ + closeVar, + helpVar, + saveVar, + exportButton, + exportBpmnButton, + zoomVar, + undo, + redo, + fullScreen + ]; + }, + /** + * Get Array of Items of the NavBarPanelMenu + * @returns {Array} + */ + getNavBarPanelMenu: function () { + return this.array; + }, + /** + * Adds one Item To NavBarPanelMenu + * @param item + */ + addItemToNavBarPanelMenu: function (item) { + this.array.push(item); + } +}; + +defaultNavbarPanelMenus.init(); + +/** + * @class PMUI.menu.navBarPanel + * Handles the navbar panel of designer, + * contains all menus for content elements. + * + * @param {array} items Default items + * @constructor + */ +var NavbarPanel = function (items) { + NavbarPanel.prototype.init.call(this, items); +}; + +/** + * Initializes the object. + * + * @param {array} items Array with default values. + */ +NavbarPanel.prototype.init = function (items) { + var item; + if (typeof items === 'undefined') { + items = defaultNavbarPanelMenus.getNavBarPanelMenu(); + } + this.items = new PMUI.util.ArrayList(); + for (item in items) { + if (!items.hasOwnProperty(item)) { + continue; + } + this.items.insert(items[item]); + } +}; + +/** + * This method renders HTML and actions into designer + * + */ +NavbarPanel.prototype.show = function () { + var item = null, + i, + max; + if (PMDesigner.navbarPanel.items instanceof Object) { + for (i = 0, max = PMDesigner.navbarPanel.items.getSize(); i < max; i += 1) { + item = PMDesigner.navbarPanel.items.get(i); + if (typeof item.htmlProperty !== "undefined") { + PMDesigner.navbarPanel.buildHtmlElement(item.htmlProperty); + } + if (typeof item.aditionalAction !== "undefined") { + item.aditionalAction; + } + if (typeof item.actions !== "undefined") { + new PMAction(item.actions); + } + } + } else { + throw new Error('cannot show the elements of the List'); + } + +}; + +/** + * This method creates a html element button into the navBar Panel + * @param {Object} element + * @param {HTMLElement} before + */ +NavbarPanel.prototype.buildHtmlElement = function (element, before) { + var ul = document.getElementById('idNavBarList'), + htmlElement; + if ((typeof ul !== undefined) && (ul !== null)) { + htmlElement = this.getNodeChild(element, ul); + if (typeof before !== "undefined") { + before = document.getElementById(before); + ul.insertBefore(htmlElement, before); + } else { + ul.appendChild(htmlElement); + } + } + +}; + +/** + * This method assembling dependent html elements to the button + * @param {Object} nodeChild + * @param {HTMLElement} nodePattern + * @returns {Element} + */ +NavbarPanel.prototype.getNodeChild = function (nodeChild, nodePattern) { + var node = document.createElement(nodeChild.element), + i; + if (typeof nodeChild.id !== 'undefined') { + node.setAttribute("id", nodeChild.id); + } + if (nodeChild.element === 'a') { + node.setAttribute("href", "return;"); + } + if (typeof(nodeChild.class) !== 'undefined') { + node.setAttribute("class", nodeChild.class); + } + if (typeof(nodeChild.child) !== 'undefined' && nodeChild.child instanceof Array) { + for (i = 0; i < nodeChild.child.length; i += 1) { + this.getNodeChild(nodeChild.child[i], node); + } + } + if (typeof(nodeChild.src) !== 'undefined') { + node.setAttribute("src", nodeChild.src); + } + if ((typeof nodePattern !== undefined) && (nodePattern !== null) && nodePattern.localName !== 'ul') { + nodePattern.appendChild(node); + } + return node; +}; + +/** + * This method removes an html element for the + * NavBar panel array List and delete the HTML from the designer. + * @param {String} idButton + */ +NavbarPanel.prototype.deleteHtmlElement = function (idButton) { + var btn = document.getElementById(idButton), + element = PMDesigner.contentControl.items.find("id", idButton), + remove = PMDesigner.contentControl.items.remove(element); + if (typeof btn !== 'undefined' && remove === true) { + btn.parentNode.removeChild(btn); + } else { + throw new Error('Cannot find the specified button: ' + idButton + '. Please, review this'); + } +}; + +/** + * NavbarPanel get an instance + * @type {NavbarPanel} + */ +PMDesigner.navbarPanel = new NavbarPanel(defaultNavbarPanelMenus.getNavBarPanelMenu()); + +function defaultContentControlMenus() { + var variableCreate = { + id: 'variableCreate', + name: 'Variable', + htmlProperty: { + id: 'variableCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-variable' + }, + { + element: 'a', + class: 'btn_create mafe-menu-variable-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-variable", + label: { + text: "Variables".translate() + }, + execute: true, + handler: function () { + PMDesigner.variables(); + } + }, + createAction: { + selector: ".mafe-menu-variable-create", + label: { + selector: ".mafe-menu-variable-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.variables.create(); + } + } + }, + messageType = { + id: 'messageTypeCreate', + name: 'MessageType', + htmlProperty: { + id: 'messageTypeCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-messagetype' + }, + { + element: 'a', + class: 'btn_create mafe-menu-messagetype-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-messagetype", + label: { + text: "Message Types".translate() + }, + execute: true, + handler: function () { + PMDesigner.messageType(); + } + }, + createAction: { + selector: ".mafe-menu-messagetype-create", + label: { + selector: ".mafe-menu-messagetype-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.messageType.create(); + } + } + }, + dynaformCreate = { + id: 'dynaformCreate', + name: 'Dynaform', + htmlProperty: { + id: 'dynaformCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-dynaform' + }, + { + element: 'a', + class: 'btn_create mafe-menu-dynaform-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-dynaform", + label: { + text: "Dynaforms".translate() + }, + execute: true, + handler: function () { + PMDesigner.dynaform(); + } + }, + createAction: { + selector: ".mafe-menu-dynaform-create", + label: { + selector: ".mafe-menu-dynaform-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.dynaform.create(); + } + } + }, + inputDocumentCreate = { + id: 'inputDocumentCreate', + name: 'InputDocument', + htmlProperty: { + id: 'inputDocumentCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-inputdocuments' + }, + { + element: 'a', + class: 'btn_create mafe-menu-inputdocuments-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-inputdocuments", + label: { + text: "Input Documents".translate() + }, + execute: true, + handler: function () { + var inputDocument = new InputDocument(); + inputDocument.build(); + } + }, + createAction: { + selector: ".mafe-menu-inputdocuments-create", + label: { + selector: ".mafe-menu-inputdocuments-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + var inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.method = "POST"; + } + } + }, + outputDocumentCreate = { + id: 'outputDocumentCreate', + name: 'OutputDocument', + htmlProperty: { + id: 'outputDocumentCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-outputdocuments' + }, + { + element: 'a', + class: 'btn_create mafe-menu-outputdocuments-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-outputdocuments", + label: { + text: "Output Documents".translate() + }, + execute: true, + handler: function () { + PMDesigner.output(); + } + }, + createAction: { + selector: ".mafe-menu-outputdocuments-create", + label: { + selector: ".mafe-menu-outputdocuments-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.output(); + PMDesigner.output.create(); + } + } + }, + triggerCreate = { + id: 'triggerCreate', + name: 'Trigger', + htmlProperty: { + id: 'triggerCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-triggers' + }, + { + element: 'a', + class: 'btn_create mafe-menu-triggers-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-triggers", + label: { + text: "Triggers".translate() + }, + execute: true, + handler: function () { + PMDesigner.trigger(); + } + }, + createAction: { + selector: ".mafe-menu-triggers-create", + label: { + selector: ".mafe-menu-triggers-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.trigger(); + PMDesigner.trigger.create(); + } + } + }, + reportTableCreate = { + id: 'reportTableCreate', + name: 'ReportTable', + htmlProperty: { + id: 'reportTableCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-reporttables' + }, + { + element: 'a', + class: 'btn_create mafe-menu-reporttables-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-reporttables", + label: { + text: "Report Tables".translate() + }, + execute: true, + handler: function () { + PMDesigner.reporttable(); + } + }, + createAction: { + selector: ".mafe-menu-reporttables-create", + label: { + selector: ".mafe-menu-reporttables-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.reporttable(); + PMDesigner.reporttable.create(); + } + } + }, + databaseCreate = { + id: 'databaseCreate', + name: 'Database', + htmlProperty: { + id: 'databaseCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-databaseconnections' + }, + { + element: 'a', + class: 'btn_create mafe-menu-databaseconnections-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-databaseconnections", + label: { + text: "Database Connections".translate() + }, + execute: true, + handler: function () { + PMDesigner.database(); + } + }, + createAction: { + selector: ".mafe-menu-databaseconnections-create", + label: { + selector: ".mafe-menu-databaseconnections-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.database.create(); + } + } + }, + templateCreate = { + id: 'templateCreate', + name: 'TemplateCreate', + htmlProperty: { + id: 'templateCreate', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-templates' + }, + { + element: 'a', + class: 'btn_create mafe-menu-templates-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-templates", + label: { + text: "Templates".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager("templates", "CREATION_NORMAL"); + } + }, + createAction: { + selector: ".mafe-menu-templates-create", + label: { + selector: ".mafe-menu-templates-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager.createFirst("templates", "CREATION_MORE"); + } + } + }, + menuPublic = { + id: 'menuPublic', + name: 'MenuPublic', + htmlProperty: { + id: 'menuPublic', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-public' + }, + { + element: 'a', + class: 'btn_create mafe-menu-public-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-public", + label: { + text: "Public Files".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager("public", "CREATION_NORMAL"); + } + }, + createAction: { + selector: ".mafe-menu-public-create", + label: { + selector: ".mafe-menu-public-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.ProcessFilesManager.createFirst("public", "CREATION_MORE"); + } + } + }, + menuPermission = { + id: 'menuPermission', + name: 'MenuPermission', + htmlProperty: { + id: 'menuPermission', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-permissions' + }, + { + element: 'a', + class: 'btn_create mafe-menu-permissions-create', + child: [ + { + element: 'span' + } + ] + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-permissions", + label: { + text: "Permissions".translate() + }, + execute: true, + handler: function () { + PMDesigner.processPermissions(); + } + }, + createAction: { + selector: ".mafe-menu-permissions-create", + label: { + selector: ".mafe-menu-permissions-create span", + text: "Create".translate() + }, + execute: true, + handler: function () { + PMDesigner.processPermissions.create(); + } + } + }, + menuCaseTracker = { + id: 'menuCaseTracker', + name: 'CaseTracker', + htmlProperty: { + id: 'menuCaseTracker', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-casetracker' + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-casetracker", + label: { + text: "Case Tracker".translate() + }, + execute: true, + handler: function () { + PMDesigner.caseTracker(); + } + } + }, + menuSupervisor = { + id: 'menuSupervisor', + name: 'MenuSupervisor', + htmlProperty: { + id: 'menuSupervisor', + element: 'li', + child: [ + { + element: 'a', + class: 'mafe-menu-supervisors' + } + ] + }, + actions: { + type: 'button', + selector: ".mafe-menu-supervisors", + label: { + text: "Supervisors".translate() + }, + execute: true, + handler: function () { + PMDesigner.assigmentSupervisors(); + } + } + }; + + return [ + variableCreate, + messageType, + dynaformCreate, + inputDocumentCreate, + outputDocumentCreate, + triggerCreate, + reportTableCreate, + databaseCreate, + templateCreate, + menuPublic, + menuPermission, + menuCaseTracker, + menuSupervisor + ]; +}; + +/** + * @class PMUI.menu.contentControl + * Handles the content control menu of designer, + * contains all menus for content elements. + * + * @param {array} items Default items + * @constructor + */ +var ContentControl = function (items) { + ContentControl.prototype.init.call(this, items); +}; + +/** + * Initializes the object. + * + * @param {array} items Array with default values. + */ +ContentControl.prototype.init = function (items) { + this.items = new PMUI.util.ArrayList(); + if (typeof items === 'undefined') { + items = defaultContentControlMenus(); + } + for (var item in items) { + if (!items.hasOwnProperty(item)) { + continue; + } + this.items.insert(items[item]); + } +}; + +/** + * This method renders HTML and actions into designer + * + */ +ContentControl.prototype.show = function () { + var item = null, + i, + max; + if (this.items instanceof Object) { + for (i = 0, max = this.items.getSize(); i < max; i += 1) { + item = this.items.get(i); + if (typeof item.htmlProperty !== "undefined") { + this.buildHtmlElement(item.htmlProperty); + } + if (typeof item.actions !== "undefined") { + new PMAction(item.actions); + } + if (typeof item.createAction !== "undefined") { + new PMAction(item.createAction); + } + } + } else { + throw new Error('Cannot show the elements of the List'); + } +}; + +/** + * This method creates a html element button into the content + * control panel. + * @param {Object} element + * @param {HTMLElement} before + */ +ContentControl.prototype.buildHtmlElement = function (element, before) { + var ul = document.getElementById('contentControlList'), + htmlElement; + if ((typeof ul !== undefined) && (ul !== null)) { + htmlElement = this.getNodeChild(element, ul); + if (typeof before !== "undefined") { + before = document.getElementById(before); + ul.insertBefore(htmlElement, before); + } else { + ul.appendChild(htmlElement); + } + } + +}; + +/** + * This method assembling dependent html elements to the button + * @param {Object} nodeChild + * @param {HTMLElement} nodePattern + * @returns {Element} + */ +ContentControl.prototype.getNodeChild = function (nodeChild, nodePattern) { + var node = document.createElement(nodeChild.element), + i; + if (typeof nodeChild.id !== 'undefined') { + node.setAttribute("id", nodeChild.id); + } + if (nodeChild.element === 'a') { + node.setAttribute("href", "#"); + } + if (typeof(nodeChild.class) !== 'undefined') { + node.setAttribute("class", nodeChild.class); + } + if (typeof(nodeChild.child) !== 'undefined' && nodeChild.child instanceof Array) { + for (i = 0; i < nodeChild.child.length; i += 1) { + this.getNodeChild(nodeChild.child[i], node); + } + } + if (typeof(nodeChild.src) !== 'undefined') { + node.setAttribute("src", nodeChild.src); + } + if ((typeof nodePattern !== undefined) && (nodePattern !== null) && nodePattern.localName !== 'ul') { + nodePattern.appendChild(node); + } + return node; +}; + +/** + * This method removes an html element for the + * Content Control panel array List and delete the HTML from the designer. + * @param {String} idButton + */ +ContentControl.prototype.deleteHtmlElement = function (idButton) { + var btn = document.getElementById(idButton), + element = this.items.find("id", idButton), + remove = this.items.remove(element); + if (typeof btn !== 'undefined' && remove === true) { + btn.parentNode.removeChild(btn); + } else { + throw new Error('Cannot find the specified button: ' + idButton + '. Please, review this'); + } +}; + +/** + * ContentControl get an instance + * @type {ContentControl} + */ +PMDesigner.contentControl = new ContentControl(defaultContentControlMenus()); + +/** + * Input Document module + * @param options + * @constructor + */ +var InputDocument = function (options) { + this.winMainInputDocument = null; + this.externalType = false; + this.inputDocumentOriginDataForUpdate = {}; + this.windowDialog = null; + this.assignAccordion = null; + this.clickedClose = true; + this.onUpdateInputDocumentHandler = null; + InputDocument.prototype.init.call(this, options); +}; +/** + * set close modulo InputDocument constructor + * @param handler, the callback function + */ +InputDocument.prototype.setOnUpdateInputDocumentHandler = function (handler) { + if (typeof handler === "function") { + this.onUpdateInputDocumentHandler = handler; + } + return this; +}; +/** + * constructor + * @param options + */ +InputDocument.prototype.init = function (options) { + var defaults = { + onUpdateInputDocumentHandler: null + }; + $.extend(true, defaults, options); + this.setOnUpdateInputDocumentHandler(defaults.onUpdateInputDocumentHandler); + return this; +}; + +/** + * Puts input document using rest proxy, to update data + * @param inputDocumentUid + * @param data + */ +InputDocument.prototype.inputDocumentPutRestProxy = function (inputDocumentUid, data) { + var that = this, + restProxy; + + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + var message; + if (!that.externalType) { + if (typeof flagInputDocument != 'undefined' && flagInputDocument) { + that.winMainInputDocument.close(); + return; + } + that.inputDocumentsGetRestProxy(); + that.openGridPanelInMainWindow(); + } else { + that.winMainInputDocument.close(); + message = new PMUI.ui.FlashMessage({ + message: 'Input Document edited correctly.'.translate(), + duration: 3000, + severity: 'success', + appendTo: that.windowDialog + }); + message.show(); + } + if (typeof that.onUpdateInputDocumentHandler === "function") { + that.onUpdateInputDocumentHandler(data, that); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document updated successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Deletes an input document + * @param inputDocumentUid + */ +InputDocument.prototype.inputDocumentDeleteRestProxy = function (inputDocumentUid) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.inputDocumentsGetRestProxy(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document deleted successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Creates an input document using rest proxy + * @param data + */ +InputDocument.prototype.inputDocumentPostRestProxy = function (data) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document", + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + that.inputDocumentsGetRestProxy(); + that.openGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Input Document saved successfully'.translate(), + flashContainer: that.grdpnlInputDocument + }); + restProxy.executeRestClient(); +}; +/** + * Gets all input documents to populate the grid + */ +InputDocument.prototype.inputDocumentsGetRestProxy = function () { + var that = this, + restProxy = new PMRestClient({ + endpoint: 'input-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.grdpnlInputDocument.setDataItems(response); + that.grdpnlInputDocument.sort('inp_doc_title', 'asc'); + if (PMVariables.prototype.isWindowActive()) { + PMVariables.prototype.setInputDocumentsFromIDModule(PMUI.getPMUIObject(inp_doc_uid), response); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +/** + * Gets an specific input document data to edit it + * @param inputDocumentUid + */ +InputDocument.prototype.inputDocumentFormGetProxy = function (inputDocumentUid) { + var that = this, + restProxy; + restProxy = new PMRestClient({ + endpoint: "input-document/" + inputDocumentUid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var data = response; + that.method = "PUT"; + that.openFormForEditInMainWindow(data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; + +/** + * Open Edit form and sets to main windows + * @param inputDocumentData + */ +InputDocument.prototype.openFormForEditInMainWindow = function (inputDocumentData) { + var that = this; + + that.inputDocumentOriginDataForUpdate = inputDocumentData; + that.inputDocumentUid = inputDocumentData.inp_doc_uid; + that.frmInputDocument.getField('inp_doc_original').setValue(""); + that.winMainInputDocument.setTitle("Edit Input Document".translate()); + + that.frmInputDocument.getField('inp_doc_title').setValue(inputDocumentData.inp_doc_title); + that.frmInputDocument.getField('inp_doc_description').setValue(inputDocumentData.inp_doc_description); + that.frmInputDocument.getField('inp_doc_form_needed').setValue(inputDocumentData.inp_doc_form_needed); + that.frmInputDocument.getField('inp_doc_original').setValue(inputDocumentData.inp_doc_original); + + if (inputDocumentData.inp_doc_form_needed !== "VIRTUAL") { + that.frmInputDocument.getField('inp_doc_original').setVisible(true); + } else { + that.frmInputDocument.getField('inp_doc_original').setVisible(false); + } + that.frmInputDocument.getField('inp_doc_versioning').setValue(parseInt(inputDocumentData.inp_doc_versioning + "")); + that.frmInputDocument.getField('inp_doc_destination_path').setValue(inputDocumentData.inp_doc_destination_path); + that.frmInputDocument.getField('inp_doc_tags').setValue(inputDocumentData.inp_doc_tags); + that.frmInputDocument.getField('inp_doc_type_file').setValue(inputDocumentData.inp_doc_type_file); + that.frmInputDocument.getField('inp_doc_max_filesize').setValue(inputDocumentData.inp_doc_max_filesize); + that.frmInputDocument.getField('inp_doc_max_filesize_unit').setValue(inputDocumentData.inp_doc_max_filesize_unit); +}; +/** + * Open the grid panel and sets to mai windows + */ +InputDocument.prototype.openGridPanelInMainWindow = function () { + this.grdpnlInputDocument.setVisible(true); + this.frmInputDocument.setVisible(false); + this.winMainInputDocument.setTitle("Input Documents".translate()); + this.winMainInputDocument.hideFooter(); +}; +/** + * Set the option external type of input Document + */ +InputDocument.prototype.setExternalType = function (value) { + if (typeof value === "boolean") { + this.externalType = value; + } + return this; +}; +/** + * Set the option window Dialog, a window that open this class + */ +InputDocument.prototype.setWindowDialog = function (value) { + this.windowDialog = value; + return this; +}; + +InputDocument.prototype.setAssignAccordion = function (obj) { + this.assignAccordion = obj; +}; + +/** + * Open create form an sets to main windows + */ +InputDocument.prototype.openFormInMainWindow = function () { + this.grdpnlInputDocument.setVisible(false); + this.frmInputDocument.setVisible(true); + this.winMainInputDocument.setTitle("Create Input Document".translate()); + this.winMainInputDocument.showFooter(); +}; + +InputDocument.prototype.checkIfValuesAreEqual = function (initialData, finalData) { + var key1, key2; + if (!Object.keys(initialData).length && Object.keys(finalData).length) { + if (finalData['inp_doc_title'] != '' || finalData['inp_doc_form_needed'] != 'VIRTUAL' || finalData['inp_doc_description'] != '' || finalData['inp_doc_versioning'] != '0' || finalData['inp_doc_destination_path'] != '') { + return false; + } + } + + for (key1 in initialData) { + for (key2 in finalData) { + if (typeof(initialData[key1]) != "undefined" && + typeof(finalData[key2]) != "undefined" && + key1 == key2 && + initialData[key1] != finalData[key2] + ) { + //Return + return false; + } + } + } + return true; +}; + +/** + * Generate all ui components(window, form, grid, fields) + */ + +InputDocument.prototype.isDirtyFormInput = function () { + $("input,select,textarea").blur(); + var that = this, message_window; + if (this.frmInputDocument.isVisible()) { + if (!this.externalType) { + if (!(this.checkIfValuesAreEqual(this.inputDocumentOriginDataForUpdate, getData2PMUI(this.frmInputDocument.html)))) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: "Input Documents".translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + if (typeof flagInputDocument != 'undefined' && flagInputDocument) { + if (that.clickedClose) { + message_window.close(); + that.winMainInputDocument.close(); + return; + } else { + that.winMainInputDocument.close(); + flagInputDocument = false; + } + return; + } else { + if (that.clickedClose) { + message_window.close(); + that.winMainInputDocument.close(); + return; + } else { + inputDocumentOption = ""; + that.openGridPanelInMainWindow(); + } + } + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + this.inputDocumentOriginDataForUpdate = {}; + } else { + if (that.clickedClose) { + this.winMainInputDocument.close(); + } else { + inputDocumentOption = ""; + this.openGridPanelInMainWindow(); + } + } + } else { + that.winMainInputDocument.close(); + } + } else { + that.winMainInputDocument.close(); + } +}; + +InputDocument.prototype.build = function () { + var ID = this, + btnSave, + btnCancel, + winMainInputDocument, + frmInputDocument, + grdpnlInputDocument, + btnNew, + inp_doc_destination_path, + inp_doc_tags, + that = this; + + btnSave = new PMUI.ui.Button({ + id: "btnSave", + text: "Save".translate(), + handler: function () { + var flagAux, data; + + if (!ID.frmInputDocument.isValid()) { + flagAux = ID.frmInputDocument.visible; + } else { + flagAux = ID.frmInputDocument.isValid(); + } + + if (flagAux) { + if (getData2PMUI(ID.frmInputDocument.html).inp_doc_title == "") { + return false; + } + } + + if (ID.frmInputDocument.getField("inp_doc_max_filesize").getValue() != "") { + if (!/^\+?(0|[1-9]\d*)$/.test(ID.frmInputDocument.getField("inp_doc_max_filesize").getValue())) { + return false; + } + } + + //validation because getData method do not work in IE + if (navigator.userAgent.indexOf("MSIE") !== -1 || navigator.userAgent.indexOf("Trident") !== -1) { + data = getData2PMUI(that.frmInputDocument.html); + } else { + data = that.frmInputDocument.getData(); + } + + data["inp_doc_versioning"] = parseInt(data["inp_doc_versioning"]); + + switch (that.method) { + case "POST": + that.inputDocumentPostRestProxy(data); + break; + case "PUT": + that.inputDocumentPutRestProxy(that.inputDocumentUid, data); + break; + } + }, + buttonType: 'success' + }); + + btnCancel = new PMUI.ui.Button({ + id: "btnCancel", + text: "Cancel".translate(), + handler: function () { + that.clickedClose = false; + that.isDirtyFormInput(); + }, + buttonType: 'error' + }); + btnNew = new PMUI.ui.Button({ + id: "btnNew", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + that.openFormInMainWindow(); + that.method = "POST"; + that.frmInputDocument.reset(); + } + }); + + /* form panel*/ + this.frmInputDocument = new PMUI.form.Form({ + id: "frmInputDocument", + width: 900, + visibleHeader: false, + items: [ + { + pmType: "text", + label: "Title".translate(), + id: "inputDocTitle", + name: "inp_doc_title", + valueType: 'string', + maxLength: 200, + required: true, + controlsWidth: 300 + }, + { + pmType: "dropdown", + name: "inp_doc_form_needed", + id: "inputDocDocumentType", + label: "Document Type".translate(), + value: "VIRTUAL", + controlsWidth: 130, + options: [ + { + value: "VIRTUAL", + label: "Digital".translate() + }, + { + value: "REAL", + label: "Printed".translate() + }, + { + value: "VREAL", + label: "Digital/Printed".translate() + } + ], + onChange: function (newValue, prevValue) { + var fields = that.frmInputDocument.getFields(); + if (newValue != "VIRTUAL") { + fields[2].setVisible(true); + } else { + fields[2].setVisible(false); + } + } + }, + { + pmType: "dropdown", + id: "inputDocDocumentType", + name: "inp_doc_original", + label: "Format".translate(), + value: "ORIGINAL", + controlsWidth: 105, + visible: false, + options: [ + { + value: "ORIGINAL", + label: "Original".translate() + }, + { + value: "COPYLEGAL", + label: "Legal Copy".translate() + }, + { + value: "COPY", + label: "Copy".translate() + } + ] + }, + { + pmType: "textarea", + id: "inputDocDescription", + name: "inp_doc_description", + label: "Description".translate(), + controlsWidth: 380, + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + pmType: "dropdown", + id: "inputDocEnableVersioning", + name: "inp_doc_versioning", + label: "Enable Versioning".translate(), + value: 0, + controlsWidth: 75, + options: [ + { + value: 0, + label: "NO".translate(), + selected: true + }, + { + value: 1, + label: "YES".translate() + } + ] + } + ], + buttonPanelPosition: 'top' + }); + inp_doc_destination_path = new CriteriaField({ + id: "inputDocDestinationPath", + name: "inp_doc_destination_path", + valueType: "string", + label: "Destination Path".translate(), + maxLength: 200, + controlsWidth: 380 + }); + + inp_doc_tags = new CriteriaField({ + id: "inputDocTags", + name: "inp_doc_tags", + valueType: "string", + label: "Tags".translate(), + maxLength: 200, + value: "INPUT", + controlsWidth: 380 + }); + + inp_doc_allowed = new PMUI.field.TextField({ + label: "Allowed file extensions (Use .* to allow any extension)".translate(), + id: "inputDocAllowedFileExtensions", + name: "inp_doc_type_file", + valueType: 'string', + maxLength: 200, + required: true, + value: ".*", + controlsWidth: 380 + + }); + + inp_doc_maximum = new PMUI.field.TextField({ + label: "Maximum file size (Use zero if unlimited)".translate(), + id: "inputDocMaximumFileSize", + name: "inp_doc_max_filesize", + valueType: 'string', + maxLength: 200, + required: true, + value: "0", + controlsWidth: 380, + validators: [ + { + pmType: "regexp", + criteria: /^\d*$/, + errorMessage: "Please enter a positive integer value".translate() + } + ] + + }); + + inp_doc_maximum_unit = new PMUI.field.DropDownListField({ + id: "inputDocUnit", + name: "inp_doc_max_filesize_unit", + label: "Unit".translate(), + value: "ORIGINAL", + controlsWidth: 105, + visible: true, + options: [ + { + value: "KB", + label: "KB".translate() + }, + { + value: "MB", + label: "MB".translate() + } + ] + }); + + that.frmInputDocument.addItem(inp_doc_destination_path); + that.frmInputDocument.addItem(inp_doc_tags); + that.frmInputDocument.addItem(inp_doc_allowed); + that.frmInputDocument.addItem(inp_doc_maximum); + that.frmInputDocument.addItem(inp_doc_maximum_unit); + + /*grid panel*/ + + this.grdpnlInputDocument = new PMUI.grid.GridPanel({ + id: "grdpnlInputDocument", + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'grdpnlInputDocumentButtonShow', + dataType: "button", + title: "", + buttonLabel: "Show ID".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + showUID(data.inp_doc_uid); + } + }, + { + columnData: "inp_doc_title", + title: "Title".translate(), + width: "607px", + alignment: "left", + sortable: true, + alignmentCell: 'left' + }, + { + id: 'grdpnlInputDocumentButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.inputDocumentOriginDataForUpdate = {}; + that.openFormInMainWindow(); + that.inputDocumentFormGetProxy(data.inp_doc_uid); + + } + }, + { + id: 'grdpnlInputDocumentButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + confirmWindow; + confirmWindow = new PMUI.ui.MessageWindow({ + id: "inputMessageWindowWarning", + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Input Documents".translate(), + message: "Do you want to delete this Input Document?".translate(), + footerItems: [ + { + id: 'confirmWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, + { + id: 'confirmWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + that.inputDocumentDeleteRestProxy(data.inp_doc_uid); + confirmWindow.close(); + confirmWindow.close(); + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = "17px"; + confirmWindow.showFooter(); + } + } + ], + dataItems: null + }); + /* main windows */ + this.winMainInputDocument = new PMUI.ui.Window({ + id: "winMainInputDocument", + title: "Input Documents".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: 'bottom', + footerAlign: 'right', + visibleFooter: true, + footerItems: [ + btnCancel, + btnSave + ], + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFormInput(); + } + }); + // add form and grid to windows + this.winMainInputDocument.addItem(this.grdpnlInputDocument); + this.winMainInputDocument.addItem(this.frmInputDocument); + this.winMainInputDocument.open(); + //custom css + this.frmInputDocument.getField("inp_doc_type_file").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_type_file").html.style.float = "left"; + this.frmInputDocument.getField("inp_doc_max_filesize").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_max_filesize").html.style.float = "left"; + this.frmInputDocument.getField("inp_doc_max_filesize_unit").html.style.padding = "6px 0"; + this.frmInputDocument.getField("inp_doc_max_filesize_unit").html.style.float = "left"; + this.grdpnlInputDocument.setVisible(true); + this.frmInputDocument.setVisible(false); + this.winMainInputDocument.hideFooter(); + /* insert create button to grid*/ + this.grdpnlInputDocument.dom.toolbar.appendChild(btnNew.getHTML()); + btnNew.defineEvents(); + this.inputDocumentsGetRestProxy(); +}; + +(function () { + + var loadValuesStartTimer, openForm, updateStatus; + + PMDesigner.startTimer = function (element) { + + var startTimer = element, + restClient, + loadServerData, + listUsers, + itemsDaly, + itemsWeekly, + loadOptionsRadio, + itemsMonthly, + itemsOneTime, + itemsEvery, + showProperties, + updateCaseScheduler, + buttonCancel, + loadUsers, + loadDataForm, + formCreateCaseScheduler, + schedulerListWindow, + buttonSave, + dataForm; + + loadValuesStartTimer = function ($flag) { + listUsers = []; + dataForm = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + startTimer.ports.get(0).connection.flo_element_dest + '/assignee/all', + method: 'GET' + }, + { + url: 'case-scheduler/' + startTimer.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + listUsers = response[0].response; + dataForm = response[1].response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: [null, 'There are problems loading the Start Timer, please try again.'.translate()] + }); + restClient.executeRestClient(); + if ($flag) { + return listUsers.length; + } + return true; + }; + + updateCaseScheduler = function (data) { + var restProxy = new PMRestClient({ + endpoint: 'case-scheduler/' + startTimer.evn_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + formCreateCaseScheduler.reset(); + schedulerListWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Start Timer updated successfully'.translate(), + messageError: 'There are problems updating the Start Timer, please try again.'.translate(), + flashContainer: document.body + }); + restProxy.executeRestClient(); + }; + + updateStatus = function () { + var status = (typeof dataForm.sch_state !== 'undefined') ? ((dataForm.sch_state === 'ACTIVE') ? 'INACTIVE' : 'ACTIVE') : 'INACTIVE'; + dataForm.sch_state = status; + updateCaseScheduler(dataForm); + }; + + //Items for the form Create and edit Case Scheduler + itemsDaly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + } + ]; + + itemsWeekly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + dateTime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }, + { + id: 'daysoftheweek', + pmType: 'checkbox', + label: 'Select the day(s) of the week below'.translate(), + value: '', + name: 'daysoftheweek', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + id: 'monday', + label: 'Monday'.translate(), + value: '1' + }, + { + id: 'tuesday', + label: 'Tuesday'.translate(), + value: '2' + }, + { + id: 'wednesday', + label: 'Wednesday'.translate(), + value: '3' + }, + { + id: 'thursday', + label: 'Thursday'.translate(), + value: '4' + }, + { + id: 'friday', + label: 'Friday'.translate(), + value: '5' + }, + { + id: 'saturday', + label: 'Saturday'.translate(), + value: '6' + }, + { + id: 'sunday', + label: 'Sunday'.translate(), + value: '7' + } + ] + } + ]; + + loadOptionsRadio = function (newVal) { + var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; + paneldaysofMonth.setVisible(true); + if (newVal === 'dayofmonth') { + paneldaysofMonth.getItems()[0].setVisible(true); + paneldaysofMonth.getItems()[1].setVisible(false); + } else if (newVal === 'day') { + paneldaysofMonth.getItems()[0].setVisible(false); + paneldaysofMonth.getItems()[1].setVisible(true); + } + }; + + itemsMonthly = [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + { + id: 'startDate', + pmType: 'datetime', + label: 'Start date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: true, + dateFormat: 'yy mm dd', + datetime: false, + name: 'startDate', + valueType: 'date', + labelWidth: '26%' + }, + { + id: 'endDate', + pmType: 'datetime', + label: 'End date'.translate(), + value: '', + returnFormat: 'yy-mm-dd', + required: false, + dateFormat: 'yy mm dd', + datetime: false, + name: 'endDate', + valueType: 'date' + } + ] + }, + { + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + controlsWidth: 580, + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }, + { + pmType: 'panel', + id: 'panelDays', + layout: 'hbox', + items: [ + { + id: 'options', + pmType: 'radio', + label: '', + value: '', + name: 'options', + required: false, + controlPositioning: 'vertical', + maxDirectionOptions: 4, + options: [ + { + id: 'dayMonth', + label: 'Day of month'.translate(), + value: 'dayofmonth' + }, + { + id: 'day', + label: 'The day'.translate(), + value: 'day' + } + ], + onChange: function (newVal, oldVal) { + loadOptionsRadio(newVal); + }, + labelWidth: '46%' + }, + { + pmType: 'panel', + id: 'paneldaysofMonth', + layout: 'vbox', + items: [ + { + id: 'dayoftheMonth', + pmType: 'text', + label: '', + value: '', + placeholder: 'Day of the month (example: 1)'.translate(), + required: false, + name: 'dayMonth', + valueType: 'string' + }, + { + pmType: 'panel', + id: 'panelmonth', + layout: 'hbox', + items: [ + { + id: 'first', + pmType: 'dropdown', + label: '', + value: '', + required: false, + name: 'first', + valueType: 'string', + options: [ + { + label: 'First'.translate(), + value: '1' + }, + { + label: 'Second'.translate(), + value: '2' + }, + { + label: 'Third'.translate(), + value: '3' + }, + { + label: 'Fourth'.translate(), + value: '4' + }, + { + label: 'Last'.translate(), + value: '5' + } + ], + controlsWidth: 100 + }, + { + id: 'day', + pmType: 'dropdown', + label: '', + value: '', + required: false, + name: 'day', + valueType: 'string', + options: [ + { + label: 'Monday'.translate(), + value: '1' + }, + { + label: 'Tuesday'.translate(), + value: '2' + }, + { + label: 'Wednesday'.translate(), + value: '3' + }, + { + label: 'Thursday'.translate(), + value: '4' + }, + { + label: 'Friday'.translate(), + value: '5' + }, + { + label: 'Saturday'.translate(), + value: '6' + }, + { + label: 'Sunday'.translate(), + value: '7' + } + ], + controlsWidth: 100 + } + ] + } + ] + } + ] + }, + { + id: 'months', + pmType: 'checkbox', + label: 'Of the month(s)'.translate(), + value: '', + name: 'months', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'jan', + label: 'Jan'.translate(), + value: '1' + }, + { + id: 'feb', + label: 'Feb'.translate(), + value: '2' + }, + { + id: 'mar', + label: 'Mar'.translate(), + value: '3' + }, + { + id: 'apr', + label: 'Apr'.translate(), + value: '4' + }, + { + id: 'may', + label: 'May'.translate(), + value: '5' + }, + { + id: 'jun', + label: 'Jun'.translate(), + value: '6' + }, + { + id: 'jul', + label: 'Jul'.translate(), + value: '7' + }, + { + id: 'aug', + label: 'Aug'.translate(), + value: '8' + }, + { + id: 'sep', + label: 'Sep'.translate(), + value: '9' + }, + { + id: 'oct', + label: 'Oct'.translate(), + value: '10' + }, + { + id: 'nov', + label: 'Nov'.translate(), + value: '11' + }, + { + id: 'dec', + label: 'Dec'.translate(), + value: '12' + } + ] + } + ]; + + itemsOneTime = [{ + id: 'execttime', + pmType: 'text', + label: 'Execution time'.translate(), + value: '', + required: true, + name: 'execttime', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + valueType: 'string', + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }]; + + itemsEvery = [{ + id: 'execttime', + pmType: 'text', + label: 'Execute every Hour(s)'.translate(), + value: '', + required: true, + name: 'execttime', + valueType: 'string', + placeholder: '(HH:MM) Format 24 hrs.'.translate(), + validators: [{ + pmType: 'regexp', + criteria: /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/, + errorMessage: 'Please enter a valid hour.'.translate() + } + ], + helper: 'Example: 1:00, 14:30, 00:00' + }]; + + showProperties = function (newValue) { + switch (newValue) { + case 'daily': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsDaly); + break; + case 'weekly': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsWeekly); + break; + case 'monthly': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsMonthly); + var paneldaysofMonth = formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[1]; + paneldaysofMonth.setVisible(false); + formCreateCaseScheduler.getItems()[1].getItems()[2].getItems()[0].hideColon(); + paneldaysofMonth.getItems()[0].hideColon(); + paneldaysofMonth.getItems()[1].getItems()[0].hideColon(); + paneldaysofMonth.getItems()[1].getItems()[1].hideColon(); + break; + case 'oneTime': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsOneTime); + break; + case 'every': + formCreateCaseScheduler.getItems()[1].clearItems(); + formCreateCaseScheduler.getItems()[1].setVisible(true); + formCreateCaseScheduler.getItems()[1].setItems(itemsEvery); + validateKeysField(formCreateCaseScheduler.getField('execttime').getControls()[0].getHTML(), ['isnumber', 'iscolon']); + break; + } + }; + + //Form to Edit and create the Case Scheduler + formCreateCaseScheduler = new PMUI.form.Form({ + id: 'formCreateCaseScheduler', + border: false, + visibleHeader: false, + width: '925px', + name: 'formcreate', + title: '', + items: [ + { + id: 'panelProperties', + pmType: 'panel', + layout: 'vbox', + fieldset: true, + height: '350px', + legend: 'Properties'.translate(), + items: [ + { + id: 'state', + pmType: 'dropdown', + label: 'Status'.translate(), + name: 'state', + required: true, + value: '', + controlsWidth: 150, + options: [ + { + value: 'ACTIVE', + label: 'Active'.translate() + }, + { + value: 'INACTIVE', + label: 'Inactive'.translate() + } + ] + }, + { + id: 'username', + pmType: 'dropdown', + label: 'User'.translate(), + name: 'username', + required: true, + controlsWidth: 300, + value: '', + options: [], + onChange: function (newValue, prevValue) { + } + }, + { + id: 'name', + pmType: 'text', + label: 'Name'.translate(), + value: startTimer.evn_name, + required: true, + name: 'name', + visible: false, + valueType: 'string' + }, + { + id: 'performTask', + pmType: 'dropdown', + label: 'Perform this task'.translate(), + name: 'performTask', + required: true, + value: '', + controlsWidth: 300, + options: [ + { + label: '- Select -'.translate(), + value: '', + disabled: true, + selected: true + }, + { + value: 'daily', + label: 'Daily'.translate() + }, + { + value: 'weekly', + label: 'Weekly'.translate() + }, + { + value: 'monthly', + label: 'Monthly'.translate() + }, + { + value: 'oneTime', + label: 'One Time Only'.translate() + }, + { + value: 'every', + label: 'Every'.translate() + } + ], + onChange: function (newValue, prevValue) { + showProperties(newValue); + } + } + ] + }, + { + id: 'panelSelectDate', + pmType: 'panel', + layout: 'vbox', + fieldset: true, + visible: false, + height: '350px', + legend: 'Select the date and time for case(s) to be initiated.'.translate(), + items: [] + } + ] + }); + + buttonCancel = new PMUI.ui.Button({ + id: 'cancelSchedulerButton', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function (event) { + if (formCreateCaseScheduler.isDirty()) { + var message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: 'cancelMessageStartTimer', + title: 'Start Timer Event'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + schedulerListWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + formCreateCaseScheduler.reset(); + schedulerListWindow.close(); + } + } + }); + + //Window Buttons + buttonSave = new PMUI.ui.Button({ + id: 'saveSchedulerButton', + text: 'Save'.translate(), + height: 31, + buttonType: 'success', + handler: function (event) { + if (formCreateCaseScheduler.isValid()) { + var dataFormCreate = formCreateCaseScheduler.getData(); + + var dataToSend = { + sch_del_user_name: dataFormCreate.username, + sch_name: startTimer.evn_name, + tas_uid: startTimer.ports.get(0).connection.flo_element_dest, + sch_start_time: '', + sch_start_date: '', + sch_week_days: '', + sch_start_day: '', + sch_start_day_opt_1: '', + sch_start_day_opt_2: '', + sch_months: '', + sch_end_date: '', + sch_repeat_every: '', + sch_state: (dataFormCreate.state !== '') ? dataFormCreate.state : 'ACTIVE', + sch_option: '' + }; + + var perform = dataFormCreate.performTask; + switch (perform) { + case 'daily': + dataToSend.sch_option = '1'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + break; + case 'weekly': + var formdays = eval(dataFormCreate.daysoftheweek); + var days = ''; + for (i = 0; i < formdays.length; i += 1) { + if (i !== (formdays.length - 1)) { + days += formdays[i] + '|'; + } else { + days += formdays[i]; + } + } + + dataToSend.sch_option = '2'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + dataToSend.sch_week_days = days; + break; + case 'monthly': + dataToSend.sch_option = '3'; + dataToSend.sch_start_time = dataFormCreate.execttime; + dataToSend.sch_start_date = dataFormCreate.startDate; + dataToSend.sch_end_date = dataFormCreate.endDate; + if (dataFormCreate.options === 'dayofmonth') { + var formmonths = eval(dataFormCreate.months); + var months = ''; + for (i = 0; i < formmonths.length; i += 1) { + if (i !== (formmonths.length - 1)) { + months += formmonths[i] + '|'; + } else { + months += formmonths[i]; + } + } + dataToSend.sch_start_day = '1'; //Day of month + dataToSend.sch_start_day_opt_1 = dataFormCreate.dayMonth;//1 to 31 - day of the month + } else if (dataFormCreate.options === 'day') { + var opt2 = dataFormCreate.first + '|' + dataFormCreate.day; + var formmonths = eval(dataFormCreate.months); + var months = ''; + for (i = 0; i < formmonths.length; i += 1) { + if (i !== (formmonths.length - 1)) { + months += formmonths[i] + '|'; + } else { + months += formmonths[i]; + } + } + dataToSend.sch_start_day = '2'; //Day of month + dataToSend.sch_start_day_opt_2 = opt2;//1 to 31 - day of the month + + } + dataToSend.sch_months = months; + break; + case 'oneTime': + dataToSend.sch_option = '4'; + dataToSend.sch_start_time = dataFormCreate.execttime; + break; + case 'every': + dataToSend.sch_option = '5'; + dataToSend.sch_repeat_every = timeToDecimal(dataFormCreate.execttime).toFixed(2); + break; + } + updateCaseScheduler(dataToSend); + } + } + }); + + //load users + loadUsers = function () { + var field = formCreateCaseScheduler.getField('username'); + field.clearOptions(); + for (var i = 0; i < listUsers.length; i += 1) { + field.addOption({ + value: listUsers[i].aas_username, + label: listUsers[i].aas_name + ' ' + listUsers[i].aas_lastname + }); + } + }; + + loadDataForm = function () { + var loadTime, + option, + daysVal, + monthsVal, + monthsop, + days, + i, + startTime, + finallyST, + dataEdit; + + loadTime = function (dataEdit, dataForm) { + var starDate, + startTime, + finallyST, + endDate; + starDate = dataForm.sch_start_date ? dataForm.sch_start_date.split(' ') : ['']; + endDate = dataForm.sch_end_date ? dataForm.sch_end_date.split(' ') : ['']; + + startTime = dataForm.sch_start_time.split(' '); + startTime = startTime[1].split(':'); + finallyST = startTime[0] + ':' + startTime[1]; + dataEdit[4].setValue(starDate[0]); + dataEdit[5].setValue(endDate[0]); + dataEdit[6].setValue(finallyST); + }; + + dataEdit = formCreateCaseScheduler.getFields(); + + dataEdit[0].setValue(dataForm.sch_state); + dataEdit[1].setValue(dataForm.sch_del_user_name); + option = 'daily'; + switch (dataForm.sch_option) { + case '1': + option = 'daily'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + break; + case '2': + option = 'weekly'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + + daysVal = "[\""; + days = dataForm.sch_week_days.split('|'); + for (i = 0; i < days.length; i += 1) { + if (i !== (days.length - 1)) { + daysVal += days[i] + "\",\""; + } else { + daysVal += days[i] + "\"]"; + } + } + dataEdit[7].setValue(daysVal); + break; + case '3': + option = 'monthly'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + loadTime(dataEdit, dataForm); + days = []; + if (dataForm.sch_start_day !== '') { + days = dataForm.sch_start_day.split('|'); + } + + if (days[0] === '1') { + dataEdit[7].setValue('dayofmonth'); + loadOptionsRadio('dayofmonth'); + dataEdit[8].setValue(days[1]); + } else if (days[0] === '2') { + dataEdit[7].setValue('day'); + loadOptionsRadio('day'); + dataEdit[9].setValue(days[1]); + dataEdit[10].setValue(days[2]); + } + monthsVal = "[\""; + monthsop = dataForm.sch_months.split('|'); + for (i = 0; i < monthsop.length; i += 1) { + if (i !== (monthsop.length - 1)) { + monthsVal += monthsop[i] + "\",\""; + } else { + monthsVal += monthsop[i] + "\"]"; + } + } + dataEdit[11].setValue(monthsVal); + break; + case '4': + option = 'oneTime'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + startTime = dataForm.sch_start_time.split(' '); + startTime = startTime[1].split(':'); + finallyST = startTime[0] + ':' + startTime[1]; + dataEdit[4].setValue(finallyST); + break; + case '5': + option = 'every'; + dataEdit[3].setValue(option); + showProperties(option); + dataEdit = formCreateCaseScheduler.getFields(); + dataEdit[4].setValue(decimalToTime(parseFloat(dataForm.sch_repeat_every))); + break; + } + }; + + //Main window Case Scheduler + schedulerListWindow = new PMUI.ui.Window({ + id: 'schedulerListWindow', + title: 'Start Timer Event'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: 'top', + buttons: [ + buttonSave, + {pmType: 'label', text: 'or'}, + buttonCancel + ] + }); + + openForm = function () { + schedulerListWindow.addItem(formCreateCaseScheduler); + schedulerListWindow.open(); + loadUsers(); + loadDataForm(); + applyStyleWindowForm(schedulerListWindow); + schedulerListWindow.showFooter(); + schedulerListWindow.defineEvents(); + }; + }; + + PMDesigner.startTimer.openForm = function (element) { + openForm(); + }; + + PMDesigner.startTimer.validate = function (element) { + if (element.ports.isEmpty()) { + PMDesigner.msgFlash('Must connect to a Task'.translate(), document.body, 'error', 3000, 5); + return false; + } + PMDesigner.startTimer(element); + if (loadValuesStartTimer(true) === 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned users'.translate(), document.body, 'info', 3000, 5); + return false; + } + return true; + }; + +}()); +( + function () { + var dataBaseConnectionOption, + winFrmDataBaseConnectionShow, + frmDataBaseConnection, + closeClicked = true; + + PMDesigner.database = function (event) { + var winGrdpnlDataBaseConnection, + panelTest, + grdpnlDataBaseConnection, + flagError, + titleOld, + btnNew, + btnTestConnection, + btnCreate, + btnCancel, + testShow, + isDirtyFrmDataBaseConnection, + showForm, + listDBConnection, + refreshGridPanelInMainWindow, + dataBaseConnectionsGetRestProxy, + dataBaseConnectionPostTestRestProxy, + dataBaseConnectionGetRestProxy, + dataBaseConnectionPutRestProxy, + dataBaseConnectionDeleteRestProxy, + dataBaseConnectionPostRestProxy, + cboEngineSetOptionsRestProxy, + showEncoderOptions, + hideEncoderOptions, + cboConnectionTypeOracleSetOptions, + cboEncodeSetOptionsRestProxy, + winFrmDataBaseConnectionShow, + cboEngine, + txtUID, + cboEncode, + txtTns, + txtServer, + txtDataBaseName, + disableAllItems, + txtUsername, + txtPassword, + txtPort, + btnBack, + txtDescription, + cboConnectionTypeOracle, + dataBaseConnectionData; + + disableAllItems = function () { + winGrdpnlDataBaseConnection.getItems()[0].setVisible(false); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(false); + winGrdpnlDataBaseConnection.getItems()[2].setVisible(false); + + txtUID.setVisible(false); + btnTestConnection.setVisible(false); + btnBack.setVisible(false); + btnCreate.setVisible(false); + btnCancel.setVisible(false); + }; + + testShow = function (testData) { + var msg = "", titleSummary, style, i, flag; + flagError = 0; + disableAllItems(); + titleOld = winGrdpnlDataBaseConnection.getTitle(); + winGrdpnlDataBaseConnection.setTitle("Testing Server Connection".translate()); + winGrdpnlDataBaseConnection.getItems()[2].setVisible(true); + + for (i = 0; i <= testData.length - 1; i += 1) { + flag = (typeof(testData[i].error) != "undefined") ? 1 : 0; + if (flag != 1) { + msg = msg + "" + testData[i].test + "
"; + } else { + msg = msg + "" + testData[i].error + "
"; + } + + if (typeof(testData[i].error) != "undefined" && flagError == 0) { + flagError = 1; + } + } + if (flag == 0) { + btnCreate.setVisible(true); + btnBack.setVisible(true); + } else { + btnBack.setVisible(true); + } + + titleSummary = "
Testing Database Server configuration
"; + + style = $('#panelTest').attr("style"); + titleSummary = titleSummary + "
" + msg + "
"; + $('#panelTest').empty(); + style = style + ' background: #FFFFFF; font: normal 0.8em arial;'; + $('#panelTest').attr("style", style); + $('#panelTest').append(titleSummary); + }; + + isDirtyFrmDataBaseConnection = function () { + var message_window; + $("input,select,textarea").blur(); + if (frmDataBaseConnection.isVisible()) { + if (frmDataBaseConnection.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Database Connections".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + dataBaseConnectionOption = ""; + if (closeClicked) { + winGrdpnlDataBaseConnection.close(); + } + refreshGridPanelInMainWindow(false); + }, + buttonType: "success" + } + ], + title: 'Confirm'.translate() + }); + message_window.open(); + message_window.showFooter(); + } else { + if (closeClicked) { + winGrdpnlDataBaseConnection.close(); + } else { + dataBaseConnectionOption = ""; + refreshGridPanelInMainWindow(false); + } + } + } else { + winGrdpnlDataBaseConnection.close(); + } + }; + showForm = function () { + disableAllItems(); + winGrdpnlDataBaseConnection.setTitle(titleOld); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(true); + btnTestConnection.setVisible(true); + btnCancel.setVisible(true); + } + + refreshGridPanelInMainWindow = function (load) { + disableAllItems(); + winGrdpnlDataBaseConnection.hideFooter(); + dataBaseConnectionOption = ""; + winGrdpnlDataBaseConnection.getItems()[0].setVisible(true); + winGrdpnlDataBaseConnection.setTitle("Database Connections".translate()); + load = load != null ? load : true; + if (load) { + dataBaseConnectionsGetRestProxy(grdpnlDataBaseConnection); + } + }; + + dataBaseConnectionsGetRestProxy = function (grdpnl) { + var restProxy = new PMRestClient({ + endpoint: "database-connections", + typeRequest: "get", + functionSuccess: function (xhr, response) { + listDBConnection = response; + grdpnl.setDataItems(listDBConnection); + grdpnl.sort('dbs_database_name', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPostTestRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/test", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + testShow(response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionGetRestProxy = function (dataBaseConnectionUid) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response; + dataBaseConnectionOption = "PUT"; + winFrmDataBaseConnectionShow("PUT", data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPutRestProxy = function (dataBaseConnectionUid, data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Database connection edited successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + + restProxy.executeRestClient(); + }; + + dataBaseConnectionDeleteRestProxy = function (dataBaseConnectionUid) { + var restProxy = new PMRestClient({ + endpoint: "database-connection/" + dataBaseConnectionUid, + typeRequest: "remove", + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Database connection deleted successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + restProxy.executeRestClient(); + }; + + dataBaseConnectionPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "database-connection", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + refreshGridPanelInMainWindow(); + }, + messageError: 'An unexpected error while deleting the DB Connection, please try again later.'.translate(), + messageSuccess: 'Database connection saved successfully'.translate(), + flashContainer: grdpnlDataBaseConnection + }); + + restProxy.executeRestClient(); + }; + + cboEngineSetOptionsRestProxy = function (cboEngine, cboEncode) { + cboEngine.clearOptions(); + var restProxy = new PMRestClient({ + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, + i, + arrayOptions = []; + for (i = 0; i <= data.length - 1; i += 1) { + arrayOptions.push( + { + value: data[i].id, + label: data[i].name + } + ); + } + cboEngine.setOptions(arrayOptions); + cboEngine.setValue(arrayOptions[0].value); + cboEncodeSetOptionsRestProxy(cboEngine.getValue(), cboEncode); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.setBaseEndPoint("system/db-engines"); + restProxy.executeRestClient(); + }; + + hideEncoderOptions = function () { + cboEncode.setVisible(true); + cboConnectionTypeOracle.setVisible(true); + }; + + showEncoderOptions = function () { + cboEncode.setVisible(true); + cboConnectionTypeOracle.setVisible(false); + }; + cboConnectionTypeOracleSetOptions = function (cboConnectionTypeOracle) { + var arrayEnconde = [], + i, + arrayOptions = []; + cboConnectionTypeOracle.clearOptions(); + + arrayEnconde = [ + {"value": "NORMAL", "text": "Normal"}, + {"value": "TNS", "text": "TNS"} + ]; + + for (i = 0; i <= arrayEnconde.length - 1; i += 1) { + arrayOptions.push( + { + value: arrayEnconde[i].value, + label: arrayEnconde[i].text + } + ); + } + + cboConnectionTypeOracle.setOptions(arrayOptions); + }; + cboEncodeSetOptionsRestProxy = function (selectedCboEngineValue, cboEncode) { + var arrayEnconde = [], + arrayNewEnconde, + i, + portsDefault, + arrayOptions, + encode = selectedCboEngineValue; + cboEncode.clearOptions(); + + arrayEnconde["mysql"] = [ + {"value": "big5", "text": "big5 - Big5 Traditional Chinese"}, + {"value": "dec8", "text": "dec8 - DEC West European"}, + {"value": "cp850", "text": "cp850 - DOS West European"}, + {"value": "hp8", "text": "hp8 - HP West European"}, + {"value": "koi8r", "text": "koi8r - KOI8-R Relcom Russian"}, + {"value": "latin1", "text": "latin1 - cp1252 West European"}, + {"value": "latin2", "text": "latin2 - ISO 8859-2 Central European"}, + {"value": "swe7", "text": "swe7 - 7bit Swedish"}, + {"value": "ascii", "text": "ascii - US ASCII"}, + {"value": "ujis", "text": "ujis - EUC-JP Japanese"}, + {"value": "sjis", "text": "sjis - Shift-JIS Japanese"}, + {"value": "hebrew", "text": "hebrew - ISO 8859-8 Hebrew"}, + {"value": "tis620", "text": "tis620 - TIS620 Thai"}, + {"value": "euckr", "text": "euckr - EUC-KR Korean"}, + {"value": "koi8u", "text": "koi8u - KOI8-U Ukrainian"}, + {"value": "gb2312", "text": "gb2312 - GB2312 Simplified Chinese"}, + {"value": "greek", "text": "greek - ISO 8859-7 Greek"}, + {"value": "cp1250", "text": "cp1250 - Windows Central European"}, + {"value": "gbk", "text": "gbk - GBK Simplified Chinese"}, + {"value": "latin5", "text": "latin5 - ISO 8859-9 Turkish"}, + {"value": "armscii8", "text": "armscii8 - ARMSCII-8 Armenian"}, + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"}, + {"value": "ucs2", "text": "ucs2 - UCS-2 Unicode"}, + {"value": "cp866", "text": "cp866 - DOS Russian"}, + {"value": "keybcs2", "text": "keybcs2 - DOS Kamenicky Czech-Slovak"}, + {"value": "macce", "text": "macce - Mac Central European"}, + {"value": "macroman", "text": "macroman - Mac West European"}, + {"value": "cp852", "text": "cp852 - DOS Central European"}, + {"value": "latin7", "text": "atin7 - ISO 8859-13 Baltic"}, + {"value": "cp1251", "text": "cp1251 - Windows Cyrillic"}, + {"value": "cp1256", "text": "cp1256 - Windows Arabic"}, + {"value": "cp1257", "text": "cp1257 - Windows Baltic"}, + {"value": "binary", "text": "binary - Binary pseudo charset"}, + {"value": "geostd8", "text": "geostd8 - GEOSTD8 Georgian"}, + {"value": "cp932", "text": "cp932] - SJIS for Windows Japanese"}, + {"value": "eucjpms", "text": "eucjpms - UJIS for Windows Japanese"} + ]; + + arrayEnconde["pgsql"] = [ + {"value": "BIG5", "text": "BIG5"}, + {"value": "EUC_CN", "text": "EUC_CN"}, + {"value": "EUC_JP", "text": "EUC_JP"}, + {"value": "EUC_KR", "text": "EUC_KR"}, + {"value": "EUC_TW", "text": "EUC_TW"}, + {"value": "GB18030", "text": "GB18030"}, + {"value": "GBK", "text": "GBK"}, + {"value": "ISO_8859_5", "text": "ISO_8859_5"}, + {"value": "ISO_8859_6", "text": "ISO_8859_6"}, + {"value": "ISO_8859_7", "text": "ISO_8859_7"}, + {"value": "ISO_8859_8", "text": "ISO_8859_8"}, + {"value": "JOHAB", "text": "JOHAB"}, + {"value": "KOI8", "text": "KOI8"}, + {"value": "selected", "text": "LATIN1"}, + {"value": "LATIN2", "text": "LATIN2"}, + {"value": "LATIN3", "text": "LATIN3"}, + {"value": "LATIN4", "text": "LATIN4"}, + {"value": "LATIN5", "text": "LATIN5"}, + {"value": "LATIN6", "text": "LATIN6"}, + {"value": "LATIN7", "text": "LATIN7"}, + {"value": "LATIN8", "text": "LATIN8"}, + {"value": "LATIN9", "text": "LATIN9"}, + {"value": "LATIN10", "text": "LATIN10"}, + {"value": "SJIS", "text": "SJIS"}, + {"value": "SQL_ASCII", "text": "SQL_ASCII"}, + {"value": "UHC", "text": "UHC"}, + {"value": "UTF8", "text": "UTF8"}, + {"value": "WIN866", "text": "WIN866"}, + {"value": "WIN874", "text": "WIN874"}, + {"value": "WIN1250", "text": "WIN1250"}, + {"value": "WIN1251", "text": "WIN1251"}, + {"value": "WIN1252", "text": "WIN1252"}, + {"value": "WIN1256", "text": "WIN1256"}, + {"value": "WIN1258", "text": "WIN1258"} + ]; + + arrayEnconde["mssql"] = [ + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"} + ]; + + arrayEnconde["oracle"] = [ + {"value": "UTF8", "text": "UTF8 - Unicode 3.0 UTF-8 Universal character set, CESU-8 compliant"}, + {"value": "UTFE", "text": "UTFE - EBCDIC form of Unicode 3.0 UTF-8 Universal character set"}, + {"value": "AL16UTF16", "text": "AL16UTF16 - Unicode 3.1 UTF-16 Universal character set"}, + {"value": "AL32UTF8", "text": "AL32UTF8 - Unicode 3.1 UTF-8 Universal character set"} + ]; + + arrayEnconde["sqlsrv"] = [ + {"value": "utf8", "text": "utf8 - UTF-8 Unicode"} + ]; + + arrayNewEnconde = (typeof(arrayEnconde[encode]) != "undefined") ? arrayEnconde[encode] : []; + arrayOptions = []; + + for (i = 0; i <= arrayNewEnconde.length - 1; i += 1) { + arrayOptions.push( + { + value: arrayNewEnconde[i].value, + label: arrayNewEnconde[i].text + } + ); + } + + cboEncode.setOptions(arrayOptions); + cboEncode.setValue('utf8'); + + portsDefault = ["3306", "5432", "1433", "1521"]; + switch (encode) { + case "mysql": + txtPort.setValue(portsDefault[0]); + showEncoderOptions(); + break; + case "pgsql": + txtPort.setValue(portsDefault[1]); + showEncoderOptions(); + break; + case "mssql": + txtPort.setValue(portsDefault[2]); + showEncoderOptions(); + break; + case "oracle": + txtPort.setValue(portsDefault[3]); + hideEncoderOptions(); + break; + } + }; + + winFrmDataBaseConnectionShow = function (option, data) { + disableAllItems(); + dataBaseConnectionData = data; + frmDataBaseConnection.reset(); + cboEngineSetOptionsRestProxy(cboEngine, cboEncode); + cboConnectionTypeOracleSetOptions(cboConnectionTypeOracle); + winGrdpnlDataBaseConnection.getItems()[1].setVisible(true); + btnTestConnection.setVisible(true); + btnCancel.setVisible(true); + winGrdpnlDataBaseConnection.showFooter(); + + switch (option) { + case "POST": + winGrdpnlDataBaseConnection.setTitle("Create Database Connection".translate()); + frmDataBaseConnection.setTitle(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + txtServer.setVisible(true); + txtServer.setRequired(true); + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + txtPort.setVisible(true); + txtPort.setRequired(true); + txtPort.setValue("3306"); + break; + case "PUT": + winGrdpnlDataBaseConnection.setTitle("Edit Database Connection".translate()); + frmDataBaseConnection.setTitle(""); + txtUID.setVisible(true); + txtUID.setValue(dataBaseConnectionData.dbs_uid); + cboEngine.setValue(dataBaseConnectionData.dbs_type); + cboEncodeSetOptionsRestProxy(dataBaseConnectionData.dbs_type, cboEncode); + cboEncode.setValue(dataBaseConnectionData.dbs_encode); + txtServer.setValue(dataBaseConnectionData.dbs_server); + txtDataBaseName.setValue(dataBaseConnectionData.dbs_database_name); + txtUsername.setValue(dataBaseConnectionData.dbs_username); + txtPassword.setValue(dataBaseConnectionData.dbs_password); + txtPort.setValue(dataBaseConnectionData.dbs_port); + txtDescription.setValue(dataBaseConnectionData.dbs_description); + + if (dataBaseConnectionData.dbs_type == "oracle") { + cboConnectionTypeOracle.setValue(dataBaseConnectionData.dbs_connection_type); + cboConnectionTypeOracle.setVisible(true); + + if (dataBaseConnectionData.dbs_connection_type == "TNS" && dataBaseConnectionData.dbs_tns != "") { + txtTns.setValue(dataBaseConnectionData.dbs_tns); + txtTns.setVisible(true); + txtTns.setRequired(true); + + txtServer.setValue(""); + txtServer.setVisible(false); + txtServer.setRequired(false); + + txtDataBaseName.setValue(""); + txtDataBaseName.setVisible(false); + txtDataBaseName.setRequired(false); + + txtPort.setValue(""); + txtPort.setVisible(false); + txtPort.setRequired(false); + } else { + txtTns.setValue(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + } else { + txtTns.setValue(""); + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + break; + } + frmDataBaseConnection.setFocus(); + }; + + txtUID = new PMUI.field.TextField({ + id: "txtUID", + name: "txtUID", + valueType: "string", + controlsWidth: 300, + label: "UID".translate(), + maxLength: 200, + readOnly: true, + visible: false + }); + + cboEngine = new PMUI.field.DropDownListField({ + id: "cboEngine", + name: "cboEngine", + label: "Engine".translate(), + options: null, + controlsWidth: 150, + onChange: function (newValue, prevValue) { + if (cboEngine.getValue() == "oracle") { + cboConnectionTypeOracleSetOptions(cboConnectionTypeOracle); + } else { + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setVisible(true); + txtPort.setRequired(true); + } + + cboEncodeSetOptionsRestProxy(cboEngine.getValue(), cboEncode); + } + }); + + cboEncode = new PMUI.field.DropDownListField({ + id: "cboEncode", + name: "cboEncode", + label: "Encode".translate(), + options: null, + controlsWidth: 300 + }); + + cboConnectionTypeOracle = new PMUI.field.DropDownListField({ + id: "cboConnectionTypeOracle", + name: "cboConnectionTypeOracle", + label: "Select Connection Type".translate(), + options: null, + controlsWidth: 300, + + onChange: function (newValue, prevValue) { + if (cboConnectionTypeOracle.getValue() != "NORMAL") { + txtTns.setVisible(true); + txtTns.setRequired(true); + + txtServer.setVisible(false); + txtServer.setRequired(false); + + txtDataBaseName.setVisible(false); + txtDataBaseName.setRequired(false); + + txtPort.setVisible(false); + txtPort.setRequired(false); + } else { + txtTns.setVisible(false); + txtTns.setRequired(false); + + txtServer.setVisible(true); + txtServer.setRequired(true); + + txtDataBaseName.setVisible(true); + txtDataBaseName.setRequired(true); + + txtPort.setValue("1521"); + txtPort.setVisible(true); + txtPort.setRequired(true); + } + } + }); + + txtTns = new PMUI.field.TextField({ + id: "txtTns", + name: "txtTns", + valueType: "txtTns", + controlsWidth: 300, + label: "TNS".translate(), + maxLength: 200, + visible: false, + required: true + }); + + txtServer = new PMUI.field.TextField({ + id: "txtServer", + name: "txtServer", + valueType: "string", + controlsWidth: 300, + label: "Server".translate(), + maxLength: 200, + required: true + }); + + txtDataBaseName = new PMUI.field.TextField({ + id: "txtDataBaseName", + name: "txtDataBaseName", + valueType: "string", + controlsWidth: 300, + label: "Database Name".translate(), + maxLength: 200, + required: true + }); + + txtUsername = new PMUI.field.TextField({ + id: "txtUsername", + name: "txtUsername", + valueType: "string", + controlsWidth: 300, + label: "Username".translate(), + maxLength: 200, + required: true + }); + + txtPassword = new PMUI.field.PasswordField({ + id: "txtPassword", + name: "txtPassword", + valueType: "string", + controlsWidth: 300, + label: "Password".translate(), + maxLength: 200 + }); + + txtPort = new PMUI.field.TextField({ + id: "txtPort", + name: "txtPort", + valueType: "string", + controlsWidth: 300, + label: "Port".translate(), + value: "3306", + controlsWidth: 300, + maxLength: 200, + required: true + }); + + txtDescription = new PMUI.field.TextAreaField({ + id: "txtDescription", + name: "txtDescription", + valueType: "string", + controlsWidth: 500, + label: "Description".translate(), + height: "200px", + style: {cssClasses: ['mafe-textarea-resize']} + }); + + btnTestConnection = new PMUI.ui.Button({ + id: "btnTestConnection", + text: "Test Connection".translate(), + buttonType: 'success', + handler: function () { + var data; + if (frmDataBaseConnection.isValid()) { + if (cboEngine.getValue() == "oracle") { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_connection_type: cboConnectionTypeOracle.getValue(), + dbs_tns: txtTns.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } else { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } + dataBaseConnectionPostTestRestProxy(data); + } + } + }); + + btnCreate = new PMUI.ui.Button({ + id: "btnCreate", + text: "Save".translate(), + buttonType: "success", + handler: function () { + var data; + if (cboEngine.getValue() == "oracle") { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_connection_type: cboConnectionTypeOracle.getValue(), + dbs_tns: txtTns.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: getData2PMUI(frmDataBaseConnection.html).txtPassword, + dbs_port: parseInt(getData2PMUI(frmDataBaseConnection.html).txtPort), + dbs_description: txtDescription.getValue() + }; + } else { + data = { + dbs_type: cboEngine.getValue(), + dbs_encode: cboEncode.getValue(), + dbs_server: txtServer.getValue(), + dbs_database_name: txtDataBaseName.getValue(), + dbs_username: txtUsername.getValue(), + dbs_password: txtPassword.getValue(), + dbs_port: parseInt(txtPort.getValue()), + dbs_description: txtDescription.getValue() + }; + } + + switch (dataBaseConnectionOption) { + case "POST": + if (frmDataBaseConnection.isValid()) { + dataBaseConnectionPostRestProxy(data); + } else { + return; + } + break; + case "PUT": + if (frmDataBaseConnection.isValid()) { + dataBaseConnectionPutRestProxy(dataBaseConnectionData.dbs_uid, data); + } else { + return; + } + break; + } + } + }); + + btnCancel = new PMUI.ui.Button({ + id: "btnCancel", + text: "Cancel".translate(), + buttonType: 'error', + handler: function () { + closeClicked = false; + isDirtyFrmDataBaseConnection(); + } + }); + + btnBack = new PMUI.ui.Button({ + id: "btnBack", + text: "Back".translate(), + handler: function () { + showForm(); + } + }); + + frmDataBaseConnection = new PMUI.form.Form({ + id: "frmDataBaseConnection", + width: DEFAULT_WINDOW_WIDTH - 70, + items: [ + txtUID, + cboEngine, + cboEncode, + cboConnectionTypeOracle, + txtTns, + txtServer, + txtDataBaseName, + txtUsername, + txtPassword, + txtPort, + txtDescription + ] + }); + + txtPort.controls[0].onKeyUp = function () { + var txtPortfinalValue, + txtPortValue = getData2PMUI(frmDataBaseConnection.html).txtPort; + if (/\D/.test(txtPortValue)) { + if (isNaN(parseInt(txtPortValue))) { + txtPortfinalValue = ""; + } else { + txtPortfinalValue = parseInt(txtPortValue); + } + txtPort.setValue(txtPortfinalValue); + } + }; + + btnNew = new PMUI.ui.Button({ + id: "btnNew", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + dataBaseConnectionOption = "POST"; + winFrmDataBaseConnectionShow("POST", {}); + } + }); + + grdpnlDataBaseConnection = new PMUI.grid.GridPanel({ + id: "grdpnlDataBaseConnection", + filterable: true, + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'grdpnlDataBaseConnectionButtonShow', + dataType: "button", + title: "", + buttonLabel: "Show ID".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + width: "100px", + onButtonClick: function (row, grid) { + showUID(row.getData().dbs_uid); + } + }, + { + columnData: "dbs_type", + title: "Type".translate(), + width: "100px", + sortable: true, + alignmentCell: 'left' + }, + { + columnData: "dbs_server", + title: "Server".translate(), + width: "155px", + alignmentCell: 'left' + }, + { + columnData: "dbs_database_name", + title: "Database Name".translate(), + width: "160px", + sortable: true, + alignmentCell: 'left' + }, + { + columnData: "dbs_description", + title: "Description".translate(), + width: "200px", + alignmentCell: 'left' + }, + { + id: 'grdpnlDataBaseConnectionButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + dataBaseConnectionGetRestProxy(row.getData().dbs_uid); + } + }, + { + id: 'grdpnlDataBaseConnectionButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + var msgWarning = new PMUI.ui.MessageWindow({ + id: "msgWarning", + title: 'Database Connections'.translate(), + windowMessageType: 'warning', + width: 490, + message: "Do you want to delete this DB Connection?".translate(), + buttons: [ + { + text: "No".translate(), + handler: function () { + msgWarning.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + dataBaseConnectionDeleteRestProxy(data.dbs_uid); + msgWarning.close(); + }, + buttonType: "success" + } + ] + }); + msgWarning.open(); + msgWarning.showFooter(); + } + } + ], + dataItems: null + }); + + panelTest = new PMUI.core.Panel({ + id: 'panelTest', + height: DEFAULT_WINDOW_HEIGHT - 71, + display: 'inline-block' + }); + + winGrdpnlDataBaseConnection = new PMUI.ui.Window({ + id: "winGrdpnlDataBaseConnection", + title: "Database Connections".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + buttonPanelPosition: "bottom", + buttons: [btnCancel, btnBack, btnTestConnection, btnCreate], + onBeforeClose: function () { + closeClicked = true; + isDirtyFrmDataBaseConnection(); + } + }); + + winGrdpnlDataBaseConnection.addItem(grdpnlDataBaseConnection); + winGrdpnlDataBaseConnection.addItem(frmDataBaseConnection); + winGrdpnlDataBaseConnection.addItem(panelTest); + + refreshGridPanelInMainWindow(); + if (typeof listDBConnection !== "undefined") { + winGrdpnlDataBaseConnection.open(); + frmDataBaseConnection.panel.html.style.padding = "10px"; + $('#grdpnlDataBaseConnection .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + winGrdpnlDataBaseConnection.defineEvents(); + applyStyleWindowForm(winGrdpnlDataBaseConnection); + winGrdpnlDataBaseConnection.footer.html.style.textAlign = 'right'; + $(btnNew.getHTML()).css({float: "right"}) + grdpnlDataBaseConnection.dom.toolbar.appendChild(btnNew.getHTML()); + btnNew.defineEvents(); + + disableAllItems(); + winGrdpnlDataBaseConnection.getItems()[0].setVisible(true); + } + }; + + PMDesigner.database.create = function () { + PMDesigner.database(); + dataBaseConnectionOption = "POST"; + winFrmDataBaseConnectionShow("POST", {}); + }; + }() +); + +(function () { + var openTinyInMainWindow, + dataOutPutDocument, + openFormInMainWindow, + messageRequired; + + PMDesigner.output = function (event) { + var winMainOutputDocument, formOutput, rowData, updateOutPut, restClient, isDirtyFormOutput, clickedClose = true, that = this, + setDataRow, + clearDataRow, + getGridOutput, + disableAllItems, + deleteDataRow, + updateOutput, + refreshGridPanelInMainWindow, + openGridPanelInMainWindow, + openFormForEditInMainWindow, + editorTiny, + outputFormDocPdfSecurityOpen, + docMargin, + password, + outputFormDocPdfSecurityOwner, + outputFormDocPdfSecurityEnabled, + btnCloseWindowOutputDoc, + btnSaveWindowOutputDoc, + btnCancelTiny, + newButtonOutput, + gridOutput, + winMainOutputDocument, + btnSaveTiny, + listOutputDocs; + + + setDataRow = function (row) { + dataOutPutDocument = row.getData(); + rowData = row; + }; + + clearDataRow = function () { + dataOutPutDocument = ''; + rowData = ''; + }; + + isDirtyFormOutput = function () { + var message_window; + $("input,select,textarea").blur(); + if (formOutput.isVisible()) { + if (formOutput.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + width: 490, + title: "Output Documents".translate(), + windowMessageType: "warning", + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + clearDataRow(); + message_window.close(); + if (clickedClose) { + tinymce.EditorManager.execCommand('mceRemoveControl', true, 'tinyeditor'); + winMainOutputDocument.close(); + } else { + clearDataRow(); + openGridPanelInMainWindow(); + } + + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + clearDataRow(); + if (clickedClose) { + tinymce.EditorManager.execCommand('mceRemoveControl', true, 'tinyeditor'); + winMainOutputDocument.close() + } else { + openGridPanelInMainWindow(); + } + } + } else { + winMainOutputDocument.close(); + } + }; + getGridOutput = function () { + var restClientGet = new PMRestClient({ + endpoint: 'output-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listOutputDocs = response; + gridOutput.setDataItems(listOutputDocs); + gridOutput.sort('out_doc_title', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + restClientGet.executeRestClient(); + }; + + disableAllItems = function () { + winMainOutputDocument.hideFooter(); + formOutput.reset(); + + winMainOutputDocument.getItems()[0].setVisible(false); + winMainOutputDocument.getItems()[1].setVisible(false); + for (var i = 0; i <= winMainOutputDocument.getItems()[1].getItems().length - 1; i += 1) { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(false); + } + btnSaveWindowOutputDoc.setVisible(false); + btnCloseWindowOutputDoc.setVisible(false); + btnSaveTiny.setVisible(false); + btnCancelTiny.setVisible(false); + + winMainOutputDocument.footer.getItems()[2].setVisible(false); + }; + + refreshGridPanelInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + winMainOutputDocument.setTitle("Output Documents".translate()); + getGridOutput(); + }; + + openGridPanelInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + winMainOutputDocument.setTitle("Output Documents".translate()); + $(winMainOutputDocument.body).removeClass("pmui-background"); + }; + + openFormInMainWindow = function () { + disableAllItems(); + winMainOutputDocument.showFooter(); + winMainOutputDocument.getItems()[1].setVisible(true); + for (var i = 0; i < winMainOutputDocument.getItems()[1].getItems().length; i += 1) { + if (winMainOutputDocument.getItems()[1].getItems()[i].type !== "PMTinyField") { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(true); + } + } + btnSaveWindowOutputDoc.setVisible(true); + btnCloseWindowOutputDoc.setVisible(true); + winMainOutputDocument.footer.getItems()[2].setVisible(true); + password.setVisible(false); + winMainOutputDocument.setTitle("Create Output Document".translate()); + winMainOutputDocument.setHeight(520); + formOutput.panel.style.addProperties({padding: '20px 10px'}); + formOutput.setFocus(); + + }; + + openFormForEditInMainWindow = function (outputDocumentData) { + disableAllItems(); + winMainOutputDocument.showFooter(); + btnSaveWindowOutputDoc.setVisible(true); + btnCloseWindowOutputDoc.setVisible(true); + winMainOutputDocument.footer.getItems()[1].setVisible(false); + formOutput.setWidth(700); + winMainOutputDocument.getItems()[1].setVisible(true); + winMainOutputDocument.setTitle("Edit Output Document".translate()); + $(winMainOutputDocument.body).addClass("pmui-background"); + for (var i = 0; i < winMainOutputDocument.getItems()[1].getItems().length; i += 1) { + if (winMainOutputDocument.getItems()[1].getItems()[i].type !== "PMTinyField") { + winMainOutputDocument.getItems()[1].getItems()[i].setVisible(true); + } + } + + password.setVisible(false); + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + var dataEdit = formOutput.getFields(); + dataEdit[0].setValue(dataOutPutDocument['out_doc_title']); + dataEdit[1].setValue(dataOutPutDocument['out_doc_filename']); + dataEdit[2].setValue(dataOutPutDocument['out_doc_description']); + dataEdit[3].setValue(dataOutPutDocument['out_doc_report_generator']); + dataEdit[4].setValue(dataOutPutDocument['out_doc_media']); + dataEdit[5].setValue(dataOutPutDocument['out_doc_landscape']); + dataEdit[6].setValue(dataOutPutDocument['out_doc_left_margin']); + dataEdit[7].setValue(dataOutPutDocument['out_doc_right_margin']); + dataEdit[8].setValue(dataOutPutDocument['out_doc_top_margin']); + dataEdit[9].setValue(dataOutPutDocument['out_doc_bottom_margin']); + dataEdit[10].setValue(dataOutPutDocument['out_doc_generate']); + + if (dataOutPutDocument["out_doc_generate"] != "DOC") { + dataEdit[11].setVisible(true); + } else { + dataEdit[11].setVisible(false); + } + + dataEdit[11].setValue(dataOutPutDocument['out_doc_pdf_security_enabled']); + if (dataOutPutDocument['out_doc_pdf_security_enabled'] != 0) { + password.setVisible(true); + } + dataEdit[12].setValue(dataOutPutDocument['out_doc_pdf_security_open_password']); + dataEdit[13].setValue(dataOutPutDocument['out_doc_pdf_security_owner_password']); + + dataOutPutDocument['out_doc_pdf_security_permissions'] = dataOutPutDocument['out_doc_pdf_security_permissions'].split("|"); + dataEdit[14].setValue(JSON.stringify(dataOutPutDocument['out_doc_pdf_security_permissions'])); + + dataEdit[15].setValue(dataOutPutDocument['out_doc_versioning']); + dataEdit[16].setValue(dataOutPutDocument['out_doc_destination_path']); + dataEdit[17].setValue(dataOutPutDocument['out_doc_tags']); + dataEdit[18].setValue(dataOutPutDocument["out_doc_open_type"]); + } + winMainOutputDocument.setHeight(520); + formOutput.panel.style.addProperties({padding: '20px 10px'}); + formOutput.setFocus(); + }; + + openTinyInMainWindow = function (outputDocumentData) { + //Fix for IE11 + var isIe11 = /Trident\/7\.0;.*rv\s*\:?\s*11/.test(navigator.userAgent); + + if (isIe11) { + tinyMCE.isGecko = false; + } + + //Set TinyMCE + disableAllItems(); + winMainOutputDocument.showFooter(); + tinyEditorField = 13; + winMainOutputDocument.getItems()[1].setVisible(true); + winMainOutputDocument.getItems()[1].getItems()[tinyEditorField].setVisible(true); + formOutput.setWidth(890); + btnSaveTiny.setVisible(true); + btnCancelTiny.setVisible(true); + if (!editorTiny.isInitialized) { + editorTiny.createHTML(); + editorTiny.setParameterTiny(); + editorTiny.isInitialized = true; + } else { + tinyMCE.execCommand('mceFocus', false, 'tinyeditor'); + } + var dataEdit = formOutput.getFields(); + winMainOutputDocument.setTitle("Edit Output Document".translate()); + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + dataOutPutDocument['out_doc_template'] = (dataOutPutDocument['out_doc_template'] != null) ? dataOutPutDocument['out_doc_template'] : ' '; + dataEdit[19].setValue(dataOutPutDocument['out_doc_template']); + dataEdit[19].setValueTiny(dataOutPutDocument['out_doc_template']); + dataEdit[19].setHeight(425); + + dataEdit[18].setVisible(false); + dataEdit[19].setVisible(true); + } + formOutput.panel.style.addProperties({padding: '0px 10px'}); + winMainOutputDocument.setHeight(520); + if (!editorTiny.isInitialized) + tinymce.execCommand('mceFocus', false, 'tinyeditor'); + }; + + deleteDataRow = function () { + confirmWindow = new PMUI.ui.MessageWindow({ + id: "outputMessageWindowWarning", + windowMessageType: 'warning', + bodyHeight: 'auto', + width: 490, + title: "Output Documents".translate(), + message: "Do you want to delete this Output Document?".translate(), + footerItems: [ + { + id: 'confirmWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + id: 'confirmWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + var restClient; + confirmWindow.close(); + restClient = new PMRestClient({ + endpoint: "output-document/" + dataOutPutDocument.out_doc_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems deleting the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document deleted successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + }, + buttonType: "success" + }, + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = "17px"; + confirmWindow.showFooter(); + }; + + updateOutput = function (data) { + dataOutPutDocument = ''; + var restClientUpdate = new PMRestClient({ + endpoint: "output-document/" + data.out_doc_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + dataOutPutDocument = data; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document edited successfully'.translate(), + flashContainer: gridOutput + }); + restClientUpdate.executeRestClient(); + }; + + editorTiny = new PMTinyField({ + id: 'outputEditorTiny', + theme: "advanced", + plugins: "advhr,advimage,advlink,advlist,autolink,autoresize,contextmenu,directionality,emotions,example,example_dependency,fullpage,fullscreen,iespell,inlinepopups,insertdatetime,layer,legacyoutput,lists,media,nonbreaking,noneditable,pagebreak,paste,preview,print,save,searchreplace,style,tabfocus,table,template,visualblocks,visualchars,wordcount,xhtmlxtras,pmSimpleUploader,pmVariablePicker,style", + mode: "specific_textareas", + editorSelector: "tmceEditor", + widthTiny: DEFAULT_WINDOW_WIDTH - 58, + heightTiny: DEFAULT_WINDOW_HEIGHT - 100, + directionality: 'ltr', + verifyHtml: false, + themeAdvancedButtons1: "pmSimpleUploader,|,pmVariablePicker,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect,|,cut,copy,paste,|,bullist,numlist,|,outdent,indent,blockquote", + themeAdvancedButtons2: "tablecontrols,|,undo,redo,|,link,unlink,image,|,forecolor,backcolor,styleprops,|,hr,removeformat,visualaid,|,sub,sup,|,ltr,rtl,|,code", + popupCss: "/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css", + contentCss: "/css/fonts.css,/fonts/styles.php", + themeAdvancedFonts: tcPdfFonts, + skin: "o2k7", + skin_variant: "silver" + }); + + docMargin = new PMUI.form.FormPanel({ + fieldset: true, + layout: 'hbox', + legend: "Margin".translate(), + items: [ + { + pmType: 'panel', + proportion: 0.7 + }, + { + pmType: "panel", + layout: 'vbox', + items: [ + { + id: 'outputDocMarginLeft', + pmType: "text", + label: "Left".translate(), + required: true, + value: 20, + name: "out_doc_left_margin", + controlsWidth: 50, + labelWidth: '35%' + }, { + id: 'outputDocMarginRight', + pmType: "text", + label: "Right".translate(), + required: true, + value: 20, + name: "out_doc_right_margin", + controlsWidth: 50, + labelWidth: '35%' + } + ] + }, + { + pmType: "panel", + layout: 'vbox', + proportion: 1.5, + items: [ + { + id: 'outputDocMarginTop', + pmType: "text", + label: "Top".translate(), + required: true, + value: 20, + name: "out_doc_top_margin", + controlsWidth: 50, + labelWidth: '27%' + }, { + id: 'outputDocMarginBottom', + pmType: "text", + label: "Bottom".translate(), + required: true, + value: 20, + name: "out_doc_bottom_margin", + controlsWidth: 50, + labelWidth: '27%' + } + ] + } + ] + }); + + //Field "Open Password - Owner Password" + outputFormDocPdfSecurityOpen = new PMUI.field.PasswordField({ + id: "outputFormDocPdfSecurityOpen", + name: "out_doc_pdf_security_open_password", + value: "", + label: "Open Password ".translate(), + required: true, + controlsWidth: 300 + }); + + outputFormDocPdfSecurityOwner = new PMUI.field.PasswordField({ + id: "outputFormDocPdfSecurityOwner", + name: "out_doc_pdf_security_owner_password", + value: "", + label: "Owner Password ".translate(), + required: true, + controlsWidth: 300 + + }); + + password = new PMUI.form.FormPanel({ + width: 500, + height: 130, + fieldset: true, + visible: false, + legend: "", + items: [ + { + pmType: "panel", + layout: 'vbox', + items: [ + outputFormDocPdfSecurityOpen, + outputFormDocPdfSecurityOwner + ] + }, + { + pmType: "panel", + layout: 'vbox', + items: [ + { + id: 'outputFormDocPdfSecurityPermissions', + pmType: 'checkbox', + label: "Allowed Permissions".translate(), + value: '', + name: 'out_doc_pdf_security_permissions', + required: false, + controlPositioning: 'horizontal', + separator: "|", + maxDirectionOptions: 4, + options: [ + { + id: 'monday', + label: "print".translate(), + value: 'print' + }, + { + id: 'monday', + label: "modify".translate(), + value: 'modify' + }, + { + id: 'monday', + label: "copy".translate(), + value: 'copy' + }, + { + id: 'monday', + label: "forms".translate(), + value: 'forms' + } + + ] + } + ] + } + ], + layout: "vbox" + }); + + //Field "PDF security" + outputFormDocPdfSecurityEnabled = new PMUI.field.DropDownListField({ + id: "outputDocDPFSecurity", + name: "out_doc_pdf_security_enabled", + label: "PDF security".translate(), + labelWidth: "27%", + valueType: "number", + visible: false, + + options: [ + { + value: 0, + label: "Disabled".translate(), + selected: true + }, + { + value: 1, + label: "Enabled".translate() + + } + ], + + controlsWidth: 100, + + onChange: function (newValue, prevValue) { + var visible = true; + + if (newValue == 0) { + visible = false; + + outputFormDocPdfSecurityOpen.setValue(""); + outputFormDocPdfSecurityOwner.setValue(""); + } + + password.setVisible(visible); + } + }); + + //the form is 700px width, but with the tiny grows to 890 + formOutput = new PMUI.form.Form({ + id: 'outputForm', + name: 'outputForm', + fieldset: true, + title: "", + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 43, + items: [ + { + id: 'outputDocTitle', + pmType: "text", + name: 'out_doc_title', + label: "Title".translate(), + labelWidth: '27%', + controlsWidth: 300, + required: true + }, + new CriteriaField({ + id: 'outputDocFilenameGenerated', + pmType: "text", + name: 'out_doc_filename', + label: "Filename generated".translate(), + labelWidth: '27%', + controlsWidth: 300, + required: true + }), + { + id: 'outputDocDescription', + pmType: "textarea", + name: 'out_doc_description', + label: "Description".translate(), + labelWidth: '27%', + controlsWidth: 500, + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: 'outputDocReportGenerator', + pmType: "dropdown", + name: 'out_doc_report_generator', + label: "Report Generator".translate(), + labelWidth: '27%', + require: true, + controlsWidth: 165, + options: [ + { + label: "TCPDF".translate(), + value: "TCPDF" + }, + { + label: "HTML2PDF (Old Version)".translate(), + value: "HTML2PDF" + } + ], + value: "TCPDF" + }, + { + id: 'outputDocMedia', + pmType: "dropdown", + name: 'out_doc_media', + label: "Media".translate(), + labelWidth: '27%', + controlsWidth: 165, + options: [ + {label: "Letter".translate(), value: "Letter"}, + {label: "Legal".translate(), value: "Legal"}, + {label: "Executive".translate(), value: "Executive"}, + {label: "B5".translate(), value: "B5"}, + {label: "Folio".translate(), value: "Folio"}, + {label: "A0Oversize".translate(), value: "A0Oversize"}, + {label: "A0".translate(), value: "A0"}, + {label: "A1".translate(), value: "A1"}, + {label: "A2".translate(), value: "A2"}, + {label: "A3".translate(), value: "A3"}, + {label: "A4".translate(), value: "A4"}, + {label: "A5".translate(), value: "A5"}, + {label: "A6".translate(), value: "A6"}, + {label: "A7".translate(), value: "A7"}, + {label: "A8".translate(), value: "A8"}, + {label: "A9".translate(), value: "A9"}, + {label: "A10", value: "A10"}, + {label: "Screenshot640".translate(), value: "SH640"}, + {label: "Screenshot800".translate(), value: "SH800"}, + {label: "Screenshot1024".translate(), value: "SH1024"} + ] + }, + { + id: 'outputDocOrientation', + pmType: "dropdown", + name: 'out_doc_landscape', + labelWidth: '27%', + label: "Orientation".translate(), + controlsWidth: 165, + options: [ + { + label: "Portrait".translate(), + selected: true, + value: 0 + }, + { + label: "Landscape".translate(), + value: 1 + } + ], + valueType: 'number' + }, + docMargin, + { + id: 'outputDocToGenerate', + pmType: "dropdown", + name: 'out_doc_generate', + controlsWidth: 70, + labelWidth: '27%', + label: "Output Document to Generate".translate(), + options: [ + { + label: "Both".translate(), + value: "BOTH" + }, + { + label: "Doc".translate(), + value: "DOC" + }, + { + label: "Pdf".translate(), + value: "PDF" + } + ], + value: "BOTH", + onChange: function (newValue, prevValue) { + if (newValue == "DOC") { + formOutput.getFields()[11].setVisible(false); + outputFormDocPdfSecurityEnabled.setVisible(false); + outputFormDocPdfSecurityEnabled.setValue(0); + password.setVisible(false); + outputFormDocPdfSecurityOpen.setValue(""); + outputFormDocPdfSecurityOwner.setValue(""); + } else { + formOutput.getFields()[11].setVisible(true); + } + } + }, + outputFormDocPdfSecurityEnabled, + password, + { + id: 'outputDocEnableVersioning', + pmType: "dropdown", + name: "out_doc_versioning", + controlsWidth: 70, + labelWidth: '27%', + label: 'Enable versioning'.translate(), + options: [ + { + label: "Yes".translate(), + value: 1 + }, + { + label: "No".translate(), + selected: true, + value: 0 + } + ], + valueType: 'number' + }, + new CriteriaField({ + id: 'outputDocDestinationPath', + pmType: "text", + name: "out_doc_destination_path", + labelWidth: '27%', + label: "Destination Path".translate(), + controlsWidth: 340 + }), + new CriteriaField({ + id: 'outputDocTags', + pmType: "text", + name: "out_doc_tags", + labelWidth: '27%', + label: "Tags".translate(), + controlsWidth: 340 + }), + { + id: "outputDocGenerateFileLink", + name: "cboByGeneratedFile", + pmType: "dropdown", + controlsWidth: 155, + labelWidth: "27%", + label: "By clicking on the generated file link".translate(), + + options: [ + { + value: 0, + label: "Open the file".translate() + }, + { + label: "Download the file".translate(), + value: 1, + selected: true + } + ], + + valueType: "number" + } + ], + style: { + cssProperties: { + marginLeft: '20px' + } + } + }); + + formOutput.style.addProperties({marginLeft: '20px'}); + gridOutput = new PMUI.grid.GridPanel({ + id: 'gridOutput', + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'gridOutputButtonShow', + title: '', + dataType: 'button', + buttonLabel: 'Show ID'.translate(), + columnData: "out_doc_uid", + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + showUID(data.out_doc_uid); + } + }, + { + title: 'Title'.translate(), + dataType: 'string', + width: '392px', + alignment: "left", + columnData: "out_doc_title", + sortable: true, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: '100px', + alignmentCell: 'left', + columnData: "out_doc_type", + sortable: true + }, + { + id: 'gridOutputButtonEdit', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + buttonLabel: 'Edit'.translate(), + onButtonClick: function (row, grid) { + messageRequired.hide(); + setDataRow(row); + openFormForEditInMainWindow(); + } + }, + { + id: 'gridOutputButtonProperties', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + buttonLabel: 'Open Editor'.translate(), + onButtonClick: function (row, grid) { + setDataRow(row); + openTinyInMainWindow(row); + } + }, + { + id: 'gridOutputButtonDelete', + title: '', + dataType: 'button', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + setDataRow(row); + deleteDataRow(); + } + } + ] + }); + + btnSaveWindowOutputDoc = new PMUI.ui.Button({ + id: 'btnSaveWindowOutputDoc', + text: "Save".translate(), + handler: function () { + var dataAux = getData2PMUI(formOutput.html); + if (dataAux.out_doc_title != "" && dataAux.out_doc_filename != "") { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + itemOutPut = getData2PMUI(formOutput.html); + } else { + itemOutPut = formOutput.getData(); + } + + itemOutPut['out_doc_type'] = "HTML"; + + var items = jQuery.parseJSON(itemOutPut['out_doc_pdf_security_permissions']); + itemOutPut['out_doc_pdf_security_permissions'] = ''; + for (var i = 0; i < items.length; i += 1) { + itemOutPut['out_doc_pdf_security_permissions'] += (i == 0) ? items[i] : '|' + items[i]; + } + + itemOutPut["out_doc_landscape"] = parseInt(itemOutPut["out_doc_landscape"]); + itemOutPut["out_doc_pdf_security_enabled"] = parseInt(itemOutPut["out_doc_pdf_security_enabled"]); + itemOutPut["out_doc_versioning"] = parseInt(itemOutPut["out_doc_versioning"]); + itemOutPut["out_doc_open_type"] = parseInt(getData2PMUI(formOutput.html).cboByGeneratedFile); + + if (dataOutPutDocument != '' && dataOutPutDocument != undefined) { + itemOutPut['out_doc_uid'] = dataOutPutDocument.out_doc_uid; + restClient = new PMRestClient({ + endpoint: "output-document/" + dataOutPutDocument.out_doc_uid, + typeRequest: 'update', + data: itemOutPut, + functionSuccess: function (xhr, response) { + dataOutPutDocument = itemOutPut; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document edited successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + } else { + if (1 === parseInt(dataAux.out_doc_pdf_security_enabled) && (dataAux.out_doc_pdf_security_open_password.trim() === "" || dataAux.out_doc_pdf_security_owner_password.trim() === "")) { + password.getItems()[0].getItems()[0].isValid(); + password.getItems()[0].getItems()[1].isValid(); + return false; + } + itemOutPut['out_doc_uid'] = ''; + restClient = new PMRestClient({ + endpoint: "output-document", + typeRequest: 'post', + data: itemOutPut, + functionSuccess: function (xhr, response) { + dataOutPutDocument = itemOutPut; + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems saved the OutputDocument, please try again.".translate(), + messageSuccess: 'Output Document saved successfully'.translate(), + flashContainer: gridOutput + }); + restClient.executeRestClient(); + } + clearDataRow(); + } else { + formOutput.getField("out_doc_title").isValid(); + formOutput.getField("out_doc_filename").isValid(); + } + }, + buttonType: 'success' + }); + + btnCloseWindowOutputDoc = new PMUI.ui.Button({ + id: 'btnCloseWindowOutputDoc', + text: "Cancel".translate(), + handler: function () { + clickedClose = false; + isDirtyFormOutput(); + }, + buttonType: 'error' + }); + + newButtonOutput = new PMUI.ui.Button({ + id: 'outputButtonNew', + text: 'Create'.translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + clearDataRow(); + openFormInMainWindow(); + } + }); + + btnCancelTiny = new PMUI.ui.Button({ + id: 'btnCloseTiny', + text: 'Cancel'.translate(), + handler: function () { + /*if (typeof dataOutPutDocument['externalType'] != 'undefined' && dataOutPutDocument['externalType']) { + winMainOutputDocument.close(); + return; + }*/ + PMDesigner.hideAllTinyEditorControls(); + clickedClose = false; + isDirtyFormOutput(); + }, + buttonType: 'error' + }); + + btnSaveTiny = new PMUI.ui.Button({ + id: 'btnSaveTiny', + text: 'Save'.translate(), + handler: function () { + PMDesigner.hideAllTinyEditorControls(); + dataOutPutDocument['out_doc_template'] = tinyMCE.activeEditor.getContent(); + updateOutput(dataOutPutDocument); + if (typeof dataOutPutDocument['externalType'] != 'undefined' && dataOutPutDocument['externalType']) { + winMainOutputDocument.close(); + return; + } + clearDataRow(); + refreshGridPanelInMainWindow(); + }, + buttonType: 'success' + }); + + winMainOutputDocument = new PMUI.ui.Window({ + id: "winMainOutputDocument", + title: "Output Documents".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: "bottom", + onBeforeClose: function () { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = true; + isDirtyFormOutput(); + }, + footerItems: [ + btnCancelTiny, + btnSaveTiny, + btnCloseWindowOutputDoc, + btnSaveWindowOutputDoc] + }); + + formOutput.addItem(editorTiny); + formOutput.footer.setVisible(false); + + winMainOutputDocument.addItem(gridOutput); + winMainOutputDocument.addItem(formOutput); + + refreshGridPanelInMainWindow(); + + validateKeysField(docMargin.getField('out_doc_left_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_right_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_top_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + validateKeysField(docMargin.getField('out_doc_bottom_margin').getControls()[0].getHTML(), ['isbackspace', 'isnumber']); + + if (typeof listOutputDocs !== "undefined") { + winMainOutputDocument.open(); + $('#gridOutput .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + messageRequired = $(document.getElementById("requiredMessage")); + applyStyleWindowForm(winMainOutputDocument); + + editorTiny.isInitialized = false; + winMainOutputDocument.footer.html.style.textAlign = 'right'; + + gridOutput.dom.toolbar.appendChild(newButtonOutput.getHTML()); + newButtonOutput.defineEvents(); + winMainOutputDocument.defineEvents(); + disableAllItems(); + winMainOutputDocument.getItems()[0].setVisible(true); + } + }; + + PMDesigner.output.showTiny = function (uid) { + getItemdOutput = function () { + var restClientGet = new PMRestClient({ + endpoint: 'output-document/' + uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + dataOutPutDocument = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + restClientGet.executeRestClient(); + }; + getItemdOutput(); + dataOutPutDocument['externalType'] = true; + openTinyInMainWindow(dataOutPutDocument); + }; + + PMDesigner.output.create = function () { + openFormInMainWindow(); + }; +}()); + +( + function () { + var iframeRT, + reportWindow, + pathSrc; + + PMDesigner.reporttable = function (event) { + reportWindow = new PMUI.ui.Window({ + id: 'reportTableWindow', + title: "Report Tables".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT + }); + + pathSrc = window.parent.location; + + iframeRT = new PMIframe({ + id: 'reporTableIframe', + src: window.location.href.split("/")[0] + "//" + pathSrc.host + "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/pmTables?PRO_UID=" + PMDesigner.project.id + "&flagProcessmap=1", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 36, + scrolling: 'no', + frameborder: '0' + }); + + reportWindow.addItem(iframeRT); + reportWindow.open(); + reportWindow.setBodyPadding(0); + }; + + PMDesigner.reporttable.create = function () { + pathSrc = window.parent.location; + reportWindow.clearItems(); + iframeRT = new PMIframe({ + id: 'reporTableIframe', + src: window.location.href.split("/")[0] + "//" + pathSrc.host + "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/pmTables/edit?PRO_UID=" + PMDesigner.project.id + "&tableType=report&flagProcessmap=1", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 36, + scrolling: 'no', + frameborder: '0' + }); + reportWindow.addItem(iframeRT); + reportWindow.open(); + reportWindow.setBodyPadding(0); + } + + }() +); +(function () { + $ctrlSpaceMessage = $("

" + "Press".translate() + " ctrl+space " + "to get the function list".translate() + ".

"); + var btnCopyImport, openFormCustom, formEditTriggerCustom; + var triggerOriginDataForUpdate = {}; + PMDesigner.trigger = function (event) { + var listTriggers, + clickedClose = true, + message_ErrorWindow, + flagChanges, + isDirtyFormTrigger, + gridListTrigger, + getListTrigger, + addNumberTriggerWizard, + newTriggerOptions, + allTreesItems, + buttonNew, + buttonCopy, + buttonWizard, + openListTriggers, + openFormWizard, + openFormWizardEditMode, + openFormCopy, + openFormEditCode, + openNewTriggerOptions, + listProjects, + getListProjects, + triggerSelectedData, + formCopyTrigger, + codMirr, + formEditTriggerWizard, + sepInputs, + labelInputs, + paramPanel, + sepOutputs, + labelOutputs, + returnPanel, + parameterItems, + returnItems, + treeNewTrigger, + accordionNewTrigger, + updateCustom, + checkIfValuesAreEqual, + buttonSave, + copyButton, + applyButton, + btnEditSourceCode, + buttonCancel, + editCode, + formEditCode, + triggerWindow, + formcustom; + + message_ErrorWindow = new PMUI.ui.MessageWindow({ + id: "errorMessage", + width: 490, + windowMessageType: 'error', + title: "Triggers".translate(), + message: "This is an error message.".translate(), + footerItems: [ + { + text: 'OK'.translate(), + handler: function () { + message_ErrorWindow.close(); + }, + buttonType: "success" + } + ] + }); + + isDirtyFormTrigger = function () { + $("input,select,textarea").blur(); + $("div.pmui-window-body.pmui-background").css('overflow', ''); + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + var accordionnewtrigger = triggerWindow.getItems()[5]; + var flag = false; + + var finalData = { + tri_uid: getData2PMUI(formEditTriggerCustom.html).uid, + tri_title: getData2PMUI(formEditTriggerCustom.html).title, + tri_description: getData2PMUI(formEditTriggerCustom.html).description, + tri_webbot: getData2PMUI(formEditTriggerCustom.html).code + }; + + if (formcustom.isVisible() == true) { + flag = (checkIfValuesAreEqual(triggerOriginDataForUpdate, finalData)) ? false : true; + } else if (formwizard.isVisible() == true) { + flag = formEditTriggerWizard.isDirty(); + } else if (formcopy.isVisible() == true) { + flag = formCopyTrigger.isDirty(); + if (!flag) { + $('.ctrlSpaceMessage').remove(); + } + } else if (formeditcode.isVisible() == true) { + flag = formeditcode.isDirty(); + var flagFormCustom = (checkIfValuesAreEqual(triggerOriginDataForUpdate, finalData)) ? false : true; + if (!flag && formeditcode.getItems()[0].controls[0].value != "" || flagFormCustom) { + flag = true; + } + } + + if (flag == true) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + title: "Triggers".translate(), + windowMessageType: 'warning', + width: 490, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, { + text: "Yes".translate(), + handler: function () { + triggerOriginDataForUpdate = {}; + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + + if (formcustom.isVisible() == true) { + var uidInForm = formEditTriggerCustom.getFields()[0].getValue(); + formEditTriggerCustom.reset(); + openListTriggers(); + } else if (formwizard.isVisible() == true) { + var uidInForm = formEditTriggerWizard.getFields()[0].getValue(); + formEditTriggerWizard.reset(); + openListTriggers(); + } else if (formcopy.isVisible() == true) { + $('.ctrlSpaceMessage').remove(); + formCopyTrigger.reset(); + openListTriggers(); + } else if (formeditcode.isVisible() == true) { + formeditcode.reset(); + openFormCustom("Edit".translate()); + } + message_window.close(); + if (clickedClose) { + triggerWindow.close(); + } + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + var formcustom = triggerWindow.getItems()[1]; + var formwizard = triggerWindow.getItems()[2]; + var formcopy = triggerWindow.getItems()[3]; + var formeditcode = triggerWindow.getItems()[4]; + var accordionnewtrigger = triggerWindow.getItems()[5]; + + if (formcustom.isVisible() == true) { + var uidInForm = formEditTriggerCustom.getFields()[0].getValue(); + formEditTriggerCustom.reset(); + openListTriggers(); + } else if (formwizard.isVisible() == true) { + var uidInForm = formEditTriggerWizard.getFields()[0].getValue(); + formEditTriggerWizard.reset(); + openListTriggers(); + } else if (formcopy.isVisible() == true) { + formCopyTrigger.reset(); + openListTriggers(); + } else if (formeditcode.isVisible() == true) { + formeditcode.reset(); + openFormCustom("Edit".translate()); + } else if (accordionnewtrigger.isVisible() == true) { + openListTriggers(); + } + if (clickedClose) { + triggerWindow.close(); + } + } + }; + //GRID List Case Scheduler + gridListTrigger = new PMUI.grid.GridPanel({ + id: "listTriggers", + pageSize: 10, + width: "96%", + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterPlaceholder: 'Search ...'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'listTriggersButtonShow', + title: '', + dataType: 'button', + searchable: false, + buttonLabel: 'Show ID'.translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-show' + ] + }, + id: 'copyuid', + onButtonClick: function (row, grid) { + var dataRow = row.getData(); + messageWindow = new PMUI.ui.MessageWindow({ + id: 'dynaformMessageWindowUID', + windowMessageType: 'info', + width: 490, + title: "Triggers".translate(), + message: dataRow.tri_uid, + footerItems: [ + { + text: 'OK'.translate(), + handler: function () { + messageWindow.close(); + }, + buttonType: "success" + } + ] + }); + messageWindow.setTitle("ID".translate()); + messageWindow.open(); + messageWindow.showFooter(); + $(messageWindow.dom.icon).removeClass(); + } + }, + { + title: 'Title'.translate(), + id: "title", + dataType: 'string', + width: "407px", + visible: true, + columnData: "tri_title", + searcheable: true, + sortable: true, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + id: "type", + dataType: 'string', + width: "225px", + visible: true, + alignmentCell: 'left', + columnData: function (data) { + if (typeof(data.tri_param) == "object" && typeof(data.tri_param.params) == "object") { + var wizardData = data.tri_param.params; + + return wizardData.LIBRARY_NAME; + } else { + return "Custom"; + } + }, + searcheable: true, + sortable: true + }, + { + id: "editButton", + title: '', + dataType: 'button', + messageTooltip: "Edit".translate(), + buttonLabel: "Edit".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + triggerOriginDataForUpdate = {}; + var data = row.getData(); + triggerOriginDataForUpdate = data; + var fields; + if (data.tri_param == "") { + + openFormCustom("Edit".translate()); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(580, 160); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(data.tri_uid); + fields.getItems()[1].setValue(data.tri_title); + fields.getItems()[2].setValue(data.tri_description); + formEditTriggerCustom.getItems()[1].setValue(data.tri_webbot); + + codeMirrorControl.setValue(data.tri_webbot); + codeMirrorControl.refresh(); + } else { + openFormWizardEditMode(); + + var wizardData = data.tri_param.params; + + var lib = wizardData.LIBRARY_CLASS; + lib = lib.split('.'); + lib = lib[1]; + fields = formEditTriggerWizard.getFields(); + fields[0].setValue(data.tri_uid); + fields[1].setValue(lib); + fields[2].setValue(wizardData.PMFUNTION_NAME); + fields[3].setValue(wizardData.LIBRARY_NAME + " (" + wizardData.PMFUNTION_LABEL + ")"); + fields[4].setValue(data.tri_title); + fields[5].setValue(data.tri_description); + fields[6].setValue(data.tri_webbot); + + var inputItems = []; + var outputItems = []; + + restClient = new PMRestClient({ + endpoint: "trigger-wizard/" + lib + "/" + wizardData.PMFUNTION_NAME, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (response.fn_params.input != undefined) { + for (j = 0; j < response.fn_params.input.length; j++) { + var nameInput = response.fn_params.input[j].name; + + var inp = new CriteriaField({ + id: nameInput, + pmType: "text", + name: nameInput, + label: response.fn_params.input[j].label, + value: wizardData[nameInput].toString(), + controlsWidth: 400, + labelWidth: '27%', + helper: response.fn_params.input[j].description, + required: response.fn_params.input[j].name === "unpauseDate" ? true : response.fn_params.input[j].required + }); + + inputItems.push(inp); + } + } + if (response.fn_params.output != undefined) { + for (k = 0; k < response.fn_params.output.length; k++) { + var nameOutput = response.fn_params.output[k].name; + + var out = new CriteriaField({ + id: nameOutput, + pmType: "text", + name: nameOutput, + label: response.fn_params.output[k].label, + value: wizardData.TRI_ANSWER.toString(), + controlsWidth: 400, + labelWidth: '27%', + helper: response.fn_params.output[k].description, + required: response.fn_params.output[k].required + }); + + outputItems.push(out); + } + } + triggerWindow.setTitle("Edit".translate() + " " + wizardData.LIBRARY_NAME); + if (inputItems.length > 0) { + formEditTriggerWizard.getItems()[1].setVisible(true); + formEditTriggerWizard.getItems()[2].setVisible(true); + formEditTriggerWizard.getItems()[3].setVisible(true); + formEditTriggerWizard.getItems()[3].clearItems(); + formEditTriggerWizard.getItems()[3].setItems(inputItems); + } else { + formEditTriggerWizard.getItems()[1].setVisible(false); + formEditTriggerWizard.getItems()[2].setVisible(false); + formEditTriggerWizard.getItems()[3].setVisible(false); + formEditTriggerWizard.getItems()[3].clearItems(); + } + if (outputItems.length > 0) { + formEditTriggerWizard.getItems()[4].setVisible(true); + formEditTriggerWizard.getItems()[5].setVisible(true); + formEditTriggerWizard.getItems()[6].setVisible(true); + formEditTriggerWizard.getItems()[6].clearItems(); + formEditTriggerWizard.getItems()[6].setItems(outputItems); + } else { + formEditTriggerWizard.getItems()[4].setVisible(false); + formEditTriggerWizard.getItems()[5].setVisible(false); + formEditTriggerWizard.getItems()[6].setVisible(false); + formEditTriggerWizard.getItems()[6].clearItems(); + } + labelInputs.dom.labelTextContainer.style.display = "none"; + labelOutputs.dom.labelTextContainer.style.display = "none"; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the triggers wizard list, please try again.".translate() + }); + restClient.executeRestClient(); + } + } + }, + { + id: "deleteButton", + title: '', + dataType: 'button', + messageTooltip: "Delete".translate(), + buttonLabel: "Delete".translate(), + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + var questionWindow, dataRow = row.getData(); + + questionWindow = new PMUI.ui.MessageWindow({ + id: "questionDeleteWindow", + title: "Triggers".translate(), + windowMessageType: 'warning', + width: 490, + message: "Do you want to delete this Trigger?".translate(), + footerItems: [ + { + id: 'questionDeleteWindowButtonNo', + text: "No".translate(), + visible: true, + handler: function () { + questionWindow.close(); + }, + buttonType: "error" + }, { + id: 'questionDeleteWindowButtonYes', + text: "Yes".translate(), + visible: true, + handler: function () { + questionWindow.close(); + restClient = new PMRestClient({ + endpoint: "trigger/" + dataRow.tri_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "Trigger deleted successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + }, + buttonType: "success" + }, + ] + }); + + questionWindow.open(); + questionWindow.dom.titleContainer.style.height = "17px"; + questionWindow.showFooter(); + } + } + ], + dataItems: listTriggers, + onRowClick: function (row, data) { + + } + }); + + getListTrigger = function () { + var restClient = new PMRestClient({ + endpoint: 'triggers', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listTriggers = response; + gridListTrigger.setDataItems(listTriggers); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + + addNumberTriggerWizard = function (value, position) { + coutTriggers = document.createElement("span"); + coutTriggers.textContent = value; + headerAccordion = triggerWindow.getItems()[5].getItems()[position].header.html; + headerAccordion.appendChild(coutTriggers); + coutTriggers.style.float = "right"; + coutTriggers.style.color = "white"; + coutTriggers.style.fontSize = "13px"; + coutTriggers.style.marginRight = "6px"; + coutTriggers.style.marginTop = "3px"; + }; + + newTriggerOptions = function () { + + var acItemCustom = accordionNewTrigger.getItems()[0]; + var acItemCopy = accordionNewTrigger.getItems()[1]; + acItemCustom.setIconClosed('pmcustomtrigger'); + acItemCustom.setIconExpanded('pmcustomtrigger'); + acItemCopy.setIconClosed('pmcopytrigger'); + acItemCopy.setIconExpanded('pmcopytrigger'); + + var itemCustom = jQuery("#custom > .pmui-accordion-item-header > span")[1]; + itemCustom.style.width = "0px"; + var itemCopy = jQuery("#copy > .pmui-accordion-item-header > span")[1]; + itemCopy.style.width = "0px"; + + var numOfItems = accordionNewTrigger.getItems(); + + var lengthLibFunctions = []; + if (numOfItems.length <= 2) { + restClient = new PMRestClient({ + endpoint: "trigger-wizards", + typeRequest: 'get', + functionSuccess: function (xhr, response) { + for (i = 0; i < response.length; i++) { + var functTree = response[i].lib_functions; + lengthLibFunctions[i] = functTree.length; + var newTreeItems = []; + for (h = 0; h < functTree.length; h++) { + newTreeItems.push({ + label: functTree[h].fn_label, + id: functTree[h].fn_name, + onClick: function () { + for (s = 0; s < response.length; s++) { + for (p = 0; p < response[s].lib_functions.length; p++) { + if (response[s].lib_functions[p].fn_name == this.id) { + var fn = response[s].lib_functions[p].fn_params; + var fnLabel = response[s].lib_functions[p].fn_label; + var fnName = response[s].lib_functions[p].fn_name; + var libName = response[s].lib_name; + var libTitle = response[s].lib_title; + p = response[s].lib_functions.length; + s = response.length - 1; + } + } + } + var inputItems = []; + if (fn.input != undefined) { + for (j = 0; j < fn.input.length; j++) { + var val = ""; + if (fn.input[j].type == "array") { + val = "array('')"; + } + var inp = new CriteriaField({ + id: fn.input[j].name, + pmType: "text", + name: fn.input[j].name, + label: fn.input[j].label, + controlsWidth: 400, + labelWidth: '27%', + value: val, + helper: fn.input[j].description, + required: fn.input[j].name === "unpauseDate" ? true : fn.input[j].required + }); + + inputItems.push(inp); + } + } + + var outputItems = []; + if (fn.output != undefined) { + for (k = 0; k < fn.output.length; k++) { + var out = new CriteriaField({ + id: fn.output[k].name, + pmType: "text", + name: fn.output[k].name, + label: fn.output[k].label, + controlsWidth: 400, + labelWidth: '27%', + helper: fn.output[k].description, + required: fn.output[k].required + }); + + outputItems.push(out); + } + } + formEditTriggerWizard.reset(); + formEditTriggerWizard.setTitle(fnLabel + ' (' + fnName + ')'); + formEditTriggerWizard.getItems()[0].getItems()[1].setValue(libName); + formEditTriggerWizard.getItems()[0].getItems()[2].setValue(fnName); + formEditTriggerWizard.getItems()[0].getItems()[3].setValue(libTitle + ' (' + fnLabel + ')'); + + if (inputItems.length > 0) { + formEditTriggerWizard.getItems()[1].setVisible(true); + formEditTriggerWizard.getItems()[2].setVisible(true); + formEditTriggerWizard.getItems()[3].setVisible(true); + formEditTriggerWizard.getItems()[3].clearItems(); + formEditTriggerWizard.getItems()[3].setItems(inputItems); + } else { + formEditTriggerWizard.getItems()[1].setVisible(false); + formEditTriggerWizard.getItems()[2].setVisible(false); + formEditTriggerWizard.getItems()[3].setVisible(false); + formEditTriggerWizard.getItems()[3].clearItems(); + } + if (outputItems.length > 0) { + formEditTriggerWizard.getItems()[4].setVisible(true); + formEditTriggerWizard.getItems()[5].setVisible(true); + formEditTriggerWizard.getItems()[6].setVisible(true); + formEditTriggerWizard.getItems()[6].clearItems(); + formEditTriggerWizard.getItems()[6].setItems(outputItems); + } else { + formEditTriggerWizard.getItems()[4].setVisible(false); + formEditTriggerWizard.getItems()[5].setVisible(false); + formEditTriggerWizard.getItems()[6].setVisible(false); + formEditTriggerWizard.getItems()[6].clearItems(); + } + openFormWizard(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + triggerWindow.setTitle("Create".translate() + " " + libTitle); + } + }); + } + labelInputs.dom.labelTextContainer.style.display = "none"; + labelOutputs.dom.labelTextContainer.style.display = "none"; + allTreesItems[i] = newTreeItems; + + var arrayTriggerWizards = [ + "pmFunctions", + "pmSugar", + "pmTalend", + "pmTrAlfresco", + "pmTrSharepoint", + "pmZimbra" + ]; + + if (arrayTriggerWizards.indexOf(response[i].lib_name) == -1) { + $("head").append(""); + } + + //Accordion + var newAccordionItem = []; + newAccordionItem = { + iconClass: response[i].lib_name, + id: response[i].lib_name, + title: response[i].lib_title, + height: 'auto' + }; + accordionNewTrigger.addItem(newAccordionItem); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the triggers wizard list, please try again.".translate() + }); + restClient.executeRestClient(); + } + + openNewTriggerOptions(); + var accordion = triggerWindow.getItems()[5].getItems(); + accordion[0].setVisible(false); + accordion[1].setVisible(false); + for (i = 0; i < accordion.length; i++) { + accordion[i].header.html.style.backgroundColor = "#FFFFFF"; + if (i > 1) { + addNumberTriggerWizard(lengthLibFunctions[i - 2], (i)); + } + } + }; + + allTreesItems = []; + getListTrigger(); + + //Button NEW Trigger + buttonNew = new PMUI.ui.Button({ + id: 'newTriggerButton', + text: "Create".translate(), + height: "36px", + width: 100, + handler: function (event) { + openFormCustom("Create".translate()); + formEditTriggerCustom.getField("code").dom.labelTextContainer.style.width = "23.8%"; + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + formEditTriggerCustom.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(580, 150); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + formEditTriggerCustom.reset(); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(""); + fields.getItems()[1].setValue(""); + fields.getItems()[2].setValue(""); + formEditTriggerCustom.getItems()[1].setValue(""); + formEditTriggerCustom.getItems()[1].controls[0].cm.setValue(""); + codeMirrorControl.refresh(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + //Button COPY Trigger + buttonCopy = new PMUI.ui.Button({ + id: 'copyTriggerButton', + text: "Copy".translate(), + height: "36px", + width: 100, + handler: function (event) { + getListProjects(); + openFormCopy(); + formCopyTrigger.getFields()[1].clearOptions(); + $("#Code .CodeMirror.cm-s-default.CodeMirror-wrap").css({'border': '1px solid #c0c0c0'}); + + var cmControlCopyTrigger = formCopyTrigger.getFields()[4].controls[0].cm; + cmControlCopyTrigger.setValue(""); + if (cmControlCopyTrigger !== undefined) { + cmControlCopyTrigger.setSize(650, 140); + } + cmControlCopyTrigger.refresh(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + //Button WIZARD Trigger + buttonWizard = new PMUI.ui.Button({ + id: 'wizardTriggerButton', + text: "Wizard".translate(), + height: "36px", + width: 100, + handler: function (event) { + newTriggerOptions(); + }, + style: { + cssClasses: [ + 'mafe-button-create' + ] + } + }); + + openListTriggers = function () { + triggerWindow.getItems()[0].setVisible(true); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Triggers".translate()); + triggerWindow.hideFooter(); + $(triggerWindow.body).removeClass("pmui-background"); + }; + + openFormCustom = function (typeTitle) { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(true); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + + triggerWindow.setTitle(typeTitle + " Custom Trigger".translate()); + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerCustom.setFocus(); + + $('.CodeMirror.cm-s-default')[0].style.border = "1px solid #c0c0c0"; + if (formEditTriggerCustom.getItems()[0].getItems()[1].visible == false) { + var fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[1].setVisible(true); + fields.getItems()[2].setVisible(true); + formEditTriggerCustom.footer.getItems()[1].setVisible(true); + } + formEditTriggerCustom.getFields()[4].dom.labelTextContainer.style.marginLeft = "10px"; + formEditTriggerCustom.setAlignmentButtons('left'); + + $("#code").after($ctrlSpaceMessage.css({ + "margin": "5px 0 0 0", + "text-align": "center", + "width": "655px", + "padding": "" + })); + }; + + openFormWizard = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(true); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerWizard.setFocus(); + }; + + openFormWizardEditMode = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(true); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(true); //button Save + triggerWindow.footer.getItems()[2].setVisible(true); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formEditTriggerWizard.setFocus(); + }; + + + openFormCopy = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(true); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Copy Trigger".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(true); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + formCopyTrigger.setFocus(); + + $(".pmui-field").css("float", "left"); + $('#Code .pmui.pmui-pmcodemirrorcontrol').append($ctrlSpaceMessage.css({ + "margin-top": "10px", + "text-align": "", + "width": "655px", + "padding": "" + })); + }; + + openFormEditCode = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(true); + triggerWindow.getItems()[5].setVisible(false); + triggerWindow.setTitle("Editor".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(true); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).addClass("pmui-background"); + + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).after($ctrlSpaceMessage.css({ + "padding": "5px 0 0 10px", + "text-align": "" + })); + + }; + + openNewTriggerOptions = function () { + triggerWindow.getItems()[0].setVisible(false); + triggerWindow.getItems()[1].setVisible(false); + triggerWindow.getItems()[2].setVisible(false); + triggerWindow.getItems()[3].setVisible(false); + triggerWindow.getItems()[4].setVisible(false); + triggerWindow.getItems()[5].setVisible(true); + triggerWindow.setTitle("Create Predefined Trigger".translate()); + triggerWindow.footer.getItems()[0].setVisible(true); //button Cancel + triggerWindow.footer.getItems()[1].setVisible(false); //button Save + triggerWindow.footer.getItems()[2].setVisible(false); //Edit Source Code + triggerWindow.footer.getItems()[3].setVisible(false); //button Aply + triggerWindow.footer.getItems()[4].setVisible(false); //button Copy/import + triggerWindow.showFooter(); + $(triggerWindow.body).removeClass("pmui-background"); + }; + + //obtaning the list of process to show it on the copy/import of a trigger dropdown + listProjects = []; + getListProjects = function () { + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + listProjects = []; + formCopyTrigger.getFields()[0].clearOptions(); + listProjects[0] = { + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + }; + for (i = 0; i < response.length; i++) { + listProjects.push({ + label: response[i].prj_name, + value: response[i].prj_uid + }); + } + formCopyTrigger.getFields()[0].setOptions(listProjects); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the list of projects.".translate() + }); + restClient.setBaseEndPoint('projects'); + restClient.executeRestClient(); + }; + + //form Copy/Import Trigger + triggerSelectedData; + formCopyTrigger = new PMUI.form.Form({ + id: "formCopyTriggers", + border: true, + width: '890px', + height: 'auto', + title: "", + visibleHeader: false, + items: [ + { + pmType: 'dropdown', + id: "processField", + label: 'Process'.translate(), + name: 'prj_uid', + required: true, + controlsWidth: 300, + value: "", + options: listProjects, + onChange: function (newValue, prevValue) { + var formFields = formCopyTrigger.getFields(); + formFields[2].setValue(""); + formFields[3].setValue(""); + formFields[4].controls[0].cm.setValue(""); + + var uidProj = newValue, myForm = this.form; + + //obtaning the Trigger list of the process SELECTED + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + triggerSelectedData = response; + var listTriggersCopy = []; + listTriggersCopy[0] = { + label: "- Select a trigger -".translate(), + value: "", + disabled: true, + selected: true + }; + + for (i = 0; i < response.length; i++) { + listTriggersCopy.push({ + label: response[i].tri_title, + value: response[i].tri_uid + }); + } + formFields[1].setOptions(listTriggersCopy); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the list of triggers.".translate() + }); + restClient.setBaseEndPoint("project/" + uidProj + "/triggers"); + restClient.executeRestClient(); + } + }, + { + pmType: 'dropdown', + id: "triggerField", + label: 'Trigger'.translate(), + name: 'tri_uid', + required: true, + controlsWidth: 300, + value: "", + options: [], + onChange: function (newValue, prevValue) { + var formFields = formCopyTrigger.getFields(); + formFields[2].setValue(""); + formFields[3].setValue(""); + formFields[4].controls[0].cm.setValue(""); + + var uidTri = newValue; + + for (i = 0; i < triggerSelectedData.length; i++) { + if (triggerSelectedData[i].tri_uid == uidTri) { + formFields[2].setValue(triggerSelectedData[i].tri_title); + formFields[3].setValue(triggerSelectedData[i].tri_description); + formFields[4].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + } + } + } + }, + { + pmType: "text", + id: "triTitle", + label: "Title of the new trigger".translate(), + placeholder: "Insert the title of the new trigger".translate(), + name: "tri_title", + required: true, + valueType: 'string', + controlsWidth: 300, + style: { + cssProperties: { + 'float': 'left' + } + } + }, + { + pmType: "textarea", + id: "triDescription", + rows: 80, + name: 'tri_description', + label: "Description of the new trigger".translate(), + valueType: 'string', + controlsWidth: 652, + style: { + cssClasses: ['mafe-textarea-resize'], + cssProperties: {'float': 'left'} + } + } + ] + }); + codMirr = new PMCodeMirrorField(); + codMirr.setLabel("Code".translate()); + codMirr.setID("Code"); + codMirr.setName('tri_webbot'); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + formCopyTrigger.addItem(codMirr); + + //Form to Edit the trigger with the WIZARD (we used a Form because we need buttons to save the changes) + formEditTriggerWizard = new PMUI.form.Form({ + id: "formEditTriggerWizard", + border: true, + visibleHeader: false, + name: "formwizard", + width: 926, + title: "New Trigger".translate(), + items: [ + { + id: "panelDetailsWizard", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: 'auto', + legend: "DETAILS".translate(), + items: [ + { + id: "uid", + pmType: "text", + label: "ID".translate(), + value: "", + name: "uid", + visible: false, + valueType: 'string' + }, + { + id: "libName", + pmType: "text", + label: "", + value: "", + name: "libName", + visible: false, + valueType: 'string' + }, + { + id: "fnName", + pmType: "text", + label: "", + value: "", + name: "fnName", + visible: false, + valueType: 'string' + }, + { + id: "type", + pmType: "text", + label: "Type".translate(), + value: "WIZARD", + controlsWidth: 450, + labelWidth: '27%', + readOnly: true, + name: "type", + valueType: 'string' + }, + { + id: "titleDetailsWiz", + pmType: "text", + label: "Title".translate(), + value: "", + controlsWidth: 450, + labelWidth: '27%', + name: "titleDetails", + valueType: 'string', + required: true + }, + { + id: "descriptionDetailsWiz", + pmType: "textarea", + label: "Description".translate(), + value: "", + rows: 90, + width: '300px', + controlsWidth: 450, + labelWidth: '27%', + name: "descriptionDetails", + valueType: 'string', + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: "webbot", + pmType: "text", + label: "Webbot".translate(), + value: "", + name: "webbot", + controlsWidth: 300, + labelWidth: '27%', + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + //adding a separator Inputs line + sepInputs = new PMSeparatorLineField({ + controlHeight: '1px', + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + formEditTriggerWizard.addItem(sepInputs); + + //adding a label Inputs + labelInputs = new PMLabelField({ + text: "PARAMETERS".translate(), + textMode: "plain", + style: { + cssProperties: { + color: "#AEAEAE", + 'font-weight': 'bold' + } + }, + controlsWidth: 885 + }); + formEditTriggerWizard.addItem(labelInputs); + + //adding the Inputs Items (PARAMETERS) Panel + paramPanel = new PMUI.form.FormPanel({ + id: "panelParametersWizard", + layout: 'vbox', + fieldset: false, + height: 'auto', + visible: false, + legend: "__PARAMETERS__".translate(), + items: [] + }); + formEditTriggerWizard.addItem(paramPanel); + + //adding a separator Outputs line + sepOutputs = new PMSeparatorLineField({ + controlHeight: 1, + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + formEditTriggerWizard.addItem(sepOutputs); + + //adding a label Outputs + labelOutputs = new PMLabelField({ + text: "RETURN VALUE".translate(), + textMode: "plain", + style: { + cssProperties: { + color: "#AEAEAE", + 'font-weight': 'bold' + } + }, + controlsWidth: 885 + }); + + formEditTriggerWizard.addItem(labelOutputs); + + //adding the Output Items (Returns) Panel + returnPanel = new PMUI.form.FormPanel({ + id: "panelReturnValWizard", + layout: 'vbox', + fieldset: false, + height: 'auto', + visible: false, + legend: "RETURN VALUE".translate(), + items: [] + }); + formEditTriggerWizard.addItem(returnPanel); + + + //treePanel New Trigger PMF + treeNewTrigger = new PMUI.panel.TreePanel({ + id: "treeNewTrigger", + width: 'auto', + height: 'auto', + style: { + cssClasses: ['pmtrigger'], + cssProperties: { + 'margin-top': '5px', + 'margin-bottom': '4px' + } + }, + items: [] + }); + + //Acordion Panel New Triggers Options + accordionNewTrigger = new PMUI.panel.AccordionPanel({ + id: "accordionNewTrigger", + width: 885, + height: 'auto', + borderWidth: "0px", + hiddenTitle: true, + style: { + cssProperties: { + 'margin-left': '30px' + } + }, + items: [ + { + iconClass: "", + id: 'custom', + title: "Custom Trigger".translate(), + height: '26px', + body: "", + style: { + cssProperties: { + "background-color": "#FDFDFD" + } + } + }, + { + iconClass: "", + id: 'copy', + title: "Copy Trigger".translate(), + height: '26px', + body: "", + style: { + cssProperties: { + "background-color": "#FDFDFD" + } + } + } + ], + listeners: { + select: function (obj, event) { + + if (obj.id == "custom") { + openFormCustom("Create".translate()); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl, cmControlCopyTrigger; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(580, 150); //CodeMirror Size + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + formEditTriggerCustom.reset(); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(""); + fields.getItems()[1].setValue(""); + fields.getItems()[2].setValue(""); + formEditTriggerCustom.getItems()[1].setValue(""); + formEditTriggerCustom.getItems()[1].controls[0].cm.setValue(""); + + } else if (obj.id == "copy") { + + getListProjects(); + openFormCopy(); + $($('#Code .CodeMirror.cm-s-default.CodeMirror-wrap')[1]).css({'border': '1px solid #c0c0c0'}); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + + var cmControlCopyTrigger = formCopyTrigger.getFields()[4].controls[0].cm; + if (cmControlCopyTrigger != undefined) { + cmControlCopyTrigger.setSize(650, 140); //CodeMirror in formCopyTrigger Size + } + } else { + if (treeNewTrigger.getItems() == "" || treeNewTrigger.id != obj.id) { + var acItems = accordionNewTrigger.getItems(); + var accordionActualItem = accordionNewTrigger.getItem(obj.id); + + for (i = 0; i < acItems.length; i++) { + if (acItems[i].id == accordionActualItem.id) { + var positionActualAcItem = i - 2; + } + } + + treeNewTrigger.setItems(allTreesItems[positionActualAcItem]); + treeNewTrigger.setID(obj.id); + + accordionActualItem.setBody(treeNewTrigger); + treeNewTrigger.defineEvents(); + applyStyleTreePanel(treeNewTrigger, false); + } + } + } + } + }); + + updateCustom = function (dataToSend, triggerUid) { + var restClient = new PMRestClient({ + endpoint: "trigger/" + triggerUid, + typeRequest: 'update', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerCustom.setDirty(false); + getListTrigger(); + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + }, + functionFailure: function (xhr, response) { + var msg = response.error.message; + var arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + }, + messageSuccess: "Trigger updated successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + }; + + checkIfValuesAreEqual = function (initialData, finalData) { + if (typeof(initialData['tri_uid']) == "undefined" && finalData['tri_uid'] == '') { + if (finalData['tri_description'] != '' || finalData['tri_title'] != '' || finalData['tri_webbot'] != '') { + return false; + } + } + for (var key1 in initialData) { + for (var key2 in finalData) { + if (typeof(initialData[key1]) != "undefined" && + typeof(finalData[key2]) != "undefined" && + key1 == key2 && + initialData[key1] != finalData[key2] + ) { + return false; + } + } + } + return true; + } + + //Buttons Save and Cancel for the 'formEditTriggerCustom' and 'formEditTriggerWizard' + buttonSave = new PMUI.ui.Button({ + id: 'saveTriggerButton', + text: "Save".translate(), + handler: function (event) { + triggerOriginDataForUpdate = {}; + var formcustom = triggerWindow.getItems()[1], + formwizard = triggerWindow.getItems()[2], + formTriggerData, + restClient, + dataToSend, + formTriggerData, + inputFields, + message_window, + outputV, + outputFields, + inputV, + dataToSend, + flagEdit; + if (formcustom.isVisible() == true) { + valuesCustom=formcustom.getItems()[0]; + if (!formEditTriggerCustom.isValid( )) { + flagEdit = formEditTriggerCustom.visible; + } else { + flagEdit = formEditTriggerCustom.isValid(); + } + if (flagEdit) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + formTriggerData = getData2PMUI(formEditTriggerCustom.html); + } else { + formTriggerData = formEditTriggerCustom.getData(); + } + if (formTriggerData.title.trim() === "") { + return false; + } + dataToSend = { + tri_title: formTriggerData.title, + tri_description: formTriggerData.description, + tri_webbot: formTriggerData.code, + tri_param: "" + }; + + if (formTriggerData.uid === "") { + restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerCustom.setDirty(false); + getListTrigger(); + formEditTriggerCustom.getItems()[0].getItems()[0].setValue(response.tri_uid); + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + }, + functionFailure: function (xhr, response) { + var msg = response.error.message, + arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } else { + if (formTriggerData.wizzard != "") { + if (formEditTriggerCustom.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "wizzardToCustomTriggerWin", + windowMessageType: 'warning', + title: 'Triggers'.translate(), + width: 490, + message: 'Do you want to save the changes? This Trigger will be saved like a custom Trigger.'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + openFormWizardEditMode(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.reset(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + updateCustom(dataToSend, formTriggerData.uid); + }, + buttonType: "success" + } + ] + + }); + message_window.open(); + message_window.showFooter(); + } else { + openListTriggers(); + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + } + } else { + updateCustom(dataToSend, formTriggerData.uid); + } + } + } + } else if (formwizard.isVisible() == true) { + if (formEditTriggerWizard.isValid() || ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1))) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + formTriggerData = getData2PMUI(formEditTriggerWizard.html); + } else { + formTriggerData = formEditTriggerWizard.getData(); + } + + inputV = {}; + inputFields = formEditTriggerWizard.getItems()[3]; + for (i = 0; i < inputFields.getItems().length; i++) { + inputV[inputFields.getItems()[i].name] = formTriggerData[inputFields.getItems()[i].name]; + } + + outputV = {}; + outputFields = formEditTriggerWizard.getItems()[6]; + for (j = 0; j < outputFields.getItems().length; j++) { + outputV[outputFields.getItems()[j].name] = formTriggerData[outputFields.getItems()[j].name]; + } + + dataToSend = { + tri_title: formTriggerData.titleDetails, + tri_description: formTriggerData.descriptionDetails, + tri_type: "SCRIPT", + tri_params: { + input: inputV, + output: outputV + } + }; + + if (formTriggerData.uid === "") { + restClient = new PMRestClient({ + endpoint: 'trigger-wizard/' + formTriggerData.libName + '/' + formTriggerData.fnName, + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerWizard.setDirty(false); + getListTrigger(); + formEditTriggerWizard.getFields()[0].setValue(response.tri_uid); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } else { + restClient = new PMRestClient({ + endpoint: 'trigger-wizard/' + formTriggerData.libName + '/' + formTriggerData.fnName + '/' + formTriggerData.uid, + typeRequest: 'update', + data: dataToSend, + functionSuccess: function (xhr, response) { + formEditTriggerWizard.setDirty(false); + getListTrigger(); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "Trigger updated successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } + } + } + }, + buttonType: 'success' + }); + + //Buttons Save and Cancel for the 'formEditTriggerCustom' and 'formEditTriggerWizard' + copyButton = new PMUI.ui.Button({ + id: 'copyAndSaveButton', + text: "Copy Trigger".translate(), + buttonType: 'success', + handler: function (event) { + var data, + dataToSend, + restClient; + if (formCopyTrigger.isValid()) { + formCopyTrigger.setDirty(false); + + data = formCopyTrigger.getData(); + dataToSend = { + tri_title: getData2PMUI(formCopyTrigger.html).tri_title.trim(), + tri_description: data.tri_description, + tri_webbot: data.tri_webbot, + tri_param: "" + }; + restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + getListTrigger(); + formCopyTrigger.reset(); + openListTriggers(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: "New Trigger saved successfully".translate(), + flashContainer: gridListTrigger + }); + restClient.executeRestClient(); + } + } + }); + + //Buttons Apply for the Code Editor + applyButton = new PMUI.ui.Button({ + id: 'applyButton', + text: "Apply".translate(), + buttonType: 'success', + handler: function (event) { + + $("div.pmui-window-body.pmui-background").css('overflow', ''); + if (formEditCode.isValid()) { + var typeTitle = "Edit".translate(); + if (triggerWindow.getItems()[1].getData().uid == "") { + typeTitle = "Create".translate(); + } + openFormCustom(typeTitle); + formEditCode.setDirty(false); + + var editCode = formEditCode.getItems()[0].controls[0].cm; + editCodeValue = editCode.getValue(); + + var codeMirrorCustom = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorCustom != undefined) { + codeMirrorCustom.setSize(580, 150); //CodeMirror Size + } + codeMirrorCustom.setValue(editCodeValue); + formEditTriggerCustom.getItems()[1].setValue(editCodeValue); + + editCode.setValue(""); + editCodeValue = ""; + + formEditCode.getItems()[0].setValue(""); + } + } + }); + + //Button Edit Source Code (this is showed just when the Trigger Wizzard is opened in edition mode) + btnEditSourceCode = new PMUI.ui.Button({ + id: 'btnEditSourceCode', + text: "Edit Source Code".translate(), + buttonType: 'success', + handler: function (event) { + + var data = formEditTriggerWizard.getData(); + var fields; + openFormCustom("Edit".translate()); + formEditTriggerCustom.showFooter(); + + var codeMirrorControl; + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(650, 280); + } + formEditTriggerCustom.getItems()[1].setHeight(170); + + fields = formEditTriggerCustom.getItems()[0]; + fields.getItems()[0].setValue(data.uid); + fields.getItems()[1].setValue(data.titleDetails); + fields.getItems()[2].setValue(data.descriptionDetails); + fields.getItems()[3].setValue(data.webbot); + fields.getItems()[3].setVisible(false); + formEditTriggerCustom.getItems()[1].setValue(data.webbot); + + codeMirrorControl.setValue(data.webbot); + + formEditTriggerCustom.getItems()[1].setHeight(300); + fields.getItems()[1].setVisible(false); + fields.getItems()[2].setVisible(false); + formEditTriggerCustom.footer.getItems()[1].setVisible(false); + formEditTriggerCustom.footer.getItems()[0].style.addProperties({'margin-right': "10px"}); + formEditTriggerCustom.footer.style.addProperties({width: '880px'}); + codeMirrorControl.refresh(); + } + }); + + buttonCancel = new PMUI.ui.Button({ + id: 'cancelTriggerButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + isDirtyFormTrigger(); + } + }); + + //Form to Edit the Custom trigger (we used a Form because we need buttons to save the changes) + formEditTriggerCustom = new PMUI.form.Form({ + id: "formEditTriggerCustom", + border: true, + visibleHeader: false, + width: '900px', + height: "365px", + name: "formcustom", + title: "Custom Trigger".translate(), + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "uid", + pmType: "text", + label: "ID".translate(), + value: "", + name: "uid", + readOnly: true, + visible: false, + valueType: 'string' + }, + { + id: "title", + pmType: "text", + label: "Title".translate(), + value: "", + required: true, + name: "title", + valueType: 'string' + }, + { + id: "description", + pmType: "textarea", + rows: 70, + name: 'description', + label: "Description".translate(), + valueType: 'string', + style: {cssClasses: ['mafe-textarea-resize']} + }, + { + id: "wizzard", + pmType: "text", + label: "Wizzard".translate(), + value: "", + name: "wizzard", + readOnly: true, + visible: false, + valueType: 'string' + } + ] + } + ], + buttons: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formEditTriggerCustom.getItems()[1].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '208px', + "background": "rgb(30, 145, 209)", + "border": "0px solid rgb(30, 145, 209)" + } + } + }, { + text: "Open Editor".translate(), + id: "openEditorButton", + handler: function () { + openFormEditCode(); + formEditCode.showFooter(); + + var codeMirrorCustom = formEditTriggerCustom.getItems()[1].controls[0].cm; + var value = codeMirrorCustom.getValue(); + + var codeMirrorCopy = formEditCode.getItems()[0].controls[0].cm; + + if (codeMirrorCopy != undefined) { + codeMirrorCopy.setSize(810, 315); //CodeMirror Size + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).css({'border': '1px solid #c0c0c0'}); + + } + + formEditCode.getItems()[0].setHeight(325); + + codeMirrorCopy.setValue(value); + formEditCode.getItems()[0].setValue(value); + formEditCode.setDirty(false); + + $('#codeEditor .pmui-field-label').hide(); + $('#formEditCode').children().last().css({ + 'margin-top': '-352px', + 'border': '0px', + 'margin-right': '-15px' + }).find('a').css('padding', '10px 5px'); + $($('#codeEditor .CodeMirror.cm-s-default.CodeMirror-wrap')[0]).css({ + 'margin-left': '10px', + 'width': '850px', + 'height': '360px' + }); + $('#triggerWindow .pmui-window-body').css('overflow', 'hidden'); + codeMirrorCopy.refresh(); + }, + style: { + cssProperties: { + "margin-right": 2 + } + } + } + ] + }); + cd = new PMCodeMirrorField({ + labelWidth: '23.8%' + }); + cd.setLabel("Code".translate()); + formEditTriggerCustom.addItem(cd); + formEditTriggerCustom.getItems()[1].setName('code'); + formEditTriggerCustom.getItems()[1].setID('code'); + + formEditCode = new PMUI.form.Form({ + id: "formEditCode", + border: true, + visibleHeader: false, + width: '925px', + name: "formeditcode", + title: "Editor".translate(), + items: [], + buttons: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formEditCode.getItems()[0].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '229px', + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + } + } + } + ] + }); + editCode = new PMCodeMirrorField({ + labelWidth: '9%' + }); + editCode.setLabel("Code".translate()); + formEditCode.addItem(editCode); + formEditCode.getItems()[0].setName('codeEditor'); + formEditCode.getItems()[0].setID('codeEditor'); + + //Trigger Window + triggerWindow = new PMUI.ui.Window({ + id: "triggerWindow", + title: "Triggers".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave, + btnEditSourceCode, + applyButton, + copyButton + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + isDirtyFormTrigger(); + } + }); + + + triggerWindow.addItem(gridListTrigger); + triggerWindow.addItem(formEditTriggerCustom); + triggerWindow.addItem(formEditTriggerWizard); + triggerWindow.addItem(formCopyTrigger); + triggerWindow.addItem(formEditCode); + triggerWindow.addItem(accordionNewTrigger); + + if (typeof listTriggers !== "undefined") { + triggerWindow.open(); + codMirr.dom.labelTextContainer.style.width = "23.8%"; + codMirr.html.style.padding = "10px"; + formEditTriggerCustom.panel.html.style.padding = "10px 10px"; + $('#listTriggers .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + applyStyleWindowForm(triggerWindow); + triggerWindow.hideFooter(); + openListTriggers(); + + gridListTrigger.dom.toolbar.appendChild(buttonNew.getHTML()); + buttonNew.defineEvents(); + + gridListTrigger.dom.toolbar.appendChild(buttonCopy.getHTML()); + buttonCopy.defineEvents(); + + gridListTrigger.dom.toolbar.appendChild(buttonWizard.getHTML()); + buttonWizard.defineEvents(); + + triggerWindow.defineEvents(); + gridListTrigger.sort('tri_title', 'asc'); + formEditTriggerCustom.panel.style.addProperties({'overflow': 'hidden'}); + + formcustom = triggerWindow.getItems()[1]; + valuesCustom=formcustom.getItems()[0]; + } + }; + + PMDesigner.trigger.create = function () { + var codeMirrorControl, cmControlCopyTrigger; + openFormCustom("Create".translate()); + formEditTriggerCustom.getField("code").dom.labelTextContainer.style.width = "23.8%"; + $('.pmui-pmseparatorlinefield .pmui-field-label').css({display: 'none'}); + formEditTriggerCustom.showFooter(); + + codeMirrorControl = formEditTriggerCustom.getItems()[1].controls[0].cm; + formEditTriggerCustom.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl !== undefined) { + codeMirrorControl.setSize(580, 150); + codeMirrorControl.refresh(); + } + codeMirrorControl.refresh(); + formEditTriggerCustom.getItems()[1].setHeight(170); + formEditTriggerCustom.reset(); + }; +}()); +/** + * new stepTask module + */ +var stepsTask = function (activity) { + this.mainWindow = null; + this.secondaryWindow = null; + this.stepsAssignTree = null; + this.mainContainer = null; + this.labelsPanel = null; + this.stepsMainContainer = null; + this.stepsAssignAccordion = null; + this.confirmWindow = null; + this.elementAccordionOpen = null; + this.groupType = null; + this.groupLabel = null; + this.stepsType = null; + this.stepsAssigned = null; + stepsTask.prototype.initialize.call(this, activity); +}; +/** + * initialization method steps settings, constants are created. + * components are created + * the data is loaded + * styles are customized + * It extends behaviors and events + */ +stepsTask.prototype.initialize = function () { + this.groupType = ['DYNAFORM', 'INPUT_DOCUMENT', 'OUTPUT_DOCUMENT', 'EXTERNAL']; + this.groupLabel = ['Dynaform (s)'.translate(), 'Input Document (s)'.translate(), 'OutPut Document (s)'.translate(), 'External (s)'.translate()]; + this.stepsType = { + "DYNAFORM": "Dynaform".translate(), + "INPUT_DOCUMENT": "Input Document".translate(), + "OUTPUT_DOCUMENT": "Output Document".translate(), + "EXTERNAL": "External".translate() + }; + this.stepsAssigned = new PMUI.util.ArrayList(); + this.elementAccordionOpen = new PMUI.util.ArrayList(); + this.createWidgets(); + this.mainWindow.addItem(this.mainContainer); + this.mainWindow.open(); + this.loadInitialData(); + this.customStyles(); + this.elementsAccordionOpenFixed(); + this.addEventSortableInAccordionElements(); + this.addEventSortableInTreePanelElements(); +}; +/** + * the components are created PMUI UI + * - confirmWindow + * - mainWindow + * - labelsPanel + * - stepsAssignTree + * - stepsAssignAccordion + * - stepsMainContainer + * - mainContainer + * - secondaryWindow + */ +stepsTask.prototype.createWidgets = function () { + var that = this; + this.confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: '', + message: '', + footerItems: [ + { + id: 'confirmWindow-footer-no', + text: 'No'.translate(), + visible: true, + buttonType: "error" + }, { + id: 'confirmWindow-footer-yes', + text: 'Yes'.translate(), + visible: true, + buttonType: "success" + } + ], + visibleFooter: true + }); + this.mainWindow = new PMUI.ui.Window({ + id: "stepsForTask", + title: "Steps for task".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH + }); + this.labelsPanel = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + proportion: 0.08, + layout: "hbox", + items: [ + new PMUI.field.TextAnnotationField({ + text: 'Available Elements'.translate(), + text_Align: 'center', + proportion: 1.4 + }), + new PMUI.field.TextAnnotationField({ + text: 'Assigned Elements (Drop here)'.translate(), + text_Align: 'center', + proportion: 1.3 + }), + new PMUI.ui.Button({ + buttonType: "link", + "text": "Expand all".translate(), + id: "expand-button", + proportion: 0.6, + handler: function () { + var items, i, item, buttonAfected; + items = that.stepsAssignAccordion.getItems(); + buttonAfected = that.labelsPanel.getItem("collapse-button"); + buttonAfected.setDisabled(false); + this.setDisabled(true); + that.elementAccordionOpen.clear(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + item.expand(); + that.elementAccordionOpen.insert(item); + } + } + }), + new PMUI.ui.Button({ + buttonType: "link", + "text": "Collapse all".translate(), + id: "collapse-button", + proportion: 0.7, + disabled: true, + handler: function () { + var items, i, item, buttonAfected; + buttonAfected = that.labelsPanel.getItem("expand-button"); + buttonAfected.setDisabled(false); + this.setDisabled(true); + items = that.stepsAssignAccordion.getItems(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + that.elementAccordionOpen.remove(item); + item.collapse(); + } + } + }) + ] + }); + this.stepsAssignTree = new PMUI.panel.TreePanel({ + id: 'stepsAssignTree', + proportion: 0.5, + height: 475, + filterable: true, + autoBind: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nodeDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true, + collapsed: false, + itemsDataBind: 'items', + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + behavior: 'drag' + }, + style: { + cssProperties: { + margin: '0px 0px 0px 0px', + float: 'left', + overflow: 'auto' + }, + cssClasses: ['mafe-border-panel'] + } + }); + this.stepsAssignAccordion = new PMUI.panel.AccordionPanel({ + id: 'stepsAssignAccordion', + multipleSelection: true, + hiddenTitle: true, + proportion: 1.5, + style: { + cssProperties: { + margin: '0px 0px 0px 0px' + }, + cssClasses: ['mafe-border-panel'] + }, + listeners: { + select: function (accordionItem, event) { + var buttonExpand, buttonCollapse, itemsAccod; + itemsAccod = that.stepsAssignAccordion.items; + if (accordionItem.collapsed) { + if (that.elementAccordionOpen.indexOf(accordionItem) > -1) { + that.elementAccordionOpen.remove(accordionItem); + } + } else { + if (that.elementAccordionOpen.indexOf(accordionItem) === -1) { + that.elementAccordionOpen.insert(accordionItem); + } + } + buttonCollapse = that.labelsPanel.getItem("collapse-button"); + buttonExpand = that.labelsPanel.getItem("expand-button"); + if (that.elementAccordionOpen.getSize() === 0) { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(true); + } else if (that.elementAccordionOpen.getSize() === itemsAccod.getSize()) { + buttonExpand.setDisabled(true); + buttonCollapse.setDisabled(false); + } else { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(false); + } + } + } + }); + this.stepsMainContainer = new PMUI.core.Panel({ + id: "stepsMainContainer", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 45, + layout: 'hbox', + height: 475, + items: [ + this.stepsAssignTree, + this.stepsAssignAccordion + ] + }); + this.mainContainer = new PMUI.core.Panel({ + id: "mainContainer", + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT - 45, + layout: 'vbox', + items: [ + this.labelsPanel, + this.stepsMainContainer + ] + }); + this.secondaryWindow = new PMUI.ui.Window({ + visibleFooter: true, + title: 'Trigger'.translate(), + footerAlign: 'right', + footerItems: [ + { + text: "@@", + id: "secondaryWindow-criteria", + handler: function () { + }, + style: { + cssProperties: { + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + }, + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-cancel', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + }, + handler: function () { + } + }, { + id: 'secondaryWindow-save', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + }, + handler: function () { + } + } + ] + }); +}; +/** + * This method loads the initial data module steps,for the components: + * - stepsAssignTree + * - stepsAssignAccordion + */ +stepsTask.prototype.loadInitialData = function () { + this.loadTreePanelData(this.getTreePanelData()); + this.loadAccordionItems(this.getAccordionData()); +}; +/** + * This method loads the options to stepsAssignAccordion + * @param {Array} response An array where each element can be a {Element} object or a JSON object + */ +stepsTask.prototype.loadAccordionItems = function (response) { + var firstResp = [], + secondResp = [], + i, + item, + assigmentConfig, + firstRes = 0, + secondRes = 1; + if (jQuery.isArray(response) && response.length) { + if (typeof response[firstRes] === "object") { + firstResp = response[firstRes].response ? response[firstRes].response : []; + } + if (typeof response[secondRes] === "object") { + secondResp = response[secondRes].response ? response[secondRes].response : []; + } + } + if (firstResp.length) { + for (i = 0; i < firstResp.length; i += 1) { + item = this.createAccordionItem(firstResp[i], true, true); + this.stepsAssignAccordion.addItem(item); + item.dataItem = firstResp[i]; + this.customAccordionItemButtons(item.html, firstResp[i], item); + } + } + assigmentConfig = { + step_type_obj: "Assignment".translate(), + triggers: secondResp, + st_type: "ASSIGNMENT", + obj_title: "Assignment".translate(), + step_uid_obj: "Assignment" + }; + item = this.createAccordionItem(assigmentConfig); + this.stepsAssignAccordion.addItem(item); + item.dataItem = assigmentConfig; + assigmentConfig = { + step_type_obj: "Routing".translate(), + triggers: secondResp, + obj_title: "Routing".translate(), + st_type: 'ROUTING', + step_uid_obj: "Routing" + }; + item = this.createAccordionItem(assigmentConfig); + this.stepsAssignAccordion.addItem(item); + item.dataItem = assigmentConfig; + this.stepsAssignAccordion.defineEvents(); +}; +/** + * This method creates an element for stepsAssignAccordion + * @param {data} It is an object with the settings to create the element + * @returns {PMUI.item.AccordionItem} + */ +stepsTask.prototype.createAccordionItem = function (data) { + var that = this, + gridBefore, + gridAfter, + beforeTitle, + afterTitle, + i, + textLabel; + if (this.stepsType[data.step_type_obj]) { + textLabel = this.stepsType[data.step_type_obj]; + } else { + textLabel = data.step_type_obj; + } + beforeTitle = new PMUI.field.TextAnnotationField({ + text: 'Before'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left' + }); + afterTitle = new PMUI.field.TextAnnotationField({ + text: 'After'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left', + visible: data.st_type === "ASSIGNMENT" ? false : true + }); + + gridBefore = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + st_type: 'BEFORE', + step_uid: data.step_uid, + visibleFooter: false, + width: '96%', + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: "st_position", + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 360 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + } + ], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridBefore.st_type = 'BEFORE'; + } else if (data.st_type === "ROUTING") { + gridBefore.st_type = "BEFORE_ROUTING"; + } else { + gridBefore.st_type = "BEFORE_ASSIGNMENT"; + } + gridBefore.step_uid = data.step_uid; + gridBefore.clearItems(); + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridBefore.st_type === data.triggers[i].st_type) { + gridBefore.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + gridAfter = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + visibleFooter: false, + width: '96%', + visible: data.st_type === "ASSIGNMENT" ? false : true, + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: 'st_position', + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 360 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + } + ], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridAfter.st_type = 'AFTER'; + } else if (data.st_type == "ROUTING") { + gridAfter.st_type = "AFTER_ROUTING"; + } else { + gridAfter.st_type = "AFTER_ASSIGNMENT"; + } + gridAfter.step_uid = data.step_uid; + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridAfter.st_type === data.triggers[i].st_type) { + gridAfter.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + var accordionItem = new PMUI.item.AccordionItem({ + id: 'id' + data.step_uid_obj, + dataStep: data, + closeable: true, + body: new PMUI.core.Panel({ + layout: 'vbox', + items: [ + beforeTitle, + gridBefore, + afterTitle, + gridAfter + ] + }) + }); + if (this.stepsType[data.step_type_obj]) { + accordionItem.setTitle(data.step_position + ". " + data.obj_title + ' (' + this.stepsType[data.step_type_obj] + ')'); + this.stepsAssigned.insert(accordionItem); + } else { + accordionItem.setTitle((this.stepsAssignAccordion.items.getSize() + 1) + ". " + data.obj_title); + } + return accordionItem; +}; +/** + * styles that can not be handled with the library are customized PMUI + * @chainable + */ +stepsTask.prototype.customStyles = function () { + this.mainWindow.body.style.overflow = "hidden"; +}; +/** + * run the endpoint 'activity/{activity_id}/available-steps' to get + * dynaforms, output document, input Document and external, Unassigned or Availables + * @returns {Array} + */ +stepsTask.prototype.getStepAvailables = function () { + var resp = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + PMDesigner.act_uid + '/available-steps', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + if (jQuery.isArray(response)) { + resp = response[0] ? response[0].response : []; + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return resp; +}; +/** + * run the endpoint 'activity/{activity_id}/available-steps' to get all Availables + * triggres and dynaforms Unassigned or Availables + * @returns {Array} + */ +stepsTask.prototype.getTreePanelData = function () { + var resp = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: 'activity/' + PMDesigner.act_uid + '/available-steps', + method: 'GET' + }, { + url: 'triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + resp = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return resp; +} +/** + * this method loads the data to stepsAssignTree + * @param response, the answer is an array containing all the elements + * that will be loaded into the step stepsAssignTree + * @chainable + */ +stepsTask.prototype.loadTreePanelData = function (response) { + var that = this, + data, + i, + j, + type, + label, + items, + labelTrigger, + dataTree = [], + treeNode; + data = response[1].response; + labelTrigger = 'Trigger (s)'.translate(); + if (data.length === 0) { + dataTree.push({ + obj_title: labelTrigger, + items: [this.notItemConfig()] + }); + } else { + items = []; + for (i = 0; i < data.length; i += 1) { + items.push({ + obj_title: data[i]['tri_title'], + obj_type: data[i]['tri_type'], + obj_uid: data[i]['tri_uid'] + }); + } + dataTree.push({ + obj_title: labelTrigger, + items: items, + id: "TRIGGER" + }); + } + data = response[0].response; + type = this.groupType; + label = this.groupLabel; + items = []; + for (i = 0; i < type.length; i += 1) { + items = []; + for (j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [this.notItemConfig()], + behavior: '', + id: type[i] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items, + behavior: 'drag', + id: type[i] + }); + } + } + this.stepsAssignTree.clearItems(); + for (i = 0; i < dataTree.length; i += 1) { + this.stepsAssignTree.addDataItem(dataTree[i]); + treeNode = this.stepsAssignTree.getItem(i); + treeNode.setID(dataTree[i].id); + this.updateIndexPosition(treeNode); + } + return this; +}; +/** + * run the endpoint 'activity/{activity_id}/steps' and 'activity/{activity_id}/step/triggers' + * to get all triggres and dynaforms assigned + * @returns {Array} + */ +stepsTask.prototype.getAccordionData = function () { + var resp = [], + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + PMDesigner.act_uid + '/steps', + method: 'GET' + }, { + url: 'activity/' + PMDesigner.act_uid + '/step/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + resp = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }); + restClient.executeRestClient(); + return resp; +}; +/** + * checks whether a trigger is already assigned in a grid + * @param grid, is instanceof PMUI.grid.Grid, in conducting the search + * @param tri_uid, search parameter in the rows of the grid + * @returns {boolean} + */ +stepsTask.prototype.isTriggerAssigned = function (grid, tri_uid) { + var data, i, exist = false; + data = grid.getData(); + if (grid && jQuery.isArray(data)) { + for (i = 0; i < data.length; i += 1) { + if (data[i].tri_uid === tri_uid) { + exist = true; + break; + } + } + } + return exist; +}; +/** + * retorna el tipo de de step, para la ejecucion de "endpoint" + * @param st_type, this a step type, the accepted parameters are: + * - BEFORE_ASSIGNMENT + * - BEFORE_ROUTING + * - AFTER_ROUTING + * - BEFORE + * - AFTER + * @returns {string} + */ +stepsTask.prototype.getStepType = function (st_type) { + var value; + switch (st_type) { + case 'BEFORE_ASSIGNMENT': + value = 'before-assignment'; + break; + case 'BEFORE_ROUTING': + value = 'before-routing'; + break; + case 'AFTER_ROUTING': + value = 'after-routing'; + break; + case 'BEFORE': + value = 'before'; + break; + case 'AFTER': + value = 'after'; + break; + default: + value = ''; + break; + } + return value; +}; +/** + * This method is executed when editing a "trigger" in a row of the grid. + * secondary window opens with the current configuration of the trigger + * @param trigger, is the return value when is update 'trigger' action in the enpoint + * @param triggerID, is the id of the trigger to update + * @chainable + */ +stepsTask.prototype.editTrigger = function (trigger, triggerID) { + var codeMirror, + saveButton, + cancelButton, + criteriaButton, + that = this; + this.resetSecondaryWindow(); + codeMirror = new PMCodeMirror({ + id: "codeMirror" + }); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + codeMirror.setValue(trigger); + this.secondaryWindow.setWidth(DEFAULT_WINDOW_WIDTH); + this.secondaryWindow.setHeight(DEFAULT_WINDOW_HEIGHT); + this.secondaryWindow.setTitle("Trigger".translate()); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + triggerID, + typeRequest: 'update', + data: { + tri_param: '', + tri_webbot: codeMirror.getValue() + }, + messageError: 'There are problems updating the trigger, please try again.'.translate(), + messageSuccess: 'Trigger updated correctly'.translate(), + flashContainer: that.mainWindow, + functionSuccess: function () { + that.secondaryWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(true); + criteriaButton.setHandler(function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var cursorPos, + codemirror; + codemirror = codeMirror.cm; + cursorPos = codemirror.getCursor(); + codemirror.replaceSelection(variable); + codemirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }); + } + this.secondaryWindow.open(); + this.secondaryWindow.addItem(codeMirror); + codeMirror.cm.setSize(this.secondaryWindow.getWidth(), 380); + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + $(".pmui-window-body").css("overflow", "hidden"); + codeMirror.cm.refresh(); +}; +/** + * edit the selected trigger condition + * @param stepID, It is the id of the step to upgrade + * @param triggerID, is the id of the trigger to update + * @param stepType, It is the kind of step to update + * @param row, PMUI.grid.GridPanelRow, is the row affected + */ +stepsTask.prototype.editCondition = function (stepID, triggerID, stepType, row) { + var saveButton, + cancelButton, + criteriaButton, + form, + dataRow, + that = this; + dataRow = row.getData(); + this.resetSecondaryWindow(); + this.secondaryWindow.setWidth(500); + this.secondaryWindow.setHeight(350); + this.secondaryWindow.setTitle('Condition Trigger'.translate()); + this.secondaryWindow.setTitle("Trigger".translate()); + form = new PMUI.form.Form({ + id: 'idFormEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + new CriteriaField({ + id: 'st_condition', + pmType: 'textarea', + name: 'st_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea', + value: dataRow.st_condition + }) + ] + }); + this.secondaryWindow.addItem(form); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var data, + restClient; + data = form.getData(); + data.st_type = stepType; + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + ((typeof(stepID) != "undefined") ? stepID + "/" : "") + 'trigger/' + triggerID, + typeRequest: 'update', + data: data, + messageError: 'There are problems update the Step Trigger, please try again.'.translate(), + functionSuccess: function (xhr, response) { + dataRow.st_condition = data.st_condition; + row.setData(dataRow); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + that.secondaryWindow.close(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(false); + criteriaButton.handler = null; + } + this.secondaryWindow.open(); +}; +/** + * eliminates the elements of the secondary window + * @chainable + */ +stepsTask.prototype.resetSecondaryWindow = function () { + var i, items; + if (this.secondaryWindow && this.secondaryWindow.items.getSize() > 0) { + items = this.secondaryWindow.items; + for (i = 0; i < items.getSize(); i += 1) { + this.secondaryWindow.removeItem(items.get(i)); + } + } +}; +/** + * It establishes a PMUI.util.ArrayList that stores the + * elements of "stepsAssignAccordion" that are open + * @chainable + */ +stepsTask.prototype.elementsAccordionOpenFixed = function () { + var i, + accordionItems; + if (this.stepsAssignAccordion) { + accordionItems = this.stepsAssignAccordion.getItems(); + if ($.isArray(accordionItems)) { + for (i = 0; i < accordionItems.length; i += 1) { + if (!accordionItems[i].collapsed) { + this.elementAccordionOpen.insert(accordionItems[i]); + } + } + } + } +}; +/** + * It is an extension to add the "sortable" event "stepAssignAccordion". + * when a node "treePanel" is added to stop runs and is where you choose if it's a sort or aggregation. + * @chainable + */ +stepsTask.prototype.addEventSortableInAccordionElements = function () { + var tagContainer, + newIndex, + index, + treeNodeObject, + treeNodeData, + that = this; + if (this.stepsAssignAccordion && this.stepsAssignAccordion.html) { + tagContainer = this.stepsAssignAccordion.body; + $(tagContainer).sortable({ + items: '>div:not(#idAssignment,#idRouting)', + placeholder: 'steps-placeholder', + receive: function (event, ui) { + var item = ui ? ui.item : null; + if (item && item instanceof jQuery && item.length) { + treeNodeObject = PMUI.getPMUIObject(item.get(0)); + treeNodeData = treeNodeObject.getData(); + } + }, + stop: function (event, ui) { + var itemClone = ui ? ui.item : null, + accordionItems, + accordionItem, + dataEdited, + restClientMultipart, + restClient; + var newIndex = ui.item.index(); + accordionItems = that.stepsAssignAccordion.getItems(); + if (itemClone && itemClone instanceof jQuery && itemClone.length) { + if (treeNodeObject) { + itemClone.remove(); + if (newIndex + 1 > accordionItems.length) { + newIndex = that.stepsAssigned.getSize(); + } + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step', + typeRequest: 'post', + data: { + step_type_obj: treeNodeData.obj_type, + step_uid_obj: treeNodeData.obj_uid, + step_condition: '', + step_position: newIndex + 1, + step_mode: 'EDIT' + }, + functionSuccess: function (xhr, response) { + var item, buttonAfected, treeNode; + that.stepsAssignTree.removeItem(treeNodeObject); + treeNode = that.stepsAssignTree.items.find("id", response.step_type_obj); + if (treeNode.items.getSize() === 0) { + treeNode.addDataItem(that.notItemConfig()); + } + response.obj_description = ''; + response.obj_title = treeNodeData.obj_title; + response.triggers = []; + item = that.createAccordionItem(response, true, true); + item.dataItem = response; + if (that.stepsAssignAccordion.items.getSize() === 2) { + that.stepsAssignAccordion.addItem(item, 0); + } else { + that.stepsAssignAccordion.addItem(item, newIndex); + } + that.stepsAssignAccordion.defineEvents(); + that.customAccordionItemButtons(item.html, response, item); + that.updateItemIndexToAccordion(); + that.addEventSortableInAccordionElements(); + that.addEventSortableInTreePanelElements(); + buttonAfected = that.labelsPanel.getItem("expand-button"); + buttonAfected.setDisabled(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while assigning the step, please try again later.'.translate(), + messageSuccess: 'Step assigned successfully.'.translate(), + flashContainer: that.stepsAssignAccordion.getParent() + }); + restClient.executeRestClient(); + } else { + accordionItem = PMUI.getPMUIObject(ui.item.get(0)); + index = that.stepsAssignAccordion.items.indexOf(accordionItem); + if (newIndex !== index) { + that.stepsAssignAccordion.items.remove(accordionItem); + that.stepsAssignAccordion.items.insertAt(accordionItem, newIndex); + dataEdited = { + step_position: newIndex + 1, + step_uid: accordionItem.dataItem.step_uid, + step_type_obj: accordionItem.dataItem.step_type_obj, + step_uid_obj: accordionItem.dataItem.step_uid_obj + }; + restClientMultipart = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + accordionItem.dataItem.step_uid, + typeRequest: 'update', + data: dataEdited, + functionSuccess: function (xhr, response) { + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while editing the step, please try again later.'.translate(), + messageSuccess: 'Step editing successfully.'.translate(), + flashContainer: this.mainWindow + }); + restClientMultipart.executeRestClient(); + } + } + } + }, + start: function (e, ui) { + newIndex = ui.item.index(); + } + }); + } +}; +/** + * It is an extension to add the "sortable" event "stepsAssignTree". + * when choosing a node treePanel and you want to add to the accordion or the grid + * @chainable + */ +stepsTask.prototype.addEventSortableInTreePanelElements = function () { + var items = this.stepsAssignTree.getItems(), + connect, + i, + sw, + that = this, + nodeItems; + for (i = 0; i < items.length; i += 1) { + nodeItems = items[i].getItems(); + if (nodeItems.length && nodeItems[0].getData().obj_type) { + sw = items[i].getItems()[0].getData().obj_type === "SCRIPT"; + connect = sw ? ".pmui-gridpanel-tbody" : ".pmui-accordion-panel-body"; + $(items[i].html).find('ul').find('>li').draggable({ + appendTo: document.body, + revert: "invalid", + helper: "clone", + cursor: "move", + zIndex: 1000, + connectToSortable: connect, + start: function (e) { + var i, nodeTag, node, nodeData, accordionItems, item; + nodeTag = e.target; + node = PMUI.getPMUIObject(nodeTag); + nodeData = node.getData(); + accordionItems = that.stepsAssignAccordion.getItems(); + $(that.stepsAssignAccordion.body).hide(); + if (nodeData.obj_type !== "SCRIPT") { + for (i = 0; i < accordionItems.length; i += 1) { + item = accordionItems[i]; + item.collapse(); + } + } + $(that.stepsAssignAccordion.body).show(); + }, + stop: function () { + var i = 0, max; + if (that.elementAccordionOpen) { + max = that.elementAccordionOpen.getSize(); + for (i = 0; i < max; i += 1) { + that.elementAccordionOpen.get(i).expand(); + } + } + } + }); + } else { + $(nodeItems[0].html).draggable("disable"); + } + } +}; +/** + * add custom buttons on the head of an element of stepsAssignAccordion + * are three buttons + * properties + * edit + * remove + * @param html, is the html of the header accordion item + * @param step, the data of the step selected + */ +stepsTask.prototype.customAccordionItemButtons = function (html, step, accordionItem) { + var propertiesStep, + editStep, + removeStep, + $html, + containerButtons, + that = this, + title; + if (html) { + $html = jQuery(html.getElementsByClassName("pmui-accordion-item-header")); + title = step.obj_title + ' (' + step.step_type_obj + ')'; + $html.find(".pmui-accordion-item-title").get(0).title = title; + containerButtons = $('
'); + containerButtons.addClass("propertiesTask-accordionItem"); + propertiesStep = $('' + 'Properties'.translate() + ''); + propertiesStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + editStep = $('' + 'Edit'.translate() + ''); + editStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + removeStep = $('' + 'Remove'.translate() + ''); + removeStep.addClass("mafe-button-delete propertiesTask-accordionButton"); + + propertiesStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.propertiesStepShow(step); + return false; + }); + + editStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.editStepShow(step, accordionItem); + return false; + }); + + removeStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.removeStepShow(step); + return false; + }); + containerButtons.append(propertiesStep); + containerButtons.append(editStep); + containerButtons.append(removeStep); + $html.append(containerButtons); + } +}; +/** + * opens the properties of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ +stepsTask.prototype.propertiesStepShow = function (step) { + var form, + saveButton, + cancelButton, + criteriaButton, + that = this; + this.resetSecondaryWindow(); + this.secondaryWindow.setWidth(520); + this.secondaryWindow.setHeight(370); + this.secondaryWindow.setTitle('Step Properties'.translate()); + form = new PMUI.form.Form({ + id: 'stepsEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + { + id: 'step_mode', + pmType: 'radio', + label: 'Mode'.translate(), + value: '', + visible: step.step_type_obj === "DYNAFORM" ? true : false, + name: 'step_mode', + options: [ + { + id: 'modeEdit', + label: 'Edit'.translate(), + value: 'EDIT', + selected: true + }, { + id: 'modeView', + label: 'View'.translate(), + value: 'VIEW' + } + ] + }, + new CriteriaField({ + id: 'step_condition', + pmType: 'textarea', + name: 'step_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea' + }) + ] + }); + this.secondaryWindow.addItem(form); + + var restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + form.getField('step_mode').setValue(response.step_mode); + form.getField('step_condition').setValue(response.step_condition); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + saveButton = this.secondaryWindow.footer.getItem("secondaryWindow-save"); + cancelButton = this.secondaryWindow.footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.secondaryWindow.footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient; + if (form.isValid()) { + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'update', + data: form.getData(), + functionSuccess: function () { + that.secondaryWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems update the Step Trigger, please try again.'.translate() + }); + restClient.executeRestClient(); + } + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.secondaryWindow.close(); + }); + } + if (criteriaButton) { + criteriaButton.handler = null; + criteriaButton.setVisible(false); + } + this.secondaryWindow.open(); +}; +/** + * opens the step of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ +stepsTask.prototype.editStepShow = function (step, accordioItem) { + var inputDocument, + that = this; + switch (step.step_type_obj) { + case 'DYNAFORM': + var restProxy = new PMRestClient({ + endpoint: 'dynaform/' + step.step_uid_obj, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var old = PMUI.activeCanvas, + formDesigner; + PMUI.activeCanvas = false; + formDesigner = PMDesigner.dynaformDesigner(response); + formDesigner.onHide = function () { + var assignedDynaform, + i, + data, + title; + assignedDynaform = that.getStepsAssignedByCriteria("DYNAFORM"); + if (jQuery.isArray(assignedDynaform)) { + for (i = 0; i < assignedDynaform.length; i += 1) { + data = assignedDynaform[i]; + if (typeof data === "object") { + if (data.step_uid === step.step_uid) { + title = data.step_position + ". " + data.obj_title; + title = title + ' (' + that.stepsType["DYNAFORM"] + ')'; + accordioItem.setTitle(title); + accordioItem.dataItem = data; + } + } + } + } + PMUI.activeCanvas = old; + }; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + break; + case 'OUTPUT_DOCUMENT': + PMDesigner.output(); + PMDesigner.output.showTiny(step.step_uid_obj); + break; + case 'INPUT_DOCUMENT': + inputDocument = new InputDocument({ + onUpdateInputDocumentHandler: function (data, inputDoc) { + var position, title; + position = accordioItem.dataItem.step_position; + title = position + ". " + data.inp_doc_title; + title = title + ' (' + that.stepsType["INPUT_DOCUMENT"] + ')'; + accordioItem.dataItem.obj_title = data.inp_doc_title; + accordioItem.setTitle(title); + inputDoc.winMainInputDocument.close(); + } + }); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(step.step_uid_obj); + break; + } +}; +/** + * the window opens for confirmation of the removal step + * @param step, the current step to remove + * @chainable + */ +stepsTask.prototype.removeStepShow = function (step) { + var title, + yesButton, + noButton, + that = this, + restClient; + if (this.stepsType[step.step_type_obj] !== undefined) { + title = "Step {0} ( {1} )".translate([step.obj_title, this.stepsType[step.step_type_obj]]); + this.confirmWindow.setTitle(title); + } else { + this.confirmWindow.setTitle("Step " + step.step_type_obj.capitalize()); + } + this.confirmWindow.setMessage("Do you want to remove the step '{0}'?".translate([step.obj_title])); + yesButton = this.confirmWindow.footer.getItem("confirmWindow-footer-yes"); + noButton = this.confirmWindow.footer.getItem("confirmWindow-footer-no"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: 'activity/' + PMDesigner.act_uid + '/step/' + step.step_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.removingStepTask(step, response); + that.confirmWindow.close(); + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while deleting the step, please try again later.'.translate(), + messageSuccess: 'Step removed successfully'.translate(), + flashContainer: that.mainWindow.getParent() + }); + restClient.executeRestClient(); + }); + } + if (noButton) { + noButton.setHandler(function () { + that.confirmWindow.close(); + }); + } + this.confirmWindow.open(); +}; +/** + * eliminates the step of step Assign Accordion + * @param step, the current step to remove + * @param response, data from the endpoint + */ +stepsTask.prototype.removingStepTask = function (step, response) { + var stepObject, + stepAvailable, + treeNodeObject, + stepAvailables, + i, + itemsTreeNode = [], + items = []; + stepObject = this.stepsAssignAccordion.getItem("id" + step.step_uid_obj); + this.elementAccordionOpen.remove(stepObject); + this.stepsAssigned.remove(stepObject); + this.stepsAssignAccordion.removeItem(stepObject); + if (stepObject) { + stepAvailable = this.getStepAvailables(); + stepAvailables = this.getAvailablesStepsByCriteria(step.step_type_obj, stepAvailable); + for (i = 0; i < stepAvailables.length; i += 1) { + items.push({ + obj_title: stepAvailables[i]['obj_title'], + obj_type: stepAvailables[i]['obj_type'], + obj_uid: stepAvailables[i]['obj_uid'] + }); + } + treeNodeObject = this.stepsAssignTree.getItem(step.step_type_obj); + itemsTreeNode = treeNodeObject.getItems(); + for (i = 0; i < itemsTreeNode.length; i += 1) { + treeNodeObject.removeItem(itemsTreeNode[i]); + } + treeNodeObject.clearItems(); + treeNodeObject.setDataItems(items); + this.updateIndexPosition(treeNodeObject); + this.addEventSortableInTreePanelElements(); + this.addEventSortableInAccordionElements(); + } +}; +/** + * get the steps is not assigned by a criterion + * @param criteria, It is the filter criteria search + * @param stepAvailable, all steps Unassigned + * @returns {Array}, filtered items + */ +stepsTask.prototype.getAvailablesStepsByCriteria = function (criteria, stepAvailable) { + var items = [], + i; + if (jQuery.isArray(stepAvailable)) { + for (i = 0; i < stepAvailable.length; i += 1) { + if (stepAvailable[i].obj_type === criteria) { + items.push(stepAvailable[i]); + } + } + } + return items; +}; +/** + * This method is executed when an element stepsAssignTree, is assigned in a grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @returns {stepsTask} + */ +stepsTask.prototype.receiveTreeNodeItem = function (receiveData, grid, index) { + var restClient, that = this, message; + if (that.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: that.mainWindow + }); + message.show(); + return; + } + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger' : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger', + typeRequest: 'post', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: '', + st_position: index + 1 + }, + functionSuccess: function (xhr, response) { + grid.addDataItem({ + st_condition: '', + st_position: index + 1, + st_type: grid.st_type, + tri_description: '', + tri_title: receiveData.obj_title, + tri_uid: receiveData.obj_uid, + obj_title: receiveData.obj_title, + obj_uid: receiveData.obj_uid + }, index); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method is executed when a row is drop in another grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @param draggableItem + * @returns {*} + */ +stepsTask.prototype.receiveRowItem = function (receiveData, grid, index, draggableItem) { + var receiveParent = draggableItem.getParent(), + message, + restClient, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: that.mainWindow + }); + index = receiveParent.items.indexOf(draggableItem); + receiveParent.items.remove(draggableItem); + receiveParent.addItem(draggableItem, index); + message.show(); + return false; + } + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger' : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger', + method: 'POST', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + } + }, { + url: receiveParent.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger/' + receiveData.obj_uid + '/' + that.getStepType(receiveParent.st_type) : + 'activity/' + PMDesigner.act_uid + '/step/' + receiveParent.step_uid + '/trigger/' + receiveData.obj_uid + '/' + receiveParent.st_type.toLowerCase(), + method: 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + var data; + data = receiveData; + if (data.hasOwnProperty("st_type")) { + data.st_type = grid.st_type; + grid.addDataItem(receiveData, index); + } + receiveParent.removeItem(draggableItem); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: [ + 'An unexpected error while assigning the trigger, please try again later.'.translate() + ], + messageSuccess: [ + 'Trigger assigned successfully.'.translate() + ] + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method is executed when a row is sorted in the grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the new index position row + * @returns {stepsTask} + */ +stepsTask.prototype.sortableRowHandler = function (receiveData, grid, index) { + var that = this, + restClient; + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + "/step/trigger/" + receiveData.tri_uid : + 'activity/' + PMDesigner.act_uid + "/step/" + grid.step_uid + "/trigger/" + receiveData.tri_uid, + typeRequest: 'update', + data: { + st_type: receiveData.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: 'An unexpected error while assigning the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger assigned successfully.'.translate() + }); + restClient.executeRestClient(); + return this; +}; +/** + * This method eliminates the list of triggers trigger an assigned step + * @param row, the row affected or selected + * @param grid, It is affected or grid to remove selected row + */ +stepsTask.prototype.removeTrigger = function (row, grid) { + var message = 'Do you want to remove the trigger "', + messageData = row.getData().tri_title ? row.getData().tri_title : "", + yesButton, + noButton, + that = this, + restClient; + message = message + messageData + '"?'; + this.confirmWindow.setMessage(message.translate()); + yesButton = this.confirmWindow.footer.getItem("confirmWindow-footer-yes"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + PMDesigner.act_uid + '/step/trigger/' + row.getData().tri_uid + '/' + that.getStepType(row.getData().st_type) : + 'activity/' + PMDesigner.act_uid + '/step/' + grid.step_uid + '/trigger/' + row.getData().tri_uid + '/' + that.getStepType(row.getData().st_type), + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + that.confirmWindow.close(); + that.updateIndexToGrid(grid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.mainWindow, + messageError: 'An unexpected error while deleting the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger removed successfully'.translate() + }); + restClient.executeRestClient(); + }); + } + noButton = this.confirmWindow.footer.getItem("confirmWindow-footer-no"); + if (noButton) { + noButton.setHandler(function () { + that.confirmWindow.close(); + }); + } + this.confirmWindow.open(); +}; +/** + * updates indexes of elements selected grid + * @param grid, It is affected or grid to remove selected row + * @returns {stepsTask} + */ +stepsTask.prototype.updateIndexToGrid = function (grid) { + var cell, rows, i, row; + if (grid) { + rows = grid.getItems(); + if (jQuery.isArray(rows)) { + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + cell = row.cells.find("columnData"); + if (cell) { + cell.setContent(i + 1); + } + } + } + } + return this; +}; +/** + * get the steps assigned by a search criterion + * @param criteria, search filter, after running the endpoint getAccordionData method + * @returns {Array}, response with criteria + */ +stepsTask.prototype.getStepsAssignedByCriteria = function (criteria) { + var allAssigned, + i, + elements, + j, + resp, + response = []; + allAssigned = this.getAccordionData(); + if (jQuery.isArray(allAssigned)) { + for (i = 0; i < allAssigned.length; i += 1) { + resp = allAssigned[i]; + if (typeof resp === "object") { + elements = resp.response ? resp.response : []; + for (j = 0; j < elements.length; j += 1) { + data = elements[j]; + if (typeof data === "object") { + if (data.step_type_obj && data.step_type_obj === criteria) { + response.push(data); + } + } + } + } + } + } + return response; +}; +/** + * updates indexes of elements assigned + * @returns {stepsTask} + */ +stepsTask.prototype.updateItemIndexToAccordion = function () { + var title, + i, + item, + dataItem, + items = this.stepsAssignAccordion.items, + position, + max; + max = items.getSize(); + for (i = 0; i < max; i += 1) { + item = items.get(i); + position = items.indexOf(item); + dataItem = item.dataItem; + title = (position + 1) + ". " + dataItem.obj_title; + if (this.stepsType[dataItem.step_type_obj]){ + title = title + ' (' + this.stepsType[dataItem.step_type_obj] + ')'; + } + item.dataItem.step_position = i + 1; + item.setTitle(title); + } + return this; +}; +/** + * add tooltip in treeNode elements + * @returns {stepsTask} + */ +stepsTask.prototype.updateIndexPosition = function (treeNode) { + var items, i, item, $item, text, data; + if (treeNode && treeNode.html) { + items = treeNode.getItems(); + if (jQuery.isArray(items)) { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + if (item.html) { + $item = $(item.html); + data = item.getData(); + text = $item.find("a").get(0); + text.title = data.obj_title; + } + } + } + } + return this; +}; +/** + * return the not items config. + * @returns {{obj_title: *, obj_uid: string, id: string}} + */ +stepsTask.prototype.notItemConfig = function () { + var config = { + obj_title: 'N/A'.translate(), + obj_uid: '', + id: "notItem" + }; + return config; +}; +( + function () { + var processPermissionsSetForm; + PMDesigner.processPermissions = function (event) { + var PROCESS_PERMISSIONS_OPTION = "", + PROCESS_PERMISSIONS_UID = "", + arrayCboGroup = [], + arrayCboUser = [], + winGrdpnlProcessPermissions, + grdpnlProcessPermissions, + frmProcessPermissions, + processPermissionsData, + btnCreate, btnSave, btnCancel, + loadDataFromServerToFields, + disableAllItems, + listProcessPermissions, + isDirty2, + isDirtyFormProcessPermission, + refreshGridPanelInMainWindow, + processPermissionsGetRestProxy, + processPermissionsPostRestProxy, + processPermissionGetRestProxy, + processPermissionsPutRestProxy, + cboTargetCboOriginTaskSetOptionsRestProxy, + cboDynaFormSetOptionsRestProxy, + cboInputDocumentSetOptionsRestProxy, + cboOutputDocumentSetOptionsRestProxy, + processPermissionsSetFormByType, + processPermissionsDeleteRestProxy, + cboStatusCase, + cboTargetTask, + cboGroupOrUser, + cboOriginTask, + optionsType, + cboType, + cboDynaForm, + cboInputDocument, + cboOutputDocument, + cboPermission, + cboParticipationRequired, + processPermissionsDataIni = {}, + notification, + notificationText = "Fields marked with an asterisk (%%ASTERISK%%) are required.".translate() + .replace(/%%ASTERISK%%/g, '*'); + + loadDataFromServerToFields = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/dynaforms', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/input-documents', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/output-documents', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var i; + data = response[0].response; + cboTargetTask.clearOptions(); + cboOriginTask.clearOptions(); + cboTargetTask.addOption({value: '', label: 'All Tasks'.translate()}); + cboOriginTask.addOption({value: '', label: 'All Tasks'.translate()}); + for (i = 0; i <= data.diagrams[0].activities.length - 1; i += 1) { + cboTargetTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + cboOriginTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + } + //project/dynaforms + data = response[1].response; + cboDynaForm.clearOptions(); + cboDynaForm.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboDynaForm.addOption({value: data[i].dyn_uid, label: data[i].dyn_title}); + } + //project/input-documents + data = response[2].response; + cboInputDocument.clearOptions(); + cboInputDocument.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboInputDocument.addOption({value: data[i].inp_doc_uid, label: data[i].inp_doc_title}); + } + //project/output-documents + data = response[3].response; + cboOutputDocument.clearOptions(); + cboOutputDocument.addOption({value: '', label: 'All'.translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboOutputDocument.addOption({value: data[i].out_doc_uid, label: data[i].out_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + + disableAllItems = function () { + winGrdpnlProcessPermissions.getItems()[0].setVisible(false); + winGrdpnlProcessPermissions.getItems()[1].setVisible(false); + winGrdpnlProcessPermissions.hideFooter(); + }; + + isDirty2 = function () { + var user, + dynaForm, + inputDocument, + outputDocument, + flagInsert = (typeof(processPermissionsData.op_case_status) === "undefined") ? true : false; + + if (flagInsert) { + processPermissionsData = processPermissionsDataIni; + } + + if (cboStatusCase.getValue() != processPermissionsData.op_case_status) { + return true; + } + + if (cboTargetTask.getValue() != processPermissionsData.tas_uid) { + return true; + } + + user = (cboGroupOrUser.get("value") !== null && cboGroupOrUser.get("value")) ? cboGroupOrUser.get("value") : ""; + + if (user != processPermissionsData.usr_uid) { + return true; + } + + if (cboOriginTask.getValue() != processPermissionsData.op_task_source) { + return true; + } + + if (cboParticipationRequired.getValue() != processPermissionsData.op_participate) { + return true; + } + + if (cboType.getValue() != processPermissionsData.op_obj_type) { + return true; + } + + switch (cboType.getValue()) { + case "DYNAFORM": + dynaForm = (cboDynaForm.getValue() !== "") ? cboDynaForm.getValue() : "0"; + + if (dynaForm != processPermissionsData.op_obj_uid) { + return true; + } + + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + case "ATTACHMENT": + if (cboPermission.getValue() !== processPermissionsData.op_action) { + return true; + } + break; + case "INPUT": + inputDocument = (cboInputDocument.getValue() !== "") ? cboInputDocument.getValue() : "0"; + + if (inputDocument != processPermissionsData.op_obj_uid) { + return true; + } + + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + + break; + case "OUTPUT": + outputDocument = (cboOutputDocument.getValue() !== "") ? cboOutputDocument.getValue() : "0"; + + if (outputDocument != processPermissionsData.op_obj_uid) { + return true; + } + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "ANY": + case "MSGS_HISTORY": + if (cboPermission.getValue() != processPermissionsData.op_action) { + return true; + } + break; + } + + return false; + }; + + isDirtyFormProcessPermission = function () { + $("input,select,textarea").blur(); + if (frmProcessPermissions.isVisible()) { + var result = frmProcessPermissions.isDirty(), message_window; + + if (isDirty2()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Permissions".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + cboGroupOrUser.html.find("input").val(""); + cboGroupOrUser.value = ""; + if (clickedClose) { + winGrdpnlProcessPermissions.close(); + } else { + refreshGridPanelInMainWindow(false); + } + + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if (cboGroupOrUser.html.find("input").val()) { + cboGroupOrUser.html.find("input").val(""); + } + cboGroupOrUser.containerList.hide(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + refreshGridPanelInMainWindow(false); + if (clickedClose) { + winGrdpnlProcessPermissions.close(); + } + } + } else { + winGrdpnlProcessPermissions.close(); + } + }; + refreshGridPanelInMainWindow = function (load) { + disableAllItems(); + PROCESS_PERMISSIONS_OPTION = ""; + PROCESS_PERMISSIONS_UID = ""; + winGrdpnlProcessPermissions.getItems()[0].setVisible(true); + winGrdpnlProcessPermissions.setTitle("Permissions".translate()); + load = load != null ? load : true; + if (load) { + processPermissionsGetRestProxy(grdpnlProcessPermissions); + } + }; + + processPermissionsGetRestProxy = function (grdpnl) { + var restProxy = new PMRestClient({ + endpoint: "process-permissions", + typeRequest: "get", + functionSuccess: function (xhr, response) { + listProcessPermissions = response; + grdpnl.setDataItems(listProcessPermissions); + grdpnl.sort('group_user', 'asc'); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); + }; + + processPermissionsPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "process-permission", + typeRequest: "post", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission saved successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + processPermissionGetRestProxy = function (processPermissionsUid) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response; + processPermissionsSetForm("PUT", data); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + processPermissionsPutRestProxy = function (processPermissionsUid, data) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission edited successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + cboTargetCboOriginTaskSetOptionsRestProxy = function (cboTargetTask, cboOriginTask) { + cboTargetTask.clearOptions(); + cboOriginTask.clearOptions(); + var restProxy = new PMRestClient({ + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboTargetTask.addOption({value: "", label: "All Tasks".translate()}); + cboOriginTask.addOption({value: "", label: "All Tasks".translate()}); + for (i = 0; i <= data.diagrams[0].activities.length - 1; i += 1) { + cboTargetTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + cboOriginTask.addOption({ + value: data.diagrams[0].activities[i].act_uid, + label: data.diagrams[0].activities[i].act_name + }); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); + }; + + cboDynaFormSetOptionsRestProxy = function (cboDynaForm) { + cboDynaForm.clearOptions(); + var restProxy = new PMRestClient({ + endpoint: "dynaforms", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboDynaForm.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboDynaForm.addOption({value: data[i].dyn_uid, label: data[i].dyn_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + cboInputDocumentSetOptionsRestProxy = function (cboInputDocument) { + cboInputDocument.clearOptions(); + var restProxy = new PMRestClient({ + endpoint: "input-documents", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboInputDocument.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboInputDocument.addOption({value: data[i].inp_doc_uid, label: data[i].inp_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + cboOutputDocumentSetOptionsRestProxy = function (cboOutputDocument) { + var restProxy; + cboOutputDocument.clearOptions(); + restProxy = new PMRestClient({ + endpoint: "output-documents", + typeRequest: "get", + functionSuccess: function (xhr, response) { + var data = response, i; + cboOutputDocument.addOption({value: "", label: "All".translate()}); + for (i = 0; i <= data.length - 1; i += 1) { + cboOutputDocument.addOption({value: data[i].out_doc_uid, label: data[i].out_doc_title}); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + processPermissionsSetFormByType = function (type) { + cboPermission.removeOption("DELETE"); + cboPermission.removeOption("RESEND"); + + cboPermission.reset(); + cboOriginTask.setVisible(true); + cboParticipationRequired.setVisible(true); + cboStatusCase.setVisible(true); + cboDynaForm.setVisible(false); + cboInputDocument.setVisible(false); + cboOutputDocument.setVisible(false); + cboPermission.setVisible(false); + + switch (type) { + case "DYNAFORM": + cboDynaForm.setVisible(true); + cboPermission.setVisible(true); + break; + case "ATTACHMENT": + cboPermission.setVisible(true); + break; + case "INPUT": + cboPermission.addOption({value: "DELETE", label: "Delete".translate()}); + + cboInputDocument.setVisible(true); + cboPermission.setVisible(true); + break; + case "OUTPUT": + cboPermission.addOption({value: "DELETE", label: "Delete".translate()}); + + cboOutputDocument.setVisible(true); + cboPermission.setVisible(true); + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "MSGS_HISTORY": + cboPermission.addOption({value: "RESEND", label: "Resend".translate()}); + + cboPermission.setVisible(true); + break; + case "ANY": + cboPermission.setVisible(true); + break; + case "REASSIGN_MY_CASES": + cboOriginTask.setVisible(false); + cboParticipationRequired.setVisible(false); + cboStatusCase.setVisible(false); + break; + } + }; + + processPermissionsDeleteRestProxy = function (processPermissionsUid) { + var restProxy = new PMRestClient({ + endpoint: "process-permission/" + processPermissionsUid, + typeRequest: "remove", + functionSuccess: function (xhr, response) { + refreshGridPanelInMainWindow(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Permission deleted successfully'.translate(), + flashContainer: grdpnlProcessPermissions + }); + restProxy.executeRestClient(); + }; + + processPermissionsSetForm = function (option, data) { + cboGroupOrUser.hideMessageRequired(); + processPermissionsData = data; + PROCESS_PERMISSIONS_OPTION = option; + PROCESS_PERMISSIONS_UID = (typeof(processPermissionsData.op_uid) !== "undefined") ? processPermissionsData.op_uid : ""; + + disableAllItems(); + winGrdpnlProcessPermissions.showFooter(); + winGrdpnlProcessPermissions.getItems()[1].setVisible(true); + + loadDataFromServerToFields(); + + switch (option) { + case "POST": + winGrdpnlProcessPermissions.setTitle("Create permission".translate()); + frmProcessPermissions.reset(); + processPermissionsSetFormByType(cboType.getValue()); + + break; + case "PUT": + winGrdpnlProcessPermissions.setTitle("Edit permission".translate()); + cboStatusCase.setValue(processPermissionsData.op_case_status); + cboTargetTask.setValue(processPermissionsData.tas_uid); + + var endpoint; + if (processPermissionsData.op_user_relation == 1) { + endpoint = "users/" + processPermissionsData.usr_uid; + } + if (processPermissionsData.op_user_relation == 2) { + endpoint = "groups/" + processPermissionsData.usr_uid; + } + + if (endpoint) { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (response.hasOwnProperty("usr_uid")) { + cboGroupOrUser.set("value", response["usr_uid"]); + cboGroupOrUser.data = response; + cboGroupOrUser.html.find("input").val(response["usr_firstname"] + " " + response["usr_lastname"] + " " + "(" + response["usr_username"] + ")"); + } + if (response.hasOwnProperty("grp_uid")) { + cboGroupOrUser.set("value", response["grp_uid"]); + cboGroupOrUser.data = response; + cboGroupOrUser.html.find("input").val(response["grp_title"]); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint(endpoint); + restClient.executeRestClient(); + } + + cboParticipationRequired.setValue(processPermissionsData.op_participate); + cboType.setValue(processPermissionsData.op_obj_type); + cboOriginTask.setValue(processPermissionsData.op_task_source); + processPermissionsSetFormByType(processPermissionsData.op_obj_type); + switch (processPermissionsData.op_obj_type) { + case "ANY": + cboPermission.setValue(processPermissionsData.op_action); + break; + case "DYNAFORM": + cboDynaForm.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "ATTACHMENT": + cboPermission.setValue(processPermissionsData.op_action); + break; + case "INPUT": + cboInputDocument.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "OUTPUT": + cboOutputDocument.setValue(processPermissionsData.op_obj_uid); + cboPermission.setValue(processPermissionsData.op_action); + break; + case "CASES_NOTES": + case "SUMMARY_FORM": + break; + case "MSGS_HISTORY": + cboPermission.setValue(processPermissionsData.op_action); + break; + } + break; + } + frmProcessPermissions.setFocus(); + }; + + cboStatusCase = new PMUI.field.DropDownListField({ + id: "cboStatusCase", + name: "cboStatusCase", + controlsWidth: "120px", + label: "Case Status".translate(), + value: "ALL", + options: [ + { + value: "ALL", + label: "All".translate() + }, + { + value: "DRAFT", + label: "DRAFT".translate() + }, + { + value: "TO_DO", + label: "TO DO".translate() + }, + { + value: "PAUSED", + label: "PAUSED".translate() + }, + { + value: "COMPLETED", + label: "COMPLETED".translate() + } + ] + }); + + cboTargetTask = new PMUI.field.DropDownListField({ + id: "cboTargetTask", + name: "cboTargetTask", + controlsWidth: "300px", + label: "Target Task".translate(), + options: null + }); + cboGroupOrUser = new SuggestField({ + label: "Group or User".translate(), + id: "cboGroupOrUser", + name: "cboGroupOrUser", + placeholder: "suggest users and groups", + width: 500, + required: true, + separatingText: ["Groups", "Users"], + dynamicLoad: { + data: [ + { + key: "grp_uid", + label: ["grp_title"] + }, + { + key: "usr_uid", + label: ["usr_firstname", "usr_lastname", "(", "usr_username", ")"] + } + ], + keys: { + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endpoints: [ + { + method: "GET", + url: 'groups' + }, { + method: "GET", + url: 'users' + } + ] + } + } + }); + + cboOriginTask = new PMUI.field.DropDownListField({ + id: "cboOriginTask", + name: "cboOriginTask", + controlsWidth: "300px", + label: "Origin Task".translate(), + options: null + }); + + cboParticipationRequired = new PMUI.field.DropDownListField({ + id: "cboParticipationRequired", + name: "cboParticipationRequired", + controlsWidth: "70px", + label: "Participation required?".translate(), + value: "0", + options: [ + { + value: "0", + label: "No".translate() + }, + { + value: "1", + label: "Yes".translate() + } + ] + }); + notification = new PMUI.field.TextAnnotationField({ + id: "requiredMessage", + name: "Message", + textType: PMUI.field.TextAnnotationField.TEXT_TYPES.HTML, + text: notificationText, + text_Align: "center" + }); + optionsType = [ + { + value: "ANY", + label: "All".translate() + }, + { + value: "DYNAFORM", + label: "Dynaform".translate() + }, + { + value: "ATTACHMENT", + label: "Attachment".translate() + }, + { + value: "INPUT", + label: "Input Document".translate() + }, + { + value: "OUTPUT", + label: "Output Document".translate() + }, + { + value: "CASES_NOTES", + label: "Cases Notes".translate() + }, + { + value: "MSGS_HISTORY", + label: "Messages History".translate() + }, + { + value: "REASSIGN_MY_CASES", + label: "Reassign my cases".translate() + } + ]; + + if (enterprise == "1") { + optionsType.push({value: "SUMMARY_FORM", label: "Summary Form".translate()}); + } + // sorting the optionsType + optionsType.sort(function(a, b) { + return (a.label > b.label) ? 1 : ((b.label > a.label) ? -1 : 0); + }); + + cboType = new PMUI.field.DropDownListField({ + id: "cboType", + name: "cboType", + controlsWidth: "180px", + label: "Type".translate(), + value: "ANY", + options: optionsType, + onChange: function (newValue, prevValue) { + processPermissionsSetFormByType(cboType.getValue()); + } + }); + + cboDynaForm = new PMUI.field.DropDownListField({ + id: "cboDynaForm", + name: "cboDynaForm", + controlsWidth: "300px", + label: "DynaForm".translate(), + options: [], + visible: false + }); + + cboInputDocument = new PMUI.field.DropDownListField({ + id: "cboInputDocument", + name: "cboInputDocument", + controlsWidth: "300px", + label: "Input Document".translate(), + options: [], + visible: false + }); + + cboOutputDocument = new PMUI.field.DropDownListField({ + id: "cboOutputDocument", + name: "cboOutputDocument", + controlsWidth: "300px", + label: "Output Document".translate(), + options: [], + visible: false + }); + + cboPermission = new PMUI.field.DropDownListField({ + id: "cboPermission", + name: "cboPermission", + controlsWidth: "100px", + label: "Permission".translate(), + value: "VIEW", + options: [ + { + value: "VIEW", + label: "View".translate() + }, + { + value: "BLOCK", + label: "Block".translate() + } + ], + visible: true + }); + + frmProcessPermissions = new PMUI.form.Form({ + id: "frmProcessPermissions", + + title: "", + width: "890px", + items: [ + cboType, + cboStatusCase, + cboTargetTask, + cboOriginTask, + cboParticipationRequired, + cboDynaForm, + cboInputDocument, + cboOutputDocument, + cboPermission + ] + }); + + btnCreate = new PMUI.ui.Button({ + id: "btnCreate", + text: "Create".translate(), + height: "36px", + width: 100, + style: { + cssClasses: [ + "mafe-button-create" + ] + }, + + handler: function () { + frmProcessPermissions.reset(); + processPermissionsDataIni = {}; + + processPermissionsDataIni.op_case_status = "ALL"; + processPermissionsDataIni.tas_uid = ""; + processPermissionsDataIni.usr_uid = ""; + processPermissionsDataIni.op_task_source = ""; + processPermissionsDataIni.op_participate = "0"; + processPermissionsDataIni.op_obj_type = "ANY"; + processPermissionsDataIni.op_obj_uid = ""; + processPermissionsDataIni.op_action = "VIEW"; + + processPermissionsSetForm("POST", {}); + } + }); + + grdpnlProcessPermissions = new PMUI.grid.GridPanel({ + id: "grdpnlProcessPermissions", + filterPlaceholder: "Search ...".translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + width: "96%", + tableContainerHeight: 374, + //height: DEFAULT_WINDOW_HEIGHT - 60, + style: { + cssClasses: ["mafe-gridPanel"] + }, + filterable: true, + columns: [ + { + columnData: "group_user", + title: "Group or User".translate(), + alignmentCell: 'left', + width: "190px", + sortable: true + }, + { + columnData: "op_obj_type", + title: "Type".translate(), + alignmentCell: 'left', + width: "100px", + sortable: true + }, + { + columnData: "participated", + title: "Participation".translate(), + alignmentCell: 'left', + width: "115px", + sortable: true + }, + { + columnData: "object", + title: "Object".translate(), + alignmentCell: 'left', + width: "158px", + sortable: true + }, + { + columnData: "op_action", + title: "Permission".translate(), + alignmentCell: 'left', + width: "100px", + sortable: true + }, + { + columnData: "op_case_status", + title: "Status".translate(), + alignmentCell: 'left', + width: "70px", + sortable: true + }, + { + id: 'grdpnlProcessPermissionsButtonEdit', + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: "70px", + buttonStyle: { + cssClasses: [ + "mafe-button-edit" + ] + }, + + onButtonClick: function (row, grid) { + var data; + frmProcessPermissions.reset(); + data = row.getData(); + processPermissionGetRestProxy(data.op_uid); + } + }, + { + id: 'grdpnlProcessPermissionsButtonDelete', + dataType: "button", + title: "", + buttonLabel: "Delete".translate(), + width: "80px", + buttonStyle: { + cssClasses: [ + "mafe-button-delete" + ] + }, + + onButtonClick: function (row, grid) { + var data = row.getData(), msgWarning; + msgWarning = new PMUI.ui.MessageWindow({ + id: "msgWarning", + windowMessageType: 'warning', + width: 490, + title: "Permissions".translate(), + message: "Do you want to delete this permission?".translate(), + footerItems: [ + { + id: 'msgWarningButtonNo', + text: "No".translate(), + handler: function () { + msgWarning.close(); + }, + buttonType: "error" + }, + { + id: 'msgWarningButtonYes', + text: "Yes".translate(), + handler: function () { + processPermissionsDeleteRestProxy(data.op_uid); + msgWarning.close(); + }, + buttonType: "success" + } + ] + }); + + msgWarning.open(); + msgWarning.dom.titleContainer.style.height = '17px'; + msgWarning.showFooter(); + } + } + ], + dataItems: null + }); + + winGrdpnlProcessPermissions = new PMUI.ui.Window({ + id: "winGrdpnlProcessPermissions", + title: "Permissions".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + buttonPanelPosition: "bottom", + footerAlign: "right", + onBeforeClose: function () { + clickedClose = true; + isDirtyFormProcessPermission(); + }, + footerItems: [ + { + id: "btnCancel", + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + clickedClose = false; + isDirtyFormProcessPermission(); + } + }, + { + id: "btnSave", + text: "Save".translate(), + buttonType: "success", + handler: function () { + var cboGroupOrUserValue = "", groupOrUser, data; + + if (frmProcessPermissions.isValid() && cboGroupOrUser.isValid()) { + if (cboGroupOrUser.data) { + if (cboGroupOrUser.data.hasOwnProperty("usr_uid")) { + cboGroupOrUserValue = "1|" + cboGroupOrUser.get("value"); + } + if (cboGroupOrUser.data.hasOwnProperty("grp_uid")) { + cboGroupOrUserValue = "2|" + cboGroupOrUser.get("value"); + } + } else { + cboGroupOrUserValue = ""; + } + groupOrUser = cboGroupOrUserValue.split("|"); + + data = { + op_case_status: cboStatusCase.getValue(), + tas_uid: cboTargetTask.getValue() === '0' ? '' : cboTargetTask.getValue(), + op_user_relation: groupOrUser[0], + usr_uid: groupOrUser[1], + op_task_source: cboOriginTask.getValue() === '0' ? '' : cboOriginTask.getValue(), + op_participate: cboParticipationRequired.getValue() + }; + + switch (cboType.getValue()) { + case "DYNAFORM": + data["op_obj_type"] = cboType.getValue(); + data["dynaforms"] = cboDynaForm.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "INPUT": + data["op_obj_type"] = cboType.getValue(); + data["inputs"] = cboInputDocument.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "OUTPUT": + data["op_obj_type"] = cboType.getValue(); + data["outputs"] = cboOutputDocument.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "CASES_NOTES": + data["op_obj_type"] = cboType.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + case "REASSIGN_MY_CASES": + data = {}; + data["op_user_relation"] = groupOrUser[0]; + data["usr_uid"] = groupOrUser[1]; + data["tas_uid"] = cboTargetTask.getValue() === '0' ? '' : cboTargetTask.getValue(); + data["op_obj_type"] = cboType.getValue(); + break; + default: + data["op_obj_type"] = cboType.getValue(); + data["op_action"] = cboPermission.getValue(); + break; + } + switch (PROCESS_PERMISSIONS_OPTION) { + case "POST": + processPermissionsPostRestProxy(data); + break; + case "PUT": + processPermissionsPutRestProxy(PROCESS_PERMISSIONS_UID, data); + break; + } + } else { + cboGroupOrUser.showMessageRequired(); + frmProcessPermissions.addItem(notification) + } + + cboGroupOrUser.html.find("input").val(""); + cboGroupOrUser.value = ""; + } + } + ] + }); + + winGrdpnlProcessPermissions.addItem(grdpnlProcessPermissions); + winGrdpnlProcessPermissions.addItem(frmProcessPermissions); + + refreshGridPanelInMainWindow(); + if (typeof listProcessPermissions !== "undefined") { + winGrdpnlProcessPermissions.open(); + $(cboGroupOrUser.createHTML()).insertBefore(cboType.html); + + + cboGroupOrUser.html.find("input").val(""); + jQuery(grdpnlProcessPermissions.html).css({ + margin: "2px" + }); + winGrdpnlProcessPermissions.body.style.height = "auto"; + $('#grdpnlProcessPermissions .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + winGrdpnlProcessPermissions.defineEvents(); + applyStyleWindowForm(winGrdpnlProcessPermissions); + + grdpnlProcessPermissions.dom.toolbar.appendChild(btnCreate.getHTML()); + btnCreate.defineEvents(); + disableAllItems(); + refreshGridPanelInMainWindow(); + } + }; + + PMDesigner.processPermissions.create = function () { + PMDesigner.processPermissions(); + + frmProcessPermissions.reset(); + processPermissionsDataIni = {}; + + processPermissionsDataIni.op_case_status = "ALL"; + processPermissionsDataIni.tas_uid = ""; + processPermissionsDataIni.usr_uid = ""; + processPermissionsDataIni.op_task_source = ""; + processPermissionsDataIni.op_participate = "0"; + processPermissionsDataIni.op_obj_type = "ANY"; + processPermissionsDataIni.op_obj_uid = ""; + processPermissionsDataIni.op_action = "VIEW"; + + processPermissionsSetForm("POST", {}); + }; + }() +); + +(function () { + var winHtmlShow, loadValuesStartMessage; + + PMDesigner.startMessage = function (element) { + var winGrdpnlStartMessage, + btnNew, + cboUser, + cboDynaForm, + btnGenerateStartMessagePage, + frmDataStartMessage, + frmHtml, + winFrmDataStartMessage, + restProxy, + disableAllItems, + winFrmStartMessageShow, + updateStartMessage, + loadDataDynaform, + loadDataUsers, + loadDataForm, + listUsers = [], + cboMethod, + listDynaforms = [], + dataForm = [], + enableGenerateWebEntry, + btnSaveStartMessagePage, + btnStartMessageCancel, + btnClose, + startMessage = element; + + disableAllItems = function () { + winGrdpnlStartMessage.getItems()[0].setVisible(false); + winGrdpnlStartMessage.getItems()[1].setVisible(false); + btnGenerateStartMessagePage.setVisible(false); + btnStartMessageCancel.setVisible(false); + btnClose.setVisible(false); + winGrdpnlStartMessage.hideFooter(); + }; + + winFrmStartMessageShow = function () { + disableAllItems(); + frmDataStartMessage.reset(); + winGrdpnlStartMessage.showFooter(); + winGrdpnlStartMessage.getItems()[0].setVisible(true); + btnGenerateStartMessagePage.setVisible(true); + btnStartMessageCancel.setVisible(true); + loadDataUsers(); + loadDataDynaform(); + loadDataForm(); + frmDataStartMessage.setFocus(); + }; + + winHtmlShow = function (msgHtml) { + if (typeof msgHtml == 'undefined') { + msgHtml = dataForm.we_data; + if (dataForm.we_method == "WS") { + window.open(msgHtml); + winGrdpnlStartMessage.close(); + return false; + } + } + disableAllItems(); + winGrdpnlStartMessage.showFooter(); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(false); + btnClose.setVisible(true); + winGrdpnlStartMessage.getItems()[1].setVisible(true); + winGrdpnlStartMessage.getItems()[1].setWidth(925); + winGrdpnlStartMessage.getItems()[1].setHeight(440); + winGrdpnlStartMessage.getItems()[1].hideHeader(); + frmHtml.getFields()[0].setHeight(396); + frmHtml.getItems()[0].setValue(msgHtml); + frmHtml.panel.style.addProperties({'box-sizing': 'initial'}); + frmHtml.style.addProperties({marginLeft: '16px'}); + frmHtml.setFocus(); + return true; + }; + + loadValuesStartMessage = function (flag) { + var viewFlagForm, + restClient, + response; + listUsers = []; + listDynaforms = []; + dataForm = []; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + startMessage.ports.get(0).connection.flo_element_dest + '/assignee/all', + method: 'GET' + }, + { + url: "activity/" + startMessage.ports.get(0).connection.flo_element_dest + "/steps", + method: 'GET' + }, { + url: 'web-entry/' + startMessage.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + listUsers = response[0].response; + listDynaforms = response[1].response; + dataForm = response[2].response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + if (flag) { + viewFlagForm = false; + if (typeof dataForm == 'object' && dataForm.we_data != null) { + viewFlagForm = true; + } + response = [listUsers.length, listDynaforms.length, viewFlagForm]; + return response; + } + return true; + }; + + updateStartMessage = function (data) { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: "web-entry/" + startMessage.evn_uid, + method: 'PUT', + data: data + }, + { + url: 'web-entry/' + startMessage.evn_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataForm = response[1].response; + if (data.we_method == "HTML") { + winHtmlShow(response.we_data); + } + btnGenerateStartMessagePage.setVisible(false); + btnStartMessageCancel.setVisible(false); + btnClose.setVisible(true); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ["There are problems updating the Web Entry, please try again.".translate()], + messageSuccess: ['Web Entry updated successfully'.translate()], + flashContainer: frmDataStartMessage + }); + restClient.executeRestClient(); + }; + + loadDataDynaform = function () { + var i; + cboDynaForm.clearOptions(); + for (i = 0; i <= listDynaforms.length - 1; i++) { + if (listDynaforms[i].step_type_obj == "DYNAFORM") { + cboDynaForm.addOption({ + value: listDynaforms[i].step_uid_obj, + label: listDynaforms[i].obj_title + }); + } + } + }; + + loadDataUsers = function () { + var i; + cboUser.clearOptions(); + for (i = 0; i <= listUsers.length - 1; i++) { + cboUser.addOption({ + value: listUsers[i].aas_uid, + label: listUsers[i].aas_name + ' ' + listUsers[i].aas_lastname + }); + } + }; + + loadDataForm = function () { + cboUser.setValue(dataForm.usr_uid); + cboDynaForm.setValue(dataForm.dyn_uid); + cboMethod.setValue(dataForm.we_method); + }; + + enableGenerateWebEntry = function () { + btnGenerateStartMessagePage.setVisible(true); + btnStartMessageCancel.setVisible(true); + btnClose.setVisible(false); + winGrdpnlStartMessage.footer.getItems()[1].setVisible(true); + }; + cboUser = new PMUI.field.DropDownListField({ + id: "cboUser", + name: "cboUser", + label: "User".translate(), + required: true, + options: null, + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + cboDynaForm = new PMUI.field.DropDownListField({ + id: "cboDynaForm", + name: "cboDynaForm", + label: "Initial Dynaform".translate(), + options: null, + required: true, + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + cboMethod = new PMUI.field.DropDownListField({ + id: "cboMethod", + name: "cboMethod", + label: "Method".translate(), + value: "WS", + options: [ + { + value: "WS", + label: "PHP pages with Web Services".translate() + }, + { + value: "HTML", + label: "Single HTML".translate() + } + ], + onChange: function (newVal, oldVal) { + enableGenerateWebEntry(); + }, + controlsWidth: 350 + }); + + btnGenerateStartMessagePage = new PMUI.ui.Button({ + id: "btnGenerateStartMessagePage", + text: "Generate Web Entry Page".translate(), + handler: function () { + var flagGenerateStartMessage = 0, data; + data = { + tas_uid: startMessage.ports.get(0).connection.flo_element_dest, + dyn_uid: cboDynaForm.getValue(), + usr_uid: cboUser.getValue(), + we_title: startMessage.evn_name, + we_description: '', + we_method: cboMethod.getValue(), + we_input_document_access: 1 + }; + + if (frmDataStartMessage.isValid()) { + updateStartMessage(data); + } + }, + buttonType: 'success', + height: 31, + visible: true + }); + btnSaveStartMessagePage = new PMUI.ui.Button({ + id: "btnGenerateStartMessagePage", + text: "Save".translate(), + handler: function () { + var flagGenerateStartMessage = 0, data; + data = { + tas_uid: startMessage.ports.get(0).connection.flo_element_dest, + dyn_uid: cboDynaForm.getValue(), + usr_uid: cboUser.getValue(), + we_title: startMessage.evn_name, + we_description: '', + we_method: cboMethod.getValue(), + we_input_document_access: 1 + }; + + if (frmDataStartMessage.isValid()) { + updateStartMessage(data); + } + }, + buttonType: 'success', + height: 31, + visible: true + }); + + frmDataStartMessage = new PMUI.form.Form({ + id: "frmDataStartMessage", + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + items: [ + cboUser, + cboDynaForm, + cboMethod + ], + visibleHeader: false + }); + + btnClose = new PMUI.ui.Button({ + id: "btnClose", + text: "Close".translate(), + handler: function () { + winGrdpnlStartMessage.close(); + }, + buttonType: 'success', + height: 31 + }); + + btnStartMessageCancel = new PMUI.ui.Button({ + id: "btnStartMessageCancel", + text: "Cancel".translate(), + handler: function () { + var message_window; + if (frmDataStartMessage.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + id: "cancelMessageStartTimer", + title: "Start Message Event".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + bodyHeight: 'auto', + width: 490, + footerItems: [ + { + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + winGrdpnlStartMessage.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + frmDataStartMessage.reset(); + winGrdpnlStartMessage.close(); + } + } + }); + + frmHtml = new PMUI.form.Form({ + id: "frmHtml", + title: "", + width: DEFAULT_WINDOW_WIDTH - 43, + items: [ + { + id: "txtHtml", + name: "txtHtml", + pmType: "textarea", + valueType: "string", + rows: 400, + value: '', + controlsWidth: DEFAULT_WINDOW_WIDTH - 50, + labelVisible: false, + style: {cssClasses: ['mafe-textarea-resize']} + } + ] + }); + + winGrdpnlStartMessage = new PMUI.ui.Window({ + id: "winGrdpnlStartMessage", + title: "Start Message Event".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonPanelPosition: "top", + buttons: [btnSaveStartMessagePage, {pmType: 'label', text: 'or'}, btnStartMessageCancel, btnClose] + }); + + winGrdpnlStartMessage.addItem(frmDataStartMessage); + + openForm = function () { + winGrdpnlStartMessage.open(); + winGrdpnlStartMessage.defineEvents(); + applyStyleWindowForm(winGrdpnlStartMessage); + winGrdpnlStartMessage.footer.html.style.textAlign = 'right'; + winFrmStartMessageShow(); + } + }; + + PMDesigner.startMessage.openForm = function (element) { + openForm(); + }; + + PMDesigner.startMessage.viewForm = function (element) { + openForm(); + }; + + PMDesigner.startMessage.validate = function (starMessageEvent) { + if (starMessageEvent.ports.isEmpty()) { + PMDesigner.msgFlash('Must connect to a Task'.translate(), document.body, 'error', 4000, 5); + return [false, false]; + } + PMDesigner.startMessage(starMessageEvent); + response = loadValuesStartMessage(true); + if (response[0] == 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned users'.translate(), document.body, 'info', 4000); + return [false, false]; + } + if (response[1] == 0) { + PMDesigner.msgFlash('The task doesn\'t have assigned Dynaforms'.translate(), document.body, 'info', 4000); + return [false, false]; + } + return [true, response[2]]; + } +}()); + +(function () { + var windowPropSub; + + PMDesigner.propertiesSubProcess = function (activity) { + var typeVariables = ['@@', '@#', '@=', '@&'], + restClient, + isDirtyFormSubProcess, + getSubProcess, + formVarTexOriginOut, + updateSubProcess, + formVarTexOriginIn, + loadDropProcess, + formVarTexTargetOut, + formVarTexTargetIn, + windowPropertiesSub, + formProperties, + sepInputs, + gridVariablesOut, + gridVariablesIn, + formVariablesPanelOut, + formVariablesPanelIn, + validateVariable, + formVarButtonAddOut, + formVarButtonAddIn, + labelVariablesOut, + labelVariablesIn, + loadDataServer, + loadActivity, + isDirty = false; + + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + for (var i = 0; i < response.length; i += 1) { + if (response[i].prj_uid != PMDesigner.project.projectId) { + formProperties.getField('out_doc_process').addOption({ + label: response[i].prj_name, + value: response[i].prj_uid + }); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the output documents, please try again.".translate() + }); + isDirtyFormSubProcess = function () { + var message_window; + if (formProperties.isDirty() || isDirty) { + message_window = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + id: "cancelSaveSubprocPropertiesWin", + title: "Sub-process Properties".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + formProperties.reset(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + formProperties.setDirty(false); + windowPropertiesSub.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + windowPropertiesSub.close(); + } + }; + getSubProcess = function () { + var restProxy = new PMRestClient({ + endpoint: "subprocess/" + activity.act_uid, + typeRequest: "get", + functionSuccess: function (xhr, response) { + var yout, + oout, + jout, + itemsOut, + i, + xin, + yin, + oin, + jin, + dout, + din, + itemsIn, + xout; + formProperties.getField('out_doc_title').setValue(response.spr_name); + formProperties.getField('out_doc_process').setValue(response.spr_pro); + formProperties.getField('out_doc_type').setValue(response.spr_synchronous); + + if (response.spr_variables_out != false) { + xout = JSON.stringify(response.spr_variables_out); + yout = xout.substring(1, xout.length - 1); + oout = yout.replace(/"/g, ''); + jout = oout.split(','); + + itemsOut = []; + for (i = 0; i < jout.length; i += 1) { + dout = jout[i].split(':'); + itemsOut.push({ + origin: dout[0], + target: dout[1] + }); + } + gridVariablesOut.setDataItems(itemsOut); + + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + } + + if (response.spr_variables_in != false && response.spr_variables_in != undefined) { + xin = JSON.stringify(response.spr_variables_in); + yin = xin.substring(1, xin.length - 1); + oin = yin.replace(/"/g, ''); + jin = oin.split(','); + + itemsIn = []; + for (i = 0; i < jin.length; i += 1) { + din = jin[i].split(':'); + itemsIn.push({ + origin: din[0], + target: din[1] + }); + } + gridVariablesIn.setDataItems(itemsIn); + } + + if (response.spr_synchronous == "1") { + gridVariablesIn.setVisible(true); + formVariablesPanelIn.setVisible(true); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + updateSubProcess = function (data) { + var restProxy = new PMRestClient({ + endpoint: "subprocess/" + activity.act_uid, + typeRequest: "update", + data: data, + functionSuccess: function (xhr, response) { + var name = formProperties.getData().out_doc_title; + activity.setName(name); + activity.setActName(name); + PMDesigner.project.dirty = true; + + formProperties.reset(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + formProperties.setDirty(false); + windowPropertiesSub.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + }; + + formVarTexOriginOut = new CriteriaField({ + id: 'idformVarTexOriginOut', + pmType: "text", + name: 'nmformVarTexOriginOut', + placeholder: 'Origin'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + formVarTexOriginIn = new CriteriaField({ + id: 'idformVarTexOriginIn', + pmType: "text", + name: 'nmformVarTexOriginIn', + placeholder: 'Select Origin Process'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + formVarTexTargetOut = new CriteriaField({ + id: 'idformVarTexTargetOut', + pmType: "text", + name: 'nmformVarTexTargetOut', + placeholder: 'Select Target Process'.translate(), + labelVisible: false, + controlsWidth: 150, + required: true + }); + + formVarTexTargetIn = new CriteriaField({ + id: 'idformVarTexTargetIn', + pmType: "text", + name: 'nmformVarTexTargetIn', + placeholder: 'Target'.translate(), + labelVisible: false, + controlsWidth: 150 + }); + + windowPropertiesSub = new PMUI.ui.Window({ + id: 'propSubWindow', + title: "Sub-process Properties".translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + bodyHeight: '465px', + bodyWidth: '900px', + onBeforeClose: function () { + isDirtyFormSubProcess(); + }, + buttons: [ + { + id: 'propSubButtonClose', + text: "Close".translate(), + buttonType: 'error', + handler: function () { + isDirtyFormSubProcess(); + } + }, + { + id: 'propSubButtonSave', + text: "Save".translate(), + buttonType: 'success', + handler: function () { + if (!formProperties.isValid()) { + return; + } + var propertiesData = formProperties.getData(); + var variablesOutData = gridVariablesOut.getData(); + var variablesOut = {}; + if (variablesOutData.length > "0") { + for (i = 0; i < variablesOutData.length; i += 1) { + variablesOut[variablesOutData[i].origin] = variablesOutData[i].target; + } + } + var variablesIn = {}; + if (propertiesData.out_doc_type == "1") { + var variablesInData = gridVariablesIn.getData(); + if (variablesInData.length > "0") { + for (j = 0; j < variablesInData.length; j += 1) { + variablesIn[variablesInData[j].origin] = variablesInData[j].target; + } + } + } + + var dataToSend = { + spr_pro: propertiesData.out_doc_process, + spr_tas: propertiesData.spr_tas, + spr_name: propertiesData.out_doc_title, + spr_synchronous: propertiesData.out_doc_type, + spr_variables_out: variablesOut, + spr_variables_in: variablesIn + }; + + updateSubProcess(dataToSend); + } + } + ], + buttonPanelPosition: 'bottom', + buttonsPosition: 'right' + }); + + formProperties = new PMUI.form.Form({ + id: 'propSubForm', + title: "", + fieldset: true, + visibleHeader: false, + width: 926, + height: 'auto', + items: [ + { + id: 'propSubFormTitle', + pmType: "text", + name: 'out_doc_title', + label: "Sub-Process name".translate(), + required: true, + controlsWidth: 300 + }, + { + id: 'propSubFormProcess', + pmType: "dropdown", + name: 'out_doc_process', + label: "Process".translate(), + controlsWidth: 300, + required: true, + options: [ + { + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + } + ], + value: "", + onChange: function (a, b) { + if (a.trim().length !== 0) { + formVarTexTargetOut.buttonHTML.enable(); + formVarTexOriginIn.buttonHTML.enable(); + formVarTexTargetOut.controls[0].setPlaceholder("Target"); + formVarTexOriginIn.controls[0].setPlaceholder("Origin"); + } else { + formVarTexTargetOut.buttonHTML.disable(); + formVarTexOriginIn.buttonHTML.disable(); + } + formVarTexTargetOut.setProcess(a); + formVarTexOriginIn.setProcess(a); + loadActivity(a); + } + }, + { + id: 'propSubFormActivity', + pmType: "dropdown", + name: 'spr_tas', + label: "Starting activity".translate(), + controlsWidth: 300, + required: true, + options: [ + { + label: "- Select starting activity -".translate(), + value: "", + disabled: true, + selected: true + } + ], + value: "", + onChange: function (a, b) { + } + }, + { + id: 'propSubFormType', + pmType: "dropdown", + name: 'out_doc_type', + label: "Type".translate(), + controlsWidth: 150, + required: true, + options: [ + { + label: "Asynchronous".translate(), + value: "0" + }, + { + label: "Synchronous".translate(), + value: "1" + } + ], + value: "0", + onChange: function (a, b) { + isDirty = true; + } + } + ], + onChange: function (newValue, prevValue) { + switch (newValue.value) { + case "1" : + gridVariablesIn.setVisible(true); + gridVariablesIn.style.addProperties({marginLeft: '45px'}); + formVariablesPanelIn.setVisible(true); + formVariablesPanelIn.getItems()[2].setWidth(80); + $(formVariablesPanelIn.html).css({width: '850px', marginLeft: '45px'}); + windowPropertiesSub.getItems()[4].setVisible(true); + break; + case "0": + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + windowPropertiesSub.getItems()[4].setVisible(false); + break; + default : + break; + } + } + }); + + sepInputs = new PMSeparatorLineField({ + controlHeight: '1px', + controlColor: "#CDCDCD", + controlsWidth: "890px", + marginLeft: '0%' + }); + + formProperties.addItem(sepInputs); + + gridVariablesOut = new PMUI.grid.GridPanel({ + id: 'propSubGridVariablesOut', + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + style: { + cssClasses: ["mafe-gridPanel"] + }, + columns: [ + { + title: 'Origin'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "origin" + }, + { + title: 'Target'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "target" + }, + { + id: 'propSubGridVariablesOutButtonDelete', + title: '', + dataType: 'button', + width: '20%', + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + grid.removeItem(row); + isDirty = true; + }, + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + } + + } + ] + }); + + gridVariablesIn = new PMUI.grid.GridPanel({ + id: 'propSubGridVariablesIn', + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + pageSize: 10, + columns: [ + { + title: 'Origin'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "origin" + }, + { + title: 'Target'.translate(), + dataType: 'string', + width: '40%', + alignmentCell: 'left', + columnData: "target" + }, + { + id: 'propSubGridVariablesInButtonDelete', + title: '', + dataType: 'button', + width: '20%', + buttonLabel: 'Delete'.translate(), + onButtonClick: function (row, grid) { + grid.removeItem(row); + isDirty = true; + }, + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + } + } + ] + }); + + formVariablesPanelOut = new PMUI.core.Panel({ + id: "formVariablesPanelOut", + layout: "hbox", + fieldset: true, + width: DEFAULT_WINDOW_WIDTH - 70 + }); + + formVariablesPanelIn = new PMUI.core.Panel({ + id: "formVariablesPanelIn", + layout: "hbox", + fieldset: true, + legend: "Variables In".translate(), + width: DEFAULT_WINDOW_WIDTH - 70 + }); + + validateVariable = function (field) { + var value; + field.controls[0].style.removeClasses(['error']) + value = field.getValue(); + if (value == '') { + PMDesigner.msgWinWarning('Please insert variable before adding to the list.'.translate()); + field.controls[0].style.addClasses(['error']) + return false; + } + if (typeVariables.indexOf(String(value.substring(0, 2))) != -1) { + return true; + } + PMDesigner.msgWinWarning("The value introduced doesn\'t have the correct format with a vallid prefix (@@, @#, @=, @&)".translate()); + field.controls[0].style.addClasses(['error']) + return false; + }; + + formVarButtonAddOut = new PMUI.ui.Button({ + id: 'formVarButtonAddOut', + text: 'Add'.translate(), + width: 60, + visible: false, + buttonType: "success", + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + style: { + cssProperties: { + padding: "5px" + } + }, + handler: function () { + var gridOut, i; + if (validateVariable(formVarTexOriginOut) && validateVariable(formVarTexTargetOut)) { + a = formVarTexOriginOut.getValue(); + b = formVarTexTargetOut.getValue(); + gridVariablesOut.addDataItem({origin: a, target: b}); + formVarTexOriginOut.setValue(""); + formVarTexTargetOut.setValue(""); + isDirty = true; + + gridOut = document.getElementById("propSubGridVariablesOut").getElementsByTagName("table")[0]; + i = gridOut.rows.length - 1; + gridOut.getElementsByClassName("pmui pmui-button")[i].style.marginTop = "2px"; + } + } + }); + + formVarButtonAddIn = new PMUI.ui.Button({ + id: 'formVarButtonAddIn', + text: 'Add'.translate(), + width: 60, + buttonStyle: { + cssClasses: [ + 'mafe-button-properties' + ] + }, + style: { + cssProperties: { + padding: "5px", + } + }, + buttonType: 'success', + handler: function () { + var gridOut, i; + if (validateVariable(formVarTexOriginIn) && validateVariable(formVarTexTargetIn)) { + a = formVarTexOriginIn.getValue(); + b = formVarTexTargetIn.getValue(); + gridVariablesIn.addDataItem({origin: a, target: b}); + formVarTexOriginIn.setValue(""); + formVarTexTargetIn.setValue(""); + isDirty = true; + + gridOut = document.getElementById("propSubGridVariablesIn").getElementsByTagName("table")[0]; + i = gridOut.rows.length - 1; + gridOut.getElementsByClassName("pmui pmui-button")[i].style.marginTop = "2px"; + } + } + }); + + labelVariablesOut = new PMUI.ui.TextLabel({ + textMode: 'plain', + text: 'Variables Out'.translate() + }); + + labelVariablesIn = new PMUI.ui.TextLabel({ + textMode: 'plain', + text: 'Variables In'.translate() + }); + + loadDropProcess = function () { + formProperties.getField('out_doc_process').clearOptions(); + formProperties.getField('out_doc_process').addOption({ + label: "- Select a process -".translate(), + value: "", + disabled: true, + selected: true + }); + }; + loadDataServer = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'projects', + method: 'GET' + }, + { + url: 'project/' + PMDesigner.project.id + '/subprocess/' + activity.act_uid, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var dt, + itemsOut, + yout, + oout, + jout, + dout, + xin, + yin, + oin, + jin, + din, + itemsIn, + xout; + + //projects + dt = response[0].response; + for (var i = 0; i < dt.length; i += 1) { + if (dt[i].prj_uid !== PMDesigner.project.projectId) { + formProperties.getField('out_doc_process').addOption({ + label: dt[i].prj_name, + value: dt[i].prj_uid + }); + } + } + //subprocess + dt = response[1].response; + formProperties.getField('out_doc_title').setValue(dt.spr_name); + formProperties.getField('out_doc_process').setValue(dt.spr_pro === '0' ? '' : dt.spr_pro); + formProperties.getField('out_doc_type').setValue(dt.spr_synchronous); + + if (dt.spr_variables_out !== false) { //Asynchronous + xout = JSON.stringify(dt.spr_variables_out); + itemsOut = []; + if (xout != "[]") { + yout = xout.substring(1, xout.length - 1); + oout = yout.replace(/"/g, ''); + jout = oout.split(','); + for (i = 0; i < jout.length; i += 1) { + dout = jout[i].split(':'); + itemsOut.push({ + origin: dout[0], + target: dout[1] + }); + } + } + gridVariablesOut.setDataItems(itemsOut); + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + } + + if (dt.spr_variables_in !== false && dt.spr_variables_in !== undefined) { //Synchronous + xin = JSON.stringify(dt.spr_variables_in); + itemsIn = []; + if (xin != "[]") { + yin = xin.substring(1, xin.length - 1); + oin = yin.replace(/"/g, ''); + jin = oin.split(','); + for (i = 0; i < jin.length; i += 1) { + din = jin[i].split(':'); + itemsIn.push({ + origin: din[0], + target: din[1] + }); + } + } + gridVariablesIn.setDataItems(itemsIn); + } + + if (dt.spr_synchronous === "1") { + gridVariablesIn.setVisible(true); + formVariablesPanelIn.setVisible(true); + } + if (formProperties.getField('out_doc_process').getValue() !== '') { + loadActivity(formProperties.getField('out_doc_process').getValue()); + } + formProperties.getField('spr_tas').setValue(dt.spr_tas === '0' ? '' : dt.spr_tas); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadActivity = function (value) { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + value + '/starting-tasks', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + var dropdown, + i, + dt = response[0].response; + dt = dt.sort(function (a, b) { + return a.act_name.toString().toLowerCase() > b.act_name.toString().toLowerCase(); + }); + dropdown = formProperties.getField('spr_tas'); + dropdown.clearOptions(); + dropdown.addOption({ + value: '', + label: '- Select starting activity -'.translate() + }); + for (i = 0; i < dt.length; i += 1) { + dropdown.addOption({ + value: dt[i].act_uid, + label: dt[i].act_name + }); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + + formVariablesPanelOut.addItem(formVarTexOriginOut); + formVariablesPanelOut.addItem(formVarTexTargetOut); + formVariablesPanelOut.addItem(formVarButtonAddOut); + + formVariablesPanelIn.addItem(formVarTexOriginIn); + formVariablesPanelIn.addItem(formVarTexTargetIn); + formVariablesPanelIn.addItem(formVarButtonAddIn); + + gridVariablesIn.setVisible(false); + formVariablesPanelIn.setVisible(false); + + windowPropertiesSub.addItem(formProperties); + windowPropertiesSub.addItem(new PMUI.ui.TextLabel({ + width: 890, + text: 'Variables Out'.translate(), + style: { + cssProperties: { + background: '#aaaaaa', + margin: '-15px 10px 10px 15px', + color: 'white', + padding: '6px', + 'font-weight': 'bold' + } + }, + display: 'block' + })); + windowPropertiesSub.addItem(formVariablesPanelOut); + windowPropertiesSub.addItem(gridVariablesOut); + + windowPropertiesSub.addItem(new PMUI.ui.TextLabel({ + width: 890, + text: 'Variables In'.translate(), + style: { + cssProperties: { + background: '#aaaaaa', + margin: '15px 10px 10px 15px', + color: 'white', + padding: '6px', + 'font-weight': 'bold' + } + }, + display: 'block', + visible: false + })); + + windowPropertiesSub.addItem(formVariablesPanelIn); + windowPropertiesSub.addItem(gridVariablesIn); + + loadDropProcess(); + gridVariablesOut.setDataItems(""); + gridVariablesIn.setDataItems(""); + loadDataServer(); + + if (formProperties.getItems()[1].getValue() != "0") { + formVarTexTargetOut.setProcess(formProperties.getItems()[1].getValue()); + formVarTexOriginIn.setProcess(formProperties.getItems()[1].getValue()); + } + windowPropertiesSub.open(); + if (formProperties.getField('out_doc_process').getValue().trim().length === 0) { + formVarTexTargetOut.buttonHTML.disable(); + formVarTexOriginIn.buttonHTML.disable(); + } else { + formVarTexTargetOut.buttonHTML.enable(); + formVarTexOriginIn.buttonHTML.enable(); + } + windowPropertiesSub.showFooter(); + applyStyleWindowForm(windowPropertiesSub); + formVariablesPanelIn.getItems()[0].dom.labelTextContainer.style.display = "none"; + formVariablesPanelIn.getItems()[1].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.getItems()[0].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.getItems()[1].dom.labelTextContainer.style.display = "none"; + formVariablesPanelOut.style.addProperties({marginLeft: '45px'}); + gridVariablesOut.style.addProperties({marginLeft: '45px'}); + if (formVariablesPanelIn.visible == true) { + gridVariablesIn.setVisible(true); + gridVariablesIn.style.addProperties({marginLeft: '45px'}); + formVariablesPanelIn.setVisible(true); + formVariablesPanelIn.getItems()[2].setWidth(80); + $(formVariablesPanelIn.html).css({width: '850px', marginLeft: '45px'}); + windowPropertiesSub.getItems()[4].setVisible(true); + } + + formVariablesPanelOut.style.addProperties({width: '870px'}); + $(gridVariablesIn.html).find(".pmui-gridpanel-footer").css("position", "static"); + $(gridVariablesIn.html).find(".pmui-gridpanel-footer").css("margin-top", "0px"); + $(gridVariablesOut.html).find(".pmui-gridpanel-footer").css("position", "static"); + $(gridVariablesOut.html).find(".pmui-gridpanel-footer").css("margin-top", "0px"); + windowPropertiesSub.defineEvents(); + gridVariablesOut.html.children[0].style.display = "none"; + gridVariablesIn.html.children[0].style.display = "none"; + formProperties.getField('out_doc_title').setFocus(); + formVarButtonAddOut.setWidth(80); + formVarButtonAddOut.setVisible(true); + + }; +}()); +if (typeof(consolidated) == 'undefined') { + consolidated = '0'; +} +PMDesigner.activityProperties = function (activity) { + switch (activity.getActivityType()) { + case "SUB_PROCESS": + PMDesigner.propertiesSubProcess(activity); + break; + case "TASK": + if (activity.getTaskType() === "SCRIPTTASK") { + PMDesigner.scriptTaskProperties(activity); + } else { + PMDesigner.taskProperties(activity); + } + break; + } +}; + +PMDesigner.taskProperties = function (activity) { + var formDefinitions, + featuresForms = [], + propertiesTabs, + formCaseLabels, + dataProperties, + formTimingControl, + configurationForms, + customGrid, + formNotifications, + buttonFieldCancel, + buttonFieldAdd, + abeForm, + MobilePanel, + enableTaskMobile, + routeCaseMobile, + abeMainPanel, + abeAddOption, + abeTemplates, + abeDynaforms, + abeReceiverAccount, + abeEmailAcount, + abeFields, + warningChanges, + windowProperties, + processDataProperties, + i, + editRow = null, + arrayTrue = '["TRUE"]', + arrayFalse = '["FALSE"]', + stringTrue = "TRUE", + stringFalse = "FALSE", + defaultServerlabel = "Mail (PHP)".translate(); + + configurationForms = [ + { + id: 'windowPropertiesTabPanelDefinitions', + icon: '', + title: 'Definitions'.translate(), + panel: formDefinitions = new PMUI.form.Form({ + id: 'formDefinitions', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [{ + id: 'formDefinitionsUID', + pmType: 'text', + name: 'UID', + valueType: 'string', + label: 'UID'.translate(), + controlsWidth: 300 + }, { + id: 'formDefinitionsTitle', + pmType: 'text', + name: 'tas_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300 + }, { + id: 'formDefinitionsDescription', + pmType: 'textarea', + name: 'tas_description', + valueType: 'string', + label: 'Description'.translate(), + placeholder: 'Insert a description'.translate(), + rows: 100, + controlsWidth: 300, + style: {cssClasses: ['mafe-textarea-resize']} + }, new CriteriaField({ + id: 'formDefinitionsVariable', + pmType: 'text', + name: 'tas_priority_variable', + valueType: 'string', + label: 'Variable for Case priority'.translate(), + controlsWidth: 300 + }), { + id: 'formDefinitionsRouting', + pmType: 'dropdown', + name: 'tas_derivation_screen_tpl', + valueType: 'string', + label: 'Routing Screen Template'.translate(), + controlsWidth: 150, + style: { + cssProperties: { + float: "left" + } + } + } + ] + }) + }, + { + id: 'windowPropertiesTabPanelCaseLabels', + icon: '', + title: 'Case Labels'.translate(), + panel: formCaseLabels = new PMUI.form.Form({ + id: 'formCaseLabels', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [new CriteriaField({ + id: 'formCaseLabelsTitle', + pmType: 'text', + name: 'tas_def_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + controlsWidth: DEFAULT_WINDOW_WIDTH - 527 + }), new CriteriaField({ + id: 'formCaseLabelsDescription', + pmType: 'textarea', + name: 'tas_def_description', + valueType: 'string', + label: 'Description'.translate(), + placeholder: 'Insert a description'.translate(), + rows: 100, + controlsWidth: DEFAULT_WINDOW_WIDTH - 527, + renderType: 'textarea' + }) + ] + }) + }, + { + id: 'windowPropertiesTabPanelTimingControl', + icon: '', + title: 'Timing Control'.translate(), + panel: formTimingControl = new PMUI.form.Form({ + id: 'formTimingControl', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [{ + id: 'formTimingControlFly', + pmType: 'checkbox', + name: 'tas_transfer_fly', + labelVisible: false, + options: [ + { + id: 'formTimingControlOption', + label: 'Allow users to change the task duration in runtime'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeTimingControl(this.controls[0].selected); + } + }, { + id: 'formTimingMainPanel', + pmType: 'panel', + items: [ + { + id: 'formTimingControlTask', + pmType: 'text', + name: 'tas_duration', + valueType: 'string', + label: 'Task duration'.translate(), + required: true, + maxLength: 3, + controlsWidth: 200, + validators: [ + { + pmType: "regexp", + criteria: /^\d*$/, + errorMessage: "Please enter a positive integer value".translate() + } + ] + }, + { + id: 'formTimingControlAverage', + pmType: 'text', + name: 'tas_average', + valueType: 'string', + label: 'Average'.translate(), + maxLength: 3, + readOnly: true, + controlsWidth: 200 + }, + { + id: 'formTimingControlSdv', + pmType: 'text', + name: 'tas_sdv', + valueType: 'string', + label: 'SDV'.translate(), + maxLength: 3, + readOnly: true, + controlsWidth: 200 + }, + { + id: 'formTimingControlTime', + pmType: 'dropdown', + name: 'tas_timeunit', + label: 'Time unit'.translate(), + controlsWidth: 100, + options: [{ + id: 'formTimingControlTime1', + label: 'Hours'.translate(), + value: 'HOURS' + }, { + id: 'formTimingControlTime2', + label: 'Days'.translate(), + value: 'DAYS' + }, { + id: 'formTimingControlTime3', + label: 'Minutes'.translate(), + value: 'MINUTES' + } + ] + }, { + id: 'formTimingControlCount', + pmType: 'dropdown', + name: 'tas_type_day', + label: 'Count days by'.translate(), + controlsWidth: 150, + options: [{ + id: 'formTimingControlCount1', + label: 'Work Days'.translate(), + value: 1 + }, { + id: 'formTimingControlCount2', + label: 'Calendar Days'.translate(), + value: 2 + } + ] + }, { + id: 'formTimingControlCalendar', + pmType: 'dropdown', + name: 'tas_calendar', + label: 'Calendar'.translate(), + options: [], + controlsWidth: 150 + } + ] + } + ] + }) + }, + { + id: 'windowPropertiesTabPanelNotifications', + icon: '', + title: 'Notifications'.translate(), + panel: formNotifications = new PMUI.form.Form({ + id: 'formNotifications', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [ + { + id: 'formNotificationsTasSend', + pmType: 'checkbox', + name: 'tas_send_last_email', + labelVisible: false, + options: [{ + id: 'formNotificationsTasSend1', + label: 'After routing notify the next assigned user(s)'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeFormNotifications(this.controls[0].selected, 'text'); + } + }, { + id: 'formNotificationsMainPanel', + pmType: 'panel', + items: [ + { + id: 'tas_email_server_uid', + name: 'tas_email_server_uid', + pmType: 'dropdown', + label: 'Email account'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + label: 'Default email account'.translate(), + value: '' + } + ] + }, + { + id: 'tas_not_email_from_format', + name: 'tas_not_email_from_format', + pmType: 'dropdown', + label: 'Email From Format'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + id: 'assignedUser', + label: 'Assigned User'.translate(), + value: 0 + }, { + id: 'emailAccountSettings', + label: 'Email Account Settings'.translate(), + value: 1 + } + ] + }, + new CriteriaField({ + id: 'formNotificationsSubject', + pmType: 'text', + name: 'tas_def_subject_message', + valueType: 'string', + label: 'Subject'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + labelWidth: "27%" + }), { + id: 'formNotificationsContent', + pmType: 'dropdown', + name: 'tas_def_message_type', + label: 'Content Type'.translate(), + controlsWidth: 150, + labelWidth: "27%", + options: [{ + id: 'formNotificationsContent1', + value: 'text', + label: 'Plain Text'.translate() + }, { + id: 'formNotificationsContent2', + value: 'template', + label: 'Html Template'.translate() + } + ], + onChange: function (value) { + visibleContentType(value); + } + }, new CriteriaField({ + id: 'formNotificationsMessage', + pmType: 'textarea', + name: 'tas_def_message', + valueType: 'string', + label: 'Message'.translate(), + placeholder: 'Insert a message'.translate(), + rows: 100, + width: 10, + required: true, + controlsWidth: 300, + renderType: 'textarea', + labelWidth: "27%" + }), { + id: 'formNotificationsTemplate', + pmType: 'dropdown', + name: 'tas_def_message_template', + label: 'Template'.translate(), + options: [{ + value: '', + label: '' + }], + labelWidth: "27%" + } + ] + }, + { + id: 'formNotificationsTasReceive', + pmType: 'checkbox', + name: 'tas_receive_last_email', + labelVisible: false, + options: [{ + id: 'formNotificationsTasReceive', + label: 'Notify the assigned user to this task'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeFormNotificationsReceive(this.controls[0].selected, 'text'); + } + }, + { + id: 'formNotificationsReceivePanel', + pmType: 'panel', + items: [ + { + id: 'tas_receive_server_uid', + name: 'tas_receive_server_uid', + pmType: 'dropdown', + label: 'Email account'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + label: 'Default email account'.translate(), + value: '' + } + ] + }, + { + id: 'tas_receive_email_from_format', + name: 'tas_receive_email_from_format', + pmType: 'dropdown', + label: 'Email From Format'.translate(), + controlsWidth: 300, + labelWidth: "27%", + options: [ + { + id: 'assignedUser', + label: 'Assigned User'.translate(), + value: 0 + }, { + id: 'emailAccountSettings', + label: 'Email Account Settings'.translate(), + value: 1 + } + ] + }, + new CriteriaField({ + id: 'tas_receive_subject_message', + pmType: 'text', + name: 'tas_receive_subject_message', + valueType: 'string', + label: 'Subject'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + labelWidth: "27%" + }), + { + id: 'tas_receive_message_type', + pmType: 'dropdown', + name: 'tas_receive_message_type', + label: 'Content Type'.translate(), + controlsWidth: 150, + labelWidth: "27%", + options: [{ + id: 'formNotificationsReceive1', + value: 'text', + label: 'Plain Text'.translate() + }, { + id: 'formNotificationsReceive2', + value: 'template', + label: 'Html Template'.translate() + } + ], + onChange: function (value) { + visibleContentTypeReceive(value); + } + }, + new CriteriaField({ + id: 'tas_receive_message', + pmType: 'textarea', + name: 'tas_receive_message', + valueType: 'string', + label: 'Message'.translate(), + placeholder: 'Insert a message'.translate(), + rows: 100, + width: 10, + required: true, + controlsWidth: 300, + renderType: 'textarea', + labelWidth: "27%" + }), + { + id: 'tas_receive_message_template', + pmType: 'dropdown', + name: 'tas_receive_message_template', + label: 'Template'.translate(), + options: [{ + value: '', + label: '' + }], + labelWidth: "27%" + } + + ] + } + ] + }) + } + ]; + if (consolidated == '1') { + configurationForms.push({ + id: 'windowPropertiesTabPanelConsolidated', + icon: '', + title: 'Consolidated Case '.translate(), + panel: formConsolidated = new PMUI.form.Form({ + id: 'formConsolidated', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 250, + items: [ + { + id: 'formConsolidatedEnable', + pmType: 'checkbox', + name: 'consolidated_enable', + labelVisible: false, + options: [{ + label: 'Enable consolidate for this task.'.translate(), + value: '1' + } + ], + onChange: function (val) { + changeConsolidated(this.controls[0].selected); + } + }, { + id: 'formConsolidatedMainPanel', + pmType: 'panel', + items: [ + { + id: 'formConsolidatedReportTable', + pmType: 'text', + name: 'consolidated_report_table', + visible: false, + valueType: 'string', + controlsWidth: 300 + }, { + id: 'formConsolidatedDynaform', + pmType: 'dropdown', + name: 'consolidated_dynaform', + label: 'Dynaform Template'.translate(), + options: [], + required: true, + controlsWidth: 300 + }, { + id: 'formConsolidatedTable', + pmType: 'text', + name: 'consolidated_table', + valueType: 'string', + label: 'Table Name'.translate(), + placeholder: 'Insert a table name'.translate(), + required: true, + controlsWidth: 300, + style: { + cssProperties: { + float: "left" + } + }, + validators: [{ + pmType: "regexp", + criteria: /^[a-zA-Z0-9_]+$/, + errorMessage: "The table name can not contain spaces".translate() + }] + }, { + id: 'formConsolidatedTitle', + pmType: 'text', + name: 'consolidated_title', + valueType: 'string', + label: 'Title'.translate(), + placeholder: 'Insert a title'.translate(), + required: true, + controlsWidth: 300, + style: { + cssProperties: { + float: "left" + } + } + } + ] + } + ] + }) + }); + } + + + warningChanges = new PMUI.ui.MessageWindow({ + id: 'warningChanges', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Activity Properties'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'warningChangesButtonNo', + text: "No".translate(), + handler: function () { + warningChanges.close(); + }, + buttonType: "error" + }, + { + id: 'warningChangesButtonYes', + text: "Yes".translate(), + handler: function () { + windowProperties.close(); + warningChanges.close(); + }, + buttonType: "success" + } + ] + }); + windowProperties = new PMUI.ui.Window({ + id: 'windowProperties', + title: 'Activity Properties'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + onOpen: function () { + loadServerData(); + }, + items: [ + propertiesTabs = new PMUI.panel.TabPanel({ + id: 'windowPropertiesTabPanel', + height: 435, + width: DEFAULT_WINDOW_WIDTH - 50, + style: { + cssProperties: { + 'margin-left': '10px' + } + }, + items: configurationForms.concat(featuresForms), + itemsPosition: { + position: 'left' + }, + onTabClick: function (tab) { + setFocusTab(tab); + } + }), + customGrid + ], + onBeforeClose: function () { + if (isDirty()) { + warningChanges.open(); + warningChanges.showFooter(); + } else { + windowProperties.close(); + } + }, + buttonPanelPosition: 'bottom', + buttonsPosition: 'right', + buttons: [ + { + id: 'windowPropertiesButtonCancel', + text: 'Cancel'.translate(), + handler: function () { + if (isDirty()) { + warningChanges.open(); + warningChanges.showFooter(); + } else { + windowProperties.close(); + } + }, + buttonType: "error" + }, + { + id: 'windowPropertiesButtonSave', + text: 'Save'.translate(), + handler: function () { + saveData(); + }, + buttonType: 'success' + } + ] + }); + + function changeConsolidated(value) { + var panel = formConsolidated.getItem('formConsolidatedMainPanel'); + formConsolidated.getField('consolidated_enable').setValue(value ? '["1"]' : '[]'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + formConsolidated.getField('consolidated_report_table').setVisible(false); + } + + function changeTimingControl(value) { + var mainPanel = formTimingControl.getItem('formTimingMainPanel'); + formTimingControl.getField('tas_transfer_fly').setValue(value ? '["1"]' : '[]'); + if (mainPanel) { + if (value) { + mainPanel.disable(); + + } else { + mainPanel.enable(); + } + mainPanel.setVisible(!value); + } + if (window.enterprise !== "1") { + formTimingControl.getField('tas_average').setVisible(false); + formTimingControl.getField('tas_sdv').setVisible(false); + } + } + + function changeFormNotifications(value, valueTwo) { + var panel = formNotifications.getItem('formNotificationsMainPanel'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + if (value) { + formNotifications.getField('tas_def_message_type').setValue(valueTwo); + visibleContentType(valueTwo); + } + formNotifications.getField('tas_send_last_email').setValue(value ? '["1"]' : '[]'); + formNotifications.getField('tas_def_subject_message').setFocus(); + } + + /** + * Notification receive change handler, according to user selection + * @param value + * @param valueTwo + */ + function changeFormNotificationsReceive(value, valueTwo) { + var panel = formNotifications.getItem('formNotificationsReceivePanel'); + + if (panel) { + panel.setVisible(value); + if (value) { + panel.enable(); + } else { + panel.disable(); + } + } + + if (value) { + formNotifications.getField('tas_receive_message_type').setValue(valueTwo); + visibleContentTypeReceive(valueTwo); + } + formNotifications.getField('tas_receive_last_email').setValue(value ? '["1"]' : '[]'); + formNotifications.getField('tas_receive_subject_message').setFocus(); + } + + /** + * Get value parsed + * @param valueCheckBox '["TRUE"]'/'["FALSE"]' + * @returns {string} "TRUE"/"FALSE" + */ + function getValueCheckBox(valueCheckBox) { + var optionSelected = JSON.parse(valueCheckBox), + valChecked; + valChecked = (Array.isArray(optionSelected) && optionSelected.length === 1) ? optionSelected[0] : stringFalse; + return valChecked; + } + + function loadFormData(response) { + dataProperties = response.properties; + formDefinitions.getField('UID').setReadOnly(true); + formDefinitions.getField('UID').setValue(activity.id); + formDefinitions.getField('tas_title').setValue(dataProperties.tas_title); + formDefinitions.getField('tas_title').setFocus(); + formDefinitions.getField('tas_description').setValue(dataProperties.tas_description); + formDefinitions.getField('tas_priority_variable').setValue(dataProperties.tas_priority_variable); + formDefinitions.getField('tas_derivation_screen_tpl').setValue(dataProperties.tas_derivation_screen_tpl); + + formCaseLabels.getField('tas_def_title').setValue(dataProperties.tas_def_title); + formCaseLabels.getField('tas_def_description').setValue(dataProperties.tas_def_description); + + if (dataProperties.tas_transfer_fly === 'FALSE') { + changeTimingControl(false); + } else { + changeTimingControl(true); + } + formTimingControl.getField('tas_duration').setValue(dataProperties.tas_duration); + formTimingControl.getField('tas_timeunit').setValue(dataProperties.tas_timeunit); + formTimingControl.getField('tas_type_day').setValue(dataProperties.tas_type_day); + formTimingControl.getField('tas_calendar').setValue(dataProperties.tas_calendar); + + if (window.enterprise === "1") { + formTimingControl.getField('tas_average').setValue(dataProperties.tas_average); + formTimingControl.getField('tas_sdv').setValue(dataProperties.tas_sdv); + } + + changeFormNotifications(dataProperties.tas_send_last_email === 'TRUE', dataProperties.tas_def_message_type); + changeFormNotificationsReceive(dataProperties.tas_receive_last_email === 'TRUE', dataProperties.tas_receive_message_type); + formNotifications.getField('tas_def_subject_message').setValue(dataProperties.tas_def_subject_message); + formNotifications.getField('tas_def_message_type').setValue(dataProperties.tas_def_message_type); + formNotifications.getField('tas_def_message').setValue(dataProperties.tas_def_message); + formNotifications.getField('tas_email_server_uid').setValue(dataProperties.tas_email_server_uid); + formNotifications.getField('tas_def_message_template').setValue(dataProperties.tas_def_message_template); + formNotifications.getField('tas_not_email_from_format').setValue(dataProperties.tas_not_email_from_format); + // receive + formNotifications.getField('tas_receive_subject_message').setValue(dataProperties.tas_receive_subject_message); + formNotifications.getField('tas_receive_message_type').setValue(dataProperties.tas_receive_message_type); + formNotifications.getField('tas_receive_message').setValue(dataProperties.tas_receive_message); + formNotifications.getField('tas_receive_server_uid').setValue(dataProperties.tas_receive_server_uid); + formNotifications.getField('tas_receive_message_template').setValue(dataProperties.tas_receive_message_template); + formNotifications.getField('tas_receive_email_from_format').setValue(dataProperties.tas_receive_email_from_format); + } + function loadCalendar(response) { + var field = formTimingControl.getField('tas_calendar'), i; + field.clearOptions(); + field.addOption({ + value: '', + label: '- None -'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].cal_uid, + label: response[i].cal_name + }); + } + } + + /** + * Loads the template from rest service response + * @param response + * @param fieldName + */ + function loadTemplate(response, fieldName) { + var field = formNotifications.getField(fieldName), i, field2; + field.clearOptions(); + field.addOption({ + value: 'alert_message.html', + label: '-- Default --'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].prf_filename, + label: response[i].prf_filename + }); + } + field2 = formDefinitions.getField('tas_derivation_screen_tpl'); + field2.clearOptions(); + field2.addOption({ + value: '', + label: '-- Default --'.translate() + }); + for (i = 0; i < response.length; i += 1) { + if (response[i].prf_filename !== 'alert_message.html') { + field2.addOption({ + value: response[i].prf_filename, + label: response[i].prf_filename + }); + } + } + }; + /** + * Load Email account server dropdown options + * @param response + */ + function loadEmailAccount(response, fieldName) { + var field = formNotifications.getField(fieldName) || null, + i; + if (response instanceof Array && field) { + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + }; + + function loadABETemplateField(templates) { + var templateField = abeForm.getField('ABE_TEMPLATE'), i; + for (i in templates) { + if (templateField !== null) { + templateField.addOption({ + value: templates[i].FIELD, + label: templates[i].NAME + }); + } + abeTemplates.options.push({ + value: templates[i].FIELD, + label: templates[i].NAME + }); + } + }; + /** + * Loads the email accounts settings + * @param response + */ + function loadABEmailAccount(response) { + var accountField = abeForm.getField('ABE_EMAIL_SERVER_UID') || null, + i; + + if (response instanceof Array) { + for (i = 0; i < response.length; i += 1) { + if (accountField !== null) { + accountField.addOption({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + abeEmailAcount.options.push({ + value: response[i].mess_uid, + label: response[i].mess_engine === "MAIL" ? + response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name : defaultServerlabel : response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + + }; + + /** + * Loads the IMAP email accounts settings + * @param response + */ + function loadABImapEmailAccount(response) { + var accountField = abeForm.getField('ABE_RECEIVER_EMAIL_SERVER_UID') || null, + i; + + if (response instanceof Array) { + for (i = 0; i < response.length; i += 1) { + if (response[i].mess_engine === "IMAP") { + if (accountField !== null) { + accountField.addOption({ + value: response[i].mess_uid, + label: response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + abeReceiverAccount.options.push({ + value: response[i].mess_uid, + label: response[i].mess_from_name && response[i].mess_from_name !== "" ? + response[i].mess_from_name + ' <' + response[i].mess_account + '>' : ' <' + response[i].mess_account + '>' + }); + } + } + } + + }; + + function loadABEDynaformField(dynaforms) { + var dynaformField = abeForm.getField('DYN_UID'), i; + for (i in dynaforms) { + if (dynaformField !== null) { + dynaformField.addOption({ + value: dynaforms[i].DYN_UID, + label: dynaforms[i].DYN_NAME + }); + } + abeDynaforms.options.push({ + value: dynaforms[i].DYN_UID, + label: dynaforms[i].DYN_NAME + }); + } + } + + function loadServerData() { + var restClient, i; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: { + "formconfig": { + "url": 'project/' + PMDesigner.project.id + '/activity/' + activity.id, + "method": 'GET' + }, + "calendar": { + "url": 'calendar', + "method": 'GET' + }, + "templates": { + "url": 'project/' + PMDesigner.project.id + '/file-manager?path=templates', + "method": 'GET' + }, + "emailserver": { + "url": 'project/' + PMDesigner.project.id + '/email-event/accounts/emailServer', + "method": 'GET' + } + } + }, + functionSuccess: function (xhr, response) { + loadTemplate(response["templates"].response, 'tas_def_message_template'); + loadTemplate(response["templates"].response, 'tas_receive_message_template'); + loadCalendar(response["calendar"].response); + loadFormData(response["formconfig"].response); + loadEmailAccount(response["emailserver"].response, 'tas_email_server_uid'); + loadEmailAccount(response["emailserver"].response, 'tas_receive_server_uid'); + + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + if (consolidated == '1') { + $.extend(restClient.data.calls, { + "steps": { + 'url': 'project/' + PMDesigner.project.id + '/activity/' + activity.id + '/steps', + 'method': 'GET' + }, + "consolidate": { + "url": 'consolidated/' + activity.id, + "method": 'GET' + } + }); + } + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + } + + function visibleContentType(value) { + formNotifications.getField('tas_def_message_template').disable(); + formNotifications.getField('tas_def_message').disable(); + if (value === 'text') { + formNotifications.getField('tas_def_message').enable(); + formNotifications.getField('tas_def_message').setVisible(true); + formNotifications.getField('tas_def_message_template').setVisible(false); + } + if (value === 'template') { + formNotifications.getField('tas_def_message_template').enable(); + formNotifications.getField('tas_def_message').setVisible(false); + formNotifications.getField('tas_def_message_template').setVisible(true); + } + }; + /** + * content type handler, enable or disable templates or message field + * @param value + */ + function visibleContentTypeReceive(value) { + formNotifications.getField('tas_receive_message_template').disable(); + formNotifications.getField('tas_receive_message').disable(); + if (value === 'text') { + formNotifications.getField('tas_receive_message').enable(); + formNotifications.getField('tas_receive_message').setVisible(true); + formNotifications.getField('tas_receive_message_template').setVisible(false); + } + if (value === 'template') { + formNotifications.getField('tas_receive_message_template').enable(); + formNotifications.getField('tas_receive_message').setVisible(false); + formNotifications.getField('tas_receive_message_template').setVisible(true); + } + }; + function saveData() { + var tabPanel = windowProperties.getItem('windowPropertiesTabPanel'), + tabItems = tabPanel.getItems(), + valid = true, + panel, + tas_transfer_fly, + tas_send_last_email, + tas_receive_last_email, + dataCaseLabels, + dataDefinitions, + dataTimingControl, + dataNotification, + consolidated_enable, + message, + i; + + for (i = 0; i < tabItems.length; i += 1) { + panel = tabItems[i].getPanel(); + if (panel instanceof PMUI.form.Form) { + valid = valid && panel.isValid(); + } else { + if (panel.getID() === "ActionsByEmailPanel") { + if (!abeForm.isValid()) { + valid = false; + } + } + } + if (!valid) { + tabItems[i].select(); + return; + } + } + + tas_transfer_fly = formTimingControl.getField('tas_transfer_fly').getValue() === '["1"]'; + tas_send_last_email = formNotifications.getField('tas_send_last_email').getValue() === '["1"]'; + tas_receive_last_email = formNotifications.getField('tas_receive_last_email').getValue() === '["1"]'; + + if (tas_transfer_fly !== false) { + var a = formTimingControl.getField('tas_transfer_fly').getValue(); + formTimingControl.reset(); + formTimingControl.getField('tas_transfer_fly').setValue(a); + formTimingControl.getField('tas_duration').setValue('1'); + formTimingControl.getField('tas_timeunit').setValue('DAYS'); + formTimingControl.getField('tas_type_day').setValue(''); + formTimingControl.getField('tas_calendar').setValue(''); + } + + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + dataDefinitions = getData2PMUI(formDefinitions.html); + dataCaseLabels = getData2PMUI(formCaseLabels.html); + dataTimingControl = getData2PMUI(formTimingControl.html); + dataNotification = getData2PMUI(formNotifications.html); + if (!dataCaseLabels) { + dataCaseLabels = {}; + } + if (!dataTimingControl) { + dataTimingControl = {}; + } + if (!dataNotification) { + dataNotification = {}; + } + } else { + dataDefinitions = formDefinitions.getData(); + dataCaseLabels = formCaseLabels.getData(); + dataTimingControl = formTimingControl.getData(); + dataNotification = formNotifications.getData(); + } + + if (dataDefinitions['tas_title']) { + dataProperties.tas_title = dataDefinitions['tas_title']; + } + if (dataDefinitions['tas_description']) { + dataProperties.tas_description = dataDefinitions['tas_description']; + } + if (dataDefinitions['tas_priority_variable'] || typeof dataDefinitions['tas_priority_variable'] == "string") { + dataProperties.tas_priority_variable = dataDefinitions['tas_priority_variable']; + } + if (dataDefinitions['tas_derivation_screen_tpl'] || dataDefinitions['tas_derivation_screen_tpl'] == "") { + dataProperties.tas_derivation_screen_tpl = dataDefinitions['tas_derivation_screen_tpl']; + } + dataProperties.tas_def_title = dataCaseLabels['tas_def_title']; + dataProperties.tas_def_description = dataCaseLabels['tas_def_description']; + dataProperties.tas_transfer_fly = tas_transfer_fly ? 'TRUE' : 'FALSE'; + if (dataTimingControl['tas_duration']) { + dataProperties.tas_duration = dataTimingControl['tas_duration']; + } + if (dataTimingControl['tas_timeunit']) { + dataProperties.tas_timeunit = dataTimingControl['tas_timeunit']; + } + if (dataTimingControl['tas_type_day']) { + dataProperties.tas_type_day = dataTimingControl['tas_type_day']; + } + if (dataTimingControl['tas_calendar']) { + dataProperties.tas_calendar = dataTimingControl['tas_calendar']; + } + dataProperties.tas_send_last_email = tas_send_last_email ? 'TRUE' : 'FALSE'; + if (dataNotification['tas_not_email_from_format']) { + dataProperties.tas_not_email_from_format = dataNotification['tas_not_email_from_format']; + } + if (dataNotification['tas_def_subject_message']) { + dataProperties.tas_def_subject_message = dataNotification['tas_def_subject_message']; + } + if (dataNotification['tas_def_message_type']) { + dataProperties.tas_def_message_type = dataNotification['tas_def_message_type']; + } + if (dataNotification['tas_def_message']) { + dataProperties.tas_def_message = dataNotification['tas_def_message']; + } + if (dataNotification['tas_def_message_template']) { + dataProperties.tas_def_message_template = dataNotification['tas_def_message_template']; + } + if (dataNotification['tas_email_server_uid'] !== 'undefined' && dataNotification['tas_email_server_uid'] !== null) { + dataProperties.tas_email_server_uid = dataNotification['tas_email_server_uid']; + } + + dataProperties.tas_receive_last_email = tas_receive_last_email ? 'TRUE' : 'FALSE'; + if (dataNotification['tas_receive_email_from_format']) { + dataProperties.tas_receive_email_from_format = dataNotification['tas_receive_email_from_format']; + } + if (dataNotification['tas_receive_server_uid'] !== 'undefined' && dataNotification['tas_receive_server_uid'] !== null) { + dataProperties.tas_receive_server_uid = dataNotification['tas_receive_server_uid']; + } + if (dataNotification['tas_receive_subject_message']) { + dataProperties.tas_receive_subject_message = dataNotification['tas_receive_subject_message']; + } + if (dataNotification['tas_receive_message_type']) { + dataProperties.tas_receive_message_type = dataNotification['tas_receive_message_type']; + } + if (dataNotification['tas_receive_message']) { + dataProperties.tas_receive_message = dataNotification['tas_receive_message']; + } + if (dataNotification['tas_receive_message_template']) { + dataProperties.tas_receive_message_template = dataNotification['tas_receive_message_template']; + } + + if (consolidated == '1') { + consolidated_enable = false; + if (formConsolidated.getField('consolidated_enable').getValue() == '["1"]') { + consolidated_enable = true; + if (!formConsolidated.isValid()) { + return; + } + } + dataProperties.consolidate_data = { + "consolidated_enable": consolidated_enable, + "consolidated_dynaform": formConsolidated.getField('consolidated_dynaform').getValue(), + "consolidated_table": formConsolidated.getField('consolidated_table').getValue(), + "consolidated_title": formConsolidated.getField('consolidated_title').getValue(), + "consolidated_report_table": formConsolidated.getField('consolidated_report_table').getValue() + }; + } + + (new PMRestClient({ + endpoint: 'activity/' + activity.id, + typeRequest: 'update', + messageError: '', + data: { + definition: {}, + properties: dataProperties + }, + functionSuccess: function (xhr, response) { + setNameActivity(dataProperties.tas_title); + windowProperties.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageSuccess: 'Task properties saved successfully'.translate(), + flashContainer: document.body + })).executeRestClient(); + } + + function setFocusTab(tab) { + var style; + $customGrid = $("#customGrid"); + $customGrid.hide().appendTo($("#windowProperties").find(".pmui-window-body:eq(0)")); + + if (tab.getTitle() === 'Definitions'.translate()) { + formDefinitions.getField('tas_title').setFocus(); + } + if (tab.getTitle() === 'Case Labels'.translate()) { + formCaseLabels.getField('tas_def_title').setFocus(); + style = $('#formCaseLabelsDescription .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#formCaseLabelsDescription .pmui-field-label').attr("style", style); + } + if (tab.getTitle() === 'Timing Control'.translate()) { + formTimingControl.getField('tas_duration').setFocus(); + } + if (tab.getTitle() === 'Notifications'.translate()) { + formNotifications.getField('tas_def_subject_message').setFocus(); + style = $('#formNotificationsMessage .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#formNotificationsMessage .pmui-field-label').attr("style", style); + + style = $('#tas_receive_message .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#tas_receive_message .pmui-field-label').attr("style", style); + } + if (tab.getTitle() === 'Actions by Email'.translate()) { + abeForm.getField("ABE_TYPE").onChange(abeForm.getField("ABE_TYPE").getValue()); + } + } + + function isDirty() { + return formDefinitions.isDirty() || + formCaseLabels.isDirty() || + formTimingControl.isDirty() || + formNotifications.isDirty(); + } + + function setNameActivity(name) { + activity.setName(name); + activity.setActName(name); + PMDesigner.project.dirty = true; + } + + windowProperties.open(); + windowProperties.showFooter(); + + applyStyleWindowForm(windowProperties); + if (consolidated == '1') { + formConsolidated.getField('consolidated_report_table').setVisible(false); + } + function customDOM() { + $customGrid = $("#customGrid"); + $customGrid.show().appendTo($("#customGridPanel").find("fieldset:eq(0)")); + document.getElementById("customGridPanel").style.width = "720px"; + document.getElementById("customGridPanel").style.padding = ""; + document.getElementById("customGridPanel").getElementsByTagName("fieldset")[0].style.width = "100%"; + $(".pmui-gridpanel-footer").css({"text-align": "center", "margin-top": "10px", "width": "120%"}); + $(".pmui-gridpanel-footer").removeClass("pmui-gridpanel-footer"); + } + + function clearAddOptionForm() { + abeAddOption.getField("abe_custom_value_add").setValue(""); + abeAddOption.getField("abe_custom_label_add").setValue(""); + abeAddOption.getField("abe_custom_format_add").setValue(""); + abeAddOption.getField("buttonFieldCancel").setVisible(false); + abeAddOption.getField("buttonFieldAdd").setValue("Add".translate()); + editRow = null; + }; + function addAcceptedValue() { + var abeValue = abeAddOption.getField("abe_custom_value_add").getValue(), + abeLabel = abeAddOption.getField("abe_custom_label_add").getValue(), + abeFormat = abeAddOption.getField("abe_custom_format_add").getValue(); + + if (abeAddOption && !abeAddOption.isValid()) { + return; + } + + if (!evaluateTags(abeFormat, 'validate')) { + return; + } + + if (editRow === null) { + customGrid.addItem(new PMUI.grid.GridPanelRow({ + data: { + abe_custom_value: abeValue, + abe_custom_label: abeLabel, + abe_custom_format: abeFormat + } + })); + } else { + editRow.setData({ + abe_custom_value: abeValue, + abe_custom_label: abeLabel, + abe_custom_format: abeFormat + }); + editRow = null; + abeAddOption.getField("buttonFieldCancel").setVisible(false); + abeAddOption.getField("buttonFieldAdd").setValue("Add".translate()); + } + abeAddOption.getField("abe_custom_value_add").setValue(""); + abeAddOption.getField("abe_custom_label_add").setValue(""); + abeAddOption.getField("abe_custom_format_add").setValue(""); + } + + function customGridRowEdit(row) { + editRow = row; + row = row.getData(); + if (abeAddOption) { + abeAddOption.getField("abe_custom_value_add").setValue(row.abe_custom_value); + abeAddOption.getField("abe_custom_label_add").setValue(row.abe_custom_label); + abeAddOption.getField("abe_custom_format_add").setValue(row.abe_custom_format); + abeAddOption.getField("buttonFieldCancel").setVisible(true); + abeAddOption.getField("buttonFieldAdd").setValue("Save".translate()); + } + } + + function evaluateTags(html, action) { + var oldHtml; + var tagBody = '(?:[^"\'>]|"[^"]*"|\'[^\']*\')*'; + var pattern = /^[a-zA-Z0-9\s\[\]\.\-_#%;,=:()']*$/; + var tagOrComment = new RegExp( + '<(?:' + // Comment body. + + '!--(?:(?:-*[^->])*--+|-?)' + // Special "raw text" elements whose content should be elided. + + '|script\\b' + tagBody + '>[\\s\\S]*?[\\s\\S]*?', + 'gi'); + + var action = (typeof action === 'undefined') ? 'delete' : 'validate'; + if (action == "validate") { + return pattern.test(html); + } else { + do { + oldHtml = html; + html = html.replace(tagOrComment, ''); + } while (html !== oldHtml); + return html.replace(/ -1) { + arrayObjectAdhocUser.splice(index, 1); + } + }, + onDrop: function (a, row) { + grid = this; + removeAD(row); + gridUserListAD.goToPage(gridUserListAD.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + assigmentPanelUserListAD = new PMUI.core.Panel({ + id: "assigmentPanelUserListAD", + layout: "vbox", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + }, + width: "60%" + }); + panelTitleUseListAD = new PMUI.core.Panel({ + id: "panelTitleUseListAD", + layout: "hbox" + }); + titleUserListAD = new PMUI.ui.TextLabel({ + id: "titleUserListAD", + textMode: 'plain', + text: 'Assigned users list'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelGridUserListAD = new PMUI.core.Panel({ + id: "panelGridUserListAD", + layout: "hbox", + style: { + cssClasses: ["mafe-panel"] + } + }); + buttonsUserListAD = new PMUI.field.RadioButtonGroupField({ + id: "buttonsUserListAD", + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [{ + id: 'buttonAllAs', + label: 'View all'.translate(), + value: 'all', + selected: true + }, { + id: 'buttonUsersAs', + label: 'View users'.translate(), + value: 'user' + }, { + id: 'buttonGroupsAs', + label: 'View groups'.translate(), + value: 'group' + }], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUserListAD.typeList = "user"; + break; + case "group": + gridUserListAD.typeList = "group"; + break; + default: + gridUserListAD.typeList = ""; + break; + } + gridUserListAD.goToPage(0); + } + }); + gridUserListAD = new PMUI.grid.GridPanel({ + id: "gridUserListAD", + pageSize: pageSizeAssignmentAD - 1, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 242, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = "mafe-grid-panel-empty"; + div.style.height = gridUserListAD.dom.tableContainer.style.height; + div.style.width = gridUserListAD.dom.tableContainer.style.width; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserListAD.dom.tableContainer.style.overflow = "hidden"; + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/activity/' + activity.id + '/adhoc-assignee/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].ada_type == "group") { + data[i]["assignee"] = data[i].ada_name; + } else { + data[i]["assignee"] = data[i].ada_name + " " + data[i].ada_lastname + " (" + data[i].ada_username + ")"; + } + } + return data; + }, + columns: [ + { + id: 'gridUserListADButtonLabel', + title: "", + width: "13%", + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem"; + if (row.getData()["ada_type"] === "group") { + var i, + restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint("group/" + row.getData()["ada_uid"] + "/users?start=0&limit=11"); + restClient.executeRestClient(); + } + } + }, + { + title: '', + dataType: 'string', + columnData: "assignee", + alignmentCell: "left", + width: "330px" + }, + { + id: 'gridUserListADButtonDelete', + title: '', + dataType: 'button', + width: "10%", + buttonStyle: { + cssClasses: [ + 'mafe-button-delete-assign' + ] + }, + buttonLabel: function (row, data) { + var sw = row.getData()["ada_type"] === 'user'; + row.getCells()[0].content.style.addClasses([sw ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + var dataRow = {}; + grid = (grid != null) ? grid : gridUserListAD; + removeAD(row); + grid.goToPage(grid.currentPage); + gridUsersAD.goToPage(gridUsersAD.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (a, row) { + grid = this; + assigneeAD(row); + gridUsersAD.goToPage(gridUsersAD.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(windowAssignmentRules.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelContainerRules = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH - 55, + height: "auto", + fieldset: true, + items: [ + formAssignmentRules + ] + }); + panelContainerUsers = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + height: "auto", + fieldset: true, + items: [ + assigmentPanelGlobal + ] + }); + panelContainerUsersAdHoc = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH, + height: "auto", + fieldset: true, + items: [ + assigmentPanelGlobalAD + ] + }); + + tabPanelAssignmentRules = new PMUI.panel.TabPanel({ + id: 'tabPanelAssignmentRules', + width: "100%", + height: "auto", + items: [ + { + id: 'tabUsers', + title: 'Users'.translate(), + panel: panelContainerUsers + }, + { + id: 'tabUsersAdHoc', + title: 'Ad Hoc Users'.translate(), + panel: panelContainerUsersAdHoc + } + ], + onTabClick: function (item) { + quickMessageWindow.close(); + switch (item.id) { + case 'tabRules': + break; + case 'tabUsers': + applyStyles(); + gridUsers.goToPage(0); + gridUserList.goToPage(0); + break; + case 'tabUsersAdHoc': + applyStylesAD(); + gridUsersAD.goToPage(0); + gridUserListAD.goToPage(0); + break; + } + } + }); + windowAssignmentRules = new PMUI.ui.Window({ + id: 'windowAssignmentRules', + title: 'Assignment Rules'.translate() + ': ' + activity.act_name, + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerItems: [ + { + id: 'windowConnectionsButtonCancel', + text: 'Close'.translate(), + handler: function () { + if (formAssignmentRules.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowAssignmentRules.close(); + } + }, + buttonType: 'error' + }, + { + buttonType: 'success', + id: 'windowPropertiesButtonSave', + text: "Save".translate(), + handler: function () { + saveData(); + } + } + ], + visibleFooter: true, + buttonPanelPosition: 'bottom', + footerAlign: "right", + onBeforeClose: function () { + if (formAssignmentRules.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowAssignmentRules.close(); + } + } + }); + + loadTrigger = function (response) { + var field = formAssignmentRules.getField('tas_selfservice_trigger_uid'), i; + field.clearOptions(); + field.addOption({ + value: '', + label: '- Select Trigger -'.translate() + }); + for (i = 0; i < response.length; i += 1) { + field.addOption({ + value: response[i].tri_uid, + label: response[i].tri_title + }); + } + }; + loadFormData = function (response) { + dataProperties = response.properties; + formAssignmentRules.getField('tas_assign_type').setValue(dataProperties.tas_assign_type); + formAssignmentRules.getField('tas_assign_variable').setValue(dataProperties.tas_assign_variable); + formAssignmentRules.getField('tas_group_variable').setValue(dataProperties.tas_group_variable); + changeRadioButtons(formAssignmentRules.getField('tas_assign_type').getValue()); + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].deselect(); + if (dataProperties.tas_selfservice_timeout === 1) { + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].select(); + } + formAssignmentRules.getField('tas_selfservice_time').setValue(dataProperties.tas_selfservice_time); + formAssignmentRules.getField('tas_selfservice_time_unit').setValue(dataProperties.tas_selfservice_time_unit); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setValue(dataProperties.tas_selfservice_trigger_uid); + formAssignmentRules.getField('tas_selfservice_execution').setValue(dataProperties.tas_selfservice_execution); + visibleService(dataProperties.tas_selfservice_timeout === 1); + }; + loadServerData = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/activity/' + activity.id, + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadTrigger(response[1].response); + loadFormData(response[0].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadFreeUsers = function (response) { + var i; + gridUsers.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUsers.addDataItem({ + fullName: response[i].aas_name + " " + response[i].aas_lastname, + ass_uid: response[i].aas_uid, + ass_type: response[i].aas_type + }); + } + }; + loadAssignmentUsers = function (response) { + var i; + gridUserList.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUserList.addDataItem({ + fullName: response[i].aas_name + " " + response[i].aas_lastname, + ass_uid: response[i].aas_uid, + ass_type: response[i].aas_type + }); + } + }; + loadAdHocFreeUsers = function (response) { + var i; + gridUsersAD.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUsersAD.addDataItem({ + fullName: response[i].ada_name + " " + response[i].ada_lastname, + ada_uid: response[i].ada_uid, + ass_type: response[i].ada_type + }); + } + }; + loadAdHocAssignmentUsers = function (response) { + var i; + gridUserListAD.clearItems(); + for (i = 0; i < response.length; i += 1) { + gridUserListAD.addDataItem({ + fullName: response[i].ada_name + " " + response[i].ada_lastname, + ada_uid: response[i].ada_uid, + ass_type: response[i].ada_type + }); + } + }; + updateRules = function () { + (new PMRestClient({ + endpoint: 'activity/' + activity.id, + typeRequest: 'update', + messageError: ' ', + data: { + definition: {}, + properties: dataProperties + }, + messageSuccess: 'Assignment Rules saved successfully'.translate(), + flashContainer: document.body, + functionSuccess: function () { + formAssignmentRules.dirty = false; + windowAssignmentRules.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + }; + allHidden = function () { + formAssignmentRules.getField('tas_assign_variable').setVisible(false); + formAssignmentRules.getField('tas_group_variable').setVisible(false); + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(false); + formAssignmentRules.getField('tas_selfservice_timeout').controls[0].deselect(); + formAssignmentRules.getField('tas_selfservice_time').setVisible(false); + formAssignmentRules.getField('tas_selfservice_time_unit').setVisible(false); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setVisible(false); + formAssignmentRules.getField('tas_selfservice_execution').setVisible(false); + }; + changeRadioButtons = function (newVal) { + allHidden(); + tabPanelAssignmentRules.setVisible(true); + switch (newVal) { + case 'EVALUATE': + formAssignmentRules.getField('tas_assign_variable').setVisible(true); + if (dataProperties.tas_assign_variable === "" || dataProperties.tas_assign_variable === null) { + formAssignmentRules.getField('tas_assign_variable').setValue('@@SYS_NEXT_USER_TO_BE_ASSIGNED'); + } else { + formAssignmentRules.getField('tas_assign_variable').setValue(dataProperties.tas_assign_variable); + } + break; + case 'SELF_SERVICE': + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(true); + break; + case 'SELF_SERVICE_EVALUATE': + formAssignmentRules.getField('tas_group_variable').setVisible(true); + if (dataProperties.tas_group_variable === "@@SYS_GROUP_TO_BE_ASSIGNED" || dataProperties.tas_group_variable === "" || dataProperties.tas_group_variable === null) { + formAssignmentRules.getField('tas_group_variable').setPlaceholder('@@ARRAY_OF_USERS or @@GROUP_UID'); + } else { + formAssignmentRules.getField('tas_group_variable').setValue(dataProperties.tas_group_variable); + } + formAssignmentRules.getField('tas_selfservice_timeout').setVisible(true); + break; + case 'REPORT_TO': + break; + case 'MULTIPLE_INSTANCE_VALUE_BASED': + formAssignmentRules.getField('tas_assign_variable').setLabel("Array of users".translate()); + if (formAssignmentRules.getField('tas_assign_variable').getValue() == "@@SYS_NEXT_USER_TO_BE_ASSIGNED" || formAssignmentRules.getField('tas_assign_variable').getValue() == "") { + formAssignmentRules.getField('tas_assign_variable').setValue(''); + formAssignmentRules.getField('tas_assign_variable').setPlaceholder('@@ARRAY_OF_USERS'); + } + formAssignmentRules.getField('tas_assign_variable').setVisible(true); + if (activity.act_loop_type == "PARALLEL") { + tabPanelAssignmentRules.setVisible(false); + } + break; + default: + break; + } + }; + visibleService = function (value) { + var a = formAssignmentRules.getField('tas_assign_type').getValue(); + if (a === 'SELF_SERVICE' || a === 'SELF_SERVICE_EVALUATE') { + formAssignmentRules.getField('tas_selfservice_time').setVisible(value); + formAssignmentRules.getField('tas_selfservice_time_unit').setVisible(value); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setVisible(value); + formAssignmentRules.getField('tas_selfservice_execution').setVisible(value); + } + }; + hiddenTab = function (value) { + tabPanelAssignmentRules.showTab(2); + }; + saveData = function () { + var a, b, c, d, tas_selfservice_timeout, data; + tas_selfservice_timeout = formAssignmentRules.getField('tas_selfservice_timeout').getValue() === '["1"]'; + if (!tas_selfservice_timeout) { + //validation because getData method do not work in IE + if (navigator.userAgent.indexOf("MSIE") !== -1 || navigator.userAgent.indexOf("Trident") !== -1) { + data = getData2PMUI(formAssignmentRules.html); + b = data["tas_assign_variable"]; + } else { + b = formAssignmentRules.getField('tas_assign_variable').getValue(); + } + a = formAssignmentRules.getField('tas_assign_type').getValue(); + c = formAssignmentRules.getField('tas_group_variable').getValue(); + d = formAssignmentRules.getField('tas_group_variable').getValue(); + formAssignmentRules.getField('tas_assign_type').setValue(a); + formAssignmentRules.getField('tas_assign_variable').setValue(b); + formAssignmentRules.getField('tas_group_variable').setValue(c); + formAssignmentRules.getField('tas_selfservice_timeout').setValue(d); + formAssignmentRules.getField('tas_selfservice_time').setValue(''); + formAssignmentRules.getField('tas_selfservice_time_unit').setValue(''); + formAssignmentRules.getField('tas_selfservice_trigger_uid').setValue(''); + formAssignmentRules.getField('tas_selfservice_execution').setValue(''); + } else { + if (!formAssignmentRules.isValid()) { + return; + } + } + dataProperties.tas_assign_type = formAssignmentRules.getField('tas_assign_type').getValue(); + dataProperties.tas_assign_variable = formAssignmentRules.getField('tas_assign_variable').getValue() === '' ? '@@SYS_NEXT_USER_TO_BE_ASSIGNED' : formAssignmentRules.getField('tas_assign_variable').getValue(); + dataProperties.tas_group_variable = formAssignmentRules.getField('tas_group_variable').getValue() === '' ? '@@SYS_GROUP_TO_BE_ASSIGNED' : formAssignmentRules.getField('tas_group_variable').getValue(); + dataProperties.tas_selfservice_timeout = tas_selfservice_timeout ? 1 : 0; + dataProperties.tas_selfservice_time = formAssignmentRules.getField('tas_selfservice_time').getValue() !== "" ? parseInt(formAssignmentRules.getField('tas_selfservice_time').getValue(), 10) : 0; + dataProperties.tas_selfservice_time_unit = formAssignmentRules.getField('tas_selfservice_time_unit').getValue(); + dataProperties.tas_selfservice_trigger_uid = formAssignmentRules.getField('tas_selfservice_trigger_uid').getValue(); + dataProperties.tas_selfservice_execution = formAssignmentRules.getField('tas_selfservice_execution').getValue(); + updateRules(); + }; + saveOrUpdateUserAndAdHocUsers = function () { + //Assigne and Remove (users) + var i, b; + if (gridUserList.getItems().length > 0) { + grid = gridUserList; + for (i = 0; i < arrayObjectUserList.length; i += 1) { + b = arrayObjectUserList[i]; + if (arrayObjectUserList2.indexOf(b) == -1) { + assignee(b); + } + } + } + if (gridUsers.getItems().length > 0) { + for (i = 0; i < arrayObjectUsers.length; i += 1) { + b = arrayObjectUsers[i]; + if (arrayObjectUsers2.indexOf(b) == -1) { + remove(arrayObjectUsers[i]); + } + } + } + //Assigne and Remove (AdHocUsers) + if (gridUserListAD.getItems().length > 0) { + grid = gridUserListAD; + for (i = 0; i < arrayObjectAdhocUserList.length; i += 1) { + b = arrayObjectAdhocUserList[i]; + if (arrayObjectAdhocUserList2.indexOf(b) == -1) { + assigneeAD(b); + } + } + } + if (gridUsersAD.getItems().length > 0) { + for (i = 0; i < arrayObjectAdhocUser.length; i += 1) { + b = arrayObjectAdhocUser[i]; + if (arrayObjectAdhocUser2.indexOf(b) == -1) { + removeAD(arrayObjectAdhocUser[i]); + } + } + } + }; + applyStyles = function () { + gridUsers.dom.toolbar.appendChild(buttonsUsers.getHTML()); + buttonsUsers.defineEvents(); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(buttonsUserList.getHTML()); + buttonsUserList.defineEvents(); + gridUserList.dom.toolbar.style.height = "76px"; + buttonsUsers.dom.labelTextContainer.style.display = "none"; + buttonsUserList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + }; + applyStylesAD = function () { + gridUsersAD.dom.toolbar.appendChild(buttonsUsersAD.getHTML()); + buttonsUsersAD.defineEvents(); + gridUsersAD.dom.toolbar.style.height = "76px"; + + gridUserListAD.dom.toolbar.appendChild(buttonsUserListAD.getHTML()); + buttonsUserListAD.defineEvents(); + gridUserListAD.dom.toolbar.style.height = "76px"; + buttonsUsersAD.dom.labelTextContainer.style.display = "none"; + buttonsUserListAD.dom.labelTextContainer.style.display = "none"; + gridUsersAD.hideHeaders(); + gridUserListAD.hideHeaders(); + assigmentPanelUserListAD.setHeight('100%'); + gridUsersAD.filterControl.html.style.width = "300px"; + gridUserListAD.filterControl.html.style.width = "300px"; + }; + assignee = function (row) { + restClient.setTypeRequest("post"); + restClient.setEndpoint("activity/" + activity.id + "/assignee"); + restClient.setData({aas_uid: row.getData()["aas_uid"], aas_type: row.getData()["aas_type"]}); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + remove = function (row) { + restClient.setTypeRequest("remove"); + restClient.setEndpoint("activity/" + activity.id + "/assignee/" + row.getData().aas_uid); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + assigneeAD = function (row) { + restClient.setTypeRequest("post"); + restClient.setEndpoint("activity/" + activity.id + "/adhoc-assignee"); + restClient.setData({ada_uid: row.getData()["ada_uid"], ada_type: row.getData()["ada_type"]}); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + removeAD = function (row) { + restClient.setTypeRequest("remove"); + restClient.setEndpoint("activity/" + activity.id + "/adhoc-assignee/" + row.getData()["ada_uid"]); + restClient.functionSuccess = function (xhr, response) { + }; + restClient.executeRestClient(); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().ass_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('fullName', 'asc'); + }; + + function onchangeRadio(grid, fieldName) { + var radioButTrat = document.getElementsByName(fieldName), i; + for (i = 0; i < radioButTrat.length; i += 1) { + if (radioButTrat[i].checked == true) { + quickMessageWindow.close(); + groupRows(grid, radioButTrat[i].value); + } + } + } + + function domSettings() { + if (activity.act_loop_type == "PARALLEL") { + $(formAssignmentRules.getField("tas_assign_type").controls[0].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[1].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[2].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[3].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[4].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[5].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[6].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[7].html).parent().show(); + if (formAssignmentRules.getField('tas_assign_type').getValue() == "MULTIPLE_INSTANCE_VALUE_BASED") { + formAssignmentRules.getField('tas_assign_type').setValue("MULTIPLE_INSTANCE_VALUE_BASED"); + } else { + formAssignmentRules.getField('tas_assign_type').setValue("MULTIPLE_INSTANCE"); + } + } else { + $(formAssignmentRules.getField("tas_assign_type").controls[0].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[1].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[2].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[3].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[4].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[5].html).parent().show(); + $(formAssignmentRules.getField("tas_assign_type").controls[6].html).parent().hide(); + $(formAssignmentRules.getField("tas_assign_type").controls[7].html).parent().hide(); + if (formAssignmentRules.getField('tas_assign_type').getValue() == "MULTIPLE_INSTANCE_VALUE_BASED") { + formAssignmentRules.getField('tas_assign_type').setValue("BALANCED"); + formAssignmentRules.getField('tas_assign_variable').setVisible(false); + } + } + }; + + panelTitleUser.addItem(titleUser); + panelGridUser.addItem(gridUsers); + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelGridUser); + assigmentPanelGlobal.addItem(assigmentPanelUser); + panelTitleUserList.addItem(titleUserList); + panelGridUserList.addItem(gridUserList); + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelGridUserList); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + + panelTitleUserAD.addItem(titleUserAD); + panelSearchUserAD.addItem(searchGridUserAD); + panelGridUserAD.addItem(gridUsersAD); + assigmentPanelUserAD.addItem(panelTitleUserAD); + assigmentPanelUserAD.addItem(panelGridUserAD); + assigmentPanelGlobalAD.addItem(assigmentPanelUserAD); + panelTitleUseListAD.addItem(titleUserListAD); + panelGridUserListAD.addItem(gridUserListAD); + assigmentPanelUserListAD.addItem(panelTitleUseListAD); + assigmentPanelUserListAD.addItem(panelGridUserListAD); + assigmentPanelGlobalAD.addItem(assigmentPanelUserListAD); + + if (formAssignmentRules.dirty == null) { + formAssignmentRules.dirty = false; + } + windowAssignmentRules.addItem(formAssignmentRules); + windowAssignmentRules.addItem(tabPanelAssignmentRules); + windowAssignmentRules.open(); + applyStyleWindowForm(windowAssignmentRules); + windowAssignmentRules.body.style.overflowY = 'auto'; + windowAssignmentRules.body.style.overflowX = 'hidden'; + windowAssignmentRules.defineEvents(); + buttonsUsers.defineEvents(); + tabPanelAssignmentRules.itemClick(0); + loadServerData(); + domSettings(); + //array for Users + usersgrid = gridUsers; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectUsers2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserList; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectUserList2[i] = userslist.getItems()[i]; + } + //array for AdHocUsers + usersgrid = gridUsersAD; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectAdhocUser2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserListAD; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectAdhocUserList2[i] = userslist.getItems()[i]; + } + formAssignmentRules.html.style.marginLeft = '30px'; + formAssignmentRulesSetTimeoutOption; + document.getElementById("formAssignmentRulesSetTimeoutOption").childNodes[0].onchange = function () { + visibleService(this.checked); + }; + $(".pmui-field-control-table").css("border", "0px"); + $(".pmui-field-label").css("padding", "0px"); + $(".mafe-designer-assigment-title").css("margin-top", "25px"); + $("#formTasAssignType").append("
"); + $(".pmui-gridpanel-footer").addClass("pmui-gridpanel-footer-dinamic"); + }; +}()); +(function () { + PMDesigner.assigmentSupervisors = function (event) { + var assigmentWindow = null, + pageSizeAssignment = 8, + restClient, + assigmentPanelUser, + assigmentPanelUserList, + assigmentPanelGlobal, + panelTitleUser, + titleUser, + panelSearchUser, + searchGridUser, + panelGridUser, + buttonsUsers, + gridUsers, + panelTitleUserList, + titleUserList, + panelSearchUserList, + searchGridUserList, + panelGridUserList, + buttonsUserList, + gridUserList, + applyStyles, + loadServerData, + loadUsers, + loadUsersList, + groupRows, + assignee, + remove, + quickMessageWindow = new QuickMessageWindow(); + + assigmentWindow = new PMUI.ui.Window({ + id: 'assigmentUserWindow', + title: 'Assign Users and Groups as Supervisors'.translate(), + width: DEFAULT_WINDOW_WIDTH + 1, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true + }); + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + messageError: 'There are problems, please try again.'.translate(), + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + assigmentPanelUser = new PMUI.core.Panel({ + layout: "vbox", + width: "49%", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + } + }); + assigmentPanelUserList = new PMUI.core.Panel({ + layout: "vbox", + width: "50%", + style: { + cssClasses: [ + 'mafe-panel-assignment-smooth' + ] + } + }); + assigmentPanelGlobal = new PMUI.core.Panel({ + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH, + style: { + cssClasses: [ + 'mafe-assigment-panel-global' + ] + } + }); + + panelTitleUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUser = new PMUI.ui.TextLabel({ + id: 'titleUser', + label: ' ', + textMode: 'plain', + text: 'Available Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUser = new PMUI.field.TextField({ + id: 'searchGridUser', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUser = new PMUI.core.Panel({layout: 'hbox'}); + buttonsUsers = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUsers', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + selected: true, + value: 'all', + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + ], + listeners: { + select: function (item, event) { + groupRows(gridUsers, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUsers = new PMUI.grid.GridPanel({ + id: 'gridUsers', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + id: 'gridUsersButtonLabel', + title: '', + dataType: 'button', + width: '10%', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + if (row.data.customKeys.obj_type === 'group') { + restClient.setTypeRequest('get'); + restClient.functionSuccess = function (xhr, response) { + var stringUsers = '', i; + for (i = 0; i < response.length; i += 1) { + stringUsers = stringUsers + response[i].usr_firstname + ' ' + response[i].usr_lastname + ', '; + } + stringUsers = stringUsers.substring(0, stringUsers.length - 2); + if (stringUsers === '') { + stringUsers = 'No users'; + } + quickMessageWindow.show($(row.html).find('a')[0], stringUsers); + }; + restClient.setBaseEndPoint('group/' + row.data.customKeys.sup_uid + '/users'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'sup_name', + alignmentCell: 'left', + width: '80%' + }, { + id: 'gridUsersButtonAssign', + title: '', + dataType: 'button', + width: '19%', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.data.customKeys.obj_type === 'user' ? 'button-icon-user' : 'button-icon-group']); + return 'Assign'.translate(); + }, + onButtonClick: function (row, grid) { + grid.removeItem(row); + grid.sort('sup_name', 'asc'); + gridUserList.addItem(row); + buttonsUserList.setValue(buttonsUsers.getValue()); + groupRows(gridUserList, buttonsUsers.getValue()); + assignee(row); + } + } + ], + onDropOut: function (item, origin, destiny) { + assignee(item); + }, + onDrop: function (a, row) { + buttonsUsers.setValue(buttonsUserList.getValue()); + groupRows(gridUsers, buttonsUserList.getValue()); + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelTitleUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUserList = new PMUI.ui.TextLabel({ + id: 'titleUserList', + textMode: 'plain', + text: 'Assigned Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUserList = new PMUI.field.TextField({ + id: 'searchGridUserList', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + buttonsUserList = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUserList', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + value: 'all', + selected: true, + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + + ], + listeners: { + select: function (item, event) { + groupRows(gridUserList, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUserList = new PMUI.grid.GridPanel({ + id: 'gridUserList', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterPlaceholder: 'Search ...'.translate(), + filterable: true, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = 'mafe-grid-panel-empty'; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserList.dom.tableContainer.style.overflow = 'hidden'; + }, + columns: [{ + id: 'gridUserListButtonLabel', + title: '', + width: '10%', + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var stringUsers, i; + if (row.data.customKeys.obj_type === 'group') { + restClient.setTypeRequest('get'); + restClient.functionSuccess = function (xhr, response) { + stringUsers = ''; + for (i = 0; i < response.length; i += 1) { + stringUsers = stringUsers + response[i].usr_firstname + ' ' + response[i].usr_lastname + ', '; + } + stringUsers = stringUsers.substring(0, stringUsers.length - 2); + if (stringUsers === '') { + stringUsers = 'No users'; + } + quickMessageWindow.show($(row.html).find('a')[0], stringUsers); + }; + restClient.setBaseEndPoint('group/' + row.data.customKeys.sup_uid + '/users'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'sup_name', + width: '80%', + alignmentCell: 'left' + }, { + id: 'gridUserListButtonDelete', + title: '', + dataType: 'button', + width: '10%', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.data.customKeys.obj_type === 'user' ? 'button-icon-user' : 'button-icon-group']); + return 'Remove'.translate(); + }, + onButtonClick: function (row, grid) { + grid.removeItem(row); + grid.sort('sup_name', 'asc'); + gridUsers.addItem(row); + buttonsUsers.setValue(buttonsUserList.getValue()); + groupRows(gridUsers, buttonsUserList.getValue()); + remove(row); + } + } + ], + onDropOut: function (item, origin, destiny) { + remove(item); + }, + onDrop: function (a, row) { + buttonsUserList.setValue(buttonsUsers.getValue()); + groupRows(gridUserList, buttonsUsers.getValue()); + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + applyStyles = function () { + gridUsers.dom.toolbar.appendChild(buttonsUsers.getHTML()); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(buttonsUserList.getHTML()); + gridUserList.dom.toolbar.style.height = "76px"; + buttonsUsers.dom.labelTextContainer.style.display = "none"; + buttonsUserList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + }; + loadServerData = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'project/' + PMDesigner.project.id + '/available-process-supervisors', + method: 'GET' + }, { + url: 'project/' + PMDesigner.project.id + '/process-supervisors', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadUsers(response[0].response); + loadUsersList(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + loadUsers = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].obj_type === 'user') { + gridUsers.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: response[i].obj_type + }); + } + if (response[i].obj_type === 'group') { + gridUsers.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: response[i].obj_type + }); + } + } + gridUsers.sort('sup_name', 'asc'); + }; + loadUsersList = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].pu_type === 'SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: 'user', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + if (response[i].pu_type === 'GROUP_SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: 'group', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + } + gridUserList.sort('sup_name', 'asc'); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().obj_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('sup_name', 'asc'); + }; + assignee = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor', + typeRequest: 'post', + data: { + usr_uid: row.data.customKeys.sup_uid, + pu_type: row.data.customKeys.obj_type === 'group' ? 'GROUP_SUPERVISOR' : 'SUPERVISOR' + }, + functionSuccess: function (xhr, response) { + row.data.customKeys.pu_type = response.pu_type; + row.data.customKeys.pu_uid = response.pu_uid; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.executeRestClient(); + }; + remove = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + row.data.customKeys.pu_uid, + typeRequest: 'remove', + functionSuccess: function () { + }, + functionComplete: function () { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + assigmentWindow.open(); + panelTitleUser.addItem(titleUser); + panelTitleUserList.addItem(titleUserList); + assigmentWindow.body.style.overflow = "hidden"; + panelGridUser.addItem(gridUsers); + panelGridUserList.addItem(gridUserList); + + assigmentPanelGlobal.addItem(assigmentPanelUser); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + assigmentWindow.addItem(assigmentPanelGlobal); + + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelSearchUser); + assigmentPanelUser.addItem(buttonsUsers); + assigmentPanelUser.addItem(panelGridUser); + + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelSearchUserList); + assigmentPanelUserList.addItem(buttonsUserList); + assigmentPanelUserList.addItem(panelGridUserList); + + assigmentWindow.defineEvents(); + applyStyles(); + + loadServerData(); + }; +}()); +(function () { + PMDesigner.assigmentSupervisors = function (event) { + var assigmentWindow = null, + pageSizeAssignment = 8, + flagEdit = 0, + i, + index = 0, + quickMessageWindow = new QuickMessageWindow(), + arrayObjectUserList = new Array(), + arrayObjectUsers = new Array(), + arrayObjectUserList2 = new Array(), + arrayObjectUsers2 = new Array(), + arrayDynaformInputDocumentID = new Array(), + arrayDynaformInputDocumentObject = new Array(), + arrayObjectRemovedSteps = new Array(), + message_window, + restClient, + assigmentPanelUser, + assigmentPanelUserList, + assigmentPanelGlobal, + panelTitleUser, + titleUser, + panelSearchUser, + searchGridUser, + panelGridUser, + buttonsUsers, + gridUsers, + panelTitleUserList, + titleUserList, + panelSearchUserList, + searchGridUserList, + panelGridUserList, + radioUsersList, + buttonsUserList, + gridUserList, + radioUsers, + applyStylesRadioButtonGroupField, + applyStylesForToolbar, + applyStyles, + loadUsers, + loadUsersList, + groupRows, + assignee, + remove, + loadGridCaseTacker, + orderDataTree, + titleTreeObjects, + titleGridObjects, + panelLabelObjects, + panelObjects, + treePanelObjects, + updateItem, + usersgrid, + saveItemDyanformInputDocuments, + getValuesAssignmentSteps, + gridPanelObjects, + panelContainerObjects, + userslist, + gridpanelobj, + flashMessage = new PMUI.ui.FlashMessage({ + message: '', + appendTo: document.body, + duration: 1000, + severity: "success" + }); + assigmentWindow = new PMUI.ui.Window({ + id: 'assigmentUserWindow', + title: 'Supervisors'.translate(), + width: DEFAULT_WINDOW_WIDTH + 1, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + onBeforeClose: function () { + if (flagEdit != 0) { + message_window.open(); + message_window.showFooter(); + } else { + assigmentWindow.close(); + } + }, + footerItems: [ + { + text: "Cancel", + handler: function () { + if (flagEdit != 0) { + message_window.open(); + message_window.showFooter(); + } else { + assigmentWindow.close(); + } + }, + buttonType: 'error' + }, + { + text: 'Save', + handler: function () { + var i, j, idObject, objType, baseEndPointID; + if (flagEdit != 0) { + //save Configuration Supervisors and Steps(Dyanform - Inputs Documents) + if (gridUserList.getItems().length > 0) { + grid = gridUserList; + for (i = 0; i < arrayObjectUserList.length; i += 1) { + b = arrayObjectUserList[i]; + grid.removeItem(b); + grid.sort('sup_name', 'asc'); + gridUserList.addItem(b); + radioUsersList.setValue(radioUsers.getValue()); + groupRows(gridUserList, radioUsers.getValue()); + if (arrayObjectUserList2.indexOf(b) == -1) { + assignee(b); + } + } + } + if (gridUsers.getItems().length > 0) { + for (i = 0; i < arrayObjectUsers.length; i += 1) { + b = arrayObjectUsers[i]; + if (arrayObjectUsers2.indexOf(b) == -1) { + remove(arrayObjectUsers[i]); + } + } + } + + index = 0; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + idObject = gridPanelObjects.getItems()[i].getData().obj_uid; + index = arrayDynaformInputDocumentID.indexOf(idObject); + if (index <= -1) { + saveItemDyanformInputDocuments(gridPanelObjects.getItems()[i]); + } else { + updateItem(gridPanelObjects.getItems()[i], i); + } + } + + for (i = 0; i < arrayObjectRemovedSteps.length; i += 1) { + for (j = 0; j < arrayDynaformInputDocumentObject.length; j += 1) { + index = (arrayObjectRemovedSteps[i] == arrayDynaformInputDocumentObject[j].obj_uid) ? 0 : 1; + if (index == 0) { + objType = arrayDynaformInputDocumentObject[j].obj_type.toLowerCase(); + baseEndPointID = (objType === "dynaform") ? arrayDynaformInputDocumentObject[j].pud_uid : arrayDynaformInputDocumentObject[j].pui_uid; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'process-supervisor/' + objType + '/' + baseEndPointID, + "method": 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + break; + } + } + } + assigmentWindow.close(); + } + else { + assigmentWindow.close(); + } + }, + buttonType: "success" + } + ], + visibleFooter: true, + buttonPanelPosition: "bottom", + footerAlign: "right" + }); + + message_window = new PMUI.ui.MessageWindow({ + id: "messageWindowCancel", + width: 490, + title: "Supervisors".translate(), + windowMessageType: "warning", + bodyHeight: "auto", + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: "messageWindowNo", + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: "messageWindowYes", + text: "Yes".translate(), + handler: function () { + message_window.close(); + assigmentWindow.close(); + }, + buttonType: "success" + } + ] + }); + + restClient = new PMRestClient({ + endpoint: 'projects', + typeRequest: 'get', + messageError: 'There are problems, please try again.'.translate(), + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + assigmentPanelUser = new PMUI.core.Panel({ + layout: "vbox", + width: "49%", + style: { + cssClasses: [ + 'mafe-panel-assignment-white' + ] + } + }); + assigmentPanelUserList = new PMUI.core.Panel({ + layout: "vbox", + width: "50%", + style: { + cssClasses: [ + 'mafe-panel-assignment-smooth' + ] + } + }); + assigmentPanelGlobal = new PMUI.core.Panel({ + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH, + style: { + cssClasses: [ + 'mafe-assigment-panel-global' + ] + } + }); + + panelTitleUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUser = new PMUI.ui.TextLabel({ + id: 'titleUser', + label: ' ', + textMode: 'plain', + text: 'Available Users List'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUser = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUser = new PMUI.field.TextField({ + id: 'searchGridUser', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUser = new PMUI.core.Panel({layout: 'hbox'}); + buttonsUsers = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUsers', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + selected: true, + value: 'all', + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + ], + listeners: { + select: function (item, event) { + groupRows(gridUsers, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUsers = new PMUI.grid.GridPanel({ + id: 'gridUsers', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/available-process-supervisors/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].obj_type == "group") { + data[i].available = data[i].grp_name; + } else { + data[i].available = data[i]["usr_firstname"] + " " + data[i]["usr_lastname"] + " (" + data[i]["usr_username"] + ")"; + } + } + return data; + }, + columns: [{ + id: 'gridUsersButtonLabel', + title: '', + dataType: 'button', + width: '10%', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem" + if (row.getData()["obj_type"] === 'group') { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint('group/' + row.getData()["grp_uid"] + '/supervisor-users?start=0&limit=11'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'available', + alignmentCell: 'left', + width: '330px' + }, { + id: 'gridUsersButtonAssign', + title: '', + dataType: 'button', + width: '19%', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit-assign' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.getData()["obj_type"] === 'user' ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + grid = (grid != null) ? grid : gridUsers; + assignee(row); + gridUserList.goToPage(gridUserList.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (a, row) { + grid = this; + remove(row); + gridUserList.goToPage(gridUserList.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("The user/group was successfully removed".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + + panelTitleUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + titleUserList = new PMUI.ui.TextLabel({ + id: 'titleUserList', + textMode: 'plain', + text: 'Assigned supervisors list'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + panelSearchUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + searchGridUserList = new PMUI.field.TextField({ + id: 'searchGridUserList', + label: ' ', + placeholder: 'Search ...'.translate() + }); + panelGridUserList = new PMUI.core.Panel({ + layout: 'hbox' + }); + radioUsersList = new PMUI.field.RadioButtonGroupField({ + id: 'idRadioUsersList', + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + label: "View all".translate(), + value: "all" + }, + { + label: "View users".translate(), + value: "user" + }, + { + label: "View groups".translate(), + value: "group" + } + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUserList.typeList = "user".translate(); + break; + case "group": + gridUserList.typeList = "group".translate(); + break; + default: + gridUserList.typeList = ""; + break; + } + gridUserList.goToPage(0); + }, + required: true, + value: "all" + }); + buttonsUserList = new PMUI.field.OptionsSelectorField({ + id: 'buttonsUserList', + orientation: 'horizontal', + items: [{ + text: 'All'.translate(), + value: 'all', + selected: true, + style: { + cssClasses: [ + 'pmui-switch-icon-all' + ] + } + }, { + text: 'Users'.translate(), + value: 'user', + style: { + cssClasses: [ + 'pmui-switch-icon-user' + ] + } + }, { + text: 'Groups'.translate(), + value: 'group', + style: { + cssClasses: [ + 'pmui-switch-icon-group' + ] + } + } + + ], + listeners: { + select: function (item, event) { + groupRows(gridUserList, item.value); + } + }, + style: { + cssClasses: [ + 'mafe-assigment-buttons' + ] + } + }); + gridUserList = new PMUI.grid.GridPanel({ + id: 'gridUserList', + pageSize: pageSizeAssignment, + behavior: 'dragdropsort', + filterPlaceholder: 'Search ...'.translate(), + filterable: true, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + emptyMessage: function () { + var div = document.createElement('div'), + span = document.createElement('span'); + div.appendChild(span); + div.className = 'mafe-grid-panel-empty'; + span.innerHTML = 'Drag & Drop a User or a Group here'.translate(); + return div; + }, + onEmpty: function (grid, cell) { + gridUserList.dom.tableContainer.style.overflow = 'hidden'; + }, + dynamicLoad: { + keys: { + server: HTTP_SERVER_HOSTNAME, + projectID: PMDesigner.project.projectId, + workspace: WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endPoint: 'project/' + PMDesigner.project.id + '/process-supervisors/paged' + } + }, + customDataRest: function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + if (data[i].pu_type == "GROUP_SUPERVISOR") { + data[i].assignee = data[i].grp_name; + } else { + data[i].assignee = data[i]["usr_firstname"] + " " + data[i]["usr_lastname"] + " (" + data[i]["usr_username"] + ")"; + } + } + return data; + }, + columns: [{ + id: 'gridUserListButtonLabel', + title: '', + width: '10%', + dataType: 'button', + buttonLabel: function (row, data) { + return data.lastName; + }, + buttonStyle: { + cssClasses: [ + 'mafe-grid-button' + ] + }, + onButtonClick: function (row, grid) { + var option, select; + select = document.createElement("span"); + select.id = "list-usersIngroup"; + option = document.createElement("span"); + option.id = "list-usersIngroup-iem" + if (row.getData()["pu_type"] === "GROUP_SUPERVISOR") { + var restClient = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var optionClone, i; + for (i = 0; i < response.length; i += 1) { + if (i == 10) { + optionClone = option.cloneNode(false); + optionClone.innerHTML = ". . ."; + select.appendChild(optionClone); + } else { + optionClone = option.cloneNode(false); + optionClone.textContent = "- " + response[i].usr_firstname + ' ' + response[i].usr_lastname; + optionClone.title = response[i].usr_firstname + ' ' + response[i].usr_lastname; + select.appendChild(optionClone); + } + } + if (!optionClone) { + optionClone = option.cloneNode(false); + optionClone.textContent = "No users".translate(); + select.appendChild(optionClone); + } + + quickMessageWindow.show($(row.html).find('a')[0], select); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.setBaseEndPoint('group/' + row.getData()["grp_uid"] + '/supervisor-users?start=0&limit=11'); + restClient.executeRestClient(); + } + } + }, { + title: '', + dataType: 'string', + columnData: 'assignee', + width: '330px', + alignmentCell: 'left' + }, { + id: 'gridUserListButtonDelete', + title: '', + dataType: 'button', + width: '10%', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete-assign' + ] + }, + buttonLabel: function (row, data) { + row.getCells()[0].content.style.addClasses([row.getData()["pu_type"] === "SUPERVISOR" ? 'button-icon-user' : 'button-icon-group']); + return ''; + }, + onButtonClick: function (row, grid) { + grid = (grid != null) ? grid : gridUsers; + remove(row); + gridUsers.goToPage(gridUsers.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + } + } + ], + onDropOut: function (item, origin, destiny) { + }, + onDrop: function (grid, row) { + var dataRow = {}; + grid = this; + assignee(row); + gridUsers.goToPage(gridUsers.currentPage); + grid.goToPage(grid.currentPage); + flashMessage.setMessage("Assignee saved successfully".translate()); + flashMessage.setAppendTo(assigmentWindow.getHTML()); + flashMessage.show(); + return false; + }, + style: { + cssClasses: [ + 'mafe-designer-assigment-grid' + ] + } + }); + radioUsers = new PMUI.field.RadioButtonGroupField({ + id: 'idRadioUsers', + controlPositioning: 'horizontal', + maxDirectionOptions: 3, + options: [ + { + label: "View all".translate(), + value: "all" + }, + { + label: "View users".translate(), + value: "user" + }, + { + label: "View groups".translate(), + value: "group" + } + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "user" : + gridUsers.typeList = "user"; + break; + case "group": + gridUsers.typeList = "group"; + break; + default: + gridUsers.typeList = ""; + break; + } + gridUsers.goToPage(0); + }, + required: true, + value: "all", + style: { + cssProperties: { + 'margin-top': '15px' + } + } + }); + applyStylesRadioButtonGroupField = function () { + $('#idRadioUsers .pmui-field-control-table').css("border", "none"); + $('#idRadioUsers').css("margin-top", "12px"); + radioUsers.defineEvents(); + + $('#idRadioUsersList .pmui-field-control-table').css("border", "none"); + $('#idRadioUsersList').css("margin-top", "12px"); + radioUsersList.defineEvents(); + }; + + applyStylesForToolbar = function () { + $('.pmui-gridpanel-toolbar')[0].childNodes[0].style.width = "300px"; + $('.pmui-gridpanel-toolbar')[1].childNodes[0].style.width = "300px"; + $('.pmui-gridpanel-toolbar')[0].childNodes[0].style.backgroundColor = "#f5f5f5"; + $('.pmui-gridpanel-toolbar')[1].childNodes[0].style.backgroundColor = "#f5f5f5"; + $('#assigmentUserWindow')[0].childNodes[1].childNodes[0].childNodes[1].style.backgroundColor = "white"; + $('#gridUserList')[0].style.backgroundColor = "white"; + $('#gridUserList').css("width", "452px"); + $('#gridUsers').css({"width": "452px", "height": "175px"}); + $('.pmui-window-body .pmui-panel:eq(9)').css({ + 'width': '1000px', + 'border-top': '1px solid #cdd2d5', + 'margin-top': '36px', + 'height': '80px' + }); + }; + + applyStyles = function () { + applyStylesRadioButtonGroupField(); + gridUsers.dom.toolbar.appendChild(radioUsers.getHTML()); + gridUsers.dom.toolbar.style.height = "76px"; + gridUserList.dom.toolbar.appendChild(radioUsersList.getHTML()); + gridUserList.dom.toolbar.style.height = "76px"; + radioUsers.dom.labelTextContainer.style.display = "none"; + radioUsersList.dom.labelTextContainer.style.display = "none"; + gridUsers.hideHeaders(); + gridUserList.hideHeaders(); + assigmentPanelUserList.setHeight('100%'); + gridUsers.filterControl.html.style.width = "300px"; + gridUserList.filterControl.html.style.width = "300px"; + assigmentWindow.getItems()[0].getItems()[0].html.style.borderRight = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[0].html.style.borderBottom = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[1].html.style.borderBottom = "1px solid #cdd2d5"; + assigmentWindow.getItems()[0].getItems()[0].html.style.height = "415px"; + assigmentWindow.getItems()[0].getItems()[1].html.style.height = "415px"; + assigmentWindow.getItems()[0].getItems()[1].html.style.paddingLeft = "10px"; + $('#gridPanelObjects .pmui-gridpanel-tableContainer').css({'height': '245px'}); + $(".pmui-gridpanel-footer").addClass("pmui-gridpanel-footer-dinamic"); + }; + loadUsers = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].obj_type === 'user') { + gridUsers.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: response[i].obj_type + }); + } + if (response[i].obj_type === 'group') { + gridUsers.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: response[i].obj_type + }); + } + } + gridUsers.sort('sup_name', 'asc'); + }; + loadUsersList = function (response) { + var i; + for (i = 0; i < response.length; i += 1) { + if (response[i].pu_type === 'SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].usr_uid, + sup_name: response[i].usr_firstname + ' ' + response[i].usr_lastname, + obj_type: 'user', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + if (response[i].pu_type === 'GROUP_SUPERVISOR') { + gridUserList.addDataItem({ + sup_uid: response[i].grp_uid, + sup_name: response[i].grp_name, + obj_type: 'group', + pu_type: response[i].pu_type, + pu_uid: response[i].pu_uid + }); + } + } + gridUserList.sort('sup_name', 'asc'); + }; + groupRows = function (grid, value) { + var i, items; + if (grid.memorystack === undefined) { + grid.memorystack = []; + } + items = grid.getItems(); + while (grid.memorystack.length > 0) { + grid.addItem(grid.memorystack.pop()); + } + if (value !== 'all') { + for (i = 0; i < items.length; i += 1) { + if (items[i].getData().obj_type !== value) { + grid.memorystack.push(items[i]); + grid.removeItem(items[i]); + } + } + } + grid.sort('sup_name', 'asc'); + }; + assignee = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor', + typeRequest: 'post', + data: { + usr_uid: row.getData()["obj_type"] == "group" ? row.getData()["grp_uid"] : row.getData()["usr_uid"], + pu_type: row.getData()["obj_type"] === 'group' ? 'GROUP_SUPERVISOR' : 'SUPERVISOR' + }, + functionSuccess: function (xhr, response) { + row.data.customKeys.pu_type = response.pu_type; + row.data.customKeys.pu_uid = response.pu_uid; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems saving the assigned user, please try again.'.translate() + }); + restClient.executeRestClient(); + }; + remove = function (row) { + var restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + row.getData()["pu_uid"], + typeRequest: 'remove', + functionSuccess: function () { + }, + functionComplete: function () { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + //steps Dynaforms and InputDocuments + titleTreeObjects = new PMUI.ui.TextLabel({ + id: "titleTreeObjects", + textMode: 'plain', + text: 'Available Objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ] + } + }); + + titleGridObjects = new PMUI.ui.TextLabel({ + id: "titleGridObjects", + textMode: 'plain', + text: 'Assigned objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-assigment-title' + ], + cssProperties: { + 'left': 40 + } + } + }); + + panelLabelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + fieldset: true, + items: [ + titleTreeObjects, + titleGridObjects + ], + style: { + cssProperties: { + 'margin-bottom': 2, + 'margin-left': 50 + } + }, + layout: "hbox" + }); + + panelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: 30, + fieldset: true, + items: [ + panelLabelObjects + ], + layout: "vbox" + }); + + //Objects + orderDataTree = function (data) { + var items = [], i, + type = ['DYNAFORM', 'INPUT-DOCUMENT'], + label = ['Dynaform', 'Input Document']; + for (i = 0; i < type.length; i += 1) { + items = []; + for (var j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + if (data[j].obj_type == "DYNAFORM") { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['dyn_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'], + dyn_uid: data[j]['dyn_uid'] + }); + } else { + if (data[j].obj_type == "INPUT-DOCUMENT") { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['inp_doc_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'], + obj_uid: data[j]['obj_uid'], + inp_uid: data[j]['inp_doc_uid'] + }); + } + } + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [{obj_title: 'N/A'.translate(), obj_uid: ''}] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items + }); + } + } + }; + + loadGridCaseTacker = function (data) { + var dataOrder = new Array(), i, j; + for (i = 0; i < data.length; i += 1) { + for (j = 0; j < data.length; j += 1) { + positionIndex = (data[j]['obj_type'] == 'DYNAFORM') ? data[j].pud_position : data[j].pui_position; + if (positionIndex == (i + 1)) { + dataOrder.push(data[j]); + switch (dataOrder[i]['obj_type']) { + case 'DYNAFORM': + label = dataOrder[i]['dyn_title'].translate(); + break; + case 'INPUT-DOCUMENT': + label = dataOrder[i]['input_doc_title'].translate(); + break; + default: + break; + } + dataOrder[i]['obj_title'] = label; + break; + } + } + } + gridPanelObjects.setDataItems(dataOrder); + }; + + getValuesAssignmentSteps = function () { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "process-supervisor/available-assignmentsteps", + "method": 'GET' + }, + { + "url": "process-supervisor/assignmentsteps", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataTree = []; + orderDataTree(response[0].response); + treePanelObjects.setDataItems(dataTree); + loadGridCaseTacker(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + treePanelObjects = new PMUI.panel.TreePanel({ + id: 'treePanelObjects', + proportion: 0.5, + filterable: true, + filterPlaceholder: 'Text to search'.translate(), + emptyMessage: 'No records found'.translate(), + style: {cssClasses: ['itemsSteps']}, + nodeDefaultSettings: { + behavior: "drag", + labelDataBind: 'obj_title', + itemsDataBind: 'items', + collapsed: false, + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + autoBind: true + } + }); + + //Save Item (Drop) + saveItemDyanformInputDocuments = function (rowStep) { + rowStep = rowStep.getData(); + if (rowStep.obj_type === "DYNAFORM") { + data = { + "dyn_uid": rowStep.obj_uid, + "pud_position": rowStep.obj_position + }; + } else { + data = { + "inp_doc_uid": rowStep.obj_uid, + "pui_position": rowStep.obj_position + }; + } + + restClient = new PMRestClient({ + endpoint: 'process-supervisor/' + rowStep.obj_type.toLowerCase(), + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + return data; + }; + + //Update SORT tree + updateItem = function (rowStep, i) { + var objType, + baseEndPointType, + baseEndPointID; + rowStep = rowStep.getData(); + rowStep.obj_position = i + 1; + objType = rowStep.obj_type.toLowerCase(), + baseEndPointType = (objType === "dynaform") ? 'dynaforms' : 'input-documents'; + baseEndPointID = (objType === "dynaform") ? rowStep.pud_uid : rowStep.pui_uid; + if (objType === "dynaform") { + rowStep.pud_position = rowStep.obj_position; + } else { + rowStep.pui_position = rowStep.obj_position; + } + + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'process-supervisor/' + objType + "/" + baseEndPointID, + "method": 'PUT', + "data": rowStep + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + }; + gridPanelObjects = new PMUI.grid.GridPanel({ + id: 'gridPanelObjects', + proportion: 1.5, + visibleFooter: false, + filterable: false, + style: { + cssClasses: ['itemsSteps'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + behavior: 'dragdropsort', + columns: [ + { + title: 'Title'.translate(), + dataType: 'string', + width: 330, + alignment: "left", + columnData: "obj_title", + sortable: false, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: 120, + alignment: "left", + columnData: "obj_type", + sortable: false, + alignmentCell: 'left' + }, + { + id: 'gridPanelObjectsButtonDelete', + title: '', + dataType: 'button', + buttonLabel: '', + buttonStyle: {cssClasses: ['mafe-button-delete-assign']}, + buttonTooltip: 'Remove Object'.translate(), + onButtonClick: function (row, grid) { + var rowStep, treePanelItems; + flagEdit = 1; + index = arrayDynaformInputDocumentID.indexOf(row.getData().obj_uid); + rowStep = row.getData(); + treePanelItems = treePanelObjects.getItems(); + + if (index > -1) { + arrayObjectRemovedSteps.push(row.getData().obj_uid); + arrayDynaformInputDocumentID.splice(index, 1); + } + function removeRowClass(treeNode) { + var childNodeEl = $(treeNode.html).find('.pmui-gridpanelrow'); + childNodeEl.removeClass('pmui-gridpanelrow'); + } + + function removeEmptyNode(indexNode) { + var parentNode = treePanelItems[indexNode]; + if (parentNode.getItems().length == 1 && + parentNode.getItems()[0].getData()['obj_uid'] == "") { + parentNode.removeItem(0); + } + parentNode.addItem(row); + removeRowClass(parentNode); + } + + if (rowStep.obj_type === "DYNAFORM") { + removeEmptyNode(0); + } else { + removeEmptyNode(1); + } + grid.removeItem(row); + } + } + ], + onDrop: function (grid, item, index) { + var parentItems; + if (item.getData()['obj_uid'] == "") { + return false; + + } + parentItems = item.parent.getItems(); + if (parentItems.length == 1 && item.getData()['obj_uid'] != "") { + item.parent.addDataItem( + {obj_title: 'N/A'.translate(), obj_uid: ''} + ); + item.parent.behaviorObject.draggedObject = item; + } + flagEdit = 1; + rowStep = item.getData(); + rowStep.obj_position = index + 1; + item.setData(rowStep); + index = arrayObjectRemovedSteps.indexOf(item.getData().obj_uid); + + if (index > -1) { + arrayDynaformInputDocumentID.push(item.getData().obj_uid); + arrayObjectRemovedSteps.splice(index, 1); + } + }, + onSort: function (grid, item, index) { + flagEdit = 1; + rowStep = item.getData(); + rowStep.obj_position = index + 1; + } + }); + + //principal Container Steps + panelContainerObjects = new PMUI.core.Panel({ + id: "panelContainerObjects", + width: DEFAULT_WINDOW_WIDTH, + height: 250, + fieldset: true, + items: [treePanelObjects, gridPanelObjects], + layout: "hbox", + style: { + cssProperties: { + 'margin-top': '-40px' + } + } + }); + + assigmentWindow.open(); + panelTitleUser.addItem(titleUser); + panelTitleUserList.addItem(titleUserList); + assigmentWindow.body.style.overflowX = "hidden"; + + panelGridUser.addItem(gridUsers); + panelGridUserList.addItem(gridUserList); + + assigmentPanelGlobal.addItem(assigmentPanelUser); + assigmentPanelGlobal.addItem(assigmentPanelUserList); + assigmentWindow.addItem(assigmentPanelGlobal); + + assigmentWindow.addItem(panelObjects); + assigmentWindow.addItem(panelContainerObjects); + getValuesAssignmentSteps(); + + gridPanelObjects.style.addProperties({overflow: 'auto'}); + gridPanelObjects.style.addProperties({float: 'right'}); + gridPanelObjects.setWidth(630); + gridPanelObjects.setHeight(250); + $('#gridPanelObjects').css("margin-right", "32px"); + $('#treePanelObjects').css("margin-left", "10px"); + + assigmentPanelUser.addItem(panelTitleUser); + assigmentPanelUser.addItem(panelSearchUser); + assigmentPanelUser.addItem(radioUsers); + assigmentPanelUser.addItem(panelGridUser); + + assigmentPanelUserList.addItem(panelTitleUserList); + assigmentPanelUserList.addItem(panelSearchUserList); + assigmentPanelUserList.addItem(radioUsersList); + assigmentPanelUserList.addItem(panelGridUserList); + gridUsers.dom.tableContainer.style.height = "245px"; + gridUserList.dom.tableContainer.style.height = "245px"; + gridUsers.goToPage(0); + gridUserList.goToPage(0); + assigmentWindow.defineEvents(); + applyStyles(); + treePanelObjects.style.addProperties({overflow: 'auto'}); + + applyStylesForToolbar(); + usersgrid = gridUsers; + for (i = 0; i < usersgrid.getItems().length; i += 1) { + arrayObjectUsers2[i] = usersgrid.getItems()[i]; + } + userslist = gridUserList; + for (i = 0; i < userslist.getItems().length; i += 1) { + arrayObjectUserList2[i] = userslist.getItems()[i]; + } + gridpanelobj = gridPanelObjects; + for (i = 0; i < gridpanelobj.getItems().length; i += 1) { + arrayDynaformInputDocumentID[i] = gridpanelobj.getItems()[i].getData().obj_uid; + arrayDynaformInputDocumentObject[i] = gridpanelobj.getItems()[i].getData(); + } + }; +}()); +( + function () { + PMDesigner.propertiesProcess = function () { + var responseProperties = null, + getValuesProperties, + isDirtyFormProcess, + saveProperties, + propertiesWindow, + processUID, + textTitle, + textDescription, + processOwner, + dropCalendar, + dropProcessCat, + dropDynaform, + dropRouting, + checkDebug, + checkHideCase, + checkSubProcess, + dropCaseCreated, + dropCaseDeleted, + dropCaseCancelled, + dropCasePaused, + dropCaseUnpaused, + dropCaseReassigned, + dropCaseOpen, + dropTypeProcess, + proCost, + loadProperties, + proUnitCost, + formEditProcess, + loadDynaforms, + loadCalendar, + loadTemplate, + loadTriggers, + loadTypeProcess, + loadCategory, + notification, + notificationText = "Fields marked with an asterisk (%%ASTERISK%%) are required.".translate() + .replace(/%%ASTERISK%%/g, '*'), + clickedClose; + + getValuesProperties = function () { + var restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "project/" + PMDesigner.project.id + "/dynaforms", + "method": 'GET' + }, + { + "url": "calendars", + "method": 'GET' + }, + { + "url": "project/categories", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/file-manager?path=templates", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/triggers", + "method": 'GET' + }, + { + "url": "project/" + PMDesigner.project.id + "/process", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + loadDynaforms(response[0].response); + loadCalendar(response[1].response); + loadCategory(response[2].response); + loadTemplate(response[3].response); + loadTriggers(response[4].response); + loadTypeProcess(response[5].response); + loadProperties(response[5].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.setBaseEndPoint(''); + restClient.executeRestClient(); + }; + isDirtyFormProcess = function () { + var message_window + if (formEditProcess.isDirty()) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Edit process".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + propertiesWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + propertiesWindow.close(); + } + }; + saveProperties = function (data) { + var restClient = new PMRestClient({ + typeRequest: 'update', + data: data, + messageSuccess: "Properties saved successfully".translate(), + functionSuccess: function (xhr, response) { + propertiesWindow.close(); + + PMDesigner.project.setProjectName(data.pro_title); + PMDesigner.project.setDescription(data.pro_description); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + + PMDesigner.project.dirty = false; + } + }); + restClient.setEndpoint("process"); + restClient.executeRestClient(); + }; + + propertiesWindow = new PMUI.ui.Window({ + id: "propertiesProcessWindow", + title: "Edit process".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: "auto", + modal: true, + buttonPanelPosition: "bottom", + footerAlign: "right", + onBeforeClose: function () { + clickClose = true; + isDirtyFormProcess(); + }, + buttons: [ + { + id: 'outputWindowDocButtonCancel', + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + clickedClose = false; + isDirtyFormProcess(); + } + }, + { + id: 'outputWindowDocButtonSave', + text: "Save".translate(), + buttonType: "success", + handler: function () { + var dataForm; + if (formEditProcess.isValid() && processOwner.isValid()) { + if ((navigator.userAgent.indexOf("MSIE") != -1) || (navigator.userAgent.indexOf("Trident") != -1)) { + dataForm = getData2PMUI(formEditProcess.html); + } else { + dataForm = formEditProcess.getData(); + dataForm.pro_process_owner = processOwner.get("value"); + } + dataForm.pro_debug = checkDebug.controls[0].selected ? 1 : 0; + dataForm.pro_show_message = checkHideCase.controls[0].selected ? 1 : 0; + dataForm.pro_subprocess = checkSubProcess.controls[0].selected ? 1 : 0; + functionAssignmentUsers = function (xhr, response) { + }; + saveProperties(dataForm); + } else { + if (!(processOwner.isValid()) && formEditProcess.isValid()) { + formEditProcess.addItem(notification); + } else { + formEditProcess.removeItem(notification); + } + } + } + } + ] + }); + + processUID = new PMUI.field.TextField({ + label: "UID".translate(), + id: "process_uid", + name: "pro_uid", + labelWidth: "35%", + controlsWidth: "300px" + }); + + textTitle = new PMUI.field.TextField({ + label: "Title".translate(), + id: 'textTitle', + name: 'pro_title', + labelWidth: "35%", + placeholder: 'a text here'.translate(), + controlsWidth: "300px", + required: true + }); + + textDescription = new PMUI.field.TextAreaField({ + id: 'textDescription', + name: 'pro_description', + label: "Description".translate(), + labelWidth: "35%", + controlsWidth: "500px", + rows: 150, + style: {cssClasses: ['mafe-textarea-resize']} + }); + + processOwner = new SuggestField({ + id: 'processOwner', + name: 'pro_owner', + label: "Process Owner".translate(), + required: true, + width: 500, + placeholder: "suggest users".translate(), + separatingText: ["Users".translate()], + dynamicLoad: { + data: [ + { + key: "usr_uid", + label: ["usr_firstname", "usr_lastname", "(", "usr_username", ")"] + } + ], + keys: { + url: HTTP_SERVER_HOSTNAME + "/api/1.0/" + WORKSPACE, + accessToken: PMDesigner.project.tokens.access_token, + endpoints: [ + { + method: "GET", + url: 'users' + } + ] + } + } + }); + + dropCalendar = new PMUI.field.DropDownListField({ + id: "dropCalendar", + name: "pro_calendar", + labelWidth: "35%", + label: "Calendar".translate(), + controlsWidth: "300px", + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropProcessCat = new PMUI.field.DropDownListField({ + id: "dropProcessCat", + name: "pro_category", + controlsWidth: "300px", + labelWidth: "35%", + label: "Process Category".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropDynaform = new PMUI.field.DropDownListField({ + id: "dropDynaform", + name: "pro_summary_dynaform", + controlsWidth: "300px", + labelWidth: "35%", + label: "Dynaform to show a case summary".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + dropRouting = new PMUI.field.DropDownListField({ + id: "dropRouting", + name: "pro_derivation_screen_tpl", + controlsWidth: "300px", + labelWidth: "35%", + label: "Routing Screen Template".translate(), + valueType: 'string', + onChange: function (newValue, prevValue) { + } + }); + + checkDebug = new PMUI.field.CheckBoxGroupField({ + id: 'checkDebug', + labelWidth: "35%", + label: "Debug".translate(), + name: "pro_debug", + value: '1', + controlPositioning: 'vertical', + options: [ + { + id: 'pro_debug', + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + + checkHideCase = new PMUI.field.CheckBoxGroupField({ + id: 'checkHideCase', + labelWidth: "35%", + label: "Hide the case number and the case title in the steps".translate(), + value: '1', + name: "pro_show_message", + controlPositioning: 'vertical', + options: [ + { + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + + checkSubProcess = new PMUI.field.CheckBoxGroupField({ + id: 'checkSubProcess', + labelWidth: "35%", + label: "This a sub-process".translate(), + value: '1', + name: "pro_subprocess", + controlPositioning: 'vertical', + options: [ + { + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + } + }); + dropCaseCreated = new PMUI.field.DropDownListField({ + id: "dropCaseCreated", + name: "pro_tri_create", + labelWidth: "35%", + label: "Execute a trigger when a case is created".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseDeleted = new PMUI.field.DropDownListField({ + id: "dropCaseDeleted", + name: "pro_tri_deleted", + labelWidth: "35%", + label: "Execute a trigger when a case is deleted".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseCancelled = new PMUI.field.DropDownListField({ + id: "dropCaseCancelled", + name: "pro_tri_canceled", + labelWidth: "35%", + label: "Execute a trigger when a case is cancelled".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCasePaused = new PMUI.field.DropDownListField({ + id: "dropCasePaused", + name: "pro_tri_paused", + labelWidth: "35%", + label: "Execute a trigger when a case is paused".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseUnpaused = new PMUI.field.DropDownListField({ + id: "dropCaseUnpaused", + name: "pro_tri_unpaused", + labelWidth: "35%", + label: "Execute a trigger when a case is unpaused".translate(), + valueType: "string", + controlsWidth: "300px" + }); + + dropCaseReassigned = new PMUI.field.DropDownListField({ + id: "dropCaseReassigned", + name: "pro_tri_reassigned", + labelWidth: "35%", + label: "Execute a trigger when a case is reassigned".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + dropCaseOpen = new PMUI.field.DropDownListField({ + id: "dropCaseOpen", + name: "pro_tri_open", + label: "Execute a trigger when a case is opened".translate(), + labelWidth: "35%", + valueType: "string", + controlsWidth: "300px", + + onChange: function (newValue, prevValue) { + } + }); + + dropTypeProcess = new PMUI.field.DropDownListField({ + id: "dropTypeProcess", + name: "pro_type_process", + labelWidth: "35%", + label: "Process Design Access: Public / Private (Owner)".translate(), + valueType: 'string', + controlsWidth: "300px", + onChange: function (newValue, prevValue) { + } + }); + + proCost = new PMUI.field.TextField({ + id: 'proCost', + name: 'pro_cost', + labelWidth: "35%", + value: 0, + placeholder: 'a cost here'.translate(), + label: "Cost".translate(), + valueType: 'integer', + controlsWidth: "300px", + required: window.enterprise === "1" ? true : false, + style: { + cssProperties: { + float: "left" + } + } + }); + + proUnitCost = new PMUI.field.TextField({ + id: 'proUnitCost', + name: 'pro_unit_cost', + labelWidth: "35%", + value: '$', + placeholder: 'a unit cost here'.translate(), + controlsWidth: "300px", + label: "Units".translate(), + valueType: 'string', + required: window.enterprise === "1" ? true : false, + style: { + cssProperties: { + float: "left" + } + } + }); + + notification = new PMUI.field.TextAnnotationField({ + id: "requiredMessage", + name: "Message", + textType: PMUI.field.TextAnnotationField.TEXT_TYPES.HTML, + text: notificationText, + text_Align: "center" + }); + + formEditProcess = new PMUI.form.Form({ + id: 'formEditProcess', + fieldset: true, + title: "Process Information".translate(), + width: DEFAULT_WINDOW_WIDTH - DEFAULT_WINDOW_WIDTH * 0.10, + items: [ + processUID, + textTitle, + textDescription, + dropCalendar, + dropProcessCat, + dropDynaform, + dropRouting, + checkDebug, + checkHideCase, + checkSubProcess, + dropCaseCreated, + dropCaseDeleted, + dropCaseCancelled, + dropCasePaused, + dropCaseUnpaused, + dropCaseReassigned, + dropCaseOpen, + dropTypeProcess, + proCost, + proUnitCost + ] + }); + + //Load Dynaforms + loadDynaforms = function (response) { + var i; + dropDynaform.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropDynaform.addOption({ + label: response[i].dyn_title, + value: response[i].dyn_uid, + select: false + }); + } + }; + + //Load calendar + loadCalendar = function (response) { + var i; + dropCalendar.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropCalendar.addOption({ + label: response[i].cal_name, + value: response[i].cal_uid, + select: false + }); + } + }; + + //Load category + loadCategory = function (response) { + var i; + dropProcessCat.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + dropProcessCat.addOption({ + label: response[i].cat_name, + value: response[i].cat_uid, + select: false + }); + } + }; + + //Load Templates + loadTemplate = function (response) { + var i; + dropRouting.addOption({ + label: "None".translate(), + value: "", + select: false + }); + for (i = 0; i < response.length; i += 1) { + if (response[i].prf_filename != "alert_message.html") { + dropRouting.addOption({ + label: response[i].prf_filename, + value: response[i].prf_filename, + select: false + }); + } + } + }; + + //Load triggers + loadTriggers = function (response) { + var i; + dropCaseCreated.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseDeleted.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseCancelled.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCasePaused.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseUnpaused.addOption({ + label: "None".translate(), + value: "", + select: false + }); + dropCaseReassigned.addOption({ + label: "None".translate(), + value: "", + select: false + }); + + dropCaseOpen.addOption({ + label: "None".translate(), + value: "", + select: false + }); + + for (i = 0; i < response.length; i += 1) { + dropCaseCreated.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseDeleted.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseCancelled.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCasePaused.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseUnpaused.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + dropCaseReassigned.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + + dropCaseOpen.addOption({ + label: response[i].tri_title, + value: response[i].tri_uid, + select: false + }); + } + }; + + // Load type of process + loadTypeProcess = function (response) { + dropTypeProcess.addOption({ + label: "Public".translate(), + value: "PUBLIC", + select: false + }); + dropTypeProcess.addOption({ + label: "Private".translate(), + value: "PRIVATE", + select: false + }); + }; + + // Load properties of process + loadProperties = function (response) { + propertiesWindow.addItem(formEditProcess); + propertiesWindow.open(); + $(processOwner.createHTML()).insertBefore(dropCalendar.html); + processOwner.html.find("input").blur(function () { + if (!(processOwner.isValid())) { + processOwner.showMessageRequiredExtended(); + } else { + processOwner.repaint("1px solid #adafb2", "2px", "", "1px solid white"); + } + }); + processOwner.html.find("input").focusin(function () { + if (processOwner.isValid()) { + processOwner.repaint("1px solid #adafb2", "2px", "#000", "-webkit-focus-ring-color auto 1px"); + } + }); + processOwner.containerLabel.css({ width: "35%" }); + processOwner.repaint("1px solid #adafb2", "2px", "", ""); + formEditProcess.getField("pro_type_process").hideColon(); + formEditProcess.reset(); + responseProperties = response; + processUID.setValue(response.pro_uid); + processUID.setReadOnly(true); + textTitle.setValue(response.pro_title); + textDescription.setValue(response.pro_description); + processOwner.set("value", response.pro_create_user); + processOwner.html.find("input").val(response.pro_create_firstname + " " + response.pro_create_lastname + " " + "(" + response.pro_create_username + ")"); + dropDynaform.setValue(response.pro_summary_dynaform); + dropCaseCancelled.setValue(response.pro_tri_canceled); + dropCaseCreated.setValue(response.pro_tri_create); + dropCaseDeleted.setValue(response.pro_tri_deleted); + dropCasePaused.setValue(response.pro_tri_paused); + dropCaseUnpaused.setValue(response.pro_tri_unpaused); + dropCaseReassigned.setValue(response.pro_tri_reassigned); + dropCaseOpen.setValue(response.pro_tri_open); + dropRouting.setValue(response.pro_derivation_screen_tpl); + dropCalendar.setValue(response.pro_calendar); + dropProcessCat.setValue(response.pro_category); + dropTypeProcess.setValue(response.pro_type_process); + checkHideCase.setHeight(57) + if (response.pro_debug == 1) { + checkDebug.getControls()[0].select(); + } + if (response.pro_show_message == 1) { + checkHideCase.getControls()[0].select(); + } + if (response.pro_subprocess == 1) { + checkSubProcess.getControls()[0].select(); + } + proCost.setValue(response.pro_cost); + if (response.pro_unit_cost != null && response.pro_unit_cost != '') { + proUnitCost.setValue(response.pro_unit_cost); + } + }; + + getValuesProperties(); + + propertiesWindow.showFooter(); + propertiesWindow.defineEvents(); + applyStyleWindowForm(propertiesWindow); + formEditProcess.getField('pro_title').setFocus(); + formEditProcess.getField("pro_type_process").html.style.float = "left"; + + dropCaseCancelled.style.addProperties({"float": "left"}); + dropCasePaused.style.addProperties({"float": "left"}); + dropCaseUnpaused.style.addProperties({"float": "left"}); + dropCaseReassigned.style.addProperties({"float": "left"}); + dropCaseOpen.style.addProperties({"float": "left"}); + + $("#dropCaseCancelled,#dropCasePaused,#dropCaseReassigned,#dropTypeProcess,#dropCaseOpen").find("select:eq(0)").css("z-index", 1); + + if (window.enterprise === "1") { + proCost.setVisible(true); + proUnitCost.setVisible(true); + } else { + proCost.setVisible(false); + proUnitCost.setVisible(false); + } + }; + + }() +); +(function () { + PMDesigner.caseTracker = function () { + var caseTrackerForm, + index, + flagEdit = 0, + caseTrackerWindow, + dataCaseTracker, + dataTree, + conditionform, + conditionWindows, + disableAllItems, + formIsDirty, + conditionformIsDirty, + orderDataTree, + saveItem, + updateItem, + treePanelObjects, + loadGridCaseTacker, + editCondition, + gridPanelObjects, + titleTreeObjects, + getValuesCaseTrackerObjects, + updateCaseTrackerPropertiesAndObjects, + loadPropertiesCaseTracker, + titleGridObjects, + panelLabelObjects, + panelContainerObjects, + panelObjects, + applyStylesWindow, + showObjects, + arrayObjectDropAssignedObjects = new Array(), + arrayObjectAvailableObjects = new Array(), + arrayObjectStepsCaseTracker = new Array(); + + disableAllItems = function () { + caseTrackerWindow.getItems()[0].setVisible(false); + caseTrackerWindow.getItems()[1].setVisible(false); + caseTrackerWindow.hideFooter(); + }; + formIsDirty = function () { + if (caseTrackerForm.isDirty() || flagEdit == 1) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Case Tracker".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + caseTrackerWindow.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + caseTrackerWindow.close(); + } + }; + + conditionformIsDirty = function () { + if (conditionform.isDirty()) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Case Tracker".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + conditionWindows.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + conditionWindows.close(); + } + + }; + orderDataTree = function (data) { + var items = []; + var type = ['DYNAFORM', 'INPUT_DOCUMENT', 'OUTPUT_DOCUMENT', 'EXTERNAL_STEP']; + var label = ['Dynaform', 'Input Document', 'OutPut Document', 'External Step']; + for (var i = 0; i < type.length; i += 1) { + items = []; + for (var j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + step_type_obj: label[i].translate(), + obj_label: label[i].translate(), + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items + }); + } + } + }; + + //Properties + loadPropertiesCaseTracker = function () { + dataCaseTracker = []; + restClient = new PMRestClient({ + endpoint: 'case-tracker/property', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + dataCaseTracker = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + updateCaseTrackerPropertiesAndObjects = function (data) { + //save steps Objects Case Tracker + var i, j; + index = 0; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + idObject = (typeof gridPanelObjects.getItems()[i].getData().cto_uid_obj != 'undefined') ? gridPanelObjects.getItems()[i].getData().cto_uid_obj : gridPanelObjects.getItems()[i].getData().obj_uid; + index = arrayObjectStepsCaseTracker.indexOf(idObject); + if (index <= -1) { + saveItem(gridPanelObjects.getItems()[i]); + } else { + updateItem(gridPanelObjects.getItems()[i], i); + } + } + ; + for (i = 0; i < arrayObjectAvailableObjects.length; i += 1) { + for (j = 0; j < arrayObjectDropAssignedObjects.length; j += 1) { + index = (arrayObjectAvailableObjects[i] == arrayObjectDropAssignedObjects[j].cto_uid_obj) ? 0 : 1; + if (index == 0) { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'case-tracker/object/' + arrayObjectDropAssignedObjects[j].cto_uid, + "method": 'DELETE' + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + }); + restClient.executeRestClient(); + break; + } + } + } + + //save Properties Case Tracker + data ['map_type'] = data ['map_type'] == '["1"]' ? "PROCESSMAP" : "NONE"; + data ['routing_history'] = data ['routing_history'] == '["1"]' ? 1 : 0; + data ['message_history'] = data ['message_history'] == '["1"]' ? 1 : 0; + restClient = new PMRestClient({ + endpoint: 'case-tracker/property', + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + caseTrackerWindow.close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems updating the Case Tracker, please try again.".translate(), + messageSuccess: 'Case Tracker updated successfully'.translate(), + flashContainer: document.body + }); + restClient.executeRestClient(); + }; + + caseTrackerForm = new PMUI.form.Form({ + id: 'caseTrackerForm', + fieldset: true, + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + height: 30, + layout: "hbox", + items: [ + { + pmType: "annotation", + text: "Display :".translate(), + id: "DisplayMessage", + name: "DisplayMessage" + }, + { + id: 'map_type', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + label: 'Processmap'.translate(), + value: '1' + } + ] + }, + { + id: 'routing_history', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + label: 'Routing History'.translate(), + value: '1' + } + ] + }, + { + id: 'message_history', + pmType: 'checkbox', + labelVisible: false, + options: [ + { + id: 'message_history', + label: 'Messages'.translate(), + value: '1' + } + ] + } + ], + style: { + cssProperties: { + 'margin-bottom': '70px' + } + } + }); + + //objects + loadGridCaseTacker = function (data) { + var i; + for (i = 0; i < data.length; i += 1) { + switch (data[i]['cto_type_obj']) { + case 'DYNAFORM': + label = 'Dynaform'.translate(); + break; + case 'INPUT_DOCUMENT': + label = 'Input Document'.translate(); + break; + case 'OUTPUT_DOCUMENT': + label = 'OutPut Document'.translate(); + break; + case 'EXTERNAL_STEP': + label = 'External Step'.translate(); + break; + default: + label = data[i]['tri_type']; + break; + } + data[i]['obj_label'] = label; + } + gridPanelObjects.setDataItems(data); + }; + + getValuesCaseTrackerObjects = function () { + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": "case-tracker/available-objects", + "method": 'GET' + }, + { + "url": "case-tracker/objects", + "method": 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + dataTree = []; + orderDataTree(response[0].response); + treePanelObjects.setDataItems(dataTree); + loadGridCaseTacker(response[1].response); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + saveItem = function (rowStep) { + rowStep = rowStep.getData(); + data = { + "cto_type_obj": rowStep.obj_type, + "cto_uid_obj": rowStep.obj_uid, + "cto_condition": (typeof rowStep.cto_condition != 'undefined') ? rowStep.cto_condition : '', + "cto_position": rowStep.cto_position + }; + restClient = new PMRestClient({ + endpoint: 'case-tracker/object', + typeRequest: 'post', + data: data, + functionSuccess: function (xhr, response) { + data = response; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems saved, please try again.".translate() + }); + restClient.executeRestClient(); + return data; + }; + + updateItem = function (rowStep, i) { + rowStep = rowStep.getData(); + rowStep.cto_position = i + 1; + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + "calls": [ + { + "url": 'case-tracker/object/' + rowStep.cto_uid, + "method": 'PUT', + "data": rowStep + } + ] + }, + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + treePanelObjects = new PMUI.panel.TreePanel({ + id: 'treePanelObjects', + proportion: 0.5, + filterable: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + style: {cssClasses: ['itemsSteps']}, + nodeDefaultSettings: { + behavior: "drag", + labelDataBind: 'obj_title', + itemsDataBind: 'items', + collapsed: false, + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + autoBind: true + } + }); + + editCondition = function () { + var visible, dataEdit; + + conditionform = new PMUI.form.Form({ + id: 'conditionform', + title: "", + fieldset: true, + visibleHeader: false, + width: 500, + items: [ + new CriteriaField({ + id: 'cto_condition', + pmType: 'textarea', + name: 'cto_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 200, + width: 250, + controlsWidth: 285, + renderType: 'textarea' + }) + ] + }); + + if (rowStep != '' && rowStep != undefined) { + dataEdit = conditionform.getFields(); + dataEdit[0].setValue(rowStep['cto_condition']); + } + + conditionWindows = new PMUI.ui.Window({ + id: 'conditionWindows', + title: 'Condition'.translate(), + width: 500, + height: 'auto', + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + buttonPanelPosition: 'bottom', + footerAlign: "right", + onBeforeClose: conditionformIsDirty, + buttons: [ + { + id: 'conditionObjectWindowButtonClose', + text: "Cancel".translate(), + handler: conditionformIsDirty, + buttonType: 'error' + }, + { + id: 'conditionObjectWindowButtonSave', + text: "Save".translate(), + handler: function () { + var i, item; + if (conditionform.isValid()) { + idrowStep = (typeof rowStep.cto_uid_obj != 'undefined') ? rowStep.cto_uid_obj : rowStep.obj_uid; + for (i = 0; i < gridPanelObjects.getItems().length; i += 1) { + item = gridPanelObjects.getItems()[i].getData(); + idObj = (typeof item.cto_uid_obj != 'undefined') ? item.cto_uid_obj : item.obj_uid; + if (idObj == idrowStep) { + rowStep.cto_condition = conditionform.getData()['cto_condition']; + gridPanelObjects.getItems()[i].setData(rowStep); + break; + } + } + conditionWindows.close(); + } + }, + buttonType: 'success' + } + ] + }); + conditionWindows.addItem(conditionform); + conditionWindows.open(); + conditionWindows.showFooter(); + applyStyleWindowForm(conditionWindows); + conditionWindows.defineEvents(); + conditionWindows.footer.html.style.textAlign = 'right'; + conditionform.setFocus(); + style = $('#cto_condition .pmui-field-label').attr("style"); + style = style + ' float: left;'; + $('#cto_condition .pmui-field-label').attr("style", style); + }; + + gridPanelObjects = new PMUI.grid.GridPanel({ + id: 'gridPanelObjects', + proportion: 1.5, + visibleFooter: false, + filterable: false, + width: '640px', + style: {cssClasses: ['itemsSteps']}, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + behavior: 'dragdropsort', + columns: [ + { + title: 'Title'.translate(), + dataType: 'string', + width: 330, + alignment: "left", + columnData: "obj_title", + sortable: false, + alignmentCell: 'left' + }, + { + title: 'Type'.translate(), + dataType: 'string', + width: 120, + alignment: "left", + columnData: "obj_label", + sortable: false, + alignmentCell: 'left' + }, + { + id: 'gridPanelObjectsButtonProperties', + title: '', + dataType: 'button', + buttonLabel: "Condition".translate(), + iconPosition: "center", + buttonStyle: {cssClasses: ['mafe-button-editstep']}, + buttonTooltip: 'Edit Properties'.translate(), + onButtonClick: function (row, grid) { + rowStep = row.getData(); + editCondition(); + } + }, + { + id: 'gridPanelObjectsButtonDelete', + title: '', + dataType: 'button', + buttonLabel: '', + buttonStyle: {cssClasses: ['mafe-button-delete-assign']}, + buttonTooltip: 'Remove Object'.translate(), + onButtonClick: function (row, grid) { + flagEdit = 1; + rowStep = row.getData(); + index = (row.getData().cto_uid_obj != 'undefined') ? arrayObjectStepsCaseTracker.indexOf(row.getData().cto_uid_obj) : arrayObjectStepsCaseTracker.indexOf(row.getData().obj_uid); + if (index > -1) { + arrayObjectAvailableObjects.push(row.getData().cto_uid_obj); + arrayObjectStepsCaseTracker.splice(index, 1); + } + objType = (typeof row.getData().cto_type_obj != 'undefined') ? row.getData().cto_type_obj : row.getData().obj_type; + grid.removeItem(row); + switch (objType) { + case 'DYNAFORM': + treePanelObjects.getItems()[0].addItem(row); + break; + case 'INPUT_DOCUMENT': + treePanelObjects.getItems()[1].addItem(row); + break; + case 'OUTPUT_DOCUMENT': + treePanelObjects.getItems()[2].addItem(row); + break; + case 'EXTERNAL_STEP': + treePanelObjects.getItems()[3].addItem(row); + break; + default: + break; + } + } + } + ], + onDrop: function (grid, item, index) { + flagEdit = 1; + if (item.data.customKeys.obj_uid === '') { + return false; + } + rowStep = item.getData(); + rowStep.cto_position = index + 1; + item.setData(rowStep); + + index = (typeof item.getData().cto_uid_obj != 'undefined') ? arrayObjectAvailableObjects.indexOf(item.getData().cto_uid_obj) : arrayObjectAvailableObjects.indexOf(item.getData().obj_uid); + + if (index > -1) { + itemPush = (typeof item.getData().cto_uid_obj != 'undefined') ? item.getData().cto_uid_obj : item.getData().obj_uid; + arrayObjectStepsCaseTracker.push(itemPush); + arrayObjectAvailableObjects.splice(index, 1); + } + }, + onSort: function (grid, item, index) { + rowStep = item.getData(); + } + }); + + titleTreeObjects = new PMUI.ui.TextLabel({ + id: "titleTreeObjects", + textMode: 'plain', + text: 'Available Objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-steps-tree' + ] + } + }); + + titleGridObjects = new PMUI.ui.TextLabel({ + id: "titleGridObjects", + textMode: 'plain', + text: 'Assigned objects'.translate(), + style: { + cssClasses: [ + 'mafe-designer-stesp-grid' + ] + } + }); + + panelLabelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + fieldset: true, + items: [ + titleTreeObjects, + titleGridObjects + ], + style: { + cssProperties: { + 'margin-bottom': 4, + 'margin-top': 4, + 'margin-left': 4 + } + }, + layout: "hbox" + }); + + panelContainerObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: 320, + fieldset: true, + items: [ + treePanelObjects, + gridPanelObjects + ], + layout: "hbox" + }); + + panelObjects = new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH * 0.94, + height: DEFAULT_WINDOW_HEIGHT * 0.70, + fieldset: true, + items: [ + panelLabelObjects, + panelContainerObjects + ], + layout: "vbox" + }); + + caseTrackerWindow = new PMUI.ui.Window({ + id: 'caseTrackerWindow', + title: "Case Tracker".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerHeight: 'auto', + bodyHeight: 'auto', + modal: true, + buttonPanelPosition: "bottom", + onBeforeClose: formIsDirty, + visibleFooter: false, + footerAling: "right", + footerItems: [{ + id: 'btnCloseCaseTracker', + text: 'Cancel'.translate(), + buttonType: "error", + handler: formIsDirty + }, + { + id: 'btnSaveCaseTracker', + text: "Save".translate(), + buttonType: "success", + handler: function () { + if (caseTrackerForm.isValid()) { + data = caseTrackerForm.getData(); + updateCaseTrackerPropertiesAndObjects(data); + } + } + } + ], + spaceButtons: 30 + }); + + caseTrackerWindow.addItem(caseTrackerForm); + caseTrackerWindow.addItem(panelObjects); + caseTrackerWindow.open(); + caseTrackerWindow.showFooter(); + applyStyleWindowForm(caseTrackerWindow); + caseTrackerWindow.defineEvents(); + caseTrackerWindow.footer.html.style.textAlign = 'right'; + caseTrackerForm.setFocus(); + + applyStylesWindow = function () { + $('#gridPanelObjects .pmui-gridpanel-tableContainer').css({'height': 'auto'}); + $('#caseTrackerForm :eq(2)').css({'padding': '0px 10px 0px 10px'}); + $('#caseTrackerForm :eq(0)').remove(); + items = caseTrackerWindow.getItems()[0].getItems(); + $(items[1].getHTML()).find('table').css('border', 'none'); + $(items[2].getHTML()).find('table').css('border', 'none'); + $(items[3].getHTML()).find('table').css('border', 'none'); + }; + + showObjects = function () { + disableAllItems(); + + loadPropertiesCaseTracker(); + caseTrackerWindow.getItems()[0].setVisible(true); + caseTrackerWindow.showFooter(); + caseTrackerWindow.setTitle("Case Tracker Properties".translate()); + + if (dataCaseTracker != '') { + var dataEdit = caseTrackerForm.getFields(); + dataEdit[1].setValue((dataCaseTracker['map_type'] == 'PROCESSMAP') ? '["1"]' : '[]'); + dataEdit[2].setValue((dataCaseTracker['routing_history'] == 1) ? '["1"]' : '[]'); + dataEdit[3].setValue((dataCaseTracker['message_history'] == 1) ? '["1"]' : '[]'); + } + + + getValuesCaseTrackerObjects(); + caseTrackerWindow.getItems()[1].setVisible(true); + caseTrackerWindow.setTitle("Case Tracker".translate()); + + caseTrackerWindow.body.style.overflow = 'initial'; + + gridPanelObjects.style.addProperties({overflow: 'auto'}); + gridPanelObjects.style.addProperties({float: 'right'}); + gridPanelObjects.setWidth(640); + gridPanelObjects.setHeight(270); + applyStylesWindow(); + treePanelObjects.style.addProperties({float: 'left'}); + treePanelObjects.style.addProperties({overflow: 'auto'}); + treePanelObjects.setWidth(200); + treePanelObjects.setHeight(270); + + applyStyleTreePanel(treePanelObjects); + + panelLabelObjects.setHeight(15); + caseTrackerWindow.defineEvents(); + + caseTrackerWindow.setBodyPadding(5); + + panelObjects.style.addProperties({marginLeft: '15px'}); + for (var i = 0; i < gridPanelObjects.getItems().length; i += 1) { + arrayObjectStepsCaseTracker[i] = gridPanelObjects.getItems()[i].getData().cto_uid_obj; + arrayObjectDropAssignedObjects[i] = gridPanelObjects.getItems()[i].getData(); + } + }; + showObjects(); + }; + + PMDesigner.caseTracker.showObjects = function () { + PMDesigner.caseTracker(); + }; + +}()); +PMDesigner.gatewayProperties = function (gateway) { + if (gateway.getGatewayType() !== "PARALLEL") { + PMDesigner.RoutingRule(gateway); + } +}; + +PMDesigner.RoutingRule = function (shape) { + var formRoutingRule, + formPanelSelected, + arrayShapeIdRemoved = [], + buttonAdd, + windowConnections, + warningMessageWindowDelete, + warningMessageWindowDirty, + containerLabels, + deleteButton, + buttonSave, + buttonCancel, + labelNextTask, + labelCondition, + typeShapeValueText, + dataRouteGroup = [], + arrayElementName = [], + availableShapes = []; + + warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDelete', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + message: 'Do you want to delete this routing rule?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, + { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteRow(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + warningMessageWindowDirty = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDirty', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDirtyButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDirtyButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + windowConnections.close(); + }, + buttonType: "success" + } + ] + }); + + buttonAdd = new PMUI.ui.Button({ + id: 'routingRuleButtonAdd', + text: 'Add Routing Rule'.translate(), + style: { + cssProperties: { + marginLeft: '50px', + marginTop: '10px', + marginBottom: '10px', + padding: "5px" + } + }, + buttonType: 'success', + handler: function () { + // to add a new row + addRow(); + enableSorting(); + } + }); + buttonSave = new PMUI.ui.Button({ + id: 'windowConnectionsButtonSave', + text: 'Save'.translate(), + handler: function () { + //validate routing rules form + if (isValidRoutingRules()) { + //remove all flows an get points + var allPoints = removeConnectionsIntoCanvas(); + saveConnections(allPoints); + } + + }, + buttonType: 'success' + }); + buttonCancel = new PMUI.ui.Button({ + id: 'windowConnectionsButtonCancel', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + if (formRoutingRule.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowConnections.close(); + } + } + }); + + labelNextTask = new PMUI.ui.TextLabel({ + text: 'Next Task'.translate() + }); + labelNextTask.setWidth(382); + labelNextTask.style.addProperties({padding: '5px 0px 0px 50px'}); + + labelCondition = new PMUI.ui.TextLabel({ + text: 'Condition'.translate() + }); + labelCondition.setWidth(410); + labelCondition.style.addProperties({padding: '5px 0px 0px 5px'}); + labelCondition.style.addProperties({marginLeft: '31%'}); + + containerLabels = new PMUI.core.Panel({ + layout: 'hbox', + width: 'auto', + height: 29, + style: { + cssProperties: { + 'border-bottom': '1px solid #c0c0c0' + } + } + }); + containerLabels.addItem(labelNextTask); + containerLabels.addItem(labelCondition); + containerLabels.style.addProperties({'border-bottom': '1px solid #e7e7e7'}); + + formRoutingRule = new PMUI.form.Form({ + id: 'formRoutingRule', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + height: 'auto', + items: [], + style: { + cssProperties: { + 'margin-left': '35px' + } + } + }); + formRoutingRule.hideFooter(); + + windowConnections = new PMUI.ui.Window({ + id: 'windowConnections', + title: 'Routing Rule'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + buttonPanelPosition: 'bottom', + items: [ + buttonAdd + ], + buttons: [ + buttonCancel, + buttonSave + ] + }); + + typeShapeValueText = (shape.gat_type === 'EXCLUSIVE') ? 'EXCLUSIVE'.translate() : 'INCLUSIVE'.translate(); + windowConnections.setTitle('Routing Rule'.translate() + ' - ' + typeShapeValueText); + windowConnections.showFooter(); + windowConnections.addItem(containerLabels); + if (formRoutingRule.dirty === null) { + formRoutingRule.dirty = false; + } + windowConnections.addItem(formRoutingRule); + windowConnections.open(); + + loadConnections(); + enableSorting(); + /** + * add a new row + * @returns {PMUI.form.FormPanel|*} + */ + function addRow() { + var dropDownControl, + criteriaField, + deleteButton, + newRow, + max, + i; + newRow = new PMUI.form.FormPanel({ + layout: 'hbox' + }); + + dropDownControl = new PMUI.field.DropDownListField({ + id: 'dropdownNextTask', + name: 'act_name', + valueType: 'string', + label: 'Next Task'.translate(), + labelPosition: 'top', + labelVisible: false, + value: '', + readOnly: false, + controlsWidth: 360, + proportion: 0.9, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + criteriaField = new CriteriaField({ + id: 'textCondition', + pmType: 'text', + renderType: 'textarea', + name: 'flo_condition', + valueType: 'string', + label: 'Condition'.translate(), + labelPosition: 'top', + labelVisible: false, + controlsWidth: 345, + required: false, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + deleteButton = new PMUI.field.ButtonField({ + id: 'buttonDelete', + value: 'Delete'.translate(), + handler: function (e, a) { + formPanelSelected = this.getParent(); + warningMessageWindowDelete.open(); + warningMessageWindowDelete.dom.titleContainer.style.height = '17px'; + warningMessageWindowDelete.showFooter(); + enableSorting(); + }, + name: 'delete', + labelVisible: false, + buttonAling: 'left', + controlsWidth: 60, + proportion: 0.1, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + newRow.addItem(dropDownControl); + newRow.addItem(criteriaField); + newRow.addItem(deleteButton); + loadOptions(dropDownControl); + //apply styles; + if (availableShapes && availableShapes.length > 0) { + deleteButton.controls[0].button.setButtonType('error'); + $(deleteButton.getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(newRow); + for (i = 0, max = formRoutingRule.getItems().length; i < max; i += 1) { + formRoutingRule.getItems()[i].style.addProperties({'padding': 'initial'}); + } + dropDownControl.dom.labelTextContainer.style.display = 'none'; + criteriaField.dom.labelTextContainer.style.display = 'none'; + criteriaField.setValue(true); + } else { + PMDesigner.msgFlash('There are no items.'.translate(), windowConnections.footer, 'error'); + } + return newRow; + } + + function loadOptions(dropdown) { + var i, + customShapes, + element, + nameGroup, + evnLabelMap; + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + dropdown.clearOptions(); + dropdown.setUID = function (uid) { + this.uid = uid; + }; + dropdown.getUID = function () { + return this.uid; + }; + dropdown.addOptionGroup({ + label: 'Task'.translate(), + selected: true, + options: [] + }); + dropdown.addOptionGroup({ + label: 'Sub-process'.translate(), + options: [] + }); + dropdown.addOptionGroup({ + label: 'Event'.translate(), + options: [] + }); + dropdown.addOptionGroup({ + label: 'Gateway'.translate(), + options: [] + }); + customShapes = PMUI.getActiveCanvas().getCustomShapes(); + + for (i = 0; i < customShapes.getSize(); i += 1) { + element = customShapes.get(i); + // verify pool and participant + if (element.getType() !== 'PMParticipant' && element.getType() !== 'PMPool') { + //itself verify and same parent + if (shape.getID() !== element.getID() + && element.businessObject + && shape.businessObject + && shape.businessObject.elem.$parent + && element.businessObject.elem.$parent + && element.businessObject.elem.$parent.id === shape.businessObject.elem.$parent.id) { + switch (element.type) { + case 'PMActivity': + nameGroup = element.act_type === 'TASK' ? 'Task'.translate() : 'Sub-process'.translate(); + dropdown.addOption({ + value: element.act_uid, + label: element.act_name + }, nameGroup); + arrayElementName[element.act_uid] = element.act_name; + availableShapes.push(element); + break; + case 'PMEvent': + evnLabelMap = { + 'END': 'End Event'.translate(), + 'INTERMEDIATE': 'Intermediate Event'.translate() + }; + + if (element.evn_type !== 'START') { + dropdown.addOption({ + value: element.evn_uid, + label: element.evn_name || evnLabelMap[element.evn_type] + }, 'Event'.translate()); + + arrayElementName[element.evn_uid] = element.evn_name || evnLabelMap[element.evn_type]; + availableShapes.push(element); + } + break; + case 'PMGateway': + dropdown.addOption({ + value: element.gat_uid, + label: element.gat_name || 'Gateway'.translate() + }, 'Gateway'); + arrayElementName[element.gat_uid] = element.gat_name || 'Gateway'.translate(); + availableShapes.push(element); + break; + } + } + } + } + } + + function removeConnectionsIntoCanvas() { + var shapeDest, connection, dt, allPoints = {}, i, j; + for (j = 0; j < arrayShapeIdRemoved.length; j += 1) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', arrayShapeIdRemoved[j]); + dt = shape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() === connection.getSrcPort().getParent().getID() && + shapeDest.getID() === connection.getDestPort().getParent().getID()) { + //caching points + allPoints[shapeDest.getID()] = getPoints(connection); + removeConnection(connection); + + break; + } + } + } + arrayShapeIdRemoved = []; + return allPoints; + } + + /** + * to remove a individual connection and getting points + * @param connection + */ + function removeConnection(connection) { + PMUI.getActiveCanvas().emptyCurrentSelection(); + PMUI.getActiveCanvas().setCurrentConnection(connection); + PMUI.getActiveCanvas().executeCommandDelete(); + connection.saveAndDestroy(); + PMUI.getActiveCanvas().removeConnection(connection); + } + + /** + * gets conenctions inital and final points + * @param connection + */ + function getPoints(connection) { + var result = []; + result[0] = connection.points[0]; + result[1] = connection.points[connection.points.length - 1]; + return result; + } + + + function editAllConnections(connArray) { + var i, + elem, + canvas = PMUI.getActiveCanvas(); + for(i = 0; i < connArray.length; i += 1) { + elem = connArray[i]; + if (elem && elem.connection) { + elem.oldShapeDest.removePort(elem.connection.destPort); + elem.shapeDest.addPort(elem.connection.destPort, 100, 100, + false, elem.connection.srcPort); + + elem.connection.lineSegments.clear(); + canvas.commandStack.add(new PMUI.command.CommandConnect(elem.connection)); + elem.connection.connect(); + canvas.triggerPortChangeEvent(elem.connection.destPort); + } + } + } + + + function createEndShape() { + var customShape, canvas = PMUI.getActiveCanvas(), command, x, y; + customShape = canvas.shapeFactory('END'); + + x = shape.getX() + shape.getWidth(); + y = shape.getY() + shape.getHeight() + 20; + + canvas.addElement(customShape, x, y, + customShape.topLeftOnCreation); + + //since it is a new element in the designer, we triggered the + //custom on create element event + canvas.updatedElement = customShape; + + // create the command for this new shape + command = new PMUI.command.CommandCreate(customShape); + canvas.commandStack.add(command); + command.execute(); + return customShape; + } + + /** + * new method to validate routing rules + * @returns {boolean} + */ + function isValidRoutingRules() { + var result = true, + arrayAux = [], + i, + max, + id, + dt = formRoutingRule.getItems(); + if (!formRoutingRule.isValid()) { + result = false; + return; + } + + for (i = 0, max = dt.length; i < max; i += 1) { + id = dt[i].getField("act_name").getValue(); + if (typeof(arrayAux[id]) === "undefined") { + arrayAux[id] = "1"; + } else { + result = false; + PMDesigner.msgWinError("The routing rule to \"{0}\" already exists".translate([arrayElementName[id]])); + return; + } + } + return result; + } + + function saveConnections(allPoints) { + var dt = formRoutingRule.getItems(), + id, + i, + oldId, + shapeDest, + oldShapeDest, + connection, + newConnection, + dataRouteAll, + dataRoute, + restClient, + newPoints, + conectionsArray = []; + + + for (i = 0; i < dt.length; i += 1) { + id = dt[i].getField('act_name').getValue(); + oldId = dt[i].getField('act_name').getUID(); + if (id !== '0') { + dataRouteGroup.push(id); + if (dt[i].getField('flo_condition').getValue() == "") { + dt[i].getField('flo_condition').setValue(true); + } + if (oldId === undefined) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + //getting current connection + + newPoints = allPoints[id]; + + newConnection = createConnection(shape, shapeDest, newPoints); + newConnection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + } + if (oldId !== undefined && id === oldId) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + connection = isConnection(shape, shapeDest); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + } + if (oldId !== undefined && id !== oldId) { + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + oldShapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', oldId); + connection = isConnection(shape, oldShapeDest); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + + if (typeof(connection) != "object") { + connection = createConnection(shape, shapeDest); + } + + connection.setFlowCondition(dt[i].getField('flo_condition').getValue()); + + conectionsArray.push({ + "connection" : isConnection(shape, oldShapeDest) || null, + "shapeDest": shapeDest, + "oldShapeDest": oldShapeDest + }); + } + } else { + var customShape = createEndShape(); + createConnection(shape, customShape); + } + } + editAllConnections(conectionsArray); + + /*update routing order*/ + dataRouteAll = []; + for (i = 0; i < dataRouteGroup.length; i += 1) { + dataRoute = { + 'rou_case': parseInt(i) + 1, + 'rou_next_task': dataRouteGroup[i], + 'pro_uid': PMDesigner.project.id + }; + dataRouteAll.push(dataRoute); + } + restClient = new PMRestClient({ + endpoint: 'update-route-order', + typeRequest: 'update', + data: dataRouteAll, + functionSuccess: function () { + PMDesigner.msgFlash('Saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the routing rule, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + /*end update routing order*/ + + windowConnections.close(); + PMDesigner.msgFlash('Saved correctly'.translate(), document.body); + PMDesigner.project.dirty = true; + PMDesigner.project.setDirty(true); + } + + function createConnection(sourceShape, shape, points) { + var sourcePort, endPort, connection, canvas = PMUI.getActiveCanvas(), points; + sourcePort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + endPort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + if (!points) { + points = findBestPorts(sourceShape, shape); + } + sourceShape.addPort(sourcePort, points[0].x - sourceShape.getZoomX(), points[0].y - sourceShape.getZoomY()); + shape.addPort(endPort, points[1].x - shape.getZoomX(), points[1].y - shape.getZoomY(), false, sourcePort); + + //add ports to the canvas array for regularShapes + //shape.canvas.regularShapes.insert(sourcePort).insert(endPort); + //create the connection + connection = new PMFlow({ + srcPort: sourcePort, + destPort: endPort, + segmentColor: new PMUI.util.Color(0, 0, 0), + name: '', + canvas: shape.canvas, + segmentStyle: shape.connectionType.segmentStyle, + flo_type: shape.connectionType.type + }); + connection.setSrcDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.srcDecorator !== 'undefined' + && shape.connectionType.srcDecorator !== null) ? + shape.connectionType.srcDecorator : 'mafe-sequence', + decoratorType: 'source', + parent: connection + })); + connection.setDestDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.destDecorator !== 'undefined' + && shape.connectionType.destDecorator !== null) ? + shape.connectionType.destDecorator : 'mafe-sequence', + decoratorType: 'target', + parent: connection + })); + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + + //connect the two ports + connection.connect(); + connection.setSegmentMoveHandlers(); + + //add the connection to the canvas, that means insert its html to + // the DOM and adding it to the connections array + canvas.addConnection(connection); + + // Filling PMFlow fields + connection.setTargetShape(endPort.parent); + connection.setOriginShape(sourcePort.parent); + connection.savePoints(); + + // now that the connection was drawn try to create the intersections + connection.checkAndCreateIntersectionsWithAll(); + + //attaching port listeners + sourcePort.attachListeners(sourcePort); + endPort.attachListeners(endPort); + + // finally trigger createEvent + canvas.triggerCreateEvent(connection, []); + connection.flo_state = connection.points; + return connection; + } + + function findBestPorts(sourceShape, shape) { + var result = [], i, j, + distance = 99999999, + initPoint, + secondPoint, + midPoints = getMiddlePoints(sourceShape), + midPoints2 = getMiddlePoints(shape); + for (i = 0; i < midPoints.length; i += 1) { + initPoint = midPoints[i]; + for (j = 0; j < midPoints2.length; j += 1) { + secondPoint = midPoints2[j]; + if (distance > initPoint.getManhattanDistance(secondPoint)) { + distance = initPoint.getManhattanDistance(midPoints2[j]); + result[0] = (initPoint); + result[1] = (midPoints2[j]); + } + } + } + return result; + } + + function getMiddlePoints(shape) { + return [ + new PMUI.util.Point(Math.round(shape.zoomWidth / 2) + shape.getZoomX(), 0 + shape.getZoomY()), // TOP + new PMUI.util.Point(shape.zoomWidth + shape.getZoomX(), Math.round(shape.zoomHeight / 2) + shape.getZoomY()), // RIGHT + new PMUI.util.Point(Math.round(shape.zoomWidth / 2) + shape.getZoomX(), shape.zoomHeight + shape.getZoomY()), // BOTTOM + new PMUI.util.Point(0 + shape.getZoomX(), Math.round(shape.zoomHeight / 2) + shape.getZoomY()) // LEFT + ]; + } + + function loadConnections() { + var row, connection, dt = shape.getPorts().asArray(), + i, j; + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID() && shape.gat_default_flow !== connection.flo_uid) { + row = addRow(); + row.getField('act_name').setValue(connection.getDestPort().getParent().getID()); + row.getField('act_name').setUID(connection.getDestPort().getParent().getID()); + row.getField('flo_condition').setValue(connection.getFlowCondition()); + + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + $(row.getItems()[2].getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = 'none'; + row.getItems()[1].dom.labelTextContainer.style.display = 'none'; + } + } + } + + function isConnection(sourceShape, shape) { + var connection, + i, + dt = sourceShape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (sourceShape.getID() === connection.getSrcPort().getParent().getID() && + shape.getID() === connection.getDestPort().getParent().getID()) { + return connection; + } + } + return false; + } + + function deleteRow() { + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + PMDesigner.msgFlash('Routing rule removed correctly'.translate(), windowConnections.footer); + } + + function enableSorting() { + var index = 0, + div = $(formRoutingRule.getHTML()).find(">div:nth-child(2)").css({"overflow": "initial"}); + div.sortable({ + items: '>div', + placeholder: 'steps-placeholder', + cursor: "move", + change: function (event, ui) { + index = ui.placeholder.index(); + }, + start: function (event, ui) { + }, + stop: function (event, ui) { + var dt = [], + row, + formPanelSelected, + id, + i, + j, + shapeDest, + connection; + + ui.item.parent().find(">div").each(function (i, e) { + dt.push(PMUI.getPMUIObject(e)); + }); + for (i = 0; i < dt.length; i += 1) { + formPanelSelected = dt[i]; + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + } + for (i = 0; i < dt.length; i += 1) { + row = addRow(); + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + $(row.getItems()[2].getHTML()).find("a").css({ + padding: "5px" + }); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = 'none'; + row.getItems()[1].dom.labelTextContainer.style.display = 'none'; + row.getField('act_name').setValue(dt[i].getField('act_name').getValue()); + row.getField('flo_condition').setValue(dt[i].getField('flo_condition').getValue()); + id = dt[i].getField('act_name').getValue(); + shapeDest = PMUI.getActiveCanvas().getCustomShapes().find('id', id); + connection = isConnection(shape, shapeDest); + } + enableSorting(); + } + }); + } +}; + +PMDesigner.RoutingRuleDeleteAllFlow = function (shape) { + var warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: 'Routing Rule'.translate(), + id: 'warningMessageWindowDelete', + message: 'Do you want to delete all routing rules?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteAllConnection(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + + function deleteAllConnection() { + var connection, elements = [], + i, + sw, + msg, + ports; + PMUI.getActiveCanvas().emptyCurrentSelection(); + //IMPORTANT: You must empty elements in another array due to the array reference indices managed. + //referer: PMDesigner.canvas.removeConnection & element.getPorts().asArray() + + ports = shape.getPorts().asArray(); + for (i = 0; i < ports.length; i += 1) { + elements.push(ports[i]); + } + sw = false; + for (i = 0; i < elements.length; i += 1) { + connection = elements[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID()) { + PMUI.getActiveCanvas().setCurrentConnection(connection); + PMUI.getActiveCanvas().removeElements(); + connection.saveAndDestroy(); + PMUI.getActiveCanvas().removeConnection(connection); + sw = true; + } + } + msg = sw ? 'Routing rules deleted successfully' : 'There aren\'t routing rules'; + PMDesigner.msgFlash(msg.translate(), document.body); + } + + warningMessageWindowDelete.open(); + warningMessageWindowDelete.showFooter(); + warningMessageWindowDelete.dom.titleContainer.style.height = '17px'; +}; + +PMDesigner.RoutingRuleSetOrder = function (diagram) { + var restClient = new PMRestClient({ + endpoint: 'update-route-order-from-project', + typeRequest: 'update', + data: {}, + functionSuccess: function () { + PMDesigner.msgFlash('Saved correctly'.translate(), document.body, 'success', 3000, 5); + } + }); + restClient.executeRestClient(); +}; +PMDesigner.dynaformDesigner = function (data) { + var old = PMUI.activeCanvas, a; + PMUI.activeCanvas = false; + a = new FormDesigner.main.Designer(data); + a.show(); + a.onHide = function () { + PMUI.activeCanvas = old; + }; + return a; +}; + +PMDesigner.complexRoutingRule = function (shape) { + var formRoutingRule, + formPanelSelected, + arrayShapeIdRemoved = [], + buttonAdd, + windowConnections, + warningMessageWindowDelete, + containerLabels, + buttonSave, + buttonCancel, + labelNextTask, + labelCondition, + warningMessageWindowDirty, + deleteButton; + + //Window + //button add routing rule + buttonAdd = new PMUI.ui.Button({ + id: 'routingRuleButtonAdd', + text: 'Add Routing Rule'.translate(), + style: { + cssProperties: { + marginLeft: '50px', + marginTop: '10px', + marginBottom: '10px', + fontSize: '16px' + } + }, + buttonType: 'success', + height: 31, + handler: function () { + var item, btnDel; + if (countActivities() > 0) { + item = addRow(); + item.getItems()[2].style.addProperties({display: 'none'}); + item.getItems()[2].controls[0].button.setButtonType('error'); + formRoutingRule.addItem(item); + for (var i = 0; i < formRoutingRule.getItems().length; i += 1) { + //formRoutingRule.getItems()[i].style.addProperties({'box-sizing': 'initial'}); + //item.style.addProperties({padding : 'initial'}); + formRoutingRule.getItems()[i].style.addProperties({'padding': 'initial'}); + } + item.getItems()[0].dom.labelTextContainer.style.display = "none"; + item.getItems()[1].dom.labelTextContainer.style.display = "none"; + + } else { + PMDesigner.msgFlash('There are no items.'.translate(), windowConnections.footer); + } + } + }); + //button Save + buttonSave = new PMUI.ui.Button({ + id: 'windowConnectionsButtonSave', + text: 'Apply'.translate(), + handler: function () { + removeConnectionsIntoCanvas(); + saveConnections(); + }, + buttonType: 'success', + height: 31 + }); + //Button cancel + buttonCancel = new PMUI.ui.Button({ + id: 'windowConnectionsButtonCancel', + text: 'Cancel'.translate(), + buttonType: 'error', + handler: function () { + if (formRoutingRule.isDirty()) { + warningMessageWindowDirty.open(); + warningMessageWindowDirty.showFooter(); + } else { + windowConnections.close(); + } + } + }); + + windowConnections = new PMUI.ui.Window({ + id: 'windowConnections', + title: 'Routing Rule'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + buttonPanelPosition: 'top', + items: [ + buttonAdd + ], + buttons: [ + buttonCancel, + buttonSave + ] + }); + windowConnections.showFooter(); + //END WINDOW + + containerLabels = new PMUI.core.Panel({ + layout: 'hbox', + width: 'auto', + height: 29, + style: { + cssProperties: { + 'border-bottom': '1px solid #c0c0c0' + } + } + }); + + labelNextTask = new PMUI.ui.TextLabel({ + text: 'Next Task'.translate(), + style: { + cssProperties: { + 'font-weight': 'bold' + } + } + }); + + labelCondition = new PMUI.ui.TextLabel({ + text: 'Description'.translate(), + style: { + cssProperties: { + 'font-weight': 'bold' + } + } + }); + + containerLabels.addItem(labelNextTask); + containerLabels.addItem(labelCondition); + + windowConnections.addItem(containerLabels); + + formRoutingRule = new PMUI.form.Form({ + id: 'formRoutingRule', + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + height: 'auto', + items: [], + style: { + cssProperties: { + 'margin-left': '35px' + } + } + }); + + warningMessageWindowDelete = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDelete', + windowMessageType: 'warning', + width: 490, + title: "Routing Rule".translate(), + bodyHeight: 'auto', + message: 'Do you want to delete this routing rule?'.translate(), + footerItems: [ + { + id: 'warningMessageWindowDeleteButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDelete.close(); + }, + buttonType: "error" + }, { + id: 'warningMessageWindowDeleteButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + deleteRow(); + warningMessageWindowDelete.close(); + }, + buttonType: "success" + } + ] + }); + + warningMessageWindowDirty = new PMUI.ui.MessageWindow({ + id: 'warningMessageWindowDirty', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Routing Rule".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: 'warningMessageWindowDirtyButtonNo', + text: 'No'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + }, + buttonType: "error" + }, + { + id: 'warningMessageWindowDirtyButtonYes', + text: 'Yes'.translate(), + visible: true, + handler: function () { + warningMessageWindowDirty.close(); + windowConnections.close(); + }, + buttonType: "success" + } + ] + }); + + //main + formRoutingRule.hideFooter(); + windowConnections.addItem(formRoutingRule); + windowConnections.open(); + labelNextTask.setWidth(382); + labelNextTask.style.addProperties({padding: '5px 0px 0px 50px'}); + labelCondition.setWidth(410); + labelCondition.style.addProperties({padding: '5px 0px 0px 0px'}); + containerLabels.style.addProperties({'border-bottom': '1px solid #e7e7e7'}); + windowConnections.setTitle('Routing Rule'.translate() + ' - ' + ((shape.gat_type === 'COMPLEX') ? 'Exclusive (Manual)'.translate() : shape.gat_type)); + loadConnections(); + + function countActivities() { + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + var n = 0, i, dt; + dt = PMDesigner.project.getDirtyObject().diagrams[0].activities; + for (i = 0; i < dt.length; i += 1) { + n = n + 1; + } + + dt = PMDesigner.project.getDirtyObject().diagrams[0].events; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].evn_type !== 'START') { + n = n + 1; + } + } + return n; + } + + function addRow() { + + var dropDownControl, description, deleteButton, newRow; + + newRow = new PMUI.form.FormPanel({ + layout: 'hbox' + }); + + dropDownControl = new PMUI.field.DropDownListField({ + id: 'dropdownNextTask', + name: 'act_name', + valueType: 'string', + label: 'Next Task'.translate(), + labelPosition: 'top', + labelVisible: false, + value: '', + readOnly: true, + controlsWidth: 360, + proportion: 1.1, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + description = new PMUI.field.TextField({ + id: 'textCondition', + pmType: 'text', + name: 'flo_description', + valueType: 'string', + label: 'Description'.translate(), + labelPosition: 'top', + labelVisible: false, + controlsWidth: 320, + required: true, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + deleteButton = new PMUI.field.ButtonField({ + id: 'buttonDelete', + value: 'Delete'.translate(), + handler: function (e, a) { + var i; + for (i = 0; i < formRoutingRule.getItems().length; i += 1) { + if (formRoutingRule.getItems()[i].getItems()[2].controls[0].button.id == this.id) { + formPanelSelected = formRoutingRule.getItems()[i]; + warningMessageWindowDelete.open(); + warningMessageWindowDelete.dom.titleContainer.style.height = "17px"; + warningMessageWindowDelete.showFooter(); + } + } + + }, + name: 'delete', + labelVisible: false, + buttonAling: 'left', + controlsWidth: 100, + proportion: 0.3, + style: { + cssProperties: { + 'vertical-align': 'top' + } + } + }); + + newRow.addItem(dropDownControl); + newRow.addItem(description); + newRow.addItem(deleteButton); + loadActivities(dropDownControl); + return newRow; + } + + function loadActivities(dropdown) { + var i, dt; + //Important! Any changes to synchronize the assessment of the condition + //of the functions: countActivities and loadActivities + dropdown.clearOptions(); + dropdown.setUID = function (uid) { + this.uid = uid; + }; + dropdown.getUID = function () { + return this.uid; + }; + dropdown.addOptionGroup({ + label: 'Task'.translate(), + selected: true, + options: [] + }); + dropdown.addOptionGroup({ + label: 'Sub-process'.translate(), + options: [] + }); + dt = PMDesigner.project.getDirtyObject().diagrams[0].activities, nameGroup; + dt = dt.sort(function (a, b) { + return a.act_name.toString().toLowerCase() > b.act_name.toString().toLowerCase(); + }); + for (i = 0; i < dt.length; i += 1) { + nameGroup = dt[i].act_type === 'TASK' ? 'Task'.translate() : 'Sub-process'.translate(); + dropdown.addOption({ + value: dt[i].act_uid, + label: dt[i].act_name + }, nameGroup); + } + + dropdown.addOptionGroup({ + label: 'End of process'.translate(), + options: [] + }); + dt = PMDesigner.project.getDirtyObject().diagrams[0].events; + dt = dt.sort(function (a, b) { + return a.evn_name.toString().toLowerCase() > b.evn_name.toString().toLowerCase(); + }); + for (i = 0; i < dt.length; i += 1) { + if (dt[i].evn_type !== 'START') { + dropdown.addOption({ + value: dt[i].evn_uid, + label: dt[i].evn_name + }, 'End of process'.translate()); + } + } + } + + function removeConnectionsIntoCanvas() { + var shapeDest, connection, dt, i, j; + for (j = 0; j < arrayShapeIdRemoved.length; j += 1) { + shapeDest = getShapeForId(arrayShapeIdRemoved[j]); + dt = shape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() === connection.getSrcPort().getParent().getID() && + shapeDest.getID() === connection.getDestPort().getParent().getID()) { + PMDesigner.canvas.emptyCurrentSelection(); + PMDesigner.canvas.setCurrentConnection(connection); + PMDesigner.canvas.removeElements(); + connection.saveAndDestroy(); + PMDesigner.canvas.removeConnection(connection); + break; + } + } + } + arrayShapeIdRemoved = []; + } + + function editShapeDestConnection(shapeDest, oldShape) { + var connection, canvas = PMDesigner.canvas; + connection = isConnection(shape, oldShape); + oldShape.removePort(connection.destPort); + shapeDest.addPort(connection.destPort, 100, 100, + false, connection.srcPort); + + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + connection.connect(); + canvas.triggerPortChangeEvent(connection.destPort); + } + + function createEndShape() { + var customShape, canvas = PMDesigner.canvas, command, x, y; + customShape = canvas.shapeFactory('END'); + + x = shape.getX() + shape.getWidth(); + y = shape.getY() + shape.getHeight() + 20; + + canvas.addElement(customShape, x, y, + customShape.topLeftOnCreation); + + //since it is a new element in the designer, we triggered the + //custom on create element event + canvas.updatedElement = customShape; + + // create the command for this new shape + command = new PMUI.command.CommandCreate(customShape); + canvas.commandStack.add(command); + command.execute(); + return customShape; + } + + function saveConnections() { + var dt, i; + if (!formRoutingRule.isValid()) { + return; + } + dt = formRoutingRule.getItems(), id, oldId, shapeDest, oldShapeDest, connection; + for (i = 0; i < dt.length; i += 1) { + id = dt[i].getField('act_name').getValue(); + oldId = dt[i].getField('act_name').getUID(); + if (id !== '0') { + if (oldId === undefined) { + shapeDest = getShapeForId(id); + createConnection(shape, shapeDest).setFlowCondition(dt[i].getField('flo_description').getValue()); + } + if (oldId !== undefined && id === oldId) { + shapeDest = getShapeForId(id); + connection = isConnection(shape, shapeDest); + $a = connection; + connection.setFlowCondition(dt[i].getField('flo_description').getValue()); + } + if (oldId !== undefined && id !== oldId) { + shapeDest = getShapeForId(id); + oldShapeDest = getShapeForId(oldId); + connection = isConnection(shape, oldShapeDest); + connection.setFlowCondition(dt[i].getField('flo_description').getValue()); + editShapeDestConnection(shapeDest, oldShapeDest); + } + } else { + var customShape = createEndShape(); + createConnection(shape, customShape); + } + } + windowConnections.close(); + PMDesigner.msgFlash('Saved correctly'.translate(), document.body); + PMDesigner.project.dirty = true; + } + + function getShapeForId(id) { + var dt = PMDesigner.canvas.getChildren().asArray(), i; + for (i = 0; i < dt.length; i += 1) { + if (dt[i].act_uid === id || dt[i].evn_uid === id) { + return dt[i]; + } + } + return null; + } + + function createConnection(sourceShape, shape) { + //referer to /processmaker/vendor/colosa/MichelangeloFE/src/connectiondrop.js + //method PMConnectionDropBehavior.prototype.onDrop + var sourcePort, endPort, connection, canvas = PMDesigner.canvas; + sourcePort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + endPort = new PMUI.draw.Port({ + width: 10, + height: 10 + }); + + sourceShape.addPort(sourcePort, 100, 100); + shape.addPort(endPort, 100, 100, + false, sourcePort); + + //add ports to the canvas array for regularShapes + //shape.canvas.regularShapes.insert(sourcePort).insert(endPort); + //create the connection + connection = new PMFlow({ + srcPort: sourcePort, + destPort: endPort, + segmentColor: new PMUI.util.Color(92, 156, 204), + name: "", + canvas: shape.canvas, + segmentStyle: shape.connectionType.segmentStyle, + flo_type: shape.connectionType.type + }); + connection.setSrcDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.srcDecorator !== 'undefined' + && shape.connectionType.srcDecorator !== null) ? + shape.connectionType.srcDecorator : "mafe-sequence", + decoratorType: "source", + parent: connection + })); + connection.setDestDecorator(new PMUI.draw.ConnectionDecorator({ + width: 11, + height: 11, + canvas: canvas, + decoratorPrefix: (typeof shape.connectionType.destDecorator !== 'undefined' + && shape.connectionType.destDecorator !== null) ? + shape.connectionType.destDecorator : "mafe-sequence", + decoratorType: "target", + parent: connection + })); + connection.canvas.commandStack.add(new PMUI.command.CommandConnect(connection)); + + //connect the two ports + connection.connect(); + connection.setSegmentMoveHandlers(); + + //add the connection to the canvas, that means insert its html to + // the DOM and adding it to the connections array + canvas.addConnection(connection); + + // Filling PMFlow fields + connection.setTargetShape(endPort.parent); + connection.setOriginShape(sourcePort.parent); + connection.savePoints(); + + // now that the connection was drawn try to create the intersections + connection.checkAndCreateIntersectionsWithAll(); + + //attaching port listeners + sourcePort.attachListeners(sourcePort); + endPort.attachListeners(endPort); + + // finally trigger createEvent + canvas.triggerCreateEvent(connection, []); + return connection; + } + + function loadConnections() { + var row, connection, dt = shape.getPorts().asArray(), i, j; + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (shape.getID() !== connection.getDestPort().getParent().getID()) { + row = addRow(); + row.getField('act_name').setValue(connection.getDestPort().getParent().getID()); + row.getField('act_name').setUID(connection.getDestPort().getParent().getID()); + row.getField('flo_description').setValue(connection.getFlowCondition()); + + row.getItems()[2].style.addProperties({display: 'none'}); + row.getItems()[2].controls[0].button.setButtonType('error'); + formRoutingRule.addItem(row); + for (j = 0; j < formRoutingRule.getItems().length; j += 1) { + formRoutingRule.getItems()[j].style.addProperties({'padding': 'initial'}); + } + row.getItems()[0].dom.labelTextContainer.style.display = "none"; + row.getItems()[1].dom.labelTextContainer.style.display = "none"; + } + } + } + + function isConnection(sourceShape, shape) { + var connection, dt, i; + dt = sourceShape.getPorts().asArray(); + for (i = 0; i < dt.length; i += 1) { + connection = dt[i].getConnection(); + if (sourceShape.getID() === connection.getSrcPort().getParent().getID() && + shape.getID() === connection.getDestPort().getParent().getID()) { + return connection; + } + } + return false; + } + + function deleteRow() { + arrayShapeIdRemoved.push(formPanelSelected.getField('act_name').getValue()); + formRoutingRule.removeItem(formPanelSelected); + PMDesigner.msgFlash('Routing rule removed correctly'.translate(), windowConnections.footer); + } + +}; + +var PMVariables = function (options) { + var that = this; + this.initialFormAcceptedValuesKeyValue = null; + this.initialFormAcceptedValuesValue = null; + this.initialGridAcceptedValuesOrder = []; + this.validateAcceptedValuesFlag = false; + this.var_uid = null; + this.var_name = null; + this.edit = false; + this.editRow = null; + this.dirtyAcceptedValue = false; + this.fieldInfo = null; + this.onSave = new Function(); + this.onEdit = new Function(); + this.clickedClose = true; + this.editingOptions = false; + this.editRow = null; + this.currentVariable = null; + this.onWindowClose = new Function(); + this.buttonCreate = new PMUI.ui.Button({ + id: 'buttonCreate', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + + }, + handler: function () { + that.showForm(); + } + }); + + this.buttonCreateInputDocument = new PMUI.field.ButtonField({ + id: 'buttonCreateInputDocument', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + proportion: 0.8, + handler: function (field) { + var inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.method = "POST"; + } + }); + + this.buttonEditInputDocument = new PMUI.field.ButtonField({ + id: 'buttonEditInputDocument', + value: 'Edit'.translate(), + labelVisible: false, + buttonAlign: 'center', + proportion: 0.8, + handler: function (field) { + var form = that.formVariables, + fieldInpDoc = form.getField('inp_doc_uid'), + inp_doc_uid = fieldInpDoc.getValue(), + defaultText = "- Select an input document -".translate(), + inputDocument; + if (inp_doc_uid && inp_doc_uid !== defaultText) { + inputDocument = new InputDocument(); + inputDocument.build(); + inputDocument.inputDocumentOriginDataForUpdate = {}; + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(inp_doc_uid); + } else { + fieldInpDoc.setValue(""); + form.isValid(); + } + } + }); + + that.buttonCreateInputDocument.controls[0].button.setButtonType("success"); + that.buttonCreateInputDocument.controls[0].button.setStyle({ + cssClasses: ["mafe-button-create-variable", "pmui-success"], + cssProperties: {padding: "8px 15px", border: "0px"} + }); + that.buttonEditInputDocument.controls[0].button.setButtonType("success"); + that.buttonEditInputDocument.controls[0].button.setStyle({ + cssClasses: ["mafe-button-edit-variable", "pmui-success"], + cssProperties: {padding: "8px 15px", border: "0px"} + }); + + var inp_doc_uid = new PMUI.field.DropDownListField({ + id: "inp_doc_uid", + name: "inp_doc_uid", + value: "", + required: true, + label: "Related Input Document".translate(), + controlsWidth: 460, + valueType: "string", + labelPosition: "top", + onChange: function () { + that.validateInputDoc(); + } + }); + + this.buttonFieldAdd = new PMUI.field.ButtonField({ + id: 'buttonFieldAdd', + pmType: 'buttonField', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.8, + handler: function (field) { + that.addAcceptedValue(); + }, + style: { + cssProperties: { + "margin-left": "10px" + } + } + }); + this.buttonFieldAdd.getControl().button.setButtonType("success"); + this.buttonFieldCancel = new PMUI.field.ButtonField({ + id: 'buttonFieldCancel', + pmType: 'buttonField', + value: 'Cancel'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 55, + proportion: 0.6, + handler: function (field) { + that.clickedClose = false; + that.cancelAcceptedValue(); + that.editingOptions = false; + } + }); + this.buttonFieldCancel.getControl().button.setButtonType("error"); + + this.formVariables = new PMUI.form.Form({ + id: 'formVariables', + width: 'auto', + title: '', + visibleHeader: false, + items: [ + { + pmType: 'text', + label: 'Variable Name'.translate(), + placeholder: "Name".translate(), + id: 'variableName', + value: '', + name: 'var_name', + required: true, + valueType: 'string', + maxLength: 60, + controlsWidth: 460, + validators: [ + { + pmType: "regexp", + criteria: /^[a-zA-Z\_]{1}\w+$/, + errorMessage: "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores.".translate() + } + ] + }, { + pmType: 'text', + label: 'Label'.translate(), + placeholder: 'Label'.translate(), + id: 'variableLabel', + value: 'label', + name: 'var_label', + valueType: 'string', + maxLength: 60, + controlsWidth: 460, + visible: false + }, { + pmType: 'dropdown', + label: 'Variable Type'.translate(), + placeholder: 'Variable type'.translate(), + id: 'varType', + value: 'string', + name: 'var_field_type', + required: true, + valueType: 'string', + controlsWidth: 460, + options: [ + { + label: 'String', + value: 'string' + }, { + label: 'Integer', + value: 'integer' + }, { + label: 'Float', + value: 'float' + }, { + label: 'Boolean', + value: 'boolean' + }, { + label: 'Datetime', + value: 'datetime' + }, { + label: 'Grid', + value: 'grid' + }, { + label: 'Array', + value: 'array' + }, { + label: "File", + value: "file" + }, { + label: "Multiple File", + value: "multiplefile" + }, { + label: "Object", + value: "object" + } + + ], + onChange: function (newValue, oldValue) { + var sw = that.gridAcceptedValues.visible === false ? true : (that.gridAcceptedValues.getData().length === 0); + var sw2 = that.formBooleanOptions.visible === false ? true : (that.formBooleanOptions.getField('trueOption').getValue() + that.formBooleanOptions.getField('falseOption').getValue()) === ''; + if (sw && sw2) { + that.changeViewFieldType(newValue, oldValue); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + return; + } + var message_window = new PMUI.ui.MessageWindow({ + id: 'messageWindowCancel', + width: 490, + title: 'Variables'.translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: "This action will delete all options. Do you want to continue?".translate(), + footerItems: [ + { + id: 'messageWindowNo', + text: 'No'.translate(), + handler: function () { + message_window.close(); + that.formVariables.getField('var_field_type').setValue(oldValue); + }, + buttonType: "error" + }, + { + id: 'messageWindowYes', + text: 'Yes'.translate(), + handler: function () { + message_window.close(); + that.changeViewFieldType(newValue, oldValue); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + }, + buttonType: "success" + } + ], + onClose: function () { + } + }); + message_window.open(); + message_window.showFooter(); + } + }, { + pmType: "panel", + id: "inp_doc_uidPanel", + fieldset: false, + layout: "hbox", + items: [ + inp_doc_uid, + that.buttonCreateInputDocument, + that.buttonEditInputDocument + ] + }, + { + id: 'booleanPanel', + pmType: 'panel', + legend: 'Options'.translate(), + fieldset: true, + layout: 'vbox', + items: [ + { + pmType: 'panel', + layout: 'hbox', + items: [ + new PMLabelField({ + text: 'Key'.translate(), + textMode: 'plain', + style: { + cssProperties: { + color: '#AEAEAE', + 'font-weight': 'bold' + } + }, + proportion: 0.3 + }), + new PMLabelField({ + text: 'Label'.translate(), + textMode: 'plain', + style: { + cssProperties: { + color: '#AEAEAE', + 'font-weight': 'bold' + } + } + }) + ] + }, + { + pmType: 'text', + name: 'trueOption', + label: 'True'.translate(), + controlsWidth: 460, + valueType: 'string', + maxLength: 100, + required: true + }, { + pmType: 'text', + name: 'falseOption', + label: 'False'.translate(), + controlsWidth: 460, + valueType: 'string', + maxLength: 100, + required: true + } + ] + }, + { + pmType: 'dropdown', + label: 'Database Connection'.translate(), + placeholder: 'Database Connection'.translate(), + id: 'varConnection', + value: 'none', + name: 'var_dbconnection', + controlsWidth: 460, + options: [{ + label: 'PM Database', + value: 'workflow' + } + ], + onChange: function (newValue, oldValue) { + } + }, { + pmType: 'textarea', + label: 'SQL'.translate(), + placeholder: "Insert a SQL query like: SELECT [Key field], [Label field] FROM [Table name]".translate(), + id: 'varSql', + value: '', + name: 'var_sql', + valueType: 'string', + controlsWidth: 460, + style: {cssClasses: ['mafe-textarea-resize']} + }, { + pmType: 'checkbox', + label: 'Define accepted variable values'.translate(), + id: "chckboxOption", + name: 'var_options_control', + controlsWidth: 460, + options: [{value: '1', label: ''}], + onChange: function (newValue, oldValue) { + that.changeViewFieldType(that.formVariables.getField('var_field_type').getValue()); + } + }, + { + id: 'formAcceptedValues', + pmType: 'panel', + fieldset: false, + layout: 'hbox', + items: [ + { + pmType: 'text', + name: 'keyValue', + id: "variable-keyvalue", + label: 'Key'.translate(), + labelWidth: '100%', + controlsWidth: 210, + proportion: 2.5, + valueType: 'string', + maxLength: 255, + labelPosition: "top" + }, + { + pmType: 'text', + name: 'value', + id: "variable-value", + label: 'Label'.translate(), + labelWidth: '100%', + controlsWidth: 300, + valueType: 'string', + maxLength: 255, + proportion: 3.4, + labelPosition: "top" + }, + that.buttonFieldCancel, + that.buttonFieldAdd + ] + } + ] + }); + this.formVariables.getData = function () { + var data = getData2PMUI(that.formVariables.html); + return data; + }; + this.gridVariables = new PMUI.grid.GridPanel({ + id: 'gridVariables', + pageSize: 10, + width: '96%', + style: { + cssClasses: ['mafe-gridPanel'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: 'varName', + title: 'Name'.translate(), + dataType: 'string', + columnData: 'var_name', + alignmentCell: 'left', + width: '300px', + sortable: true + }, { + id: 'varType', + title: 'Type'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'var_field_type', + sortable: true + }, { + id: 'varEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: '60px', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + that.showFormEdit(row.getData()); + } + }, { + id: 'varDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: '70px', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + that.del(row.getData(), row, grid); + } + } + ], + dataItems: null + }); + this.gridAcceptedValues = new PMUI.grid.GridPanel({ + id: 'gridAcceptedValues', + pageSize: 5, + style: {cssClasses: ['mafe-gridPanel']}, + filterPlaceholder: 'Text to Search'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + filterable: false, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: 'keyvalue', + title: 'Key'.translate(), + columnData: 'keyValue', + dataType: 'string', + alignmentCell: 'left', + width: 180 + }, { + id: 'label', + title: 'Label'.translate(), + columnData: 'value', + dataType: 'string', + alignmentCell: 'left', + width: 300 + }, { + id: 'buttonEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: 60, + buttonStyle: {cssClasses: ['mafe-button-edit']}, + onButtonClick: function (row, grid) { + that.editRow = row; + that.editAcceptedValue(row); + } + }, { + id: 'buttonDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: 75, + buttonStyle: {cssClasses: ['mafe-button-delete']}, + onButtonClick: function (row, grid) { + if (row !== that.editRow) { + that.deleteAcceptedValue(row); + } else { + PMDesigner.msgFlash('The row can not be removed, because is being edited.'.translate(), document.getElementById('windowVariables'), 'error', 1000, 5); + } + } + } + ], + dataItems: null, + behavior: 'dragdropsort' + }); + this.isDirtyFormVariables = function () { + $("input,select,textarea").blur(); + if (this.formVariables.isVisible()) { + this.validateAcceptedValues(); + if (this.formVariables.isDirty() || this.dirtyAcceptedValue || this.validateAcceptedValuesFlag) { + //if (this.formVariables.getField("var_options_control").controls[0].selected) { + var message_window = new PMUI.ui.MessageWindow({ + id: "messageWindowCancel", + width: 490, + title: "Variables".translate(), + windowMessageType: "warning", + bodyHeight: "auto", + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [{ + id: "messageWindowNo", + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: "messageWindowYes", + text: "Yes".translate(), + handler: function () { + if (that.clickedClose) { + that.windowVariables.close(); + } + message_window.close(); + that.showGrid(); + that.windowVariables.hideFooter(); + }, + buttonType: "success" + }, + ] + }); + + message_window.open(); + message_window.showFooter(); + /*} else { + that.showGrid(); + }*/ + } else { + if (that.clickedClose) { + that.windowVariables.close(); + } else { + that.showGrid(); + } + this.initialFormAcceptedValuesKeyValue = null; + this.initialFormAcceptedValuesValue = null; + this.initialGridAcceptedValuesOrder = []; + that.windowVariables.hideFooter(); + } + } else { + this.windowVariables.close(); + } + }; + this.windowVariables = new PMUI.ui.Window({ + id: 'windowVariables', + title: 'Variables'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFormVariables(); + }, + footerItems: [ + new PMUI.ui.Button({ + id: "windowVariablesCancel", + text: "Cancel".translate(), + + handler: function () { + that.clickedClose = false; + that.isDirtyFormVariables(); + }, + + buttonType: "error" + }), + + new PMUI.ui.Button({ + id: "windowVariablesSave", + text: "Save".translate(), + + handler: function () { + if (that.edit) { + that.updateVariables(); + } else { + that.saveVariables(); + } + }, + + buttonType: "success" + }) + ], + onClose: function () { + that.onWindowClose(that.currentVariable); + }, + visibleFooter: true, + buttonPanelPosition: "bottom" + }); + PMVariables.prototype.init.call(this); + that.setInputDocuments(inp_doc_uid); +}; +PMVariables.prototype.init = function () { + var that = this, + acceptedValuesForm, + label; + + that.buttonCreate.defineEvents(); + + that.windowVariables.addItem(that.gridVariables); + that.windowVariables.addItem(that.formVariables); + that.windowVariables.addItem(that.gridAcceptedValues); + that.windowVariables.hideFooter(); + that.windowVariables.open(); + label = $('#booleanPanel'); + acceptedValuesForm = $('#formAcceptedValues'); + that.customCss(); + acceptedValuesForm.find(".pmui-field-message").css("marginLeft", 10); + $("#gridAcceptedValues").css({"height": "254px", "margin": "0 10px"}); + $("#requiredMessage").css({"margin-top": "10px"}); + $("#inp_doc_uid").find(".pmui-field-message:eq(0)").css("left", "226px"); + this.formAcceptedValues = PMUI.getPMUIObject(acceptedValuesForm.get(0)); + + this.buttonFieldAdd.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + this.buttonFieldCancel.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + $('#gridVariables .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + that.gridVariables.dom.toolbar.appendChild(that.buttonCreate.getHTML()); + + this.formBooleanOptions = PMUI.getPMUIObject(label.get(0)); + that.showGrid(); + that.loadDataBaseConnections(); + + validateKeysField(that.formVariables.getField('var_name').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + + that.resetAcceptedValuesPanel(); + label = $('#booleanPanel').css({'width': '675px', margin: '10px'}).find(".pmui-pmlabelfield"); + $(label[0]).replaceWith($(label[0]).find(".pmui-pmlabelcontrol").css({ + "font-size": "14px", + "margin-right": "127px" + })); + $(label[1]).replaceWith($(label[1]).find(".pmui-pmlabelcontrol").css({ + "font-size": "14px", + "margin-right": "127px" + })); + this.formVariables.panel.html.style.overflow = "scroll !important"; + $(this.formVariables.panel.html).removeClass("pmui-formpanel"); + $(this.formVariables.panel.html).append(that.formAcceptedValues.html); + $(this.formVariables.panel.html).append(that.gridAcceptedValues.html); + $(that.formAcceptedValues.html).find(".pmui-formpanel").css({"display": "inline-block"}); + that.windowVariables.footer.html.style.textAlign = "right"; +}; +PMVariables.prototype.saveVariables = function () { + var that = this, + data, + inp_doc_uid_value = this.formVariables.getField("inp_doc_uid").controls[0].value; + this.formVariables.getField("inp_doc_uid").setValue(inp_doc_uid_value); + if (!this.formVariables.isValid()) { + return; + } + if (this.formBooleanOptions.visible && !this.formBooleanOptions.isValid()) { + return; + } + data = this.formVariables.getData(); + data.var_label = data.var_field_type; + + data.var_default = ''; + data.var_accepted_values = that.getDataAcceptedValues(); + data.var_field_size = 10; + if (!this.formVariables.getField('var_sql').visible) + data.var_sql = ""; + (new PMRestClient({ + endpoint: 'process-variable', + typeRequest: 'post', + functionSuccess: function (xhr, response) { + if (that.onSave(xhr, response) === false) { + that.var_uid = null; + return; + } + that.showGrid(); + that.load(); + that.var_uid = null; + that.windowVariables.hideFooter(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ' ', + data: data, + messageSuccess: 'Variable saved successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.updateVariables = function () { + var that = this, + data, + inp_doc_uid_value = this.formVariables.getField("inp_doc_uid").controls[0].value; + this.formVariables.getField("inp_doc_uid").setValue(inp_doc_uid_value); + if (!this.formVariables.isValid()) { + return; + } + if (this.formBooleanOptions.visible && !this.formBooleanOptions.isValid()) { + return; + } + data = this.formVariables.getData(); + data.var_label = data.var_field_type; + data.var_field_size = 10; + if (that.formVariables.getField('var_name').getValue().trim() === that.var_name.trim()) { + delete data['var_name']; + } + data.var_default = ''; + data.var_accepted_values = that.getDataAcceptedValues(); + if (!this.formVariables.getField('var_sql').visible) + data.var_sql = ""; + (new PMRestClient({ + endpoint: 'process-variable/' + that.var_uid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + if (that.onEdit(xhr, response, data) === false) { + that.var_uid = null; + return; + } + var var_name_old = that.currentVariable.var_name; + that.currentVariable = data; + that.currentVariable.var_uid = that.var_uid; + that.currentVariable.var_name_old = var_name_old; + that.showGrid(); + that.load(); + that.var_uid = null; + that.windowVariables.hideFooter(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: ' ', + messageSuccess: 'Variable edited successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.deleteVariable = function (var_uid) { + var that = this; + (new PMRestClient({ + endpoint: 'process-variable/' + var_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'working...'.translate(), + messageSuccess: 'Variable deleted successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; +PMVariables.prototype.load = function () { + var that = this; + var restProxy = new PMRestClient({ + endpoint: 'process-variables', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var listInputDocs = response; + that.gridVariables.setDataItems(listInputDocs); + that.gridVariables.sort('var_name', 'asc'); + $(that.gridVariables.dom.toolbar).find("input").val(""); + that.gridVariables.clearFilter(); + if (that.currentVariable !== null) { + var var_name_old = that.currentVariable.var_name_old; + for (var i = 0; i < response.length; i++) { + if (that.currentVariable.var_uid === response[i].var_uid) { + that.currentVariable = response[i]; + } + } + that.currentVariable.var_name_old = var_name_old; + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +PMVariables.prototype.del = function (data, row, grid) { + var that = this; + var confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDel', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Variables".translate(), + message: 'Do you want to delete this variable?'.translate(), + footerItems: [{ + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.deleteVariable(data.var_uid, row); + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMVariables.prototype.customCss = function () { + $("#inp_doc_uidPanel").css({padding: ""}); + $("#inp_doc_uid").css({width: "75%"}).find("label:eq(0)").css({float: "left", width: "31.5%"}); + + var td = $("#chckboxOption .pmui-field-control-table td")[0]; + + if (typeof(td) != "undefined") { + td.setAttribute("style", "padding:0px !important"); + } + + this.formVariables.panel.getHTML().setAttribute("style", "overflow: initial"); +}; + +PMVariables.prototype.showGrid = function () { + var that = this; + that.formVariables.setVisible(false); + that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(false); + that.disableBooleanPanel(); + $(that.gridVariables.dom.toolbar).find("input").val(""); + that.gridVariables.clearFilter(); + that.gridVariables.setVisible(true); + that.windowVariables.setTitle('Variables'.translate()); +}; +PMVariables.prototype.showForm = function () { + var that = this; + that.edit = false; + that.dirtyAcceptedValue = false; + that.formVariables.setVisible(true); + that.enableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true); + that.enableBooleanPanel(); + that.gridVariables.setVisible(false); + that.windowVariables.setTitle('Create Variable'.translate()); + that.formVariables.reset(); + that.formVariables.setFocus(); + that.changeViewFieldType('string'); + that.resetAcceptedValuesPanel(); + that.gridAcceptedValues.clearItems(); + that.resetBooleanPanel(); + that.buttonFieldCancel.setVisible(false); + that.windowVariables.showFooter(); + that.buttonCreateInputDocument.setVisible(false); + that.buttonEditInputDocument.setVisible(false); +}; +PMVariables.prototype.showFormEdit = function (data) { + var that = this; + that.showForm(); + that.var_uid = data.var_uid; + that.edit = true; + that.var_name = data.var_name; + that.windowVariables.setTitle('Edit Variable'.translate()); + that.formVariables.getField('var_dbconnection').setValue(data.var_dbconnection); + that.formVariables.getField('var_field_type').setValue(data.var_field_type); + that.formVariables.getField('var_label').setValue(data.var_label); + that.formVariables.getField('var_name').setValue(data.var_name); + that.formVariables.getField('var_sql').setValue(data.var_sql); + that.formVariables.getField('inp_doc_uid').setValue(data.inp_doc_uid); + + that.setVarOptionsControl(data.var_accepted_values); + that.changeViewFieldType(data.var_field_type); + that.setDataAcceptedValues(data.var_accepted_values); + that.currentVariable = data; + that.currentVariable.var_name_old = that.currentVariable.var_name; +}; +PMVariables.prototype.loadDataBaseConnections = function () { + var that = this; + var restProxy = new PMRestClient({ + endpoint: 'database-connections', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var dropdown = that.formVariables.getField('var_dbconnection'); + for (var i = 0; i < response.length; i++) { + if (response[i].dbs_connection_type == "TNS") { + dropdown.addOption({ + label: "[" + response[i].dbs_tns + "] " + response[i].dbs_type + " : " + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } else { + dropdown.addOption({ + label: "[" + response[i].dbs_server + ":" + response[i].dbs_port + "] " + response[i].dbs_type + ": " + response[i].dbs_database_name + response[i].dbs_database_description, + value: response[i].dbs_uid + }); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); +}; +PMVariables.prototype.changeViewFieldType = function (newValue) { + var that = this; + var sw = that.formVariables.getField('var_options_control').controls[0].selected; + + that.formVariables.getField('var_dbconnection').setVisible(false); + that.formVariables.getField('var_sql').setVisible(false); + that.formVariables.getField('var_options_control').setVisible(false); + that.formVariables.getField('inp_doc_uid').setVisible(false); + that.formVariables.getField('inp_doc_uid').setRequired(false); + that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(false); + that.disableBooleanPanel(); + that.buttonCreateInputDocument.setVisible(false); + that.buttonEditInputDocument.setVisible(false); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), []); + + if (this.fieldInfo === null) { + this.fieldInfo = document.createTextNode(''); + var a = that.formVariables.getField('var_field_type').getControls()[0]; + a.html.parentNode.appendChild(document.createElement('br')); + a.html.parentNode.appendChild(this.fieldInfo); + } + + switch (newValue) { + case 'string': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + + + break; + case 'integer': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'ishyphen']); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + break; + case 'float': + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + + validateKeysField(that.formAcceptedValues.getField('keyValue').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isperiod', 'ishyphen']); + this.fieldInfo.data = "Supported Controls: text, textarea, dropdown, radio, suggest, hidden.".translate(); + break; + case 'boolean': + that.enableBooleanPanel(); + this.fieldInfo.data = "Supported Controls: checkbox, radio, hidden.".translate(); + break; + case 'datetime': + this.fieldInfo.data = "Supported Controls: datetime, hidden.".translate(); + break; + case "grid": + this.fieldInfo.data = "Supported Controls: grid.".translate(); + break; + case "array": + that.formVariables.getField('var_dbconnection').setVisible(true); + that.formVariables.getField('var_sql').setVisible(true); + that.formVariables.getField('var_options_control').setVisible(true); + sw ? that.enableAcceptedValuesPanel() : that.disableAcceptedValuesPanel(); + that.gridAcceptedValues.setVisible(true && sw); + this.fieldInfo.data = "Supported Controls: checkgroup.".translate(); + break; + case 'file': + that.formVariables.getField('inp_doc_uid').setVisible(true); + that.buttonCreateInputDocument.setVisible(true); + that.buttonEditInputDocument.setVisible(true); + that.formVariables.getField('inp_doc_uid').setRequired(true); + this.fieldInfo.data = "Supported Controls: file.".translate(); + that.validateInputDoc(); + break; + case 'multiplefile': + this.fieldInfo.data = "Supported Controls: Multiple File.".translate(); + break; + case 'object': + this.fieldInfo.data = "Supported Controls:".translate(); + break; + } +}; +/** + * Enable or disable edit button of input document + */ +PMVariables.prototype.validateInputDoc = function () { + var form = this.formVariables, + fieldInpDoc = form.getField("inp_doc_uid"), + defaultText = "- Select an input document -".translate(); + if (fieldInpDoc && fieldInpDoc.getValue() && fieldInpDoc.getValue() !== defaultText) { + this.buttonEditInputDocument.enable(); + } else { + this.buttonEditInputDocument.disable(); + } +}; +PMVariables.prototype.addAcceptedValue = function () { + var that = this, + key = jQuery.trim(that.formAcceptedValues.getField('keyValue').getValue()), + value = jQuery.trim(that.formAcceptedValues.getField('value').getValue()); + + if (that.isAcceptedValueAdded()) { + return PMDesigner.msgFlash('The key value already exists.'.translate(), + document.getElementById('windowVariables'), 'error', 1000, 5); + } + if (!(key && value)) { + return PMDesigner.msgFlash('The key and label must be supplied.'.translate(), + document.getElementById('windowVariables'), 'error', 1000, 5); + } + if (that.editRow === null) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + keyValue: key, + value: value + } + })); + } else { + this.editingOptions = false; + that.editRow.setData({ + keyValue: key, + value: value + }); + } + that.dirtyAcceptedValue = true; + that.cancelAcceptedValue(); +}; +PMVariables.prototype.editAcceptedValue = function (row) { + var that = this; + this.editingOptions = true; + that.editRow = row; + var data = row.getData(); + that.formAcceptedValues.getField('keyValue').setValue(data.keyValue); + that.formAcceptedValues.getField('value').setValue(data.value); + that.buttonFieldAdd.setValue('Save'.translate()); + that.buttonFieldCancel.setVisible(true); + + that.initialFormAcceptedValuesKeyValue = data.keyValue; + that.initialFormAcceptedValuesValue = data.value; +}; +PMVariables.prototype.deleteAcceptedValue = function (row) { + var that = this; + var confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Variables".translate(), + message: 'Do you want to delete this Key Value?'.translate(), + footerItems: [{ + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.gridAcceptedValues.removeItem(row); + that.dirtyAcceptedValue = true; + }, + buttonType: "success" + } + ] + }); + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; +PMVariables.prototype.getDataAcceptedValues = function () { + var that = this, data = [], i, dt = []; + if (that.gridAcceptedValues.visible) { + dt = that.gridAcceptedValues.getData(); + for (i = 0; i < dt.length; i++) { + delete dt[i].key; + delete dt[i].type; + data.push({ + value: dt[i].keyValue, + label: dt[i].value + }); + } + } + if (that.formBooleanOptions.visible) { + var a = that.formBooleanOptions.getItems("fields").reduce(function (prev, curr) { + prev[curr.getName()] = curr.getValue(); + return prev; + }, {}); + + data = [ + {value: '1', label: a.trueOption}, + {value: '0', label: a.falseOption} + ]; + } + return data; +}; +PMVariables.prototype.setDataAcceptedValues = function (stringJsonData) { + if (!stringJsonData) { + return; + } + var that = this, i, data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + if (that.gridAcceptedValues.visible) { + for (i = 0; i < data.length; i++) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + keyValue: data[i].keyValue ? data[i].keyValue : data[i].value, + value: data[i].keyValue ? data[i].value : data[i].label + } + })); + that.initialGridAcceptedValuesOrder.push(data[i].keyValue ? data[i].keyValue : data[i].value); + } + } + if (that.formBooleanOptions.visible) { + that.formBooleanOptions.getField('trueOption').setValue(data[0].label); + that.formBooleanOptions.getField('falseOption').setValue(data[1].label); + } +}; +PMVariables.prototype.validateAcceptedValues = function () { + var that = this, + dirty = false, + finalVal1, + finalVal2, + initVal1, + initVal2, + gridAcceptedValues, + finalGridAcceptedValuesOrder = [], + key; + if (that.initialFormAcceptedValuesValue && that.formAcceptedValues.getField('value').getValue() != '') { + finalVal1 = that.formAcceptedValues.getField('value').getValue(); + finalVal2 = that.formAcceptedValues.getField('keyValue').getValue(); + initVal1 = that.initialFormAcceptedValuesValue; + initVal2 = that.initialFormAcceptedValuesKeyValue; + if (finalVal1 !== initVal1 || finalVal2 !== initVal2) { + dirty = true; + } + } else if (that.formAcceptedValues.getField('value').getValue() !== '' || that.formAcceptedValues.getField('keyValue').getValue()) { + dirty = true; + } + + if (that.initialGridAcceptedValuesOrder.length) { + gridAcceptedValues = that.gridAcceptedValues.getData(); + for (key in gridAcceptedValues) { + if (gridAcceptedValues.hasOwnProperty(key)) { + finalGridAcceptedValuesOrder.push(gridAcceptedValues[key].keyValue); + } + } + if (JSON.stringify(finalGridAcceptedValuesOrder) !== JSON.stringify(that.initialGridAcceptedValuesOrder)) { + dirty = true; + } + } + this.validateAcceptedValuesFlag = dirty; +}; +PMVariables.prototype.setVarOptionsControl = function (stringJsonData) { + if (!stringJsonData) { + return; + } + var that = this, i, data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + if (data.length > 0) { + that.formVariables.getField('var_options_control').setValue("['1']"); + } +}; +PMVariables.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that.buttonFieldAdd.setValue('Add'.translate()); + that.buttonFieldCancel.setVisible(false); + that.resetAcceptedValuesPanel(); +}; +PMVariables.prototype.isAcceptedValueAdded = function () { + var that = this, i, keyValue, data, exist, i, index, rowEditValue; + data = that.gridAcceptedValues.getData(); + keyValue = that.formAcceptedValues.getField('keyValue').getValue() || ""; + if (this.editingOptions) { + rowEditValue = this.editRow.getData()["keyValue"]; + for (i = 0; i < data.length; i++) { + if (rowEditValue === data[i].keyValue) { + index = i; + break; + } + } + for (i = 0; i < data.length; i++) { + if (i !== index) { + if (keyValue === data[i].keyValue) { + exist = true; + } + } + } + if (exist) { + return true; + } else { + return false; + } + } else { + for (i = 0; i < data.length; i++) { + if (data[i].keyValue === keyValue) { + return true; + } + } + } + return false; +}; +PMVariables.prototype.setInputDocuments = function (inp_doc_uid) { + var restClient = new PMRestClient({ + endpoint: 'input-documents', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + inputDocumentsData = response; + var arrayOptions = []; + arrayOptions[0] = { + label: "- Select an input document -".translate(), + value: "", + disabled: true, + selected: true + }; + for (var i = 0; i <= inputDocumentsData.length - 1; i++) { + arrayOptions.push( + { + value: inputDocumentsData[i].inp_doc_uid, + label: inputDocumentsData[i].inp_doc_title + } + ); + } + inp_doc_uid.setOptions(arrayOptions); + inp_doc_uid.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + }); + restClient.executeRestClient(); +}; +PMVariables.prototype.setInputDocumentsFromIDModule = function (inp_doc_uid, response) { + var inp_doc_uid_val = $("#inp_doc_uid").find("select:eq(0) option:selected").val(); + var arrayOptions = []; + inputDocumentsData = response; + arrayOptions[0] = { + label: "- Select an input document -".translate(), + value: "", + disabled: true, + selected: true + }; + for (var i = 0; i <= inputDocumentsData.length - 1; i++) { + arrayOptions.push( + { + value: inputDocumentsData[i].inp_doc_uid, + label: inputDocumentsData[i].inp_doc_title + } + ); + } + inp_doc_uid.setOptions(arrayOptions); + inp_doc_uid.setValue(arrayOptions[0].value); + if (inp_doc_uid_val) { + inp_doc_uid.setValue(inp_doc_uid_val); + } +}; +PMVariables.prototype.isWindowActive = function () { + if ($("#formVariables").is(":visible")) { + return true; + } + return false; +}; +/** + * Reset the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.resetBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.getItems("fields").forEach(function (i) { + i.setValue(""); + }); + } + return this; +}; +/** + * Disable the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.disableBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.setVisible(false) + .getItems("fields").forEach(function (i) { + i.disable(); + }); + } + return this; +}; +/** + * Enable the fields from the form's boolean panel. + * @returns {PMVariables} + */ +PMVariables.prototype.enableBooleanPanel = function () { + if (this.formBooleanOptions) { + this.formBooleanOptions.setVisible(true) + .getItems("fields").forEach(function (i) { + i.enable(); + }); + } + return this; +}; +/** + * Reset the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.resetAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.getItems().forEach(function (i) { + i.setValue(""); + }); + } + return this; +}; +/** + * Enable the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.enableAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.setVisible(true) + .getItems('fields').forEach(function (i) { + i.enable(""); + }); + } + return this; +}; +/** + * Disable the fields from the form's Accepted Values panel. + * @returns {PMVariables} + */ +PMVariables.prototype.disableAcceptedValuesPanel = function () { + if (this.formAcceptedValues) { + this.formAcceptedValues.setVisible(false) + .getItems('fields').forEach(function (i) { + i.disable(""); + }); + } + return this; +}; +PMDesigner.variables = function () { + var pmvariables = new PMVariables(); + pmvariables.load(); +}; +PMDesigner.variables.create = function () { + var pmvariables = new PMVariables(); + pmvariables.showForm(); + pmvariables.load(); +}; + +RowVariableCondition = function () { + PMUI.form.FormPanel.call(this, { + layout: 'hbox' + }); + RowVariableCondition.prototype.init.call(this); +}; +RowVariableCondition.prototype = new PMUI.form.FormPanel(); +RowVariableCondition.prototype.createHTML = function () { + var items; + PMUI.form.FormPanel.prototype.createHTML.call(this); + items = this.getItems(); + items[0].dom.labelTextContainer.style.display = 'none'; + items[1].dom.labelTextContainer.style.display = 'none'; + items[2].dom.labelTextContainer.style.display = 'none'; + items[2].style.addProperties({display: 'none'}); + items[2].controls[0].button.setButtonType('error'); + return this.html; +}; +RowVariableCondition.prototype.init = function () { + var that = this, + typeData, + field, + remove; + field = new PMUI.field.TextField({ + id: 'idField', + name: '', + required: true, + controlsWidth: 425, + proportion: 2.1, + labelVisible: false + }); + typeData = new PMUI.field.DropDownListField({ + id: 'idTypeData', + name: '', + valueType: 'string', + value: '', + readOnly: true, + controlsWidth: 200, + labelVisible: false, + options: [{ + value: 'integer', + label: 'Integer'.translate() + }, { + value: 'string', + label: 'String'.translate() + }, { + value: 'float', + label: 'Float'.translate() + }, { + value: 'boolean', + label: 'Boolean'.translate() + }, { + value: 'date', + label: 'Date'.translate() + }, { + value: 'datetime', + label: 'Datetime'.translate() + } + ] + }); + remove = new PMUI.field.ButtonField({ + id: 'idRemove', + value: 'Delete'.translate(), + labelVisible: false, + handler: function (e, a) { + that.getParent().removeItem(that); + }, + name: 'delete', + controlsWidth: 60 + }); + that.addItem(field); + that.addItem(typeData); + that.addItem(remove); +}; + +PropertiesReceiveMessage = function (menuOption) { + this.variables = []; + this.onApply = new Function(); + this.onCancel = new Function(); + this.menuOption = menuOption; + Mafe.Window.call(this); + PropertiesReceiveMessage.prototype.init.call(this); +}; +PropertiesReceiveMessage.prototype = new Mafe.Window(); +PropertiesReceiveMessage.prototype.init = function () { + var that = this; + that.setTitle(that.menuOption.getMenuTargetElement().evn_name); + that.setButtons([ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + handler: function () { + that.close(); + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformInformationSaveOpen', + text: 'Apply'.translate(), + buttonType: 'success', + height: 31, + handler: function () { + that.onApply(); + } + }) + ]); + that.buttonAdd = new PMUI.ui.Button({ + text: 'Add Variable'.translate(), + buttonType: 'success', + height: 31, + style: {cssProperties: {marginLeft: '50px', marginTop: '10px'}}, + handler: function () { + that.addVariable(); + } + }); + that.form = new Mafe.Form({ + title: that.menuOption.getMenuTargetElement().evn_name, + width: DEFAULT_WINDOW_WIDTH - 60, + style: {cssProperties: {'margin-left': '35px'}} + }); + that.conditionForm = new Mafe.Form({ + visibleHeader: false, + width: DEFAULT_WINDOW_WIDTH - 60, + style: {cssProperties: {'margin-left': '35px'}}, + items: [{ + label: 'Condition', + labelPosition: 'top', + pmType: 'textarea', + rows: 100, + style: {cssClasses: ['mafe-textarea-resize']} + } + ] + }); + + that.addItem(that.buttonAdd); + that.addItem(that.form); + that.addItem(that.conditionForm); + + that.addVariable(); +}; +PropertiesReceiveMessage.prototype.addVariable = function () { + var that = this, a, i; + a = new RowVariableCondition(this.variables); + that.form.addItem(a); + //force padding + for (i = 0; i < that.form.getItems().length; i += 1) { + that.form.getItems()[i].style.addProperties({'padding': 'initial'}); + } +}; + +EventMessagesGrid = function () { + this.onCreate = new Function(); + this.onEdit = new Function(); + this.onDel = new Function(); + Mafe.Grid.call(this); + EventMessagesGrid.prototype.init.call(this); +}; +EventMessagesGrid.prototype = new Mafe.Grid(); +EventMessagesGrid.prototype.createHTML = function () { + Mafe.Grid.prototype.createHTML.call(this); + this.dom.toolbar.appendChild(this.buttonCreate.getHTML()); + return this.html; +}; +EventMessagesGrid.prototype.init = function () { + var that = this; + that.buttonCreate = new PMUI.ui.Button({ + id: 'idButtonEventMessagesGrid', + text: 'Create'.translate(), + height: '36px', + width: 100, + style: {cssClasses: ['mafe-button-create']}, + handler: function (event) { + that.onCreate(event); + } + }); + that.buttonCreate.defineEvents(); + that.setID('idEventMessagesGrid'); + that.setColumns([{ + id: '', + title: 'Nombre', + sortable: true, + width: '460px', + dataType: 'string', + alignmentCell: 'left', + columnData: 'mes_title' + }, { + id: 'dynaformGridPanelEdit', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-edit']}, + buttonLabel: function (row, data) { + return 'Edit'.translate(); + }, + onButtonClick: function (row, grid) { + that.onEdit(row, grid); + } + }, { + id: 'dynaformGridPanelDelete', + title: '', + dataType: 'button', + buttonStyle: {cssClasses: ['mafe-button-delete']}, + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + onButtonClick: function (row, grid) { + that.onDel(row, grid); + } + } + ]); + that.load(); +}; +EventMessagesGrid.prototype.show = function () { + +}; +EventMessagesGrid.prototype.create = function () { + +}; +EventMessagesGrid.prototype.load = function () { + var that = this, + dt = [ + {mes_title: 'message1-1'}, + {mes_title: 'message1-2'}, + {mes_title: 'message1-3'}, + {mes_title: 'message1-4'} + ]; + that.setDataItems(dt); +}; + +EventMessagesForm = function () { + Mafe.Form.call(this); + EventMessagesForm.prototype.init.call(this); +}; +EventMessagesForm.prototype = new Mafe.Form(); +EventMessagesForm.prototype.init = function () { + var that = this; + that.setID('idEventMessagesForm'); + that.setItems({ + id: '', + pmType: 'text', + label: 'Name'.translate(), + value: '', + maxLength: 100, + placeholder: '', + name: '', + required: true, + controlsWidth: 300 + }); + that.buttons = [ + new PMUI.ui.Button({ + id: 'btnClose', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + handler: function () { + that.onCancel(); + } + }), + new PMUI.ui.Button({ + id: 'windowDynaformPmtableSave', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + handler: function () { + that.onSave(); + } + }) + ]; +}; +EventMessagesForm.prototype.getButtons = function () { + return this.buttons; +}; + +EventMessages = function () { + Mafe.Window.call(this); + + this.list = new EventMessagesGrid(); + this.form = new EventMessagesForm(); + + EventMessages.prototype.init.call(this); +}; +EventMessages.prototype = new Mafe.Window(); +EventMessages.prototype.init = function () { + var that = this; + that.list.onCreate = function () { + that.resetView(); + that.form.setVisible(true); + }; + that.setTitle("Event Messages"); + that.addItem(that.list); +}; +EventMessages.prototype.showForm = function () { + this.list.show(); +}; + +PMDesigner.eventMessages = function () { + var a = new EventMessages(); + a.open(); +}; +PMDesigner.eventMessages.create = function () { +}; + +var UserPicker = function (options) { + this.relatedField = null; + this.processId = null; + this.workspace = null; + this.window = null; + this.currentVariable = {}; + this.pageSize = 10; + UserPicker.prototype.init.call(this, options); +}; + +UserPicker.prototype.type = 'UserPicker'; + +UserPicker.prototype.family = 'UserPicker'; + +UserPicker.prototype.init = function (options) { + var defaults = { + relatedField: null, + processId: PMDesigner.project.projectId, + workspace: WORKSPACE + }; + + jQuery.extend(true, defaults, options); + + this.setRelatedField(defaults.relatedField) + .setProcessId(defaults.processId) + .setWorkspace(defaults.workspace); +}; + +UserPicker.prototype.setRelatedField = function (field) { + if (field instanceof PMUI.form.Field) { + this.relatedField = field; + } + return this; +}; + +UserPicker.prototype.setProcessId = function (process) { + this.processId = process; + return this; +}; + +UserPicker.prototype.setWorkspace = function (workspace) { + this.workspace = workspace; + return this; +}; + +UserPicker.prototype.open = function (callback) { + var w, rc, fieldC, dataGrid, panel, textField, that = this, button, panelFilter; + button = new PMUI.ui.Button({ + id: 'insertUser', + text: 'Insert User'.translate(), + handler: function () { + if (callback && callback.success && typeof callback.success === 'function') { + callback.success.call(that, that.currentVariable); + } + that.close(); + }, + disabled: true + }); + + textField = new PMUI.field.TextField({ + id: 'textFieldSearch', + label: '', + placeholder: 'Search ...'.translate() + }); + + w = new PMUI.ui.Window({ + id: 'processVariables', + title: 'Process Users'.translate(), + width: 480, + height: 420, + closable: true, + modal: true, + buttons: [ + button + ], + buttonsPosition: 'center' + }); + + textField = new PMUI.field.TextField({ + id: 'textFieldSearch', + label: '', + placeholder: 'Search ...'.translate(), + width: 150 + }); + + dataGrid = new PMUI.grid.GridPanel({ + id: 'gridPanel', + selectable: true, + pageSize: this.pageSize, + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [ + { + id: 'gridPanelUserName', + title: 'User Name'.translate(), + columnData: 'usr_username', + width: 150, + sortable: true, + alignmentCell: 'left' + }, + { + id: 'gridPanelRole', + title: 'Role'.translate(), + columnData: 'usr_role', + width: 230, + sortable: false, + alignmentCell: 'left' + } + ], + onRowClick: function (row, data) { + button.enable(); + that.currentVariable.username = data.usr_username; + that.currentVariable.uid = data.usr_uid; + } + + }); + + panelFilter = new PMUI.core.Panel({ + id: 'panelFilter', + layout: 'vbox', + items: [/*fieldC,*/ textField] + }); + + panel = new PMUI.core.Panel({ + id: 'paneldataGrid', + layout: 'vbox', + items: [panelFilter, dataGrid] + }); + + rc = new PMRestClient({ + typeRequest: 'get', + functionSuccess: function (xhr, response) { + console.log(response); + that.window = w; + dataGrid.setDataItems(response); + w.open(); + w.showFooter(); + w.addItem(panel); + panelFilter.setWidth(430); + textField.controls[0].onKeyUp = function () { + console.log(textField.controls[0].html.value); + dataGrid.filter(textField.controls[0].html.value); + }; + dataGrid.dom.toolbar.style.display = 'none'; + textField.dom.labelTextContainer.innerHTML = ''; + textField.dom.labelTextContainer.style.marginTop = 5; + panel.style.addProperties({'padding-left': 20}); + textField.dom.labelTextContainer.style.display = 'none'; + textField.controls[0].setWidth(200); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + rc.setBaseEndPoint('users').executeRestClient(); +}; + +UserPicker.prototype.close = function () { + if (this.window) { + this.window.close(); + this.window = null; + } +}; + +var CriteriaUserField = function (options) { + this.renderType = (options && options.renderType) || "text"; + PMUI.field.TextField.call(this, options); + this.process = null; + this.workspace = null; + this.buttonHTML = null; + this.rows = options.rows; + this.user_uid = null; + CriteriaUserField.prototype.init.call(this, options); +}; + +CriteriaUserField.prototype = new PMUI.field.TextField(); + +CriteriaUserField.prototype.setProcess = function (process) { + this.process = process; + return this; +}; + +CriteriaUserField.prototype.setWorkspace = function (workspace) { + this.workspace = workspace; + return this; +}; + +CriteriaUserField.prototype.init = function (options) { + var defaults = { + process: PMDesigner.project.projectId, + workspace: WORKSPACE + }; + jQuery.extend(true, defaults, options); + this.setProcess(defaults.process) + .setWorkspace(defaults.workspace); +}; + +CriteriaUserField.prototype.createVariablePicker = function () { + var vp = new UserPicker({ + relatedField: this, + processId: this.process + }); + return vp; +}; + +CriteriaUserField.prototype.setControls = function () { + if (this.controls.length) { + return this; + } + if (this.renderType === 'text') { + this.controls.push(new PMUI.control.TextControl()); + } else { + this.controls.push(new PMUI.control.TextAreaControl({style: {cssProperties: {resize: 'vertical'}}})); + } + return this; +}; + +CriteriaUserField.prototype.createCallBack = function () { + var that = this, oldValue, newValue, init = 0; + return { + success: function (variable) { + init = that.controls[0].html.selectionStart; + prevText = that.controls[0].html.value.substr(0, init); + lastText = that.controls[0].html.value.substr(that.controls[0].html.selectionEnd, that.controls[0].html.value.length); + newValue = variable.username; + + that.setValue(newValue); + that.user_uid = variable.uid; + that.controls[0].html.selectionEnd = init + variable.username.length; + } + }; +}; + +CriteriaUserField.prototype.createHTML = function () { + var button, that = this; + PMUI.field.TextField.prototype.createHTML.call(this); + + button = new PMUI.ui.Button({ + id: 'buttonCriteriaUserField', + text: '...', + handler: function () { + that.createVariablePicker().open(that.createCallBack()); + }, + style: { + cssProperties: { + background: '#2d3e50', + fontSize: 18, + paddingLeft: '15px', + paddingRight: '15px', + borderRadius: '4px', + verticalAlign: 'top' + } + } + }); + + this.buttonHTML = button; + $(this.helper.html).before(button.getHTML()) + this.buttonHTML.style.addProperties({"margin-left": "10px"}); + this.buttonHTML.html.tabIndex = -1; + + if (this.rows != null) + this.controls[0].setHeight(this.rows); + button.defineEvents(); + + return this.html; +}; + +// Overwrite original init function for FormItemFactory +PMUI.form.FormItemFactory.prototype.init = function () { + var defaults = { + products: { + "criteria": CriteriaUserField, + "field": PMUI.form.Field, + "panel": PMUI.form.FormPanel, + "text": PMUI.field.TextField, + "password": PMUI.field.PasswordField, + "dropdown": PMUI.field.DropDownListField, + "radio": PMUI.field.RadioButtonGroupField, + "checkbox": PMUI.field.CheckBoxGroupField, + "textarea": PMUI.field.TextAreaField, + "datetime": PMUI.field.DateTimeField, + "optionsSelector": PMUI.field.OptionsSelectorField, + "buttonField": PMUI.field.ButtonField, + "annotation": PMUI.field.TextAnnotationField + }, + defaultProduct: "panel" + }; + this.setProducts(defaults.products) + .setDefaultProduct(defaults.defaultProduct); +}; + +/** + * Class representing a Web Entry + * @param relatedShape + * @constructor + */ +var WebEntry = function (relatedShape) { + this.relatedShape = null; + this.groupType = null; + this.groupLabel = null; + this.stepsType = null; + this.actUid = null; + this.evenUid = null; + this.weeUid = null; + this.stepsAssigned = null; + this.elementAccordionOpen = null; + this.configWebEntry = null; + this.isNewWebEntry = null; + this.windowWebEntry = null; + this.windowAlternative = null; + this.tabForm = null; + this.tabProperties = null; + this.tabLink = null; + this.confirmWindow = null; + this.tabPanelWindow = null; + this.suggestUser = null; + this.stepsAssignTree = null; + this.stepsAssignAccordion = null; + this.labelsPanel = null; + this.userGuest = {}; + WebEntry.prototype.initialize.call(this, relatedShape); +}; +/** + * A module representing a Web Entry + **/ +WebEntry.prototype = { + /** + * Sets the actUid + * @param {string} actUid + */ + setActUid: function (actUid) { + this.actUid = actUid; + return this; + }, + + /** + * Sets the evenUid + * @param {string} evenUid + */ + setEvnUid: function (evenUid) { + this.evenUid = evenUid; + return this; + }, + + /** + * Sets the weeUid + * @param {string} weeUid + */ + setWeeUid: function (weeUid) { + this.weeUid = weeUid; + return this; + }, + + /** + * Sets the configWebEntry + * @param {object} configWebEntry + */ + setConfigWebEntry: function (configWebEntry) { + this.configWebEntry = configWebEntry; + return this; + }, + + /** + * Sets the isNewWebEntry + * @param {boolean} isNewWebEntry + */ + setIsNewWebEntry: function (isNewWebEntry) { + this.isNewWebEntry = isNewWebEntry; + return this; + }, + + /** + * Sets the windowWebEntry + * @param {object} windowWebEntry + */ + setWindowWebEntry: function (windowWebEntry) { + this.windowWebEntry = windowWebEntry; + return this; + }, + + /** + * Sets the windowAlternative + * @param {object} windowAlternative + */ + setWindowAlternative: function (windowAlternative) { + this.windowAlternative = windowAlternative; + return this; + }, + + /** + * Sets the relatedShape + * @param {object} relatedShape + */ + setRelatedShape: function (relatedShape) { + this.relatedShape = relatedShape; + return this; + }, + + /** + * Sets the tabForm + * @param {object} tabForm + */ + setTabForm: function (tabForm) { + this.tabForm = tabForm; + return this; + }, + + /** + * Sets the tabProperties + * @param {object} tabProperties + */ + setTabProperty: function (tabProperties) { + this.tabProperties = tabProperties; + return this; + }, + + /** + * Sets the tabLink + * @param {object} tabLink + */ + setTabLink: function (tabLink) { + this.tabLink = tabLink; + return this; + }, + + /** + * Sets the confirmWindow + * @param {object} confirmWindow + */ + setConfirmWin: function (confirmWindow) { + this.confirmWindow = confirmWindow; + return this; + }, + + /** + * Sets the tabPanelWindow + * @param {object} tabPanelWindow + */ + setTabPanelWindow: function (tabPanelWindow) { + this.tabPanelWindow = tabPanelWindow; + return this; + }, + + /** + * Sets the suggestUser + * @param {object} suggestUser + */ + setSuggestUser: function (suggestUser) { + this.suggestUser = suggestUser; + return this; + }, + + /** + * Sets the stepsAssignTree + * @param {object} stepsAssignTree + */ + setStepsTree: function (stepsAssignTree) { + this.stepsAssignTree = stepsAssignTree; + return this; + }, + + /** + * Sets the stepsAssignAccordion + * @param {object} stepsAssignAccordion + */ + setStepsAccordion: function (stepsAssignAccordion) { + this.stepsAssignAccordion = stepsAssignAccordion; + return this; + }, + + /** + * Sets the labelsPanel + * @param {object} labelsPanel + */ + setLabelPanel: function (labelsPanel) { + this.labelsPanel = labelsPanel; + return this; + }, + + /** + * Sets the userGuest + * @param userGuest + */ + setUserGuest: function (userGuest) { + this.userGuest = userGuest; + return this; + }, + + /** + * Get the userGuest + * @returns {Object} userGuest + */ + getUserGuest: function () { + return this.userGuest || {}; + }, + + /** + * Get the actUid value + * @returns {null|*|string} The actUid value + */ + getActUid: function () { + return this.actUid || ""; + }, + + /** + * Get the isNewWebEntry value + * @returns {null|*|boolean} The isNewWebEntry value + */ + getRelatedShape: function () { + return this.relatedShape || []; + }, + + /** + * Get the evenUid value + * @returns {null|*|string} The evenUid value + */ + getEvnUid: function () { + return this.evenUid || ""; + }, + + /** + * Get the weeUid value + * @returns {null|*|string} The weeUid value + */ + getWeeUid: function () { + return this.weeUid || ""; + }, + + /** + * Get the configWebEntry value + * @returns {*|null|Array} The configWebEntry value + */ + getConfigWebEntry: function () { + return this.configWebEntry || []; + }, + + /** + * Get the isNewWebEntry value + * @returns {null|*|boolean} The isNewWebEntry value + */ + getIsNewWebEntry: function () { + return this.isNewWebEntry || false; + }, + + /** + * Get the windowWebEntry value + * @returns {null|*} The windowWebEntry value + */ + getWindowWebEntry: function () { + return this.windowWebEntry || null; + }, + + /** + * Get the windowAlternative value + * @returns {*|null} The windowAlternative value + */ + getWindowAlternative: function () { + return this.windowAlternative || null; + }, + + /** + * Get the tabForm value + * @returns {*|null} The tabForm value + */ + getTabForm: function () { + return this.tabForm || null; + }, + + /** + * Get the tabProperties value + * @returns {null|*} The tabProperties value + */ + getTabProperty: function () { + return this.tabProperties || null; + }, + + /** + * Get the tablink value + * @returns {null|*} The tablink value + */ + getTabLink: function () { + return this.tabLink || null; + }, + + /** + * Get the confirmWindow value + * @returns {null|*} The confirmWindow value + */ + getConfirmWin: function () { + return this.confirmWindow || null; + }, + + /** + * Get the tabPanelWindow + * @returns {*|null} + */ + getTabPanelWindow: function () { + return this.tabPanelWindow || null; + }, + + /** + * get the suggestUser value + * @returns {*|null} The suggestUser value + */ + getSuggestUser: function () { + return this.suggestUser || null; + }, + + /** + * Sets the stepsAssignTree + * @returns {*|null} + */ + getStepsTree: function () { + return this.stepsAssignTree || null; + }, + + /** + * Get the stepsAssignAccordion value + * @returns {*|null} The stepsAssignAccordion value + */ + getStepsAccordion: function () { + return this.stepsAssignAccordion || null; + }, + + /** + * get the labelsPanel value + * @returns {null|*} The labelsPanel value + */ + getLabelPanel: function () { + return this.labelsPanel || null; + }, + + /** + * initialize App + * @param relatedShape + */ + initialize: function (relatedShape) { + this.groupType = [ + 'DYNAFORM', 'INPUT_DOCUMENT', + 'OUTPUT_DOCUMENT', 'EXTERNAL' + ]; + this.groupLabel = [ + 'Dynaform (s)'.translate(), 'Input Document (s)'.translate(), + 'OutPut Document (s)'.translate(), 'External (s)'.translate() + ]; + this.stepsType = { + 'DYNAFORM': 'Dynaform'.translate(), + 'INPUT_DOCUMENT': 'Input Document'.translate(), + 'OUTPUT_DOCUMENT': 'Output Document'.translate(), + 'EXTERNAL': 'External'.translate() + }; + + this.setRelatedShape(relatedShape) + .setEvnUid(relatedShape.evn_uid); + + if (this.getRelatedShape().getPorts().getFirst()) { + this.setActUid(this.getRelatedShape().getPorts().getFirst().getConnection().getDestPort().getParent() + .act_uid); + } + if (__env.USER_GUEST) { + $.extend(true, this.userGuest, __env.USER_GUEST); + } + this.stepsAssigned = new PMUI.util.ArrayList(); + this.elementAccordionOpen = new PMUI.util.ArrayList(); + }, + + /** + * Render form + * @returns {WebEntry} + */ + render: function () { + this.getWindow().addItem(this.getTabPanel()); + this.getWindow().open(); + this.getWindow().showFooter(); + this.initializeData(); + return this; + }, + + /** + * Populate Web Entry data + */ + initializeData: function () { + //Pupulate web entry data + this.getInstanceWebEntryData(); + this.setWebEntryConfiguration(); + this.initializeAccordionAndTreepanelData(); + }, + + /** + * Populate accordion and treepanel data + */ + initializeAccordionAndTreepanelData: function () { + var that = this; + //clear global array stepsAssigned + this.stepsAssigned.clear(); + //get accordion data + this.getAccordionData( + function (xhr, response) { + //populate data accordion tabForms + that.loadAccordionItems(response); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + //get getTreePanelData data + this.getTreePanelData( + function (xhr, response) { + //populate data treePanel tabForms + that.loadTreePanelData(response); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + this.addEventSortableInAccordionElements(); + this.addEventSortableInTreePanelElements(); + }, + + /** + * Get all dynaforms + * Execute restClient(GET/project/dynaforms) + * @param successCallback + * @param failureCallback + */ + getDynaforms: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'dynaforms', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get users + * Execute restClient(GET/users/uid_usr) + * @param uidUser + * @param successCallback + * @param failureCallback + */ + getUserData: function (uidUser, successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'users/' + uidUser, + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).setBaseEndPoint("").executeRestClient(); + }, + + /** + * Get WebEntry Configuration + * Execute restClient(GET/web-entry-event/event/) + * Execute restClient(POST/web-entry-event/) + * @param successCallback + * @returns {Array} + */ + getWebEntryConfiguration: function (successCallback) { + var that = this, + restProxy = new PMRestClient({ + endpoint: 'web-entry-event/event/' + that.getEvnUid(), + typeRequest: "get", + functionSuccess: function (xhr, response) { + successCallback(response, false); + that.initializeSomeVariables(response, false); + }, + functionFailure: function (xhr, response) { + restProxy = new PMRestClient({ + endpoint: 'web-entry-event', + typeRequest: "post", + data: { + act_uid: that.getActUid(), + evn_uid: that.getEvnUid(), + wee_title: that.getEvnUid(), + we_type: "MULTIPLE", + we_authentication: "LOGIN_REQUIRED", + we_callback: "PROCESSMAKER", + we_callback_url: "", + we_show_in_new_case: "0", + usr_uid: that.getUserGuest().uid || '' + }, + functionSuccess: function (xhr, response) { + successCallback(response, true); + that.initializeSomeVariables(response, true); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + } + }); + restProxy.executeRestClient(); + return this; + }, + + /** + * Update data Web Entry Configuration + * Execute restClient(PUT/web-entry-event/weeuid) + * @param data + * @param successCallback + * @param failureCallback + * @returns {PMRestClient} + */ + updateWebEntryConfiguration: function (data, successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + this.weeUid, + typeRequest: 'update', + data: data, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get Accordion Data (Tab Forms) + * Execute restClient(GET/steps, GET/step/triggers) + * @returns {Array} + */ + getAccordionData: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/steps', + method: 'GET' + }, { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/step/triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).executeRestClient(); + }, + + /** + * Get TreePanel Data (TabForm) + * Execute restClient(GET/available-steps GET/triggers) + * @returns {Array} + */ + getTreePanelData: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/available-steps', + method: 'GET' + }, { + url: 'triggers', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Get steps Availables (TreePanel) + * Execute restClient(GET/available-steps) + * @param successCallback + * @param failureCallback + * @returns {Array} + */ + getStepAvailables: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'activity/' + this.getConfigWebEntry().tas_uid + '/available-steps', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Load Skin and Languages + * Execute restClient(GET/system/languages GET/system/skins) + * @returns {Array} + */ + getSkinLanguage: function (successCallback, failureCallback) { + return new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [ + { + url: 'system/languages', + method: 'GET' + }, { + url: 'system/skins', + method: 'GET' + } + ] + }, + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + }, + messageError: 'There are problems getting the Steps, please try again.'.translate() + }).setBaseEndPoint("").executeRestClient(); + }, + + /** + * Delete the WebEntry configuration. + * @param successCallback + * @param failureCallback + */ + deleteWebEntryConfiguration: function (successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + this.weeUid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Generate webEntry Link + * @param weeUid + * @param successCallback + * @param failureCallback + */ + generateLink: function (weeUid, successCallback, failureCallback) { + return new PMRestClient({ + endpoint: 'web-entry-event/' + weeUid + '/generate-link', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + successCallback(xhr, response); + }, + functionFailure: function (xhr, response) { + failureCallback(xhr, response); + } + }).executeRestClient(); + }, + + /** + * Creates an instance of the WebEntry class + * @returns {null} + */ + getInstanceWebEntryData: function () { + this.getWebEntryConfiguration( + function (webEntryEvent, isNew) { + if (isNew) { + webEntryEvent.we_type = 'SINGLE'; + webEntryEvent.we_authentication = 'ANONYMOUS'; + webEntryEvent.wee_url = ''; + webEntryEvent.wee_title = ''; + } + } + ); + return this; + }, + + /** + * Get Main Container Window + * @returns {PMUI.ui.Window} + */ + getWindow: function () { + if (this.getWindowWebEntry() === null) { + this.setWindowWebEntry(this.buildWindow()); + } + return this.getWindowWebEntry(); + }, + + /** + * Build Window Container + * @returns {PMUI.ui.Window} + */ + buildWindow: function () { + var that = this; + return new PMUI.ui.Window({ + id: 'windowWebEntry', + title: 'Web Entry'.translate(), + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + footerAlign: 'right', + onBeforeClose: function () { + if (that.isNewWebEntry) { + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } else { + that.getWindow().close(); + } + that.getWindow().close(); + }, + buttonPanelPosition: 'bottom', + buttonsPosition: 'right', + buttons: [ + { + id: 'windowWebEntryButtonDelete', + text: 'Delete'.translate(), + handler: function () { + that.handlerDeleteWebEntry(); + }, + buttonType: "error" + }, + { + id: 'windowWebEntryButtonCancel', + text: 'Cancel'.translate(), + handler: function () { + if (that.isNewWebEntry) { + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } else { + that.getWindow().close(); + } + }, + buttonType: "error" + }, + { + id: 'windowWebEntryButtonSave', + text: 'Save'.translate(), + handler: function (e) { + that.checkUserGuest('saveConfig'); + }, + buttonType: 'success' + } + ] + }); + }, + + /** + * Return Second Window Container + * @returns {PMUI.ui.Window} + */ + getWindowAlternativeForm: function () { + if (this.getWindowAlternative() === null) { + this.setWindowAlternative(this.buildWindowAlternative()); + } + return this.getWindowAlternative(); + }, + + /** + * Build Second Window Container + * @returns {PMUI.ui.Window} + */ + buildWindowAlternative: function () { + return new PMUI.ui.Window({ + visibleFooter: true, + title: 'Trigger'.translate(), + footerAlign: 'right', + footerItems: [{ + text: "@@", + id: "secondaryWindow-criteria", + style: { + cssProperties: { + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + }, + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-cancel', + text: 'Cancel'.translate(), + buttonType: 'error', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + } + }, { + id: 'secondaryWindow-save', + text: 'Save'.translate(), + buttonType: 'success', + height: 31, + style: { + cssClasses: ["mafe-button-condition-trigger"] + } + }] + }); + }, + + /** + * Get TabPanel Container + * @returns {TabPanel} + */ + getTabPanel: function () { + if (this.getTabPanelWindow() === null) { + this.setTabPanelWindow(this.buildPanelWindow()); + } + return this.getTabPanelWindow(); + }, + + /** + * Build TabPanel (TabForms, TabProperties, TabLink) + * @returns {PMUI.panel.TabPanel} + */ + buildPanelWindow: function () { + return new PMUI.panel.TabPanel({ + id: 'windowWebEntryTabPanel', + width: DEFAULT_WINDOW_WIDTH - 50, + items: [ + { + id: 'tabForms', + title: 'Forms'.translate(), + panel: this.getTabForms() + }, + { + id: 'tabProperties', + title: 'Properties'.translate(), + panel: this.getTabProperties() + }, + { + id: 'tabLink', + title: 'Link'.translate(), + panel: this.getTabLinkForm() + } + ], + style: { + cssProperties: { + 'margin-left': '10px' + } + }, + itemsPosition: { + position: 'left' + } + }); + }, + + /** + * Get Panel TabForms + * @returns {Panel} + */ + getTabForms: function () { + if (this.getTabForm() === null) { + this.setTabForm(this.buildTabForms()); + } + return this.getTabForm(); + }, + + /** + * Build Tab Forms + * @returns {PMUI.core.Panel} + */ + buildTabForms: function () { + var that = this, + singleDynaform, + stepsMainContainer; + + singleDynaform = new PMUI.form.Form({ + id: 'singleDynaform', + width: DEFAULT_WINDOW_WIDTH - 220, + height: 180, + name: 'singleDynaform', + visibleHeader: false, + items: [ + { + id: 'singleDynaformRadio', + pmType: 'radio', + labelVisible: false, + value: 'SINGLE', + name: 'options', + required: false, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'singleDynaform', + label: 'Single Dynaform'.translate(), + value: 'SINGLE', + selected: true + } + ], + onChange: function (newVal, oldVal) { + that.weeFormModeChange(newVal, oldVal); + }, + labelWidth: '0%' + }, + { + id: 'weeSelectDynaform', + name: 'tabFormsDropdownDyanform', + pmType: 'dropdown', + label: 'Dynaform'.translate(), + helper: 'Select Dynaform use in case.'.translate(), + required: true, + controlsWidth: 400, + labelWidth: '25%', + style: { + cssProperties: { + 'padding-left': '100px' + } + }, + options: [ + { + label: 'Select Dynaform'.translate(), + value: '' + } + ] + + }, + { + id: 'multipleStepsRadio', + pmType: 'radio', + labelVisible: false, + value: '', + name: 'options', + required: false, + controlPositioning: 'vertical', + maxDirectionOptions: 4, + options: [ + { + id: 'multipleSteps', + label: 'Multiple Steps'.translate(), + value: 'MULTIPLE' + } + ], + onChange: function (newVal, oldVal) { + that.weeFormModeChange(newVal, oldVal); + }, + labelWidth: '0%' + + } + ] + }); + + stepsMainContainer = new PMUI.core.Panel({ + id: 'stepsMainContainer', + layout: 'hbox', + width: DEFAULT_WINDOW_WIDTH - 220, + items: [ + that.getStepsAssignTree(), + that.getStepsAssignAccordion() + ] + }); + + return new PMUI.core.Panel({ + id: 'mainContainer', + layout: 'vbox', + width: DEFAULT_WINDOW_WIDTH - 220, + items: [ + singleDynaform, + that.getLabelsPanel(), + stepsMainContainer + ] + }); + }, + + /** + * Get Panel TabProperties + * @returns {Panel} + */ + getTabProperties: function () { + if (this.getTabProperty() === null) { + this.setTabProperty(this.buildTabProperties()); + } + return this.getTabProperty(); + }, + + /** + * Build TabProperties + * @returns {PMUI.core.Panel} + */ + buildTabProperties: function () { + var that = this, + propertiesForm; + + propertiesForm = new PMUI.form.Form({ + id: 'idTabFormProperties', + width: DEFAULT_WINDOW_WIDTH - 220, + visibleHeader: false, + items: [ + { + id: 'tabPropertiesWebEntryTitle', + pmType: 'text', + name: 'tabPropertiesWebEntryTitle', + valueType: 'string', + label: 'Web Entry Title'.translate(), + placeholder: 'Enter a title displayed on web entry window (if applies)'.translate(), + helper: 'Enter a title displayed on web entry window (if applies).'.translate(), + required: false, + controlsWidth: 458, + labelWidth: '23%' + }, + { + id: 'tabPropRadioAuthentication', + pmType: 'radio', + labelVisible: true, + label: 'Authentication'.translate(), + value: 'ANONYMOUS', + name: 'authentication', + required: true, + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'tabPropertiesOptionRadioAnonymous', + label: 'Anonymous'.translate(), + value: 'ANONYMOUS', + selected: false + } + ], + onChange: function (newVal, oldVal) { + that.anonimusProcedure(newVal, oldVal); + }, + labelWidth: '23%' + }, + { + id: 'tabPropertiesRequireUserLogin', + pmType: 'radio', + labelVisible: false, + value: 'LOGIN_REQUIRED', + required: false, + name: 'authentication', + controlPositioning: 'horizontal', + maxDirectionOptions: 4, + options: [ + { + id: 'tabPropertiesRadioRequireUserLogin', + label: 'Require user login'.translate(), + value: 'LOGIN_REQUIRED', + selected: false + } + ], + onChange: function (newVal, oldVal) { + that.loginRequired(newVal, oldVal); + }, + labelWidth: '23%' + }, + { + id: 'tabPropertiesHideLoogedInformationBar', + pmType: 'checkbox', + name: 'tabPropertiesHideLoogedInformationBar', + labelVisible: false, + disabled: true, + options: [ + { + id: 'hideLoogedInformationBar', + label: 'Hide Logged Information Bar'.translate(), + value: '1', + selected: false + } + ], + style: { + cssProperties: { + 'padding-left': '50px' + } + } + }, + { + id: 'tabPropertiesRadioCallback', + pmType: 'radio', + labelVisible: true, + label: 'Callback Action'.translate(), + value: 'PROCESSMAKER', + required: true, + disabled: false, + controlPositioning: 'vertical', + labelPosition: 'left', + helper: 'Callback Action...'.translate(), + maxDirectionOptions: 4, + options: [ + { + id: 'redirectPM', + label: 'Redirect to ProcessMaker predefined response page'.translate(), + value: 'PROCESSMAKER', + selected: true + }, + { + id: 'redirectURL', + label: 'Redirect to custom URL'.translate(), + value: 'CUSTOM' + }, + { + id: 'redirectCustom', + label: 'Redirect to custom URL and clear login info'.translate(), + value: 'CUSTOM_CLEAR' + } + ], + onChange: function (newVal, oldVal) { + that.callbackActionChange(newVal, oldVal); + + }, + labelWidth: '23%' + }, + new CriteriaField({ + id: 'criteriaFieldCustomUrl', + pmType: 'text', + name: 'criteriaFieldCustomUrl', + label: 'Custom URL'.translate(), + placeholder: 'Enter a valid URL to be redirected when entry will be completed'.translate(), + labelWidth: '23%', + controlsWidth: 455, + required: true, + disabled: true + }), + { + id: 'showInNewCase', + pmType: 'checkbox', + name: 'showInNewCase', + label: 'Show task in New Case'.translate(), + labelVisible: true, + options: [ + { + id: 'showTaskInNewCase', + value: 'showCase', + selected: false + } + ], + onChange: function (newValue, oldValue) { + this.setValue(newValue); + } + } + ] + }); + + $(propertiesForm.getItem('tabPropRadioAuthentication').getHTML()) + .append($(that.getSuggestField().createHTML())); + + return propertiesForm; + }, + + /** + * Get Panel TabLink + * @returns {Panel} + */ + getTabLinkForm: function () { + if (this.getTabLink() === null) { + this.setTabLink(this.buildTabLink()); + } + return this.getTabLink(); + }, + + /** + * Build TabLink + * @returns {PMUI.core.Panel} + */ + buildTabLink: function () { + var that = this, + tfromLink; + + tfromLink = new PMUI.form.Form({ + id: 'idTabFormLink', + width: DEFAULT_WINDOW_WIDTH - 220, + visibleHeader: false, + items: [ + { + id: 'tabLinkRadioGeneration', + pmType: 'radio', + labelVisible: true, + label: 'Link Generation'.translate(), + value: 'DEFAULT', + name: 'options', + required: true, + controlPositioning: 'vertical', + labelPosition: 'left', + helper: 'Link Generation'.translate(), + controlsWidth: 485, + labelWidth: '24.5%', + maxDirectionOptions: 3, + options: [ + { + id: 'generateLinkDefaultValues', + label: 'Generate link using workspace default values (skin, language)'.translate(), + value: 'DEFAULT', + selected: 'true' + }, + { + id: 'advancedLinkGeneration', + label: 'Advanced link generation'.translate(), + value: 'ADVANCED' + } + ], + onChange: function (newVal) { + that.linkGenerationOnChange(newVal); + }, + labelWidth: '18%' + }, + { + id: 'tabLinkDropdownSkin', + name: 'tabLinkDropdownSkin', + pmType: 'dropdown', + label: 'Skin'.translate(), + helper: 'Select a Skin.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: '24.5%', + onChange: function () { + that.setLinkText(tfromLink, ''); + }, + options: [ + { + label: 'Select a Skin'.translate(), + value: '' + } + ] + }, + { + id: 'tabLinkDropdownLanguage', + name: 'tabLinkDropdownLanguage', + pmType: 'dropdown', + label: 'Language'.translate(), + helper: 'Select a language.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: '24.5%', + onChange: function () { + that.setLinkText(tfromLink, ''); + }, + options: [ + { + label: 'Select a language'.translate(), + value: '' + } + ] + }, + { + id: 'tablinkTextCustomDomain', + pmType: 'text', + name: 'tablinkTextCustomDomain', + valueType: 'string', + label: 'Custom Hostname'.translate(), + placeholder: 'https://example.com:8080'.translate(), + helper: 'Protocol and Hostname, port is optional.'.translate(), + required: true, + controlsWidth: 485, + labelWidth: "24.5%", + validators: [ + { + pmType: "regexp", + criteria: /^(https?:\/\/)?(((\d{1,3}\.){3}\d{1,3})|(([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?))(:\d+)?$/i, + errorMessage: 'Enter a Protocol and Hostname valid value.'.translate() + } + ], + onChange: function () { + that.setLinkText(tfromLink, ''); + } + }, + { + id: 'panelLinkForm', + pmType: 'panel', + layout: 'hbox', + required: true, + width: '155px', + style: { + cssProperties: { + 'margin-left': '-10px', + 'margin-top': '-10px' + } + }, + items: [ + { + pmType: 'annotation', + text: 'Web Entry URL:'.translate(), + id: 'webEntryLinkLabel', + required: true, + name: 'webEntryLinkLabel' + }, + { + pmType: 'annotation', + id: 'webEntryLink', + name: 'webEntryLink', + text: '', + required: true, + textType: 1, + style: { + cssProperties: { + 'margin-left': '-173px' + } + } + } + ] + }, + new PMUI.field.ButtonField({ + id: 'buttonFieldGenerateLink', + pmType: 'buttonField', + value: 'Generate Link'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 180, + proportion: 0.6, + handler: function (field) { + that.checkUserGuest('generateLink'); + }, + buttonType: 'success', + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '10px', + 'padding-right': '0px', + 'padding-bottom': '1px', + 'padding-left': '130px' + } + } + }) + ] + }); + + tfromLink.getItem('buttonFieldGenerateLink').getControl(0).button.setButtonType('success'); + + return tfromLink; + }, + + /** + * Get MessageWindow Container + * @returns {PMUI.ui.MessageWindow} + */ + getConfirmWindow: function () { + if (this.getConfirmWin() === null) { + this.setConfirmWin(this.buildConfirmWindow()); + } + return this.getConfirmWin(); + }, + + /** + * Build MessageWindow + * @returns {PMUI.ui.MessageWindow} + */ + buildConfirmWindow: function () { + return new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: '', + message: '', + footerItems: [ + { + id: 'confirmWindow-footer-no', + text: 'No'.translate(), + visible: true, + buttonType: 'error' + }, { + id: 'confirmWindow-footer-yes', + text: 'Yes'.translate(), + visible: true, + buttonType: 'success' + } + ], + visibleFooter: true + }); + }, + + /** + * Handler button for delete web entry config + */ + handlerDeleteWebEntry: function () { + var that = this, + confirmWindow, + yesButton, + noButton; + confirmWindow = that.getConfirmWindow() + .setMessage('Are you sure you want to delete the Web Entry configuration?'.translate()); + yesButton = that.getConfirmWindow().footer.getItem('confirmWindow-footer-yes'); + yesButton.setHandler(function () { + confirmWindow.close(); + that.deleteWebEntryConfiguration( + function () { + that.getWindow().close(); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + noButton = that.getConfirmWindow().footer.getItem('confirmWindow-footer-no'); + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + that.getConfirmWindow().open(); + return this; + }, + + /** + * Handler button for save web entry config + * @param method + */ + checkUserGuest: function (method) { + var title = 'Web Entry Anonymous Authentication'.translate(), + message = ('Current selected user to act as anonymous will be replaced by the Guest user. ' + + 'This action cannot be undone. Do you want to proceed?').translate(); + + //Validate the data before saving the configuration or generate the link + if (this.isValidWebEntryData(method)) { + (method === 'saveConfig') ? this.handlerSaveButton(message, title) : this.handlerGenerateLinkButton(message, title); + } + return this; + }, + + /** + * Check userGuestUID and save Config + * @param message + * @param title + * @returns {WebEntry} + */ + handlerSaveButton: function (message, title) { + var that = this, + messageWindow = this.getConfirmWindow(); + //Validation is done to be compatible with older versions of webEntry (Now exist guest-type user). + if (this.getUserGuest().uid && this.getSuggestField().value !== this.getUserGuest().uid) { + messageWindow.setMessage(message); + messageWindow.setTitle(title); + + //handler for cancel button + messageWindow.footer.getItem('confirmWindow-footer-no').setHandler(function () { + messageWindow.close(); + }); + + //handler for yes button + messageWindow.footer.getItem('confirmWindow-footer-yes').setHandler(function () { + messageWindow.close(); + that.getSuggestField().set('value', that.getUserGuest().uid); + that.saveWebEntryConfiguration( + function () { + that.getWindow().close(); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + messageWindow.open(); + } else { + //For new configurations we save the configuration without any GUEST user validation. + this.saveWebEntryConfiguration( + function () { + that.getWindow().close(); + }, function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } + return this; + }, + + /** + * Check userGuestUID and generate webEntry Link + * @param message + * @param title + * @returns {WebEntry} + */ + handlerGenerateLinkButton: function (message, title) { + var that = this, + formLink = this.getTabLinkForm(), + messageWindow = this.getConfirmWindow(); + //Validation is done to be compatible with older versions of webEntry (Now exist guest-type user). + if (this.getUserGuest().uid && this.getSuggestField().value !== this.getUserGuest().uid) { + messageWindow.setMessage(message); + messageWindow.setTitle(title); + + //handler for cancel button + messageWindow.footer.getItem('confirmWindow-footer-no').setHandler(function () { + messageWindow.close(); + }); + //handler for yes button + + messageWindow.footer.getItem('confirmWindow-footer-yes').setHandler(function () { + messageWindow.close(); + that.getSuggestField().set('value', that.getUserGuest().uid); + that.setLinkText(formLink, ''); + //save Web Entry Configuration + that.saveWebEntryConfiguration( + function (xhr, response) { + that.getConfigWebEntry().usr_uid = response.usr_uid || that.getConfigWebEntry().usr_uid; + //generate webEntry Link + that.generateLink( + that.getWeeUid(), + function (xhr, response) { + that.setLinkText(formLink, (response.link) ? response.link : ''); + that.initializeAccordionAndTreepanelData(); + that.getSuggestField().html.find("input") + .val(that.getUserGuest().firstname + " " + "(" + that.getUserGuest().username + ")"); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }); + messageWindow.open(); + } else { + //For new configurations we generate the webEntry Link without any GUEST user validation. + this.saveWebEntryConfiguration( + function () { + that.generateLink( + that.getWeeUid(), + function (xhr, response) { + that.setLinkText(formLink, (response.link) ? response.link : ''); + that.initializeAccordionAndTreepanelData(); + }, + function (xhr, response) { + that.setLinkText(formLink, ''); + PMDesigner.msgWinError(response.error.message); + } + ); + }, + function (xhr, response) { + that.setLinkText(formLink, ''); + PMDesigner.msgWinError(response.error.message); + } + ); + } + return this; + }, + + /** + * Get Steps AssignAccordion + * @returns {PMUI.panel.AccordionPanel} + */ + getStepsAssignAccordion: function () { + if (this.getStepsAccordion() === null) { + this.setStepsAccordion(this.buildStepsAssignAccordion()); + } + return this.getStepsAccordion(); + }, + + /** + * Build Steps Assign Accordion + * @returns {PMUI.panel.AccordionPanel} + */ + buildStepsAssignAccordion: function () { + var that = this; + return new PMUI.panel.AccordionPanel({ + id: 'stepsAssignAccordion', + multipleSelection: true, + hiddenTitle: true, + proportion: 1.5, + style: { + cssProperties: { + margin: '0px 0px 0px 0px' + }, + cssClasses: ['mafe-border-panel'] + }, + listeners: { + select: function (accordionItem, event) { + var buttonExpand, buttonCollapse, itemsAccod; + itemsAccod = that.getStepsAssignAccordion().items; + if (accordionItem.collapsed) { + if (that.elementAccordionOpen.indexOf(accordionItem) > -1) { + that.elementAccordionOpen.remove(accordionItem); + } + } else { + if (that.elementAccordionOpen.indexOf(accordionItem) === -1) { + that.elementAccordionOpen.insert(accordionItem); + } + } + buttonCollapse = that.getLabelsPanel().getItem('collapse-button'); + buttonExpand = that.getLabelsPanel().getItem('expand-button'); + if (that.elementAccordionOpen.getSize() === 0) { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(true); + } else if (that.elementAccordionOpen.getSize() === itemsAccod.getSize()) { + buttonExpand.setDisabled(true); + buttonCollapse.setDisabled(false); + } else { + buttonExpand.setDisabled(false); + buttonCollapse.setDisabled(false); + } + } + } + }); + }, + + /** + * Get steps AssignTree + * @returns {PMUI.core.Panel} + */ + getStepsAssignTree: function () { + if (this.getStepsTree() === null) { + this.setStepsTree(this.buildStepsAssignTree()); + } + return this.getStepsTree(); + }, + + /** + * Build steps AssignTree + * @returns {PMUI.panel.TreePanel} + */ + buildStepsAssignTree: function () { + return new PMUI.panel.TreePanel({ + id: 'stepsAssignTree', + proportion: 0.5, + height: 475, + filterable: true, + autoBind: true, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nodeDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true, + collapsed: false, + itemsDataBind: 'items', + childrenDefaultSettings: { + labelDataBind: 'obj_title', + autoBind: true + }, + behavior: 'drag' + }, + style: { + cssProperties: { + margin: '0px 0px 0px 0px', + float: 'left', + overflow: 'auto' + }, + cssClasses: ['mafe-border-panel'] + } + }); + }, + + /** + * Get Label Panel + * @returns {PMUI.core.Panel} + */ + getLabelsPanel: function () { + if (this.getLabelPanel() === null) { + this.setLabelPanel(this.buildLabelPanel()); + } + return this.getLabelPanel(); + }, + + /** + * Build Label Panel + * @returns {PMUI.core.Panel} + */ + buildLabelPanel: function () { + var that = this; + return new PMUI.core.Panel({ + width: DEFAULT_WINDOW_WIDTH - 220, + layout: "hbox", + items: [ + new PMUI.field.TextAnnotationField({ + text: 'Available Elements'.translate(), + proportion: 1.12, + text_Align: 'center' + }), + new PMUI.field.TextAnnotationField({ + text: 'Assigned Elements (Drop here)'.translate(), + proportion: 1.3, + text_Align: 'center' + }), + new PMUI.ui.Button({ + buttonType: 'link', + text: 'Expand all'.translate(), + id: 'expand-button', + proportion: 1.2, + handler: function () { + that.expandAndCollapseHandler('collapse-button', 'expand-button'); + } + }), + new PMUI.ui.Button({ + buttonType: 'link', + text: 'Collapse all'.translate(), + id: 'collapse-button', + proportion: 1.1, + disabled: true, + handler: function () { + that.expandAndCollapseHandler('expand-button', 'collapse-button'); + } + }) + ] + }); + }, + + /** + * Get SuggestField Control + * @returns {SuggestField} + */ + getSuggestField: function () { + if (this.getSuggestUser() === null) { + this.setSuggestUser(this.createSugesstField()); + } + return this.getSuggestUser(); + }, + + /** + * Create Field Suggest (User) + * @returns {SuggestField} + */ + createSugesstField: function () { + return new SuggestField({ + id: 'idSuggestUser', + label: 'Users'.translate(), + width: 450, + placeholder: 'Suggest users'.translate(), + required: true, + disabled: true, + helper: 'When the form is submitted a new case is created with this user account.'.translate(), + dynamicLoad: { + data: [{ + key: 'usr_uid', + label: ['usr_firstname', 'usr_lastname', '(', 'usr_username', ')'] + }], + keys: { + url: HTTP_SERVER_HOSTNAME + '/api/1.0/' + WORKSPACE, + accessToken: credentials.access_token, + endpoints: [{ + method: 'GET', + url: 'users' + }] + } + } + }); + }, + + /** + * Generate Web Entry Link + * @param formLink + * @param linkText + */ + setLinkText: function (formLink, linkText) { + formLink.getItem('panelLinkForm').getItem('webEntryLink') + .setText('' + linkText + ''); + return this; + }, + + /** + * Initialize Some Variables for web Entry (weeUId, actUid, evnUid, response, isNewWebEntry) + * @param response + * @param newWebEntry + */ + initializeSomeVariables: function (response, newWebEntry) { + this.setWeeUid(response.wee_uid) + .setActUid(response.act_uid) + .setEvnUid(response.evn_uid) + .setConfigWebEntry(response) + .setIsNewWebEntry(newWebEntry); + return this; + }, + + /** + * Collapse and Expand Accordion Handler + * @param enableItem + * @param disableItem + */ + expandAndCollapseHandler: function (enableItem, disableItem) { + var items, + i, + item; + items = this.getStepsAssignAccordion().getItems(); + this.getLabelsPanel().getItem(enableItem).setDisabled(false); + this.getLabelsPanel().getItem(disableItem).setDisabled(true); + if (enableItem === 'collapse-button') { + this.elementAccordionOpen.clear(); + for (i = 0; i < items.length; i += 1) { + item = items[i]; + item.expand(); + this.elementAccordionOpen.insert(item); + } + } else { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + this.elementAccordionOpen.remove(item); + item.collapse(); + } + } + }, + + /** + * Disable MultipleSteps or Single Dynaform (tabForms) + * @returns {disableMultipleSteps} + */ + weeFormModeChange: function (newVal, oldVal) { + if (newVal === 'SINGLE') { + this.disableMultipleSteps('SINGLE'); + } else { + this.disableSingleDynaform('MULTIPLE'); + this.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform').hideMessage(); + this.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform') + .getControl(0).style.removeClasses(['error']); + } + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Disable MultipleSteps (tabForms) + * @param singleMultiple + * @returns {WebEntry} + */ + disableMultipleSteps: function (singleMultiple) { + var singleDyna = this.getTabForms().getItem('singleDynaform'); + singleDyna.getItem('multipleStepsRadio').setValue(''); + singleDyna.getItem('weeSelectDynaform').enable(); + singleDyna.getItem('weeSelectDynaform').setRequired(true); + singleDyna.getItem('singleDynaformRadio').setValue(singleMultiple); + singleDyna.getItem('singleDynaformRadio').getControl(0).select(); + //Hide step panel + this.getLabelsPanel().setVisible(false); + this.getTabForms().getItem('stepsMainContainer').setVisible(false); + return this; + }, + + /** + * Disable Form SingleDynaform (tabForms) + * @param singleMultiple + * @returns {WebEntry} + */ + disableSingleDynaform: function (singleMultiple) { + var singleDyna = this.getTabForms().getItem('singleDynaform'); + singleDyna.getItem('singleDynaformRadio').setValue(''); + singleDyna.getItem('weeSelectDynaform').disable(); + singleDyna.getItem('weeSelectDynaform').setRequired(false); + singleDyna.getItem('multipleStepsRadio').setValue(singleMultiple); + singleDyna.getItem('multipleStepsRadio').getControl(0).select(); + //Show step panel + this.getLabelsPanel().setVisible(true); + this.getTabForms().getItem('stepsMainContainer').setVisible(true); + return this; + }, + + /** + * Change handler + * @param newValue + * @param oldValue + * @returns {loginRequired} + */ + anonimusProcedure: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(), + //The Callback Actions (PROCESSMAKER is 0, CUSTOM is 1, and CUSTOM_CLEAR is 2) + callbackAction = 2; + propertiesForm.getItem('tabPropertiesRequireUserLogin').setValue('[]'); + propertiesForm.getItem('tabPropertiesHideLoogedInformationBar').disable(); + propertiesForm.getItem('tabPropRadioAuthentication').setRequired(true); + this.getSuggestField().setRequired(true); + this.getSuggestField().hideMessageRequired(); + propertiesForm.getItem('tabPropertiesRadioCallback').disableOption(callbackAction); + if (propertiesForm.getItem('tabPropertiesRadioCallback').getValue() === 'CUSTOM_CLEAR') { + propertiesForm.getItem('tabPropertiesRadioCallback').getControl(callbackAction).deselect(); + propertiesForm.getItem('tabPropertiesRadioCallback').setValue(''); + } + propertiesForm.getItem('criteriaFieldCustomUrl').disable(); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.disable(); + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Change chandler + * @param newValue + * @param oldValue + * @returns {loginRequired} + */ + loginRequired: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(), + //The Callback Actions (PROCESSMAKER is 0, CUSTOM is 1, and CUSTOM_CLEAR is 2) + callbackAction = 2; + propertiesForm.getItem('tabPropRadioAuthentication').setValue('[]'); + propertiesForm.getItem('tabPropRadioAuthentication').setRequired(false); + + this.getSuggestField().setRequired(false); + this.getSuggestField().hideMessageRequired(); + propertiesForm.getItem('tabPropertiesHideLoogedInformationBar').enable(); + propertiesForm.getItem('tabPropertiesRadioCallback').enableOption(callbackAction); + this.callbackActionChange(propertiesForm.getItem('tabPropertiesRadioCallback').getValue(), ''); + this.setLinkText(this.getTabLinkForm(), ''); + return this; + }, + + /** + * Change handler + * @param newValue + * @param oldValue + * @returns {callbackActionChange} + */ + callbackActionChange: function (newValue, oldValue) { + var propertiesForm = this.getTabProperties(); + propertiesForm.getItem("tabPropertiesRadioCallback").setValue(newValue); + switch (newValue) { + case 'PROCESSMAKER': + propertiesForm.getItem('criteriaFieldCustomUrl').disable(); + propertiesForm.getItem('criteriaFieldCustomUrl').setRequired(false); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.disable(); + break; + case 'CUSTOM': + case 'CUSTOM_CLEAR': + propertiesForm.getItem('criteriaFieldCustomUrl').enable(); + propertiesForm.getItem('criteriaFieldCustomUrl').setRequired(true); + propertiesForm.getItem('criteriaFieldCustomUrl').buttonHTML.enable(); + break; + } + return this; + }, + + /** + * Change handler + * @param newValue + * @returns {linkGenerationOnChange} + */ + linkGenerationOnChange: function (newValue) { + var required, + skin, + language, + domain, + tfromLink; + tfromLink = this.getTabLinkForm(); + required = newValue === 'ADVANCED'; + skin = tfromLink.getItem('tabLinkDropdownSkin'); + language = tfromLink.getItem('tabLinkDropdownLanguage'); + domain = tfromLink.getItem('tablinkTextCustomDomain'); + this.setLinkText(tfromLink, ''); + skin.setRequired(required); + language.setRequired(required); + domain.setRequired(required); + if (required) { + skin.enable(); + language.enable(); + domain.enable(); + } else { + skin.disable(); + domain.hideMessage(); + language.disable(); + domain.disable(); + domain.getControl(0).style.removeClasses(['error']); + } + return this; + }, + + /** + * Save webEntry Configuration + * @param successCallback + * @param failureCallback + */ + saveWebEntryConfiguration: function (successCallback, failureCallback) { + var data, + //tabs window web entry + tabProperties = this.getTabPanel().getItem('tabProperties'), + tabLink = this.getTabPanel().getItem('tabLink'), + //form tabs + dataTabSingleDyn = this.getTabForms().getItem('singleDynaform'), + dataTabProperties = tabProperties.getPanel('idTabProperties'), + dataTabLink = tabLink.getPanel('idTabLink'); + + //Prepare Data + data = this.prepareData(dataTabSingleDyn, dataTabProperties, dataTabLink); + //Save web Entry configuration + this.updateWebEntryConfiguration(data, successCallback, failureCallback); + return this; + }, + + /** + * Validate Web Entry Data + * @param method + */ + isValidWebEntryData: function (method) { + var valid = true, + //tabs window web entry + tabForm = this.getTabPanel().getItem('tabForms'), + tabProperties = this.getTabPanel().getItem('tabProperties'), + tabLink = this.getTabPanel().getItem('tabLink'), + //form tabs + dataTabSingleDyn = this.getTabForms().getItem('singleDynaform'), + dataTabProperties = tabProperties.getPanel('idTabProperties'), + dataTabLink = tabLink.getPanel('idTabLink'), + //selected tab + selectedTab = null; + + // validate form tab + if (dataTabSingleDyn instanceof PMUI.form.Form) { + valid = valid && dataTabSingleDyn.isValid(); + selectedTab = !valid && !selectedTab ? tabForm : selectedTab; + } + //validate property tab + if (dataTabProperties instanceof PMUI.form.Form) { + valid = valid && dataTabProperties.isValid(); + selectedTab = !valid && !selectedTab ? tabProperties : selectedTab; + } + //validate suggestField + if (!this.getSuggestField().isValid()) { + this.getSuggestField().showMessageRequired(); + valid = valid && this.getSuggestField().isValid(); + selectedTab = !valid && !selectedTab ? tabProperties : selectedTab; + } + //validate link Tab + if (dataTabLink instanceof PMUI.form.Form) { + valid = valid && dataTabLink.isValid(); + selectedTab = !valid && !selectedTab ? tabLink : selectedTab; + } + if (!valid) { + selectedTab.select(); + } + //validate Link Generate Button + if (!$(dataTabLink.getItem('panelLinkForm').getItem('webEntryLink').text).attr('href') && + method !== 'generateLink') { + PMDesigner.msgFlash('Please press the \"Generate Link\" button.'.translate(), + this.getWindow(), 'error', 3000, 5); + valid = false; + tabLink.select(); + } + return valid; + }, + + /** + * Prepare Data + * @param dataTabSingleDyn + * @param dataTabProperties + * @param dataTabLink + */ + prepareData : function (dataTabSingleDyn, dataTabProperties, dataTabLink) { + var data = {}; + data['act_uid'] = this.getActUid(); + data['evn_uid'] = this.getEvnUid(); + data['wee_title'] = this.getEvnUid(); + data['we_type'] = (dataTabSingleDyn.getItem('singleDynaformRadio').getValue()) ? 'SINGLE' : 'MULTIPLE'; + data['dyn_uid'] = (data['we_type'] === 'SINGLE') ? dataTabSingleDyn.getItem('weeSelectDynaform') + .getValue() : ''; + data['we_custom_title'] = dataTabProperties.getItem('tabPropertiesWebEntryTitle').getValue(); + data['we_authentication'] = dataTabProperties.getItem('tabPropRadioAuthentication').getValue() === '[]' ? + 'LOGIN_REQUIRED' : 'ANONYMOUS'; + data['usr_uid'] = this.getSuggestField().value; + data['we_hide_information_bar'] = dataTabProperties.getItem('tabPropertiesHideLoogedInformationBar') + .getValue() === '[]' ? '0' : '1'; + data['we_callback'] = dataTabProperties.getItem('tabPropertiesRadioCallback').getValue(); + data['we_callback_url'] = (data['we_callback'] !== 'PROCESSMAKER') ? + dataTabProperties.getItem('criteriaFieldCustomUrl').getValue() : ''; + data['we_link_generation'] = dataTabLink.getItem('tabLinkRadioGeneration').getValue(); + data['we_link_skin'] = dataTabLink.getItem('tabLinkDropdownSkin').getValue(); + data['we_link_language'] = dataTabLink.getItem('tabLinkDropdownLanguage').getValue(); + data['we_link_domain'] = (data['we_link_generation'] === 'ADVANCED') ? + dataTabLink.getItem('tablinkTextCustomDomain').getValue() : ''; + data['we_show_in_new_case'] = (dataTabProperties.getItem('showInNewCase').getValue() === '["showCase"]') ? 1 : 0; + return data; + }, + + /** + * Populate all tabPanels (TabForms, TabProperties, TabLink) with data config + * return void + */ + setWebEntryConfiguration: function () { + this.setConfigDataTabForms(); + this.setConfigDataTabProperties(); + this.setConfigDataTabLink(); + this.getWindow().getItem('windowWebEntryTabPanel').getItem('tabForms').select(); + return this; + }, + + /** + * Load and populate Dynaforms Items + * @returns {*} + */ + setConfigDataTabForms: function () { + var that = this, + i, + data, + options = [], + dynaformsControl, + dynaforms = []; + + //execute Rest (get Dynaforms) + this.getDynaforms( + function (xhr, response) { + dynaforms = response[0].response; + //get Controls tab-Forms + dynaformsControl = that.getTabForms().getItem('singleDynaform').getItem('weeSelectDynaform'); + + //Set data Dropdown Single Dynaform + for (i = 0; i < dynaforms.length; i += 1) { + data = {}; + data.label = dynaforms[i]['dyn_title']; + data.value = dynaforms[i]['dyn_uid']; + if (that.getConfigWebEntry().dyn_uid === data.value && + that.getConfigWebEntry().evn_uid === that.getRelatedShape()['evn_uid']) { + data.selected = true; + } + options.push(data); + } + dynaformsControl.setOptions(options); + + //set Disable/Enable single or multiple steps + (that.getConfigWebEntry().we_type === 'SINGLE') ? + that.disableMultipleSteps(that.getConfigWebEntry().we_type) : + that.disableSingleDynaform(that.getConfigWebEntry().we_type); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + + /** + * TabProperties Panel + * Assigns values to tabProperties fields + */ + setConfigDataTabProperties: function () { + var that = this, + webEntryTitle, + radioAuthentication, + radioRequiredLogin, + informationBar, + radioCollback, + customUrl, + user, + showInNewCase; + + //get Controls Tab-Properties + this.getTabPanel().getItem('tabProperties').select(); + webEntryTitle = this.getTabProperties().getItem('tabPropertiesWebEntryTitle'); + radioAuthentication = this.getTabProperties().getItem('tabPropRadioAuthentication'); + radioRequiredLogin = this.getTabProperties().getItem('tabPropertiesRequireUserLogin'); + radioCollback = this.getTabProperties().getItem('tabPropertiesRadioCallback'); + customUrl = this.getTabProperties().getItem('criteriaFieldCustomUrl'); + informationBar = this.getTabProperties().getItem('tabPropertiesHideLoogedInformationBar'); + showInNewCase = this.getTabProperties().getItem('showInNewCase'); + + //set webentry Title + webEntryTitle.setValue(this.getConfigWebEntry().we_custom_title); + + //Loggin required or Anonymous + radioCollback.setValue(this.getConfigWebEntry().we_callback); + if (this.getConfigWebEntry().we_authentication === 'LOGIN_REQUIRED') { + radioRequiredLogin.getControl(0).select(); + radioRequiredLogin.setValue(this.getConfigWebEntry().we_authentication); + this.loginRequired(); + } else { + radioAuthentication.getControl(0).select(); + radioAuthentication.setValue(this.getConfigWebEntry().we_authentication); + this.anonimusProcedure(); + } + + //set value suggest user + this.getSuggestField().html.find('input').val(''); + this.getConfigWebEntry().usr_uid = this.getConfigWebEntry().usr_uid || this.getUserGuest().uid; + if (this.getConfigWebEntry().usr_uid) { + this.getUserData( + this.getConfigWebEntry().usr_uid, + function (xhr, response) { + user = response[0].response; + that.getSuggestField().html.find("input").val(user.usr_firstname + " " + + user.usr_lastname + " " + "(" + user.usr_username + ")"); + that.getSuggestField().set("value", user.usr_uid); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + } + + //set Hide Logged Information Bar + if (this.getConfigWebEntry().we_hide_information_bar === '1') { + informationBar.setValue('["1"]'); + informationBar.getControl(0).select(); + } else { + informationBar.setValue('[]'); + informationBar.getControl(0).deselect(); + } + + //set Callback Action + switch (this.getConfigWebEntry().we_callback) { + case 'PROCESSMAKER': + radioCollback.getControl(0).select(); + break; + case 'CUSTOM': + radioCollback.getControl(1).select(); + break; + case 'CUSTOM_CLEAR': + radioCollback.getControl(2).select(); + break; + } + + //set custom URL + customUrl.setValue(this.getConfigWebEntry().we_callback_url); + + //set show task in new case + if (this.getConfigWebEntry().we_show_in_new_case === '1'){ + showInNewCase.setValue('["showCase"]'); + }else{ + showInNewCase.setValue('[]'); + } + + //customize suggest styles + this.getSuggestField().inputField[0].style.width = '280px'; + this.getSuggestField().inputLabel[0].parentElement.style.width = '120px'; + this.getSuggestField().inputLabel[0].parentElement.style.marginLeft = '220px'; + }, + + /** + * TabLink Panel + * Assigns values to tabLink fields + */ + setConfigDataTabLink: function () { + var that = this, + options = [], + customDomain, + radioGeneration, + languages = [], + skins = [], + dropDownLanguages, + dropDownSkins, + data, + i; + + //execute Rest (Get languages and Skins) + this.getSkinLanguage( + function (xhr, response) { + languages = response[0].response.data; + skins = response[1].response.data; + //get controls Tab-link + that.getTabPanel().getItem('tabLink').select(); + radioGeneration = that.getTabLinkForm().getItem('tabLinkRadioGeneration'); + dropDownSkins = that.getTabLinkForm().getItem('tabLinkDropdownSkin'); + dropDownLanguages = that.getTabLinkForm().getItem('tabLinkDropdownLanguage'); + customDomain = that.getTabLinkForm().getItem('tablinkTextCustomDomain'); + + //set Link generation (Default or Advanced) + radioGeneration.setValue(that.getConfigWebEntry().we_link_generation); + (that.getConfigWebEntry().we_link_generation === 'DEFAULT') ? radioGeneration.getControl(0).select() : + radioGeneration.getControl(1).select(); + + //set Languages Dropdown + if (jQuery.isArray(languages)) { + for (i = 0; i < languages.length; i += 1) { + data = {}; + data.label = languages[i].LANG_NAME; + data.value = languages[i].LANG_ID; + if (languages[i].LANG_ID === that.getConfigWebEntry().we_link_language) { + data.selected = true; + } + options.push(data); + } + dropDownLanguages.setOptions(options); + } + //set Skins Dropdown + if (jQuery.isArray(skins)) { + options = []; + for (i = 0; i < skins.length; i += 1) { + data = {}; + data.label = skins[i].SKIN_NAME; + data.value = skins[i].SKIN_FOLDER_ID; + if (that.getConfigWebEntry().we_link_skin === skins[i].SKIN_FOLDER_ID) { + data.selected = true; + } + options.push(data); + } + dropDownSkins.setOptions(options); + } + + //set Custom Domain + customDomain.setValue(that.getConfigWebEntry().we_link_domain); + //Enable or Disable (Skin, Language, CustomDomain) + that.linkGenerationOnChange(that.getConfigWebEntry().we_link_generation); + //set Link text + that.setLinkText(that.getTabLinkForm(), that.getConfigWebEntry().wee_url); + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + }, + + /** + * Load and populate Accordion Data Items + * @param response + */ + loadAccordionItems: function (response) { + var firstResp = [], + secondResp = [], + i, + item, + assigmentConfig, + firstRes = 0, + secondRes = 1; + this.getStepsAssignAccordion().clearItems(); + if (jQuery.isArray(response) && response.length) { + if (typeof response[firstRes] === "object") { + firstResp = response[firstRes].response ? response[firstRes].response : []; + } + if (typeof response[secondRes] === "object") { + secondResp = response[secondRes].response ? response[secondRes].response : []; + } + } + if (firstResp.length) { + for (i = 0; i < firstResp.length; i += 1) { + item = this.createAccordionItem(firstResp[i], true, true); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = firstResp[i]; + this.customAccordionItemButtons(item.html, firstResp[i], item); + } + } + assigmentConfig = { + step_type_obj: "Assignment".translate(), + triggers: secondResp, + st_type: "ASSIGNMENT", + obj_title: "Assignment".translate(), + step_uid_obj: "Assignment" + }; + item = this.createAccordionItem(assigmentConfig); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = assigmentConfig; + assigmentConfig = { + step_type_obj: "Routing".translate(), + triggers: secondResp, + obj_title: "Routing".translate(), + st_type: 'ROUTING', + step_uid_obj: "Routing" + }; + item = this.createAccordionItem(assigmentConfig); + this.getStepsAssignAccordion().addItem(item); + item.dataItem = assigmentConfig; + this.getStepsAssignAccordion().defineEvents(); + }, + + /** + * Create Accordion + * @param data + * @returns {PMUI.item.AccordionItem} + */ + createAccordionItem: function (data) { + var that = this, + gridBefore, + gridAfter, + beforeTitle, + afterTitle, + i, + textLabel; + if (this.stepsType[data.step_type_obj]) { + textLabel = this.stepsType[data.step_type_obj]; + } else { + textLabel = data.step_type_obj; + } + beforeTitle = new PMUI.field.TextAnnotationField({ + text: 'Before'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left' + }); + afterTitle = new PMUI.field.TextAnnotationField({ + text: 'After'.translate() + ' ' + textLabel, + proportion: 0.5, + text_Align: 'left', + visible: data.st_type === "ASSIGNMENT" ? false : true + }); + + gridBefore = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + st_type: 'BEFORE', + step_uid: data.step_uid, + visibleFooter: false, + width: '96%', + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: "st_position", + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 210 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-delete'] + }, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + }], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + }, + onDragStart: function (grid, row) { + var items; + items = grid.getItems(); + if (jQuery.isArray(items)) { + if (items.length === 1) { + grid.showEmptyCell(); + } + } + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridBefore.st_type = 'BEFORE'; + } else if (data.st_type === "ROUTING") { + gridBefore.st_type = "BEFORE_ROUTING"; + } else { + gridBefore.st_type = "BEFORE_ASSIGNMENT"; + } + gridBefore.step_uid = data.step_uid; + gridBefore.clearItems(); + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridBefore.st_type === data.triggers[i].st_type) { + gridBefore.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + gridAfter = new PMUI.grid.GridPanel({ + behavior: 'dragdropsort', + filterable: false, + visibleHeaders: false, + data: data.triggers, + visibleFooter: false, + width: '96%', + visible: data.st_type === "ASSIGNMENT" ? false : true, + emptyMessage: 'No records found'.translate(), + style: { + cssClasses: ['mafe-gridPanel'] + }, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return messagePageGrid(currentPage, pageSize, numberItems, criteria, filter); + }, + columns: [{ + title: '', + dataType: 'string', + alignmentCell: 'center', + columnData: 'st_position', + width: 20 + }, { + title: 'Before Output Document'.translate(), + dataType: 'string', + alignmentCell: 'left', + columnData: 'tri_title', + width: 210 + }, { + title: '', + dataType: 'button', + buttonLabel: function (row, data) { + return data.st_condition === '' ? 'Condition'.translate() : 'Condition *'.translate(); + }, + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(); + that.editCondition(grid.step_uid, data.tri_uid, data.st_type, row); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Edit'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-edit'] + }, + onButtonClick: function (row, grid) { + var data = row.getData(), + restClient; + restClient = new PMRestClient({ + endpoint: 'trigger/' + data.tri_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + that.editTrigger(response.tri_webbot, response.tri_uid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + } + }, { + title: '', + dataType: 'button', + buttonLabel: 'Remove'.translate(), + buttonStyle: { + cssClasses: ['mafe-button-delete'] + }, + onButtonClick: function (row, grid) { + that.removeTrigger(row, grid); + } + }], + onDrop: function (container, draggableItem, index) { + var receiveData = draggableItem.getData(); + if (draggableItem instanceof PMUI.item.TreeNode) { + that.receiveTreeNodeItem(receiveData, this, index); + } else { + that.receiveRowItem(receiveData, this, index, draggableItem); + } + that.updateIndexToGrid(this); + return false; + }, + onSort: function (container, item, index) { + var receiveData = item.getData(); + that.sortableRowHandler(receiveData, this, index); + that.updateIndexToGrid(this); + }, + onDragStart: function (grid, row) { + var items; + items = grid.getItems(); + if (jQuery.isArray(items)) { + if (items.length === 1) { + grid.showEmptyCell(); + } + } + } + }); + if (data.st_type !== "ROUTING" && data.st_type !== "ASSIGNMENT") { + gridAfter.st_type = 'AFTER'; + } else if (data.st_type == "ROUTING") { + gridAfter.st_type = "AFTER_ROUTING"; + } else { + gridAfter.st_type = "AFTER_ASSIGNMENT"; + } + gridAfter.step_uid = data.step_uid; + if (jQuery.isArray(data.triggers)) { + for (i = 0; i < data.triggers.length; i += 1) { + if (gridAfter.st_type === data.triggers[i].st_type) { + gridAfter.addDataItem({ + st_condition: data.triggers[i].st_condition, + st_position: data.triggers[i].st_position, + st_type: data.triggers[i].st_type, + tri_description: data.triggers[i].tri_description, + tri_title: data.triggers[i].tri_title, + tri_uid: data.triggers[i].tri_uid, + obj_title: data.triggers[i].tri_title, + obj_uid: data.triggers[i].tri_uid + }); + } + } + } + var accordionItem = new PMUI.item.AccordionItem({ + id: 'id' + data.step_uid_obj, + dataStep: data, + closeable: true, + body: new PMUI.core.Panel({ + layout: 'vbox', + items: [ + beforeTitle, + gridBefore, + afterTitle, + gridAfter + ] + }) + }); + if (this.stepsType[data.step_type_obj]) { + accordionItem.setTitle(data.step_position + ". " + data.obj_title + ' (' + + this.stepsType[data.step_type_obj] + ')'); + this.stepsAssigned.insert(accordionItem); + } else { + accordionItem.setTitle((this.getStepsAssignAccordion().items.getSize() + 1) + ". " + data.obj_title); + } + return accordionItem; + }, + + /** + * This method is executed when a row is drop in another grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @param draggableItem + * @returns {*} + */ + receiveRowItem: function (receiveData, grid, index, draggableItem) { + var receiveParent = draggableItem.getParent(), + message, + restClient, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: this.getWindow() + }); + index = receiveParent.items.indexOf(draggableItem); + receiveParent.items.remove(draggableItem); + receiveParent.addItem(draggableItem, index); + message.show(); + return false; + } + restClient = new PMRestClient({ + typeRequest: 'post', + multipart: true, + data: { + calls: [{ + url: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger' : 'activity/' + + that.getConfigWebEntry().tas_uid + '/step/' + grid.step_uid + '/trigger', + method: 'POST', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + } + }, { + url: receiveParent.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger/' + receiveData.obj_uid + + '/' + that.getStepType(receiveParent.st_type) : + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + receiveParent.step_uid + + '/trigger/' + receiveData.obj_uid + '/' + receiveParent.st_type.toLowerCase(), + method: 'DELETE' + }] + }, + functionSuccess: function (xhr, response) { + var data; + data = receiveData; + if (data.hasOwnProperty("st_type")) { + data.st_type = grid.st_type; + grid.addDataItem(receiveData, index); + } + receiveParent.removeItem(draggableItem); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.getWindow(), + messageError: [ + 'An unexpected error while assigning the trigger, please try again later.'.translate() + ], + messageSuccess: [ + 'Trigger assigned successfully.'.translate() + ] + }); + restClient.executeRestClient(); + return this; + }, + + /** + * This method is executed when a row is sorted in the grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the new index position row + * @returns {stepsTask} + */ + sortableRowHandler: function (receiveData, grid, index) { + return new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + this.getConfigWebEntry().tas_uid + "/step/trigger/" + receiveData.tri_uid : 'activity/' + + this.getConfigWebEntry().tas_uid + "/step/" + grid.step_uid + "/trigger/" + receiveData.tri_uid, + typeRequest: 'update', + data: { + st_type: receiveData.st_type, + st_condition: receiveData.st_condition, + st_position: index + 1 + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: this.getWindow(), + messageError: 'An unexpected error while assigning the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger assigned successfully.'.translate() + }).executeRestClient(); + }, + + /** + * Return the not items config. + * @returns {{obj_title: *, obj_uid: string, id: string}} + */ + notItemConfig: function () { + var config = { + obj_title: 'N/A'.translate(), + obj_uid: '', + id: "notItem" + }; + return config; + }, + + /** + * Get the steps assigned by a search criterion + * @param criteria, search filter, after running the endpoint getAccordionData method + * @returns {Array}, response with criteria + */ + getStepsAssignedByCriteria: function (criteria) { + var allAssigned = [], + i, + elements, + j, + resp, + data, + respon = []; + + this.getAccordionData( + function (xhr, response) { + allAssigned = response; + if (jQuery.isArray(allAssigned)) { + for (i = 0; i < allAssigned.length; i += 1) { + resp = allAssigned[i]; + if (typeof resp === "object") { + elements = resp.response ? resp.response : []; + for (j = 0; j < elements.length; j += 1) { + data = elements[j]; + if (typeof data === "object") { + if (data.step_type_obj && data.step_type_obj === criteria) { + respon.push(data); + } + } + } + } + } + } + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + return respon; + }, + + /** + * Opens the properties of the selected step with the current settings + * @param step, is the data of selected step + * @chainable + */ + propertiesStepShow: function (step) { + var that = this, + form, + saveButton, + cancelButton, + restClient, + criteriaButton; + this.setWindowAlternative(null); + this.getWindowAlternativeForm().setWidth(520); + this.getWindowAlternativeForm().setHeight(370); + this.getWindowAlternativeForm().setTitle('Step Properties'.translate()); + form = new PMUI.form.Form({ + id: 'stepsEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + { + id: 'step_mode', + pmType: 'radio', + label: 'Mode'.translate(), + value: '', + visible: step.step_type_obj === "DYNAFORM" ? true : false, + name: 'step_mode', + options: [{ + id: 'modeEdit', + label: 'Edit'.translate(), + value: 'EDIT', + selected: true + }, { + id: 'modeView', + label: 'View'.translate(), + value: 'VIEW' + }] + }, + new CriteriaField({ + id: 'step_condition', + pmType: 'textarea', + name: 'step_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea' + }) + ] + }); + this.getWindowAlternativeForm().addItem(form); + + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + form.getField('step_mode').setValue(response.step_mode); + form.getField('step_condition').setValue(response.step_condition); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient; + if (form.isValid()) { + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'update', + data: form.getData(), + functionSuccess: function () { + that.getWindowAlternativeForm().close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'There are problems update the Step Trigger, please try again.'.translate() + }); + restClient.executeRestClient(); + } + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.handler = null; + criteriaButton.setVisible(false); + } + this.getWindowAlternativeForm().open(); + }, + + /** + * Opens the step of the selected step with the current settings + * @param step, is the data of selected step + * @param accordioItem + * @chainable + */ + editStepShow: function (step, accordioItem) { + var that = this, + inputDocument; + switch (step.step_type_obj) { + case 'DYNAFORM': + var restProxy = new PMRestClient({ + endpoint: 'dynaform/' + step.step_uid_obj, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var old = PMUI.activeCanvas, + formDesigner; + PMUI.activeCanvas = false; + formDesigner = PMDesigner.dynaformDesigner(response); + formDesigner.onHide = function () { + var assignedDynaform, + i, + data, + title; + assignedDynaform = that.getStepsAssignedByCriteria("DYNAFORM"); + if (jQuery.isArray(assignedDynaform)) { + for (i = 0; i < assignedDynaform.length; i += 1) { + data = assignedDynaform[i]; + if (typeof data === "object") { + if (data.step_uid === step.step_uid) { + title = data.step_position + ". " + data.obj_title; + title = title + ' (' + that.stepsType["DYNAFORM"] + ')'; + accordioItem.setTitle(title); + accordioItem.dataItem = data; + } + } + } + } + PMUI.activeCanvas = old; + }; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restProxy.executeRestClient(); + break; + case 'OUTPUT_DOCUMENT': + PMDesigner.output(); + PMDesigner.output.showTiny(step.step_uid_obj); + break; + case 'INPUT_DOCUMENT': + inputDocument = new InputDocument({ + onUpdateInputDocumentHandler: function (data, inputDoc) { + var position, title; + position = accordioItem.dataItem.step_position; + title = position + ". " + data.inp_doc_title; + title = title + ' (' + this.stepsType["INPUT_DOCUMENT"] + ')'; + accordioItem.dataItem.obj_title = data.inp_doc_title; + accordioItem.setTitle(title); + inputDoc.winMainInputDocument.close(); + } + }); + inputDocument.build(); + inputDocument.openFormInMainWindow(); + inputDocument.inputDocumentFormGetProxy(step.step_uid_obj); + break; + } + }, + + /** + * Edit the selected trigger condition + * @param stepID, It is the id of the step to upgrade + * @param triggerID, is the id of the trigger to update + * @param stepType, It is the kind of step to update + * @param row, PMUI.grid.GridPanelRow, is the row affected + */ + editCondition: function (stepID, triggerID, stepType, row) { + var that = this, + saveButton, + cancelButton, + criteriaButton, + form, + dataRow; + dataRow = row.getData(); + this.setWindowAlternative(null); + this.getWindowAlternativeForm().setWidth(500); + this.getWindowAlternativeForm().setHeight(350); + this.getWindowAlternativeForm().setTitle('Condition Trigger'.translate()); + this.getWindowAlternativeForm().setTitle("Trigger".translate()); + form = new PMUI.form.Form({ + id: 'idFormEditCondition', + width: 500, + title: 'Condition Trigger'.translate(), + visibleHeader: false, + items: [ + new CriteriaField({ + id: 'st_condition', + pmType: 'textarea', + name: 'st_condition', + valueType: 'string', + label: 'Condition'.translate(), + placeholder: 'Insert a condition'.translate(), + rows: 150, + controlsWidth: 250, + renderType: 'textarea', + value: dataRow.st_condition + }) + ] + }); + this.getWindowAlternativeForm().addItem(form); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var data, + restClient; + data = form.getData(); + data.st_type = stepType; + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + + ((typeof (stepID) != "undefined") ? stepID + "/" : "") + 'trigger/' + triggerID, + typeRequest: 'update', + data: data, + messageError: 'There are problems update the Step Trigger, please try again.'.translate(), + functionSuccess: function (xhr, response) { + dataRow.st_condition = data.st_condition; + row.setData(dataRow); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + that.getWindowAlternativeForm().close(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(false); + criteriaButton.handler = null; + } + this.getWindowAlternativeForm().open(); + }, + + /** + * This method is executed when editing a "trigger" in a row of the grid. + * secondary window opens with the current configuration of the trigger + * @param trigger, is the return value when is update 'trigger' action in the enpoint + * @param triggerID, is the id of the trigger to update + * @chainable + */ + editTrigger: function (trigger, triggerID) { + var that = this, + codeMirror, + saveButton, + cancelButton, + criteriaButton; + this.setWindowAlternative(null); + codeMirror = new PMCodeMirror({ + id: "codeMirror" + }); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + codeMirror.setValue(trigger); + this.getWindowAlternativeForm().setWidth(DEFAULT_WINDOW_WIDTH); + this.getWindowAlternativeForm().setHeight(DEFAULT_WINDOW_HEIGHT); + this.getWindowAlternativeForm().setTitle("Trigger".translate()); + saveButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-save"); + cancelButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-cancel"); + criteriaButton = this.getWindowAlternativeForm().footer.getItem("secondaryWindow-criteria"); + if (saveButton) { + saveButton.setHandler(function () { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + triggerID, + typeRequest: 'update', + data: { + tri_param: '', + tri_webbot: codeMirror.getValue() + }, + messageError: 'There are problems updating the trigger, please try again.'.translate(), + messageSuccess: 'Trigger updated correctly'.translate(), + flashContainer: that.getWindow(), + functionSuccess: function () { + that.getWindowAlternativeForm().close(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }); + } + if (cancelButton) { + cancelButton.setHandler(function () { + that.getWindowAlternativeForm().close(); + }); + } + if (criteriaButton) { + criteriaButton.setVisible(true); + criteriaButton.setHandler(function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var cursorPos, + codemirror; + codemirror = codeMirror.cm; + cursorPos = codemirror.getCursor(); + codemirror.replaceSelection(variable); + codemirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }); + } + this.getWindowAlternativeForm().open(); + this.getWindowAlternativeForm().addItem(codeMirror); + codeMirror.cm.setSize(this.getWindowAlternativeForm().getWidth(), 380); + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + codeMirror.cm.refresh(); + }, + + /** + * Returns the type of step, for the execution of "endpoint" + * @param st_type, this a step type, the accepted parameters are: + * - BEFORE_ASSIGNMENT + * - BEFORE_ROUTING + * - AFTER_ROUTING + * - BEFORE + * - AFTER + * @returns {string} + */ + getStepType: function (st_type) { + var value; + switch (st_type) { + case 'BEFORE_ASSIGNMENT': + value = 'before-assignment'; + break; + case 'BEFORE_ROUTING': + value = 'before-routing'; + break; + case 'AFTER_ROUTING': + value = 'after-routing'; + break; + case 'BEFORE': + value = 'before'; + break; + case 'AFTER': + value = 'after'; + break; + default: + value = ''; + break; + } + return value; + }, + + /** + * Checks whether a trigger is already assigned in a grid + * @param grid, is instanceof PMUI.grid.Grid, in conducting the search + * @param tri_uid, search parameter in the rows of the grid + * @returns {boolean} + */ + isTriggerAssigned: function (grid, tri_uid) { + var data, i, exist = false; + data = grid.getData(); + if (grid && jQuery.isArray(data)) { + for (i = 0; i < data.length; i += 1) { + if (data[i].tri_uid === tri_uid) { + exist = true; + break; + } + } + } + return exist; + }, + + /** + * This method eliminates the list of triggers trigger an assigned step + * @param row, the row affected or selected + * @param grid, It is affected or grid to remove selected row + */ + removeTrigger: function (row, grid) { + var that = this, + message = 'Do you want to remove the trigger "', + messageData = row.getData().tri_title ? row.getData().tri_title : "", + yesButton, + noButton, + restClient; + message = message + messageData + '"?'; + this.getConfirmWindow().setMessage(message.translate()); + yesButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-yes"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger/' + row.getData().tri_uid + '/' + + that.getStepType(row.getData().st_type) : 'activity/' + that.getConfigWebEntry().tas_uid + + '/step/' + grid.step_uid + '/trigger/' + row.getData().tri_uid + + '/' + that.getStepType(row.getData().st_type), + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + grid.removeItem(row); + that.getConfirmWindow().close(); + that.updateIndexToGrid(grid); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + flashContainer: that.getWindow(), + messageError: 'An unexpected error while deleting the trigger, please try again later.'.translate(), + messageSuccess: 'Trigger removed successfully'.translate() + }); + restClient.executeRestClient(); + }); + } + noButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-no"); + if (noButton) { + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + } + this.getConfirmWindow().open(); + }, + + /** + * Updates indexes of elements selected grid + * @param grid, It is affected or grid to remove selected row + * @returns {stepsTask} + */ + updateIndexToGrid: function (grid) { + var cell, rows, i, row; + if (grid) { + rows = grid.getItems(); + if (jQuery.isArray(rows)) { + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + cell = row.cells.find("columnData"); + if (cell) { + cell.setContent(i + 1); + } + } + } + } + return this; + }, + + /** + * Add custom buttons on the head of an element of stepsAssignAccordion + * are three buttons + * properties + * edit + * remove + * @param html, is the html of the header accordion item + * @param step, the data of the step selected + * @param accordionItem + */ + customAccordionItemButtons: function (html, step, accordionItem) { + var that = this, + propertiesStep, + editStep, + removeStep, + $html, + containerButtons, + title; + if (html) { + $html = jQuery(html.getElementsByClassName("pmui-accordion-item-header")); + title = step.obj_title + ' (' + step.step_type_obj + ')'; + $html.find(".pmui-accordion-item-title").get(0).title = title; + containerButtons = $('
'); + containerButtons.addClass("propertiesTask-accordionItem"); + propertiesStep = $('' + 'Properties'.translate() + ''); + propertiesStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + editStep = $('' + 'Edit'.translate() + ''); + editStep.addClass("mafe-button-edit propertiesTask-accordionButton"); + removeStep = $('' + 'Remove'.translate() + ''); + removeStep.addClass("mafe-button-delete propertiesTask-accordionButton"); + + propertiesStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.propertiesStepShow(step); + return false; + }); + + editStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.editStepShow(step, accordionItem); + return false; + }); + + removeStep.click(function (e) { + e.preventDefault(); + e.stopPropagation(); + that.removeStepShow(step); + return false; + }); + containerButtons.append(propertiesStep); + containerButtons.append(editStep); + containerButtons.append(removeStep); + $html.append(containerButtons); + } + }, + + /** + * Add tooltip in treeNode elements + * @returns {stepsTask} + */ + updateIndexPosition: function (treeNode) { + var items, + i, + item, + $item, + text, + data; + if (treeNode && treeNode.html) { + items = treeNode.getItems(); + if (jQuery.isArray(items)) { + for (i = 0; i < items.length; i += 1) { + item = items[i]; + if (item.html) { + $item = $(item.html); + data = item.getData(); + text = $item.find("a").get(0); + text.title = data.obj_title; + } + } + } + } + return this; + }, + + /** + * This method loads the data to stepsAssignTree + * @param response, the answer is an array containing all the elements + * that will be loaded into the step stepsAssignTree + * @chainable + */ + loadTreePanelData: function (response) { + var data, + i, + j, + type, + label, + items = [], + dataTree = [], + treeNode; + data = response[1].response; + + dataTree.push({ + obj_title: 'Trigger (s)'.translate(), + items: [this.notItemConfig()] + }); + + for (i = 0; i < data.length; i += 1) { + items.push({ + obj_title: data[i]['tri_title'], + obj_type: data[i]['tri_type'], + obj_uid: data[i]['tri_uid'] + }); + } + + if (items.length) { + dataTree.shift(); + dataTree.push({ + obj_title: 'Trigger (s)'.translate(), + items: items, + id: "TRIGGER" + }); + } + + data = response[0].response; + type = this.groupType; + label = this.groupLabel; + items = []; + for (i = 0; i < type.length; i += 1) { + items = []; + for (j = 0; j < data.length; j += 1) { + if (type[i] === data[j].obj_type) { + items.push({ + obj_title: data[j]['obj_title'], + obj_type: data[j]['obj_type'], + obj_uid: data[j]['obj_uid'] + }); + } + } + if (items.length === 0) { + dataTree.push({ + obj_title: label[i].translate(), + items: [this.notItemConfig()], + behavior: '', + id: type[i] + }); + } else { + dataTree.push({ + obj_title: label[i].translate(), + items: items, + behavior: 'drag', + id: type[i] + }); + } + } + this.getStepsAssignTree().clearItems(); + for (i = 0; i < dataTree.length; i += 1) { + this.getStepsAssignTree().addDataItem(dataTree[i]); + treeNode = this.getStepsAssignTree().getItem(i); + treeNode.setID(dataTree[i].id); + this.updateIndexPosition(treeNode); + } + return this; + }, + + /** + * It is an extension to add the "sortable" event "stepsAssignTree". + * when choosing a node treePanel and you want to add to the accordion or the grid + * @chainable + */ + addEventSortableInTreePanelElements: function () { + var that = this, + items = this.getStepsAssignTree().getItems(), + connect, + i, + sw, + nodeItems; + for (i = 0; i < items.length; i += 1) { + nodeItems = items[i].getItems(); + if (nodeItems.length && nodeItems[0].getData().obj_type) { + sw = items[i].getItems()[0].getData().obj_type === "SCRIPT"; + connect = sw ? ".pmui-gridpanel-tbody" : ".pmui-accordion-panel-body"; + $(items[i].html).find('ul').find('>li').draggable({ + appendTo: document.body, + revert: "invalid", + helper: "clone".translate(), + cursor: "move", + zIndex: 1000, + connectToSortable: connect, + start: function (e) { + var i, nodeTag, node, nodeData, accordionItems, item; + nodeTag = e.target; + node = PMUI.getPMUIObject(nodeTag); + nodeData = node.getData(); + accordionItems = that.getStepsAssignAccordion().getItems(); + $(that.getStepsAssignAccordion().body).hide(); + if (nodeData.obj_type !== "SCRIPT") { + for (i = 0; i < accordionItems.length; i += 1) { + item = accordionItems[i]; + item.collapse(); + } + } + $(that.getStepsAssignAccordion().body).show(); + }, + stop: function () { + var i = 0, + max; + if (that.elementAccordionOpen) { + max = that.elementAccordionOpen.getSize(); + for (i = 0; i < max; i += 1) { + that.elementAccordionOpen.get(i).expand(); + } + } + } + }); + } else { + $(nodeItems[0].html).draggable("disable"); + } + } + }, + + /** + * It is an extension to add the "sortable" event "stepAssignAccordion". + * when a node "treePanel" is added to stop runs and is where you choose if it's a sort or aggregation. + * @chainable + */ + addEventSortableInAccordionElements: function () { + var that = this, + tagContainer, + newIndex, + index, + treeNodeObject, + treeNodeData; + if (this.getStepsAssignAccordion() && this.getStepsAssignAccordion().html) { + tagContainer = this.getStepsAssignAccordion().body; + $(tagContainer).sortable({ + items: '>div:not(#idAssignment,#idRouting)', + placeholder: 'steps-placeholder', + receive: function (event, ui) { + var item = ui ? ui.item : null; + if (item && item instanceof jQuery && item.length) { + treeNodeObject = PMUI.getPMUIObject(item.get(0)); + treeNodeData = treeNodeObject.getData(); + } + }, + stop: function (event, ui) { + var itemClone = ui ? ui.item : null, + accordionItems, + accordionItem, + dataEdited, + restClientMultipart, + restClient; + var newIndex = ui.item.index(); + accordionItems = that.getStepsAssignAccordion().getItems(); + if (itemClone && itemClone instanceof jQuery && itemClone.length) { + if (treeNodeObject) { + itemClone.remove(); + if (newIndex + 1 > accordionItems.length) { + newIndex = that.stepsAssigned.getSize(); + } + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step', + typeRequest: 'post', + data: { + step_type_obj: treeNodeData.obj_type, + step_uid_obj: treeNodeData.obj_uid, + step_condition: '', + step_position: newIndex + 1, + step_mode: 'EDIT' + }, + functionSuccess: function (xhr, response) { + var item, buttonAfected, treeNode; + that.getStepsAssignTree().removeItem(treeNodeObject); + treeNode = that.getStepsAssignTree().items.find("id", response.step_type_obj); + if (treeNode.items.getSize() === 0) { + treeNode.addDataItem(that.notItemConfig()); + } + response.obj_description = ''; + response.obj_title = treeNodeData.obj_title; + response.triggers = []; + item = that.createAccordionItem(response, true, true); + item.dataItem = response; + if (that.getStepsAssignAccordion().items.getSize() === 2) { + that.getStepsAssignAccordion().addItem(item, 0); + } else { + that.getStepsAssignAccordion().addItem(item, newIndex); + } + that.getStepsAssignAccordion().defineEvents(); + that.customAccordionItemButtons(item.html, response, item); + that.updateItemIndexToAccordion(); + that.addEventSortableInAccordionElements(); + that.addEventSortableInTreePanelElements(); + buttonAfected = that.getLabelsPanel().getItem("expand-button"); + buttonAfected.setDisabled(false); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while assigning the step, please try again later.' + .translate(), + messageSuccess: 'Step assigned successfully.'.translate(), + flashContainer: that.getStepsAssignAccordion().getParent() + }); + restClient.executeRestClient(); + } else { + accordionItem = PMUI.getPMUIObject(ui.item.get(0)); + index = that.getStepsAssignAccordion().items.indexOf(accordionItem); + if (newIndex !== index) { + that.getStepsAssignAccordion().items.remove(accordionItem); + that.getStepsAssignAccordion().items.insertAt(accordionItem, newIndex); + dataEdited = { + step_position: newIndex + 1, + step_uid: accordionItem.dataItem.step_uid, + step_type_obj: accordionItem.dataItem.step_type_obj, + step_uid_obj: accordionItem.dataItem.step_uid_obj + }; + restClientMultipart = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + + accordionItem.dataItem.step_uid, + typeRequest: 'update', + data: dataEdited, + functionSuccess: function (xhr, response) { + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while editing the step, please try again later.' + .translate(), + messageSuccess: 'Step editing successfully.'.translate(), + flashContainer: that.getWindow() + }); + restClientMultipart.executeRestClient(); + } + } + } + }, + start: function (e, ui) { + newIndex = ui.item.index(); + } + }); + } + }, + + /** + * Updates indexes of elements assigned + * @returns {stepsTask} + */ + updateItemIndexToAccordion: function () { + var title, + i, + item, + dataItem, + items = this.getStepsAssignAccordion().items, + position, + max; + max = items.getSize(); + for (i = 0; i < max; i += 1) { + item = items.get(i); + position = items.indexOf(item); + dataItem = item.dataItem; + title = (position + 1) + ". " + dataItem.obj_title; + if (this.stepsType[dataItem.step_type_obj]) { + title = title + ' (' + this.stepsType[dataItem.step_type_obj] + ')'; + } + item.dataItem.step_position = i + 1; + item.setTitle(title); + } + return this; + }, + + /** + * The window opens for confirmation of the removal step + * @param step, the current step to remove + * @chainable + */ + removeStepShow: function (step) { + var that = this, + title, + yesButton, + noButton, + restClient; + if (this.stepsType[step.step_type_obj] !== undefined) { + title = "Step {0} ( {1} )".translate([step.obj_title, this.stepsType[step.step_type_obj]]); + this.getConfirmWindow().setTitle(title); + } else { + this.getConfirmWindow().setTitle("Step " + step.step_type_obj.capitalize()); + } + this.getConfirmWindow().setMessage("Do you want to remove the step '{0}'?".translate([step.obj_title])); + yesButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-yes"); + noButton = this.getConfirmWindow().footer.getItem("confirmWindow-footer-no"); + if (yesButton) { + yesButton.setHandler(function () { + restClient = new PMRestClient({ + endpoint: 'activity/' + that.getConfigWebEntry().tas_uid + '/step/' + step.step_uid, + typeRequest: 'remove', + functionSuccess: function (xhr, response) { + that.removingStepTask(step, response); + that.getConfirmWindow().close(); + that.updateItemIndexToAccordion(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: 'An unexpected error while deleting the step, please try again later.'.translate(), + messageSuccess: 'Step removed successfully'.translate(), + flashContainer: that.getWindow().getParent() + }); + restClient.executeRestClient(); + }); + } + if (noButton) { + noButton.setHandler(function () { + that.getConfirmWindow().close(); + }); + } + this.getConfirmWindow().open(); + }, + + /** + * Get the steps is not assigned by a criterion + * @param criteria, It is the filter criteria search + * @param stepAvailable, all steps Unassigned + * @returns {Array}, filtered items + */ + getAvailablesStepsByCriteria: function (criteria, stepAvailable) { + var items = [], + i; + if (jQuery.isArray(stepAvailable)) { + for (i = 0; i < stepAvailable.length; i += 1) { + if (stepAvailable[i].obj_type === criteria) { + items.push(stepAvailable[i]); + } + } + } + return items; + }, + + /** + * Eliminates the step of step Assign Accordion + * @param step, the current step to remove + * @param response, data from the endpoint + */ + removingStepTask: function (step, response) { + var stepObject, + stepAvailable, + treeNodeObject, + stepAvailables, + i, + itemsTreeNode = [], + items = []; + stepObject = this.getStepsAssignAccordion().getItem("id" + step.step_uid_obj); + this.elementAccordionOpen.remove(stepObject); + this.stepsAssigned.remove(stepObject); + this.getStepsAssignAccordion().removeItem(stepObject); + if (stepObject) { + this.getStepAvailables( + function (xhr, response) { + stepAvailable = response[0] ? response[0].response : []; + }, + function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + ); + stepAvailables = this.getAvailablesStepsByCriteria(step.step_type_obj, stepAvailable); + for (i = 0; i < stepAvailables.length; i += 1) { + items.push({ + obj_title: stepAvailables[i]['obj_title'], + obj_type: stepAvailables[i]['obj_type'], + obj_uid: stepAvailables[i]['obj_uid'] + }); + } + treeNodeObject = this.getStepsAssignTree().getItem(step.step_type_obj); + itemsTreeNode = treeNodeObject.getItems(); + for (i = 0; i < itemsTreeNode.length; i += 1) { + treeNodeObject.removeItem(itemsTreeNode[i]); + } + treeNodeObject.clearItems(); + treeNodeObject.setDataItems(items); + this.updateIndexPosition(treeNodeObject); + this.addEventSortableInTreePanelElements(); + this.addEventSortableInAccordionElements(); + } + }, + + /** + * This method is executed when an element stepsAssignTree, is assigned in a grid + * @param receiveData, data of the droppable item + * @param grid, the affected grid + * @param index, the index position row + * @returns {stepsTask} + */ + receiveTreeNodeItem: function (receiveData, grid, index) { + var restClient, + message, + that = this; + if (this.isTriggerAssigned(grid, receiveData.obj_uid)) { + message = new PMUI.ui.FlashMessage({ + message: 'Trigger is assigned.'.translate(), + duration: 3000, + severity: 'error', + appendTo: this.getWindow() + }); + message.show(); + return; + } + restClient = new PMRestClient({ + endpoint: grid.step_uid === undefined ? + 'activity/' + that.getConfigWebEntry().tas_uid + '/step/trigger' : 'activity/' + + that.getConfigWebEntry().tas_uid + '/step/' + grid.step_uid + '/trigger', + typeRequest: 'post', + data: { + tri_uid: receiveData.obj_uid, + st_type: grid.st_type, + st_condition: '', + st_position: index + 1 + }, + functionSuccess: function (xhr, response) { + grid.addDataItem({ + st_condition: '', + st_position: index + 1, + st_type: grid.st_type, + tri_description: '', + tri_title: receiveData.obj_title, + tri_uid: receiveData.obj_uid, + obj_title: receiveData.obj_title, + obj_uid: receiveData.obj_uid + }, index); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + return this; + } +}; +var PMMessageType = function (options) { + var that = this; + this.msgt_uid = null; + this.edit = false; + this.editRow = null; + this.dirtyAcceptedValue = false; + this.fieldInfo = null; + this.onSave = new Function(); + this.onEdit = new Function(); + this.requiredMessage = null; + this.clickedClose = true; + this.previousMessageValue = null; + this.buttonCreate = new PMUI.ui.Button({ + id: 'buttonCreate', + text: "Create".translate(), + height: '36px', + width: 100, + style: { + cssClasses: [ + 'mafe-button-create' + ] + }, + handler: function () { + that.showForm(); + } + }); + + this.buttonFieldAdd = new PMUI.field.ButtonField({ + id: 'buttonFieldAdd', + pmType: 'buttonField', + value: 'Create'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.6, + handler: function (field) { + that.addAcceptedValue(); + }, + buttonType: "success", + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '37px', + 'padding-right': '1px', + 'padding-bottom': '1px', + 'padding-left': '1px' + } + } + }); + this.buttonFieldAdd.getControl().button.setButtonType("success"); + + this.buttonFieldCancel = new PMUI.field.ButtonField({ + id: 'buttonFieldCancel', + pmType: 'buttonField', + value: 'Cancel'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.6, + handler: function (field) { + that.cancelAcceptedValue(); + }, + style: { + cssProperties: { + 'vertical-align': 'top', + 'padding-top': '37px', + 'padding-right': '1px', + 'padding-bottom': '1px', + 'padding-left': '1px' + } + } + }); + this.buttonFieldCancel.getControl().button.setButtonType("error"); + + this.frmMessageType = new PMUI.form.Form({ + id: 'frmMessageType', + width: 'auto', + title: '', + visibleHeader: false, + items: [ + { + id: 'txtMessageTypeName', + name: 'txtMessageTypeName', + pmType: 'text', + label: "Name".translate(), + placeholder: "Name".translate(), + value: '', + required: true, + valueType: 'string', + maxLength: 60, + controlsWidth: 460 + }, + { + id: "frmAcceptedValues", + pmType: 'panel', + legend: "Message Field".translate(), + fieldset: true, + layout: 'hbox', + items: [ + { + pmType: "text", + name: "txtMessageTypeVariableName", + label: "Message Field Name".translate(), + labelWidth: "100%", + controlsWidth: "400px", + proportion: 2.5, + valueType: "string", + maxLength: 255, + required: true, + labelPosition: "top", + validators: [ + { + pmType: "regexp", + criteria: /^[a-zA-Z_]+[0-9a-zA-Z_]+$/, + errorMessage: "A valid variable starts with a letter or underscore, followed by any number of letters, numbers, or underscores.".translate() + } + ] + }, + that.buttonFieldCancel, + that.buttonFieldAdd + ] + } + ] + }); + + this.frmMessageType.getData = function () { + var data = getData2PMUI(that.frmMessageType.html); + return data; + }; + + this.gridMessages = new PMUI.grid.GridPanel({ + id: 'gridMessages', + pageSize: 10, + width: '96%', + style: { + cssClasses: ['mafe-gridPanel'] + }, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + tableContainerHeight: 374, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [{ + id: "msgtName", + title: "Name".translate(), + dataType: "string", + columnData: "msgt_name", + alignmentCell: "left", + width: "330px", + sortable: true + }, { + id: 'msgtEdit', + dataType: 'button', + title: '', + buttonLabel: 'Edit'.translate(), + width: '60px', + buttonStyle: { + cssClasses: [ + 'mafe-button-edit' + ] + }, + onButtonClick: function (row, grid) { + that.showFormEdit(row.getData()); + } + }, { + id: 'msgtDelete', + dataType: 'button', + title: '', + buttonLabel: function (row, data) { + return 'Delete'.translate(); + }, + width: '70px', + buttonStyle: { + cssClasses: [ + 'mafe-button-delete' + ] + }, + onButtonClick: function (row, grid) { + that.del(row.getData(), row, grid); + } + } + ], + dataItems: null + }); + + this.gridAcceptedValues = new PMUI.grid.GridPanel({ + id: 'gridAcceptedValues', + pageSize: 5, + height: 240, + style: {cssClasses: ['mafe-gridPanel']}, + filterPlaceholder: 'Search ...'.translate(), + emptyMessage: 'No records found'.translate(), + nextLabel: 'Next'.translate(), + previousLabel: 'Previous'.translate(), + filterable: false, + tableContainerHeight: 200, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ''; + }, + columns: [ + { + id: "msgtv_name", + title: "Message Field Name".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 180, + sortable: true + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.editAcceptedValue(row); + } + }, + { + id: "btnDelete", + dataType: "button", + title: "", + buttonLabel: function (row, data) { + return "Delete".translate(); + }, + width: 75, + buttonStyle: {cssClasses: ["mafe-button-delete"]}, + onButtonClick: function (row, grid) { + that.deleteAcceptedValue(row); + } + } + ], + dataItems: null + }); + + this.isDirtyFrmMessageType = function () { + $("input,select,textarea").blur(); + if (this.frmMessageType.isVisible()) { + if (this.frmMessageType.isDirty() || this.dirtyAcceptedValue) { + var message_window = new PMUI.ui.MessageWindow({ + id: 'messageWindowCancel', + width: 490, + title: "Message Types".translate(), + windowMessageType: 'warning', + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + id: 'messageWindowNo', + text: 'No'.translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + id: 'messageWindowYes', + text: 'Yes'.translate(), + handler: function () { + that.requiredMessage.hide(); + if (that.clickedClose) { + that.winMessageType.close(); + } + message_window.close(); + that.showGrid(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + if (this.clickedClose) { + this.winMessageType.close(); + } else { + this.showGrid(); + this.requiredMessage.hide(); + } + } + } else { + this.winMessageType.close(); + } + }; + this.winMessageType = new PMUI.ui.Window({ + id: 'winMessageType', + title: '', + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + buttonsPosition: 'right', + onBeforeClose: function () { + that.clickedClose = true; + that.isDirtyFrmMessageType(); + }, + footerItems: [ + new PMUI.ui.Button({ + id: 'winMessageTypeCancel', + text: 'Cancel'.translate(), + handler: function () { + that.clickedClose = false; + that.isDirtyFrmMessageType(); + }, + buttonType: 'error' + }), + new PMUI.ui.Button({ + id: 'winMessageTypeSave', + text: "Save".translate(), + handler: function () { + that.frmAcceptedValues.getItems("fields").forEach(function (i) { + i.disable(); + }); + if (that.edit) { + that.updateMessageType(); + } else { + that.createMessageType(); + } + that.frmAcceptedValues.getItems("fields").forEach(function (i) { + i.enable(); + }); + }, + buttonType: 'success' + }) + ], + buttonPanelPosition: 'bottom' + }); + PMMessageType.prototype.init.call(this); +}; + +PMMessageType.prototype.init = function () { + var that = this; + + that.buttonCreate.defineEvents(); + that.winMessageType.addItem(that.gridMessages); + that.winMessageType.addItem(that.frmMessageType); + that.winMessageType.addItem(that.gridAcceptedValues); + that.winMessageType.hideFooter(); + that.winMessageType.open(); + that.requiredMessage = $(document.getElementById("requiredMessage")); + + this.buttonFieldAdd.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + this.buttonFieldCancel.controls[0].button.setStyle({cssProperties: {padding: "6px 15px"}}); + that.requiredMessage.css({float: "none"}); + that.winMessageType.footer.html.style.textAlign = 'right'; + + that.frmAcceptedValues = PMUI.getPMUIObject($('#frmAcceptedValues').css({'width': '690px'}).get(0)); + $('#gridMessages .pmui-textcontrol').css({'margin-top': '5px', width: '250px'}); + + //$(that.frmAcceptedValues.getHTML()).find("#requiredMessage").empty(); + that.requiredMessage.hide(); + //that.winMessageType.body.appendChild(that.requiredMessage[0]); + that.gridMessages.dom.toolbar.appendChild(that.buttonCreate.getHTML()); + that.showGrid(); + + validateKeysField(that.frmMessageType.getField('txtMessageTypeName').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + that.resetFrmAcceptedValues(); +}; + +PMMessageType.prototype.createMessageType = function () { + var that = this, + data; + + if (!this.frmMessageType.isValid()) { + return; + } + if (that.gridAcceptedValues.getData().length == 0) { + PMDesigner.msgFlash('Add at least one variable.'.translate(), winMessageType, 'error', 3000, 5); + return; + } + + data = this.frmMessageType.getData(); + data.msgt_name = data.txtMessageTypeName; + data.msgt_variables = that.getDataAcceptedValues(); + + // This returned data is not necessary at sendind, so it is deleted + delete data.txtMessageTypeVariableName; + delete data.buttonFieldCancel; + delete data.buttonFieldAdd; + + (new PMRestClient({ + endpoint: 'message-type', + typeRequest: 'post', + functionSuccess: function (xhr, response) { + if (that.onSave(xhr, response) === false) { + that.msgt_uid = null; + return; + } + that.showGrid(); + that.load(); + that.msgt_uid = null; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: ' ', + data: data, + messageSuccess: "Message Type Saved successfully.".translate(), + flashContainer: that.panel + + })).executeRestClient(); +}; + +PMMessageType.prototype.updateMessageType = function () { + var that = this, + data; + if (!this.frmMessageType.isValid()) { + return; + } + if (that.gridAcceptedValues.getData().length == 0) { + if (!this.frmAcceptedValues.isValid()) { + return; + } else { + PMDesigner.msgFlash('Add at least one variable.'.translate(), winMessageType, 'error', 3000, 5); + return; + } + } + + data = this.frmMessageType.getData(); + data.msgt_name = data.txtMessageTypeName; + data.msgt_variables = that.getDataAcceptedValues(); + + (new PMRestClient({ + endpoint: "message-type/" + that.msgt_uid, + typeRequest: "update", + data: data, + + functionSuccess: function (xhr, response) { + if (that.onEdit(xhr, response, data) === false) { + that.msgt_uid = null; + return; + } + + that.showGrid(); + that.load(); + that.msgt_uid = null; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: ' ', + messageSuccess: "Message Type edited successfully.".translate(), + flashContainer: that.panel + })).executeRestClient(); +}; + +PMMessageType.prototype.deleteMessage = function (msgt_uid) { + var that = this; + + (new PMRestClient({ + endpoint: 'message-type/' + msgt_uid, + typeRequest: 'remove', + + functionSuccess: function (xhr, response) { + that.load(); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + + messageError: 'Working...'.translate(), + messageSuccess: 'Message Type Deleted successfully'.translate(), + flashContainer: that.panel + })).executeRestClient(); +}; + +PMMessageType.prototype.load = function () { + var that = this, restProxy; + + restProxy = new PMRestClient({ + endpoint: 'message-types', + typeRequest: 'get', + + functionSuccess: function (xhr, response) { + that.gridMessages.setDataItems(response); + that.gridMessages.sort('msgt_name', 'asc'); + + $(that.gridMessages.dom.toolbar).find("input").val(""); + that.gridMessages.clearFilter(); + document.getElementById("requiredMessage").style.marginTop = "16px"; + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +PMMessageType.prototype.del = function (data, row, grid) { + var that = this, + confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDel', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Message Types".translate(), + message: "Do you want to delete this Message Type?".translate(), + footerItems: [ + { + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.deleteMessage(data.msgt_uid, row); + }, + buttonType: "success" + } + ] + }); + + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMMessageType.prototype.showGrid = function () { + var that = this; + that.frmMessageType.setVisible(false); + that.frmAcceptedValues.setVisible(false); + that.gridAcceptedValues.setVisible(false); + $(that.gridMessages.dom.toolbar).find("input").val(""); + that.gridMessages.clearFilter(); + that.gridMessages.setVisible(true); + that.winMessageType.setTitle("Message Types".translate()); + that.winMessageType.hideFooter(); +}; + +PMMessageType.prototype.showForm = function () { + var that = this; + this.requiredMessage.show(); + that.edit = false; + that.dirtyAcceptedValue = false; + that.frmMessageType.setVisible(true); + that.frmAcceptedValues.setVisible(true); + that.gridAcceptedValues.setVisible(true); + that.gridMessages.setVisible(false); + that.winMessageType.setTitle("Create Message Type".translate()); + that.winMessageType.showFooter(); + that.frmMessageType.reset(); + that.frmMessageType.setFocus(); + that.changeViewFieldType(); + that.resetFrmAcceptedValues(); + that.gridAcceptedValues.clearItems(); + that.buttonFieldCancel.setVisible(false); +}; + +PMMessageType.prototype.showFormEdit = function (data) { + var that = this; + that.showForm(); + that.msgt_uid = data.msgt_uid; + that.edit = true; + + that.winMessageType.setTitle('Edit Message Type'.translate()); + that.frmMessageType.getField('txtMessageTypeName').setValue(data.msgt_name); + + that.setDataAcceptedValues(data.msgt_variables); + document.getElementById("requiredMessage").style.marginTop = "16px"; +}; + +PMMessageType.prototype.changeViewFieldType = function () { + var that = this, sw = true; + + that.frmAcceptedValues.setVisible(true); + that.gridAcceptedValues.setVisible(true); + + validateKeysField(that.frmAcceptedValues.getField('txtMessageTypeVariableName').getControls()[0].getHTML(), ['isbackspace', 'isnumber', 'isletter', 'isunderscore']); + + if (this.fieldInfo === null) { + this.fieldInfo = document.createTextNode(''); + } +}; + +PMMessageType.prototype.addAcceptedValue = function () { + var that = this, + value = $.trim(that.frmAcceptedValues.getField('txtMessageTypeVariableName').getValue()), + message; + + // if the form (form field's RegEx) is invalid, add a Message Field will not be allowed. + if (!that.frmAcceptedValues.isValid()) { + return; + } + + if (that.previousMessageValue !== value && that.isAcceptedValueAdded(value)) { + message = new PMUI.ui.FlashMessage({ + message: "The variable Name already exists.".translate(), + duration: 3000, + severity: 'error', + appendTo: that.winMessageType.footer + }); + message.show(); + return; + } else if (!value) { + message = new PMUI.ui.FlashMessage({ + message: "Please, specify a name for the Message Field.".translate(), + duration: 3000, + severity: 'error', + appendTo: that.winMessageType.footer + }); + return message.show(); + } + that.previousMessageValue = null; + if (that.editRow === null) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + msgtv_name: value + } + })); + } else { + that.editRow.setData({ + msgtv_name: value + }); + } + + that.dirtyAcceptedValue = true; + that.cancelAcceptedValue(); +}; + +PMMessageType.prototype.editAcceptedValue = function (row) { + var that = this, data; + that.editRow = row; + data = row.getData(); + + that.previousMessageValue = data.msgtv_name; + that.frmAcceptedValues.getField('txtMessageTypeVariableName').setValue(data.msgtv_name); + that.buttonFieldAdd.setValue('Save'.translate()); + that.buttonFieldCancel.setVisible(true); +}; + +PMMessageType.prototype.deleteAcceptedValue = function (row) { + var that = this, + confirmWindow = new PMUI.ui.MessageWindow({ + id: 'confirmWindowDeleteAcceptedValue', + windowMessageType: 'warning', + width: 490, + bodyHeight: 'auto', + title: "Message Type".translate(), + message: "Are you sure you want to delete the \"variable\"?".translate(), + footerItems: [ + { + text: 'No'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + }, + buttonType: "error" + }, { + text: 'Yes'.translate(), + visible: true, + handler: function () { + confirmWindow.close(); + that.gridAcceptedValues.removeItem(row); + that.dirtyAcceptedValue = true; + }, + buttonType: "success" + } + ] + }); + + confirmWindow.open(); + confirmWindow.dom.titleContainer.style.height = '17px'; + confirmWindow.showFooter(); +}; + +PMMessageType.prototype.getDataAcceptedValues = function () { + var that = this, data = [], i; + + if (that.gridAcceptedValues.visible) { + data = that.gridAcceptedValues.getData(); + + for (i = 0; i < data.length; i += 1) { + delete data[i].key; + delete data[i].type; + } + } + return data; +}; + +PMMessageType.prototype.setDataAcceptedValues = function (stringJsonData) { + var that = this, i, data; + if (!stringJsonData) { + return; + } + + data = stringJsonData; + if (typeof stringJsonData === 'string') { + data = JSON.parse(stringJsonData); + } + + if (that.gridAcceptedValues.visible) { + for (i = 0; i < data.length; i += 1) { + that.gridAcceptedValues.addItem(new PMUI.grid.GridPanelRow({ + data: { + msgtv_name: data[i].msgtv_name, + msgtv_default_value: data[i].msgtv_default_value + } + })); + } + } +}; + +PMMessageType.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that.buttonFieldAdd.setValue("Create".translate()); + that.buttonFieldCancel.setVisible(false); + that.resetFrmAcceptedValues(); +}; +/** + * Validate if the value is present in the data collection. + * @param value + * @returns {boolean} + */ +PMMessageType.prototype.isAcceptedValueAdded = function (value) { + var that = this, i, + data = that.gridAcceptedValues.getData(); + + for (i = 0; i < data.length; i += 1) { + if (data[i].msgtv_name === value) { + return true; + } + } + return false; +}; +/** + * Resets the fields from the form's panel for accepted values. + */ +PMMessageType.prototype.resetFrmAcceptedValues = function () { + this.frmAcceptedValues.getItems('fields').forEach(function (i) { + i.setValue(""); + }); +}; + +PMDesigner.messageType = function () { + var pmvariables = new PMMessageType(); + pmvariables.load(); +}; + +PMDesigner.messageType.create = function () { + var pmvariables = new PMMessageType(); + pmvariables.showForm(); + pmvariables.load(); +}; + +var MessageEventDefinition = function (bpmnEvent) { + var that = this, + msgNameField, + variableSelector; + + this.bpmnEvent = bpmnEvent; + this.arrayMessageType = []; + this.messageEventDefinitionOption = ""; + this.messageEventDefinitionUid = ""; + this.editRow = null; + this.eventType = bpmnEvent.evn_behavior; + this.gridCurrent = null; + this.editMessageForm = null; + this.dirtyGrid = false; + this.myTitle = ""; + + variableSelector = new CriteriaField({ + id: "txtMessageTypeVariableDefaultValue", + name: "txtMessageTypeVariableDefaultValue", + valueType: "string", + label: that.bpmnEvent.evn_marker == "MESSAGECATCH" ? "Store value in".translate() : "Get value from".translate(), + maxLength: 200, + labelWidth: "50%", + controlsWidth: 300, + proportion: 3.4, + required: false + }); + + msgNameField = { + pmType: "text", + id: "txtMessageTypeVariableName", + name: "txtMessageTypeVariableName", + label: (that.bpmnEvent.evn_marker === "MESSAGECATCH" ? "Value" : "Name").translate(), + labelWidth: "40%", + controlsWidth: 200, + proportion: 2.5, + valueType: "string", + maxLength: 255, + readOnly: true, + required: false + }; + + this.cboMessageType = new PMUI.field.DropDownListField({ + id: "cboMessageType", + name: "cboMessageType", + label: "Message Type".translate(), + options: [], + required: true, + controlsWidth: 150, + onChange: function (newValue, prevValue) { + var messageTypeData = that.getMessageTypeByIndex(that.cboMessageType.getValue()); + if (messageTypeData != null) { + that.gridCurrent.setDataItems(messageTypeData.msgt_variables); + + that._resetEditMessageForm(); + } + } + }); + + this.isDirtyFormMessageEvent = function () { + if (that.frmMessageEventDefinition1.isDirty() || that.dirtyGrid) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageType", + width: 490, + title: that.myTitle.translate(), + windowMessageType: "warning", + bodyHeight: 'auto', + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.winMessageEventDefinition.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.winMessageEventDefinition.close(); + } + }; + + this.txtCorrelationValue = new CriteriaField({ + id: "txtCorrelationValue", + name: "txtCorrelationValue", + valueType: "string", + label: "Correlation Value".translate(), + maxLength: 200, + value: "", + controlsWidth: 380 + }); + + this.btnSaveVariable = new PMUI.field.ButtonField({ + id: "btnSaveVariable", + pmType: "buttonField", + value: 'Save'.translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 50, + proportion: 0.8, + handler: function (field) { + that.addVariableInGrdPnlVariable3(); + that.dirtyGrid = true; + }, + buttonType: "success" + }); + + this.btnCancelVariable = new PMUI.field.ButtonField({ + id: "btnCancelVariable", + pmType: "buttonField", + value: "Cancel".translate(), + labelVisible: false, + buttonAlign: 'center', + controlsWidth: 55, + proportion: 0.6, + + handler: function (field) { + that.cancelAcceptedValue(); + }, + buttonType: "error" + }); + + this.frmMessageEventDefinition1 = new PMUI.form.Form({ + id: "frmMessageEventDefinition1", + title: "", + width: DEFAULT_WINDOW_WIDTH - 70, + visibleHeader: false, + items: [ + that.cboMessageType, + that.txtCorrelationValue, + { + id: "edit-panel", + pmType: "panel", + legend: "Message content".translate(), + fieldset: true, + layout: "hbox", + items: [ + that.bpmnEvent.evn_marker === "MESSAGECATCH" ? variableSelector : msgNameField, + that.bpmnEvent.evn_marker === "MESSAGECATCH" ? msgNameField : variableSelector, + that.btnCancelVariable, + that.btnSaveVariable + ] + } + ], + style: { + cssProperties: { + marginBottom: '15px' + } + } + }); + + this.editMessageForm = this.frmMessageEventDefinition1.getItem("edit-panel"); + + this.grdPnlVariable3 = new PMUI.grid.GridPanel({ + id: "grdPnlVariable3", + pageSize: 5, + style: {cssClasses: ["mafe-gridPanel"]}, + emptyMessage: "No records found".translate(), + filterable: false, + + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ""; + }, + columns: [ + { + id: "msgtv_name", + title: "Name".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 180 + }, + { + id: "msgtv_default_value", + title: "Get value from".translate(), + columnData: "msgtv_default_value", + dataType: "string", + alignmentCell: "left", + width: 300 + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.setValueMessageEventDefinition(row); + } + } + ], + + dataItems: null + }); + + this.grdPnlReceive = new PMUI.grid.GridPanel({ + id: "grdPnlVariable3", + pageSize: 5, + style: {cssClasses: ["mafe-gridPanel"]}, + emptyMessage: "No records found".translate(), + filterable: false, + tableContainerHeight: 204, + customStatusBar: function (currentPage, pageSize, numberItems, criteria, filter) { + return ""; + }, + + columns: [ + { + id: "msgtv_default_value", + title: "Store value in".translate(), + columnData: "msgtv_default_value", + dataType: "string", + alignmentCell: "left", + width: 200 + }, + { + id: "msgtv_name", + title: "Name Value".translate(), + columnData: "msgtv_name", + dataType: "string", + alignmentCell: "left", + width: 280 + }, + { + id: "btnEdit", + dataType: "button", + title: "", + buttonLabel: "Edit".translate(), + width: 60, + buttonStyle: {cssClasses: ["mafe-button-edit"]}, + + onButtonClick: function (row, grid) { + that.setValueMessageEventDefinition(row); + } + } + ], + dataItems: null + }); + + this.gridCurrent = this.grdPnlVariable3; + + MessageEventDefinition.prototype.init.call(this); +}; + +MessageEventDefinition.prototype.init = function () { + var that = this; + + that.createWindow(); + that.winMessageEventDefinition.addItem(that.frmMessageEventDefinition1); + that.winMessageEventDefinition.addItem(that.gridCurrent); + + that.winMessageEventDefinition.open(); + this.editMessageForm.setVisible(false); + this.applyStylesPost(); + + that.load(); + document.getElementById("requiredMessage").style.marginTop = "15px"; +}; + +MessageEventDefinition.prototype.applyStylesPost = function () { + var that = this; + that.btnSaveVariable.controls[0].addCSSClasses(["pmui pmui-button pmui-success"]); + that.btnCancelVariable.controls[0].addCSSClasses(["pmui pmui-button pmui-error"]); + that.btnSaveVariable.controls[0].html.style.padding = "5px"; + $(that.btnCancelVariable.controls[0].html).css({ + padding: "5px", + width: "auto" + }); +}; + +MessageEventDefinition.prototype.createWindow = function () { + var that = this; + + if (that.bpmnEvent.evn_marker === "MESSAGECATCH") { + that.myTitle = (that.bpmnEvent.evn_type === "START" ? "Start Message Event" : "Intermediate Receive Message Event").translate(); + that.gridCurrent = this.grdPnlReceive; + } else if (that.bpmnEvent.evn_marker === "MESSAGETHROW") { + that.myTitle = (that.bpmnEvent.evn_type == "END" ? "End Message Event" : "Intermediate Send Message Event").translate(); + that.gridCurrent = this.grdPnlVariable3; + } + + that.winMessageEventDefinition = new PMUI.ui.Window({ + id: "winMessageEventDefinition", + title: that.myTitle.translate(), + + height: DEFAULT_WINDOW_HEIGHT, + width: DEFAULT_WINDOW_WIDTH, + modal: true, + onBeforeClose: function () { + that.isDirtyFormMessageEvent(); + }, + footerItems: [ + { + pmType: "button", + buttonType: "error", + text: "Cancel".translate(), + handler: function () { + that.isDirtyFormMessageEvent(); + } + }, + { + pmType: "button", + buttonType: "success", + text: "Save".translate(), + + handler: function () { + var correlationValueAux, data; + if (!that.frmMessageEventDefinition1.isValid()) { + return; + } + correlationValueAux = that.frmMessageEventDefinition1.getData(); + data = { + evn_uid: that.bpmnEvent.evn_uid, + msgt_uid: that.cboMessageType.getValue(), + msged_variables: that.getVariablesByArray(that.grdPnlVariable3GetData()), + msged_correlation: correlationValueAux.txtCorrelationValue + }; + + switch (that.messageEventDefinitionOption) { + case "POST": + that.messageEventDefintionPostRestProxy(data); + + that.gridCurrent.clearItems(); + that.winMessageEventDefinition.close(); + break; + case "PUT": + that.messageEventDefintionPutRestProxy(data, that.messageEventDefinitionUid); + that.gridCurrent.clearItems(); + that.winMessageEventDefinition.close(); + break; + } + } + } + ], + + footerAlign: "right", + visibleFooter: true, + closable: true, + buttonPanelPosition: "bottom" + }); +}; + +MessageEventDefinition.prototype.getMessageTypeByIndex = function (messageTypeUid) { + var that = this, + i, + messageTypeData = null; + + if (that.arrayMessageType.length > 0) { + for (i = 0; i <= that.arrayMessageType.length - 1; i += 1) { + if (that.arrayMessageType[i].msgt_uid == messageTypeUid) { + messageTypeData = that.arrayMessageType[i]; + break; + } + } + } + return messageTypeData; +}; + +MessageEventDefinition.prototype.getVariablesByArray = function (arrayVariables) { + var variables = {}, i; + + for (i = 0; i <= arrayVariables.length - 1; i += 1) { + variables[arrayVariables[i].msgtv_name] = arrayVariables[i].msgtv_default_value; + } + + return variables; +}; + +MessageEventDefinition.prototype.getVariablesByObject = function (objectVariable) { + var that = this, + key, aux, + arrayData = []; + + for (key in objectVariable) { + aux = {}; + aux["msgtv_name"] = key; + aux["msgtv_default_value"] = objectVariable[key]; + arrayData.push(aux); + } + return arrayData; +}; + +MessageEventDefinition.prototype.load = function () { + var that = this, restProxy; + + that.messageEventDefinitionUid = ""; + that.messageEventDefinitionOption = ""; + + restProxy = new PMRestClient({ + typeRequest: "get", + endpoint: "message-event-definitions", + + functionSuccess: function (xhr, response) { + var dataResponse = response, + i, + arrayMessageEventDefinition = dataResponse, + arrayMessageEventDefinitionData = {}; + + for (i = 0; i <= arrayMessageEventDefinition.length - 1; i += 1) { + if (arrayMessageEventDefinition[i].evn_uid == that.bpmnEvent.evn_uid) { + that.messageEventDefinitionUid = arrayMessageEventDefinition[i].msged_uid + arrayMessageEventDefinitionData = arrayMessageEventDefinition[i]; + break; + } + } + + that.cboMessageTypeSetOptionsRestProxy(that.cboMessageType, (typeof(arrayMessageEventDefinitionData.msgt_uid) != "undefined") ? arrayMessageEventDefinitionData.msgt_uid : ""); + + if (that.messageEventDefinitionUid == "") { + //POST + that.messageEventDefinitionOption = "POST"; + + that.editMessageForm.getField("txtMessageTypeVariableName").setValue(""); + that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").setValue(""); + } else { + //PUT + that.messageEventDefinitionOption = "PUT"; + + that.gridCurrent.setDataItems(that.getVariablesByObject(arrayMessageEventDefinitionData.msged_variables)); + that.frmMessageEventDefinition1.getField("txtCorrelationValue").setValue(arrayMessageEventDefinitionData.msged_correlation); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.setValueMessageEventDefinition = function (row) { + var that = this, data; + + that.editRow = row; + data = row.getData(); + + that.editMessageForm.getField("txtMessageTypeVariableName").setValue(data.msgtv_name); + that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").setValue(data.msgtv_default_value); + + that.editMessageForm.setVisible(true); +}; + +MessageEventDefinition.prototype.addVariableInGrdPnlVariable3 = function () { + var that = this, + data = { + msgtv_name: that.editMessageForm.getField("txtMessageTypeVariableName").getValue(), + msgtv_default_value: that.editMessageForm.getField("txtMessageTypeVariableDefaultValue").getValue() + }; + + if (that.editRow == null) { + that.gridCurrent.addItem(new PMUI.grid.GridPanelRow({ + data: data + })); + } else { + that.editRow.setData(data); + } + + that.cancelAcceptedValue(); +}; + +MessageEventDefinition.prototype.cancelAcceptedValue = function () { + var that = this; + that.editRow = null; + that._resetEditMessageForm(); + that.editMessageForm.setVisible(false); +}; + +MessageEventDefinition.prototype.grdPnlVariable3GetData = function () { + var that = this, + i, + data = []; + + if (that.gridCurrent.visible) { + data = that.gridCurrent.getData(); + + for (i = 0; i <= data.length - 1; i += 1) { + delete data[i].key; + delete data[i].type; + } + } + return data; +}; + +MessageEventDefinition.prototype.cboMessageTypeSetOptionsRestProxy = function (cboMessageType, messageTypeUidSelected) { + var that = this, restProxy, iAux; + + cboMessageType.clearOptions(); + iAux = 0; + restProxy = new PMRestClient({ + typeRequest: "get", + endpoint: "message-types", + + functionSuccess: function (xhr, response) { + var dataResponse = response, messageTypeData, i, arrayOptions, iAux; + that.arrayMessageType = dataResponse; + arrayOptions = []; + for (i = 0; i <= dataResponse.length - 1; i += 1) { + if (dataResponse[i].msgt_uid == messageTypeUidSelected) { + iAux = i; + } + + arrayOptions.push( + { + value: dataResponse[i].msgt_uid, + label: dataResponse[i].msgt_name + } + ); + } + + if (arrayOptions.length > 0) { + cboMessageType.setOptions(arrayOptions); + + if (messageTypeUidSelected == "") { + //POST + cboMessageType.setValue(arrayOptions[0].value); + messageTypeData = that.getMessageTypeByIndex(arrayOptions[0].value); + + if (messageTypeData != null) { + that.gridCurrent.setDataItems(messageTypeData.msgt_variables); + } + } else { + //PUT + cboMessageType.setValue(arrayOptions[iAux].value); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.messageEventDefintionPostRestProxy = function (data) { + var restProxy = new PMRestClient({ + endpoint: "message-event-definition", + typeRequest: "post", + data: data, + + functionSuccess: function (xhr, response) { + var dataResponse = response; + PMDesigner.msgFlash('The property event was saved successfully.'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; + +MessageEventDefinition.prototype.messageEventDefintionPutRestProxy = function (data, messageEventDefinitionUid) { + var restProxy = new PMRestClient({ + endpoint: "message-event-definition/" + messageEventDefinitionUid, + typeRequest: "update", + data: data, + + functionSuccess: function (xhr, response) { + var dataResponse = response; + PMDesigner.msgFlash('The property event was saved successfully.'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + + restProxy.executeRestClient(); +}; +/** + * Reset the fields from the form's Edit panel. + * @returns {MessageEventDefinition} + * @private + */ +MessageEventDefinition.prototype._resetEditMessageForm = function () { + if (this.editMessageForm) { + this.editMessageForm.getItems().map(function (i) { + i.setValue(""); + }); + } + return this; +}; + +/** + * @class IntroHelper + * Handle Intro helper + * + * @constructor + * Creates a new instance of the class + * @param {Object} options + */ +var IntroHelper = function (options) { + this.steps = []; + this.onExit = null; + this.introjs = null; + IntroHelper.prototype.initObject.call(this, options); +}; +IntroHelper.prototype.type = 'IntroHelper'; + +IntroHelper.prototype.initObject = function (options) { + var defaults = { + steps: [], + skipLabel: "Skip", + onExit : new Function() + }; + $.extend(true, defaults, options); + this.setSteps(defaults.steps); + + this.setSkipLabel(defaults.skipLabel); + this.setNextLabel(defaults.nextLabel); + this.setPrevLabel(defaults.prevLabel); + this.setDoneLabel(defaults.doneLabel); + this.setOnExit(defaults.onExit); +}; + +IntroHelper.prototype.setSteps = function (steps) { + this.steps = steps; + return this; +}; + +IntroHelper.prototype.setSkipLabel = function (label) { + this.skipLabel = label; + return this; +}; +IntroHelper.prototype.setNextLabel = function (label) { + this.nextLabel = label; + return this; +}; + +IntroHelper.prototype.setPrevLabel = function (label) { + this.prevLabel = label; + return this; +}; + +IntroHelper.prototype.setDoneLabel = function (label) { + this.doneLabel = label; + return this; +}; + +IntroHelper.prototype.setSkipLabel = function (label) { + this.skipLabel = label; + return this; +}; + +IntroHelper.prototype.setOnExit = function (callback) { + if (callback && typeof callback == "function") { + this.onExit = callback; + } + return this; +}; + +IntroHelper.prototype.startIntro = function () { + var that = this; + this.introjs = introJs(); + this.introjs.setOptions({ + steps: this.steps, + skipLabel: this.skipLabel, + nextLabel: this.nextLabel, + prevLabel: this.prevLabel, + doneLabel: this.doneLabel + }); + this.introjs.onexit(function () { + that.onExit(); + }); + + this.introjs.start(); +}; +(function () { + PMDesigner.scriptTaskProperties = function (activity) { + var that = this, + taskUid, + taskType, + triggerSelectedData, + oldValue, + uidProj, + scrtas_uid, + buttonCancel, + restClientNewScriptTask, + restClientUpdateScriptTask, + restClientNewTrigger, + restClientUpdateTrigger, + $ctrlSpaceMessage, + triggerEngine, + getListTrigger, + getScriptTask, + formScriptTask, + buttonSave, + domSettings, + scriptTaskPropertiesWindow, + triggerUid; + + taskUid = activity.getID(); + taskType = activity.getTaskType(); + taskType = "TRIGGER"; + oldValue = ""; + uidProj = PMDesigner.project.id; + scrtas_uid = ""; + triggerUid = ""; + $ctrlSpaceMessage = $("

" + "Press".translate() + " ctrl+space " + "to get the function list".translate() + ".

"); + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelScriptButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + scriptTaskPropertiesWindow.isDirtyFormScript(); + } + }); + + restClientNewScriptTask = function (triggerUid) { + var restClient = new PMRestClient({ + endpoint: 'script-task', + typeRequest: 'post', + data: { + scrtas_obj_uid: triggerUid, + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function () { + scriptTaskPropertiesWindow.close(); + PMDesigner.msgFlash('Script Task saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateScriptTask = function (triggerUid) { + var restClient = new PMRestClient({ + endpoint: 'script-task/' + formScriptTask.getItems()[0].items.get(4).getValue(), + typeRequest: 'update', + data: { + scrtas_obj_uid: triggerUid, /*trigger uid*/ + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function () { + scriptTaskPropertiesWindow.close(); + PMDesigner.msgFlash('Script Task saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientNewTrigger = function (dataToSend, newScriptTask) { + var restClient = new PMRestClient({ + endpoint: 'trigger', + typeRequest: 'post', + data: dataToSend, + functionSuccess: function (xhr, response) { + triggerUid = response.tri_uid; + if (triggerUid != "" && typeof triggerUid != "undefinied") { + if (newScriptTask) { + restClientNewScriptTask(triggerUid); + } else { + restClientUpdateScriptTask(triggerUid); + } + } + }, + functionFailure: function (xhr, response) { + var msg = response.error.message, + arrayMatch = []; + + if ((arrayMatch = /^[\w\s]+\:\s*(.*)$/i.exec(msg))) { + msg = arrayMatch[1]; + } + + PMDesigner.msgWinError(msg); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateTrigger = function (newScriptTask) { + var restClient = new PMRestClient({ + endpoint: 'trigger/' + formScriptTask.getItems()[0].items.get(1).getValue(), + typeRequest: 'update', + data: { + scrtas_obj_uid: formScriptTask.getItems()[0].items.get(1).getValue(), + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + act_uid: taskUid, + scrtas_obj_type: taskType + }, + functionSuccess: function (xhr, response) { + triggerUid = response.tri_uid; + if (newScriptTask) { + restClientNewScriptTask(formScriptTask.getItems()[0].items.get(1).getValue()); + } else { + restClientUpdateScriptTask(formScriptTask.getItems()[0].items.get(1).getValue()); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Script Task, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + buttonSave = new PMUI.ui.Button({ + id: 'saveScriptButton', + text: "Save".translate(), + handler: function (event) { + var newScriptTask, dataToSend; + if (formScriptTask.isValid()) { + if (formScriptTask.getItems()[0].items.get(4).getValue() === "") { /*new*/ + newScriptTask = true; + if (formScriptTask.getItems()[0].items.get(1).getValue() != "") { + restClientUpdateTrigger(newScriptTask); + } else { + dataToSend = { + tri_title: formScriptTask.getItems()[0].items.get(2).getValue(), + tri_description: "", + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + tri_param: "" + }; + restClientNewTrigger(dataToSend, newScriptTask); + } + } else { + newScriptTask = false; + if (formScriptTask.getItems()[0].items.get(1).getValue() !== "") { + restClientUpdateTrigger(newScriptTask); + } else { + dataToSend = { + tri_title: formScriptTask.getItems()[0].items.get(2).getValue(), + tri_description: "", + tri_webbot: formScriptTask.getItems()[1].controls[0].cm.getValue(), + tri_param: "" + }; + restClientNewTrigger(dataToSend, newScriptTask); + } + } + } + }, + buttonType: 'success' + }); + + scriptTaskPropertiesWindow = new PMUI.ui.Window({ + id: "scriptTaskPropertiesWindow", + title: "Script Task Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + { + text: "@@", + id: "selectPickerButton", + handler: function () { + var picker = new VariablePicker(); + picker.open({ + success: function (variable) { + var codeMirror = formScriptTask.getItems()[1].controls[0].cm; + var cursorPos = codeMirror.getCursor(); + codeMirror.replaceSelection(variable); + codeMirror.setCursor(cursorPos.line, cursorPos.ch); + } + }); + }, + style: { + cssProperties: { + "margin-left": '208px', + "background": "rgb(45, 62, 80)", + "border": "1px solid rgb(45, 62, 80)" + } + } + }, + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + scriptTaskPropertiesWindow.isDirtyFormScript(); + } + }); + + scriptTaskPropertiesWindow.isDirtyFormScript = function () { + var that = this, + message_window, + title = "Script Task".translate(); + if (oldValue !== formScriptTask.getItems()[1].controls[0].cm.getValue()) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: title, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + + triggerEngine = new PMUI.field.DropDownListField({ + id: "triggerEngine", + name: "triggerEngine", + label: "Title".translate(), + options: null, + controlsWidth: 400, + required: true, + onChange: function (newValue, prevValue) { + var uidTri = newValue, i; + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid == uidTri) { + formScriptTask.getItems()[1].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + } + } + } + }); + + getListTrigger = function (triggerEngine) { + var restClient = new PMRestClient({ + endpoint: 'triggers', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var arrayOptions = [], i; + triggerSelectedData = response; + arrayOptions[0] = { + label: "- Select a trigger -".translate(), + value: "", + disabled: true, + selected: true + }; + for (i = 0; i <= triggerSelectedData.length - 1; i += 1) { + arrayOptions.push( + { + value: triggerSelectedData[i].tri_uid, + label: triggerSelectedData[i].tri_title + } + ); + } + triggerEngine.setOptions(arrayOptions); + triggerEngine.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + + getScriptTask = function () { + var restClient = new PMRestClient({ + endpoint: 'script-task/activity/' + taskUid, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var i; + if (typeof response == "object") { + triggerUid = response.scrtas_obj_uid; + if (triggerUid != "" && typeof triggerUid != "undefinied") { + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid == triggerUid) { + formScriptTask.getItems()[1].controls[0].setValue(triggerSelectedData[i].tri_webbot); + oldValue = triggerSelectedData[i].tri_webbot; + formScriptTask.getItems()[0].items.get(4).setValue(response.scrtas_uid); + formScriptTask.getItems()[0].items.get(1).setValue(triggerUid); + } + } + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + formScriptTask = new PMUI.form.Form({ + id: "formScriptTask", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formScriptTask", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "taskUid", + pmType: "text", + label: "ID".translate(), + value: taskUid, + name: "taskUid", + readOnly: true, + visible: false, + valueType: 'string' + }, + triggerEngine, + { + id: "newScript", + pmType: "text", + label: "Title".translate(), + controlsWidth: 400, + value: "", + name: "newScript", + required: false, + visible: false, + valueType: 'string' + }, + { + id: "taskType", + pmType: "text", + value: taskType, + name: "taskType", + visible: false, + valueType: 'string' + }, + { + id: "scrtas_uid", + pmType: "text", + value: scrtas_uid, + name: "scrtas_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + that.cd = new PMCodeMirrorField({ + labelWidth: '23.8%' + }); + that.cd.setLabel("Code".translate()); + formScriptTask.addItem(that.cd); + formScriptTask.getItems()[1].setName('code'); + formScriptTask.getItems()[1].setID('code'); + formScriptTask.getItems()[1].setHeight(300); + CodeMirror.commands.autocomplete = function (cm) { + CodeMirror.showHint(cm, CodeMirror.phpHint); + }; + + getListTrigger(triggerEngine); + getScriptTask(); + /*end form*/ + + domSettings = function () { + var codeMirrorControl, requiredMessage, titleAdd, titleBack; + codeMirrorControl = formScriptTask.getItems()[1].controls[0].cm; + formScriptTask.getItems()[1].html.style.padding = "10px"; + if (codeMirrorControl != undefined) { + codeMirrorControl.setSize(650, 255); //CodeMirror Size + $("#code").find(".CodeMirror-wrap").css({'border': '1px solid #c0c0c0'}); + codeMirrorControl.refresh(); + } + requiredMessage = $(document.getElementById("requiredMessage")); + scriptTaskPropertiesWindow.body.appendChild(requiredMessage[0]); + requiredMessage[0].style['marginTop'] = '65px'; + + scriptTaskPropertiesWindow.footer.html.style.textAlign = 'right'; + $(".CodeMirror.cm-s-default.CodeMirror-wrap").after($ctrlSpaceMessage.css({ + "padding-left": "10px", + "margin": "3px 0px 0px 0px" + })); + + titleAdd = "Add new".translate(); + titleBack = "Back to list".translate(); + + $("#triggerEngine").find("select").after('  '); + $("#newScript").find("input").after('  '); + $("#titleAdd, #titleBack").tooltip(); + }; + + scriptTaskPropertiesWindow.addItem(formScriptTask); + scriptTaskPropertiesWindow.open(); + scriptTaskPropertiesWindow.showFooter(); + domSettings(); + + $(".showHideScript").on("click", function () { + if (formScriptTask.getItems()[0].items.get(1).isVisible()) { + formScriptTask.getItems()[0].items.get(1).setVisible(false); + } else { + formScriptTask.getItems()[0].items.get(1).setVisible(true); + formScriptTask.getItems()[0].items.get(1).setValue(""); + formScriptTask.getItems()[0].items.get(2).setRequired(false); + formScriptTask.getItems()[0].items.get(1).setRequired(true); + $(formScriptTask.getItems()[0].items.get(1).html).find("select").focus(); + } + + if (!formScriptTask.getItems()[0].items.get(2).isVisible()) { + formScriptTask.getItems()[0].items.get(2).setVisible(true); + formScriptTask.getItems()[0].items.get(1).setRequired(false); + formScriptTask.getItems()[0].items.get(1).setValue(""); + formScriptTask.getItems()[0].items.get(2).setRequired(true); + formScriptTask.getItems()[0].items.get(2).setValue(""); + $(formScriptTask.getItems()[0].items.get(2).html).find("input").focus(); + } else { + formScriptTask.getItems()[0].items.get(2).setVisible(false); + } + formScriptTask.getItems()[1].controls[0].cm.setValue(""); + oldValue = ""; + + }); + + }; +}()); + +(function () { + PMDesigner.timerEventProperties = function (activity) { + var that = this, + evnUid = activity.getID(), + activityType = activity.getEventMarker(), + uidProj = PMDesigner.project.id, + oldValues, + tmrevn_uid = "", + dataTimer = "", + buttonCancel, + restClientNewTimerEvent, + buttonSave, + restClientUpdateTimerEvent, + timerEventPropertiesWindow, + showHourlyItems, + showDailyItems, + showMonthlyItems, + showOneDateTimeItems, + showEveryItems, + showWaitForItems, + showWaitUntilItems, + varshowHourlyItems, + endDate, + oneDateTime, + daysGroup, + monthsGroup, + radioGroup, + dateTimeVariablePicker, + formTimerEvent, + getFormData, + getTimerEventData, + validateItems, + domSettings, + eventType = activity.getEventType(), + regexDay = new RegExp(/^(((0|1|2)?[0-9])|(3[01]))$/), + regexHour = new RegExp(/^(((0|1)?[0-9])|(2[0-4]))$/), + regexMinute = new RegExp(/^([0-5]?[0-9])$/); + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelTimmerButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + clickedClose = false; + formTimerEvent.getField('startDate').controls[0].hideCalendar(); + formTimerEvent.getField('endDate').controls[0].hideCalendar(); + formTimerEvent.getField('oneDateTime').controls[0].hideCalendar(); + formTimerEvent.getField('dateTimeVariablePicker').controls[0].hideCalendar(); + timerEventPropertiesWindow.isDirtyFormScript(); + } + }); + + restClientNewTimerEvent = function (dataToSave) { + var restClient = new PMRestClient({ + endpoint: 'timer-event', + typeRequest: 'post', + data: dataToSave, + functionSuccess: function (xhr, response) { + timerEventPropertiesWindow.close(); + PMDesigner.msgFlash('Timer Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + restClientUpdateTimerEvent = function (dataToSave) { + var restClient = new PMRestClient({ + endpoint: 'timer-event/' + formTimerEvent.getField("tmrevn_uid").getValue(), + typeRequest: 'update', + data: dataToSave, + functionSuccess: function (xhr, response) { + timerEventPropertiesWindow.close(); + PMDesigner.msgFlash('Timer Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + buttonSave = new PMUI.ui.Button({ + id: 'saveTimmerButton', + text: "Save".translate(), + handler: function (event) { + var i, + opt, + formData; + + formTimerEvent.getField("hourType").setValue(getData2PMUI(formTimerEvent.html).hourType); + formTimerEvent.getField("minuteType").setValue(getData2PMUI(formTimerEvent.html).minuteType); + formTimerEvent.getField("dayType").setValue(getData2PMUI(formTimerEvent.html).dayType); + if (formTimerEvent.isValid()) { + opt = formTimerEvent.getField("radioGroup").getValue(); + formData = formTimerEvent.getData(); + switch (opt) { + case "1": /*hourly*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "HOURLY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "2": /*daily*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "DAILY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ), + tmrevn_configuration_data: JSON.parse(formData.daysGroup).map(function (n) { + return Number(n); + }) + }; + break; + case "3": /*monthly*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "MONTHLY", + tmrevn_start_date: formData.startDate.substring(0, 10), + tmrevn_end_date: formTimerEvent.getField("endDate").getValue().substring(0, 10), + tmrevn_day: formData.dayType.length == 1 ? "0" + formData.dayType : (formData.dayType.length == 0 ? "00" : formData.dayType ), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ), + tmrevn_configuration_data: JSON.parse(formData.monthsGroup).map(function (n) { + return Number(n); + }) + }; + break; + case "4": /*one-date-time*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "ONE-DATE-TIME", + tmrevn_next_run_date: $("#oneDateTime").find("input:eq(0)").val() + }; + for (var i in ENABLED_FEATURES) { + if (ENABLED_FEATURES[i] == 'oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=') { + dataTimer.tmrevn_next_run_date = convertDatetimeToIso8601(dataTimer.tmrevn_next_run_date); + } + } + break; + case "5": /*every*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "EVERY", + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "6": /*wait for*/ + if ((formData.dayType === '' || formData.dayType === '00' || formData.dayType === '0') && + (formData.hourType === '' || formData.hourType === '00' || formData.hourType === '0') && + (formData.minuteType === '' || formData.minuteType === '00' || formData.minuteType === '0')) { + PMDesigner.msgWinError("The amount of time entered is not valid. Please fill in at least one of the fields (day, hour, or minute)".translate()); + return; + } else { + if (!regexDay.test(formData.dayType) || !regexHour.test(formData.hourType) || !regexMinute.test(formData.minuteType)) { + PMDesigner.msgWinError("The amount of time entered is not valid. Please fill in at least one of the fields (day, hour, or minute)".translate()); + return; + } + } + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "WAIT-FOR", + tmrevn_day: formData.dayType.length == 1 ? "0" + formData.dayType : (formData.dayType.length == 0 ? "00" : formData.dayType ), + tmrevn_hour: formData.hourType.length == 1 ? "0" + formData.hourType : (formData.hourType.length == 0 ? "00" : formData.hourType ), + tmrevn_minute: formData.minuteType.length == 1 ? "0" + formData.minuteType : (formData.minuteType.length == 0 ? "00" : formData.minuteType ) + }; + break; + case "7": /*wait until specified date time*/ + dataTimer = { + evn_uid: evnUid, + tmrevn_option: "WAIT-UNTIL-SPECIFIED-DATE-TIME", + tmrevn_configuration_data: $("#dateTimeVariablePicker").find("input:eq(0)").val() + }; + break; + } + if (formTimerEvent.getField("tmrevn_uid").getValue() == "") { + restClientNewTimerEvent(dataTimer); + } else { + restClientUpdateTimerEvent(dataTimer); + } + } + }, + buttonType: 'success' + }); + + timerEventPropertiesWindow = new PMUI.ui.Window({ + id: "timerEventPropertiesWindow", + title: "Timer Event Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + clickedClose = true; + formTimerEvent.getField('startDate').controls[0].hideCalendar(); + formTimerEvent.getField('endDate').controls[0].hideCalendar(); + formTimerEvent.getField('oneDateTime').controls[0].hideCalendar(); + formTimerEvent.getField('dateTimeVariablePicker').controls[0].hideCalendar(); + timerEventPropertiesWindow.isDirtyFormScript(); + } + }); + + timerEventPropertiesWindow.isDirtyFormScript = function () { + var that = this, + title = "Timer Event".translate(), + newValues = getFormData($("#formTimerEvent")); + if (JSON.stringify(oldValues) !== JSON.stringify(newValues)) { + var message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: title, + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + showHourlyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showDailyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(true); + formTimerEvent.getField('daysGroup').setRequired(true); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showMonthlyItems = function () { + formTimerEvent.getField('startDate').setVisible(true); + formTimerEvent.getField('startDate').setRequired(true); + formTimerEvent.getField('endDateCheckbox').setVisible(true); + formTimerEvent.getField('endDate').setVisible(true); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(true); + formTimerEvent.getField('monthsGroup').setRequired(true); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + + showOneDateTimeItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('startDate').setRequired(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(true); + formTimerEvent.getField('oneDateTime').setRequired(true); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(false); + }; + + showEveryItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('startDate').setRequired(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('oneDateTime').setRequired(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setRequired(true); + }; + /*intermediate*/ + showWaitForItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(false); + formTimerEvent.getField('dateTimeVariablePicker').setRequired(false); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(true); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(true); + }; + + showWaitUntilItems = function () { + formTimerEvent.getField('startDate').setVisible(false); + formTimerEvent.getField('endDateCheckbox').setVisible(false); + formTimerEvent.getField('endDate').setVisible(false); + formTimerEvent.getField('oneDateTime').setVisible(false); + formTimerEvent.getField('daysGroup').setVisible(false); + formTimerEvent.getField('daysGroup').setRequired(false); + formTimerEvent.getField('monthsGroup').setVisible(false); + formTimerEvent.getField('monthsGroup').setRequired(false); + formTimerEvent.getField('dateTimeVariablePicker').setVisible(true); + formTimerEvent.getField('dateTimeVariablePicker').setRequired(true); + formTimerEvent.getItems()[0].items.get(4).getField('dayType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('hourType').setVisible(false); + formTimerEvent.getItems()[0].items.get(4).getField('minuteType').setVisible(false); + }; + + radioGroup = new PMUI.field.RadioButtonGroupField({ + id: 'radioGroup', + controlPositioning: 'horizontal', + maxDirectionOptions: 7, + options: [ + { + label: "Hourly".translate(), + value: "1" + }, + { + label: "Daily".translate(), + value: "2" + }, + { + label: "Monthly".translate(), + value: "3" + }, + { + label: "One date/time".translate(), + value: "4" + }, + { + label: "Every".translate(), + value: "5" + }, + { + label: "Wait for".translate(), + value: "6" + }, + { + label: "Wait until specified date/time".translate(), + value: "7" + } + + ], + onChange: function (newVal, oldVal) { + switch (newVal) { + case "1": + showHourlyItems(); + break; + case "2": + showDailyItems(); + break; + case "3": + showMonthlyItems(); + break; + case "4": + showOneDateTimeItems(); + break; + case "5": + showEveryItems(); + break; + case "6": + showWaitForItems(); + break; + case "7": + showWaitUntilItems(); + break; + } + }, + value: "1" + }); + + startDate = new PMUI.field.DateTimeField({ + id: 'startDate', + label: 'Start date'.translate(), + datetime: false, + dateFormat: 'yy-mm-dd', + firstDay: 1, + controlsWidth: 100, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + endDate = new PMUI.field.DateTimeField({ + id: 'endDate', + label: "End date".translate(), + value: '', + disabled: true, + datetime: false, + dateFormat: 'yy-mm-dd', + firstDay: 1, + controlsWidth: 100, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + oneDateTime = new PMUI.field.DateTimeField({ + id: 'oneDateTime', + label: 'Date time'.translate(), + datetime: true, + dateFormat: 'yy-mm-dd HH:ii:ss', + firstDay: 1, + controlsWidth: 150, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + daysGroup = new PMUI.field.CheckBoxGroupField({ + label: "Days".translate(), + id: 'daysGroup', + controlPositioning: 'vertical', + maxDirectionOptions: 3, + required: true, + options: [ + { + label: 'Monday'.translate(), + value: 1, + name: 'monday', + selected: true + }, + { + label: 'Tuesday'.translate(), + value: 2, + name: 'tuesday', + selected: true + }, + { + label: 'Wednesday'.translate(), + value: 3, + name: 'wednesday', + selected: true + }, + { + label: 'Thursday'.translate(), + value: 4, + name: 'thursday', + selected: true + }, + { + label: 'Friday'.translate(), + value: 5, + name: 'friday', + selected: true + }, + { + label: 'Saturday'.translate(), + value: 6, + name: 'saturday', + selected: true + }, + { + label: 'Sunday'.translate(), + value: 7, + name: 'sunday', + selected: true + } + ], + onChange: function (newVal, oldVal) { + + } + }); + + monthsGroup = new PMUI.field.CheckBoxGroupField({ + label: "Months".translate(), + id: 'monthsGroup', + controlPositioning: 'vertical', + maxDirectionOptions: 3, + required: true, + options: [ + { + label: 'January'.translate(), + value: 1, + name: 'january', + selected: true + }, + { + label: 'February'.translate(), + value: 2, + selected: true + }, + { + label: 'March'.translate(), + value: 3, + selected: true + }, + { + label: 'April'.translate(), + value: 4, + selected: true + }, + { + label: 'May'.translate(), + value: 5, + selected: true + }, + { + label: 'June'.translate(), + value: 6, + selected: true + }, + { + label: 'July'.translate(), + value: 7, + selected: true + }, + { + label: 'August'.translate(), + value: 8, + selected: true + }, + { + label: 'September'.translate(), + value: 9, + selected: true + }, + { + label: 'October'.translate(), + value: 10, + selected: true + }, + { + label: 'November'.translate(), + value: 11, + selected: true + }, + { + label: 'December'.translate(), + value: 12, + selected: true + } + ], + onChange: function (newVal, oldVal) { + + } + }); + + dateTimeVariablePicker = new PMUI.field.DateTimeField({ + id: 'dateTimeVariablePicker', + label: 'Date time'.translate(), + datetime: true, + dateFormat: 'yy-mm-dd HH:ii:ss', + firstDay: 1, + controlsWidth: 150, + required: false, + readOnly: true, + minDate: 0, + maxDate: 1460 + }); + + formTimerEvent = new PMUI.form.Form({ + id: "formTimerEvent", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formTimerEvent", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "evnUid", + pmType: "text", + value: evnUid, + name: "evnUid", + readOnly: true, + visible: false, + valueType: 'string' + }, + { + id: "activityType", + pmType: "text", + value: activityType, + name: "activityType", + readOnly: true, + visible: false, + valueType: 'string' + }, + radioGroup, + { + pmType: "panel", + id: "datesPanel", + layout: 'hbox', + items: [ + startDate, + { + pmType: "checkbox", + id: "endDateCheckbox", + label: "End date".translate(), + controlPositioning: 'vertical', + maxDirectionOptions: 2, + value: '', + options: [ + { + label: "End date:".translate(), + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + if (newVal[2] == "1") { + $('#endDate').find('input:eq(0)').removeProp("disabled"); + } else { + $('#endDate').find('input:eq(0)').val('').attr("disabled", "disabled"); + formTimerEvent.getField('endDate').setValue(''); + } + } + }, + endDate, + oneDateTime, + dateTimeVariablePicker + ] + }, + { + pmType: "panel", + id: "dayHourMonthPanel", + layout: 'hbox', + items: [ + { + id: "dayType", + label: "Day".translate(), + pmType: "text", + value: "", + name: "dayType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + }, + { + id: "hourType", + label: "Hour".translate(), + pmType: "text", + value: "", + name: "hourType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + }, + { + id: "minuteType", + label: "Minute".translate(), + pmType: "text", + value: "", + name: "minuteType", + visible: true, + valueType: 'integer', + controlsWidth: 50, + maxLength: 2 + } + ] + }, + daysGroup, + monthsGroup, + { + id: "tmrevn_uid", + pmType: "text", + value: tmrevn_uid, + name: "tmrevn_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + + formTimerEvent.initialData = function () { + var formElements = this.getItems()[0], + datesPanelElements, + radioGroupValues = {'radioGroup': formElements.items.get(2).getValue()}; + oldValues.push(radioGroupValues); + datesPanelElements = formElements.items.get(3).getItems(); + + }; + + getFormData = function ($form) { + var unindexed_array = $form.serializeArray(), + indexed_array = {}; + + $.map(unindexed_array, function (n, i) { + indexed_array[n['name']] = n['value']; + }); + return indexed_array; + }; + + getTimerEventData = function () { + var restClient = new PMRestClient({ + endpoint: 'timer-event/event/' + formTimerEvent.getField("evnUid").getValue(), + typeRequest: 'get', + functionSuccess: function (xhr, response) { + if (typeof response === "object" && JSON.stringify(response).length > 2) { + var opt = response.tmrevn_option.toUpperCase(); + switch (opt) { + case "HOURLY": + $("#radioGroup").find("input:eq(0)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "DAILY": + $("#radioGroup").find("input:eq(1)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + formTimerEvent.getField("daysGroup").setValue(""); + formTimerEvent.getField("daysGroup").setValue(JSON.stringify(response.tmrevn_configuration_data.map(function (n) { + return n.toString(); + }))); + break; + case "MONTHLY": + $("#radioGroup").find("input:eq(2)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("startDate").setValue(response.tmrevn_start_date); + if (response.tmrevn_end_date != "") { + formTimerEvent.getField("endDateCheckbox").setValue('["1"]'); + formTimerEvent.getField("endDate").setValue(response.tmrevn_end_date); + formTimerEvent.getField("endDate").enable(); + } + formTimerEvent.getField("dayType").setValue(response.tmrevn_day); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + formTimerEvent.getField("monthsGroup").setValue(""); + formTimerEvent.getField("monthsGroup").setValue(JSON.stringify(response.tmrevn_configuration_data.map(function (n) { + return n.toString(); + }))); + break; + case "ONE-DATE-TIME": + $("#radioGroup").find("input:eq(3)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + var d = response.tmrevn_next_run_date.replace(/-/g, "/"); + for (var i in ENABLED_FEATURES) { + if (ENABLED_FEATURES[i] == 'oq3S29xemxEZXJpZEIzN01qenJUaStSekY4cTdJVm5vbWtVM0d4S2lJSS9qUT0=') { + d = response.tmrevn_next_run_date; + } + } + d = new Date(d); + formTimerEvent.getField("oneDateTime").setValue(d); + break; + case "EVERY": + $("#radioGroup").find("input:eq(4)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "WAIT-FOR": + $("#radioGroup").find("input:eq(5)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + formTimerEvent.getField("dayType").setValue(response.tmrevn_day); + formTimerEvent.getField("hourType").setValue(response.tmrevn_hour); + formTimerEvent.getField("minuteType").setValue(response.tmrevn_minute); + break; + case "WAIT-UNTIL-SPECIFIED-DATE-TIME": + $("#radioGroup").find("input:eq(6)").trigger("click"); + formTimerEvent.getField("tmrevn_uid").setValue(response.tmrevn_uid); + var d = response.tmrevn_configuration_data.replace(/-/g, "/"); + d = new Date(d); + formTimerEvent.getField("dateTimeVariablePicker").setValue(d); + break; + } + } else { + if (eventType == "START") { + $("#radioGroup").find("input:eq(1)").trigger("click"); + } else { + $("#radioGroup").find("input:eq(5)").trigger("click"); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Timer Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + + /*end form*/ + + validateItems = function (itemId) { + var regexTest, + message, + valueItem, + regexTest; + + if (itemId === 'dayType') { + regexTest = regexDay; + message = "Error value: Day: 0 - 31".translate(); + } else if (itemId === 'hourType') { + regexTest = regexHour; + message = "Error value: Hour: 0 - 23".translate(); + } else if (itemId === 'minuteType') { + regexTest = regexMinute; + message = "Error value: Minute: 0 - 59".translate(); + } + + valueItem = $('#' + itemId).find('span input:eq(0)').val(); + + if (!regexTest.test(valueItem)) { + PMDesigner.msgFlash(message, timerEventPropertiesWindow, 'error', 3000, 5); + $('#' + itemId).find('span input:eq(0)').val(''); + return false; + } + }; + + domSettings = function () { + var requiredMessage = $(document.getElementById("requiredMessage")); + timerEventPropertiesWindow.body.appendChild(requiredMessage[0]); + requiredMessage[0].style['marginTop'] = '70px'; + + timerEventPropertiesWindow.footer.html.style.textAlign = 'right'; + + $('#hourType, #dayType, #minuteType').find('span input:eq(0)').bind('blur change', function () { + validateItems($(this).closest('div').attr('id')); + }); + + $("#dayType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "31"}); + $("#hourType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "23"}); + $("#minuteType").find("input").attr({"type": "number", "maxlength": "2", "min": "0", "max": "59"}); + + $("#radioGroup").css({"text-align": "center", "margin-bottom": "20px"}).find("label:eq(0)").remove(); + $("#endDateCheckbox").css({"width": "170px", "top": "6px", "left": "28px"}).find("label:eq(0)").remove(); + $("#endDateCheckbox").find("table:eq(0)").css("border", "0px"); + $("#startDate").css("width", ""); + $("#endDate").css("width", "104px").find("label:eq(0)").remove(); + $("#oneDateTime").css("width", ""); + $("#datesPanel").css("text-align", "center").find("label").css({ + "width": "", + "float": "", + "text-align": "right" + }); + $("#dayHourMonthPanel").css("text-align", "center").find("label").css({"float": "", "width": "34.5%"}); + + $("#daysGroup").css("text-align", "center").find("label:eq(0)").remove(); + $("#monthsGroup").css("text-align", "center").find("label:eq(0)").remove(); + $("#daysGroup").find("input").each(function () { + $(this).attr("name", $(this).val()); + }); + + $("#dateTimeVariablePicker").css("width", ""); + + + if (eventType == "START") { + $(formTimerEvent.getField("radioGroup").controls[0].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[1].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[2].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[3].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[4].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[5].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[6].html).parent().hide(); + $("#radioGroup").find("input:eq(1)").trigger("click"); + } else { + $(formTimerEvent.getField("radioGroup").controls[0].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[1].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[2].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[3].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[4].html).parent().hide(); + $(formTimerEvent.getField("radioGroup").controls[5].html).parent().show(); + $(formTimerEvent.getField("radioGroup").controls[6].html).parent().show(); + $("#radioGroup").find("input:eq(5)").trigger("click"); + } + }; + + timerEventPropertiesWindow.addItem(formTimerEvent); + timerEventPropertiesWindow.open(); + formTimerEvent.eventsDefined = false; + formTimerEvent.defineEvents(); + timerEventPropertiesWindow.showFooter(); + domSettings(); + getTimerEventData(); + oldValues = getFormData($("#formTimerEvent")); + }; +}()); + + +(function () { + PMDesigner.emailEventProperties = function (activity) { + var that = this, + buttonCancel, + buttonSave, + emailEventPropertiesWindow, + emailAcounts, + emailContent, + getEmailAccounts, + formEmailEvent, + emailWindowTinyMCE, + getFormData, + getEmailEventData, + domSettings, + activityId = activity.getID(), + activityType = activity.getEventMarker(), + uidProj = PMDesigner.project.id, + initTinyMCE = null, + oldValues, + emailEventId = "", + prf_uid = "", + ddSize = 21, + auxFromMail = {}, + defaultServerlabel = "Mail (PHP)".translate(), + triggerSelectedData; + /*options to display in drop down*/ + + /*window*/ + buttonCancel = new PMUI.ui.Button({ + id: 'cancelEmailEventsButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = false; + emailEventPropertiesWindow.isDirtyFormScript(); + } + }); + + buttonSave = new PMUI.ui.Button({ + id: 'saveEmailEventsButton', + text: "Save".translate(), + handler: function (event) { + PMDesigner.hideAllTinyEditorControls(); + var dataForm = formEmailEvent.getData(), + selectedAccount = formEmailEvent.getField('emailAcounts').getValue(); + if (formEmailEvent.isValid()) { + if (dataForm.emailEventId == "") { /*insert*/ + (new PMRestClient({ + endpoint: 'file-manager', + typeRequest: 'post', + messageError: '', + data: { + prf_filename: "emailEvent_" + new Date().getTime() + ".html", + prf_path: "templates", + prf_content: dataForm.filecontent + }, + functionSuccess: function (xhr, response) { + var restClient; + prf_uid = response.prf_uid; + if (prf_uid != "" && typeof prf_uid != "undefined") { + restClient = new PMRestClient({ + endpoint: 'email-event', + typeRequest: 'post', + data: { + evn_uid: activityId, + email_event_from: auxFromMail[selectedAccount] || '', + email_event_to: dataForm.ToEmail, + email_event_subject: dataForm.subjectEmail, + email_server_uid: dataForm.emailAcounts, + prf_uid: prf_uid + }, + functionSuccess: function () { + emailEventPropertiesWindow.close(); + PMDesigner.msgFlash('Email Event saved correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems updating the Email Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + + + } else { + (new PMRestClient({ + endpoint: 'file-manager/' + dataForm.prf_uid, + typeRequest: 'update', + messageError: '', + data: { + prf_content: tinyMCE.activeEditor.getContent() + }, + functionSuccess: function (xhr, response) { + var restClient; + prf_uid = response.prf_uid; + if (prf_uid != "" && typeof prf_uid != "undefined") { + restClient = new PMRestClient({ + endpoint: 'email-event/' + dataForm.emailEventId, + typeRequest: 'update', + data: { + evn_uid: activityId, + email_event_from: auxFromMail[selectedAccount] || '', + email_event_to: dataForm.ToEmail, + email_event_subject: dataForm.subjectEmail, + email_server_uid: dataForm.emailAcounts, + prf_uid: prf_uid + }, + functionSuccess: function () { + emailEventPropertiesWindow.close(); + PMDesigner.msgFlash('Email Event Edited correctly'.translate(), document.body, 'success', 3000, 5); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems Edited the Email Event, please try again.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + } + } + }, + buttonType: 'success' + }); + + emailEventPropertiesWindow = new PMUI.ui.Window({ + id: "emailEventPropertiesWindow", + title: "Email Event Properties".translate(), + width: DEFAULT_WINDOW_WIDTH, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + PMDesigner.hideAllTinyEditorControls(); + clickedClose = true; + emailEventPropertiesWindow.isDirtyFormScript(); + } + }); + + emailEventPropertiesWindow.isDirtyFormScript = function () { + var that = this, + newValues, + message_window, + formData = formEmailEvent.getData(); + formData.filecontent = $(tinyMCE.activeEditor.getContent()).text().trim().length ? tinyMCE.activeEditor.getContent() : ""; + newValues = formData; + if (JSON.stringify(oldValues) !== JSON.stringify(newValues)) { + message_window = new PMUI.ui.MessageWindow({ + id: "cancelMessageTriggers", + windowMessageType: 'warning', + width: 490, + title: "Email Event".translate(), + message: 'Are you sure you want to discard your changes?'.translate(), + footerItems: [ + { + text: "No".translate(), + handler: function () { + message_window.close(); + }, + buttonType: "error" + }, + { + text: "Yes".translate(), + handler: function () { + message_window.close(); + that.close(); + }, + buttonType: "success" + } + ] + }); + message_window.open(); + message_window.showFooter(); + } else { + that.close(); + } + }; + /*end window*/ + + /*form*/ + emailAcounts = new PMUI.field.DropDownListField({ + id: "emailAcounts", + name: "emailAcounts", + label: "From".translate(), + options: null, + controlsWidth: 400, + required: false, + labelWidth: "15%", + onChange: function (newValue, prevValue) { + var uidTri = newValue, + oldValue, + i; + for (i = 0; i < triggerSelectedData.length; i += 1) { + if (triggerSelectedData[i].tri_uid === uidTri) { + formScriptTask.getItems()[1].controls[0].cm.setValue(triggerSelectedData[i].tri_webbot); + oldValue = triggerSelectedData[i].tri_webbot; + } + } + } + }); + emailContent = new PMUI.field.TextAreaField({ + id: 'filecontent', + name: 'filecontent', + label: 'Content'.translate(), + required: true, + value: '', + rows: 210, + labelWidth: "15%", + controlsWidth: 720, + onChange: function (currentValue, previousValue) { + }, + style: {cssClasses: ['mafe-textarea-resize']} + }); + getEmailAccounts = function (emailAcounts) { + var restClient = new PMRestClient({ + endpoint: 'email-event/accounts/emailServer', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var i, + arrayOptions; + triggerSelectedData = response; + arrayOptions = []; + arrayOptions[0] = { + label: "Default email account".translate(), + value: "", + disabled: false, + selected: true + }; + for (i = 0; i < triggerSelectedData.length ; i += 1) { + arrayOptions.push({ + value: triggerSelectedData[i].uid, + label: response[i].mess_engine === "MAIL" ? + triggerSelectedData[i].mess_from_name && triggerSelectedData[i].mess_from_name !== "" ? + triggerSelectedData[i].mess_from_name : defaultServerlabel : triggerSelectedData[i].mess_from_name && triggerSelectedData[i].mess_from_name !== "" ? + triggerSelectedData[i].mess_from_name + ' <' + triggerSelectedData[i].mess_account + '>' : ' <' + triggerSelectedData[i].mess_account + '>' + }); + auxFromMail[triggerSelectedData[i].uid] = triggerSelectedData[i].email; + } + emailAcounts.setOptions(arrayOptions); + emailAcounts.setValue(arrayOptions[0].value); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + }, + messageError: "There are problems getting the Triggers list, please try again.".translate() + }); + restClient.executeRestClient(); + }; + formEmailEvent = new PMUI.form.Form({ + id: "formEmailEvent", + border: true, + visibleHeader: false, + width: '900px', + height: "300px", + name: "formEmailEvent", + title: '', + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + id: "activityId", + pmType: "text", + value: activityId, + name: "activityId", + visible: false, + valueType: 'string' + }, + { + id: "activityType", + pmType: "text", + value: activityType, + name: "activityType", + visible: false, + valueType: 'string' + }, + emailAcounts, + new CriteriaField({ + id: "ToEmail", + pmType: "text", + helper: "The email can be a string or a variable (@@myEmail), comma separated list of emails".translate(), + label: "To".translate(), + controlsWidth: 400, + value: "", + name: "ToEmail", + required: true, + visible: true, + labelWidth: "15%", + valueType: 'string' + }), + new CriteriaField({ + id: 'subjectEmail', + pmType: 'text', + label: "Subject".translate(), + controlsWidth: 400, + value: "", + name: "subjectEmail", + required: false, + visible: true, + labelWidth: "15%", + valueType: 'string' + }), + emailContent, + { + id: "emailEventId", + pmType: "text", + value: emailEventId, + name: "emailEventId", + visible: false, + valueType: 'string' + }, + { + id: "prf_uid", + pmType: "text", + value: prf_uid, + name: "prf_uid", + visible: false, + valueType: 'string' + } + ] + } + ] + }); + emailWindowTinyMCE = function () { + initTinyMCE = function () { + tinyMCE.activeEditor.domainURL = "/sys" + WORKSPACE + "/" + LANG + "/" + SKIN + "/"; + tinyMCE.activeEditor.processID = PMDesigner.project.id; + }; + formEmailEvent.getField('filecontent').getControls()[0].getHTML().className = 'tmceEditor'; + applyStyleWindowForm(emailEventPropertiesWindow); + tinyMCE.init({ + editor_selector: 'tmceEditor', + mode: 'specific_textareas', + directionality: 'ltr', + verify_html: false, + skin: 'o2k7', + theme: 'advanced', + skin_variant: 'silver', + relative_urls : false, + remove_script_host : false, + convert_urls: false, + plugins: 'advhr,advimage,advlink,advlist,autolink,autoresize,contextmenu,directionality,emotions,example,example_dependency,fullpage,fullscreen,iespell,inlinepopups,insertdatetime,layer,legacyoutput,lists,media,nonbreaking,noneditable,pagebreak,paste,preview,print,save,searchreplace,style,tabfocus,table,template,visualblocks,visualchars,wordcount,xhtmlxtras,pmSimpleUploader,pmVariablePicker,style', + theme_advanced_buttons1: 'pmSimpleUploader,|,pmVariablePicker,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect,|,cut,copy,paste', + theme_advanced_buttons2: 'bullist,numlist,|,outdent,indent,blockquote,|,tablecontrols,|,undo,redo,|,link,unlink,image,|,forecolor,backcolor,styleprops', + theme_advanced_buttons3: 'hr,removeformat,visualaid,|,sub,sup,|,ltr,rtl,|,code', + popup_css: "/js/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialogTinyBpmn.css", + oninit: initTinyMCE, + onchange_callback: function (inst) { + formEmailEvent.getField('filecontent').setValue(tinyMCE.activeEditor.getContent({format: 'raw'})); + }, + handle_event_callback: function (e) { + }, + setup: function (ed) { + ed.onSetContent.add(function (ed, l) { + formEmailEvent.getField('filecontent').setValue(tinyMCE.activeEditor.getContent({format: 'raw'})); + }); + } + }); + }; + getFormData = function ($form) { + var unindexed_array = $form.serializeArray(), + indexed_array = {}; + + $.map(unindexed_array, function (n, i) { + indexed_array[n['name']] = n['value']; + }); + return indexed_array; + }; + getEmailEventData = function () { + var restClient = new PMRestClient({ + endpoint: 'email-event/' + activityId, + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var valFrom; + if (typeof response === "object") { + emailEventId = response.email_event_uid; + if (emailEventId !== "" && typeof emailEventId !== "undefined") { + formEmailEvent.getField('emailEventId').setValue(response.email_event_uid); + // Set as selected the email server by uid + if (response.email_server_uid !== "" && typeof response.email_server_uid !== "undefined") { + formEmailEvent.getField('emailAcounts').setValue(response.email_server_uid); + } + formEmailEvent.getField('subjectEmail').setValue(response.email_event_subject); + formEmailEvent.getField('ToEmail').setValue(response.email_event_to); + + formEmailEvent.getField('prf_uid').setValue(response.prf_uid); + + (new PMRestClient({ + endpoint: 'file-manager', + typeRequest: 'get', + messageError: '', + data: { + path: "templates" + }, + functionSuccess: function (xhr, response) { + for (var i = 0; i < response.length; i += 1) { + if (response[i].prf_uid == formEmailEvent.getField('prf_uid').getValue()) { + formEmailEvent.getField('filecontent').setValue(response[i].prf_content); + if (!$(tinyMCE.activeEditor.getContent()).text().trim().length) { + tinyMCE.activeEditor.setContent(response[i].prf_content); + } + break; + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + })).executeRestClient(); + } + } + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + } + }); + restClient.executeRestClient(); + }; + + getEmailAccounts(emailAcounts); + + /*end form*/ + + this.deleteEmailEventByEventUid = function () { + (new PMRestClient({ + endpoint: 'email-event/by-event/' + activityId, + typeRequest: 'remove', + messageError: '', + functionSuccess: function (xhr, response) { + }, + functionFailure: function (xhr, response) { + } + })).executeRestClient(); + return this; + }; + + domSettings = function () { + emailEventPropertiesWindow.footer.html.style.textAlign = 'right'; + $("#emailAcounts").find("select:eq(0)").css("height", "auto").attr({ + "onmousedown": "if(this.options.length>" + ddSize + "){this.size=" + ddSize + ";}", + "onchange": "this.size=0;", + "onblur": "this.size=0;" + }); + }; + emailEventPropertiesWindow.addItem(formEmailEvent); + emailEventPropertiesWindow.open(); + emailEventPropertiesWindow.showFooter(); + emailWindowTinyMCE(); + domSettings(); + getEmailEventData(); + oldValues = formEmailEvent.getData(); + }; +}()); + + +SaveAsForm = function (settings) { + Mafe.Form.call(this, settings); + SaveAsForm.prototype.init.call(this, settings); +}; +SaveAsForm.prototype = new Mafe.Form(); +SaveAsForm.prototype.init = function () { + var that = this; + that.onSave = new Function(); + that.onCancel = new Function(); + that.setID("SaveAsForm"); + that.setTitle("Save as".translate()); + that.setItems([{ + id: "prj_name", + name: "pro_title", + pmType: "text", + label: "Title".translate(), + placeholder: "Title".translate(), + maxLength: 100, + required: true + }, { + id: "prj_description", + pmType: "textarea", + name: "pro_description", + label: "Description".translate(), + placeholder: "Description".translate(), + rows: 200 + }, { + id: "pro_category", + name: "pro_category", + pmType: "dropdown", + label: "Category".translate(), + options: [ + {value: "", label: "No Category".translate()} + ] + } + ]); + that.setButtons([{ + id: "idCancel", + text: "Cancel".translate(), + buttonType: "error", + handler: function () { + that.onCancel(); + } + }, { + id: "idSave", + text: "Save".translate(), + buttonType: "success", + handler: function () { + that.onSave(); + } + } + ]); + that.loadCategory(); +}; +SaveAsForm.prototype.loadCategory = function () { + var that = this, + titleProcess; + var a = new PMRestClient({ + typeRequest: "post", + multipart: true, + data: { + calls: [{ + url: "project/categories", + method: "GET" + }, { + url: "project/" + PMDesigner.project.projectId + "/process", + method: "GET" + } + ] + }, + functionSuccess: function (xhr, response) { + var i, dt, category = that.getField("pro_category"); + dt = response[0].response; + for (i = 0; i < dt.length; i++) { + category.addOption({ + value: dt[i].cat_uid, + label: dt[i].cat_name + }); + } + //load data + dt = response[1].response; + titleProcess = "Copy of".translate() + " [" + dt.pro_title + "]"; + that.getField("pro_title").setValue(titleProcess.substring(0, 100)); + that.getField("pro_description").setValue(dt.pro_description); + that.getField("pro_category").setValue(dt.pro_category); + }, + functionFailure: function (xhr, response) { + } + }); + a.setBaseEndPoint(""); + a.executeRestClient(); +}; + +SaveAs = function (settings) { + Mafe.Window.call(this, settings); + SaveAs.prototype.init.call(this, settings); +}; +SaveAs.prototype = new Mafe.Window(); +SaveAs.prototype.init = function () { + var that = this; + that.saveAsForm = new SaveAsForm(); + that.saveAsForm.onYesConfirmCancellation = function () { + that.close(); + }; + that.saveAsForm.onCancel = function () { + that.saveAsForm.loseChanges({title: that.title}); + }; + that.saveAsForm.onSave = function () { + that.saveAsForm.getField("pro_title").setReadOnly(true); + that.saveAsForm.getField("pro_description").setReadOnly(true); + PMUI.getPMUIObject($(that.saveAsForm.html).find("#idSave")[0]).setDisabled(true); + var a = new PMRestClient({ + typeRequest: "post", + multipart: true, + data: { + calls: [{ + url: "project/save-as", + method: "POST", + data: { + prj_uid: PMDesigner.project.projectId, + prj_name: that.saveAsForm.getField("pro_title").getValue(), + prj_description: that.saveAsForm.getField("pro_description").getValue(), + prj_category: that.saveAsForm.getField("pro_category").getValue() + } + } + ] + }, + functionSuccess: function (xhr, response) { + if (response[0].response.prj_uid) { + that.close(); + window.location.href = "designer?prj_uid=" + response[0].response.prj_uid; + } else { + that.saveAsForm.getField("pro_title").setReadOnly(false); + that.saveAsForm.getField("pro_description").setReadOnly(false); + PMUI.getPMUIObject($(that.saveAsForm.html).find("#idSave")[0]).setDisabled(false); + var field = that.saveAsForm.getField("pro_title"); + $(field.html).find(".pmui-textlabel").text(response[0].response); + field.showMessage(); + } + }, + functionFailure: function (xhr, response) { + } + }); + a.setBaseEndPoint(""); + a.executeRestClient(); + }; + + that.setTitle("Save as".translate()); + that.addItem(that.saveAsForm); +}; +(function () { + PMDesigner.granularProcessExport = function () { + var totalObjects = 0, + objectValues, + buttonSave, + objectsGroup, + loadObjects, + domSettings, + granularProcessExportForm, + granularProcessExportWindow, + buttonCancel = new PMUI.ui.Button({ + id: 'cancelButton', + text: "Cancel".translate(), + buttonType: 'error', + handler: function (event) { + granularProcessExportWindow.close(); + } + }); + + buttonSave = new PMUI.ui.Button({ + id: 'saveButton', + text: "Export".translate(), + handler: function (event) { + var selectedObjects, + locationOrigin, + ws = enviromentVariables('WORKSPACE'), + formData = granularProcessExportForm.getData(); + selectedObjects = JSON.parse(formData.objectsGroup).map(function (n) { + return n; + }); + if (selectedObjects.length === 0) { + PMDesigner.msgFlash('At least one object should be selected in order to execute the action.'.translate(), document.body, 'error', 3000, 5); + return; + } + if (!window.location.origin) { + locationOrigin = window.location.protocol + "//" + window.location.hostname + + (window.location.port ? ':' + window.location.port : ''); + } else if (typeof HTTP_SERVER_HOSTNAME !== 'undefined') { + locationOrigin = HTTP_SERVER_HOSTNAME; + } else { + locationOrigin = window.location.origin; + } + location.href = locationOrigin + "/api/1.0/" + ws + "/project/" + PMDesigner.project.id + + "/export-granular?access_token=" + PMDesigner.project.keys.access_token + '&objects=' + + encodeURIComponent(JSON.stringify(selectedObjects)); + granularProcessExportWindow.close(); + }, + buttonType: 'success' + }); + + granularProcessExportWindow = new PMUI.ui.Window({ + id: "granularProcessExportWindow", + title: "Export Process Objects".translate(), + width: 350, + height: DEFAULT_WINDOW_HEIGHT, + footerItems: [ + buttonCancel, + buttonSave + ], + buttonPanelPosition: "bottom", + footerAling: "right", + onBeforeClose: function () { + granularProcessExportWindow.close(); + } + }); + + objectsGroup = new PMUI.field.CheckBoxGroupField({ + labelVisible: false, + id: 'objectsGroup', + controlPositioning: 'horizontal', + maxDirectionOptions: 1, + required: true, + options: [], + onChange: function (newVal, oldVal) { + if (totalObjects > JSON.parse(newVal).length) { + granularProcessExportForm.getField('checkAllId').setValue(0); + } + } + }); + + loadObjects = function () { + var objectsList, + restClient, + i; + restClient = new PMRestClient({ + endpoint: 'export/listObjects', + typeRequest: 'get', + functionSuccess: function (xhr, response) { + var arrayIds = [], + i; + objectsList = JSON.parse(response); + for (i in objectsList.data) { + objectsGroup.addOption({ + label: objectsList.data[i].OBJECT_NAME, + name: objectsList.data[i].OBJECT_NAME, + selected: false, + value: objectsList.data[i].OBJECT_ID + }); + arrayIds.push(objectsList.data[i].OBJECT_ID.toString()); + } + totalObjects = objectsList.data.length; + objectValues = objectsGroup.getValueFromControls(); + objectValues = JSON.parse(objectValues).length ? objectValues : JSON.stringify(arrayIds); + }, + functionFailure: function (xhr, response) { + PMDesigner.msgWinError(response.error.message); + PMDesigner.msgFlash('There are problems loading the process objects.'.translate(), document.body, 'error', 3000, 5); + } + }); + restClient.executeRestClient(); + }; + loadObjects(); + + granularProcessExportForm = new PMUI.form.Form({ + id: "granularProcessExportForm", + border: true, + visibleHeader: false, + width: '340px', + name: "granularProcessExportForm", + title: "", + items: [ + { + id: "panelDetailsCustom", + pmType: "panel", + layout: 'vbox', + fieldset: false, + height: '380px', + legend: "DETAILS".translate(), + items: [ + { + pmType: "checkbox", + id: "checkAllId", + labelVisible: false, + controlPositioning: 'vertical', + maxDirectionOptions: 2, + value: '', + options: [ + { + label: "Check All".translate(), + disabled: false, + value: '1', + selected: false + } + ], + onChange: function (newVal, oldVal) { + if (newVal[2] === "1") { + objectsGroup.setValueToControls(objectValues); + } else { + objectsGroup.setValueToControls(); + } + } + }, + objectsGroup + ] + } + ] + }); + + domSettings = function () { + $('#objectsGroup').find('label:eq(0)').remove(); + }; + + granularProcessExportWindow.addItem(granularProcessExportForm); + granularProcessExportWindow.open(); + granularProcessExportWindow.showFooter(); + domSettings(); + }; +}()); + + diff --git a/workflow/public_html/lib/mafe/mafe.min.css b/workflow/public_html/lib/mafe/mafe.min.css new file mode 100644 index 000000000..29883a711 --- /dev/null +++ b/workflow/public_html/lib/mafe/mafe.min.css @@ -0,0 +1,7627 @@ +/* + * Default Layout Theme + * + * Created for jquery.layout + * + * Copyright (c) 2010 + * Fabrizio Balliano (http://www.fabrizioballiano.net) + * Kevin Dalman (http://allpro.net) + * + * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) + * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. + * + * Last Updated: 2010-02-10 + * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars + */ + +/* + * DEFAULT FONT + * Just to make demo-pages look better - not actually relevant to Layout! + */ +/*body { + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 100%; + *font-size: 80%; +}*/ + +/* + * PANES & CONTENT-DIVs + */ +.ui-layout-pane { /* all 'panes' */ + background: #FFF; + border: 1px solid #BBB; + padding: 2px; + overflow: auto; + /* DO NOT add scrolling (or padding) to 'panes' that have a content-div, + otherwise you may get double-scrollbars - on the pane AND on the content-div + - use ui-layout-wrapper class if pane has a content-div + - use ui-layout-container if pane has an inner-layout + */ + } + /* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */ + .ui-layout-content { + padding: 10px; + position: relative; /* contain floated or positioned elements */ + overflow: auto; /* add scrolling to content-div */ + } + +/* + * UTILITY CLASSES + * Must come AFTER pane-class above so will override + * These classes are NOT auto-generated and are NOT used by Layout + */ +.layout-child-container, +.layout-content-container { + padding: 0; + overflow: hidden; +} +.layout-child-container { + border: 0; /* remove border because inner-layout-panes probably have borders */ +} +.layout-scroll { + overflow: auto; +} +.layout-hide { + display: none; +} + +/* + * RESIZER-BARS + */ +.ui-layout-resizer { /* all 'resizer-bars' */ + background: #DDD; + border: 1px solid #BBB; + border-width: 0; + } + .ui-layout-resizer-drag { /* REAL resizer while resize in progress */ + } + .ui-layout-resizer-hover { /* affects both open and closed states */ + } + /* NOTE: It looks best when 'hover' and 'dragging' are set to the same color, + otherwise color shifts while dragging when bar can't keep up with mouse */ + .ui-layout-resizer-open-hover , /* hover-color to 'resize' */ + .ui-layout-resizer-dragging { /* resizer beging 'dragging' */ + background: #C4E1A4; + } + .ui-layout-resizer-dragging { /* CLONED resizer being dragged */ + border: 1px solid #BBB; + } + .ui-layout-resizer-north-dragging, + .ui-layout-resizer-south-dragging { + border-width: 1px 0; + } + .ui-layout-resizer-west-dragging, + .ui-layout-resizer-east-dragging { + border-width: 0 1px; + } + /* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */ + .ui-layout-resizer-dragging-limit { /* CLONED resizer at min or max size-limit */ + background: #E1A4A4; /* red */ + } + + .ui-layout-resizer-closed-hover { /* hover-color to 'slide open' */ + background: #EBD5AA; + } + .ui-layout-resizer-sliding { /* resizer when pane is 'slid open' */ + opacity: .10; /* show only a slight shadow */ + filter: alpha(opacity=10); + } + .ui-layout-resizer-sliding-hover { /* sliding resizer - hover */ + opacity: 1.00; /* on-hover, show the resizer-bar normally */ + filter: alpha(opacity=100); + } + /* sliding resizer - add 'outside-border' to resizer on-hover + * this sample illustrates how to target specific panes and states */ + .ui-layout-resizer-north-sliding-hover { border-bottom-width: 1px; } + .ui-layout-resizer-south-sliding-hover { border-top-width: 1px; } + .ui-layout-resizer-west-sliding-hover { border-right-width: 1px; } + .ui-layout-resizer-east-sliding-hover { border-left-width: 1px; } + +/* + * TOGGLER-BUTTONS + */ +.ui-layout-toggler { + border: 1px solid #BBB; /* match pane-border */ + background-color: #BBB; + } + .ui-layout-resizer-hover .ui-layout-toggler { + opacity: .60; + filter: alpha(opacity=60); + } + .ui-layout-toggler-hover , /* need when NOT resizable */ + .ui-layout-resizer-hover .ui-layout-toggler-hover { /* need specificity when IS resizable */ + background-color: #FC6; + opacity: 1.00; + filter: alpha(opacity=100); + } + .ui-layout-toggler-north , + .ui-layout-toggler-south { + border-width: 0 1px; /* left/right borders */ + } + .ui-layout-toggler-west , + .ui-layout-toggler-east { + border-width: 1px 0; /* top/bottom borders */ + } + /* hide the toggler-button when the pane is 'slid open' */ + .ui-layout-resizer-sliding .ui-layout-toggler { + display: none; + } + /* + * style the text we put INSIDE the togglers + */ + .ui-layout-toggler .content { + color: #666; + font-size: 12px; + font-weight: bold; + width: 100%; + padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */ + } + +/* + * PANE-MASKS + * these styles are hard-coded on mask elems, but are also + * included here as !important to ensure will overrides any generic styles + */ +.ui-layout-mask { + border: none !important; + padding: 0 !important; + margin: 0 !important; + overflow: hidden !important; + position: absolute !important; + opacity: 0 !important; + filter: Alpha(Opacity="0") !important; +} +.ui-layout-mask-inside-pane { /* masks always inside pane EXCEPT when pane is an iframe */ + top: 0 !important; + left: 0 !important; + width: 100% !important; + height: 100% !important; +} +div.ui-layout-mask {} /* standard mask for iframes */ +iframe.ui-layout-mask {} /* extra mask for objects/applets */ + +/* + * Default printing styles + */ +@media print { + /* + * Unless you want to print the layout as it appears onscreen, + * these html/body styles are needed to allow the content to 'flow' + */ + html { + height: auto !important; + overflow: visible !important; + } + body.ui-layout-container { + position: static !important; + top: auto !important; + bottom: auto !important; + left: auto !important; + right: auto !important; + /* only IE6 has container width & height set by Layout */ + _width: auto !important; + _height: auto !important; + } + .ui-layout-resizer, .ui-layout-toggler { + display: none !important; + } + /* + * Default pane print styles disables positioning, borders and backgrounds. + * You can modify these styles however it suit your needs. + */ + .ui-layout-pane { + border: none !important; + background: transparent !important; + position: relative !important; + top: auto !important; + bottom: auto !important; + left: auto !important; + right: auto !important; + width: auto !important; + height: auto !important; + overflow: visible !important; + } +} +/*! jQuery UI - v1.10.3 - 2013-09-02 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif&fwDefault=bold&fsDefault=11px&cornerRadius=5px&bgColorHeader=%235c9ccc&bgTextureHeader=gloss_wave&bgImgOpacityHeader=55&borderColorHeader=%234297d7&fcHeader=%23ffffff&iconColorHeader=%23d8e7f3&bgColorContent=%23fcfdfd&bgTextureContent=inset_hard&bgImgOpacityContent=100&borderColorContent=%23a6c9e2&fcContent=%23222222&iconColorContent=%23469bdd&bgColorDefault=%23dfeffc&bgTextureDefault=glass&bgImgOpacityDefault=85&borderColorDefault=%23c5dbec&fcDefault=%232e6e9e&iconColorDefault=%236da8d5&bgColorHover=%23d0e5f5&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=%2379b7e7&fcHover=%231d5987&iconColorHover=%23217bc0&bgColorActive=%23f5f8f9&bgTextureActive=inset_hard&bgImgOpacityActive=100&borderColorActive=%2379b7e7&fcActive=%23e17009&iconColorActive=%23f9bd01&bgColorHighlight=%23fbec88&bgTextureHighlight=flat&bgImgOpacityHighlight=55&borderColorHighlight=%23fad42e&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=%23cd0a0a&fcError=%23cd0a0a&iconColorError=%23cd0a0a&bgColorOverlay=%23aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin-top: 2px; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-noicons { + padding-left: .7em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month-year { + width: 100%; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 49%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-menu { + list-style: none; + padding: 2px; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + margin-top: -3px; + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + padding: 0; + width: 100%; + /* support: IE10, see #8844 */ + list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); +} +.ui-menu .ui-menu-divider { + margin: 5px -2px 5px -2px; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-menu-item a { + text-decoration: none; + display: block; + padding: 2px .4em; + line-height: 1.5; + min-height: 0; /* support: IE7 */ + font-weight: normal; +} +.ui-menu .ui-menu-item a.ui-state-focus, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-menu .ui-state-disabled { + font-weight: normal; + margin: .4em 0 .2em; + line-height: 1.5; +} +.ui-menu .ui-state-disabled a { + cursor: default; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item a { + position: relative; + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: .2em; + left: .2em; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + position: static; + float: right; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("images/animated-overlay.gif"); + height: 100%; + filter: alpha(opacity=25); + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to overide default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertical centre icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav li a { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active a, +.ui-tabs .ui-tabs-nav li.ui-state-disabled a, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading a { + cursor: text; +} +.ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 11px; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border-right: 1px solid #a6c9e2; + border-left: 1px solid #a6c9e2; + border-bottom: 1px solid #a6c9e2; + background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #4297d7; + background: #5c9ccc url(images/ui-bg_gloss-wave_55_5c9ccc_500x100.png) 50% 50% repeat-x; + color: #ffffff; + font-weight: bold; + /*color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);*/ +} +.ui-widget-header a { + color: #ffffff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #c5dbec; + background: #dfeffc url(images/ui-bg_glass_85_dfeffc_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #2e6e9e; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #2e6e9e; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #79b7e7; + background: #d0e5f5 url(images/ui-bg_glass_75_d0e5f5_1x400.png) 50% 50% repeat-x; + font-weight: bold; + color: #1d5987; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #1d5987; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #79b7e7; + background: #f5f8f9 url(images/ui-bg_inset-hard_100_f5f8f9_1x100.png) 50% 50% repeat-x; + font-weight: bold; + color: #e17009; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #e17009; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fad42e; + background: #fbec88 url(images/ui-bg_flat_55_fbec88_40x100.png) 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_469bdd_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_d8e7f3_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_6da8d5_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_217bc0_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_f9bd01_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 5px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} +.introjs-overlay { + position: absolute; + z-index: 999999; + background-color: #000; + opacity: 0; + background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9))); + background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-fixParent { + z-index: auto !important; + opacity: 1.0 !important; + position: absolute !important; + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + -o-transform: none !important; + transform: none !important; +} + +.introjs-showElement, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + z-index: 9999999 !important; +} + +.introjs-disableInteraction { + z-index: 99999999 !important; + position: absolute; +} + +.introjs-relativePosition, +tr.introjs-showElement > td, +tr.introjs-showElement > th { + position: relative; +} + +.introjs-helperLayer { + position: fixed; + z-index: 9999998; + background-color: #FFF; + background-color: rgba(255,255,255,.9); + border: 1px solid #777; + border: 1px solid rgba(0,0,0,.5); + border-radius: 4px; + box-shadow: 0 2px 15px rgba(0,0,0,.4); + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-tooltipReferenceLayer { + position: fixed; + z-index: 10000000; + background-color: transparent; + -webkit-transition: all 0.3s ease-out; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -o-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} + +.introjs-helperLayer *, +.introjs-helperLayer *:before, +.introjs-helperLayer *:after { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + -ms-box-sizing: content-box; + -o-box-sizing: content-box; + box-sizing: content-box; +} + +.introjs-helperNumberLayer { + position: absolute; + top: 5px; + /*left: -16px;*/ + left: 50%; + z-index: 9999999999 !important; + padding: 2px; + font-family: Arial, verdana, tahoma; + font-size: 13px; + font-weight: bold; + color: white; + text-align: center; + text-shadow: 1px 1px 1px rgba(0,0,0,.3); + background: #ff3019; /* Old browsers */ + background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Chrome10+,Safari5.1+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404)); /* Chrome,Safari4+ */ + background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* FF3.6+ */ + background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* IE10+ */ + background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Opera 11.10+ */ + background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%); /* W3C */ + width: 20px; + height:20px; + line-height: 20px; + border: 3px solid white; + border-radius: 50%; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0); /* IE6-9 */ + filter: progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000); /* IE10 text shadows */ + box-shadow: 0 2px 5px rgba(0,0,0,.4); +} + +.introjs-arrow { + border: 5px solid white; + content:''; + position: absolute; +} +.introjs-arrow.top { + top: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-right { + top: -10px; + right: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.top-middle { + top: -10px; + left: 50%; + margin-left: -5px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:white; + border-left-color:transparent; +} +.introjs-arrow.right { + right: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.right-bottom { + bottom:10px; + right: -10px; + border-top-color:transparent; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:white; +} +.introjs-arrow.bottom { + bottom: -10px; + border-top-color:white; + border-right-color:transparent; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left { + left: -10px; + top: 10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} +.introjs-arrow.left-bottom { + left: -10px; + bottom:10px; + border-top-color:transparent; + border-right-color:white; + border-bottom-color:transparent; + border-left-color:transparent; +} + +.introjs-tooltip { + position: absolute; + padding: 10px; + background-color: white; + min-width: 200px; + max-width: 600px; + border-radius: 3px; + box-shadow: 0 1px 10px rgba(0,0,0,.4); + -webkit-transition: opacity 0.1s ease-out; + -moz-transition: opacity 0.1s ease-out; + -ms-transition: opacity 0.1s ease-out; + -o-transition: opacity 0.1s ease-out; + transition: opacity 0.1s ease-out; +} + +.introjs-tooltipbuttons { + text-align: right; + white-space: nowrap; +} + +/* + Buttons style by http://nicolasgallagher.com/lab/css3-github-buttons/ + Changed by Afshin Mehrabani +*/ +.introjs-button { + position: relative; + overflow: visible; + display: inline-block; + padding: 0.3em 0.8em; + border: 1px solid #d4d4d4; + margin: 0; + text-decoration: none; + text-shadow: 1px 1px 0 #fff; + font: 11px/normal sans-serif; + color: #333; + white-space: nowrap; + cursor: pointer; + outline: none; + background-color: #ececec; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec)); + background-image: -moz-linear-gradient(#f4f4f4, #ececec); + background-image: -o-linear-gradient(#f4f4f4, #ececec); + background-image: linear-gradient(#f4f4f4, #ececec); + -webkit-background-clip: padding; + -moz-background-clip: padding; + -o-background-clip: padding-box; + /*background-clip: padding-box;*/ /* commented out due to Opera 11.10 bug */ + -webkit-border-radius: 0.2em; + -moz-border-radius: 0.2em; + border-radius: 0.2em; + /* IE hacks */ + zoom: 1; + *display: inline; + margin-top: 10px; +} + +.introjs-button:hover { + border-color: #bcbcbc; + text-decoration: none; + box-shadow: 0px 1px 1px #e3e3e3; +} + +.introjs-button:focus, +.introjs-button:active { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ececec), to(#f4f4f4)); + background-image: -moz-linear-gradient(#ececec, #f4f4f4); + background-image: -o-linear-gradient(#ececec, #f4f4f4); + background-image: linear-gradient(#ececec, #f4f4f4); +} + +/* overrides extra padding on button elements in Firefox */ +.introjs-button::-moz-focus-inner { + padding: 0; + border: 0; +} + +.introjs-skipbutton { + margin-right: 5px; + color: #7a7a7a; +} + +.introjs-prevbutton { + -webkit-border-radius: 0.2em 0 0 0.2em; + -moz-border-radius: 0.2em 0 0 0.2em; + border-radius: 0.2em 0 0 0.2em; + border-right: none; +} + +.introjs-nextbutton { + -webkit-border-radius: 0 0.2em 0.2em 0; + -moz-border-radius: 0 0.2em 0.2em 0; + border-radius: 0 0.2em 0.2em 0; +} + +.introjs-disabled, .introjs-disabled:hover, .introjs-disabled:focus { + color: #9a9a9a; + border-color: #d4d4d4; + box-shadow: none; + cursor: default; + background-color: #f4f4f4; + background-image: none; + text-decoration: none; +} + +.introjs-bullets { + text-align: center; +} +.introjs-bullets ul { + clear: both; + margin: 15px auto 0; + padding: 0; + display: inline-block; +} +.introjs-bullets ul li { + list-style: none; + float: left; + margin: 0 2px; +} +.introjs-bullets ul li a { + display: block; + width: 6px; + height: 6px; + background: #ccc; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + text-decoration: none; +} +.introjs-bullets ul li a:hover { + background: #999; +} +.introjs-bullets ul li a.active { + background: #999; +} + +.introjs-progress { + overflow: hidden; + height: 10px; + margin: 10px 0 5px 0; + border-radius: 4px; + background-color: #ecf0f1 +} +.introjs-progressbar { + float: left; + width: 0%; + height: 100%; + font-size: 10px; + line-height: 10px; + text-align: center; + background-color: #08c; +} + +.introjsFloatingElement { + position: absolute; + height: 0; + width: 0; + left: 50%; + top: 50%; +} + +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../img/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../img/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../img/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../img/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../img/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} + +.pmui-pmlabelfield .pmui-textlabel { + background: #aaaaaa; +} + +/* +.pmui-gridpanel { + padding: 10px 20px; +}*/ +.pmui-gridpanel-pager .list-item-ajax a { + position: relative; + float: left; + padding: 6px 12px; + line-height: 1.42857143; + text-decoration: none; + color: #428bca; + background-color: #fff; + border: 1px solid #ddd; + margin: 0 0 0 -1px; + min-width: inherit; + font-size: 14px; + border-radius: 2px; +} + +.pmui-gridpanel-pager .list-item-ajax { + margin: 0px; +} + +.pmui-gridpanel-gotoPage { + padding: 6px 14px 6px 14px; + margin: 0px; + background-color: #f7f7f7; + text-align: left; + color: #555; + border-radius: 2px; +} + +.pmui-gridpanel-pager .list-item-ajax a:hover { + color: #2a6496; + background-color: #eee; + border-color: #ddd; +} + +/*@import "base"; + +.pmui-pmform { + margin-left: 20px; + margin-right: 20px; +} + + +.pmui-background { + background-color: $PMUI-FORM-BACKGROUND; +} + +.pmui-window-footer { + padding-left: 20px; + padding-right: 20px; +} + +.pmui-window-footer > button-solid { + margin-left: 5px; + margin-right: 5px; + margin-bottom: 5px; + +} + +div.pmui-window-footer > a.button-solid { + margin-left: 7px; + margin-top: 5px; + margin-bottom: 5px; + background: $MAFE-FORM-BUTTONS-BACKGROUND; + padding: 6px 15px; +} + +div.pmui-form-footer > a.button-solid { + margin-left: 7px; + margin-top: 5px; + margin-bottom: 5px; + background: $MAFE-FORM-BUTTONS-BACKGROUND; + padding: 6px 15px; +} + +.pmui-buttonpanel { + padding-right: 10px; + padding-left: 10px; + text-align: right; +}*/ + +body { + font-family: 'SourceSansProRegular', Arial, Tahoma, Verdana; + background: #fff; + margin: 0; + padding: 0; +} + +/*IE9*/ +/**::selection*/ +/*.content_control::selection +{ + background-color:transparent; +} +.content_control::-moz-selection +{ + background-color:transparent; +}*/ +* { + /*You just need this if you are only concerned with android and not desktop browsers.*/ + -webkit-tap-highlight-color: transparent; +} + +/* BPMN */ +#p-center-layout { + -webkit-user-select: none; + -moz-user-select: -moz-none; + user-select: none; +} + +/** +* Canvas +*/ +.pmui-pmcanvas { + background-image: url(../img/bg_designer.gif); +} + +/** +* ToolbarPanel +*/ +.mafe-toolbarpanel-btn { + text-decoration: none; + list-style: none; + text-align: center; +} + +.mafe-toolbarpanel-btn-span { + font-size: 10px; +} + +.mafe-toolbarpanel-btn-img { + width: 30px; + height: 30px; +} + +.mafe-toolbarpanel-tooltip { + font-size: 10px; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + -moz-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; + background-color: #6D87B7; + color: white; +} + +.mafe-email { + background: url(../img/email.png) no-repeat; +} + +/* +* For buttons that are on the north from the Layout +*/ +.ui-layout-north a { + margin-left: 2px; +} + +/** + * Shapes + */ +.mafe-shape-sprite { + background: url("../img/mafe_sprite.png") no-repeat; +} + +[class^="mafe-activity-task-"], +[class*=" mafe-activity-task-"], +[class^="mafe-event-"], +[class*=" mafe-event-"], +[class^="mafe-gateway-"], +[class*=" mafe-gateway-"], +[class^="PM-decorator_"], +[class*=" PM-decorator_"], +[class^="mafe-usertask-marker-"], +[class*=" mafe-usertask-marker-"], +[class^="mafe-sendtask-marker-"], +[class*=" mafe-sendtask-marker-"], +[class^="mafe-receivetask-marker-"], +[class*=" mafe-receivetask-marker-"], +[class^="mafe-usertask-marker-"], +[class*=" mafe-usertask-marker-"], +[class^="mafe-servicetask-marker-"], +[class*=" mafe-servicetask-marker-"], +[class^="mafe-scripttask-marker-"], +[class*=" mafe-scripttask-marker-"], +[class^="mafe-manualtask-marker-"], +[class*=" mafe-manualtask-marker-"], +[class^="mafe-businessrule-marker-"], +[class*=" mafe-businessrule-marker-"], +[class^="mafe-collapsed-marker-"], +[class*="mafe-parallel-marker-"], +[class*="mafe-sequential-marker-"], +[class*="mafe-loop-marker-"], +[class*="mafe-style-error-marker-"], +[class^="mafe-data"], +[class*=" mafe-data"], +[class^="mafe-message"], +[class*=" mafe-message"], +[class^="mafe-sequence"], +[class*=" mafe-sequence"], +[class^="mafe-association"], +[class*=" mafe-association"], +[class^="mafe-default"], +[class*=" mafe-default"] { + background-image: url("../img/mafe_sprite.png"); + background-repeat: no-repeat; + background-position: -565px -510px; +} + +.mafe-activity-task-red { + background-color: #BD0A17; + border: 1px solid #72020C; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-green { + background-color: #1B7909; + border: 1px solid #0F5502; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-orange { + background-color: #C57701; + border: 1px solid #965B02; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-activity-task-silver { + background-color: #AAA8A6; + border: 1px solid #6F6D6C; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); +} + +.mafe-artifact-group { + border: 1px dashed #995E06; +} + +.mafe-artifact-annotation { + /*background-color: #fbf1ce;*/ + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; +} + +.mafe-artifact-annotation-close { + float: right; + background: url("../img/delete.png") no-repeat center; + width: 10px; + height: 10px; + cursor: pointer; +} + +.mafe-layer-line-vertical { + visibility: visible; + background-color: transparent; + border-left-width: 1px; + border-left-style: solid; + border-left-color: red; + border-top-width: 0px; + border-top-style: solid; + border-top-color: red; + overflow: hidden; +} + +.mafe-layer-line-horizontal { + background-color: transparent; + border-left-width: 0px; + border-left-style: solid; + border-left-color: red; + border-top-width: 1px; + border-top-style: solid; + border-top-color: red; + overflow: hidden; +} + +.mafe-participant { + background-color: white; + border: 2px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 6px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; +} + +.mafe-pool { + border: 2px solid #3b4753; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 6px; + /*-webkit-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 0 0 4px rgba(0, 0, 0, 0.5); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.5);*/ + box-sizing: border-box; + background-color: white; +} + +/*mafe sprite*/ +.mafe-association_100_target_bottom { + background-position: 0 -9162px; +} + +.mafe-association_100_target_left { + background-position: 0 -9184px; +} + +.mafe-association_100_target_right { + background-position: 0 -9251px; +} + +.mafe-association_100_target_top { + background-position: 0 -9173px; +} + +.mafe-association_125_target_bottom { + background-position: 0 -9048px; +} + +.mafe-association_125_target_left { + background-position: 0 -9136px; +} + +.mafe-association_125_target_right { + background-position: 0 -9149px; +} + +.mafe-association_125_target_top { + background-position: 0 -9093px; +} + +.mafe-association_150_target_bottom { + background-position: 0 -8993px; +} + +.mafe-association_150_target_left { + background-position: 0 -11416px; +} + +.mafe-association_150_target_right { + background-position: 0 -9106px; +} + +.mafe-association_150_target_top { + background-position: 0 -9018px; +} + +.mafe-association_50_target_bottom { + background-position: 0 -9791px; +} + +.mafe-association_50_target_left { + background-position: 0 -9797px; +} + +.mafe-association_50_target_right { + background-position: 0 -9893px; +} + +.mafe-association_50_target_top { + background-position: 0 -9824px; +} + +.mafe-association_75_target_bottom { + background-position: 0 -9506px; +} + +.mafe-association_75_target_left { + background-position: 0 -9525px; +} + +.mafe-association_75_target_right { + background-position: 0 -9569px; +} + +.mafe-association_75_target_top { + background-position: 0 -9533px; +} + +.mafe-businessrule-marker-10 { + background-position: 0 -11431px; +} + +.mafe-businessrule-marker-15 { + background-position: 0 -11360px; +} + +.mafe-businessrule-marker-21 { + background-position: 0 -11225px; +} + +.mafe-businessrule-marker-26 { + background-position: 0 -11334px; +} + +.mafe-businessrule-marker-31 { + background-position: 0 -11441px; +} + +.mafe-collapsed-marker-10 { + background-position: 0 -9008px; +} + +.mafe-collapsed-marker-15 { + background-position: 0 -8518px; +} + +.mafe-collapsed-marker-21 { + background-position: 0 -8357px; +} + +.mafe-collapsed-marker-26 { + background-position: 0 -8378px; +} + +.mafe-collapsed-marker-31 { + background-position: 0 -8947px; +} + +.mafe-datainput-marker-10 { + background-position: 0 -9322px; +} + +.mafe-datainput-marker-15 { + background-position: 0 -8978px; +} + +.mafe-datainput-marker-21 { + background-position: 0 -8616px; +} + +.mafe-datainput-marker-26 { + background-position: 0 -8548px; +} + +.mafe-datainput-marker-31 { + background-position: 0 -11179px; +} + +.mafe-dataobject-100 { + background-position: 0 -8010px; +} + +.mafe-dataobject-125 { + background-position: 0 -7886px; +} + +.mafe-dataobject-150 { + background-position: 0 -11000px; +} + +.mafe-dataobject-50 { + background-position: 0 -8650px; +} + +.mafe-dataobject-75 { + background-position: 0 -8242px; +} + +.mafe-dataoutput-marker-10 { + background-position: 0 -9433px; +} + +.mafe-dataoutput-marker-15 { + background-position: 0 -9033px; +} + +.mafe-dataoutput-marker-21 { + background-position: 0 -8906px; +} + +.mafe-dataoutput-marker-26 { + background-position: 0 -8870px; +} + +.mafe-dataoutput-marker-31 { + background-position: 0 -11385px; +} + +.mafe-datastore-20 { + background-position: 0 -7643px; +} + +.mafe-datastore-30 { + background-position: 0 -5709px; +} + +.mafe-datastore-41 { + background-position: 0 -3780px; +} + +.mafe-datastore-51 { + background-position: 0 -1972px; +} + +.mafe-datastore-61 { + background-position: 0 -4076px; +} + +.mafe-default_100_source_bottom { + background-position: 0 -9577px; +} + +.mafe-default_100_source_left { + background-position: 0 -9605px; +} + +.mafe-default_100_source_right { + background-position: 0 -9588px; +} + +.mafe-default_100_source_top { + background-position: 0 -9558px; +} + +.mafe-default_125_source_bottom { + background-position: 0 -9443px; +} + +.mafe-default_125_source_left { + background-position: 0 -9480px; +} + +.mafe-default_125_source_right { + background-position: 0 -9493px; +} + +.mafe-default_125_source_top { + background-position: 0 -9456px; +} + +.mafe-default_150_source_bottom { + background-position: 0 -9262px; +} + +.mafe-default_150_source_left { + background-position: 0 -9061px; +} + +.mafe-default_150_source_right { + background-position: 0 -9077px; +} + +.mafe-default_150_source_top { + background-position: 0 -9347px; +} + +.mafe-default_50_source_bottom { + background-position: 0 -9984px; +} + +.mafe-default_50_source_left { + background-position: 0 -9974px; +} + +.mafe-default_50_source_right { + background-position: 0 -9963px; +} + +.mafe-default_50_source_top { + background-position: 0 -9979px; +} + +.mafe-default_75_source_bottom { + background-position: 0 -9877px; +} + +.mafe-default_75_source_left { + background-position: 0 -9922px; +} + +.mafe-default_75_source_right { + background-position: 0 -9899px; +} + +.mafe-default_75_source_top { + background-position: 0 -9885px; +} + +.mafe-event-boundary-compensationthrow-16 { + background-position: 0 -7394px; +} + +.mafe-event-boundary-compensationthrow-24 { + background-position: 0 -5883px; +} + +.mafe-event-boundary-compensationthrow-33 { + background-position: 0 -3335px; +} + +.mafe-event-boundary-compensationthrow-41 { + background-position: 0 -1080px; +} + +.mafe-event-boundary-compensationthrow-49 { + background-position: 0 -198px; +} + +.mafe-event-boundary-conditional-16 { + background-position: 0 -8083px; +} + +.mafe-event-boundary-conditional-24 { + background-position: 0 -6889px; +} + +.mafe-event-boundary-conditional-33 { + background-position: 0 -5277px; +} + +.mafe-event-boundary-conditional-41 { + background-position: 0 -4137px; +} + +.mafe-event-boundary-conditional-49 { + background-position: 0 -3401px; +} + +.mafe-event-boundary-empty-16 { + background-position: 0 -7963px; +} + +.mafe-event-boundary-empty-24 { + background-position: 0 -6680px; +} + +.mafe-event-boundary-empty-33 { + background-position: 0 -4610px; +} + +.mafe-event-boundary-empty-41 { + background-position: 0 -2426px; +} + +.mafe-event-boundary-empty-49 { + background-position: 0 -1031px; +} + +.mafe-event-boundary-errorcatch-1 { + background-position: 0 -11375px; +} + +.mafe-event-boundary-errorcatch-16 { + background-position: 0 -10867px; +} + +.mafe-event-boundary-errorcatch-2 { + background-position: 0 -11061px; +} + +.mafe-event-boundary-errorcatch-24 { + background-position: 0 -10426px; +} + +.mafe-event-boundary-errorcatch-3 { + background-position: 0 -10664px; +} + +.mafe-event-boundary-errorcatch-33 { + background-position: 0 -9203px; +} + +.mafe-event-boundary-errorcatch-4 { + background-position: 0 -10328px; +} + +.mafe-event-boundary-errorcatch-41 { + background-position: 0 -7458px; +} + +.mafe-event-boundary-errorcatch-49 { + background-position: 0 -5931px; +} + +.mafe-event-boundary-errorcatch-5 { + background-position: 0 -10798px; +} + +.mafe-event-boundary-linkcatch-16 { + background-position: 0 -7555px; +} + +.mafe-event-boundary-linkcatch-24 { + background-position: 0 -5980px; +} + +.mafe-event-boundary-linkcatch-33 { + background-position: 0 -3673px; +} + +.mafe-event-boundary-linkcatch-41 { + background-position: 0 -1387px; +} + +.mafe-event-boundary-linkcatch-49 { + background-position: 0 -357px; +} + +.mafe-event-boundary-linkthrow-16 { + background-position: 0 -7499px; +} + +.mafe-event-boundary-linkthrow-24 { + background-position: 0 -6028px; +} + +.mafe-event-boundary-linkthrow-33 { + background-position: 0 -3887px; +} + +.mafe-event-boundary-linkthrow-41 { + background-position: 0 -1651px; +} + +.mafe-event-boundary-linkthrow-49 { + background-position: 0 -702px; +} + +.mafe-event-boundary-messagecatch-16 { + background-position: 0 -7742px; +} + +.mafe-event-boundary-messagecatch-24 { + background-position: 0 -6165px; +} + +.mafe-event-boundary-messagecatch-33 { + background-position: 0 -3994px; +} + +.mafe-event-boundary-messagecatch-41 { + background-position: 0 -2072px; +} + +.mafe-event-boundary-messagecatch-49 { + background-position: 0 -849px; +} + +.mafe-event-boundary-messagecatch-enabled-16 { + background-position: 0 -11246px; +} + +.mafe-event-boundary-messagecatch-enabled-24 { + background-position: 0 -10819px; +} + +.mafe-event-boundary-messagecatch-enabled-33 { + background-position: 0 -10565px; +} + +.mafe-event-boundary-messagecatch-enabled-41 { + background-position: 0 -10235px; +} + +.mafe-event-boundary-messagecatch-enabled-49 { + background-position: 0 -9616px; +} + +.mafe-event-boundary-messagethrow-16 { + background-position: 0 -11318px; +} + +.mafe-event-boundary-messagethrow-24 { + background-position: 0 -10940px; +} + +.mafe-event-boundary-messagethrow-33 { + background-position: 0 -10631px; +} + +.mafe-event-boundary-messagethrow-41 { + background-position: 0 -10359px; +} + +.mafe-event-boundary-messagethrow-49 { + background-position: 0 -10145px; +} + +.mafe-event-boundary-multiplecatch-16 { + background-position: 0 -7426px; +} + +.mafe-event-boundary-multiplecatch-24 { + background-position: 0 -5835px; +} + +.mafe-event-boundary-multiplecatch-33 { + background-position: 0 -3014px; +} + +.mafe-event-boundary-multiplecatch-41 { + background-position: 0 -949px; +} + +.mafe-event-boundary-multiplecatch-49 { + background-position: 0 0; +} + +.mafe-event-boundary-multiplethrow-16 { + background-position: 0 -7258px; +} + +.mafe-event-boundary-multiplethrow-24 { + background-position: 0 -5739px; +} + +.mafe-event-boundary-multiplethrow-33 { + background-position: 0 -3269px; +} + +.mafe-event-boundary-multiplethrow-41 { + background-position: 0 -1305px; +} + +.mafe-event-boundary-multiplethrow-49 { + background-position: 0 -604px; +} + +.mafe-event-boundary-parallelcatch-16 { + background-position: 0 -7338px; +} + +.mafe-event-boundary-parallelcatch-24 { + background-position: 0 -5787px; +} + +.mafe-event-boundary-parallelcatch-33 { + background-position: 0 -3047px; +} + +.mafe-event-boundary-parallelcatch-41 { + background-position: 0 -1223px; +} + +.mafe-event-boundary-parallelcatch-49 { + background-position: 0 -455px; +} + +.mafe-event-boundary-signalcatch-16 { + background-position: 0 -7587px; +} + +.mafe-event-boundary-signalcatch-24 { + background-position: 0 -6100px; +} + +.mafe-event-boundary-signalcatch-33 { + background-position: 0 -3821px; +} + +.mafe-event-boundary-signalcatch-41 { + background-position: 0 -1428px; +} + +.mafe-event-boundary-signalcatch-49 { + background-position: 0 -98px; +} + +.mafe-event-boundary-signalthrow-16 { + background-position: 0 -7603px; +} + +.mafe-event-boundary-signalthrow-24 { + background-position: 0 -6076px; +} + +.mafe-event-boundary-signalthrow-33 { + background-position: 0 -3854px; +} + +.mafe-event-boundary-signalthrow-41 { + background-position: 0 -1559px; +} + +.mafe-event-boundary-signalthrow-49 { + background-position: 0 -800px; +} + +.mafe-event-boundary-timer-16 { + background-position: 0 -7854px; +} + +.mafe-event-boundary-timer-24 { + background-position: 0 -6369px; +} + +.mafe-event-boundary-timer-33 { + background-position: 0 -4372px; +} + +.mafe-event-boundary-timer-41 { + background-position: 0 -2344px; +} + +.mafe-event-boundary-timer-49 { + background-position: 0 -1733px; +} + +.mafe-event-end-cancelthrow-16 { + background-position: 0 -7726px; +} + +.mafe-event-end-cancelthrow-24 { + background-position: 0 -6503px; +} + +.mafe-event-end-cancelthrow-33 { + background-position: 0 -4528px; +} + +.mafe-event-end-cancelthrow-41 { + background-position: 0 -2508px; +} + +.mafe-event-end-cancelthrow-49 { + background-position: 0 -1872px; +} + +.mafe-event-end-compensationthrow-16 { + background-position: 0 -7758px; +} + +.mafe-event-end-compensationthrow-24 { + background-position: 0 -6575px; +} + +.mafe-event-end-compensationthrow-33 { + background-position: 0 -4899px; +} + +.mafe-event-end-compensationthrow-41 { + background-position: 0 -3146px; +} + +.mafe-event-end-compensationthrow-49 { + background-position: 0 -2254px; +} + +.mafe-event-end-email-16 { + background-position: 0 -8288px; +} + +.mafe-event-end-email-24 { + background-position: 0 -7290px; +} + +.mafe-event-end-email-33 { + background-position: 0 -6823px; +} + +.mafe-event-end-email-41 { + background-position: 0 -6230px; +} + +.mafe-event-end-email-49 { + background-position: 0 -5458px; +} + +.mafe-event-end-empty-16 { + background-position: 0 -8481px; +} + +.mafe-event-end-empty-24 { + background-position: 0 -7515px; +} + +.mafe-event-end-empty-33 { + background-position: 0 -6704px; +} + +.mafe-event-end-empty-41 { + background-position: 0 -5589px; +} + +.mafe-event-end-empty-49 { + background-position: 0 -4479px; +} + +.mafe-event-end-errorthrow-16 { + background-position: 0 -8168px; +} + +.mafe-event-end-errorthrow-24 { + background-position: 0 -7186px; +} + +.mafe-event-end-errorthrow-33 { + background-position: 0 -6312px; +} + +.mafe-event-end-errorthrow-41 { + background-position: 0 -5195px; +} + +.mafe-event-end-errorthrow-49 { + background-position: 0 -4561px; +} + +.mafe-event-end-messagethrow-16 { + background-position: 0 -8304px; +} + +.mafe-event-end-messagethrow-24 { + background-position: 0 -7314px; +} + +.mafe-event-end-messagethrow-33 { + background-position: 0 -6856px; +} + +.mafe-event-end-messagethrow-41 { + background-position: 0 -6271px; +} + +.mafe-event-end-messagethrow-49 { + background-position: 0 -5507px; +} + +.mafe-event-end-multiplethrow-16 { + background-position: 0 -7710px; +} + +.mafe-event-end-multiplethrow-24 { + background-position: 0 -6551px; +} + +.mafe-event-end-multiplethrow-33 { + background-position: 0 -4866px; +} + +.mafe-event-end-multiplethrow-41 { + background-position: 0 -3550px; +} + +.mafe-event-end-multiplethrow-49 { + background-position: 0 -2639px; +} + +.mafe-event-end-signalthrow-16 { + background-position: 0 -8272px; +} + +.mafe-event-end-signalthrow-24 { + background-position: 0 -7370px; +} + +.mafe-event-end-signalthrow-33 { + background-position: 0 -6985px; +} + +.mafe-event-end-signalthrow-41 { + background-position: 0 -6441px; +} + +.mafe-event-end-signalthrow-49 { + background-position: 0 -5660px; +} + +.mafe-event-end-terminatethrow-16 { + background-position: 0 -8404px; +} + +.mafe-event-end-terminatethrow-24 { + background-position: 0 -7234px; +} + +.mafe-event-end-terminatethrow-33 { + background-position: 0 -6737px; +} + +.mafe-event-end-terminatethrow-41 { + background-position: 0 -6189px; +} + +.mafe-event-end-terminatethrow-49 { + background-position: 0 -5343px; +} + +.mafe-event-intermediate-compensationthrow-16 { + background-position: 0 -7410px; +} + +.mafe-event-intermediate-compensationthrow-24 { + background-position: 0 -5907px; +} + +.mafe-event-intermediate-compensationthrow-33 { + background-position: 0 -3368px; +} + +.mafe-event-intermediate-compensationthrow-41 { + background-position: 0 -1121px; +} + +.mafe-event-intermediate-compensationthrow-49 { + background-position: 0 -247px; +} + +.mafe-event-intermediate-conditional-16 { + background-position: 0 -8099px; +} + +.mafe-event-intermediate-conditional-24 { + background-position: 0 -6913px; +} + +.mafe-event-intermediate-conditional-33 { + background-position: 0 -5310px; +} + +.mafe-event-intermediate-conditional-41 { + background-position: 0 -4178px; +} + +.mafe-event-intermediate-conditional-49 { + background-position: 0 -3450px; +} + +.mafe-event-intermediate-email-16 { + background-position: 0 -8115px; +} + +.mafe-event-intermediate-email-24 { + background-position: 0 -7018px; +} + +.mafe-event-intermediate-email-33 { + background-position: 0 -5392px; +} + +.mafe-event-intermediate-email-41 { + background-position: 0 -4219px; +} + +.mafe-event-intermediate-email-49 { + background-position: 0 -2867px; +} + +.mafe-event-intermediate-linkcatch-16 { + background-position: 0 -7571px; +} + +.mafe-event-intermediate-linkcatch-24 { + background-position: 0 -6004px; +} + +.mafe-event-intermediate-linkcatch-33 { + background-position: 0 -3706px; +} + +.mafe-event-intermediate-linkcatch-41 { + background-position: 0 -1469px; +} + +.mafe-event-intermediate-linkcatch-49 { + background-position: 0 -406px; +} + +.mafe-event-intermediate-linkthrow-16 { + background-position: 0 -7539px; +} + +.mafe-event-intermediate-linkthrow-24 { + background-position: 0 -6052px; +} + +.mafe-event-intermediate-linkthrow-33 { + background-position: 0 -3920px; +} + +.mafe-event-intermediate-linkthrow-41 { + background-position: 0 -1692px; +} + +.mafe-event-intermediate-linkthrow-49 { + background-position: 0 -751px; +} + +.mafe-event-intermediate-messagecatch-16 { + background-position: 0 -11272px; +} + +.mafe-event-intermediate-messagecatch-24 { + background-position: 0 -10843px; +} + +.mafe-event-intermediate-messagecatch-33 { + background-position: 0 -10598px; +} + +.mafe-event-intermediate-messagecatch-41 { + background-position: 0 -2303px; +} + +.mafe-event-intermediate-messagecatch-419 { + background-position: 0 -10194px; +} + +.mafe-event-intermediate-messagecatch-49 { + background-position: 0 -10070px; +} + +.mafe-event-intermediate-messagethrow-16 { + background-position: 0 -8131px; +} + +.mafe-event-intermediate-messagethrow-24 { + background-position: 0 -7042px; +} + +.mafe-event-intermediate-messagethrow-33 { + background-position: 0 -5425px; +} + +.mafe-event-intermediate-messagethrow-41 { + background-position: 0 -4260px; +} + +.mafe-event-intermediate-messagethrow-49 { + background-position: 0 -2916px; +} + +.mafe-event-intermediate-multiplecatch-16 { + background-position: 0 -7442px; +} + +.mafe-event-intermediate-multiplecatch-24 { + background-position: 0 -5859px; +} + +.mafe-event-intermediate-multiplecatch-33 { + background-position: 0 -3080px; +} + +.mafe-event-intermediate-multiplecatch-41 { + background-position: 0 -990px; +} + +.mafe-event-intermediate-multiplecatch-49 { + background-position: 0 -49px; +} + +.mafe-event-intermediate-multiplethrow-16 { + background-position: 0 -7274px; +} + +.mafe-event-intermediate-multiplethrow-24 { + background-position: 0 -5763px; +} + +.mafe-event-intermediate-multiplethrow-33 { + background-position: 0 -3302px; +} + +.mafe-event-intermediate-multiplethrow-41 { + background-position: 0 -1346px; +} + +.mafe-event-intermediate-multiplethrow-49 { + background-position: 0 -653px; +} + +.mafe-event-intermediate-parallelcatch-16 { + background-position: 0 -7354px; +} + +.mafe-event-intermediate-parallelcatch-24 { + background-position: 0 -5811px; +} + +.mafe-event-intermediate-parallelcatch-33 { + background-position: 0 -3113px; +} + +.mafe-event-intermediate-parallelcatch-41 { + background-position: 0 -1264px; +} + +.mafe-event-intermediate-parallelcatch-49 { + background-position: 0 -504px; +} + +.mafe-event-intermediate-signalcatch-16 { + background-position: 0 -8051px; +} + +.mafe-event-intermediate-signalcatch-24 { + background-position: 0 -6937px; +} + +.mafe-event-intermediate-signalcatch-33 { + background-position: 0 -5162px; +} + +.mafe-event-intermediate-signalcatch-41 { + background-position: 0 -3953px; +} + +.mafe-event-intermediate-signalcatch-49 { + background-position: 0 -2205px; +} + +.mafe-event-intermediate-signalthrow-16 { + background-position: 0 -8067px; +} + +.mafe-event-intermediate-signalthrow-24 { + background-position: 0 -6961px; +} + +.mafe-event-intermediate-signalthrow-33 { + background-position: 0 -5556px; +} + +.mafe-event-intermediate-signalthrow-41 { + background-position: 0 -4301px; +} + +.mafe-event-intermediate-signalthrow-49 { + background-position: 0 -2965px; +} + +.mafe-event-intermediate-timer-16 { + background-position: 0 -7870px; +} + +.mafe-event-intermediate-timer-24 { + background-position: 0 -6393px; +} + +.mafe-event-intermediate-timer-33 { + background-position: 0 -4405px; +} + +.mafe-event-intermediate-timer-41 { + background-position: 0 -2385px; +} + +.mafe-event-intermediate-timer-49 { + background-position: 0 -1782px; +} + +.mafe-event-start-conditional-16 { + background-position: 0 -7838px; +} + +.mafe-event-start-conditional-24 { + background-position: 0 -6527px; +} + +.mafe-event-start-conditional-33 { + background-position: 0 -4737px; +} + +.mafe-event-start-conditional-41 { + background-position: 0 -3739px; +} + +.mafe-event-start-conditional-49 { + background-position: 0 -2818px; +} + +.mafe-event-start-empty-16 { + background-position: 0 -8226px; +} + +.mafe-event-start-empty-24 { + background-position: 0 -7619px; +} + +.mafe-event-start-empty-33 { + background-position: 0 -6623px; +} + +.mafe-event-start-empty-41 { + background-position: 0 -5236px; +} + +.mafe-event-start-empty-49 { + background-position: 0 -4027px; +} + +.mafe-event-start-messagecatch-16 { + background-position: 0 -8184px; +} + +.mafe-event-start-messagecatch-24 { + background-position: 0 -7210px; +} + +.mafe-event-start-messagecatch-33 { + background-position: 0 -6770px; +} + +.mafe-event-start-messagecatch-41 { + background-position: 0 -6124px; +} + +.mafe-event-start-messagecatch-49 { + background-position: 0 -5023px; +} + +.mafe-event-start-multiplecatch-16 { + background-position: 0 -7774px; +} + +.mafe-event-start-multiplecatch-24 { + background-position: 0 -6656px; +} + +.mafe-event-start-multiplecatch-33 { + background-position: 0 -4833px; +} + +.mafe-event-start-multiplecatch-41 { + background-position: 0 -2777px; +} + +.mafe-event-start-multiplecatch-49 { + background-position: 0 -2023px; +} + +.mafe-event-start-parallelcatch-16 { + background-position: 0 -7694px; +} + +.mafe-event-start-parallelcatch-24 { + background-position: 0 -6599px; +} + +.mafe-event-start-parallelcatch-33 { + background-position: 0 -4770px; +} + +.mafe-event-start-parallelcatch-41 { + background-position: 0 -3591px; +} + +.mafe-event-start-parallelcatch-49 { + background-position: 0 -2549px; +} + +.mafe-event-start-signalcatch-16 { + background-position: 0 -7806px; +} + +.mafe-event-start-signalcatch-24 { + background-position: 0 -6417px; +} + +.mafe-event-start-signalcatch-33 { + background-position: 0 -4643px; +} + +.mafe-event-start-signalcatch-41 { + background-position: 0 -3187px; +} + +.mafe-event-start-signalcatch-48 { + background-position: 0 -2688px; +} + +.mafe-event-start-signalcatch-49 { + background-position: 0 -7822px; +} + +.mafe-event-start-timer-16 { + background-position: 0 -7790px; +} + +.mafe-event-start-timer-24 { + background-position: 0 -6345px; +} + +.mafe-event-start-timer-33 { + background-position: 0 -10471px; +} + +.mafe-event-start-timer-41 { + background-position: 0 -2467px; +} + +.mafe-event-start-timer-49 { + background-position: 0 -1510px; +} + +.mafe-gateway-complex-20 { + background-position: 0 -7126px; +} + +.mafe-gateway-complex-30 { + background-position: 0 -5132px; +} + +.mafe-gateway-complex-41 { + background-position: 0 -3632px; +} + +.mafe-gateway-complex-51 { + background-position: 0 -2113px; +} + +.mafe-gateway-complex-61 { + background-position: 0 -4962px; +} + +.mafe-gateway-eventbased-20 { + background-position: 0 -7086px; +} + +.mafe-gateway-eventbased-30 { + background-position: 0 -4803px; +} + +.mafe-gateway-eventbased-41 { + background-position: 0 -2164px; +} + +.mafe-gateway-eventbased-51 { + background-position: 0 -553px; +} + +.mafe-gateway-eventbased-61 { + background-position: 0 -296px; +} + +.mafe-gateway-exclusive-20 { + background-position: 0 -7166px; +} + +.mafe-gateway-exclusive-30 { + background-position: 0 -5102px; +} + +.mafe-gateway-exclusive-41 { + background-position: 0 -3228px; +} + +.mafe-gateway-exclusive-51 { + background-position: 0 -1921px; +} + +.mafe-gateway-exclusive-61 { + background-position: 0 -10009px; +} + +.mafe-gateway-exclusiveeventbased-20 { + background-position: 0 -7106px; +} + +.mafe-gateway-exclusiveeventbased-30 { + background-position: 0 -4932px; +} + +.mafe-gateway-exclusiveeventbased-41 { + background-position: 0 -2598px; +} + +.mafe-gateway-exclusiveeventbased-51 { + background-position: 0 -898px; +} + +.mafe-gateway-exclusiveeventbased-61 { + background-position: 0 -1162px; +} + +.mafe-gateway-inclusive-20 { + background-position: 0 -7066px; +} + +.mafe-gateway-inclusive-30 { + background-position: 0 -5072px; +} + +.mafe-gateway-inclusive-41 { + background-position: 0 -2736px; +} + +.mafe-gateway-inclusive-51 { + background-position: 0 -1600px; +} + +.mafe-gateway-inclusive-61 { + background-position: 0 -8420px; +} + +.mafe-gateway-parallel-20 { + background-position: 0 -7146px; +} + +.mafe-gateway-parallel-30 { + background-position: 0 -5630px; +} + +.mafe-gateway-parallel-41 { + background-position: 0 -4438px; +} + +.mafe-gateway-parallel-51 { + background-position: 0 -3499px; +} + +.mafe-gateway-parallel-61 { + background-position: 0 -10504px; +} + +.mafe-gateway-paralleleventbased-20 { + background-position: 0 -6803px; +} + +.mafe-gateway-paralleleventbased-30 { + background-position: 0 -4342px; +} + +.mafe-gateway-paralleleventbased-41 { + background-position: 0 -1831px; +} + +.mafe-gateway-paralleleventbased-51 { + background-position: 0 -147px; +} + +.mafe-gateway-paralleleventbased-61 { + background-position: 0 -4676px; +} + +.mafe-loop-marker-10 { + background-position: 0 -8937px; +} + +.mafe-loop-marker-15 { + background-position: 0 -8588px; +} + +.mafe-loop-marker-21 { + background-position: 0 -8497px; +} + +.mafe-loop-marker-26 { + background-position: 0 -8200px; +} + +.mafe-loop-marker-31 { + background-position: 0 -7979px; +} + +.mafe-manualtask-marker-10 { + background-position: 0 -11288px; +} + +.mafe-manualtask-marker-15 { + background-position: 0 -10964px; +} + +.mafe-manualtask-marker-21 { + background-position: 0 -10777px; +} + +.mafe-manualtask-marker-26 { + background-position: 0 -10690px; +} + +.mafe-manualtask-marker-31 { + background-position: 0 -10716px; +} + +.mafe-message_100_source_bottom, +.mafe-message_100_source_top, +.mafe-message_100_source_left, +.mafe-message_100_source_right { + background-position: 0 -8859px; +} + +.mafe-message_100_target_bottom { + background-position: 0 -8806px; +} + +.mafe-message_100_target_left { + background-position: 0 -8795px; +} + +.mafe-message_100_target_right { + background-position: 0 -8784px; +} + +.mafe-message_100_target_top { + background-position: 0 -8817px; +} + +.mafe-message_125_source_bottom, +.mafe-message_125_source_top, +.mafe-message_125_source_left, +.mafe-message_125_source_right { + background-position: 0 -8726px; +} + +.mafe-message_125_target_bottom { + background-position: 0 -8637px; +} + +.mafe-message_125_target_left { + background-position: 0 -8685px; +} + +.mafe-message_125_target_right { + background-position: 0 -8698px; +} + +.mafe-message_125_target_top { + background-position: 0 -8603px; +} + +.mafe-message_150_source_bottom, +.mafe-message_150_source_top, +.mafe-message_150_source_left, +.mafe-message_150_source_right { + background-position: 0 -8739px; +} + +.mafe-message_150_target_bottom { + background-position: 0 -8769px; +} + +.mafe-message_150_target_left { + background-position: 0 -8754px; +} + +.mafe-message_150_target_right { + background-position: 0 -8711px; +} + +.mafe-message_150_target_top { + background-position: 0 -8670px; +} + +.mafe-message_50_source_bottom, +.mafe-message_50_source_top, +.mafe-message_50_source_left, +.mafe-message_50_source_right { + background-position: 0 -9725px; +} + +.mafe-message_50_target_bottom { + background-position: 0 -9599px; +} + +.mafe-message_50_target_left { + background-position: 0 -9402px; +} + +.mafe-message_50_target_right { + background-position: 0 -9408px; +} + +.mafe-message_50_target_top { + background-position: 0 -9541px; +} + +.mafe-message_75_source_bottom, +.mafe-message_75_source_top, +.mafe-message_75_source_left, +.mafe-message_75_source_right { + background-position: 0 -9414px; +} + +.mafe-message_75_target_bottom { + background-position: 0 -9278px; +} + +.mafe-message_75_target_left { + background-position: 0 -9128px; +} + +.mafe-message_75_target_right { + background-position: 0 -9195px; +} + +.mafe-message_75_target_top { + background-position: 0 -9286px; +} + +.mafe-parallel-marker-10 { + background-position: 0 -9989px; +} + +.mafe-parallel-marker-15 { + background-position: 0 -9907px; +} + +.mafe-parallel-marker-21 { + background-position: 0 -9803px; +} + +.mafe-parallel-marker-26 { + background-position: 0 -9691px; +} + +.mafe-parallel-marker-31 { + background-position: 0 -9846px; +} + +.mafe-receivetask-marker-10 { + background-position: 0 -11298px; +} + +.mafe-receivetask-marker-15 { + background-position: 0 -11133px; +} + +.mafe-receivetask-marker-21 { + background-position: 0 -10979px; +} + +.mafe-receivetask-marker-26 { + background-position: 0 -10914px; +} + +.mafe-receivetask-marker-31 { + background-position: 0 -10883px; +} + +.mafe-scripttask-marker-10 { + background-position: 0 -11262px; +} + +.mafe-scripttask-marker-15 { + background-position: 0 -10762px; +} + +.mafe-scripttask-marker-21 { + background-position: 0 -10450px; +} + +.mafe-scripttask-marker-26 { + background-position: 0 -10400px; +} + +.mafe-scripttask-marker-31 { + background-position: 0 -10297px; +} + +.mafe-sendtask-marker-10 { + background-position: 0 -11308px; +} + +.mafe-sendtask-marker-15 { + background-position: 0 -11210px; +} + +.mafe-sendtask-marker-21 { + background-position: 0 -11148px; +} + +.mafe-sendtask-marker-26 { + background-position: 0 -11076px; +} + +.mafe-sendtask-marker-31 { + background-position: 0 -11102px; +} + +.mafe-sequence_100_target_bottom { + background-position: 0 -9547px; +} + +.mafe-sequence_100_target_left { + background-position: 1px -9469px; +} + +.mafe-sequence_100_target_right { + background-position: -1px -9422px; +} + +.mafe-sequence_100_target_top { + background-position: 0 -9514px; +} + +.mafe-sequence_125_target_bottom { + background-position: 0 -9363px; +} + +.mafe-sequence_125_target_left { + background-position: 1px -9376px; +} + +.mafe-sequence_125_target_right { + background-position: 0 -9294px; +} + +.mafe-sequence_125_target_top { + background-position: 0 -9389px; +} + +.mafe-sequence_150_target_bottom { + background-position: 0 -9307px; +} + +.mafe-sequence_150_target_left { + background-position: 2px -11472px; +} + +.mafe-sequence_150_target_right { + background-position: -1px -9332px; +} + +.mafe-sequence_150_target_top { + background-position: 0 -9235px; +} + +.mafe-sequence_50_target_bottom { + background-position: 0 -9951px; +} + +.mafe-sequence_50_target_left { + background-position: 0 -9957px; +} + +.mafe-sequence_50_target_right { + background-position: 0 -9968px; +} + +.mafe-sequence_50_target_top { + background-position: 0 -9945px; +} + +.mafe-sequence_75_target_bottom { + background-position: 0 -9752px; +} + +.mafe-sequence_75_target_left { + background-position: 0 -9838px; +} + +.mafe-sequence_75_target_right { + background-position: 0 -9830px; +} + +.mafe-sequence_75_target_top { + background-position: 0 -9717px; +} + +.mafe-sequential-marker-10 { + background-position: 0 -9999px; +} + +.mafe-sequential-marker-15 { + background-position: 0 -9930px; +} + +.mafe-sequential-marker-21 { + background-position: 0 -9731px; +} + +.mafe-sequential-marker-26 { + background-position: 0 -9665px; +} + +.mafe-sequential-marker-31 { + background-position: 0 -9760px; +} + +.mafe-servicetask-marker-10 { + background-position: 0 -11169px; +} + +.mafe-servicetask-marker-15 { + background-position: 0 -10747px; +} + +.mafe-servicetask-marker-21 { + background-position: 0 -10276px; +} + +.mafe-servicetask-marker-26 { + background-position: 0 -10119px; +} + +.mafe-servicetask-marker-31 { + background-position: 0 -8828px; +} + +.mafe-usertask-marker-10 { + background-position: 0 -8927px; +} + +.mafe-usertask-marker-15 { + background-position: 0 -8533px; +} + +.mafe-usertask-marker-21 { + background-position: 0 -6482px; +} + +.mafe-usertask-marker-26 { + background-position: 0 -7937px; +} + +.mafe-usertask-marker-31 { + background-position: 0 -7663px; +} + +/*******end sprite***********/ +.mafe-toolbar-sprite { + background-image: url(../img/bpmn_sprite_with_zoom.png); + background-repeat: no-repeat; + width: 16px; + height: 16px; + display: inline-block; +} + +.mafe-toolbar-size { + width: 17px; + height: 17px; + display: block; + margin: 2px 0 2px 2px; +} + +.mafe-toolbar-container { + padding-left: 0; +} + +.mafe-toolbar-rectangle-size { + width: 17px; + height: 13px; + display: block; + margin: 2px 0 2px 2px; +} + +/** +* PMTask Menu +*/ +.mafe-menu-task-steps { + background: url(../img/steps.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-users-action { + background: url(../img/users.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-delete-rules-action { + background: url(../img/delete_rules.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-delete-action { + background: url(../img/delete.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-properties-action { + background: url(../img/dynaforms.gif) no-repeat; + background-size: 20px 20px; +} + +/** +* Tree Menu +*/ +.mafe-menu-tree-disable { + background: url(../img/deactivate.png) no-repeat; +} + +.mafe-menu-tree-enable { + background: url(../img/activate.png) no-repeat; +} + +/** +* Sub process Menu +*/ +.mafe-menu-rules-action { + background: url(../img/rules.png) no-repeat; + background-size: 20px 20px; +} + +/** +* Toolbar Menu +*/ +.mafe-menu-toolbar-blank-dynaform { + background: url(../img/form.gif) no-repeat; + background-size: 20px 20px; +} + +.mafe-menu-toolbar-copyimport-dynaform { + background: url(../img/edit-table.png) no-repeat; + background-size: 20px 20px; +} + +.mafe-label-annotation span { + color: black; +} + +/** +* Input Document +*/ +.mafe-inputDocument-newinput { + background-position: 0 -199px; + margin: 10px 0 10px 20px; +} + +/* BUTTON UID*/ +/*a.mafe-button-uid:link,a.mafe-button-uid:visited{ + display: block; + color: #e77e23; + font-size: 14px; + font-weight: 700; + line-height: 24px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #fdf8e2; + width: 90%; + height: 24px; + margin: 4px auto; + padding: 0 5px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} +a.mafe-button-uid:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} +.mafe-button-uid .pmui-button-label { + color: #e77e23; + font-weight:bold; +}*/ +/* BUTTON NEW*/ +/*a.mafe-button-new:link,a.mafe-button-new:visited{ + float: right; + display: block; + color: #fff; + line-height: 45px; + text-decoration: none; + background: #e77e23 url(../img/ico_mor2.png) no-repeat 5px center; + background-size : 25px; + padding: 6px 38px 6px 33px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + max-width: 80%; + height: auto; +} +a.mafe-button-new:hover{ + background: #e77e23 url(../img/ico_mor2.png) no-repeat 96% center; + background-size : 25px; + padding: 6px 38px 6px 33px; +} +.mafe-button-new .pmui-button-label { + text-transform:capitalize; +}*/ +/* BUTTON EDIT*/ +/*a.mafe-button-edit:link,a.mafe-button-edit:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #19bd9b; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-edit:hover{ + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +}*/ +/* BUTTON DELETE*/ +/*a.mafe-button-delete:link,a.mafe-button-delete:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #e84c3d; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-delete:hover { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +}*/ +/* BUTTON PROPERTIES*/ +/*a.mafe-button-properties:link,a.mafe-button-properties:visited { + display: block; + color: #fff; + font-size: 14px; + line-height: 32px; + text-align: center; + text-decoration: none; + text-transform: uppercase; + background: #3D78E5; + height: 32px; + margin: 0 3px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + filter: alpha(opacity=80); + -moz-opacity: 0.80; + -khtml-opacity: 0.80; + opacity: 0.80; +} +a.mafe-button-properties:hover { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} +a.mafe-button-img-delete { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-delete .pmui-button-icon { + background-image: url(../img/delete.png); + background-repeat: no-repeat; + display: inline-block; + width: 19px; + height: 18px; +} +a.mafe-button-img-delete .pmui-button-label { + display: none; +} +a.mafe-button-img-edit { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-edit .pmui-button-icon { + background-image: url(../img/edit.gif); + background-repeat: no-repeat; + display: inline-block; + width: 23px; + height: 20px; +} +a.mafe-button-img-edit .pmui-button-label { + display: none; +} + +a.mafe-button-img-properties { + background: #ffffff; + padding: 0px; + margin: 0px; +} +a.mafe-button-img-properties .pmui-button-icon { + background-image: url(../img/edit-table.png); + background-repeat: no-repeat; + display: inline-block; + width: 17px; + height: 16px; +} +a.mafe-button-img-properties .pmui-button-label { + display: none; +} + +.mafe-button-text{ + background-color :#FDFDFD; +} +.mafe-button-text .pmui-button-label{ + background-color :#FDFDFD; + color: black; + text-transform:capitalize; +} +*/ +/* ToolbarPanel */ +.mafe-toolbarpanel-btn { + text-decoration: none; + list-style: none; + text-align: center; +} + +.mafe-toolbarpanel-btn-span { + font-size: 10px; +} + +.mafe-toolbarpanel-btn-img { + width: 30px; + height: 30px; +} + +.mafe-toolbarpanel-tooltip { + font-size: 10px; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + -moz-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; + background-color: #6D87B7; + color: white; +} + +/** + * Styles for arrows + */ +.mafe-decorator_50_target_right { + border-bottom: 3px solid transparent; + border-top: 3px solid transparent; + border-right: 6px solid black; +} + +.mafe-decorator_75_target_right { + border-bottom: 4px solid transparent; + border-top: 4px solid transparent; + border-right: 8px solid black; +} + +.mafe-decorator_100_target_right { + border-bottom: 5px solid transparent; + border-top: 5px solid transparent; + border-right: 10px solid black; +} + +.mafe-decorator_125_target_right { + border-bottom: 6px solid transparent; + border-top: 6px solid transparent; + border-right: 12px solid black; +} + +.mafe-decorator_150_target_right { + border-bottom: 7px solid transparent; + border-top: 7px solid transparent; + border-right: 14px solid black; +} + +.mafe-decorator_50_target_bottom { + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-bottom: 6px solid black; +} + +.mafe-decorator_75_target_bottom { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 8px solid black; +} + +.mafe-decorator_100_target_bottom { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 10px solid black; +} + +.mafe-decorator_125_target_bottom { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-bottom: 12px solid black; +} + +.mafe-decorator_150_target_bottom { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-bottom: 14px solid black; +} + +.mafe-decorator_50_target_left { + border-bottom: 3px solid transparent; + border-top: 3px solid transparent; + border-left: 6px solid black; +} + +.mafe-decorator_75_target_left { + border-bottom: 4px solid transparent; + border-top: 4px solid transparent; + border-left: 8px solid black; +} + +.mafe-decorator_100_target_left { + border-bottom: 5px solid transparent; + border-top: 5px solid transparent; + border-left: 10px solid black; +} + +.mafe-decorator_125_target_left { + border-bottom: 6px solid transparent; + border-top: 6px solid transparent; + border-left: 12px solid black; +} + +.mafe-decorator_150_target_left { + border-bottom: 7px solid transparent; + border-top: 7px solid transparent; + border-left: 14px solid black; +} + +.mafe-decorator_50_target_top { + border-left: 3px solid transparent; + border-right: 3px solid transparent; + border-top: 6px solid black; +} + +.mafe-decorator_75_target_top { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 8px solid black; +} + +.mafe-decorator_100_target_top { + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 10px solid black; +} + +.mafe-decorator_125_target_top { + border-left: 6px solid transparent; + border-right: 6px solid transparent; + border-top: 12px solid black; +} + +.mafe-decorator_150_target_top { + border-left: 7px solid transparent; + border-right: 7px solid transparent; + border-top: 14px solid black; +} + +/* ---------------------------- NAV ---------------------------- */ +.navBar { + background: #3397e2; + color: #fff; + height: auto; + left: 0px; + position: fixed; + /*top: 1px;*/ + width: 97%; + z-index: 2; + padding: 0 1% 0 2%; + display: none; + border: 1px solid #2979b8; +} + +.navBar .head { + background-color: #3b4753; + cursor: move; + font-size: 12px; + height: 16px; + overflow: hidden; + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; +} + +.navBar nav { + position: relative; + font-size: 11px; + height: 35px; + float: right; + font-weight: 600; +} + +.navBar nav ul { + position: relative; + list-style: none; + height: 35px; + margin: 0; + padding: 0; +} + +.navBar nav ul li { + float: right; + border-right: 1px solid #70b5ec; + border-left: 1px solid #70b5ec; + padding: 2px 5px; +} + +.navBar nav ul li:hover { + background-color: #2979b4; + border-right: 1px solid #2979b8; + border-left: 1px solid #2979b8; +} + +.navBar nav ul li:last-child { + border: 0; +} + +.navBar nav ul li a { + display: inline-block; + color: #fff; + line-height: 31px; + text-align: center; + text-decoration: none; + background-color: transparent; + height: 29px; + padding: 0 10px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + cursor: pointer; +} + +.navBar nav ul li b { + display: inline-block; + color: #fff; + line-height: 31px; + text-align: center; + text-decoration: none; + background-color: transparent; + height: 29px; + padding: 0 10px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; + cursor: pointer; +} + +.navBar nav ul li input { + height: 31px; + width: 58px; + padding: 5px; +} + +.navBar .processName { + width: 55%; + float: left; + /*border: 1px solid red; */ +} + +.navBar .buttonSection { + /*border: 1px solid green; */ + width: 40%; + /* don't want this */ + float: right; +} + +.navBar h2 { + /*float: left;*/ + text-align: left; + font-size: 12px; + font-weight: 700px; + line-height: 35px; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +a.mafe-button-save:link, a.mafe-button-save:visited { + width: 70px; +} + +.mafe-save-process { + color: white; + background: #19bd9b; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; + border-left: 1px solid lightgray !important; + border-right: 1px solid lightgray !important; + border-bottom: 1px solid lightgray !important; + padding-right: 25px !important; +} + +li.mafe-redo { + margin-top: -2px; +} + +li.mafe-undo { + margin-top: -2px; +} + +a.mafe-button-save:hover { + /*background: #16a085 !important;*/ + color: white; +} + +.mafe-dropdown-zoom { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + font-size: 12px; +} + +.mafe-dropdown-zoom option { + font-size: 12px; +} + +a.mafe-button-fullscreen:link, a.mafe-button-fullscreen:visited { + float: left; + display: block; + outline: none; + text-indent: -9000px; + text-decoration: none; + background: url(../img/mafe-tools.png) no-repeat; + background-position: 0 -1036px; + width: 11px; + margin: 0 5px 0 5px; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; +} + +a.mafe-button-fullscreen:hover { + -ms-transform: scale(1); + -webkit-transform: scale(1); + -moz-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} + +/* ---------------------------- NAV ---------------------------- */ +/* ---------------------------- PANELES ---------------------------- */ +.content { + /*position: relative; + background: url(../img/bg_designer.gif) repeat; + width: 100%; + height: 700px; + overflow: auto;*/ +} + +.bpmn_shapes { + /*right: 20px;*/ + border: 1px solid #d6d7d9; + background-color: #e9e9e9; + /*width: 88px;*/ + padding-top: 5px; + padding-bottom: 5px; + /*overflow: visible;*/ + z-index: 1; + position: fixed; + top: 35px; + left: 0px; + height: 31px; + width: 100%; + display: none; +} + +.bpmn_shapes .head { + background-color: #d5d8dd; + height: 16px; + cursor: move; +} + +.bpmn_shapes .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.bpmn_shapes .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.bpmn_shapes ul:nth-child(2) { + border-top: none; +} + +.bpmn_shapes ul:last-child { + border-bottom: 0; +} + +.bpmn_shapes ul { + position: relative; + overflow: hidden; + list-style: none; + width: 96%; + margin: 0 0%; + padding: 4px 0; + display: inline; +} + +.bpmn_shapes ul li { + display: inline-block; + margin-top: 2px; + margin: 0 4px; + margin-top: 2px; + padding: 0; +} + +.bpmn_shapes ul li a { + float: left; + display: inline-block; + color: #fff; + line-height: 10px; + text-align: center; + text-decoration: none; + padding: 3px 4px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls { + top: 90px; + right: 20px; + font-size: 11px; + border: 1px solid #d8dbdf; + background-color: #3397e2; + width: 200px; + z-index: 1; + position: fixed; + font-weight: 700; + display: none; +} + +.content_controls .head { + background-color: #3b4753; + height: 18px; + cursor: move; +} + +.content_controls .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.content_controls ul { + float: left; + position: relative; + overflow: hidden; + list-style: none; + width: 96%; + margin: 0 2%; + padding: 0; +} + +.content_controls ul li:first-child { + border-top: 0; +} + +.content_controls ul li:last-child { + border-bottom: 0; +} + +.content_controls ul li { + float: left; + display: inline-block; + border-bottom: 1px solid #20669D; + width: 100%; + margin: 0; + padding: 3px 0; +} + +.content_controls ul li:hover { + background-color: #2979b4; +} + +.content_controls ul li a { + float: left; + display: inline-block; + color: #fff; + line-height: 23px; + text-align: center; + text-decoration: none; + padding: 3px 3px; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.content_controls li { + position: relative; +} + +a.btn_create { + float: right; + position: absolute; + right: 0px; + top: 1px; +} + +a.btn_create:link, a.btn_create:visited { + float: right; + display: block; + color: #fff; + line-height: 23px; + text-decoration: none; + background: transparent url(../img/btn_create.png) no-repeat center !important; + width: 20px; + height: 23px; + padding: 3px 0; + filter: alpha(opacity=50); + -moz-opacity: 0.50; + -khtml-opacity: 0.50; + -webkit-transition: all .6s; + -moz-transition: all .6s; + -ms-transition: all .6s; + -o-transition: all .6s; + transition: all .6s; +} + +a.btn_create span { + filter: alpha(opacity=0); + -moz-opacity: 0.00; + -khtml-opacity: 0.00; + opacity: 0.00; +} + +a.btn_create:hover { + background: #20bb99 url(../img/btn_create.png) no-repeat 5px center !important; + width: 45px; + height: 23px; + padding: 3px 0 3px 18px; + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} + +a.btn_create:hover span { + filter: alpha(opacity=100); + -moz-opacity: 1.00; + -khtml-opacity: 1.00; + opacity: 1.00; +} + +.bpmn_shapes_legend { + /*top: 1px;*/ + /*right: 20px;*/ + border: 1px solid #d6d7d9; + background-color: #e9e9e9; + width: 250px; + padding-bottom: 2px; + overflow: visible; + z-index: 1; + position: fixed; + right: 20px; + top: 70px; + display: none; +} + +.bpmn_shapes_legend .head { + background-color: #d5d8dd; + height: 16px; + cursor: move; +} + +.bpmn_shapes_legend .head a { + float: right; + display: block; + width: 30px; + height: 16px; + -webkit-transition: all .4s; + -moz-transition: all .4s; + -ms-transition: all .4s; + -o-transition: all .4s; + transition: all .4s; +} + +.bpmn_shapes_legend .head a:hover { + filter: alpha(opacity=70); + -moz-opacity: 0.70; + -khtml-opacity: 0.70; + opacity: 0.70; +} + +.bpmn_shapes_legend .icon-legend { + height: 20px; + width: 50px; + margin: 5px; + display: inline-block; +} + +.bpmn_shapes_legend .text-legend { + font-size: small; + display: inline-block; + margin-top: 9px; +} + +/* ---------------------------- PANELES ---------------------------- */ +/* ---------------------------- ELEMENTOS BASE ---------------------------- */ +.bold { + font-weight: 700; +} + +.small { + font-size: 12px; +} + +.color2 { + color: #f46500; +} + +/* ---------------------------- ELEMENTOS BASE ---------------------------- */ +.mafe-shapes-toggle { + background-image: url("../img/shapes-toogle.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 16px; + margin-top: 2px; +} + +.mafe-shapes-plus { + background-image: url("../img/plus.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 16px; + margin-top: 2px; +} + +.mafe-shapes-refresh { + background-image: url("../img/shapes-refresh.png"); + background-repeat: no-repeat; + float: right; + cursor: pointer; + width: 16px; + height: 14px; + background-size: 10px; + margin-top: 4px; +} + +.mafe-process-object { + color: white; + margin-top: 3px; + margin-left: 7px; + float: left; +} + +/* + toolbar sprite +*/ +.mafe-sprite, .mafe-fullscream, .mafe-toolbar-annotation, .mafe-toolbar-blackbox, .mafe-toolbar-boundary, .mafe-toolbar-data-object, .mafe-toolbar-data-store, .mafe-toolbar-end-message, .mafe-toolbar-end, .mafe-toolbar-gateway-exclusive, .mafe-toolbar-gateway-inclusive, .mafe-toolbar-gateway-parallel, .mafe-toolbar-group, .mafe-toolbar-horizontal-line, .mafe-toolbar-horizontal-text, .mafe-toolbar-intermediate-receive-mesage, .mafe-toolbar-intermediate-send-mesage, .mafe-toolbar-lane, .mafe-toolbar-participant, .mafe-toolbar-pool, .mafe-toolbar-start-message, .mafe-toolbar-start-timer, .mafe-toolbar-start, .mafe-toolbar-subprocess, .mafe-toolbar-task, .mafe-toolbar-vertical-line, .mafe-toolbar-vertical-text, .mafe-button-redo, .mafe-button-undo, .mafe-button-close, .mafe-toolbar-lasso, .mafe-toolbar-help, .mafe-toolbar-end-email, .mafe-toolbar-intermediate-email, .mafe-toolbar-event-intermediate-timer, .mafe-toolbar-event-start-timer, .mafe-toolbar-validation, .mafe-validator-close, .mafe-icon-error, .mafe-icon-warning { + background: url("../img/mafe-tools.png") no-repeat; + width: 23px; + height: 23px; +} + +.mafe-button-close { + background-position: 0 -966px; +} + +.mafe-button-close:hover, .mafe-button-close.button-close_hover, .mafe-button-close.button-close-hover { + background-position: 0 -1156px; +} + +.mafe-button-redo { + background-position: 0 -888px; +} + +.mafe-button-redo:hover, .mafe-button-redo.button-redo_hover, .mafe-button-redo.button-redo-hover { + background-position: 0 -863px; +} + +.mafe-button-undo { + background-position: 0 -837px; +} + +.mafe-button-undo:hover, .mafe-button-undo.button-undo_hover, .mafe-button-undo.button-undo-hover { + background-position: 0 -913px; +} + +.mafe-fullscream { + background-position: 0 -1036px; +} + +.mafe-icon-error { + background-position: 0 -1256px; +} + +.mafe-icon-warning { + background-position: 0 -1271px; +} + +.mafe-plus { + background-position: 0 -790px; +} + +.mafe-shapes-refresh { + background-position: 0 -952px; +} + +.mafe-shapes-toogle { + background-position: 0 -938px; +} + +.mafe-toolbar-annotation { + background-position: 0 -730px; +} + +.mafe-toolbar-blackbox { + background-position: 0 -530px; +} + +.mafe-toolbar-boundary { + background-position: 0 -120px; +} + +.mafe-toolbar-data-object { + background-position: 0 -1066px; +} + +.mafe-toolbar-data-store { + background-position: 0 -300px; +} + +.mafe-toolbar-easy { + background-position: 0 -450px; +} + +.mafe-toolbar-end-email { + background-position: 0 -390px; +} + +.mafe-toolbar-end-message { + background-position: 0 -150px; +} + +.mafe-toolbar-end { + background-position: 0 -240px; +} + +.mafe-toolbar-event-intermediate-timer { + background-position: 0 -270px; +} + +.mafe-toolbar-event-start-timer { + background-position: 0 -620px; +} + +.mafe-toolbar-gateway-exclusive { + background-position: 0 -420px; +} + +.mafe-toolbar-gateway-inclusive { + background-position: 0 -360px; +} + +.mafe-toolbar-gateway-parallel { + background-position: 0 -470px; +} + +.mafe-toolbar-group { + background-position: 0 -560px; +} + +.mafe-toolbar-help { + background-position: 0 -680px; +} + +.mafe-toolbar-help:hover, .mafe-toolbar-help.toolbar-help_hover, .mafe-toolbar-help.toolbar-help-hover { + background-position: 0 -705px; +} + +.mafe-toolbar-horizontal-line { + background-position: 0 -1196px; +} + +.mafe-toolbar-horizontal-text { + background-position: 0 -807px; +} + +.mafe-toolbar-intermediate-email { + background-position: 0 -210px; +} + +.mafe-toolbar-intermediate-receive-mesage { + background-position: 0 0; +} + +.mafe-toolbar-intermediate-send-mesage { + background-position: 0 -30px; +} + +.mafe-toolbar-lane { + background-position: 0 -500px; +} + +.mafe-toolbar-lasso { + background-position: 0 -330px; +} + +.mafe-toolbar-participant { + background-position: 0 -1096px; +} + +.mafe-toolbar-pool { + background-position: 0 -590px; +} + +.mafe-toolbar-start-message { + background-position: 0 -60px; +} + +.mafe-toolbar-start-timer { + background-position: 0 -650px; +} + +.mafe-toolbar-start { + background-position: 0 -180px; +} + +.mafe-toolbar-subprocess { + background-position: 0 -1006px; +} + +.mafe-toolbar-task { + background-position: 0 -1126px; +} + +.mafe-toolbar-validation { + background-position: 0 -90px; +} + +.mafe-toolbar-vertical-line { + background-position: 0 -1226px; +} + +.mafe-toolbar-vertical-text { + background-position: 0 -760px; +} + +.mafe-validator-close { + background-position: 0 -1176px; +} + +.mafe-validator-close:hover, .mafe-validator-close.validator-close_hover, .mafe-validator-close.validator-close-hover { + background-position: 0 -986px; +} + +/*end toolbar sprite**/ +span.mafe-button-redo { + width: 22px; + height: 24px; + display: block; + margin-top: 4px; +} + +span.mafe-button-undo { + width: 22px; + height: 24px; + display: block; + margin-top: 4px; +} + +span.mafe-button-close { + width: 20px; + height: 20px; + display: block; + margin-top: 7px; +} + +span.mafe-validator-close { + width: 20px; + height: 20px; + display: block; + margin: 4px 8px 4px 4px; +} + +a.mafe-close { + margin: -1px; +} + +span.mafe-toolbar-help { + width: 23px; + height: 23px; + display: block; + margin-top: 2px; +} + +span.mafe-toolbar-validation { + width: 9px; + height: 20px; + display: block; + margin-top: 6px; +} + +/** + * Tooltip for actions + */ +.mafe-action-tooltip { + font-size: 10px; + background-color: #ECF0F1; +} + +/** + * Tooltip Black + */ +.ui-tooltip.mafe-action-tooltip-black { + background: black; + color: white; +} + +/** Rotate Label **/ +.rotateText { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-transform: rotate(-90deg); + /* IE9+ */ + -moz-transform: rotate(-90deg); + /* Firefox */ + -o-transform: rotate(-90deg); + /* Opera */ + -webkit-transform: rotate(-90deg); + /* Safari & Chrome */ + transform: rotate(-90deg); + display: block; + float: center; + margin: 0 10px 0; +} + +.rotateControl { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + -ms-transform: rotate(90deg); + /* IE9+ */ + -moz-transform: rotate(90deg); + /* Firefox */ + -o-transform: rotate(90deg); + /* Opera */ + -webkit-transform: rotate(90deg); + /* Safari & Chrome */ + transform: rotate(90deg); + display: block; + float: right; + margin: 0 10px 0; +} + +.mafe-textarea-resize .pmui-textareacontrol { + resize: vertical; +} + +.dropableClass { + background-color: #e2eae3; +} + +.loader { + position: fixed; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + z-index: 9999; + background: url("../img/loading.gif") 50% 50% no-repeat #f9f9f9; +} + +.screencast { + position: relative; + width: 480px; + height: 161px; + z-index: 9999; + background: url("../img/bpmnProcessmaker.gif") 50% 50% no-repeat #f9f9f9; +} + +.startcoronahelp { + position: relative; + height: 100px; + z-index: 9999; + background: url("../img/startcoronahelp.png") 50% 50% no-repeat; +} + +.mafe-button-menu { + display: inline-block; + vertical-align: top; + position: absolute; + top: 0px; + bottom: 2px; + padding-top: 5px; +} + +.mafe-button-menu img { + cursor: pointer; +} + +.mafe-button-menu-option { + padding: 7px; + color: black; + cursor: pointer; + position: absolute; + height: 14px; + width: 107px; + border: 1px solid lightgray; + background-color: #e8e8e8; + top: 2px; + left: -6px; +} + +.mafe-button-menu-option:hover { + background-color: lightgray; +} + +.mafe-button-menu-container { + position: relative; +} + +.mafe-can-connect-layer { + background-color: #9dee9d; + opacity: 0.4; +} + +.mafe-can-not-connect-layer { + background-color: #f590a5; + opacity: 0.4; +} + +.arrow_box { + position: absolute; + background: #ffffff; + border: 1px solid #BCBCBC; + padding-right: 5px; + font-size: smaller; + width: auto; + min-width: 27%; +} + +.arrow_box:after, .arrow_box:before { + right: 100%; + top: 10px; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.arrow_box:after { + border-color: rgba(255, 255, 255, 0); + border-right-color: #ffffff; + border-width: 7px; + margin-top: -7px; +} + +.arrow_box:before { + border-color: rgba(188, 188, 188, 0); + border-right-color: #BCBCBC; + border-width: 8px; + margin-top: -8px; +} + +.bpmn_validator { + /* background: #3397e2; */ + height: auto; + /* left: 0px; */ + /* position: fixed; */ + /* top: 68%; */ + width: 99.4%; + z-index: 2; + /* display: none; */ + border: 4px solid #E5E5E5; + visibility: hidden; + width: 100%; + position: fixed; + bottom: 0; + left: 0; +} + +.validator_header { + height: 28px; + background-color: #262A35; + color: #fff; +} + +.validator_body { + background-color: white; + font-size: smaller; +} + +.validator-close { + float: right; +} + +i.mafe-icon-error { + float: left; + height: 15px; + height: 15px; +} + +i.mafe-icon-warning { + float: left; + height: 15px; + height: 15px; +} + +.validator_header h2 { + text-align: left; + font-size: 12px; + line-height: 28px; + margin: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-left: 10px; + float: left; +} + +table.dataTable thead th, table.dataTable thead td { + padding: 10px 18px; + border-bottom: none; + background-color: #B6B6B6; + color: white; +} + +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: none; +} + +/* + * Sprite Validator Icons + */ +.mafe-sprite, .mafe-style-error-marker-10, .mafe-style-error-marker-14, .mafe-style-error-marker-17, .mafe-style-error-marker-21, .mafe-style-error-marker-7, .mafe-style-warning-marker-10, .mafe-style-warning-marker-14, .mafe-style-warning-marker-17, .mafe-style-warning-marker-21, .mafe-style-warning-marker-7 { + background-image: url("../img/mafe-validate.png"); + background-repeat: no-repeat; +} + +/* Icons for Errors */ +.mafe-style-error-marker-10 { + background-position: 0 0; +} + +.mafe-style-error-marker-14 { + background-position: 0 -10px; +} + +.mafe-style-error-marker-17 { + background-position: 0 -24px; +} + +.mafe-style-error-marker-21 { + background-position: 0 -41px; +} + +.mafe-style-error-marker-7 { + background-position: 0 -62px; +} + +/* Icons for Warning */ +.mafe-style-warning-marker-10 { + background-position: 0 -69px; +} + +.mafe-style-warning-marker-14 { + background-position: 0 -78px; +} + +.mafe-style-warning-marker-17 { + background-position: 0 -91px; +} + +.mafe-style-warning-marker-21 { + background-position: 0 -107px; +} + +.mafe-style-warning-marker-7 { + background-position: 0 -127px; +} + +.crown-container { + z-index: auto; + display: table; + padding-left: 4px; +} + +.crown-container .row { + display: table-row; +} + +.crown-container .row .item-crown { + display: table-cell; +} + +.mafe-corona-task { + background: url("../img/corona-task.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-task:hover { + background: url("../img/corona-task.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-gateway-exclusive { + background: url("../img/corona-gateway-exclusive.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-gateway-exclusive:hover { + background: url("../img/corona-gateway-exclusive.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-intermediate { + background: url("../img/corona-intermediate.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-intermediate:hover { + background: url("../img/corona-intermediate.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-end { + background: url("../img/corona-end.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-end:hover { + background: url("../img/corona-end.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-flow { + background: url("../img/corona-flow.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-flow:hover { + background: url("../img/corona-flow.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-settings { + background: url("../img/corona-settings.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-settings:hover { + background: url("../img/corona-settings.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-delete { + background: url("../img/corona-delete.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-delete:hover { + background: url("../img/corona-delete.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +.mafe-corona-textfield-rename { + background: url("../img/corona-textfield-rename.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #ffffff; + cursor: pointer; +} + +.mafe-corona-textfield-rename:hover { + background: url("../img/corona-textfield-rename.png") no-repeat center; + width: 22px; + height: 22px; + background-color: #87cbff; + cursor: pointer; + color: #666666; +} + +/*Dynaform Creation Buttons*/ +.pmui .mafeButton .pmMafeButtonsIconBlack { + background: #474747 url(../img/form.png) no-repeat center; + background-size: contain; + height: 55px; + width: 100px; + margin-top: 15px; +} + +.pmui .mafeButton .pmMafeButtonsIconPMTable { + background: #474747 url(../img/table.png) no-repeat center; + background-size: contain; + height: 55px; + width: 80px; + margin-top: 15px; +} + +.pmui .mafeButton .pmMafeButtonsIconCopy { + background: #474747 url(../img/copy_import.png) no-repeat center; + background-size: contain; + height: 55px; + width: 80px; + margin-top: 15px; +} + +.pmui.varButton-delete { + background: #e84c3d; + padding: 0 15px; +} + +.pmui.varButton-edit { + background: #19bd9b; + padding: 0 15px; +} + +/* AccordionItem */ +.pmui-accordion-item-header { + background-color: #DFE8F6; + border-top: 1px solid #ada9a9; + border-bottom: 1px solid #ada9a9; + cursor: pointer; + overflow-wrap: break-word; + padding: 2px; + text-align: left; +} + +/*.pmtrigger .newPmtrigger .pmui-treepanel-node-icon{ + background: grey; +}*/ +.pmcustomtrigger .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmcopytrigger .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmfunction .pmui-treepanel-node-father .pmui-treepanel-node-collapsed .pmui-treepanel-node-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +/*accordion*/ +.pmcustomtrigger { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -63px -250px; +} + +.pmcopytrigger { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -65px -271px; +} + +.pmFunctions { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -66px -120px; +} + +.pmTrSharepoint { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -79px -92px; +} + +.pmTrAlfresco { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -72px -223px; +} + +.pmZimbra { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -78px -15px; +} + +.pmSugar { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -68px -152px; +} + +.pmTalend { + background: url(../img/triggerWizard.png) no-repeat; + background-position: -85px -48px; +} + +.ui-tooltip { + overflow-wrap: break-word; +} + + +.mafe-designer-assigment-button { + background-color: #d7d9dd; + font-size: 10; + text-transform: none; +} + +.mafe-designer-assigment-grid .pmui-gridpanelcell { + text-align: left; +} + +.mafe-grid-button { + background-color: transparent; + height: 0; + padding: 0px 0px; +} + +.mafe-grid-button.button-icon-user .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: 1px -195px; + width: 14px; + height: 17px; + display: block; +} + +.mafe-grid-button.button-icon-group .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -2px -135px; + width: 22px; + height: 17px; + display: block; +} + +.mafe-grid-button .button-label { + display: none; +} + +.mafe-designer-assigment-grid .pmui-gridpanelcolumn { + background-color: #FFFFFF; + padding: 0px 10px; +} + +.mafe-designer-assigment-grid .mafe-assigment-panel { + padding: 0px 10px; +} + +/* PANEL */ +/* +.mafe-assigment-panel .pmui-panel { + background-color: transparent; +} + + +.mafe-assigment-panel-right{ + background-color:#eaebed; + padding-left: 10px; +} + +.mafe-assigment-panel-global { + background-color: transparent; + padding-left: 20px; + padding-right: 0px; +} */ +/* TEXT SEARCH */ +.pmui.pmui-textfield.mafe-assigment-search { + text-align: left; +} + +/* BUTTONS SEARCH */ +/* GRID ASSIGNES*/ +/*.mafe-designer-assigment-grid { + background-color: #FFFFFF; + text-align: left; + padding: 0px 0px; +} + +.mafe-designer-assigment-grid .pmui-gridpanel-table{ + min-height: 0em; +}*/ +.pmui-pmtooltipmessage .pmui-button-label { + color: #999999; + font-size: 10px; +} + +.pmui-pmtooltipmessage .mafe-tooltip-close { + background: transparent; + margin: 0px 0px; + padding: 0px 0px; + width: auto; + height: auto; + color: black; +} + +.pmui-pmtooltipmessage .mafe-tooltip-header { + background: #EEF1F6; + margin: 0px 7px; + padding: 4px 0px; + width: auto; + height: 6px; + color: black; +} + +.pmui-pmtooltipmessage .mafe-tooltip-body { + background: #EEF1F6; + padding: 10px; +} + +.pmui-pmtooltipmessage { + background: #FFFFFF; + font-size: 10; + border: 1px solid #e7e7e7; + -webkit-box-shadow: 2px 2px 5px 0px #999; + -moz-box-shadow: 2px 2px 5px 0px #999; + filter: shadow(color=#999999, direction=135, strength=2); +} + +#list-usersIngroup { + width: 175px; + max-height: 100px; + background: #eef1f6; +} + +#list-usersIngroup #list-usersIngroup-iem { + font-size: 13px; + text-overflow: ellipsis; + overflow: hidden; + display: block; + white-space: nowrap; + width: 175px; + color: #333333; +} + +#tooltipmessagecustombody { + float: left; + padding: 10px; +} + +#tooltipmessagecustom #header { + width: 100%; + padding: 2px; + height: 20px; + box-sizing: border-box; + background-color: #e7e7e7; +} + +#tooltipmessagecustom #header a { + float: right; + margin-right: 4px; + cursor: pointer; +} + +.pmui .mafe-button-img-properties .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -91px -270px; +} + +.pmui .mafe-button-img-edit .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -89px -292px; +} + +.pmui .mafe-button-img-delete .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmui .mafe-button-img-delete .button-icon, .pmui .mafe-button-img-edit .button-icon, .pmui .mafe-button-img-properties .button-icon { + width: 18px; + height: 18px; + display: inline-block; +} + +a.mafe-button-img-properties, a.mafe-button-img-delete, a.mafe-button-img-edit { + background-color: transparent; +} + +.pmui .mafe-button-img-properties .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -91px -270px; +} + +.pmui .mafe-button-img-edit .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -89px -292px; +} + +.pmui .mafe-button-img-delete .button-icon { + background: url(../img/mafe-sprite.png) no-repeat; + background-position: -62px -294px; +} + +.pmui .mafe-button-img-delete .button-icon, .pmui .mafe-button-img-edit .button-icon, .pmui .mafe-button-img-properties .button-icon { + width: 18px; + height: 18px; + display: inline-block; +} + +a.mafe-button-img-properties, a.mafe-button-img-delete, a.mafe-button-img-edit { + background-color: transparent; +} + +.itemsSteps .pmui-treepanel-node-father > .pmui-treepanel-node-title .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.itemsSteps .pmui-treepanel-node-leaf .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.treePanelTriggers .pmui-treepanel-node-father > .pmui-treepanel-node-title .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.treePanelTriggers .pmui-treepanel-node-leaf .pmui-treepanel-node-icon { + background-image: none; + background-size: contain; +} + +.itemsSteps { + border-radius: 7px; + background: white; + box-sizing: border-box; + border: 1px solid #ccc; +} + +.treePanelTriggers { + border-radius: '7px'; + border: 1px solid #ccc; + width: 216px; + overflow: auto; +} + +#accordionPanelTriggers .pmui-gridpanelcell-content { + padding: 0px; +} + +.mafe-step-arrow-up { + background: url(../img/arrow-up.png) no-repeat; + background-size: 20px 10px; + width: 20px; + height: 10px; + margin: 0px; + padding: 0px; +} + +.mafe-step-arrow-down { + background: url(../img/arrow-down.png) no-repeat; + background-size: 20px 10px; + width: 20px; + height: 10px; + margin: 0px; + padding: 0px; +} + +.steps-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + list-style: none; + height: 2em; + text-align: center; + color: #9b9b9b; +} + +.steps-placeholder .placeholder-index { + display: block; + padding: 7px; +} + +@charset "UTF-8"; +.mafe-col { + background: #676767; + /*background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod…EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #b0b1b3 0%, #939497 10%, #727375 91%, #595959 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b0b1b3), color-stop(10%,#939497), color-stop(91%,#727375), color-stop(100%,#595959)); + background: -webkit-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -o-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -ms-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: linear-gradient(to bottom, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b0b1b3', endColorstr='#595959',GradientType=0 );*/ + color: white; + font-size: 12px; + width: auto; + padding: 6px 15px; + font-weight: inherit; +} + +.mafe-body-properties { + font-size: 11px; +} + +.mafe-field-labelCell { + padding: 2px; + border-bottom: 1px solid #D6D6D6; +} + +.pmui-rowfield:hover { + background: #D6D6D6; +} + +.mafe-field-labelCell .pmui-textcontrol { + border: 1px solid white; +} + +.mafe-field-labelCell .pmui-textcontrol, .mafe-field-labelCell .pmui-dropdownlistcontrol { + font-size: 12px; +} + +.mafe-table-properties tr:nth-child(odd) { + background-color: #E5E5E5; +} + +.mafe-table-properties tr:nth-child(even) { + background-color: #F2F2F2; +} + +.mafe-field-labelCell .pmui-button { + color: #4e4d4d; + border-radius: 2px; + float: right; + border: 1px solid #b1b1b1; + background: -moz-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 91%, #bababa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(10%, #eaeaea), color-stop(91%, #cfcfcf), color-stop(100%, #bababa)); + background: -webkit-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: -o-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: -ms-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + background: linear-gradient(to bottom, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); +} + +.pmui-rowfield .error { + outline: 1px solid #ecc3c2; + border: 1px solid white; +} + +.pmui-rowfield.error { + color: red; +} + +.pmui-pmformgrid { + padding: 1em 0 1em 1em; + box-sizing: border-box; + background: #f1f1f1; +} + +.pmdesigner-initialrow { + height: 10em !important; +} + +.pmdesigner-formgrid-head, +.pmdesigner-formgrid-headrow, +.pmdesigner-formgrid-headcell { + padding: 0; + height: 0; +} + +.pmdesigner-textMessageContent { + color: #777f8b; +} + +/*.pmdesigner-mainpanel-slec, +.pmdesigner-formgrid, +.pmdesigner-formgrid-bodyrow, +.pmdesigner-formgrid-bodycell { + box-sizing: border-box; + border-collapse: collapse; + border: 1px dotted #c0c0c0; +}*/ +.pmdesigner-formgrid-bodyrow { + background: white; +} + +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell { + background: #F0F0F0; +} + +.pmdesigner-rowhandler { + box-sizing: border-box; + background: url("../img/moveUpDown.png") no-repeat center rgba(224, 222, 222, 0.8); + display: inline-block; + padding: 0.3em; + position: absolute; + top: 0; + left: 0; + color: white; + cursor: move; +} + +.pmui-window.pmdesigner-dropdownconfig .pmui-window-body { + padding: 0 1em; +} + +.pmui-gridfieldcell.gridfieldcell-bodycell.pmui-containeritembehavior-hover, +.pmdesigner-formgrid-bodycell.pmui-containeritembehavior-hover { + border-style: dashed; + background: #FCF8D6; + border-color: #e9ca27; + border-width: 2px; + color: orange; +} + +.pmdesigner-formgrid-bodycell { + min-height: 2em; + background: white; +} + +.unique-cell { + text-align: center; + font-size: 30px; + color: #aaa8a8; + height: 5em; +} + +/* +.pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell.pmdesigner-active +{ + background: #ECECE9; + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod?EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #ffffff 0%, #eaeaea 10%, #cfcfcf 91%, #bababa 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(10%,#eaeaea), color-stop(91%,#cfcfcf), color-stop(100%,#bababa)); + background: -webkit-linear-gradient(top, #ffffff 0%,#F1F3CA 10%,#cfcfcf 91%,#bababa 100%); + background: -o-linear-gradient(top, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + background: -ms-linear-gradient(top, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + background: linear-gradient(to bottom, #ffffff 0%,#eaeaea 10%,#cfcfcf 91%,#bababa 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeaea', endColorstr='#cfcfcf',GradientType=0 ); +} +*/ +.pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmdesigner-formgrid-bodyrow:hover .pmdesigner-formgrid-bodycell.pmdesigner-active, +.pmui-gridfieldcell.gridfieldcell-bodycell.pmdesigner-active { + background: #C0C0C0; + color: white; +} + +.pmdesigner-formgrid-bodycell .pmui-field-label { + color: inherit; +} + +.pmdesigner-formgrid-headcell { + width: 8.333333333333%; + box-sizing: border-box; +} + +#pmdesigner-mainpanel .pmui-contextmenu-target { + background: #F0F0F0; +} + +.pmdesigner-formpanel { + display: block; + border: 1px solid #e0e0e0; +} + +.pmdesigner-formpanel:hover { + background: #e0e0e0; +} + +.pmui.ui-layout-pane.right-layout-panel { + padding: 0px; +} + +.pmui.pmui-panel.pmdesigner-layout-eastpanel { + overflow-x: hidden; +} + +.toolbox-title { + display: block; + padding: 5px; + background: linear-gradient(to bottom, #ffffff 0%, #eaeaea 10%, #cfcfcf 90%, #bababa 100%); + font-size: 14px; +} + +/*.pmui-accordion-item-header { + background: #b0b1b3; + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJod?EiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #b0b1b3 0%, #939497 10%, #727375 91%, #595959 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b0b1b3), color-stop(10%,#939497), color-stop(91%,#727375), color-stop(100%,#595959)); + background: -webkit-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -o-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: -ms-linear-gradient(top, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + background: linear-gradient(to bottom, #b0b1b3 0%,#939497 10%,#727375 91%,#595959 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b0b1b3', endColorstr='#595959',GradientType=0 ); + color: #F0F0F0; + border-color: #888; +}*/ +.pmui-containeritembehavior-placeholder { + visibility: visible; + background: rgba(128, 128, 128, 0.3); + border: 2px #888 dashed; + list-style: none; + height: 2em; +} + +/* +.pmui.pmui-listpanel.components-list { + border: none; +} +*/ +.toolbox-title { + display: block; + padding: 0.5em; + font-size: 15px; + background: #2d3e50; + color: white; +} + +.pmui.pmui-listpanel.components-list .pmui-listitem { + background: none; + border: none; +} + +.pmui.pmui-listpanel.components-list .pmui-listitem:hover { + background: #e0e0e0; +} + +.pmdesigner-controlslist .pmui-listitem .pmui-listitem-icon, .otherControlsList-list .pmui-listitem .pmui-listitem-icon { + background-image: url(../img/cmp-icons.png); + width: 16px; + height: 16px; +} + +.pmui-listitem.cmp-text .pmui-listitem-icon { + background-position: 0 -128px; +} + +.pmui-listitem.cmp-dropdown .pmui-listitem-icon { + background-position: 0 -144px; +} + +.pmui-listitem.cmp-checkbox .pmui-listitem-icon { + background-position: 0 -32px; +} + +.pmui-listitem.cmp-radio .pmui-listitem-icon { + background-position: 0 0; +} + +.pmui-listitem.cmp-label .pmui-listitem-icon { + background-position: 0 -64px; +} + +.pmui-listitem.cmp-datetime .pmui-listitem-icon { + background-position: 0 -16px; +} + +.pmui-listitem.cmp-fieldset .pmui-listitem-icon { + background-position: 0 -80px; +} + +.pmui-listitem.cmp-formpanel .pmui-listitem-icon { + background-position: 0 -48px; +} + +.pmui-listitem.cmp-textarea .pmui-listitem-icon { + background-position: 0 -96px; +} + +.pmui-listitem.controls-submit .pmui-listitem-icon { + background: url("../img/submit.png") no-repeat; + width: 33px; + height: 20px; +} + +.pmui-listitem.controls-button .pmui-listitem-icon { + background: url("../img/button.png") no-repeat; + width: 33px; + height: 20px; +} + +.pmui-listitem.grid-field .pmui-listitem-icon { + background: url("../img/icon_grid.png") no-repeat; + width: 33px; + height: 30px; +} + +.pmui-listitem.label-field .pmui-listitem-icon { + background: url("../img/label.png") no-repeat; + width: 33px; + height: 30px; + background-size: contain; +} + +.pmui-listitem.subForm-field .pmui-listitem-icon { + background: url("../img/subform.png") no-repeat; + width: 33px; + height: 30px; + background-size: contain; +} + +.pmui-listitem.fiel-field .pmui-listitem-icon { + background: url("../img/file2.png") no-repeat; + width: 24px; + height: 25px; +} + +.subFormList-list .pmdesigner-subform .pmui-listitem-icon { + background: url("../img/subform.png") no-repeat; + width: 20px; + height: 20px; + background-size: contain; +} + +.pmui-listitem.image-field .pmui-listitem-icon { + background: url("../img/image.png") no-repeat; + width: 24px; + height: 25px; + background-size: contain; +} + +.pmui-listitem.link-field .pmui-listitem-icon { + background: url("../img/link.png") no-repeat; + width: 24px; + height: 25px; + background-size: contain; +} + +.pmui-listitem.controls-title .pmui-listitem-icon { + background-position: 0 -112px; +} + +.pmui-window.pmdesigner-controlselector .pmui-window-body { + padding: 1em; +} + +.pmui-window.pmdesigner-dependencyFieldWindow .pmui-window-body { + padding: 1em; +} + +.pm-titleListFields { + margin-left: 40px; + font-weight: bold; + font-size: 20px; +} + +.pm-titleListDependent { + margin-left: 14px; + font-weight: bold; + font-size: 20px; +} + +.pm-dependentFieldsGrid .pmui-button { + background: #e84c3d; +} + +.pm-listFieldGrid .pmui-button { + background: #19bd9b; +} + +.pmdesigner-dependencyFieldWindow .pmui-window-body { + background: #faf8f8; +} + +.pm_labelfield .pmui-textcontrol { + border: 1px white; +} + +.pm-listFieldGrid .pmui-gridpanelcell-content { + padding: 2px; +} + +.pm-dependentFieldsGrid .pmui-gridpanelcell-content { + padding: 2px; +} + +.pm-listFieldGrid .pmui-gridpanel-toolbar { + height: 30px; +} + +.pm-dependentFieldsGrid .pmui-gridpanel-toolbar { + height: 30px; +} + +.pmdesigner-formgrid { + /*background: rgb(150, 150, 150);*/ + width: 99%; +} + +.pmdesigner-formgrid .emptyform { + width: 100%; + height: 10em; +} + +/*.pmdesigner-formgrid-bodyrow.my_row{ + border-left: 3px solid #c0c0c0; + border-bottom: 3px solid #c0c0c0; +}*/ +.pmdesigner-formgrid-bodycell.pmui-textcontrol { + width: 100%; +} + +.pmdesigner-formgrid-bodycell .pmui-buttonfield .pmui-field-control { + width: auto; +} + +.pmdesigner-formgrid-bodycell .pmui-datetimefield .icon-field { + background: url("../img/calendar.png") no-repeat; + display: inline-block; + padding: 0.6em; +} + +.pmui-pmsuggestfield .icon-field { + background: url("../img/suggest.png") no-repeat; + display: inline-block; + padding: 0.6em; + background-size: contain; +} + +/*.pmdesigner-formgrid-bodycell .pmui-field-textLabel{ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: inherit; +}*/ +.pmdesigner-formgrid-bodycell .pmui-field-label { + padding: 6px 3px 6px 10px; +} + +.pmdesigner-formgrid-bodycell .pmui-field-textLabel { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +.pmdesigner-formgrid-bodycell.colspan_12-11 .pmui-field-control { + width: 73%; +} + +.pmdesigner-formgrid-bodycell.colspan_10-9 .pmui-field-control { + width: 72%; +} + +.pmdesigner-formgrid-bodycell.colspan_8-7 .pmui-field-control { + width: 70%; +} + +.pmdesigner-formgrid-bodycell.colspan_6 .pmui-field-control { + width: 69%; +} + +.pmdesigner-formgrid-bodycell.colspan_5 .pmui-field-control { + width: 68%; +} + +.pmdesigner-formgrid-bodycell.colspan_4 .pmui-field-control { + width: 65%; +} + +.pmdesigner-formgrid-bodycell.colspan_3 .pmui-field-control { + width: 61%; +} + +.pmdesigner-formgrid-bodycell.colspan_2 .pmui-field-control { + width: 53%; +} + +.pmdesigner-formgrid-bodycell.colspan_1 .pmui-field-control { + width: 26%; +} + +.pmdesigner-formgrid-bodycell .pmui-buttonfield .pmui-field-control { + text-align: center; +} + +/*custom styles formdesigner*/ +/*/////////////////////////////////////////////////////// +/ +/ +/ +/ + + +/ +/ +/ +/*/ +#designer-body .pmui-accordion-item-body { + background: #FFFFFF; + padding: 0 5px 0 5px; + background: #e0e0e0; +} + +.pmdesigner-mainlayout, #designer-body .right-layout-panel, .pmdesigner-layout-eastpanel { + background: #f1f1f1; +} + +#designer-body .pmui-accordion-item-body .pmui-listitem { + padding: 3px; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem { + color: white; + border-bottom: 2px solid #d6d6d6; + background: white; + cursor: move; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem:hover { + color: black; + background: #e0e0e0; +} + +#designer-body .pmListItem-buttonEdit { + background: white; + color: white; + border: none; +} + +#designer-body .pmui.pmui-listpanel.components-list .pmui-listitem:hover .pmListItem-buttonEdit { + background-color: #19bd9b; +} + +#designer-body .pmui-accordion-item-header { + font-size: 13px; +} + +#designer-body .pmui-accordion-item-container { + border-left: 1px solid white; + border-right: 1px solid white; +} + +#designer-body .pmui-accordion-item-header .pmui-textcontrol { + outline: none; + margin-left: 10px; +} + +#designer-body .right-layout-panel .pmui-listpanel-toolbar { + display: none; +} + +#designer-body .pmui-accordion-item-header { + background: #676E7C; + color: white; + border-color: #d8dbdf; + padding: 3px 0 6px 0; +} + +#designer-body .otherControlsList-list { + background: white; +} + +#designer-body .otherControlsList-list .pmui-listitem { + background: white; + color: black; + border-style: none; +} + +#designer-body .otherControlsList-list .pmui-listitem:hover { + background: #e0e0e0; + color: black; +} + +#designer-body .ui-layout-pane { + overflow: initial; +} + +#designer-body { + background: #c0c0c0; +} + +#designer-body .label-other-controls { + padding-left: 5px; + font-size: 13px; +} + +#designer-body .pmdesigner-formgrid-tableContainer { + overflow: auto; + width: 100%; + height: 97%; + border: 1px solid #C0C0C0; +} + +#otherControlsList-firstItem .pmui-listitem-text, #otherControlsList-secondItem .pmui-listitem-text { + /*display: none;*/ +} + +#idOtherControlsList .pmui-listitem-text { + margin-left: 20px; + position: absolute; + left: 50px; + top: 10px; +} + +#designer-body .formGrid-freeCell { + width: 98%; + height: 36px; + border: 3px dotted #888888; + background: #c0c0c0; +} + +.pmui-propertiestable { + background: white; + padding: 0 2px 0 2px; +} + +.pmui-field.formview-view .pmui-textcontrol, +.pmui-field.formview-view .pmui-dropdownlistcontrol, +.pmui-field.formview-view .pmui-textareacontrol, +.pmui-field.formview-view .pmui-passwordcontrol, +.pmui-field.formview-view .pmui-uploadcontrol, +.pmui-field.formview-view .pmui-datetimecontrol { + border: 1px solid white; + background: #ECECEC; + font-style: italic; +} + +.pmui-field.formview-disabled .pmui-textcontrol, +.pmui-field.formview-disabled .pmui-dropdownlistcontrol, +.pmui-field.formview-disabled .pmui-textareacontrol, +.pmui-field.formview-disabled .pmui-passwordcontrol, +.pmui-field.formview-disabled .pmui-uploadcontrol, +.pmui-field.formview-disabled .pmui-datetimecontrol { + color: #757575; + background: #ECECEC; +} + +#designer-body .pmui-accordion-panel-container #first-item .pmui-accordion-item-body { + height: 200px; +} + +#third-item .pmui-accordion-item-body { + height: 850px; +} + +.pmTextContainer1 { + width: 60px; + display: inline-block; + font-size: 12px; + margin: 1px; + color: #ee710f; +} + +.pmTextContainer1 span, .pmNameContent { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + display: inline-block; +} + +.pmTextContainer2 { + width: auto; + display: inline-block; + font-size: 12px; + color: #21366d; +} + +.pmNameContent { + width: 130px; +} + +.pmdesigner-formgrid-bodycell .pmui-pmsub-titlefield h5 { + background-color: #9FA1AA; + color: white; + margin: 0.5em 0 0.5em 0; + padding: 8px; +} + +.pmdesigner-formgrid-bodycell.pmdesigner-active .pmui-pmsub-titlefield h5 { + background: none; +} + +.pmdesigner-formgrid-bodycell .pmui-pmtitlefield h4 { + background-color: #383D41; + color: white; + font-size: 18px; + padding: 10px; + margin: 0.5em 0 0.5em 0; +} + +.pmdesigner-formgrid-bodycell.pmdesigner-active .pmui-pmtitlefield h4 { + background: none; +} + +.pmdesigner-itemcontrol-x { + margin-left: 5px; + vertical-align: super; + cursor: pointer; + color: #e7e7e7; +} + +.pmdesigner-itemcontrol-x:hover { + color: #8b8888; +} + +.pmdesigner-itemcontrol-itemselected, +.pmdesigner-itemcontrol-optselected, +.pmdesigner-itemcontrol-bracketsselected { + position: relative; + display: inline-block; +} + +.pmdesigner-itemcontrol-itemselected > a { + background: #f5f2f2; + padding: 5px; + margin: 1px; +} + +.pmdesigner-itemcontrol-itemselected > a:hover { + background: #e7e7e7; +} + +.pmdesigner-itemcontrol-bracketsselected > a { + color: red; + padding: 1px; + background: #f5f2f2; +} + +.pmdesigner-itemcontrol-optselected > a { + color: blue; + padding: 1px; + background: #f5f2f2; +} + +/* areacontrol*/ +.pmdesigner-areacontrol { + background: white; + height: auto; +} + +.pmdesigner-suggestcontrol { + height: 20%; + padding: 5px; +} + +.pmdesigner-suggestcontrol input { + height: 20px; + width: 90%; +} + +.pmdesigner-suggestfields { + position: absolute; + width: 52%; + z-index: 5; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.5); +} + +.pmdesigner-suggestfields ul { + list-style-type: none; + padding: 0; + margin: 0; +} + +.pmdesigner-suggestfields a { + display: block; + background: #DFDFDF; + color: #2d3e50; + text-decoration: none; + padding: 0.4em 0.6em; +} + +.pmdesigner-suggestfields li { + left: 0px; + top: 0px; + width: auto; + height: auto; + position: relative; + z-index: auto; +} + +.pmdesigner-suggestfields a:hover { + background: #838486; + color: white; + cursor: pointer; +} + +.pmdesigner-areacontrol-operations { + height: 10%; +} + +.pmdesigner-areacontrol-operationsitem { + background: #c4c9ca; + height: 12px; + padding: 3px 9px; + margin: 0 2px; + text-align: center; + cursor: pointer; + border-radius: 3px; + opacity: 0.5; +} + +.pmdesigner-areacontrol-operationsitem:hover { + opacity: 1; +} + +.pmdesigner-areacontrol-areaformula { + height: auto; + margin: 2px; + background: #f5f2f2; + padding: 10px 2px; +} + +.GridFieldItem .pmui-field-label { + background: #888888; + color: white; + font-size: 12px; + padding: 2px; + display: inline-block; + margin: initial; +} + +.GridFieldItem .pmui-field-control { + padding: 3%; +} + +.GridFieldItem { + padding: initial; +} + +.gridfielditem-header { + border-bottom: 1px solid #c0c0c0; +} + +.GridFieldItem-textarea .pmui-textareacontrol { + resize: vertical; +} + +.GridFieldItem-configFieldIcon { + background: url("../img/config.png") no-repeat white; + display: inline-block; + width: 20%; + background-size: contain; + vertical-align: top; + height: 20px; +} + +.GridFieldItem-suggest .icon-field { + background: url("../img/suggest.png") no-repeat; + display: inline-block; + padding: 0.7em; + background-size: contain; + vertical-align: top; + float: right; +} + +.GridFieldItem-datetime .icon-field { + background: url("../img/datetime.png") no-repeat; + display: inline-block; + padding: 0.7em; + background-size: contain; + vertical-align: top; + float: right; +} + +.pmui-gridfield .gridfieldcell-bodycell { + vertical-align: top; + float: left; + background: white; + border-left: 1px solid #c0c0c0; +} + +.pmui-gridfield .GridField-list { + padding: 1px; + margin: 0px; + background: #c0c0c0; +} + +/*GridField-black-cell-contain +GridField-black-cell-icon +GridField-black-cell-message +*/ +.gridfieldcell-bodycell .GridField-black-cell-icon { + background: url(../img/addControl.png) no-repeat; + width: 100%; + height: 50%; + margin-left: 20%; + display: block; + background-size: contain; +} + +.gridfieldcell-bodycell .GridField-black-cell-contain { + text-align: center; + text-align: center; + color: black; + font-size: 14px; +} + +/*.pmui-gridfield { + box-sizing : border-box; + border : 2px solid #c0c0c0; + padding : 5px 5px 5px 8px; +}*/ +.GridFieldItem.GridFieldItem-text .GridFieldItem-iconControl { + background: url(../img/inputext.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-textarea .GridFieldItem-iconControl { + background: url(../img/textarea.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-dropdown .GridFieldItem-iconControl { + background: url(../img/select.png) no-repeat; + background-size: contain; + width: 89%; + padding: 7px 0px 7px 0; + margin: 2% 0 0 4%; +} + +.GridFieldItem.GridFieldItem-checkbox .GridFieldItem-iconControl { + background: url(../img/checkbox.png) no-repeat; + background-size: cover; + width: 47%; + height: 14px; + /* padding: 25px 75px 1px 1px; */ + margin: 3% 0 0 25%; +} + +.GridFieldItem.GridFieldItem-radio .GridFieldItem-iconControl { + background: url(../img/radio.png) no-repeat; + background-size: cover; + width: 47%; + height: 14px; + /* padding: 25px 75px 1px 1px; */ + margin: 3% 0 0 25%; +} + +.GridFieldItem.GridFieldItem-suggest .GridFieldItem-iconControl { + background: url(../img/inputext.png) no-repeat; + width: 80%; + height: 1.7em; + background-size: contain; + margin: 2% 1% 1% 11%; +} + +.GridField-listContainer { + overflow: auto; + height: inherit; + padding-left: 9px; +} + +.pmimagefield-imageContainer { + background: url(../img/image.png) no-repeat center #e7e7e7; + padding: 15px; + background-size: contain; + opacity: 0.5; +} + +.pmimagefield-commentContainer { + font-size: 12px; + font-style: italic; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-link { + background: url("../img/link_web.png") no-repeat center; + background-size: contain; + height: 30px; + width: 100%; + display: block; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-linkContainer { + text-align: center; + background-color: #F5F5F5; + border: 1px solid #DFDDDD; + height: 30px; + width: 100%; +} + +.pmui-pmlinkfield .PMLinkField-linkContainer { + padding-top: 8px; +} + +.pmui-pmlinkfield .PMLinkField-linkContainer .PMLinkField-link { + text-decoration: underline; + color: #53539e; + font-style: italic; +} + +.pmui-pmlinkfield.PMLinkField-noUrl .PMLinkField-linkContainer { + padding-top: initial; +} + +.pmui-pm-textlabelfield .pmui-textlabel-field { + margin-left: 10px; +} + +.pmui-pmformfield .pmFormField-formContainer { + text-align: center; + background-color: #F5F5F5; + border: 1px solid #DFDDDD; + height: 30px; + width: 100%; + padding-bottom: 2px; + padding-top: 2px; +} + +.pmui-pmformfield .pmFormField-formIcon { + background: url("../img/subform.png") no-repeat; + width: 28px; + height: 28px; + display: inline-block; + background-size: contain; +} + +.pmui-pmformfield .pmui-field-label { + background: #d3d0d0; + color: white; +} + +.pmui-pmformfield .pmFormField-editIcon { + background: url("../img/edit.png") no-repeat; + width: 18px; + height: 18px; + display: inline-block; + background-size: contain; + float: right; +} + +@font-face { + font-family: "SourceSansPro"; + src: url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot'); + src: url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.ttf') format('truetype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.eot') format('embedded-opentype'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.woff') format('woff'), url('../fonts/SourceSansPro-Regular/SourceSansPro-Regular-webfont.svg') format('svg'); +} +@font-face { + font-family: "SourceSansProBold"; + src: url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot'); + src: url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot?#iefix') format('embedded-opentype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.ttf') format('truetype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.eot') format('embedded-opentype'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.woff') format('woff'), url('../fonts/SourceSansPro-Bold/SourceSansPro-Bold-webfont.svg') format('svg'); +} +body { + font-family: 'SourceSansProRegular', Arial, Tahoma, Verdana; + background: #fff; + margin: 0; + padding: 0; +} +.fd-list { + /*list-style: none;*/ + border-color: #bbb; + border-style: solid; + border-width: 0 0 1px 0; + background: #f8f8f8; + font-size:11px; + padding: 0.3em; + cursor: pointer; +} +.fd-list:nth-child(odd) { + background: #eaebed; +} +.fd-list:hover { + background: #e0e0e0; +} +.fd-list-responsive { + position: relative; + font-size: 11px; + width: 54px; + height: 54px; + float: left; + text-align: center; + background: white; + margin: 4px; + padding: 2px; + border: 1px solid darkgray; +} +.fd-button-panel{ + text-align: right; + border-top: 1px solid #e5e5e5; + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 10px; +} +.fd-button { + font-family: "SourceSansPro", Arial, Tahoma, Verdana; + font-size: 14px; + display: inline-block; + text-decoration: none; + background-color: #1e91d1; + text-align: center; + transition: all .5s; + box-sizing: border-box; + border-radius: 2px; + margin: 0px 0px 0px 10px; + padding: 7px 20px; +} +.fd-button:hover { + opacity: 1; + opacity: 0.8; +} +.fd-button-success { + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; +} +.fd-button-link { + color: #383838; + text-decoration: underline; + background: none; + padding: initial; +} +.fd-button-create { + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; + background: #1fbc99 url(../img/ico_mor2.png) no-repeat 5px center; +} +.fd-button-yes{ + color: #fff !important; + background-color: #1fbc99; + border: 1px solid #1ba385; + font-size: 16px; +} +.fd-button-no{ + color: #fff !important; + background-color: #e4655f; + border: 1px solid #e14333; + font-size: 16px; +} +.fd-table tr:nth-child(odd) { + background-color: #E5E5E5; +} +.fd-table tr:nth-child(even) { + background-color: #F2F2F2; +} +.fd-tbody { + font-size: 11px; +} +.fd-table-th { + background: #3397e1; + color : white; + font-size: 11px; + padding: 6px 15px; + font-weight: inherit; +} +.fd-table-td { + padding: 2px; + border-bottom: 1px solid #D6D6D6; +} +.fd-table-td-error { + border: 1px solid red; +} +.fd-gridForm-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + height: 40px; + width: 100%; + margin-top:6px; +} +.fd-gridForm-grid { + list-style-type: none; + border:1px solid #C0C0C0; + height:84px; + overflow: hidden; + margin:20px 6px 6px 6px; + padding:6px; + white-space:nowrap; + /*overflow-x: scroll; + width: 600px;*/ +} +.fd-gridForm-grid > * { + padding: 1px 1px 1px 1px; + display: inline-block; + width: 130px; + text-align: left; + overflow: hidden; + vertical-align: top; + border:1px solid #C0C0C0; + margin-right:1px; + margin-top:20px; +} +.fd-gridForm-grid-placeholder { + background: rgba(128, 128, 128, 0.3); + border: 1px dashed #888; + height: 59px; + margin-top: 20px; +} +.grid-item-field{ + margin:20px 6px 6px 6px; + padding:4px; + position:relative; + border:1px solid white; + height: 30px; +} +.fd-gridForm-field-label{ + position: absolute; + top: 20px; + width: 60px; + overflow: hidden; +} +.fd-gridForm-grid-contentRequired { + position: absolute; + top: 20px; + left: 65px; + color:red; + display:none; +} +.fd-gridForm-grid-text { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-textarea { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-dropdown { + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-checkbox { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-checkgroup { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-radio { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + height: 18px; + border: 1px solid #e7e7e7; + overflow: hidden; +} +.fd-gridForm-grid-datetime { + height: 17px; + border: 1px solid #c0c0c0; + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-suggest { + height: 17px; + border: 1px solid #c0c0c0; + position: absolute; + left: 70px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-suggest-placeholder{ + color: gray; +} +.fd-gridForm-grid-hidden { + height: 17px; + border: 1px dashed #c0c0c0; + position: absolute; + left: 1px; + right: 1px; + top: 18px; +} +.fd-gridForm-grid-title { + padding: 4px; + font-family: "Montserrat",sans-serif; + font-size: 20px; + border-radius: 3px; + background: white; + color: #555151; + position: absolute; + left: 1px; + right: 1px; + overflow: hidden; +} +.fd-gridForm-grid-subtitle { + padding: 3px; + font-family: "Montserrat",sans-serif; + font-size: 15px; + border-radius: 3px; + background: white; + color: #555151; + position: absolute; + left: 1px; + right: 1px; + overflow: hidden; +} +.fd-gridForm-grid-annotation { + position: absolute; + left: 1px; + right: 1px; + top:18px; + overflow: hidden; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-link { + position: absolute; + left: 70px; + right: 1px; + top:18px; + overflow: hidden; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-image { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-file { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; + overflow: hidden; +} +.fd-gridForm-grid-submit { + position: absolute; + left: 1px; + right: 1px; + top: 18px; + overflow: hidden; +} +.fd-gridForm-grid-button { + position: absolute; + left: 1px; + right: 1px; + top: 18px; + overflow: hidden; +} +.fd-gridForm-grid-panel{ + border: 1px solid #DADADA; + background-color: #F6F5F3; + font-weight: bold; + position: absolute; + left: 1px; + right: 1px; + top: 1px; + overflow: hidden; + height: 34px; +} +.fd-gridForm-grid-msgpanel{ + border: 1px solid #DADADA; + background-color: #F6F5F3; + font-weight: bold; + position: absolute; + left: 1px; + right: 1px; + top: 1px; + overflow: hidden; + height: 34px; + color: red; +} +.fd-gridForm-grid-geomap { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-qrcode { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-signature { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-imagem { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-audiom { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-videom { + position: absolute; + left: 70px; + right: 1px; + top: 18px; + border: 1px solid #e7e7e7; + height: 18px; +} +.fd-gridForm-grid-griditem-gridtitle{ + position:absolute; + border:none; + margin:0px; + font-weight:bold; + left:6px; + width:auto; +} +.fd-gridForm-grid-griditem-gridplaceholder{ + position:absolute; + border:none; + margin:25px 0px 0px 0px; + color:gray; + left:6px; + width:auto; +} +.fd-gridForm-grid-griditem-columnRequired { + color: red; + display: none; +} +.fd-gridForm-grid-text-column { + box-sizing: border-box; + width: 100%; +} +.fd-gridForm-grid-textarea-column { + box-sizing: border-box; + width: 100%; + resize: vertical; +} +.fd-gridForm-grid-dropdown-column { + box-sizing: border-box; + width: 100%; +} +.fd-gridForm-grid-link-column { + margin-bottom: 2px; + color: blue; + text-decoration: underline; +} +.fd-designer-button{ + display:inline-block; + border-left:1px solid #70b5ec; + padding: 5px 6px; + cursor:pointer; + width:24px; + height:24px; +} +.fd-designer-button:hover{ + background: #2481c5; + color: #fff; +} +.fd-drag-drop{ + vertical-align:top; + cursor: move; +} +.fd-drag-drop-placeholder{ + background: rgba(128, 128, 128, 0.3); + border: 2px dashed #888; + height: 31px; +} +.fd-tooltip-date-format>div{ + overflow-x: hidden; + overflow-y: scroll; + height: 400px; + width: 309px; +} +.fd-tooltip{ + padding:3px; + border-radius: 0px; +} +.fd-message-error{ + color: #fff; + background: #F5736D; + padding: 4px 10px; + display: inline-block; +} + +ul.CodeMirror-hints { + z-index: 10000; +} +.ui-accordion-header { + color:white; + background:#3397e1; + border-top: 1px solid #3397e1; + border-bottom:1px solid #262932; + border-left:1px solid #262932; + border-right:1px solid #262932; + border-radius:initial; + font-size:12px; + text-align:center; +} +.ui-accordion-header.ui-state-active { + background: white; + color:#3397e1; +} +.ui-layout-pane-north{ + border:1px solid #2979b8; +} +.ui-layout-pane-center{ + border-top: none; + border-right: none; + border-bottom: none; +} +.ui-layout-toggler-west div { + width: 8px; + height: 35px; +} +.ui-datepicker { + border: 1px solid #DADADA; + background: #fcfdfd; + color: #222222; +} +.ui-datepicker-header { + border: 1px solid #fcfdfd; + background: white; + color: black; + font-weight: bold; +} +.ui-datepicker .ui-state-default:not(.ui-state-active):not(.ui-state-highlight) { + border: 1px solid #DADADA; + background: #fcfdfd; + font-weight: bold; + color: #2e6e9e; +} + +/* -- begin PMPopOver -- */ + +.mafe-popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + padding: 1px; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2); + box-shadow: 0 5px 10px rgba(0,0,0,.2); + white-space: normal; + text-align: center; + max-width: 300px; + opacity: 0; + -webkit-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +.mafe-popover.in { + opacity: 1; +} + +.mafe-popover-content { + padding: 9px 14px; +} + +.mafe-popover>.arrow, .mafe-popover>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.mafe-popover>.arrow:after { + border-width: 10px; + content: ""; +} + +.mafe-popover.right>.arrow:after { + content: " "; + left: 1px; + bottom: -10px; + border-left-width: 0; + border-right-color: #fff; +} + +.mafe-popover.left>.arrow:after { + content: " "; + right: 1px; + bottom: -10px; + border-right-width: 0; + border-left-color: #fff; +} + +.mafe-popover.top>.arrow:after { + content: " "; + bottom: 1px; + right: -10px; + border-bottom-width: 0; + border-top-color: #fff; +} + +.mafe-popover.bottom>.arrow:after { + content: " "; + top: 1px; + right: -10px; + border-top-width: 0; + border-bottom-color: #fff; +} + +.mafe-popover>.arrow { + border-width: 11px; +} + +.mafe-popover.right>.arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-left-width: 0; + border-right-color: rgba(0,0,0,.25); +} + +.mafe-popover.left>.arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: rgba(0,0,0,.25); +} + +.mafe-popover.top>.arrow { + right: 50%; + bottom: -11px; + margin-right: -11px; + border-bottom-width: 0; + border-top-color: rgba(0,0,0,.25); +} + +.mafe-popover.bottom>.arrow { + right: 50%; + top: -11px; + margin-right: -11px; + border-top-width: 0; + border-bottom-color: rgba(0,0,0,.25); +} + +.mafe-popover :before, .mafe-popover :after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* -- end PMPopOver -- */ + +.mafe-deprecated-control { + line-height: 1; + position: absolute; + top: 0; + right: 0; +} + +.mafe-deprecated-control::before { + font-family: FontAwesome; + content: "\f12a"; + color: white; + font-size: 10px; + width: 1.2em; + cursor: pointer; + height: 1.2em; + background: red; + display: inline-block; + text-align: center; + line-height: 1.2em; + border-radius: 100%; +} + +.mafe-popover.deprecated { + font-size: 11px; +} + +.mafe-deprecated-title { + font-size: 12px; + color: #B65858; + backgroud: none; + text-align: center; + font-weight: bold; +} + +.deprecated-ok-btn { + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.grid-item-field .mafe-deprecated-control { + left: 0; + width: 1.2em; + display: inline-block; +} + +.mafe-alert { + font-size: 12px; + text-align: left; + font-weight: normal; + padding: 15px 30px 15px 15px; + border: 1px solid #ebccd1; + color: #a94442; + background-color: #f2dede; + border-radius: 4px; +} + +.mafe-alert .button-close { + background: none; + border: none; + color: inherit; + position: relative; + right: -22px; + float: right; + outline: none; + cursor: pointer; +} + +.pm-mafe-grid-item .mafe-deprecated-control { + float: left; + position: relative; +} + +.datetime-gadget-class { + position: absolute; +} diff --git a/workflow/public_html/lib/mafe/mafe.min.js b/workflow/public_html/lib/mafe/mafe.min.js new file mode 100644 index 000000000..6f1caa6da --- /dev/null +++ b/workflow/public_html/lib/mafe/mafe.min.js @@ -0,0 +1,45813 @@ +/** + * configure and extend classes and prototypes similar to inheritance in + * another languages. The method detects if we trying to extend a method of an object + * or a function inserted into a prototype. + * @param {String|Object} classObj contains the value of the class that we want to take an method for modifying + * @param {Sting} method the name of the function that we will be modified or overwritten + * @param {function} additionalFunc contains a function with the new code or the additional code + * for modified the original function. + * + * @return {[type]} [returns the value of the function modified, with the new functionality in this context.] + */ + +var PMExtend = function (classObj, method, additionalFunc) { + var originalFunc; + if (classObj.prototype !== undefined) { + originalFunc = classObj.prototype[method]; + if (originalFunc !== undefined && typeof originalFunc === 'function') { + return function () { + var returnVal = originalFunc.apply(this, arguments); + if (returnVal) { + returnVal = additionalFunc.apply(this, [returnVal].concat(arguments)); + } else { + additionalFunc.apply(this, arguments); + } + return returnVal; + }; + + } else { + //You need to implement a catch on a higher level or at the plugin + throw new Error("Cannot extend method " + method + " in Class " + classObj.name); + } + } else { + originalFunc = classObj[method]; + if (originalFunc !== undefined && typeof originalFunc === 'function') { + return function () { + var res; + res = originalFunc.apply(this, arguments); + res = additionalFunc.apply(this, [res].concat(arguments)); + return res; + }; + } else { + //You need to implement a catch on a higher level or at the plugin + throw new Error("Cannot extend method " + method + " in Class " + classObj.name); + } + } +}; +/** + * @license + * Lo-Dash 2.4.1 (Custom Build) + * Build: `lodash modern -o ./dist/lodash.js` + * Copyright 2012-2013 The Dojo Foundation + * Based on Underscore.js 1.5.2 + * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Available under MIT license + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre ES5 environments */ + var undefined; + + /** Used to pool arrays and objects used internally */ + var arrayPool = [], + objectPool = []; + + /** Used to generate unique IDs */ + var idCounter = 0; + + /** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */ + var keyPrefix = +new Date + ''; + + /** Used as the size when optimizations are enabled for large arrays */ + var largeArraySize = 75; + + /** Used as the max size of the `arrayPool` and `objectPool` */ + var maxPoolSize = 40; + + /** Used to detect and test whitespace */ + var whitespace = ( + // whitespace + ' \t\x0B\f\xA0\ufeff' + + + // line terminators + '\n\r\u2028\u2029' + + + // unicode category "Zs" space separators + '\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000' + ); + + /** Used to match empty string literals in compiled template source */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** + * Used to match ES6 template delimiters + * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match regexp flags from their coerced string values */ + var reFlags = /\w*$/; + + /** Used to detected named functions */ + var reFuncName = /^\s*function[ \n\r\t]+\w/; + + /** Used to match "interpolate" template delimiters */ + var reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match leading whitespace and zeros to be removed */ + var reLeadingSpacesAndZeros = RegExp('^[' + whitespace + ']*0+(?=.$)'); + + /** Used to ensure capturing order of template delimiters */ + var reNoMatch = /($^)/; + + /** Used to detect functions containing a `this` reference */ + var reThis = /\bthis\b/; + + /** Used to match unescaped characters in compiled string literals */ + var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; + + /** Used to assign default `context` object properties */ + var contextProps = [ + 'Array', 'Boolean', 'Date', 'Function', 'Math', 'Number', 'Object', + 'RegExp', 'String', '_', 'attachEvent', 'clearTimeout', 'isFinite', 'isNaN', + 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify */ + var templateCounter = 0; + + /** `Object#toString` result shortcuts */ + var argsClass = '[object Arguments]', + arrayClass = '[object Array]', + boolClass = '[object Boolean]', + dateClass = '[object Date]', + funcClass = '[object Function]', + numberClass = '[object Number]', + objectClass = '[object Object]', + regexpClass = '[object RegExp]', + stringClass = '[object String]'; + + /** Used to identify object classifications that `_.clone` supports */ + var cloneableClasses = {}; + cloneableClasses[funcClass] = false; + cloneableClasses[argsClass] = cloneableClasses[arrayClass] = + cloneableClasses[boolClass] = cloneableClasses[dateClass] = + cloneableClasses[numberClass] = cloneableClasses[objectClass] = + cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; + + /** Used as an internal `_.debounce` options object */ + var debounceOptions = { + 'leading': false, + 'maxWait': 0, + 'trailing': false + }; + + /** Used as the property descriptor for `__bindData__` */ + var descriptor = { + 'configurable': false, + 'enumerable': false, + 'value': null, + 'writable': false + }; + + /** Used to determine if values are of the language type Object */ + var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false + }; + + /** Used to escape characters for inclusion in compiled string literals */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Used as a reference to the global object */ + var root = (objectTypes[typeof window] && window) || this; + + /** Detect free variable `exports` */ + var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; + + /** Detect free variable `module` */ + var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports` */ + var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; + + /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ + var freeGlobal = objectTypes[typeof global] && global; + if (freeGlobal && (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal)) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `_.indexOf` without support for binary searches + * or `fromIndex` constraints. + * + * @private + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value or `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + var index = (fromIndex || 0) - 1, + length = array ? array.length : 0; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * An implementation of `_.contains` for cache objects that mimics the return + * signature of `_.indexOf` by returning `0` if the value is found, else `-1`. + * + * @private + * @param {Object} cache The cache object to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns `0` if `value` is found, else `-1`. + */ + function cacheIndexOf(cache, value) { + var type = typeof value; + cache = cache.cache; + + if (type == 'boolean' || value == null) { + return cache[value] ? 0 : -1; + } + if (type != 'number' && type != 'string') { + type = 'object'; + } + var key = type == 'number' ? value : keyPrefix + value; + cache = (cache = cache[type]) && cache[key]; + + return type == 'object' + ? (cache && baseIndexOf(cache, value) > -1 ? 0 : -1) + : (cache ? 0 : -1); + } + + /** + * Adds a given value to the corresponding cache object. + * + * @private + * @param {*} value The value to add to the cache. + */ + function cachePush(value) { + var cache = this.cache, + type = typeof value; + + if (type == 'boolean' || value == null) { + cache[value] = true; + } else { + if (type != 'number' && type != 'string') { + type = 'object'; + } + var key = type == 'number' ? value : keyPrefix + value, + typeCache = cache[type] || (cache[type] = {}); + + if (type == 'object') { + (typeCache[key] || (typeCache[key] = [])).push(value); + } else { + typeCache[key] = true; + } + } + } + + /** + * Used by `_.max` and `_.min` as the default callback when a given + * collection is a string value. + * + * @private + * @param {string} value The character to inspect. + * @returns {number} Returns the code unit of given character. + */ + function charAtCallback(value) { + return value.charCodeAt(0); + } + + /** + * Used by `sortBy` to compare transformed `collection` elements, stable sorting + * them in ascending order. + * + * @private + * @param {Object} a The object to compare to `b`. + * @param {Object} b The object to compare to `a`. + * @returns {number} Returns the sort order indicator of `1` or `-1`. + */ + function compareAscending(a, b) { + var ac = a.criteria, + bc = b.criteria, + index = -1, + length = ac.length; + + while (++index < length) { + var value = ac[index], + other = bc[index]; + + if (value !== other) { + if (value > other || typeof value == 'undefined') { + return 1; + } + if (value < other || typeof other == 'undefined') { + return -1; + } + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to return the same value for + // `a` and `b`. See https://github.com/jashkenas/underscore/pull/1247 + // + // This also ensures a stable sort in V8 and other engines. + // See http://code.google.com/p/v8/issues/detail?id=90 + return a.index - b.index; + } + + /** + * Creates a cache object to optimize linear searches of large arrays. + * + * @private + * @param {Array} [array=[]] The array to search. + * @returns {null|Object} Returns the cache object or `null` if caching should not be used. + */ + function createCache(array) { + var index = -1, + length = array.length, + first = array[0], + mid = array[(length / 2) | 0], + last = array[length - 1]; + + if (first && typeof first == 'object' && + mid && typeof mid == 'object' && last && typeof last == 'object') { + return false; + } + var cache = getObject(); + cache['false'] = cache['null'] = cache['true'] = cache['undefined'] = false; + + var result = getObject(); + result.array = array; + result.cache = cache; + result.push = cachePush; + + while (++index < length) { + result.push(array[index]); + } + return result; + } + + /** + * Used by `template` to escape characters for inclusion in compiled + * string literals. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(match) { + return '\\' + stringEscapes[match]; + } + + /** + * Gets an array from the array pool or creates a new one if the pool is empty. + * + * @private + * @returns {Array} The array from the pool. + */ + function getArray() { + return arrayPool.pop() || []; + } + + /** + * Gets an object from the object pool or creates a new one if the pool is empty. + * + * @private + * @returns {Object} The object from the pool. + */ + function getObject() { + return objectPool.pop() || { + 'array': null, + 'cache': null, + 'criteria': null, + 'false': false, + 'index': 0, + 'null': false, + 'number': null, + 'object': null, + 'push': null, + 'string': null, + 'true': false, + 'undefined': false, + 'value': null + }; + } + + /** + * Releases the given array back to the array pool. + * + * @private + * @param {Array} [array] The array to release. + */ + function releaseArray(array) { + array.length = 0; + if (arrayPool.length < maxPoolSize) { + arrayPool.push(array); + } + } + + /** + * Releases the given object back to the object pool. + * + * @private + * @param {Object} [object] The object to release. + */ + function releaseObject(object) { + var cache = object.cache; + if (cache) { + releaseObject(cache); + } + object.array = object.cache = object.criteria = object.object = object.number = object.string = object.value = null; + if (objectPool.length < maxPoolSize) { + objectPool.push(object); + } + } + + /** + * Slices the `collection` from the `start` index up to, but not including, + * the `end` index. + * + * Note: This function is used instead of `Array#slice` to support node lists + * in IE < 9 and to ensure dense arrays are returned. + * + * @private + * @param {Array|Object|string} collection The collection to slice. + * @param {number} start The start index. + * @param {number} end The end index. + * @returns {Array} Returns the new array. + */ + function slice(array, start, end) { + start || (start = 0); + if (typeof end == 'undefined') { + end = array ? array.length : 0; + } + var index = -1, + length = end - start || 0, + result = Array(length < 0 ? 0 : length); + + while (++index < length) { + result[index] = array[start + index]; + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new `lodash` function using the given context object. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Object} [context=root] The context object. + * @returns {Function} Returns the `lodash` function. + */ + function runInContext(context) { + // Avoid issues with some ES3 environments that attempt to use values, named + // after built-in constructors like `Object`, for the creation of literals. + // ES5 clears this up by stating that literals must use built-in constructors. + // See http://es5.github.io/#x11.1.5. + context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; + + /** Native constructor references */ + var Array = context.Array, + Boolean = context.Boolean, + Date = context.Date, + Function = context.Function, + Math = context.Math, + Number = context.Number, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** + * Used for `Array` method references. + * + * Normally `Array.prototype` would suffice, however, using an array literal + * avoids issues in Narwhal. + */ + var arrayRef = []; + + /** Used for native method references */ + var objectProto = Object.prototype; + + /** Used to restore the original `_` reference in `noConflict` */ + var oldDash = context._; + + /** Used to resolve the internal [[Class]] of values */ + var toString = objectProto.toString; + + /** Used to detect if a method is native */ + var reNative = RegExp('^' + + String(toString) + .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + .replace(/toString| for [^\]]+/g, '.*?') + '$' + ); + + /** Native method shortcuts */ + var ceil = Math.ceil, + clearTimeout = context.clearTimeout, + floor = Math.floor, + fnToString = Function.prototype.toString, + getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, + hasOwnProperty = objectProto.hasOwnProperty, + push = arrayRef.push, + setTimeout = context.setTimeout, + splice = arrayRef.splice, + unshift = arrayRef.unshift; + + /** Used to set meta data on functions */ + var defineProperty = (function() { + // IE 8 only accepts DOM elements + try { + var o = {}, + func = isNative(func = Object.defineProperty) && func, + result = func(o, o, o) && func; + } catch(e) { } + return result; + }()); + + /* Native method shortcuts for methods with the same name as other `lodash` methods */ + var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate, + nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, + nativeIsFinite = context.isFinite, + nativeIsNaN = context.isNaN, + nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, + nativeMax = Math.max, + nativeMin = Math.min, + nativeParseInt = context.parseInt, + nativeRandom = Math.random; + + /** Used to lookup a built-in constructor by [[Class]] */ + var ctorByClass = {}; + ctorByClass[arrayClass] = Array; + ctorByClass[boolClass] = Boolean; + ctorByClass[dateClass] = Date; + ctorByClass[funcClass] = Function; + ctorByClass[objectClass] = Object; + ctorByClass[numberClass] = Number; + ctorByClass[regexpClass] = RegExp; + ctorByClass[stringClass] = String; + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps the given value to enable intuitive + * method chaining. + * + * In addition to Lo-Dash methods, wrappers also have the following `Array` methods: + * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, + * and `unshift` + * + * Chaining is supported in custom builds as long as the `value` method is + * implicitly or explicitly included in the build. + * + * The chainable wrapper functions are: + * `after`, `assign`, `bind`, `bindAll`, `bindKey`, `chain`, `compact`, + * `compose`, `concat`, `countBy`, `create`, `createCallback`, `curry`, + * `debounce`, `defaults`, `defer`, `delay`, `difference`, `filter`, `flatten`, + * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`, + * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`, + * `invoke`, `keys`, `map`, `max`, `memoize`, `merge`, `min`, `object`, `omit`, + * `once`, `pairs`, `partial`, `partialRight`, `pick`, `pluck`, `pull`, `push`, + * `range`, `reject`, `remove`, `rest`, `reverse`, `shuffle`, `slice`, `sort`, + * `sortBy`, `splice`, `tap`, `throttle`, `times`, `toArray`, `transform`, + * `union`, `uniq`, `unshift`, `unzip`, `values`, `where`, `without`, `wrap`, + * and `zip` + * + * The non-chainable wrapper functions are: + * `clone`, `cloneDeep`, `contains`, `escape`, `every`, `find`, `findIndex`, + * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `has`, `identity`, + * `indexOf`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`, + * `isEmpty`, `isEqual`, `isFinite`, `isFunction`, `isNaN`, `isNull`, `isNumber`, + * `isObject`, `isPlainObject`, `isRegExp`, `isString`, `isUndefined`, `join`, + * `lastIndexOf`, `mixin`, `noConflict`, `parseInt`, `pop`, `random`, `reduce`, + * `reduceRight`, `result`, `shift`, `size`, `some`, `sortedIndex`, `runInContext`, + * `template`, `unescape`, `uniqueId`, and `value` + * + * The wrapper functions `first` and `last` return wrapped values when `n` is + * provided, otherwise they return unwrapped values. + * + * Explicit chaining can be enabled by using the `_.chain` method. + * + * @name _ + * @constructor + * @category Chaining + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns a `lodash` instance. + * @example + * + * var wrapped = _([1, 2, 3]); + * + * // returns an unwrapped value + * wrapped.reduce(function(sum, num) { + * return sum + num; + * }); + * // => 6 + * + * // returns a wrapped value + * var squares = wrapped.map(function(num) { + * return num * num; + * }); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + // don't wrap if already wrapped, even if wrapped by a different `lodash` constructor + return (value && typeof value == 'object' && !isArray(value) && hasOwnProperty.call(value, '__wrapped__')) + ? value + : new lodashWrapper(value); + } + + /** + * A fast path for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap in a `lodash` instance. + * @param {boolean} chainAll A flag to enable chaining for all methods + * @returns {Object} Returns a `lodash` instance. + */ + function lodashWrapper(value, chainAll) { + this.__chain__ = !!chainAll; + this.__wrapped__ = value; + } + // ensure `new lodashWrapper` is an instance of `lodash` + lodashWrapper.prototype = lodash.prototype; + + /** + * An object used to flag environments features. + * + * @static + * @memberOf _ + * @type Object + */ + var support = lodash.support = {}; + + /** + * Detect if functions can be decompiled by `Function#toString` + * (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps). + * + * @memberOf _.support + * @type boolean + */ + support.funcDecomp = !isNative(context.WinRTError) && reThis.test(runInContext); + + /** + * Detect if `Function#name` is supported (all but IE). + * + * @memberOf _.support + * @type boolean + */ + support.funcNames = typeof Function.name == 'string'; + + /** + * By default, the template delimiters used by Lo-Dash are similar to those in + * embedded Ruby (ERB). Change the following template settings to use alternative + * delimiters. + * + * @static + * @memberOf _ + * @type Object + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'escape': /<%-([\s\S]+?)%>/g, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'evaluate': /<%([\s\S]+?)%>/g, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type RegExp + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type string + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type Object + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type Function + */ + '_': lodash + } + }; + + /*--------------------------------------------------------------------------*/ + + /** + * The base implementation of `_.bind` that creates the bound function and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new bound function. + */ + function baseBind(bindData) { + var func = bindData[0], + partialArgs = bindData[2], + thisArg = bindData[4]; + + function bound() { + // `Function#bind` spec + // http://es5.github.io/#x15.3.4.5 + if (partialArgs) { + // avoid `arguments` object deoptimizations by using `slice` instead + // of `Array.prototype.slice.call` and not assigning `arguments` to a + // variable as a ternary expression + var args = slice(partialArgs); + push.apply(args, arguments); + } + // mimic the constructor's `return` behavior + // http://es5.github.io/#x13.2.2 + if (this instanceof bound) { + // ensure `new bound` is an instance of `func` + var thisBinding = baseCreate(func.prototype), + result = func.apply(thisBinding, args || arguments); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisArg, args || arguments); + } + setBindData(bound, bindData); + return bound; + } + + /** + * The base implementation of `_.clone` without argument juggling or support + * for `thisArg` binding. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} [isDeep=false] Specify a deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates clones with source counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, isDeep, callback, stackA, stackB) { + if (callback) { + var result = callback(value); + if (typeof result != 'undefined') { + return result; + } + } + // inspect [[Class]] + var isObj = isObject(value); + if (isObj) { + var className = toString.call(value); + if (!cloneableClasses[className]) { + return value; + } + var ctor = ctorByClass[className]; + switch (className) { + case boolClass: + case dateClass: + return new ctor(+value); + + case numberClass: + case stringClass: + return new ctor(value); + + case regexpClass: + result = ctor(value.source, reFlags.exec(value)); + result.lastIndex = value.lastIndex; + return result; + } + } else { + return value; + } + var isArr = isArray(value); + if (isDeep) { + // check for circular references and return corresponding clone + var initedStack = !stackA; + stackA || (stackA = getArray()); + stackB || (stackB = getArray()); + + var length = stackA.length; + while (length--) { + if (stackA[length] == value) { + return stackB[length]; + } + } + result = isArr ? ctor(value.length) : {}; + } + else { + result = isArr ? slice(value) : assign({}, value); + } + // add array properties assigned by `RegExp#exec` + if (isArr) { + if (hasOwnProperty.call(value, 'index')) { + result.index = value.index; + } + if (hasOwnProperty.call(value, 'input')) { + result.input = value.input; + } + } + // exit for shallow clone + if (!isDeep) { + return result; + } + // add the source value to the stack of traversed objects + // and associate it with its clone + stackA.push(value); + stackB.push(result); + + // recursively populate clone (susceptible to call stack limits) + (isArr ? forEach : forOwn)(value, function(objValue, key) { + result[key] = baseClone(objValue, isDeep, callback, stackA, stackB); + }); + + if (initedStack) { + releaseArray(stackA); + releaseArray(stackB); + } + return result; + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} prototype The object to inherit from. + * @returns {Object} Returns the new object. + */ + function baseCreate(prototype, properties) { + return isObject(prototype) ? nativeCreate(prototype) : {}; + } + // fallback for browsers without `Object.create` + if (!nativeCreate) { + baseCreate = (function() { + function Object() {} + return function(prototype) { + if (isObject(prototype)) { + Object.prototype = prototype; + var result = new Object; + Object.prototype = null; + } + return result || context.Object(); + }; + }()); + } + + /** + * The base implementation of `_.createCallback` without support for creating + * "_.pluck" or "_.where" style callbacks. + * + * @private + * @param {*} [func=identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of the created callback. + * @param {number} [argCount] The number of arguments the callback accepts. + * @returns {Function} Returns a callback function. + */ + function baseCreateCallback(func, thisArg, argCount) { + if (typeof func != 'function') { + return identity; + } + // exit early for no `thisArg` or already bound by `Function#bind` + if (typeof thisArg == 'undefined' || !('prototype' in func)) { + return func; + } + var bindData = func.__bindData__; + if (typeof bindData == 'undefined') { + if (support.funcNames) { + bindData = !func.name; + } + bindData = bindData || !support.funcDecomp; + if (!bindData) { + var source = fnToString.call(func); + if (!support.funcNames) { + bindData = !reFuncName.test(source); + } + if (!bindData) { + // checks if `func` references the `this` keyword and stores the result + bindData = reThis.test(source); + setBindData(func, bindData); + } + } + } + // exit early if there are no `this` references or `func` is bound + if (bindData === false || (bindData !== true && bindData[1] & 1)) { + return func; + } + switch (argCount) { + case 1: return function(value) { + return func.call(thisArg, value); + }; + case 2: return function(a, b) { + return func.call(thisArg, a, b); + }; + case 3: return function(value, index, collection) { + return func.call(thisArg, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(thisArg, accumulator, value, index, collection); + }; + } + return bind(func, thisArg); + } + + /** + * The base implementation of `createWrapper` that creates the wrapper and + * sets its meta data. + * + * @private + * @param {Array} bindData The bind data array. + * @returns {Function} Returns the new function. + */ + function baseCreateWrapper(bindData) { + var func = bindData[0], + bitmask = bindData[1], + partialArgs = bindData[2], + partialRightArgs = bindData[3], + thisArg = bindData[4], + arity = bindData[5]; + + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + key = func; + + function bound() { + var thisBinding = isBind ? thisArg : this; + if (partialArgs) { + var args = slice(partialArgs); + push.apply(args, arguments); + } + if (partialRightArgs || isCurry) { + args || (args = slice(arguments)); + if (partialRightArgs) { + push.apply(args, partialRightArgs); + } + if (isCurry && args.length < arity) { + bitmask |= 16 & ~32; + return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]); + } + } + args || (args = arguments); + if (isBindKey) { + func = thisBinding[key]; + } + if (this instanceof bound) { + thisBinding = baseCreate(func.prototype); + var result = func.apply(thisBinding, args); + return isObject(result) ? result : thisBinding; + } + return func.apply(thisBinding, args); + } + setBindData(bound, bindData); + return bound; + } + + /** + * The base implementation of `_.difference` that accepts a single array + * of values to exclude. + * + * @private + * @param {Array} array The array to process. + * @param {Array} [values] The array of values to exclude. + * @returns {Array} Returns a new array of filtered values. + */ + function baseDifference(array, values) { + var index = -1, + indexOf = getIndexOf(), + length = array ? array.length : 0, + isLarge = length >= largeArraySize && indexOf === baseIndexOf, + result = []; + + if (isLarge) { + var cache = createCache(values); + if (cache) { + indexOf = cacheIndexOf; + values = cache; + } else { + isLarge = false; + } + } + while (++index < length) { + var value = array[index]; + if (indexOf(values, value) < 0) { + result.push(value); + } + } + if (isLarge) { + releaseObject(values); + } + return result; + } + + /** + * The base implementation of `_.flatten` without support for callback + * shorthands or `thisArg` binding. + * + * @private + * @param {Array} array The array to flatten. + * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. + * @param {boolean} [isStrict=false] A flag to restrict flattening to arrays and `arguments` objects. + * @param {number} [fromIndex=0] The index to start from. + * @returns {Array} Returns a new flattened array. + */ + function baseFlatten(array, isShallow, isStrict, fromIndex) { + var index = (fromIndex || 0) - 1, + length = array ? array.length : 0, + result = []; + + while (++index < length) { + var value = array[index]; + + if (value && typeof value == 'object' && typeof value.length == 'number' + && (isArray(value) || isArguments(value))) { + // recursively flatten arrays (susceptible to call stack limits) + if (!isShallow) { + value = baseFlatten(value, isShallow, isStrict); + } + var valIndex = -1, + valLength = value.length, + resIndex = result.length; + + result.length += valLength; + while (++valIndex < valLength) { + result[resIndex++] = value[valIndex]; + } + } else if (!isStrict) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.isEqual`, without support for `thisArg` binding, + * that allows partial "_.where" style comparisons. + * + * @private + * @param {*} a The value to compare. + * @param {*} b The other value to compare. + * @param {Function} [callback] The function to customize comparing values. + * @param {Function} [isWhere=false] A flag to indicate performing partial comparisons. + * @param {Array} [stackA=[]] Tracks traversed `a` objects. + * @param {Array} [stackB=[]] Tracks traversed `b` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(a, b, callback, isWhere, stackA, stackB) { + // used to indicate that when comparing objects, `a` has at least the properties of `b` + if (callback) { + var result = callback(a, b); + if (typeof result != 'undefined') { + return !!result; + } + } + // exit early for identical values + if (a === b) { + // treat `+0` vs. `-0` as not equal + return a !== 0 || (1 / a == 1 / b); + } + var type = typeof a, + otherType = typeof b; + + // exit early for unlike primitive values + if (a === a && + !(a && objectTypes[type]) && + !(b && objectTypes[otherType])) { + return false; + } + // exit early for `null` and `undefined` avoiding ES3's Function#call behavior + // http://es5.github.io/#x15.3.4.4 + if (a == null || b == null) { + return a === b; + } + // compare [[Class]] names + var className = toString.call(a), + otherClass = toString.call(b); + + if (className == argsClass) { + className = objectClass; + } + if (otherClass == argsClass) { + otherClass = objectClass; + } + if (className != otherClass) { + return false; + } + switch (className) { + case boolClass: + case dateClass: + // coerce dates and booleans to numbers, dates to milliseconds and booleans + // to `1` or `0` treating invalid dates coerced to `NaN` as not equal + return +a == +b; + + case numberClass: + // treat `NaN` vs. `NaN` as equal + return (a != +a) + ? b != +b + // but treat `+0` vs. `-0` as not equal + : (a == 0 ? (1 / a == 1 / b) : a == +b); + + case regexpClass: + case stringClass: + // coerce regexes to strings (http://es5.github.io/#x15.10.6.4) + // treat string primitives and their corresponding object instances as equal + return a == String(b); + } + var isArr = className == arrayClass; + if (!isArr) { + // unwrap any `lodash` wrapped values + var aWrapped = hasOwnProperty.call(a, '__wrapped__'), + bWrapped = hasOwnProperty.call(b, '__wrapped__'); + + if (aWrapped || bWrapped) { + return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB); + } + // exit for functions and DOM nodes + if (className != objectClass) { + return false; + } + // in older versions of Opera, `arguments` objects have `Array` constructors + var ctorA = a.constructor, + ctorB = b.constructor; + + // non `Object` object instances with different constructors are not equal + if (ctorA != ctorB && + !(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) && + ('constructor' in a && 'constructor' in b) + ) { + return false; + } + } + // assume cyclic structures are equal + // the algorithm for detecting cyclic structures is adapted from ES 5.1 + // section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3) + var initedStack = !stackA; + stackA || (stackA = getArray()); + stackB || (stackB = getArray()); + + var length = stackA.length; + while (length--) { + if (stackA[length] == a) { + return stackB[length] == b; + } + } + var size = 0; + result = true; + + // add `a` and `b` to the stack of traversed objects + stackA.push(a); + stackB.push(b); + + // recursively compare objects and arrays (susceptible to call stack limits) + if (isArr) { + // compare lengths to determine if a deep comparison is necessary + length = a.length; + size = b.length; + result = size == length; + + if (result || isWhere) { + // deep compare the contents, ignoring non-numeric properties + while (size--) { + var index = length, + value = b[size]; + + if (isWhere) { + while (index--) { + if ((result = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) { + break; + } + } + } else if (!(result = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) { + break; + } + } + } + } + else { + // deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys` + // which, in this case, is more costly + forIn(b, function(value, key, b) { + if (hasOwnProperty.call(b, key)) { + // count the number of properties. + size++; + // deep compare each property value. + return (result = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB)); + } + }); + + if (result && !isWhere) { + // ensure both objects have the same number of properties + forIn(a, function(value, key, a) { + if (hasOwnProperty.call(a, key)) { + // `size` will be `-1` if `a` has more properties than `b` + return (result = --size > -1); + } + }); + } + } + stackA.pop(); + stackB.pop(); + + if (initedStack) { + releaseArray(stackA); + releaseArray(stackB); + } + return result; + } + + /** + * The base implementation of `_.merge` without argument juggling or support + * for `thisArg` binding. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {Function} [callback] The function to customize merging properties. + * @param {Array} [stackA=[]] Tracks traversed source objects. + * @param {Array} [stackB=[]] Associates values with source counterparts. + */ + function baseMerge(object, source, callback, stackA, stackB) { + (isArray(source) ? forEach : forOwn)(source, function(source, key) { + var found, + isArr, + result = source, + value = object[key]; + + if (source && ((isArr = isArray(source)) || isPlainObject(source))) { + // avoid merging previously merged cyclic sources + var stackLength = stackA.length; + while (stackLength--) { + if ((found = stackA[stackLength] == source)) { + value = stackB[stackLength]; + break; + } + } + if (!found) { + var isShallow; + if (callback) { + result = callback(value, source); + if ((isShallow = typeof result != 'undefined')) { + value = result; + } + } + if (!isShallow) { + value = isArr + ? (isArray(value) ? value : []) + : (isPlainObject(value) ? value : {}); + } + // add `source` and associated `value` to the stack of traversed objects + stackA.push(source); + stackB.push(value); + + // recursively merge objects and arrays (susceptible to call stack limits) + if (!isShallow) { + baseMerge(value, source, callback, stackA, stackB); + } + } + } + else { + if (callback) { + result = callback(value, source); + if (typeof result == 'undefined') { + result = source; + } + } + if (typeof result != 'undefined') { + value = result; + } + } + object[key] = value; + }); + } + + /** + * The base implementation of `_.random` without argument juggling or support + * for returning floating-point numbers. + * + * @private + * @param {number} min The minimum possible value. + * @param {number} max The maximum possible value. + * @returns {number} Returns a random number. + */ + function baseRandom(min, max) { + return min + floor(nativeRandom() * (max - min + 1)); + } + + /** + * The base implementation of `_.uniq` without support for callback shorthands + * or `thisArg` binding. + * + * @private + * @param {Array} array The array to process. + * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. + * @param {Function} [callback] The function called per iteration. + * @returns {Array} Returns a duplicate-value-free array. + */ + function baseUniq(array, isSorted, callback) { + var index = -1, + indexOf = getIndexOf(), + length = array ? array.length : 0, + result = []; + + var isLarge = !isSorted && length >= largeArraySize && indexOf === baseIndexOf, + seen = (callback || isLarge) ? getArray() : result; + + if (isLarge) { + var cache = createCache(seen); + indexOf = cacheIndexOf; + seen = cache; + } + while (++index < length) { + var value = array[index], + computed = callback ? callback(value, index, array) : value; + + if (isSorted + ? !index || seen[seen.length - 1] !== computed + : indexOf(seen, computed) < 0 + ) { + if (callback || isLarge) { + seen.push(computed); + } + result.push(value); + } + } + if (isLarge) { + releaseArray(seen.array); + releaseObject(seen); + } else if (callback) { + releaseArray(seen); + } + return result; + } + + /** + * Creates a function that aggregates a collection, creating an object composed + * of keys generated from the results of running each element of the collection + * through a callback. The given `setter` function sets the keys and values + * of the composed object. + * + * @private + * @param {Function} setter The setter function. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter) { + return function(collection, callback, thisArg) { + var result = {}; + callback = lodash.createCallback(callback, thisArg, 3); + + var index = -1, + length = collection ? collection.length : 0; + + if (typeof length == 'number') { + while (++index < length) { + var value = collection[index]; + setter(result, value, callback(value, index, collection), collection); + } + } else { + forOwn(collection, function(value, key, collection) { + setter(result, value, callback(value, key, collection), collection); + }); + } + return result; + }; + } + + /** + * Creates a function that, when called, either curries or invokes `func` + * with an optional `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to reference. + * @param {number} bitmask The bitmask of method flags to compose. + * The bitmask may be composed of the following flags: + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` + * 8 - `_.curry` (bound) + * 16 - `_.partial` + * 32 - `_.partialRight` + * @param {Array} [partialArgs] An array of arguments to prepend to those + * provided to the new function. + * @param {Array} [partialRightArgs] An array of arguments to append to those + * provided to the new function. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new function. + */ + function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) { + var isBind = bitmask & 1, + isBindKey = bitmask & 2, + isCurry = bitmask & 4, + isCurryBound = bitmask & 8, + isPartial = bitmask & 16, + isPartialRight = bitmask & 32; + + if (!isBindKey && !isFunction(func)) { + throw new TypeError; + } + if (isPartial && !partialArgs.length) { + bitmask &= ~16; + isPartial = partialArgs = false; + } + if (isPartialRight && !partialRightArgs.length) { + bitmask &= ~32; + isPartialRight = partialRightArgs = false; + } + var bindData = func && func.__bindData__; + if (bindData && bindData !== true) { + // clone `bindData` + bindData = slice(bindData); + if (bindData[2]) { + bindData[2] = slice(bindData[2]); + } + if (bindData[3]) { + bindData[3] = slice(bindData[3]); + } + // set `thisBinding` is not previously bound + if (isBind && !(bindData[1] & 1)) { + bindData[4] = thisArg; + } + // set if previously bound but not currently (subsequent curried functions) + if (!isBind && bindData[1] & 1) { + bitmask |= 8; + } + // set curried arity if not yet set + if (isCurry && !(bindData[1] & 4)) { + bindData[5] = arity; + } + // append partial left arguments + if (isPartial) { + push.apply(bindData[2] || (bindData[2] = []), partialArgs); + } + // append partial right arguments + if (isPartialRight) { + unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs); + } + // merge flags + bindData[1] |= bitmask; + return createWrapper.apply(null, bindData); + } + // fast path for `_.bind` + var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper; + return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]); + } + + /** + * Used by `escape` to convert characters to HTML entities. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeHtmlChar(match) { + return htmlEscapes[match]; + } + + /** + * Gets the appropriate "indexOf" function. If the `_.indexOf` method is + * customized, this method returns the custom method, otherwise it returns + * the `baseIndexOf` function. + * + * @private + * @returns {Function} Returns the "indexOf" function. + */ + function getIndexOf() { + var result = (result = lodash.indexOf) === indexOf ? baseIndexOf : result; + return result; + } + + /** + * Checks if `value` is a native function. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. + */ + function isNative(value) { + return typeof value == 'function' && reNative.test(value); + } + + /** + * Sets `this` binding data on a given function. + * + * @private + * @param {Function} func The function to set data on. + * @param {Array} value The data array to set. + */ + var setBindData = !defineProperty ? noop : function(func, value) { + descriptor.value = value; + defineProperty(func, '__bindData__', descriptor); + }; + + /** + * A fallback implementation of `isPlainObject` which checks if a given value + * is an object created by the `Object` constructor, assuming objects created + * by the `Object` constructor have no inherited enumerable properties and that + * there are no `Object.prototype` extensions. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + */ + function shimIsPlainObject(value) { + var ctor, + result; + + // avoid non Object objects, `arguments` objects, and DOM elements + if (!(value && toString.call(value) == objectClass) || + (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor))) { + return false; + } + // In most environments an object's own properties are iterated before + // its inherited properties. If the last iterated property is an object's + // own property then there are no inherited enumerable properties. + forIn(value, function(value, key) { + result = key; + }); + return typeof result == 'undefined' || hasOwnProperty.call(value, result); + } + + /** + * Used by `unescape` to convert HTML entities to characters. + * + * @private + * @param {string} match The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + function unescapeHtmlChar(match) { + return htmlUnescapes[match]; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Checks if `value` is an `arguments` object. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an `arguments` object, else `false`. + * @example + * + * (function() { return _.isArguments(arguments); })(1, 2, 3); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + function isArguments(value) { + return value && typeof value == 'object' && typeof value.length == 'number' && + toString.call(value) == argsClass || false; + } + + /** + * Checks if `value` is an array. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an array, else `false`. + * @example + * + * (function() { return _.isArray(arguments); })(); + * // => false + * + * _.isArray([1, 2, 3]); + * // => true + */ + var isArray = nativeIsArray || function(value) { + return value && typeof value == 'object' && typeof value.length == 'number' && + toString.call(value) == arrayClass || false; + }; + + /** + * A fallback implementation of `Object.keys` which produces an array of the + * given object's own enumerable property names. + * + * @private + * @type Function + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + */ + var shimKeys = function(object) { + var index, iterable = object, result = []; + if (!iterable) return result; + if (!(objectTypes[typeof object])) return result; + for (index in iterable) { + if (hasOwnProperty.call(iterable, index)) { + result.push(index); + } + } + return result + }; + + /** + * Creates an array composed of the own enumerable property names of an object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + * @example + * + * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); + * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) + */ + var keys = !nativeKeys ? shimKeys : function(object) { + if (!isObject(object)) { + return []; + } + return nativeKeys(object); + }; + + /** + * Used to convert characters to HTML entities: + * + * Though the `>` character is escaped for symmetry, characters like `>` and `/` + * don't require escaping in HTML and have no special meaning unless they're part + * of a tag or an unquoted attribute value. + * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") + */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to convert HTML entities to characters */ + var htmlUnescapes = invert(htmlEscapes); + + /** Used to match HTML entities and HTML characters */ + var reEscapedHtml = RegExp('(' + keys(htmlUnescapes).join('|') + ')', 'g'), + reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); + + /*--------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object. Subsequent sources will overwrite property assignments of previous + * sources. If a callback is provided it will be executed to produce the + * assigned values. The callback is bound to `thisArg` and invoked with two + * arguments; (objectValue, sourceValue). + * + * @static + * @memberOf _ + * @type Function + * @alias extend + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param {Function} [callback] The function to customize assigning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the destination object. + * @example + * + * _.assign({ 'name': 'fred' }, { 'employer': 'slate' }); + * // => { 'name': 'fred', 'employer': 'slate' } + * + * var defaults = _.partialRight(_.assign, function(a, b) { + * return typeof a == 'undefined' ? b : a; + * }); + * + * var object = { 'name': 'barney' }; + * defaults(object, { 'name': 'fred', 'employer': 'slate' }); + * // => { 'name': 'barney', 'employer': 'slate' } + */ + var assign = function(object, source, guard) { + var index, iterable = object, result = iterable; + if (!iterable) return result; + var args = arguments, + argsIndex = 0, + argsLength = typeof guard == 'number' ? 2 : args.length; + if (argsLength > 3 && typeof args[argsLength - 2] == 'function') { + var callback = baseCreateCallback(args[--argsLength - 1], args[argsLength--], 2); + } else if (argsLength > 2 && typeof args[argsLength - 1] == 'function') { + callback = args[--argsLength]; + } + while (++argsIndex < argsLength) { + iterable = args[argsIndex]; + if (iterable && objectTypes[typeof iterable]) { + var ownIndex = -1, + ownProps = objectTypes[typeof iterable] && keys(iterable), + length = ownProps ? ownProps.length : 0; + + while (++ownIndex < length) { + index = ownProps[ownIndex]; + result[index] = callback ? callback(result[index], iterable[index]) : iterable[index]; + } + } + } + return result + }; + + /** + * Creates a clone of `value`. If `isDeep` is `true` nested objects will also + * be cloned, otherwise they will be assigned by reference. If a callback + * is provided it will be executed to produce the cloned values. If the + * callback returns `undefined` cloning will be handled by the method instead. + * The callback is bound to `thisArg` and invoked with one argument; (value). + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to clone. + * @param {boolean} [isDeep=false] Specify a deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the cloned value. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * var shallow = _.clone(characters); + * shallow[0] === characters[0]; + * // => true + * + * var deep = _.clone(characters, true); + * deep[0] === characters[0]; + * // => false + * + * _.mixin({ + * 'clone': _.partialRight(_.clone, function(value) { + * return _.isElement(value) ? value.cloneNode(false) : undefined; + * }) + * }); + * + * var clone = _.clone(document.body); + * clone.childNodes.length; + * // => 0 + */ + function clone(value, isDeep, callback, thisArg) { + // allows working with "Collections" methods without using their `index` + // and `collection` arguments for `isDeep` and `callback` + if (typeof isDeep != 'boolean' && isDeep != null) { + thisArg = callback; + callback = isDeep; + isDeep = false; + } + return baseClone(value, isDeep, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + } + + /** + * Creates a deep clone of `value`. If a callback is provided it will be + * executed to produce the cloned values. If the callback returns `undefined` + * cloning will be handled by the method instead. The callback is bound to + * `thisArg` and invoked with one argument; (value). + * + * Note: This method is loosely based on the structured clone algorithm. Functions + * and DOM nodes are **not** cloned. The enumerable properties of `arguments` objects and + * objects created by constructors other than `Object` are cloned to plain `Object` objects. + * See http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to deep clone. + * @param {Function} [callback] The function to customize cloning values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the deep cloned value. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * var deep = _.cloneDeep(characters); + * deep[0] === characters[0]; + * // => false + * + * var view = { + * 'label': 'docs', + * 'node': element + * }; + * + * var clone = _.cloneDeep(view, function(value) { + * return _.isElement(value) ? value.cloneNode(true) : undefined; + * }); + * + * clone.node == view.node; + * // => false + */ + function cloneDeep(value, callback, thisArg) { + return baseClone(value, true, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 1)); + } + + /** + * Creates an object that inherits from the given `prototype` object. If a + * `properties` object is provided its own enumerable properties are assigned + * to the created object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties ? assign(result, properties) : result; + } + + /** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional defaults of the same property will be ignored. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param- {Object} [guard] Allows working with `_.reduce` without using its + * `key` and `object` arguments as sources. + * @returns {Object} Returns the destination object. + * @example + * + * var object = { 'name': 'barney' }; + * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); + * // => { 'name': 'barney', 'employer': 'slate' } + */ + var defaults = function(object, source, guard) { + var index, iterable = object, result = iterable; + if (!iterable) return result; + var args = arguments, + argsIndex = 0, + argsLength = typeof guard == 'number' ? 2 : args.length; + while (++argsIndex < argsLength) { + iterable = args[argsIndex]; + if (iterable && objectTypes[typeof iterable]) { + var ownIndex = -1, + ownProps = objectTypes[typeof iterable] && keys(iterable), + length = ownProps ? ownProps.length : 0; + + while (++ownIndex < length) { + index = ownProps[ownIndex]; + if (typeof result[index] == 'undefined') result[index] = iterable[index]; + } + } + } + return result + }; + + /** + * This method is like `_.findIndex` except that it returns the key of the + * first element that passes the callback check, instead of the element itself. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to search. + * @param {Function|Object|string} [callback=identity] The function called per + * iteration. If a property name or object is provided it will be used to + * create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {string|undefined} Returns the key of the found element, else `undefined`. + * @example + * + * var characters = { + * 'barney': { 'age': 36, 'blocked': false }, + * 'fred': { 'age': 40, 'blocked': true }, + * 'pebbles': { 'age': 1, 'blocked': false } + * }; + * + * _.findKey(characters, function(chr) { + * return chr.age < 40; + * }); + * // => 'barney' (property order is not guaranteed across environments) + * + * // using "_.where" callback shorthand + * _.findKey(characters, { 'age': 1 }); + * // => 'pebbles' + * + * // using "_.pluck" callback shorthand + * _.findKey(characters, 'blocked'); + * // => 'fred' + */ + function findKey(object, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forOwn(object, function(value, key, object) { + if (callback(value, key, object)) { + result = key; + return false; + } + }); + return result; + } + + /** + * This method is like `_.findKey` except that it iterates over elements + * of a `collection` in the opposite order. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to search. + * @param {Function|Object|string} [callback=identity] The function called per + * iteration. If a property name or object is provided it will be used to + * create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {string|undefined} Returns the key of the found element, else `undefined`. + * @example + * + * var characters = { + * 'barney': { 'age': 36, 'blocked': true }, + * 'fred': { 'age': 40, 'blocked': false }, + * 'pebbles': { 'age': 1, 'blocked': true } + * }; + * + * _.findLastKey(characters, function(chr) { + * return chr.age < 40; + * }); + * // => returns `pebbles`, assuming `_.findKey` returns `barney` + * + * // using "_.where" callback shorthand + * _.findLastKey(characters, { 'age': 40 }); + * // => 'fred' + * + * // using "_.pluck" callback shorthand + * _.findLastKey(characters, 'blocked'); + * // => 'pebbles' + */ + function findLastKey(object, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forOwnRight(object, function(value, key, object) { + if (callback(value, key, object)) { + result = key; + return false; + } + }); + return result; + } + + /** + * Iterates over own and inherited enumerable properties of an object, + * executing the callback for each property. The callback is bound to `thisArg` + * and invoked with three arguments; (value, key, object). Callbacks may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * Shape.prototype.move = function(x, y) { + * this.x += x; + * this.y += y; + * }; + * + * _.forIn(new Shape, function(value, key) { + * console.log(key); + * }); + * // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments) + */ + var forIn = function(collection, callback, thisArg) { + var index, iterable = collection, result = iterable; + if (!iterable) return result; + if (!objectTypes[typeof iterable]) return result; + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + for (index in iterable) { + if (callback(iterable[index], index, collection) === false) return result; + } + return result + }; + + /** + * This method is like `_.forIn` except that it iterates over elements + * of a `collection` in the opposite order. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * Shape.prototype.move = function(x, y) { + * this.x += x; + * this.y += y; + * }; + * + * _.forInRight(new Shape, function(value, key) { + * console.log(key); + * }); + * // => logs 'move', 'y', and 'x' assuming `_.forIn ` logs 'x', 'y', and 'move' + */ + function forInRight(object, callback, thisArg) { + var pairs = []; + + forIn(object, function(value, key) { + pairs.push(key, value); + }); + + var length = pairs.length; + callback = baseCreateCallback(callback, thisArg, 3); + while (length--) { + if (callback(pairs[length--], pairs[length], object) === false) { + break; + } + } + return object; + } + + /** + * Iterates over own enumerable properties of an object, executing the callback + * for each property. The callback is bound to `thisArg` and invoked with three + * arguments; (value, key, object). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { + * console.log(key); + * }); + * // => logs '0', '1', and 'length' (property order is not guaranteed across environments) + */ + var forOwn = function(collection, callback, thisArg) { + var index, iterable = collection, result = iterable; + if (!iterable) return result; + if (!objectTypes[typeof iterable]) return result; + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + var ownIndex = -1, + ownProps = objectTypes[typeof iterable] && keys(iterable), + length = ownProps ? ownProps.length : 0; + + while (++ownIndex < length) { + index = ownProps[ownIndex]; + if (callback(iterable[index], index, collection) === false) return result; + } + return result + }; + + /** + * This method is like `_.forOwn` except that it iterates over elements + * of a `collection` in the opposite order. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns `object`. + * @example + * + * _.forOwnRight({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) { + * console.log(key); + * }); + * // => logs 'length', '1', and '0' assuming `_.forOwn` logs '0', '1', and 'length' + */ + function forOwnRight(object, callback, thisArg) { + var props = keys(object), + length = props.length; + + callback = baseCreateCallback(callback, thisArg, 3); + while (length--) { + var key = props[length]; + if (callback(object[key], key, object) === false) { + break; + } + } + return object; + } + + /** + * Creates a sorted array of property names of all enumerable properties, + * own and inherited, of `object` that have function values. + * + * @static + * @memberOf _ + * @alias methods + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names that have function values. + * @example + * + * _.functions(_); + * // => ['all', 'any', 'bind', 'bindAll', 'clone', 'compact', 'compose', ...] + */ + function functions(object) { + var result = []; + forIn(object, function(value, key) { + if (isFunction(value)) { + result.push(key); + } + }); + return result.sort(); + } + + /** + * Checks if the specified property name exists as a direct property of `object`, + * instead of an inherited property. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @param {string} key The name of the property to check. + * @returns {boolean} Returns `true` if key is a direct property, else `false`. + * @example + * + * _.has({ 'a': 1, 'b': 2, 'c': 3 }, 'b'); + * // => true + */ + function has(object, key) { + return object ? hasOwnProperty.call(object, key) : false; + } + + /** + * Creates an object composed of the inverted keys and values of the given object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to invert. + * @returns {Object} Returns the created inverted object. + * @example + * + * _.invert({ 'first': 'fred', 'second': 'barney' }); + * // => { 'fred': 'first', 'barney': 'second' } + */ + function invert(object) { + var index = -1, + props = keys(object), + length = props.length, + result = {}; + + while (++index < length) { + var key = props[index]; + result[object[key]] = key; + } + return result; + } + + /** + * Checks if `value` is a boolean value. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a boolean value, else `false`. + * @example + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + value && typeof value == 'object' && toString.call(value) == boolClass || false; + } + + /** + * Checks if `value` is a date. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a date, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + */ + function isDate(value) { + return value && typeof value == 'object' && toString.call(value) == dateClass || false; + } + + /** + * Checks if `value` is a DOM element. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + */ + function isElement(value) { + return value && value.nodeType === 1 || false; + } + + /** + * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a + * length of `0` and objects with no own enumerable properties are considered + * "empty". + * + * @static + * @memberOf _ + * @category Objects + * @param {Array|Object|string} value The value to inspect. + * @returns {boolean} Returns `true` if the `value` is empty, else `false`. + * @example + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({}); + * // => true + * + * _.isEmpty(''); + * // => true + */ + function isEmpty(value) { + var result = true; + if (!value) { + return result; + } + var className = toString.call(value), + length = value.length; + + if ((className == arrayClass || className == stringClass || className == argsClass ) || + (className == objectClass && typeof length == 'number' && isFunction(value.splice))) { + return !length; + } + forOwn(value, function() { + return (result = false); + }); + return result; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent to each other. If a callback is provided it will be executed + * to compare values. If the callback returns `undefined` comparisons will + * be handled by the method instead. The callback is bound to `thisArg` and + * invoked with two arguments; (a, b). + * + * @static + * @memberOf _ + * @category Objects + * @param {*} a The value to compare. + * @param {*} b The other value to compare. + * @param {Function} [callback] The function to customize comparing values. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'name': 'fred' }; + * var copy = { 'name': 'fred' }; + * + * object == copy; + * // => false + * + * _.isEqual(object, copy); + * // => true + * + * var words = ['hello', 'goodbye']; + * var otherWords = ['hi', 'goodbye']; + * + * _.isEqual(words, otherWords, function(a, b) { + * var reGreet = /^(?:hello|hi)$/i, + * aGreet = _.isString(a) && reGreet.test(a), + * bGreet = _.isString(b) && reGreet.test(b); + * + * return (aGreet || bGreet) ? (aGreet == bGreet) : undefined; + * }); + * // => true + */ + function isEqual(a, b, callback, thisArg) { + return baseIsEqual(a, b, typeof callback == 'function' && baseCreateCallback(callback, thisArg, 2)); + } + + /** + * Checks if `value` is, or can be coerced to, a finite number. + * + * Note: This is not the same as native `isFinite` which will return true for + * booleans and empty strings. See http://es5.github.io/#x15.1.2.5. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is finite, else `false`. + * @example + * + * _.isFinite(-101); + * // => true + * + * _.isFinite('10'); + * // => true + * + * _.isFinite(true); + * // => false + * + * _.isFinite(''); + * // => false + * + * _.isFinite(Infinity); + * // => false + */ + function isFinite(value) { + return nativeIsFinite(value) && !nativeIsNaN(parseFloat(value)); + } + + /** + * Checks if `value` is a function. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + */ + function isFunction(value) { + return typeof value == 'function'; + } + + /** + * Checks if `value` is the language type of Object. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ + function isObject(value) { + // check if the value is the ECMAScript language type of Object + // http://es5.github.io/#x8 + // and avoid a V8 bug + // http://code.google.com/p/v8/issues/detail?id=2291 + return !!(value && objectTypes[typeof value]); + } + + /** + * Checks if `value` is `NaN`. + * + * Note: This is not the same as native `isNaN` which will return `true` for + * `undefined` and other non-numeric values. See http://es5.github.io/#x15.1.2.4. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // `NaN` as a primitive is the only value that is not equal to itself + // (perform the [[Class]] check first to avoid errors with some host objects in IE) + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(undefined); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is a number. + * + * Note: `NaN` is considered a number. See http://es5.github.io/#x8.5. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a number, else `false`. + * @example + * + * _.isNumber(8.4 * 5); + * // => true + */ + function isNumber(value) { + return typeof value == 'number' || + value && typeof value == 'object' && toString.call(value) == numberClass || false; + } + + /** + * Checks if `value` is an object created by the `Object` constructor. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * _.isPlainObject(new Shape); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + */ + var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { + if (!(value && toString.call(value) == objectClass)) { + return false; + } + var valueOf = value.valueOf, + objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); + + return objProto + ? (value == objProto || getPrototypeOf(value) == objProto) + : shimIsPlainObject(value); + }; + + /** + * Checks if `value` is a regular expression. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a regular expression, else `false`. + * @example + * + * _.isRegExp(/fred/); + * // => true + */ + function isRegExp(value) { + return value && typeof value == 'object' && toString.call(value) == regexpClass || false; + } + + /** + * Checks if `value` is a string. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a string, else `false`. + * @example + * + * _.isString('fred'); + * // => true + */ + function isString(value) { + return typeof value == 'string' || + value && typeof value == 'object' && toString.call(value) == stringClass || false; + } + + /** + * Checks if `value` is `undefined`. + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + */ + function isUndefined(value) { + return typeof value == 'undefined'; + } + + /** + * Creates an object with the same keys as `object` and values generated by + * running each own enumerable property of `object` through the callback. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new object with values of the results of each `callback` execution. + * @example + * + * _.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; }); + * // => { 'a': 3, 'b': 6, 'c': 9 } + * + * var characters = { + * 'fred': { 'name': 'fred', 'age': 40 }, + * 'pebbles': { 'name': 'pebbles', 'age': 1 } + * }; + * + * // using "_.pluck" callback shorthand + * _.mapValues(characters, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } + */ + function mapValues(object, callback, thisArg) { + var result = {}; + callback = lodash.createCallback(callback, thisArg, 3); + + forOwn(object, function(value, key, object) { + result[key] = callback(value, key, object); + }); + return result; + } + + /** + * Recursively merges own enumerable properties of the source object(s), that + * don't resolve to `undefined` into the destination object. Subsequent sources + * will overwrite property assignments of previous sources. If a callback is + * provided it will be executed to produce the merged values of the destination + * and source properties. If the callback returns `undefined` merging will + * be handled by the method instead. The callback is bound to `thisArg` and + * invoked with two arguments; (objectValue, sourceValue). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param {Function} [callback] The function to customize merging properties. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the destination object. + * @example + * + * var names = { + * 'characters': [ + * { 'name': 'barney' }, + * { 'name': 'fred' } + * ] + * }; + * + * var ages = { + * 'characters': [ + * { 'age': 36 }, + * { 'age': 40 } + * ] + * }; + * + * _.merge(names, ages); + * // => { 'characters': [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] } + * + * var food = { + * 'fruits': ['apple'], + * 'vegetables': ['beet'] + * }; + * + * var otherFood = { + * 'fruits': ['banana'], + * 'vegetables': ['carrot'] + * }; + * + * _.merge(food, otherFood, function(a, b) { + * return _.isArray(a) ? a.concat(b) : undefined; + * }); + * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot] } + */ + function merge(object) { + var args = arguments, + length = 2; + + if (!isObject(object)) { + return object; + } + // allows working with `_.reduce` and `_.reduceRight` without using + // their `index` and `collection` arguments + if (typeof args[2] != 'number') { + length = args.length; + } + if (length > 3 && typeof args[length - 2] == 'function') { + var callback = baseCreateCallback(args[--length - 1], args[length--], 2); + } else if (length > 2 && typeof args[length - 1] == 'function') { + callback = args[--length]; + } + var sources = slice(arguments, 1, length), + index = -1, + stackA = getArray(), + stackB = getArray(); + + while (++index < length) { + baseMerge(object, sources[index], callback, stackA, stackB); + } + releaseArray(stackA); + releaseArray(stackB); + return object; + } + + /** + * Creates a shallow clone of `object` excluding the specified properties. + * Property names may be specified as individual arguments or as arrays of + * property names. If a callback is provided it will be executed for each + * property of `object` omitting the properties the callback returns truey + * for. The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The source object. + * @param {Function|...string|string[]} [callback] The properties to omit or the + * function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns an object without the omitted properties. + * @example + * + * _.omit({ 'name': 'fred', 'age': 40 }, 'age'); + * // => { 'name': 'fred' } + * + * _.omit({ 'name': 'fred', 'age': 40 }, function(value) { + * return typeof value == 'number'; + * }); + * // => { 'name': 'fred' } + */ + function omit(object, callback, thisArg) { + var result = {}; + if (typeof callback != 'function') { + var props = []; + forIn(object, function(value, key) { + props.push(key); + }); + props = baseDifference(props, baseFlatten(arguments, true, false, 1)); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + result[key] = object[key]; + } + } else { + callback = lodash.createCallback(callback, thisArg, 3); + forIn(object, function(value, key, object) { + if (!callback(value, key, object)) { + result[key] = value; + } + }); + } + return result; + } + + /** + * Creates a two dimensional array of an object's key-value pairs, + * i.e. `[[key1, value1], [key2, value2]]`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns new array of key-value pairs. + * @example + * + * _.pairs({ 'barney': 36, 'fred': 40 }); + * // => [['barney', 36], ['fred', 40]] (property order is not guaranteed across environments) + */ + function pairs(object) { + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + var key = props[index]; + result[index] = [key, object[key]]; + } + return result; + } + + /** + * Creates a shallow clone of `object` composed of the specified properties. + * Property names may be specified as individual arguments or as arrays of + * property names. If a callback is provided it will be executed for each + * property of `object` picking the properties the callback returns truey + * for. The callback is bound to `thisArg` and invoked with three arguments; + * (value, key, object). + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The source object. + * @param {Function|...string|string[]} [callback] The function called per + * iteration or property names to pick, specified as individual property + * names or arrays of property names. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns an object composed of the picked properties. + * @example + * + * _.pick({ 'name': 'fred', '_userid': 'fred1' }, 'name'); + * // => { 'name': 'fred' } + * + * _.pick({ 'name': 'fred', '_userid': 'fred1' }, function(value, key) { + * return key.charAt(0) != '_'; + * }); + * // => { 'name': 'fred' } + */ + function pick(object, callback, thisArg) { + var result = {}; + if (typeof callback != 'function') { + var index = -1, + props = baseFlatten(arguments, true, false, 1), + length = isObject(object) ? props.length : 0; + + while (++index < length) { + var key = props[index]; + if (key in object) { + result[key] = object[key]; + } + } + } else { + callback = lodash.createCallback(callback, thisArg, 3); + forIn(object, function(value, key, object) { + if (callback(value, key, object)) { + result[key] = value; + } + }); + } + return result; + } + + /** + * An alternative to `_.reduce` this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable properties through a callback, with each callback execution + * potentially mutating the `accumulator` object. The callback is bound to + * `thisArg` and invoked with four arguments; (accumulator, value, key, object). + * Callbacks may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Array|Object} object The object to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var squares = _.transform([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], function(result, num) { + * num *= num; + * if (num % 2) { + * return result.push(num) < 3; + * } + * }); + * // => [1, 9, 25] + * + * var mapped = _.transform({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { + * result[key] = num * 3; + * }); + * // => { 'a': 3, 'b': 6, 'c': 9 } + */ + function transform(object, callback, accumulator, thisArg) { + var isArr = isArray(object); + if (accumulator == null) { + if (isArr) { + accumulator = []; + } else { + var ctor = object && object.constructor, + proto = ctor && ctor.prototype; + + accumulator = baseCreate(proto); + } + } + if (callback) { + callback = lodash.createCallback(callback, thisArg, 4); + (isArr ? forEach : forOwn)(object, function(value, index, object) { + return callback(accumulator, value, index, object); + }); + } + return accumulator; + } + + /** + * Creates an array composed of the own enumerable property values of `object`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property values. + * @example + * + * _.values({ 'one': 1, 'two': 2, 'three': 3 }); + * // => [1, 2, 3] (property order is not guaranteed across environments) + */ + function values(object) { + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates an array of elements from the specified indexes, or keys, of the + * `collection`. Indexes may be specified as individual arguments or as arrays + * of indexes. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {...(number|number[]|string|string[])} [index] The indexes of `collection` + * to retrieve, specified as individual indexes or arrays of indexes. + * @returns {Array} Returns a new array of elements corresponding to the + * provided indexes. + * @example + * + * _.at(['a', 'b', 'c', 'd', 'e'], [0, 2, 4]); + * // => ['a', 'c', 'e'] + * + * _.at(['fred', 'barney', 'pebbles'], 0, 2); + * // => ['fred', 'pebbles'] + */ + function at(collection) { + var args = arguments, + index = -1, + props = baseFlatten(args, true, false, 1), + length = (args[2] && args[2][args[1]] === collection) ? 1 : props.length, + result = Array(length); + + while(++index < length) { + result[index] = collection[props[index]]; + } + return result; + } + + /** + * Checks if a given value is present in a collection using strict equality + * for comparisons, i.e. `===`. If `fromIndex` is negative, it is used as the + * offset from the end of the collection. + * + * @static + * @memberOf _ + * @alias include + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {*} target The value to check for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {boolean} Returns `true` if the `target` element is found, else `false`. + * @example + * + * _.contains([1, 2, 3], 1); + * // => true + * + * _.contains([1, 2, 3], 1, 2); + * // => false + * + * _.contains({ 'name': 'fred', 'age': 40 }, 'fred'); + * // => true + * + * _.contains('pebbles', 'eb'); + * // => true + */ + function contains(collection, target, fromIndex) { + var index = -1, + indexOf = getIndexOf(), + length = collection ? collection.length : 0, + result = false; + + fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex) || 0; + if (isArray(collection)) { + result = indexOf(collection, target, fromIndex) > -1; + } else if (typeof length == 'number') { + result = (isString(collection) ? collection.indexOf(target, fromIndex) : indexOf(collection, target, fromIndex)) > -1; + } else { + forOwn(collection, function(value) { + if (++index >= fromIndex) { + return !(result = value === target); + } + }); + } + return result; + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` through the callback. The corresponding value + * of each key is the number of times the key was returned by the callback. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([4.3, 6.1, 6.4], function(num) { return Math.floor(num); }); + * // => { '4': 1, '6': 2 } + * + * _.countBy([4.3, 6.1, 6.4], function(num) { return this.floor(num); }, Math); + * // => { '4': 1, '6': 2 } + * + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + (hasOwnProperty.call(result, key) ? result[key]++ : result[key] = 1); + }); + + /** + * Checks if the given callback returns truey value for **all** elements of + * a collection. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias all + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if all elements passed the callback check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes']); + * // => false + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.every(characters, 'age'); + * // => true + * + * // using "_.where" callback shorthand + * _.every(characters, { 'age': 36 }); + * // => false + */ + function every(collection, callback, thisArg) { + var result = true; + callback = lodash.createCallback(callback, thisArg, 3); + + var index = -1, + length = collection ? collection.length : 0; + + if (typeof length == 'number') { + while (++index < length) { + if (!(result = !!callback(collection[index], index, collection))) { + break; + } + } + } else { + forOwn(collection, function(value, index, collection) { + return (result = !!callback(value, index, collection)); + }); + } + return result; + } + + /** + * Iterates over elements of a collection, returning an array of all elements + * the callback returns truey for. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias select + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of elements that passed the callback check. + * @example + * + * var evens = _.filter([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); + * // => [2, 4, 6] + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.filter(characters, 'blocked'); + * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] + * + * // using "_.where" callback shorthand + * _.filter(characters, { 'age': 36 }); + * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + */ + function filter(collection, callback, thisArg) { + var result = []; + callback = lodash.createCallback(callback, thisArg, 3); + + var index = -1, + length = collection ? collection.length : 0; + + if (typeof length == 'number') { + while (++index < length) { + var value = collection[index]; + if (callback(value, index, collection)) { + result.push(value); + } + } + } else { + forOwn(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result.push(value); + } + }); + } + return result; + } + + /** + * Iterates over elements of a collection, returning the first element that + * the callback returns truey for. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias detect, findWhere + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the found element, else `undefined`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true }, + * { 'name': 'pebbles', 'age': 1, 'blocked': false } + * ]; + * + * _.find(characters, function(chr) { + * return chr.age < 40; + * }); + * // => { 'name': 'barney', 'age': 36, 'blocked': false } + * + * // using "_.where" callback shorthand + * _.find(characters, { 'age': 1 }); + * // => { 'name': 'pebbles', 'age': 1, 'blocked': false } + * + * // using "_.pluck" callback shorthand + * _.find(characters, 'blocked'); + * // => { 'name': 'fred', 'age': 40, 'blocked': true } + */ + function find(collection, callback, thisArg) { + callback = lodash.createCallback(callback, thisArg, 3); + + var index = -1, + length = collection ? collection.length : 0; + + if (typeof length == 'number') { + while (++index < length) { + var value = collection[index]; + if (callback(value, index, collection)) { + return value; + } + } + } else { + var result; + forOwn(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result = value; + return false; + } + }); + return result; + } + } + + /** + * This method is like `_.find` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the found element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(num) { + * return num % 2 == 1; + * }); + * // => 3 + */ + function findLast(collection, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + forEachRight(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result = value; + return false; + } + }); + return result; + } + + /** + * Iterates over elements of a collection, executing the callback for each + * element. The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). Callbacks may exit iteration early by + * explicitly returning `false`. + * + * Note: As with other "Collections" methods, objects with a `length` property + * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn` + * may be used for object iteration. + * + * @static + * @memberOf _ + * @alias each + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2, 3]).forEach(function(num) { console.log(num); }).join(','); + * // => logs each number and returns '1,2,3' + * + * _.forEach({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { console.log(num); }); + * // => logs each number and returns the object (property order is not guaranteed across environments) + */ + function forEach(collection, callback, thisArg) { + var index = -1, + length = collection ? collection.length : 0; + + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + if (typeof length == 'number') { + while (++index < length) { + if (callback(collection[index], index, collection) === false) { + break; + } + } + } else { + forOwn(collection, callback); + } + return collection; + } + + /** + * This method is like `_.forEach` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @alias eachRight + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array|Object|string} Returns `collection`. + * @example + * + * _([1, 2, 3]).forEachRight(function(num) { console.log(num); }).join(','); + * // => logs each number from right to left and returns '3,2,1' + */ + function forEachRight(collection, callback, thisArg) { + var length = collection ? collection.length : 0; + callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3); + if (typeof length == 'number') { + while (length--) { + if (callback(collection[length], length, collection) === false) { + break; + } + } + } else { + var props = keys(collection); + length = props.length; + forOwn(collection, function(value, key, collection) { + key = props ? props[--length] : --length; + return callback(collection[key], key, collection); + }); + } + return collection; + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of a collection through the callback. The corresponding value + * of each key is an array of the elements responsible for generating the key. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false` + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([4.2, 6.1, 6.4], function(num) { return Math.floor(num); }); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * _.groupBy([4.2, 6.1, 6.4], function(num) { return this.floor(num); }, Math); + * // => { '4': [4.2], '6': [6.1, 6.4] } + * + * // using "_.pluck" callback shorthand + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value); + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of the collection through the given callback. The corresponding + * value of each key is the last element responsible for generating the key. + * The callback is bound to `thisArg` and invoked with three arguments; + * (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var keys = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.indexBy(keys, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(keys, function(key) { return String.fromCharCode(key.code); }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.indexBy(characters, function(key) { this.fromCharCode(key.code); }, String); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + */ + var indexBy = createAggregator(function(result, value, key) { + result[key] = value; + }); + + /** + * Invokes the method named by `methodName` on each element in the `collection` + * returning an array of the results of each invoked method. Additional arguments + * will be provided to each invoked method. If `methodName` is a function it + * will be invoked for, and `this` bound to, each element in the `collection`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|string} methodName The name of the method to invoke or + * the function invoked per iteration. + * @param {...*} [arg] Arguments to invoke the method with. + * @returns {Array} Returns a new array of the results of each invoked method. + * @example + * + * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invoke([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + function invoke(collection, methodName) { + var args = slice(arguments, 2), + index = -1, + isFunc = typeof methodName == 'function', + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + forEach(collection, function(value) { + result[++index] = (isFunc ? methodName : value[methodName]).apply(value, args); + }); + return result; + } + + /** + * Creates an array of values by running each element in the collection + * through the callback. The callback is bound to `thisArg` and invoked with + * three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias collect + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of the results of each `callback` execution. + * @example + * + * _.map([1, 2, 3], function(num) { return num * 3; }); + * // => [3, 6, 9] + * + * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; }); + * // => [3, 6, 9] (property order is not guaranteed across environments) + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.map(characters, 'name'); + * // => ['barney', 'fred'] + */ + function map(collection, callback, thisArg) { + var index = -1, + length = collection ? collection.length : 0; + + callback = lodash.createCallback(callback, thisArg, 3); + if (typeof length == 'number') { + var result = Array(length); + while (++index < length) { + result[index] = callback(collection[index], index, collection); + } + } else { + result = []; + forOwn(collection, function(value, key, collection) { + result[++index] = callback(value, key, collection); + }); + } + return result; + } + + /** + * Retrieves the maximum value of a collection. If the collection is empty or + * falsey `-Infinity` is returned. If a callback is provided it will be executed + * for each value in the collection to generate the criterion by which the value + * is ranked. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.max(characters, function(chr) { return chr.age; }); + * // => { 'name': 'fred', 'age': 40 }; + * + * // using "_.pluck" callback shorthand + * _.max(characters, 'age'); + * // => { 'name': 'fred', 'age': 40 }; + */ + function max(collection, callback, thisArg) { + var computed = -Infinity, + result = computed; + + // allows working with functions like `_.map` without using + // their `index` argument as a callback + if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { + callback = null; + } + if (callback == null && isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (value > result) { + result = value; + } + } + } else { + callback = (callback == null && isString(collection)) + ? charAtCallback + : lodash.createCallback(callback, thisArg, 3); + + forEach(collection, function(value, index, collection) { + var current = callback(value, index, collection); + if (current > computed) { + computed = current; + result = value; + } + }); + } + return result; + } + + /** + * Retrieves the minimum value of a collection. If the collection is empty or + * falsey `Infinity` is returned. If a callback is provided it will be executed + * for each value in the collection to generate the criterion by which the value + * is ranked. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.min(characters, function(chr) { return chr.age; }); + * // => { 'name': 'barney', 'age': 36 }; + * + * // using "_.pluck" callback shorthand + * _.min(characters, 'age'); + * // => { 'name': 'barney', 'age': 36 }; + */ + function min(collection, callback, thisArg) { + var computed = Infinity, + result = computed; + + // allows working with functions like `_.map` without using + // their `index` argument as a callback + if (typeof callback != 'function' && thisArg && thisArg[callback] === collection) { + callback = null; + } + if (callback == null && isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + var value = collection[index]; + if (value < result) { + result = value; + } + } + } else { + callback = (callback == null && isString(collection)) + ? charAtCallback + : lodash.createCallback(callback, thisArg, 3); + + forEach(collection, function(value, index, collection) { + var current = callback(value, index, collection); + if (current < computed) { + computed = current; + result = value; + } + }); + } + return result; + } + + /** + * Retrieves the value of a specified property from all elements in the collection. + * + * @static + * @memberOf _ + * @type Function + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {string} property The name of the property to pluck. + * @returns {Array} Returns a new array of property values. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * _.pluck(characters, 'name'); + * // => ['barney', 'fred'] + */ + var pluck = map; + + /** + * Reduces a collection to a value which is the accumulated result of running + * each element in the collection through the callback, where each successive + * callback execution consumes the return value of the previous execution. If + * `accumulator` is not provided the first element of the collection will be + * used as the initial `accumulator` value. The callback is bound to `thisArg` + * and invoked with four arguments; (accumulator, value, index|key, collection). + * + * @static + * @memberOf _ + * @alias foldl, inject + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] Initial value of the accumulator. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var sum = _.reduce([1, 2, 3], function(sum, num) { + * return sum + num; + * }); + * // => 6 + * + * var mapped = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, function(result, num, key) { + * result[key] = num * 3; + * return result; + * }, {}); + * // => { 'a': 3, 'b': 6, 'c': 9 } + */ + function reduce(collection, callback, accumulator, thisArg) { + if (!collection) return accumulator; + var noaccum = arguments.length < 3; + callback = lodash.createCallback(callback, thisArg, 4); + + var index = -1, + length = collection.length; + + if (typeof length == 'number') { + if (noaccum) { + accumulator = collection[++index]; + } + while (++index < length) { + accumulator = callback(accumulator, collection[index], index, collection); + } + } else { + forOwn(collection, function(value, index, collection) { + accumulator = noaccum + ? (noaccum = false, value) + : callback(accumulator, value, index, collection) + }); + } + return accumulator; + } + + /** + * This method is like `_.reduce` except that it iterates over elements + * of a `collection` from right to left. + * + * @static + * @memberOf _ + * @alias foldr + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function} [callback=identity] The function called per iteration. + * @param {*} [accumulator] Initial value of the accumulator. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the accumulated value. + * @example + * + * var list = [[0, 1], [2, 3], [4, 5]]; + * var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, callback, accumulator, thisArg) { + var noaccum = arguments.length < 3; + callback = lodash.createCallback(callback, thisArg, 4); + forEachRight(collection, function(value, index, collection) { + accumulator = noaccum + ? (noaccum = false, value) + : callback(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The opposite of `_.filter` this method returns the elements of a + * collection that the callback does **not** return truey for. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of elements that failed the callback check. + * @example + * + * var odds = _.reject([1, 2, 3, 4, 5, 6], function(num) { return num % 2 == 0; }); + * // => [1, 3, 5] + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.reject(characters, 'blocked'); + * // => [{ 'name': 'barney', 'age': 36, 'blocked': false }] + * + * // using "_.where" callback shorthand + * _.reject(characters, { 'age': 36 }); + * // => [{ 'name': 'fred', 'age': 40, 'blocked': true }] + */ + function reject(collection, callback, thisArg) { + callback = lodash.createCallback(callback, thisArg, 3); + return filter(collection, function(value, index, collection) { + return !callback(value, index, collection); + }); + } + + /** + * Retrieves a random element or `n` random elements from a collection. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to sample. + * @param {number} [n] The number of elements to sample. + * @param- {Object} [guard] Allows working with functions like `_.map` + * without using their `index` arguments as `n`. + * @returns {Array} Returns the random sample(s) of `collection`. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + * + * _.sample([1, 2, 3, 4], 2); + * // => [3, 1] + */ + function sample(collection, n, guard) { + if (collection && typeof collection.length != 'number') { + collection = values(collection); + } + if (n == null || guard) { + return collection ? collection[baseRandom(0, collection.length - 1)] : undefined; + } + var result = shuffle(collection); + result.length = nativeMin(nativeMax(0, n), result.length); + return result; + } + + /** + * Creates an array of shuffled values, using a version of the Fisher-Yates + * shuffle. See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to shuffle. + * @returns {Array} Returns a new shuffled collection. + * @example + * + * _.shuffle([1, 2, 3, 4, 5, 6]); + * // => [4, 1, 6, 3, 5, 2] + */ + function shuffle(collection) { + var index = -1, + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + forEach(collection, function(value) { + var rand = baseRandom(0, ++index); + result[index] = result[rand]; + result[rand] = value; + }); + return result; + } + + /** + * Gets the size of the `collection` by returning `collection.length` for arrays + * and array-like objects or the number of own enumerable properties for objects. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns `collection.length` or number of own enumerable properties. + * @example + * + * _.size([1, 2]); + * // => 2 + * + * _.size({ 'one': 1, 'two': 2, 'three': 3 }); + * // => 3 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + var length = collection ? collection.length : 0; + return typeof length == 'number' ? length : keys(collection).length; + } + + /** + * Checks if the callback returns a truey value for **any** element of a + * collection. The function returns as soon as it finds a passing value and + * does not iterate over the entire collection. The callback is bound to + * `thisArg` and invoked with three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias any + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {boolean} Returns `true` if any element passed the callback check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true } + * ]; + * + * // using "_.pluck" callback shorthand + * _.some(characters, 'blocked'); + * // => true + * + * // using "_.where" callback shorthand + * _.some(characters, { 'age': 1 }); + * // => false + */ + function some(collection, callback, thisArg) { + var result; + callback = lodash.createCallback(callback, thisArg, 3); + + var index = -1, + length = collection ? collection.length : 0; + + if (typeof length == 'number') { + while (++index < length) { + if ((result = callback(collection[index], index, collection))) { + break; + } + } + } else { + forOwn(collection, function(value, index, collection) { + return !(result = callback(value, index, collection)); + }); + } + return !!result; + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection through the callback. This method + * performs a stable sort, that is, it will preserve the original sort order + * of equal elements. The callback is bound to `thisArg` and invoked with + * three arguments; (value, index|key, collection). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an array of property names is provided for `callback` the collection + * will be sorted by each property value. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Array|Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of sorted elements. + * @example + * + * _.sortBy([1, 2, 3], function(num) { return Math.sin(num); }); + * // => [3, 1, 2] + * + * _.sortBy([1, 2, 3], function(num) { return this.sin(num); }, Math); + * // => [3, 1, 2] + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 }, + * { 'name': 'barney', 'age': 26 }, + * { 'name': 'fred', 'age': 30 } + * ]; + * + * // using "_.pluck" callback shorthand + * _.map(_.sortBy(characters, 'age'), _.values); + * // => [['barney', 26], ['fred', 30], ['barney', 36], ['fred', 40]] + * + * // sorting by multiple properties + * _.map(_.sortBy(characters, ['name', 'age']), _.values); + * // = > [['barney', 26], ['barney', 36], ['fred', 30], ['fred', 40]] + */ + function sortBy(collection, callback, thisArg) { + var index = -1, + isArr = isArray(callback), + length = collection ? collection.length : 0, + result = Array(typeof length == 'number' ? length : 0); + + if (!isArr) { + callback = lodash.createCallback(callback, thisArg, 3); + } + forEach(collection, function(value, key, collection) { + var object = result[++index] = getObject(); + if (isArr) { + object.criteria = map(callback, function(key) { return value[key]; }); + } else { + (object.criteria = getArray())[0] = callback(value, key, collection); + } + object.index = index; + object.value = value; + }); + + length = result.length; + result.sort(compareAscending); + while (length--) { + var object = result[length]; + result[length] = object.value; + if (!isArr) { + releaseArray(object.criteria); + } + releaseObject(object); + } + return result; + } + + /** + * Converts the `collection` to an array. + * + * @static + * @memberOf _ + * @category Collections + * @param {Array|Object|string} collection The collection to convert. + * @returns {Array} Returns the new converted array. + * @example + * + * (function() { return _.toArray(arguments).slice(1); })(1, 2, 3, 4); + * // => [2, 3, 4] + */ + function toArray(collection) { + if (collection && typeof collection.length == 'number') { + return slice(collection); + } + return values(collection); + } + + /** + * Performs a deep comparison of each element in a `collection` to the given + * `properties` object, returning an array of all elements that have equivalent + * property values. + * + * @static + * @memberOf _ + * @type Function + * @category Collections + * @param {Array|Object|string} collection The collection to iterate over. + * @param {Object} props The object of property values to filter by. + * @returns {Array} Returns a new array of elements that have the given properties. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }, + * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } + * ]; + * + * _.where(characters, { 'age': 36 }); + * // => [{ 'name': 'barney', 'age': 36, 'pets': ['hoppy'] }] + * + * _.where(characters, { 'pets': ['dino'] }); + * // => [{ 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] }] + */ + var where = filter; + + /*--------------------------------------------------------------------------*/ + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are all falsey. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to compact. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array ? array.length : 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result.push(value); + } + } + return result; + } + + /** + * Creates an array excluding all values of the provided arrays using strict + * equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to process. + * @param {...Array} [values] The arrays of values to exclude. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.difference([1, 2, 3, 4, 5], [5, 2, 10]); + * // => [1, 3, 4] + */ + function difference(array) { + return baseDifference(array, baseFlatten(arguments, true, true, 1)); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element that passes the callback check, instead of the element itself. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': false }, + * { 'name': 'fred', 'age': 40, 'blocked': true }, + * { 'name': 'pebbles', 'age': 1, 'blocked': false } + * ]; + * + * _.findIndex(characters, function(chr) { + * return chr.age < 20; + * }); + * // => 2 + * + * // using "_.where" callback shorthand + * _.findIndex(characters, { 'age': 36 }); + * // => 0 + * + * // using "_.pluck" callback shorthand + * _.findIndex(characters, 'blocked'); + * // => 1 + */ + function findIndex(array, callback, thisArg) { + var index = -1, + length = array ? array.length : 0; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length) { + if (callback(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of a `collection` from right to left. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36, 'blocked': true }, + * { 'name': 'fred', 'age': 40, 'blocked': false }, + * { 'name': 'pebbles', 'age': 1, 'blocked': true } + * ]; + * + * _.findLastIndex(characters, function(chr) { + * return chr.age > 30; + * }); + * // => 1 + * + * // using "_.where" callback shorthand + * _.findLastIndex(characters, { 'age': 36 }); + * // => 0 + * + * // using "_.pluck" callback shorthand + * _.findLastIndex(characters, 'blocked'); + * // => 2 + */ + function findLastIndex(array, callback, thisArg) { + var length = array ? array.length : 0; + callback = lodash.createCallback(callback, thisArg, 3); + while (length--) { + if (callback(array[length], length, array)) { + return length; + } + } + return -1; + } + + /** + * Gets the first element or first `n` elements of an array. If a callback + * is provided elements at the beginning of the array are returned as long + * as the callback returns truey. The callback is bound to `thisArg` and + * invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias head, take + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback] The function called + * per element or the number of elements to return. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the first element(s) of `array`. + * @example + * + * _.first([1, 2, 3]); + * // => 1 + * + * _.first([1, 2, 3], 2); + * // => [1, 2] + * + * _.first([1, 2, 3], function(num) { + * return num < 3; + * }); + * // => [1, 2] + * + * var characters = [ + * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.first(characters, 'blocked'); + * // => [{ 'name': 'barney', 'blocked': true, 'employer': 'slate' }] + * + * // using "_.where" callback shorthand + * _.pluck(_.first(characters, { 'employer': 'slate' }), 'name'); + * // => ['barney', 'fred'] + */ + function first(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = -1; + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length && callback(array[index], index, array)) { + n++; + } + } else { + n = callback; + if (n == null || thisArg) { + return array ? array[0] : undefined; + } + } + return slice(array, 0, nativeMin(nativeMax(0, n), length)); + } + + /** + * Flattens a nested array (the nesting can be to any depth). If `isShallow` + * is truey, the array will only be flattened a single level. If a callback + * is provided each element of the array is passed through the callback before + * flattening. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to flatten. + * @param {boolean} [isShallow=false] A flag to restrict flattening to a single level. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new flattened array. + * @example + * + * _.flatten([1, [2], [3, [[4]]]]); + * // => [1, 2, 3, 4]; + * + * _.flatten([1, [2], [3, [[4]]]], true); + * // => [1, 2, 3, [[4]]]; + * + * var characters = [ + * { 'name': 'barney', 'age': 30, 'pets': ['hoppy'] }, + * { 'name': 'fred', 'age': 40, 'pets': ['baby puss', 'dino'] } + * ]; + * + * // using "_.pluck" callback shorthand + * _.flatten(characters, 'pets'); + * // => ['hoppy', 'baby puss', 'dino'] + */ + function flatten(array, isShallow, callback, thisArg) { + // juggle arguments + if (typeof isShallow != 'boolean' && isShallow != null) { + thisArg = callback; + callback = (typeof isShallow != 'function' && thisArg && thisArg[isShallow] === array) ? null : isShallow; + isShallow = false; + } + if (callback != null) { + array = map(array, callback, thisArg); + } + return baseFlatten(array, isShallow); + } + + /** + * Gets the index at which the first occurrence of `value` is found using + * strict equality for comparisons, i.e. `===`. If the array is already sorted + * providing `true` for `fromIndex` will run a faster binary search. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {boolean|number} [fromIndex=0] The index to search from or `true` + * to perform a binary search on a sorted array. + * @returns {number} Returns the index of the matched value or `-1`. + * @example + * + * _.indexOf([1, 2, 3, 1, 2, 3], 2); + * // => 1 + * + * _.indexOf([1, 2, 3, 1, 2, 3], 2, 3); + * // => 4 + * + * _.indexOf([1, 1, 2, 2, 3, 3], 2, true); + * // => 2 + */ + function indexOf(array, value, fromIndex) { + if (typeof fromIndex == 'number') { + var length = array ? array.length : 0; + fromIndex = (fromIndex < 0 ? nativeMax(0, length + fromIndex) : fromIndex || 0); + } else if (fromIndex) { + var index = sortedIndex(array, value); + return array[index] === value ? index : -1; + } + return baseIndexOf(array, value, fromIndex); + } + + /** + * Gets all but the last element or last `n` elements of an array. If a + * callback is provided elements at the end of the array are excluded from + * the result as long as the callback returns truey. The callback is bound + * to `thisArg` and invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback=1] The function called + * per element or the number of elements to exclude. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + * + * _.initial([1, 2, 3], 2); + * // => [1] + * + * _.initial([1, 2, 3], function(num) { + * return num > 1; + * }); + * // => [1] + * + * var characters = [ + * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.initial(characters, 'blocked'); + * // => [{ 'name': 'barney', 'blocked': false, 'employer': 'slate' }] + * + * // using "_.where" callback shorthand + * _.pluck(_.initial(characters, { 'employer': 'na' }), 'name'); + * // => ['barney', 'fred'] + */ + function initial(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = length; + callback = lodash.createCallback(callback, thisArg, 3); + while (index-- && callback(array[index], index, array)) { + n++; + } + } else { + n = (callback == null || thisArg) ? 1 : callback || n; + } + return slice(array, 0, nativeMin(nativeMax(0, length - n), length)); + } + + /** + * Creates an array of unique values present in all provided arrays using + * strict equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of shared values. + * @example + * + * _.intersection([1, 2, 3], [5, 2, 1, 4], [2, 1]); + * // => [1, 2] + */ + function intersection() { + var args = [], + argsIndex = -1, + argsLength = arguments.length, + caches = getArray(), + indexOf = getIndexOf(), + trustIndexOf = indexOf === baseIndexOf, + seen = getArray(); + + while (++argsIndex < argsLength) { + var value = arguments[argsIndex]; + if (isArray(value) || isArguments(value)) { + args.push(value); + caches.push(trustIndexOf && value.length >= largeArraySize && + createCache(argsIndex ? args[argsIndex] : seen)); + } + } + var array = args[0], + index = -1, + length = array ? array.length : 0, + result = []; + + outer: + while (++index < length) { + var cache = caches[0]; + value = array[index]; + + if ((cache ? cacheIndexOf(cache, value) : indexOf(seen, value)) < 0) { + argsIndex = argsLength; + (cache || seen).push(value); + while (--argsIndex) { + cache = caches[argsIndex]; + if ((cache ? cacheIndexOf(cache, value) : indexOf(args[argsIndex], value)) < 0) { + continue outer; + } + } + result.push(value); + } + } + while (argsLength--) { + cache = caches[argsLength]; + if (cache) { + releaseObject(cache); + } + } + releaseArray(caches); + releaseArray(seen); + return result; + } + + /** + * Gets the last element or last `n` elements of an array. If a callback is + * provided elements at the end of the array are returned as long as the + * callback returns truey. The callback is bound to `thisArg` and invoked + * with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback] The function called + * per element or the number of elements to return. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {*} Returns the last element(s) of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + * + * _.last([1, 2, 3], 2); + * // => [2, 3] + * + * _.last([1, 2, 3], function(num) { + * return num > 1; + * }); + * // => [2, 3] + * + * var characters = [ + * { 'name': 'barney', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.pluck(_.last(characters, 'blocked'), 'name'); + * // => ['fred', 'pebbles'] + * + * // using "_.where" callback shorthand + * _.last(characters, { 'employer': 'na' }); + * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] + */ + function last(array, callback, thisArg) { + var n = 0, + length = array ? array.length : 0; + + if (typeof callback != 'number' && callback != null) { + var index = length; + callback = lodash.createCallback(callback, thisArg, 3); + while (index-- && callback(array[index], index, array)) { + n++; + } + } else { + n = callback; + if (n == null || thisArg) { + return array ? array[length - 1] : undefined; + } + } + return slice(array, nativeMax(0, length - n)); + } + + /** + * Gets the index at which the last occurrence of `value` is found using strict + * equality for comparisons, i.e. `===`. If `fromIndex` is negative, it is used + * as the offset from the end of the collection. + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to search. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value or `-1`. + * @example + * + * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2); + * // => 4 + * + * _.lastIndexOf([1, 2, 3, 1, 2, 3], 2, 3); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var index = array ? array.length : 0; + if (typeof fromIndex == 'number') { + index = (fromIndex < 0 ? nativeMax(0, index + fromIndex) : nativeMin(fromIndex, index - 1)) + 1; + } + while (index--) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Removes all provided values from the given array using strict equality for + * comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to modify. + * @param {...*} [value] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3, 1, 2, 3]; + * _.pull(array, 2, 3); + * console.log(array); + * // => [1, 1] + */ + function pull(array) { + var args = arguments, + argsIndex = 0, + argsLength = args.length, + length = array ? array.length : 0; + + while (++argsIndex < argsLength) { + var index = -1, + value = args[argsIndex]; + while (++index < length) { + if (array[index] === value) { + splice.call(array, index--, 1); + length--; + } + } + } + return array; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to but not including `end`. If `start` is less than `stop` a + * zero-length range is created unless a negative `step` is specified. + * + * @static + * @memberOf _ + * @category Arrays + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns a new range array. + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + function range(start, end, step) { + start = +start || 0; + step = typeof step == 'number' ? step : (+step || 1); + + if (end == null) { + end = start; + start = 0; + } + // use `Array(length)` so engines like Chakra and V8 avoid slower modes + // http://youtu.be/XAqIpGU8ZZk#t=17m25s + var index = -1, + length = nativeMax(0, ceil((end - start) / (step || 1))), + result = Array(length); + + while (++index < length) { + result[index] = start; + start += step; + } + return result; + } + + /** + * Removes all elements from an array that the callback returns truey for + * and returns an array of removed elements. The callback is bound to `thisArg` + * and invoked with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to modify. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4, 5, 6]; + * var evens = _.remove(array, function(num) { return num % 2 == 0; }); + * + * console.log(array); + * // => [1, 3, 5] + * + * console.log(evens); + * // => [2, 4, 6] + */ + function remove(array, callback, thisArg) { + var index = -1, + length = array ? array.length : 0, + result = []; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length) { + var value = array[index]; + if (callback(value, index, array)) { + result.push(value); + splice.call(array, index--, 1); + length--; + } + } + return result; + } + + /** + * The opposite of `_.initial` this method gets all but the first element or + * first `n` elements of an array. If a callback function is provided elements + * at the beginning of the array are excluded from the result as long as the + * callback returns truey. The callback is bound to `thisArg` and invoked + * with three arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias drop, tail + * @category Arrays + * @param {Array} array The array to query. + * @param {Function|Object|number|string} [callback=1] The function called + * per element or the number of elements to exclude. If a property name or + * object is provided it will be used to create a "_.pluck" or "_.where" + * style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a slice of `array`. + * @example + * + * _.rest([1, 2, 3]); + * // => [2, 3] + * + * _.rest([1, 2, 3], 2); + * // => [3] + * + * _.rest([1, 2, 3], function(num) { + * return num < 3; + * }); + * // => [3] + * + * var characters = [ + * { 'name': 'barney', 'blocked': true, 'employer': 'slate' }, + * { 'name': 'fred', 'blocked': false, 'employer': 'slate' }, + * { 'name': 'pebbles', 'blocked': true, 'employer': 'na' } + * ]; + * + * // using "_.pluck" callback shorthand + * _.pluck(_.rest(characters, 'blocked'), 'name'); + * // => ['fred', 'pebbles'] + * + * // using "_.where" callback shorthand + * _.rest(characters, { 'employer': 'slate' }); + * // => [{ 'name': 'pebbles', 'blocked': true, 'employer': 'na' }] + */ + function rest(array, callback, thisArg) { + if (typeof callback != 'number' && callback != null) { + var n = 0, + index = -1, + length = array ? array.length : 0; + + callback = lodash.createCallback(callback, thisArg, 3); + while (++index < length && callback(array[index], index, array)) { + n++; + } + } else { + n = (callback == null || thisArg) ? 1 : nativeMax(0, callback); + } + return slice(array, n); + } + + /** + * Uses a binary search to determine the smallest index at which a value + * should be inserted into a given sorted array in order to maintain the sort + * order of the array. If a callback is provided it will be executed for + * `value` and each element of `array` to compute their sort ranking. The + * callback is bound to `thisArg` and invoked with one argument; (value). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to inspect. + * @param {*} value The value to evaluate. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([20, 30, 50], 40); + * // => 2 + * + * // using "_.pluck" callback shorthand + * _.sortedIndex([{ 'x': 20 }, { 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x'); + * // => 2 + * + * var dict = { + * 'wordToNumber': { 'twenty': 20, 'thirty': 30, 'fourty': 40, 'fifty': 50 } + * }; + * + * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { + * return dict.wordToNumber[word]; + * }); + * // => 2 + * + * _.sortedIndex(['twenty', 'thirty', 'fifty'], 'fourty', function(word) { + * return this.wordToNumber[word]; + * }, dict); + * // => 2 + */ + function sortedIndex(array, value, callback, thisArg) { + var low = 0, + high = array ? array.length : low; + + // explicitly reference `identity` for better inlining in Firefox + callback = callback ? lodash.createCallback(callback, thisArg, 1) : identity; + value = callback(value); + + while (low < high) { + var mid = (low + high) >>> 1; + (callback(array[mid]) < value) + ? low = mid + 1 + : high = mid; + } + return low; + } + + /** + * Creates an array of unique values, in order, of the provided arrays using + * strict equality for comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of combined values. + * @example + * + * _.union([1, 2, 3], [5, 2, 1, 4], [2, 1]); + * // => [1, 2, 3, 5, 4] + */ + function union() { + return baseUniq(baseFlatten(arguments, true, true)); + } + + /** + * Creates a duplicate-value-free version of an array using strict equality + * for comparisons, i.e. `===`. If the array is sorted, providing + * `true` for `isSorted` will use a faster algorithm. If a callback is provided + * each element of `array` is passed through the callback before uniqueness + * is computed. The callback is bound to `thisArg` and invoked with three + * arguments; (value, index, array). + * + * If a property name is provided for `callback` the created "_.pluck" style + * callback will return the property value of the given element. + * + * If an object is provided for `callback` the created "_.where" style callback + * will return `true` for elements that have the properties of the given object, + * else `false`. + * + * @static + * @memberOf _ + * @alias unique + * @category Arrays + * @param {Array} array The array to process. + * @param {boolean} [isSorted=false] A flag to indicate that `array` is sorted. + * @param {Function|Object|string} [callback=identity] The function called + * per iteration. If a property name or object is provided it will be used + * to create a "_.pluck" or "_.where" style callback, respectively. + * @param {*} [thisArg] The `this` binding of `callback`. + * @returns {Array} Returns a duplicate-value-free array. + * @example + * + * _.uniq([1, 2, 1, 3, 1]); + * // => [1, 2, 3] + * + * _.uniq([1, 1, 2, 2, 3], true); + * // => [1, 2, 3] + * + * _.uniq(['A', 'b', 'C', 'a', 'B', 'c'], function(letter) { return letter.toLowerCase(); }); + * // => ['A', 'b', 'C'] + * + * _.uniq([1, 2.5, 3, 1.5, 2, 3.5], function(num) { return this.floor(num); }, Math); + * // => [1, 2.5, 3] + * + * // using "_.pluck" callback shorthand + * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniq(array, isSorted, callback, thisArg) { + // juggle arguments + if (typeof isSorted != 'boolean' && isSorted != null) { + thisArg = callback; + callback = (typeof isSorted != 'function' && thisArg && thisArg[isSorted] === array) ? null : isSorted; + isSorted = false; + } + if (callback != null) { + callback = lodash.createCallback(callback, thisArg, 3); + } + return baseUniq(array, isSorted, callback); + } + + /** + * Creates an array excluding all provided values using strict equality for + * comparisons, i.e. `===`. + * + * @static + * @memberOf _ + * @category Arrays + * @param {Array} array The array to filter. + * @param {...*} [value] The values to exclude. + * @returns {Array} Returns a new array of filtered values. + * @example + * + * _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); + * // => [2, 3, 4] + */ + function without(array) { + return baseDifference(array, slice(arguments, 1)); + } + + /** + * Creates an array that is the symmetric difference of the provided arrays. + * See http://en.wikipedia.org/wiki/Symmetric_difference. + * + * @static + * @memberOf _ + * @category Arrays + * @param {...Array} [array] The arrays to inspect. + * @returns {Array} Returns an array of values. + * @example + * + * _.xor([1, 2, 3], [5, 2, 1, 4]); + * // => [3, 5, 4] + * + * _.xor([1, 2, 5], [2, 3, 5], [3, 4, 5]); + * // => [1, 4, 5] + */ + function xor() { + var index = -1, + length = arguments.length; + + while (++index < length) { + var array = arguments[index]; + if (isArray(array) || isArguments(array)) { + var result = result + ? baseUniq(baseDifference(result, array).concat(baseDifference(array, result))) + : array; + } + } + return result || []; + } + + /** + * Creates an array of grouped elements, the first of which contains the first + * elements of the given arrays, the second of which contains the second + * elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @alias unzip + * @category Arrays + * @param {...Array} [array] Arrays to process. + * @returns {Array} Returns a new array of grouped elements. + * @example + * + * _.zip(['fred', 'barney'], [30, 40], [true, false]); + * // => [['fred', 30, true], ['barney', 40, false]] + */ + function zip() { + var array = arguments.length > 1 ? arguments : arguments[0], + index = -1, + length = array ? max(pluck(array, 'length')) : 0, + result = Array(length < 0 ? 0 : length); + + while (++index < length) { + result[index] = pluck(array, index); + } + return result; + } + + /** + * Creates an object composed from arrays of `keys` and `values`. Provide + * either a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]` + * or two arrays, one of `keys` and one of corresponding `values`. + * + * @static + * @memberOf _ + * @alias object + * @category Arrays + * @param {Array} keys The array of keys. + * @param {Array} [values=[]] The array of values. + * @returns {Object} Returns an object composed of the given keys and + * corresponding values. + * @example + * + * _.zipObject(['fred', 'barney'], [30, 40]); + * // => { 'fred': 30, 'barney': 40 } + */ + function zipObject(keys, values) { + var index = -1, + length = keys ? keys.length : 0, + result = {}; + + if (!values && length && !isArray(keys[0])) { + values = []; + } + while (++index < length) { + var key = keys[index]; + if (values) { + result[key] = values[index]; + } else if (key) { + result[key[0]] = key[1]; + } + } + return result; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a function that executes `func`, with the `this` binding and + * arguments of the created function, only after being called `n` times. + * + * @static + * @memberOf _ + * @category Functions + * @param {number} n The number of times the function must be called before + * `func` is executed. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('Done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => logs 'Done saving!', after all saves have completed + */ + function after(n, func) { + if (!isFunction(func)) { + throw new TypeError; + } + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that, when called, invokes `func` with the `this` + * binding of `thisArg` and prepends any additional `bind` arguments to those + * provided to the bound function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to bind. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var func = function(greeting) { + * return greeting + ' ' + this.name; + * }; + * + * func = _.bind(func, { 'name': 'fred' }, 'hi'); + * func(); + * // => 'hi fred' + */ + function bind(func, thisArg) { + return arguments.length > 2 + ? createWrapper(func, 17, slice(arguments, 2), null, thisArg) + : createWrapper(func, 1, null, null, thisArg); + } + + /** + * Binds methods of an object to the object itself, overwriting the existing + * method. Method names may be specified as individual arguments or as arrays + * of method names. If no method names are provided all the function properties + * of `object` will be bound. + * + * @static + * @memberOf _ + * @category Functions + * @param {Object} object The object to bind and assign the bound methods to. + * @param {...string} [methodName] The object method names to + * bind, specified as individual method names or arrays of method names. + * @returns {Object} Returns `object`. + * @example + * + * var view = { + * 'label': 'docs', + * 'onClick': function() { console.log('clicked ' + this.label); } + * }; + * + * _.bindAll(view); + * jQuery('#docs').on('click', view.onClick); + * // => logs 'clicked docs', when the button is clicked + */ + function bindAll(object) { + var funcs = arguments.length > 1 ? baseFlatten(arguments, true, false, 1) : functions(object), + index = -1, + length = funcs.length; + + while (++index < length) { + var key = funcs[index]; + object[key] = createWrapper(object[key], 1, null, null, object); + } + return object; + } + + /** + * Creates a function that, when called, invokes the method at `object[key]` + * and prepends any additional `bindKey` arguments to those provided to the bound + * function. This method differs from `_.bind` by allowing bound functions to + * reference methods that will be redefined or don't yet exist. + * See http://michaux.ca/articles/lazy-function-definition-pattern. + * + * @static + * @memberOf _ + * @category Functions + * @param {Object} object The object the method belongs to. + * @param {string} key The key of the method. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'name': 'fred', + * 'greet': function(greeting) { + * return greeting + ' ' + this.name; + * } + * }; + * + * var func = _.bindKey(object, 'greet', 'hi'); + * func(); + * // => 'hi fred' + * + * object.greet = function(greeting) { + * return greeting + 'ya ' + this.name + '!'; + * }; + * + * func(); + * // => 'hiya fred!' + */ + function bindKey(object, key) { + return arguments.length > 2 + ? createWrapper(key, 19, slice(arguments, 2), null, object) + : createWrapper(key, 3, null, null, object); + } + + /** + * Creates a function that is the composition of the provided functions, + * where each function consumes the return value of the function that follows. + * For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`. + * Each function is executed with the `this` binding of the composed function. + * + * @static + * @memberOf _ + * @category Functions + * @param {...Function} [func] Functions to compose. + * @returns {Function} Returns the new composed function. + * @example + * + * var realNameMap = { + * 'pebbles': 'penelope' + * }; + * + * var format = function(name) { + * name = realNameMap[name.toLowerCase()] || name; + * return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase(); + * }; + * + * var greet = function(formatted) { + * return 'Hiya ' + formatted + '!'; + * }; + * + * var welcome = _.compose(greet, format); + * welcome('pebbles'); + * // => 'Hiya Penelope!' + */ + function compose() { + var funcs = arguments, + length = funcs.length; + + while (length--) { + if (!isFunction(funcs[length])) { + throw new TypeError; + } + } + return function() { + var args = arguments, + length = funcs.length; + + while (length--) { + args = [funcs[length].apply(this, args)]; + } + return args[0]; + }; + } + + /** + * Creates a function which accepts one or more arguments of `func` that when + * invoked either executes `func` returning its result, if all `func` arguments + * have been provided, or returns a function that accepts one or more of the + * remaining `func` arguments, and so on. The arity of `func` can be specified + * if `func.length` is not sufficient. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @returns {Function} Returns the new curried function. + * @example + * + * var curried = _.curry(function(a, b, c) { + * console.log(a + b + c); + * }); + * + * curried(1)(2)(3); + * // => 6 + * + * curried(1, 2)(3); + * // => 6 + * + * curried(1, 2, 3); + * // => 6 + */ + function curry(func, arity) { + arity = typeof arity == 'number' ? arity : (+arity || func.length); + return createWrapper(func, 4, null, null, null, arity); + } + + /** + * Creates a function that will delay the execution of `func` until after + * `wait` milliseconds have elapsed since the last time it was invoked. + * Provide an options object to indicate that `func` should be invoked on + * the leading and/or trailing edge of the `wait` timeout. Subsequent calls + * to the debounced function will return the result of the last `func` call. + * + * Note: If `leading` and `trailing` options are `true` `func` will be called + * on the trailing edge of the timeout only if the the debounced function is + * invoked more than once during the `wait` timeout. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to debounce. + * @param {number} wait The number of milliseconds to delay. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=false] Specify execution on the leading edge of the timeout. + * @param {number} [options.maxWait] The maximum time `func` is allowed to be delayed before it's called. + * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // avoid costly calculations while the window size is in flux + * var lazyLayout = _.debounce(calculateLayout, 150); + * jQuery(window).on('resize', lazyLayout); + * + * // execute `sendMail` when the click event is fired, debouncing subsequent calls + * jQuery('#postbox').on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * }); + * + * // ensure `batchLog` is executed once after 1 second of debounced calls + * var source = new EventSource('/stream'); + * source.addEventListener('message', _.debounce(batchLog, 250, { + * 'maxWait': 1000 + * }, false); + */ + function debounce(func, wait, options) { + var args, + maxTimeoutId, + result, + stamp, + thisArg, + timeoutId, + trailingCall, + lastCalled = 0, + maxWait = false, + trailing = true; + + if (!isFunction(func)) { + throw new TypeError; + } + wait = nativeMax(0, wait) || 0; + if (options === true) { + var leading = true; + trailing = false; + } else if (isObject(options)) { + leading = options.leading; + maxWait = 'maxWait' in options && (nativeMax(wait, options.maxWait) || 0); + trailing = 'trailing' in options ? options.trailing : trailing; + } + var delayed = function() { + var remaining = wait - (now() - stamp); + if (remaining <= 0) { + if (maxTimeoutId) { + clearTimeout(maxTimeoutId); + } + var isCalled = trailingCall; + maxTimeoutId = timeoutId = trailingCall = undefined; + if (isCalled) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + } + } else { + timeoutId = setTimeout(delayed, remaining); + } + }; + + var maxDelayed = function() { + if (timeoutId) { + clearTimeout(timeoutId); + } + maxTimeoutId = timeoutId = trailingCall = undefined; + if (trailing || (maxWait !== wait)) { + lastCalled = now(); + result = func.apply(thisArg, args); + if (!timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + } + }; + + return function() { + args = arguments; + stamp = now(); + thisArg = this; + trailingCall = trailing && (timeoutId || !leading); + + if (maxWait === false) { + var leadingCall = leading && !timeoutId; + } else { + if (!maxTimeoutId && !leading) { + lastCalled = stamp; + } + var remaining = maxWait - (stamp - lastCalled), + isCalled = remaining <= 0; + + if (isCalled) { + if (maxTimeoutId) { + maxTimeoutId = clearTimeout(maxTimeoutId); + } + lastCalled = stamp; + result = func.apply(thisArg, args); + } + else if (!maxTimeoutId) { + maxTimeoutId = setTimeout(maxDelayed, remaining); + } + } + if (isCalled && timeoutId) { + timeoutId = clearTimeout(timeoutId); + } + else if (!timeoutId && wait !== maxWait) { + timeoutId = setTimeout(delayed, wait); + } + if (leadingCall) { + isCalled = true; + result = func.apply(thisArg, args); + } + if (isCalled && !timeoutId && !maxTimeoutId) { + args = thisArg = null; + } + return result; + }; + } + + /** + * Defers executing the `func` function until the current call stack has cleared. + * Additional arguments will be provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to defer. + * @param {...*} [arg] Arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { console.log(text); }, 'deferred'); + * // logs 'deferred' after one or more milliseconds + */ + function defer(func) { + if (!isFunction(func)) { + throw new TypeError; + } + var args = slice(arguments, 1); + return setTimeout(function() { func.apply(undefined, args); }, 1); + } + + /** + * Executes the `func` function after `wait` milliseconds. Additional arguments + * will be provided to `func` when it is invoked. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay execution. + * @param {...*} [arg] Arguments to invoke the function with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { console.log(text); }, 1000, 'later'); + * // => logs 'later' after one second + */ + function delay(func, wait) { + if (!isFunction(func)) { + throw new TypeError; + } + var args = slice(arguments, 2); + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided it will be used to determine the cache key for storing the result + * based on the arguments provided to the memoized function. By default, the + * first argument provided to the memoized function is used as the cache key. + * The `func` is executed with the `this` binding of the memoized function. + * The result cache is exposed as the `cache` property on the memoized function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] A function used to resolve the cache key. + * @returns {Function} Returns the new memoizing function. + * @example + * + * var fibonacci = _.memoize(function(n) { + * return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); + * }); + * + * fibonacci(9) + * // => 34 + * + * var data = { + * 'fred': { 'name': 'fred', 'age': 40 }, + * 'pebbles': { 'name': 'pebbles', 'age': 1 } + * }; + * + * // modifying the result cache + * var get = _.memoize(function(name) { return data[name]; }, _.identity); + * get('pebbles'); + * // => { 'name': 'pebbles', 'age': 1 } + * + * get.cache.pebbles.name = 'penelope'; + * get('pebbles'); + * // => { 'name': 'penelope', 'age': 1 } + */ + function memoize(func, resolver) { + if (!isFunction(func)) { + throw new TypeError; + } + var memoized = function() { + var cache = memoized.cache, + key = resolver ? resolver.apply(this, arguments) : keyPrefix + arguments[0]; + + return hasOwnProperty.call(cache, key) + ? cache[key] + : (cache[key] = func.apply(this, arguments)); + } + memoized.cache = {}; + return memoized; + } + + /** + * Creates a function that is restricted to execute `func` once. Repeat calls to + * the function will return the value of the first call. The `func` is executed + * with the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // `initialize` executes `createApplication` once + */ + function once(func) { + var ran, + result; + + if (!isFunction(func)) { + throw new TypeError; + } + return function() { + if (ran) { + return result; + } + ran = true; + result = func.apply(this, arguments); + + // clear the `func` variable so the function may be garbage collected + func = null; + return result; + }; + } + + /** + * Creates a function that, when called, invokes `func` with any additional + * `partial` arguments prepended to those provided to the new function. This + * method is similar to `_.bind` except it does **not** alter the `this` binding. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var greet = function(greeting, name) { return greeting + ' ' + name; }; + * var hi = _.partial(greet, 'hi'); + * hi('fred'); + * // => 'hi fred' + */ + function partial(func) { + return createWrapper(func, 16, slice(arguments, 1)); + } + + /** + * This method is like `_.partial` except that `partial` arguments are + * appended to those provided to the new function. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [arg] Arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * var defaultsDeep = _.partialRight(_.merge, _.defaults); + * + * var options = { + * 'variable': 'data', + * 'imports': { 'jq': $ } + * }; + * + * defaultsDeep(options, _.templateSettings); + * + * options.variable + * // => 'data' + * + * options.imports + * // => { '_': _, 'jq': $ } + */ + function partialRight(func) { + return createWrapper(func, 32, null, slice(arguments, 1)); + } + + /** + * Creates a function that, when executed, will only call the `func` function + * at most once per every `wait` milliseconds. Provide an options object to + * indicate that `func` should be invoked on the leading and/or trailing edge + * of the `wait` timeout. Subsequent calls to the throttled function will + * return the result of the last `func` call. + * + * Note: If `leading` and `trailing` options are `true` `func` will be called + * on the trailing edge of the timeout only if the the throttled function is + * invoked more than once during the `wait` timeout. + * + * @static + * @memberOf _ + * @category Functions + * @param {Function} func The function to throttle. + * @param {number} wait The number of milliseconds to throttle executions to. + * @param {Object} [options] The options object. + * @param {boolean} [options.leading=true] Specify execution on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] Specify execution on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // avoid excessively updating the position while scrolling + * var throttled = _.throttle(updatePosition, 100); + * jQuery(window).on('scroll', throttled); + * + * // execute `renewToken` when the click event is fired, but not more than once every 5 minutes + * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, { + * 'trailing': false + * })); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (!isFunction(func)) { + throw new TypeError; + } + if (options === false) { + leading = false; + } else if (isObject(options)) { + leading = 'leading' in options ? options.leading : leading; + trailing = 'trailing' in options ? options.trailing : trailing; + } + debounceOptions.leading = leading; + debounceOptions.maxWait = wait; + debounceOptions.trailing = trailing; + + return debounce(func, wait, debounceOptions); + } + + /** + * Creates a function that provides `value` to the wrapper function as its + * first argument. Additional arguments provided to the function are appended + * to those provided to the wrapper function. The wrapper is executed with + * the `this` binding of the created function. + * + * @static + * @memberOf _ + * @category Functions + * @param {*} value The value to wrap. + * @param {Function} wrapper The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('Fred, Wilma, & Pebbles'); + * // => '

Fred, Wilma, & Pebbles

' + */ + function wrap(value, wrapper) { + return createWrapper(wrapper, 16, [value]); + } + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new function. + * @example + * + * var object = { 'name': 'fred' }; + * var getter = _.constant(object); + * getter() === object; + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + /** + * Produces a callback bound to an optional `thisArg`. If `func` is a property + * name the created callback will return the property value for a given element. + * If `func` is an object the created callback will return `true` for elements + * that contain the equivalent object properties, otherwise it will return `false`. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} [func=identity] The value to convert to a callback. + * @param {*} [thisArg] The `this` binding of the created callback. + * @param {number} [argCount] The number of arguments the callback accepts. + * @returns {Function} Returns a callback function. + * @example + * + * var characters = [ + * { 'name': 'barney', 'age': 36 }, + * { 'name': 'fred', 'age': 40 } + * ]; + * + * // wrap to create custom callback shorthands + * _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) { + * var match = /^(.+?)__([gl]t)(.+)$/.exec(callback); + * return !match ? func(callback, thisArg) : function(object) { + * return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3]; + * }; + * }); + * + * _.filter(characters, 'age__gt38'); + * // => [{ 'name': 'fred', 'age': 40 }] + */ + function createCallback(func, thisArg, argCount) { + var type = typeof func; + if (func == null || type == 'function') { + return baseCreateCallback(func, thisArg, argCount); + } + // handle "_.pluck" style callback shorthands + if (type != 'object') { + return property(func); + } + var props = keys(func), + key = props[0], + a = func[key]; + + // handle "_.where" style callback shorthands + if (props.length == 1 && a === a && !isObject(a)) { + // fast path the common case of providing an object with a single + // property containing a primitive value + return function(object) { + var b = object[key]; + return a === b && (a !== 0 || (1 / a == 1 / b)); + }; + } + return function(object) { + var length = props.length, + result = false; + + while (length--) { + if (!(result = baseIsEqual(object[props[length]], func[props[length]], null, true))) { + break; + } + } + return result; + }; + } + + /** + * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their + * corresponding HTML entities. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} string The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('Fred, Wilma, & Pebbles'); + * // => 'Fred, Wilma, & Pebbles' + */ + function escape(string) { + return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); + } + + /** + * This method returns the first argument provided to it. + * + * @static + * @memberOf _ + * @category Utilities + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'name': 'fred' }; + * _.identity(object) === object; + * // => true + */ + function identity(value) { + return value; + } + + /** + * Adds function properties of a source object to the destination object. + * If `object` is a function methods will be added to its prototype as well. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Function|Object} [object=lodash] object The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options] The options object. + * @param {boolean} [options.chain=true] Specify whether the functions added are chainable. + * @example + * + * function capitalize(string) { + * return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); + * } + * + * _.mixin({ 'capitalize': capitalize }); + * _.capitalize('fred'); + * // => 'Fred' + * + * _('fred').capitalize().value(); + * // => 'Fred' + * + * _.mixin({ 'capitalize': capitalize }, { 'chain': false }); + * _('fred').capitalize(); + * // => 'Fred' + */ + function mixin(object, source, options) { + var chain = true, + methodNames = source && functions(source); + + if (!source || (!options && !methodNames.length)) { + if (options == null) { + options = source; + } + ctor = lodashWrapper; + source = object; + object = lodash; + methodNames = functions(source); + } + if (options === false) { + chain = false; + } else if (isObject(options) && 'chain' in options) { + chain = options.chain; + } + var ctor = object, + isFunc = isFunction(ctor); + + forEach(methodNames, function(methodName) { + var func = object[methodName] = source[methodName]; + if (isFunc) { + ctor.prototype[methodName] = function() { + var chainAll = this.__chain__, + value = this.__wrapped__, + args = [value]; + + push.apply(args, arguments); + var result = func.apply(object, args); + if (chain || chainAll) { + if (value === result && isObject(result)) { + return this; + } + result = new ctor(result); + result.__chain__ = chainAll; + } + return result; + }; + } + }); + } + + /** + * Reverts the '_' variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @memberOf _ + * @category Utilities + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + context._ = oldDash; + return this; + } + + /** + * A no-operation function. + * + * @static + * @memberOf _ + * @category Utilities + * @example + * + * var object = { 'name': 'fred' }; + * _.noop(object) === undefined; + * // => true + */ + function noop() { + // no operation performed + } + + /** + * Gets the number of milliseconds that have elapsed since the Unix epoch + * (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @category Utilities + * @example + * + * var stamp = _.now(); + * _.defer(function() { console.log(_.now() - stamp); }); + * // => logs the number of milliseconds it took for the deferred function to be called + */ + var now = isNative(now = Date.now) && now || function() { + return new Date().getTime(); + }; + + /** + * Converts the given value into an integer of the specified radix. + * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the + * `value` is a hexadecimal, in which case a `radix` of `16` is used. + * + * Note: This method avoids differences in native ES3 and ES5 `parseInt` + * implementations. See http://es5.github.io/#E. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} value The value to parse. + * @param {number} [radix] The radix used to interpret the value to parse. + * @returns {number} Returns the new integer value. + * @example + * + * _.parseInt('08'); + * // => 8 + */ + var parseInt = nativeParseInt(whitespace + '08') == 8 ? nativeParseInt : function(value, radix) { + // Firefox < 21 and Opera < 15 follow the ES3 specified implementation of `parseInt` + return nativeParseInt(isString(value) ? value.replace(reLeadingSpacesAndZeros, '') : value, radix || 0); + }; + + /** + * Creates a "_.pluck" style function, which returns the `key` value of a + * given object. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} key The name of the property to retrieve. + * @returns {Function} Returns the new function. + * @example + * + * var characters = [ + * { 'name': 'fred', 'age': 40 }, + * { 'name': 'barney', 'age': 36 } + * ]; + * + * var getName = _.property('name'); + * + * _.map(characters, getName); + * // => ['barney', 'fred'] + * + * _.sortBy(characters, getName); + * // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }] + */ + function property(key) { + return function(object) { + return object[key]; + }; + } + + /** + * Produces a random number between `min` and `max` (inclusive). If only one + * argument is provided a number between `0` and the given number will be + * returned. If `floating` is truey or either `min` or `max` are floats a + * floating-point number will be returned instead of an integer. + * + * @static + * @memberOf _ + * @category Utilities + * @param {number} [min=0] The minimum possible value. + * @param {number} [max=1] The maximum possible value. + * @param {boolean} [floating=false] Specify returning a floating-point number. + * @returns {number} Returns a random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(min, max, floating) { + var noMin = min == null, + noMax = max == null; + + if (floating == null) { + if (typeof min == 'boolean' && noMax) { + floating = min; + min = 1; + } + else if (!noMax && typeof max == 'boolean') { + floating = max; + noMax = true; + } + } + if (noMin && noMax) { + max = 1; + } + min = +min || 0; + if (noMax) { + max = min; + min = 0; + } else { + max = +max || 0; + } + if (floating || min % 1 || max % 1) { + var rand = nativeRandom(); + return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max); + } + return baseRandom(min, max); + } + + /** + * Resolves the value of property `key` on `object`. If `key` is a function + * it will be invoked with the `this` binding of `object` and its result returned, + * else the property value is returned. If `object` is falsey then `undefined` + * is returned. + * + * @static + * @memberOf _ + * @category Utilities + * @param {Object} object The object to inspect. + * @param {string} key The name of the property to resolve. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { + * 'cheese': 'crumpets', + * 'stuff': function() { + * return 'nonsense'; + * } + * }; + * + * _.result(object, 'cheese'); + * // => 'crumpets' + * + * _.result(object, 'stuff'); + * // => 'nonsense' + */ + function result(object, key) { + if (object) { + var value = object[key]; + return isFunction(value) ? object[key]() : value; + } + } + + /** + * A micro-templating method that handles arbitrary delimiters, preserves + * whitespace, and correctly escapes quotes within interpolated code. + * + * Note: In the development build, `_.template` utilizes sourceURLs for easier + * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl + * + * For more information on precompiling templates see: + * http://lodash.com/custom-builds + * + * For more information on Chrome extension sandboxes see: + * http://developer.chrome.com/stable/extensions/sandboxingEval.html + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} text The template text. + * @param {Object} data The data object used to populate the text. + * @param {Object} [options] The options object. + * @param {RegExp} [options.escape] The "escape" delimiter. + * @param {RegExp} [options.evaluate] The "evaluate" delimiter. + * @param {Object} [options.imports] An object to import into the template as local variables. + * @param {RegExp} [options.interpolate] The "interpolate" delimiter. + * @param {string} [sourceURL] The sourceURL of the template's compiled source. + * @param {string} [variable] The data object variable name. + * @returns {Function|string} Returns a compiled function when no `data` object + * is given, else it returns the interpolated text. + * @example + * + * // using the "interpolate" delimiter to create a compiled template + * var compiled = _.template('hello <%= name %>'); + * compiled({ 'name': 'fred' }); + * // => 'hello fred' + * + * // using the "escape" delimiter to escape HTML in data property values + * _.template('<%- value %>', { 'value': ' + + + + + + + + + + + + + + +

EXAMPLE OF EXECUTION PMDYNAFORM

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ProcessMaker - PMDynaform

+ Please enter a valid json. (This json can be obtained from the form editor ProcessMaker). More examples in pmDynaform/data
+
+ +
+
+
© Copyright 2000 - 2015 Colosa, Inc. www.colosa.com
+
+
+ + + + +
+
+
+
    + + diff --git a/workflow/public_html/lib/pmdynaform/build/form2.html b/workflow/public_html/lib/pmdynaform/build/form2.html new file mode 100644 index 000000000..aa343cf30 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/form2.html @@ -0,0 +1,2047 @@ + + + + PMDynaform + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    ProcessMaker - PMDynaform

    + Please enter a valid json. (This json can be obtained from the form editor ProcessMaker). More examples in pmDynaform/data
    +
    + +
    +
    +
    © Copyright 2000 - 2015 Colosa, Inc. www.colosa.com
    +
    +
    + + + +
    +
    +
    + + diff --git a/workflow/public_html/lib/pmdynaform/build/formRest.html b/workflow/public_html/lib/pmdynaform/build/formRest.html new file mode 100644 index 000000000..d06e17f26 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/formRest.html @@ -0,0 +1,2144 @@ + + + + PMDynaform + + + + + + + + + + + + + + + + + +
    + +
    +

    Information for RestClient

    +

    Inputs workpace, project, server and tokens forRestClient

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflow/public_html/lib/pmdynaform/build/gridRest.html b/workflow/public_html/lib/pmdynaform/build/gridRest.html new file mode 100644 index 000000000..b557a60e5 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/gridRest.html @@ -0,0 +1,2154 @@ + + + + PMDynaform + + + + + + + + + + + + + + + + + +
    + +
    +

    Information for RestClient

    +

    Inputs workpace, project, server and tokens forRestClient

    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/workflow/public_html/lib/pmdynaform/build/img/add-row.png b/workflow/public_html/lib/pmdynaform/build/img/add-row.png new file mode 100644 index 0000000000000000000000000000000000000000..79ec67e2c7b4e2842538110916996e488ffda50b GIT binary patch literal 369 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 b0B#2q_41n^)_t3?e(5B-lW{e!Vab03?INbs literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/doc.png b/workflow/public_html/lib/pmdynaform/build/img/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..7427fc3df21ff9fdfb144aea650b8f574ad1b870 GIT binary patch literal 2845 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/file.png b/workflow/public_html/lib/pmdynaform/build/img/file.png new file mode 100644 index 0000000000000000000000000000000000000000..53e52c6172a383305b90c7a9f566b28ddf5a9e8b GIT binary patch literal 2105 zcmaJ?X;f2Z8V+F<2BB3Wgbt=bJ)%HzLkK2iPl6zZVhDmn)R5ee3`uTCE(AoFuz0`- z(&Eq-EmmYzTv&o2wF<+C2o(jP6mUVT2xV|2-DhHi{6o=iGLXd@W`@DRkPue!6d=l507Zg0e3p2xrE&y~Lb-Xy%X$205XMDDz3QV{0h;-wOqk{0idf5%Hh_Bt~G zk9+3=N4w+yNGgmKgrh?W5a;6L?8qkq0FFX&0>~~D3gCbv5dji`h`ba>fJ}3t&`7Sh z_YWS4rVt2eY=-aqSjfp8FM?q?jX+STR8A^qCrA-R0H{=|j)O#UL_8do2{M=$?4OGC$!UrlGEr4kOxBw4g^V7x)>yaU`Q!~lfoMD`Q!fDY)VLfIg_=h#_wZ>vn&m(O7<^`PWGole%#~7``<SgmnCR=0ZntK;#T)VRi5KhDR$KDPCqJH^ z^=Mms=&r7g!DenJUvo40>%4zBCdk;sfNM*@*KV0YKxKn1uPWR}Vs@ndhBo~eFl^wCs@O+dj9d)b$ITD{A@Y#xc0E!d{LO22zQ`p%0<@*qPr9&J}sac6QEAmPJOP@NJqT^2Z&o8VbM3x%@i0 z>YlP^YmR+kbH&!ZVtHn-F%fE#?vfQ)Xu98e3H(V^*iFJI3RUFRC+^a;nq^EzB}2 z)lL>>CN=6EwwMQZ(8+U^>a`eoOEbEoT0K@=kebkWv!_>0a2r`nkaIUa81mLz2v!N| zntFx1V=l6PIi;91hg_3deOSV-qXSC(5+|}EKQ|39B(x{Z0_eol6jACPVVBM8L+mRZ5$0(wE3X6Zo=sDcU*c2(?io2@Xxc|_7vjN1LK7U1;u$=_6LuiDvk&c+eKyu z+>9%Vz^Y`@o~^Iex;6Piq_WIr03pVMfs2G8HH$NhAne&^C4vwW9!Hm5j=J$-fE>l_0sRK345 UJ*>N7tL`%QX9hB^_#96C4=1o}m;e9( literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/geoMap.jpg b/workflow/public_html/lib/pmdynaform/build/img/geoMap.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eae4769269e0ced138d73344417d643329596ca6 GIT binary patch literal 130044 zcmeFabwE_x*FSt_hVB-WZfTJ2?(Pr}W(F8)=u$zEP!U8_N~JpmX+%_7K&25xIu#@Y z1c~1njO+d8^FD9<^SZrr&f06Qz4qE`$2l|m!@9?#$I}d@YC$L`0MOF|cmM#v18^Y} z01Tuc;6DIz8o)lG0l*P*<`?Y>;r<~5N-rDvjUiqWa1ro!wC3SsCU3DmJOe9{Uqz^`e@%>1+9 ze|RT{d-?c*W*UO>=MYF=I7ml;w0oeR7lywM(o~La7#fNh8!8{rK#-=z(9Yj!z7v`6 zv?7K^cz7Z}8H~+d2oD5?ZUyP<0scskhUtQIQ~(MI`Uy4&((La39w?Ch3er>_NC#g4 zz#_u%{g7}MkQM@IA|F#@6_Az%CmfOUZ?xlYv>!4Ev=abS&|bklC}$TxW^VXdW??BQ zNoGxCpgYpfkKfP%?&jcwU{*nUcsY0m1Hkt_V`>2u7~e93P8JuI5*Oze5dhu)EB(j9 zUsC^>z>Mv8i7lg(F@w*WAPGV}lAB>rDl{LQT2?BFv-Iw5_Ko?uhv;4DLVI)lUQi9q?G(4NdF z&wn?<|I2E>*?=Lx&ufsN%sB$6>;(X_H&g&@wFkhWBm`jR)4&qQuW{4GHwQ2)&w^?3 z`@9Efu>9ouw+r+(n1%YHoS89f6=PFoxW7*Th6dLJ=7J3n0HgpFKnL!sYydaF4~PH~ zfDE7rr~%r50bmMP0d@c!Z~;63A0QC81Y8B8fEXYixDTWP=|B!p2$TVpKrQeTcmcEn z-Qey!1dIbyz&!8~SO<21Zx9Fs7eWl7gwR2lARG{0hzLXyA`el6=t7JkR*(x2XNV`n zA94wD4H5%MfTTh)A%&0%NIm2Qqzlpqc?X$>EJHRS`%oB^2ucNIfO0|wp^{J~s1DQ= zY72FSdP75?5zshjGBgWX0wyg89Hg zVK-rkuq;>^tO3>m8-Pv0KEd{|aIh$`n6db=WUw@`%&_2C-dLenx3E&N3b1OhTCoPO zrm@zsj9KjSrLncJEwP=k1F@s96S4EKtFha#hp^|dcW`iUXmGf2BycowtZ-a$ zF5=w6d4yAr^BkuSXBKB07Z;ZfmlszK*8tZ6*AF)eHwCu@w;8t|cOLgE9w8nRo(P^g zo;98)UN~MNUJ>3iynehzyl?nq_#F7s_y+h0{9yds_&N9u_;2v%@xKv}6L1m85ttIV z5?m!nCMY9lBY01+MMy}9!IGKaE_a-Ir@ii=8%%9SdHs+8(A)jBl=wJ5bYbrAIf>L%(b z8W;^HjTVhN&25@Wnqiv#Qw*n+P9aa-I8}D4|I{w+8CpeJB<)Swa@rxl6Q{9G^PDz19e6tJbld4qXQ z4~!O!g^e#6cbHI`*qaoY?3gN>-ZmXK<2Lg*dudK;e%`#$eAhzNBEe$HQqc0UWw+I7 zE0k58HLkU}b)NOMjhfAUoB8u%=cCRK+j7|k*>>5TwsW^@vM057uzzv^`+~)Vq6-HO z1`b&c+m2d}4;|OxD)1!uM}#8c9%30OhfF{&I>|XDI4wELIp1|&c2RIiboqo*L8YQL zTs2+OU3c9K-16Oy-7Vb9J@7m(c+`7Rc)EGEq8ZUa=squAuPCo6Z)xxQ-s?U(K6$h$(Khl3XKtA9>z}G~Wk^-0R!ox6|Tr z;yvSs?cemyq^Szt*zTCIJ-<2qun4UzC#NtUf7u|@P~9ldnE#aJ>4PTf zrrXa5o<%%6ZVqYQe(v@B(+lSpvoGymj<;C047M7zzHZZL>ugtVZ|P9#XzrBjeA*@5 zRsTxzRc*I;cTJC2Pj#-qgL7dfU(^+xM(rq5s8z>OlLT)?oLL{!rhr z+3@Jd`H`tn#OTsH_jem(0b}3Bue`^8e{+ItBJl(Lhpfr7ljT$5Q%%#V(>*gLGvl-H z*^hI+a|iPg3&abFi%g4!OCn28m(`cwuGp;1fAsqJ?Nih$`Rc`Cr*>|5+FehWOnJxD%0d)RQKbM*e$ z9hO7Y7d;MsyA=B!^+KPzYly897k0dS4a6p}Lby2HaPSCadxqr|Ml(gxbq&Kk-xjW;4jmClM_J{FkTbtb`1clY{bj=O z7(fI&X_FjK02azy`4V^^f5lmm7w{?F*BbHq`l>&;YV`DT3CSyj8LnaXLT~c&^gOP< z|ITjlkf#1qnFefc_uTT4(>%i0Tyv+Ztm7C^f=_Mux^`4{K(JsRh_FLS=p7DbAHtKb z9~4;-6)`Q(6AE{}rNE-yWhg^ewjTomRisr`?BdVYNrhigEPN@5W1?KK!1Y;@Af#gG zDZj`YzSpl2)kxnFW=3;YP0%e;_fjl&2F)9Vreh$?%9&#=NW8u^R((eE+r6VcKPnTaG19-bnj;ar4 ztR^ih+s4s(?{&G9;M~mPRYzfCC2k*^12^Tw`IL-g^vd2_2gQnQ1TIQx)dv%!@}gHA zxcpV`+QdYSpflP+kAX>z=x8gAo4x8Hd&j_wz5CBPzRFn`?00R8y+MzK_+P0Lt3k|( zC3Sf0T>Mm>-u-38HdIi1iNqsVGAKC?l>|PYhSi@oG|~>uSxo2|Y}?r9F&b1?+8hJn z(!I?)v&TSLBWZ!Xl{6+^z`kbPpzs;_Wc{*HIK%*n~`&G7`^8a z8IG0fcqbe{aL9=x5fya>w^KmpBaX$;L*4M5w>=MQ$X84Q>*KYY7I73z{AS zbhZW@J7xoJo?-%iW)5e{#uTK+V+!5Uzop$zOMThBl7ws?>a8EKM9^LBn#j+uXx8H1 z+0NLX1@pDLdIQ~e&wA&!k-@*iU`!c8blhn-)O{YF-(H8^Xv_C$uz4{@=*GVPt zn-aGZW8YVi#>cO|I_Neu&$F zOJxvQTLufji5@8=F7nV=nW6a$OV8*+iBb+16?RSe1W{}jV!Zzq0`;MrVo#23Di z%n)?__E#3K+m{)b^eZyp8l4SJhl7m{ zx2nRx3H;XN#mq5q{C2KnCD;IqV))Hk?I!xewdRYpvTNRRjV51qD3pk~7 z>TFM9G);AjTQn=~+xKs>KLx%G+q!=YTvHuynoE*?Nmt+Do=8f$SMJ=nTrs(a{jfW` za%{=NNiR2U*VD7N=>^3C?ZL|X)mOD*cQ)j?=-TrrDvS+s(^7 z!vjt-N;sOr`Qa0i+x>W1O}zq0&%31#*9HYgiRHtxgb5+Tk>y9ng*rdWxRDV zD;fW&=~hMAbyOUG*?3WA>xOjuRqMdK7sQCV*oyqH+ffU(NWEG-HX;Tq|~xO zn|A=Mk1Gm-{z+Ou?FHZG{_OblYmEHFyBEVQ6S9%7KHx@OR`vXfZFQ)^X0LnGI?PMy z7*JR)ut^C}u^!h7=!I+?)o$MZWHdz`rr*)BUyNUM>lw~loTkCZwZicX1N82ZD+AHs zsiny_zUV5K5rZVJoN9@RO1DM}Yu>up9N8;xN&7uKj)AUXKJNmlJ1otrZfyIlB@cO$ zzqJJe7uz3HkGxbUsLR<|2BdOJve=K%xPvM;W3zORVzyZs5Z3{i!N+$-sxs})~N%=`t;TsxE- zJJo1Ba8OG4>}ENimFDRU)fL^#Mn}8bNiI*k=M-_f7fOZ(_`Jxl4Eh*(+66U39VVg^ z4jx_2ofCcjK|(m+H+A?JFgxGg*4@^V*BiAOV7cBqADiq~yF9$V7+9?gXA~fpkJyjK z$?(SOj@eBDTsyzf@9)c8J8xe?=M4pLm-6L=pVBaWbR*2Ge7TS)L?hMu3FUG|_hM7; z*U-&3ZVdiWwR7%F)4T|Z)1>`gyP-E;3G>=H!jAiLr@4@4p_oer8-(yw!$hqF3`ZWo59$Q1@`$bQ5(c4AQ&L9fsEo9l@DcJUM*^cpj$b5>lv=e)OVH5B4W#-b;%a0$FR=+-@ zbw-yiJu9&K&90}RfAA^O&9U8cFV>P6Ka5DdSaH9^DnZ6fjIX-yYCp~AYq!f3&cP`b zt1LIFkL0T;<&%}AWWAJAj~{hfJ^bRmZN7tO{ksPyRr`sa(v)9WQrz<7U4}-Ve~{~p zl)F823={)~JqJ&!#zx4k!WSwgmDbYVJlPTtbzJ)BQdCp|M>dDPoy=atg`2B$4Re~< zipu46SlIAh{6xPBn|RgqEs*XtDMxkd>V@RwP0NQpm2+Ke!WGP({ zY;q1CTEy!;4<}A_mA@CpHSxvp-O&0qM$69^*7P$}J(zaqY13S;u$^s%<>Rvi@67p^ zrhav%gb5$Yr($1{PZCWc%pd)jwkWea0uQiS2A@%3Ip)6H^=0L3jMw}%-d)zcZIleadHv-hexIm2}7leV8Z$#Y+E)Prm$R|Hxw zf3fu5>@IGA4^-B^;dnNJ(@<-13=nkiOeoH-IjIHGAP$9WNG?otlceWN?2R7-J?G2N zMz7vtqHM)2Kr^jd zs_Te`-ahW1L6*TZ*$j4aPRp9w!Q7)B^}GJkUI$c6zcOyS^=h8X;JR6o!(JeorBczw zd*ljyH>@P9C;tr0ny@w*R{x0d!dj@5Uzj*N@Xju{*JkBc+*x&({B|uGy;5@UmaL2W zYVK%R|F+=iXbtSqM2nror?C+aBsAfXo}<)i^h(1Ws`(CcFT>ZG=G!L=f!3VX~kNl{kOd^|AS z{#LY)y2ctSTrusvHpw&mu}#T7m&bX1V@vpRg;iLbb%6&|W798Lbn1&Z@*7xY;A%{% zJn$-?OQMXt7Ar%E%>}n)-W1-r$ai^kZ7AX~u2?T>V!7${&YEjCmx(mLVDWTscja^S zYN@Z3K3CI_a_2(%xDDgfTdt+5-TM;OFX?F!qOKS5_ocH& zU!Fe$Gd7^Ve>Ww`Dlpf)1n2zc4_?Q>v)U~)K3cght7nk@nSFe2e{Ng$KPyEWIo?v}jx5eC9)*d21-q~*P` zmZz4J44MlxdCs;TSC3)>pI)Kg$X4C>*8Igxz!_^kUK`pPU7TOU_xN6r%bK`Sx)(f4 zeMD<7bV_Mu=kd6ihZmn4EVqJj)l4@g_V$IL*T7oZTsph%6~;XZUeE9_YDZc)Iq8c1 zSL38*;SWdLZCgYNYRyVdS`XO{b5B)K);GXf3jq9q+L>5O0U1ZrOw!}Q>E}8F>KB}S z*X_&AE2vI(9C5dCA>_D+Z`JN)hS+^xB3uKW59i8BJ=>!tH)iBN&tE1! z>RsX6m}ytLzQXqi>gclT_vB~*N$M#D?a+O38-2Mkkt~}dAC)^WU)29(=OL3h+c&1Y z{_>jV$AIq*;T+Nznmmyn16`-9S*FKzG}-RFnNxFMvuC7Ey0&!NH&{Vg;usLzYYuI* z>IGWpXGl4=SSEJf)KhcpUt+i}Ir=a;iW=Or4sb~Spgs}>R_Uv!-m zSYaO9>zFWo z#Gl-`A+z^cSb^R2RjOJI&KeOz*D+x4^ThMq(y+>y-v>@=Aw?0@+r(y{(1ve6=ZuLB z+&L(pP-QuOcf86;^w)vuIRPO+Qdvt6>*UM;Af<;`1F$n38uU=`bm4}__cD%?Z{TD) z*pF`^5qwT`=)APhNgMP@J?WFO&)}5|{CxkmPUz)>^7J$C_w(|{oW5aBe*r^ZKNCkZ z+WkaA%hL~u^z`?@6kuq~UB%r8lP5i?Yk~^GNGPNHFm*7+-*qB=^c_5qrfQa$lf>_h zeXn5XgGM`;m-BTIlBPy$>5f4~>;1CRhSfH=8&fkz$wAms=+V3Yy`Ucc&r zxf6xT?tY#>Y$I~?N4fi0T%g^&?cfjsC`uxfmJNxSW%Bc8ws{EDl^!qEL>*((Lt3=<~FW^^3&BI;wR|fRx zU#gYChsh6@eD@asp1y(SrYGmxfH8uZ8G-h9R76iY0Rbo!+RlmD4a!Q=m*>VNVucN4h#cfO$yT+!-R2^ri6?PUReTQbDVRq#ac zr~61S1;(IF%4k17w1+#|)A>gwqMs!g6Mo|p|KuBEPMCiyApBVX+V+c$Sv9cL6P09u z1_(lcg8zQpPgWG?Ng2s6O96!|;E^w;*5(P1006)r_`vj?i$#3G#jM|;llpYO@{A|7 zwodZ+Cs*(SInf0|C@_iO$07o!@rf*WunZYikdqv^r-A8Y zr#s0Do#dgA@1+>KF_vRyAnr*y-U;W&+J-8EionkguVbJpzw0`U$-*!@&-cD#vH%81 z0xbZEQ-BG80z3g`a5q{7KmLF_fCi6bg~5+8xF5kmju&|M0rw>YSn^{p!sz%d{aC;l z4o2%Qn947a-voZ~ewdHRd-}U$_EL-+a2(P8o(SK6*csq{7=XixgD}hK*PI2J|1jqP zjTLbM$Erh=#La)Q|1M7G=&S;wHhg|_F8O!; z${N24z$$<~+7shzd_S}o_!8iY{C!U(a0fTff8r83o@}=N#3wuf?fe7#WNmU|8Uiq& zAgIFn3H|+<=vK z4=n2sEb9*}>klmJ4=n2sEb9*}>klmJ4=n2sEb9*}>klmJ4=n3{2Fv<>UdaNUNCJQv z_&NE*CsGi^gnnENWVSy70(klgIAFqQ2*A-Efmg2Dnqf`F_-5cnthZb(07M&pfp2#kR~DertlCqxDz#Qb^?&&KXB*%K9 zTpFY?Y(ZA$6A?c*Io6XuO=GsyGX(!A-v`MoCUA})E+j0>EG{k}EGi~0F3iUaM)D95 z6axPf=NA^076U_iNHG6MtYB+C2q$S{RrMcjfjK$W-=Z7@o)bX(I17SNAEYokL`3*O z34Y&TPd|qseotSvpBhxbU>8296U-JfMk9zv^7oTt1ugyF1rM)ZYX7CLehMPszvR3? z7{E#62)H299qEDe^z#M%Dvas=Po;W#zr_EgS`Uw3(!PFb0iZ?yX~29jr}KiwNMA6z z0vxFp0Jg~XvoT*kFb=~1mFl4QugYFOgRJ~(1;2_KS%j5 zFG&pdHVV}fB_`5ROMK~z6qdE z2x$>1aUm%oadAlzRW&scVPPc^aV2Fn5lJNp6$up)QI(%{Rnc&N%+UX=iva72N~)g| zS5a107E)Ek)Rj^eS5p;HIj1Bn1gce&{8{%q$i>0^U+EAN`foaZjf(UMKtm6W09|_y zGvUELfW6X0`GNx!{9_53AiaN3?kMJyxhCxZ$3Ph6SmBtVL?T#!uu=cQ8~@#!?R z>5K$-R6*8%+YdO}69d-yt1n&-J|Gg-59#A8$Li#R_F#7K@&Z9o4w&H*4Ddw!*vo%S z0A@cl^KY~I-!_Cm`k;Pu+3(H#vVr;k$p-)X2>sVp_W$(=31XfO-xrJEKdz(idDZV; zRL2a=$*wE?uU5?eWbT1mur%U-wSRnX_d9Uzf4P5PX30rse|t3kWP#6H4EgIpFaPs_ z{OA711Ajd5#{+*n@W%sxJn;V`5B&900n!tEn+*hi2>31Xj3VYYh?B@O&|e7#QZOv= z3Pwu7!X#`Q?309pgNuuYi;IJgPe1@hsQG(>z+f}0E2*`TKN-c4zMhrRvO)#lNGYuEdbhmCBdu-i8getWsNvPv%KrCA zH85<@oj6!{Fqp?l)EG>#93^Zc&|)0#t9L{)E7qxA^i8uVQyV+_Y@A~kRSBm_FyY98 zSH8sc?H8L-y>`mYkEx2QS42hI7L z&HusVzX!M38yl{@q~c=*z4J{kEnava2X$1LRqWNb!;>4m-tCAo#ZM-&%PwSiH#%~J zH+9E?qvttANo%c>BM$9cMnTnJs*stI`4O6_k@RNS;kl3up5E5Q9 zOZ1Q4aVJvHOqP2oOl+F2;lY&>9(P1uNC-(prNj_0yymOqRb#(}w{263U)ZG-FG_u* zf$#d3rs-iMi78Wt|Gtk~EA?Kp3fr~GqM6~~V%BIowRtCn3)u;{Z>ZSdm35(P_Xa(p zO|*AM9Shn9&`KOw5&17xD7x)KrpdL%8DOUI*Oqlv+;fC^LNz)_3G#U7yAR)#KEJ9= z_pa~@Leh-kR3hi?*@Q!-QJI><5Q5W?L>0Qk333D%&5>QL<*U2wZw4vP8e(5A2<+y_ zU9TlW9Wr(C7=}PH~qT^IC0Yb89pAbT;ibKlb#w(vXE-ToO<7eXJp}CvY^lw0m3FFvuqK zu8Xnt?Ff-ahfkQes;zJby0e4cVwKw*q&04CUKdz>IuXb>Ld+0Vkz;8yG4`IChfyq! zrVcApl#hcsttHPfEUToZIe~m4eh;AoDN z$H|EWL|R|DFWGP>xgmu$2b%0ZPHtTfaY$$lCRE?LLi2K{th7oeIikNPbR(u)0YE~F z49%i_BzoA&dz8fIRPgX0#Z~Xg6n+?AkvBXB9%>E=Qeau)l;$jxt5KC!;&CvhpQ3`r zhdrHFNb8w+&Y0qz@uJjzIpo75&@hXvar>Nz)eXS!*1ERq^45!WH*tH1P=L}wTiF4Hv%QoSvO zIlCrrhwMF@BX0qIyEP-cah{lI^HD^C%Ee+greqE4!K!a}&eCJ&&T5cCm0}5b3&v-9)8t3H zA@<1!ms0gv?Fuu&zEA}}F(;MWN=q*rYamq~>oBR+GV3M8=hR$`z0TBmcKS|wRei9p z!Q8vt+JmXX?Z$47qv%rC_#EU>IeOuNPQaZ#Q&y4X74^xU(9{LKrtBUCrfN1-+5`Ko zD<1;tDr1JW)Y=~f@2fADIk~KQ(pn0Y<~VZa#u7cI>=?Ahq2{2PA3ZGWkq(u2Z)PXA zGXe(=e~bQ<^({M}q0eI6^H-Df8*gfsutp(e`|htgKkAV7md*BO>aK6OJLcZM)SN)< z%CvRG`fzpVU|+sGaDMB}P~V8v;A%C(g21)p@wm;CV)2jWc4DJ9O@zaewkVrtSC#s3 zD?-89_?pEn&7y9g+CV5ct?jep4RXGc)roXnVG_}ry1K+EU3T^-d@*{RWhO~gKJy+O z`T4bWVXp;4&28V?*vrKgq6=(3^oBItlh~xQe6P)sN(YM~rHt30kSBAww;~*M>1y2! z(VK3jJL!p`MtYLLVOV^)XHYw7NN%fzSb+`Brx z9ky4xyxAgWo0G+v9x)nGz8~Mi?MiUzCl?#eM9(L0bL+GYZL`Pm<{}EeUiBB<=zRDk z9Z#NXNbEL`Qg9I%ax7j!fM51qA?+FmO`86o`&5Ee4!?}HK((fmh*pJqEXsP5-8h=b zRfn#M9>}gT=+e0@H$L&PCUx!p{2AI9xjB1dadUI=LAJqQjs}h;SLlI3$8EkP(W8O* zvu$0O*eNKctsCdu`gHg07v*CL+USk$HD8v$=!UY+IbhdU3D1Z(jlbk8b4X6c=kI!O z9lzul*oxR3W6=L-cd)Rz@E{Ylo+2Q~Ij~kxk;ZM6hB6iq6UCxz))m@`5$#nM4`X!K zPX^Y}Qb#IBs(T?Tyg^_%CedEw6)WxcI(aT5wE+cmI)=S&qF2Pu*5RZ)imCFqQs}(h z(N_MF^wB}fUf6tHIWnf(4w-INd22Jq_+oHrf{8YP5-*MQ#f4Wm#;3T~(-u;0@)4SC zGUma_HM|)!&#XOfY**T49=z?I3d3uBTP??GX2ds~M_PMIWVyKl*WE_)T4`QYu=S*2 zRm?}l(50gF`6<^STq@hV$5x}Z_hSX^Mx#DRQ1jp#LL+m%bCEUA^!o%7q_8%1ClJ{r z*PhGiE5acrr0aP%m}uOz(r+-Kx_L>V8E@wwa5O&R)rq}lv*fLx-ueC+g*1uGVGGAy zS{6f(d|UCi!JgdLJh}{vz*souDG=i1Ge(!0>>~EPm)&sr>-KqCDYZ?7%DrnCAtMQK z9JQh9L+H~u4NVo5!8~OJ;asi+_wn%FBTdpIMYg%i=W`DdH|zu|JclW(DqdVFX=6{o znPpbaiRKAF!)j>BSuR~*ZoQ9l(CkE_k>WntFYBCgCY9x56aAIYFg}IGxUFR2l{oC6 zFoDIiVvDAQ>+d0>V(zxRbfGg}K zhIaWO#G6kO$Zl|DWuzMqhG}Z#>CNBxHUZUYK1r>qV?1# zrM_LE7v75cmIp_7B{kT^afxr*+o>$)n8=0;6HV4crbNo04q8p5uWNsC*1sdZtkmxj z+^%7O&*PJ5C(XR$A&1k*UA~8=wC;y!qh#}kW^Q`>v$HRk@p(}@eZtf3SCukuMHS4! z2%;wRZS~x&$H*kE(lTCa9(X2NFR)M80SBvf80TKQ2$u8P)tlZ4NL zd1wyJ>Z($6Uj)bT+l}_@c|9)uYacB}D#yz@FN+cNOC3hsx?_B9DF2p)gl2nrRgm%6 zIRd-apB}a%fK1B+j=C>pj+(T4MaCcOh6EUtZPbW0zP;}EMKU~?F6($dCy5leS#+te zPz}xTqCPe^uIlQW(brvdV zOyjGCM<7`wT=+?@ve3DW(U+)>P`Gl_E{97zu-qd~wPKs&3|TM8ScT z<23U-T`_*bPK({U8uK3JHjiZM#C`Ukn6btd_1kLr<+hnW)J}kWR7!OZnFu)dh5lOS z)!oDmytJ}f`3sx#i5a5&=ZVD_)i26icVBBQSfVlc=;gy;e&y^+$24_MlYB$4!j;?C z9bU=|eVJ?CoDeuDU+6{`eiUz?G^xMB?xbm~_MpE}HBBlbo45@k%I4+EWK)=^d6mzY zIk@A?lQ@|t$eKfJ%>{NSu? zn-=yH6M=TR*><+|$8)n?FM3nX9|bIh25ruNnoJHw_B~xKQSy_|oR67gv2^v)B@d+- z@fG!9trIN`hP~Yw7p@FY&l1H7?b{#cC?F3iPceuu-~!wlsGd07`Y2*) zso~E{L6V-|ElhKZDZxu)>g9uNI`z=*K~x7-)Q64zckowSLmWe*g3_+!=Yy|VKdb4- zDVLHsm2YJ8ptu8B5_iYu)wCt?Sk}FzbM}&RYu_|JdX$UVvyQEVB8El7IF(B5bli&V zHLz<_#0s5LU%rybUQX8&&~Yyj7o+05p|{yQ`6vQ3a%^`d|6>OjX{}n2Wl75+FL-sE z@as!ai$HPlZhHN!2v#dRHDYeMNS9DfF85lpPLhL^yEZoX2Yp)#3%K+7Nfx$S28-gc zbAA54OQKJfo0p#6U~0IE2wcBb#HRfey{7ZZ19zC=M2}> z%>Is!iv=qtLaATNTcvDp@CnMbFBkc*zfRH_ol=Qmo@hzSzy9f-N`{+stGL9IQ1p>K zYGf=&yKnjN$9>z_^=%Cf)%{t;gWfRYy^9Otmz~lz-Cl^utBSuANis)eg70#{H?3%n z7JEM!y}e)>HDlAO(i`ApId$*g6!Es&y}lytq21+f?(`}v&CCeWj;8c^*~!o&UGT+G zc8^l!NqxG}*1(Zx(;P(`LsRdj-LjVwZ?SNAAH#jylu%A%-sw~iyCUoK&yLtW2Q~=N z1Hp{wd4u`-fRv}v^Lx%NtrR``mjo8X#PD>^isELJy(_2n{xBtR1;)}RTRsnlgH^5B z$BE2$@iHCeC3Km>X-thUGBz+tIfG?{kktr393AE1e}9Qv{#JmE0D)3j$A|P{s&|1* zl!mfiW8vpdqpxQNyu4F0;bmnzGE-H1eRZ;ow+nt>neeJgHOjWa z#zc{hlnm!vs!3Q@3OVB!E5{?JP3QYh2he=-h|Qz)67~W(%9B4k(SLLxA}8b~YTznX zfMk$k2!B%7QOH3O_{tu-segZ8#j;PpgTJgSJG{eSP~bDNI?;Ig?V(LF6_6+}la)^1 zsX?#QV8b8$HQ1)hK1mv#aw&f?@vVnw=j!U0@kw4(Vr{b>h0aS}s>;FCpym*S9jSG( zS*>-M(-f=E^t4--f51WA!P~9;M^7gfntTsX#cq{V5*}xQ-OQiG`Bl0Mo{i0VV(Fn} z7?MR^e`cFu=bBbNZFzL)hJG=pm96Yj$OZ1}JVk@hn`Fe-nFy}PEO>Q5I=dGXOzi30 z67pY`a4S$oJw0;Qs=2wTKtSSGK>WDB1KMN-B~n)y z)yy>7L!pE0lrs`-vhkk7pOxD+UwtaUwxCh*uOWYfRw(k1sb{&M>ZN-7^xNGzy5jq^ zo!jP!XO8=~@V4;RGS$Ddb}lBQy)s+2Pkwbk7nqy2oLYVV6Oh&7=3_B+u1QKv=Id#X zL-lw5+C`&x4RkmC-`wFC;!1x#M&0)8!KJjTwf&rp{BD%2A-9~9-|yc-7(ZvffSu!d z_Tf&BtHW7x{*v9=*?T%&mu8Fi+;q44`kvlhpxY)D7+VS03chH#B{ttQ>)H?;W;Je7 zQEkEW)Mtr${-$Dv1o6#^g)l3 zsu+6}!>YPLwsWP!;J{fvxx=UsnK~T{|He!l8RRdu_38>A60a?C;wWe(P~NUSDn7W@ zFrc>j@uoq_rRx02rp00U>_giUZR;oi#u7?sm`fcfRgre(Va9s+p3RlYP|WVeUez`JQXZ=x94YqhBe;%J4rS7FJCY_MzYC_!D4VhF;;bI(?+#*3r1enwD*!?Yy}$|F}Gs zH-UD8w1CWzohBJ>u}Duy$DXELT)|8*q@21s`;4GvAbqw=Rw+2{3PsMh;#5fUpxD3;kJNjpnrd7hMzJUc=^ z51#dO#AF1$ef_0=Au>NZ%2ohS#H~owD_(=-sZ!osD^vt7lDd)(>DLQif1Z&_BKu5b zK2d1K9fv)zOjA4QhNXszb?j~3+r;-NOv~G;2z*9OxQsl^$t%je#LHBlGwQOVjM#iD zlusRgYtOjMu&HRmD6W*ZT+z)Os>oQ<>dmCN{1uTEooTse-Fo)X`)i#c2=l6Z_+bhn z15r|hmsOqBUZvmSXtUIL?M1K2gEOU2Nhj&Z+=;;nX7K?HD($A$t8H3bEqU;jbIAA- zC*iFFvT@*+o|{HZ!o?WVL5Das`(m4MLdzkB06z+fevvza#Zc)*xx!C+p#_X`xu0 z9iIH8H)7?qX86trUODY=W>t^sx`>jl-p+kne=(Rb{ZsUpo(U$;8;aMW!vgIS9twR{ zcMUO*hu2jL^YFPSsOll9yw7X23cHl`l;t^jYbON5RICY*Ts8jTb`Lp|A6niv<O4{E<##tnhE@ps7-qF^N6(1yuU}E>T}Zc)(-q`oG8}cEookEZa;!(o zR_;%dfZ5NoufBC>%wn0#k-z5QcEC~ zpVin@Nc?ovh&?$xwlK4)TI+ALgAATYID6NpsBKql{$YE$f~zt-ifd!T$E$@ZTAbH4 zCi|oLZmL~r-g(jWikkyQwN@oM=ROl`#=5k+TP2f;m%G0|g3H?qpT2%a#r5+y>s)Si zGpa?C+9COjvB3tC@CM@sj^+L`gv*?hll?8ePjfpC+A!sFu!==vS!Mr?L)|Bg9)f3y9lZb5cMB+~|1Vz|*WS*v-hT z3v+2Yr!iFZt;@YCRzd4&gJzb}_BWe|K}VLJD3qK8>a>>9%op(gZ=`%}16jXaw@usX zgAds_)S9|QnzOc>F0jY8m2K8PZg36!LAmS|$NiSQqW#yrsM%VF-rPVDnFhl_DRZv? z&#E5b{J!+XPg&6Y>g+(2hM( zdwVt9va0V4{*gS+)WMPVbyOd*ipwe7MQ-`4lZ-^Y7L?^GQ!%VXvzU)8>ZX z!{P0?uRrM~F3s4}QV`Er`t2B~=y-GQnnA?V7iAyzVyuR?d(G-Txb7O;b|J~VJz(0d zAJJ#J*jOz>EXo3;J;aIGgW&aEo0^FdY~#WcsiLg66^Yd(Ki62XoqaS0uVgbAvRAFI zYaCePgFj0nRn}=7Kf|why=&}_eT!GrBM3mvfY-xd;M~F`Awajh_CXEo=#9Y8rSRnAK@IIOT^ArnQ_+dQ$Hw@UFw0a4n4W$R(I^OHiwJ_-V{SlVDGcNj|5z zgpnS*o_6xW4a-XDHCpl-7oVxbvwc3Qt@Y==I6i+A_l?Z0Mk(RIY_!0QM!(JWW+Sz` zWB4b->V0&bT!qDh;M!M=j$2q2XP9K|mxMBqZWm>OK1AW)IUxzE{}P554VF0nI5bIu_>gsNAjE6t$Yi zsaPW+f{9Q29Q;w#ZKab#%=Z-EU$%p%Cbtag5Zz?p(N6W7*fC|1!le|~ci4JAY>XNa zbP$e^%YWYO#;S*>4Nbe-VTKT6XKYNTU(F<;ZCLhIvb7z1*N$vxj2adRK(U))T_nk$ zq#;t?eZ6niC}N``x5bj-XL$X?^aF@!k9y0Q#)B8nk{$*OE5D_XloWFfEO&=$O*`(U z!3RBI`*%CrZ67`+w$HegkkjogB7CQ_P5{-et+7jehMte3m#UT~SNl~jtXyBY@XO=n z7(}o@+zQ2~VxJt14egC;@#VHF8MI`#>*wW4=Upd=CerrE zrs%1#U~7M_4IO=am;K4mn$f^WlUG5|mZ--*!*xk6yiT$97fxgPIf=2p;;~`dgvANg z%Nh8<{YR~_D;lls2ai<5EPOZVBISGAl2ATAvc@phL2ygA8~VJx>T8s4HoWZ^d$I6! zYmd2PB3^b}{;qe&=}0qUfa#n~)xK;9+>1zG*)T!5l2>&;NXtYh<7@3x7uvRJC@q4+bkfqML?T{S1c{gWYTKTh3G-6 zsGKzJx#}yV#ut|p#$HWOJ?WM0*!6DD4&cfg4;tWpQ_^vLf6retnz5yLc@hlF{+jCu zHQ6Gcxro!Jz*A+(y4|e3m$uK{9iDkLj@Byqsx?KMOF(9?y1k3Hvf1r`rDe^9B)cQ) zBc(lrokU95A{%aU*)&>zQft%cn%Jj;78Fs>nqj#T**2oyz z{kTttV_=IiqqdCFNej^rSZZa>5=J!p9qNq5nY-94+hqnj?A<#f8nsnI$-nMaOtnh5 zhRGjUE+@t!=h2;)1;8x@A(1RQTQsp!+cxKE_N6qoscuH&CDh}dPGz<6{jZIovLo%$ zzMTkuxwf`(n-`v&o&Cuk_d2L}CfDk+`Pwvk9!@xRaI5DEunr|So=*}~YPu8}>}Gus zPE$d^qX~X5jA%aYpB5Q^!P+-%E5v6#?=YvN6l}?ADwN;~DbG+-C zgK15;EMMreH}^=jiL>0H-!{iK5NHwb4esPpHbh zh`6K+Z@N{{(d5(G7Jk59Gs#!UcI&))uj%+ z6vD0lwpkbBu3@v>79L5h*na=O=W9!Vh=y9O_7K6nTs@^#yL!aN=)0S~4jB_&{N$15 z5rNC`Q}IhxUmgSY@saJtyNjy~rVB2w%00U4I%v(OSf|3j zwlEgT-8^rl(p9?fmE5+t?LHja>diCca+sKalj6m0b(iOU#0d!{MzLaYSdb6zX4T>g zWuRTw{|8+_qQ4r~sm!t4I*lRbPsFFdjE2A?t#th~!*h6U+f0%Y4aA8fHN0^#_+n-h zCPP|5I7C z%^6`Ltf~&gcFE=T#~h>SfFF-?$4Ww7sM>iBC@!J4&?OfTS(E8K^SrNc=iw?AfDu~s z`!yYDn4O*5lhoy-A~)q_mP{julMB)8^t+REx|XRPobazJOIMAVE~KvUvk$O*NZUHi zW=ybvFc$0JI8N-H#k;&GNz-jD?n(h2&D3grIa!~ABeORyAbchFG$W-mhwWb0*I<|N zABlE)OjxR|j%qI`vaqq#w5x>F;q|UAwIdX9L2+(n3KA8BvXDzua{-C=%>K#kZB|ft z#?{yMwCc3cjDdmbm}$4ZU(sx*j^oM}8l~J95U=SG4;6)FXGvg@n3PF4fXl>DjZaaU zy#D~6&#fL5%wv3kq4EXGBnWzirMk|cp}Jf{p?N|m9$2XN5;NRt2=xpS&-Z}=Z~&{+ z^q{76dTl175i-s=!0+Ghw+Ajzc8ITY(KLU{2`wVGeN`uuU%i4mi_2(k+6A{V&=r}Z z9;~N<_>U@AU~`-8Z)vfdo&;h6zV7dXo2Ss4<0jr~=8KOhL*@@Md3wy+d16l}YAJ1~ zaJ{|0)$SN7F}h}9^=NJ72jM7;PZ9|X4qXn?oH6kTMEn8{nnqmHMDkUPwou+DmUa77 znirJoGe`s7EQ}0NK#Lj@roRB=qV<3SxBkui0L#*yaDOG-%qL@g}h>KEa}Q*p$%@X6A4#0&X*pu4r-Sdmp2sQ;MlzX08sT&6fzf9 zI}icf^ah((FP=j$r*^3ZGcyvv^dQrJ4xg(46FkK*;|HSnCTnR@;v|f+1H|#D`R$en z*HqACmU`rJ6prTIVf~QkO%HE+VOk8L7FlBb-vx-N0Jq2Tpxb=({Z>N&Gx>ECOkqTpL3C?$V9g< z+F!}v`OH5f{$N;I!{)n7ugl$M`>7|?_$HY=>Vb%YX>f6$4Kl(fIXWWJO0VDjZF^VMkH}hN1 zf1cNp-btlLs3nY3+6`M)w6{K`yGVhSSVYDqk=d$+A(glx49ieXSaHTfb5z0`m(AW| z^Ut1jNUZ+=#olgBPUlU!<)nzNCO0gSr6rPZS%GEvY0S5^Ge5I5c(sz?5^L0D;14;4 zrGnmDd2i>Q86|t0fjsiMJITAq;h3#FHu-01qU_jdWy3(%UiVilhDPt37{Ar!ZZK%_ zhb&JiNT%a@M_tcM*iRrPgBxIag{9L>(&{W_xdMjegFQj{_+$`(7D$0uNyCsPj0g?# zBc>W=IU#gz?P03~oaa*Wna2_C6S4#oWnnGW)cy?0T(f(+pr`E2bu09E;E4uh`rS zmP}^t8-@HDp9wpi>GH@g8185(rFk9qt$TRk0G><5YM>sSNXn%-L!vmqZ?8jIb;;37 zt3XX~g;M3nvGDDZRfDLe=dh+pRX~uM80lX1z*Sq*I{?72_U(aNfE$?&yb9BB3}?6t zQ3wQ5pwKb!9sA~swfkdFq=^=I$3AXepHIiTH1hYIG_NDx>G!@{ifu>EaKkiz;u)Y@ za|AA`9aqz7$`aTH=cn+87jqo*cE9E?%neWUx1F_{k1<>c z3tB~XOIurlM-+kpcqrS$u64M32OgdvfC={p4I9XvBaU}YNq}IqyutuYB6HQ-E zz9O6FC$9FF76}N%4a=8@L}g`tjpfD4pt!dP%(51`Mh_7yLJ0tZwfb{EvHM~=m}&{$ zqqmp4xpU$0!n<5aBR8ikFo?jbAKoLW?g$D&`HaoS+E_A+;%c4}hPc!>Xyb>~c-=&> z%|usIxuq*w0kF(0{?KV4cxG$d%wRPC0RPkAw>K_|sRD_M(8xjHih2cFe%H@Ct$%H4 z^rO=&E~g%p%aBW^xYlK&!x~z%R6RvoZTD^So6YTpqC$r+$CHzbO}!MVc|64#R~OME zMo-5Qs&c1}=DDh$w0g-MzV`nB%0XTm-E65@C4rdl>L{aq727O_wHnCmK>7a0CrK1j zU9$>a+FMMl$JA;U;0I1X4f85K*J?*F598dwlLbs#SxOl{L)yve5MiQ}a;LwxW#aa~ zDf+RGv-LI0K@-(hFD~e_4if3Mu*jqpkDIfT(0~t9n;d@B2}a1TAk=h5I|VDRDQJ)q zvf8Dl!_-8UtO4mlDkwZK{{W(_cT&3dG5n;KCzdqOjAEKXk)PeCDBPb4C^ezX>^{)w zr^ug@KPx{ZWwwi8&l^Qa!_bpS-?FB0QC0Feot(1N9hFLcx4e z_p*R%3m(Jvmww$2XuD5Oid*8N@7c}M@qxS1?WOX?-IR8bjUHV|CFkfjsX9DLEAU6p z;5Fz;u4tizfJ}h+H<=JnSFd4c(cN1mx-Cg)!c{q+wqvivcJJewiD@CkPWE|h+9Ydq zhWAr~+GwP>k~>s&TD-04F#w&_nEW&q0PY2PR+t0~O;ZU>bW5#u=I1HwlcQLE=Z--KL?&F{gSLXg|^>h1@H8pBE=q3_k4Y z^j)>BjCf}PN4THR>$AoevVSB^6F@Ww+TYPuj^|MN%CuKZ1b-I?A%Av31R$Urjp|#a zjIm~q7HIvBFva}RhD)nEc-rDy_&mTp84)ZIr6e_e7Fft6_XCdo=|P<5XzR3-2Oc70 zA>15{7^V%&l0kpv-#qzF_f6Dpkup6V8NjfHCQb3YFgz?mp~HqKW7&!(B2 zrfcW=U8IC18f*05mW8xWcdSFA>cfl(FEyF&FC)1+dAM^Zkzr+L5&Ds}LY_Zor-o?ty^)hc=`%I>^K!82 zIL(BP$6xcdo~e7LU*B3=A~*U{P0b^X+N{zBV?`7@lsS#2(D>(qGT-s$UO4EO_QJX>Rwphp$GJL-U*PU!hOzrP4)_>9( zqFicBC02XkFQ$D?Lafs%^$?#PzvT?8FJokhGzhN!o1>_NpGx@?^B3}RPb%KS=Px*F zT347A<(k_|)wJf;yuT!f#Kka6NmA&@!-$ic8j-LdW+2qd5#h6c7JeAXx>tR!{!RIp zR2p^c8b$Pv0$W)5mqniCVV?3+$>b?KHq4w!3HAsaRX#8eErt(hGvRBVmYym3qvWYS zFZGCR^+|NyUroNaOKTlM)@a^;RIesUi?Qfy zIam@IBVzmVvBT7r4<^Sd!)ya5KXho^Dk;;5?HvT6mcZHB;mQboeg6PB zd->(9d1LcCL-I7YTHV)_yx9K$Q@^m*9?D?_$x@crvE4$+Ap?Po^F?M|n0z6Q4type z%aa+0?Tl<06pD|8R1rce;xk@(wguRw*e`lPZn#d!b#|=|3so7eA-6*$&*{cGx#%is zi7QAO+mu+PB2|opB}=JfI`bk`R0Pw*ij5;qF1xTaeZ*C9&R_GAR=!vB1RTxB zkvy@XTxwcn@Gb&0u#G|FienP-v9||SCX@sW=sO>=2AW)C(}$lZka=#eb!T%J zirQy+QojmU(-l9q)D`+OsUV%fA2%EglKA3^IEZFaRe2}{O$qj)z#uQBvZVuXZNn&U zRBn-^h^#1j_81PxB9LEMira}ckV;!ZL?+wC6oBQbI7G0t2gpPtDu zD0|%^((H2QJ%q<}y|<9XDwxLz-?t1ObzbS#cqo&FK6L7L^em zv_>p^4KmIUyh|AP?8@yewcNeHNQ zYsL*UH!>k5o zC9*{&b6wp-eSPXlBCN8v?x+}aU>2K(soZ2TVUgY^bkIUQ?a4^uU=rRCffZB$hvmIT zzDUa2xEK9p#7^j?*W&vG3X#*U^~%OODG^ay+q+_Cp@hci#_MCT`$2%%0pXbvl&XU+ z6z12>GswkSY)jjz;WQAa6?5bo7#UcBeil`o@KGQxwZ)uNi~zQ#W^v;5u`M4 zP&*EFC%T`bE;=mG8xqK8jJ6>iZLV7UFAeOEERIByz|0qt8k!0LL0+^YA^Xv>D3Kiy znw+-R?KSV|d)Tf+vl-!N#aFTxDOLmT%&c08Vvh;kpv01tk1nj20_IJBSC~wSCWzjc zBb9oJ`e0I+{%$v9Hi#Npo?5liq?YQ#)VfQiL49v?!dYE;8p#~;2W6onWg@v8nt?6A zUKUkou`IlZBB~6sNk(E9W!&xeWe~}qA>x6c833V# z_E$DjNbxn)4+7rWlvzMD2;ies74ZxS@3z^fvLalvkcfGntE6lEiNDFT!|>y$$rqqr@G zAf`G;m?hIq%y*V#MSl>AB~_z^4bF=rihaj6nl8}Gq?n!GPn(UKPZJa#v3GZ0e%`CF?hR4`;> z8kMfpq43G}FJ@;s20}J0bs3^!&#NN>(XmM6>e0|2vq}#DJ+smLGZCr?Yy3?%+l07TWtE$OR zpfjt-@znJKw9Rj6c3z)Jjw2+2mkqf%ry_P^*H_nmP`=V3Xj(gsY73i-YrC6yE&Uj6 zh#Ve5K_#oT0r3<&=MyXt%Ok>E^Dg(Kc~|p;${K#FYjfv)1$8Ykqmmh9MMHTSGL$WB zT&U!=By%-x=MEg1FdL5RD2}g0*F2N?73ME1k1_sN{$c9#YL7psC*{VuZ5&dmF@ilY z5OXO69g}w_YEYctGWBF?nv@*5}SPHeOpdP(^X3t6l*u z+T8MJ{;z1<-24kt396l#1D!^Pw#J}TM(!3&9vruFZ4|w-osGTZmuPm!DV3=toIVH4l2ZY(;59#`xJXb9TcW2lNqS>}}y<%;Co<+DeBg+pi#Kc~h=Dk`oUM zSuG?Ad*n{rps75872NEo31R^|50JsbDHV9UKl70P0F=_{_j=g#g`o2Gny%WPnVPAm zTkw!aNp2d70VEK5Q+noHbonL9Epp5QtIWFTp+LHew6h$XmX=Au#q1m?i}P0L^_?Oernbyc-|(8T9N6I#FOve@y15V60J@q zw~5fAMIld&kU4GPTAYbU=JRWW3{S;clga6@9e2w3+mP|b={H5IZpL3C8UV zr%UwYxKz|#pOCK(2b}U{RBl$te+*JkU4>VZl_cppvdzZe{6@3jiOMyPO z#Z6n3gsMgjY6~#UezUZ(X`*sJ+a*{yAAn@+^8#INy->!@)DX zY{XA>DLpc+!bU=NDgw6D6e6JZ7#Z;{YpXFE`lUFUs>q;{0TphauO%B{BWOp|BaBDr z*~<1|;jHnBHv937!Q8iVO}sKxOBPIzs5cvjx0Y*ZOL`8ql@vJ?4(nPFHm1iiaCTO5 zE;1!NQHI46XR5ud3ZG5q>}1$ z7;J);Tf3klVB@6$-b#(O8Ps-8zJKx{(}j~5=!4hpG@1Ubs9O3mTsU-lsv4@)6%4(4 zj-wB>ouQ0~_!9XxVZw;8)@-bzW_?OqspNzdigZyNZfbrOUFq9=#?t#i`At6&^+@c? zCIitWK4EZ;A!W5CSjCo3S8jjk@mV85I%y_Gs6ZDkVsWrdWT_QibEfFMw zq%$t$?t2lKc{N$`o-RIqZN?E&S?uE`RgO6xLOHaF>d1UaEC@M|Bd8mRpPGn8T1)6q zBqf3dAQ)CU0*$d82WA~Cl#)3JN5)5ST2~>CQX6-&Rg+q@QxsOpR9jS+NY5hF zsU3N5*L=&xJeWmsS~w#u&~s{WFjH`od}+uuYwC6X092Y0@0Dc9ETmf~kOs-7nKh(w zEYnXcjU5>+OR1EWKMy`M;I;AXzI45psl}$=PBu^8Y`v}%)pU`ej7>%e89?p|3e}TnASnC5}tat=__Jltlw0+80I(>9--r)mnX;8dPOkjQn6kjnWN2|JCzd z-JQ)sCZh~$ zUoLA)dv9#et(2&JATFdxV^%FfCXuSC$G<9MjIFYn48BDC!MACD+#2eLwyk{-v7XZ9 zn$y(uy+H6x`zv<)UfDRn5SB4KD;q})meSi#7y{zb=bE}O>{W$!IT97n-it~s@WnJt zOAxKUDp0A~l>;l`r6|dD4I)}BwrpZxIHdt{f7S<$GT0GBFuQIYPec+jev4@;0QA_a zEmxxzdayq%V*wsY%B&&s?x3nx7m8X1`nUi+M@9yszbqaYXJK{6m#stc^k0jRBJ|`j zItu)5=y_BQ_;_hSVETrh_V+|5GY=vX;)0|Cc45%?gW-`TLz5&N=#RmmX-Guo=YA|{ zvXClC8E!oChT!gs3K83=xICeEnt0VCoCKidxms>2JJi(WlGbG-pV%0X2vH3svj`xO z?-@WrD~<%3n#S7>BzO(7o+Be=005YaghHGcz`*j1R-_N+6eF)pv`=beB~ATnmlTWD zUM;#u88c4O1yC2MHK55xEu2YobAqC1V~*}QRI*L{ z@qFJDq>>d&i0dqLjY3GW zGXuHY1siuX$a-VZm=v^X3XN`KNgL~u2rXk&X7yc(q-a3mN#bc!Popxlnn`9m2C2?5 zM%ej8{`O&R+C+EZTJp@w`~hlmWrQ=LG4H~e(CPh~$&y2hlZBI54#DVfXmIL2T)eQf zT{_G3Oy8s)_V@QvmX50s5+hZ^bmCNs_1`c%P-=1Kjw~XFxF5U}!z>RpnN9i|OD|d} z3_)Oy;^J0Fp^7p(NCUW39x0t39Y()GL`($WI{yG*Y0V6BJd+Pl#r1@riH_abO~N>u z85KA6B9UkrPqz8I#i|;yWEdXj4AglfpIg;s60N=5O)+XKGZ#=OX~_b70)%bXGzUel zo^#>lsQZWNZiZZS>WYEXJk4femg7yc^BfU~+Fd#(D%CWrs@4)f9fQ}~HT|XR{%IPN zjE#A=V%Oq<;SoaH&YJz^r>T8%^3?jK*>vdbTa0o>wQo`G3d%tYqKme2)6&mCXvCkJ zwZHc2Q{MBXV53FmV=1V^@*aS-}xD{KKw6I7k70CEGaZ&14r93mN)9Qw>2xJ%bea^Ea zjx*^@Cz|H|_TyE&zMl5>{${(9=4oVl$u8{bk~0YXLQ68O0VJAlolb+YacKvM7}wAA zxH8Wdlq4q^+viks$T>$h}djr0?0V5o=^72U4_^U|FO# zWV*6mqtL?CBbvGp$kiZc>3fad%={PX_+oR0I)pS;hmS-0jT)t{4e-9qly z%a+=Gz_5ctkJ1W(9`~ZW?yzK7E!Z3p<`n~1XYIPC@qF*pyd6Q00 ztEATlRi4FGC{TuVNYp4F6YN%i3IR>CXB|E~e@Jn7%(<~!zcyXGEgW-tN-C(as8Fa_ zkf4mnhFJs{ge9)Csm{uhU(RB0xA79k={w+&GUl3P+GX5o>BzHJa_mVb@5Gy6ODt(1 zyMdRIO$5S@HY>z$LteNi>WviygR>r+Or_t}Ev1%tXHQN@+H)F4v2KDjCxG0ZJ_m74 z^N`o}R#Pj*v!91FN7SATN6Yp$ms44JdhSR1l334ecdA6bt^D%T&bI3qc_LL55!I-E zCVtt@OSAQcWJ*V${VLkpSpXboGQ~8- zBX(8>Iy0>(X;4mPFK04p4*?`!TP;$}9*->3WVMNF~S9EScU+zf3X8Q zKFsX7XrsBe2Q>JRvqoIGPlesd5)}l6r3S?K`{vqH6Wlo9Y{GSIKUd=;HOzMnC&LQR zMooLLUZd&CWKA*;Ih#$qB@NFOAXS2}sCKW$q^(&al1QJ zXrcPl^hlL?Nb-CtqLn0;AYeHo9pq}5h)zdl8Gq+}F=3T-*#5UD42gKES_E#)NFNX# zxYy;HO@FkSd|sFh{{S9tOf=;4V47rnZ*R5zLg3GPtOE@9vc^CGfJG~Ap}4AWuUdd} zgx725tdZk3FWvV!(G&nwyw#rUMd_$iiHuT933UqNYN|UL3U{wh4A#pLjD0+gG?ZCcAg(5>y+7mw*{q;FD(tHvUWP9tc&A@_$KZiWxbQ#g^a%g&=QGR3odg6a%{L^mWc!Ky+?W6CkQ`TYHJ3 z0gBK+6Iy^Mdi?O?l?~M${)q>xGXw?1WXm8?@F=GlRd?IRCT0~o(KWg3ZZBfB4ia+| z_YzwLDq1xv1ZBYtgb+||;k35W zguk_Hg`0(b8Z#E5APSH&0w67wK_{O4oA89)El^3>4WTigETZXdoAOB^XrQB6J>8aJ&6j%wf~ z5^l?14l~H5gGjiZd2b|uw9?A%P?IBoMJfrYpztRl#Q`ov7AF}TlB>IGsgKoa&k>>r zL<8*p(x+OF8s;H&I%) zRT%yOy(@k6F22*cuC5RJT@C+5%h~JiG z&q^Z$BGnm-=7I93mwdZ#|o=48?J3;Eve@;^}``ntR*jKgyB zxNn|IPo+6I3vS~b=wtb7c{%}9@eme`zU&_$_o3*u&o1G5!2h#N#aV)fkSDH7k{8u5$ z=L_V_zD4sFmo+^C_V-5CG`p=EQ?XLIg^kQUmBdpa0g^?j6adzyn`STu_G+p~tZnVB zZ!RO%LaM_bsEDWoNN6~zZX_t&QeqUN>4YMZEvm~DJ^YdisC@7;P7A# zPpQZ3^{LyZPT2`?vf^U!T{BA{f>P}hF(tbqngc=On9}CFNc(vtmC%r}qn>feAHu9_ zLqKo@8ElVBtEeSgt8!exThomK`me#1Q52dAlR{2TC5@D_)-6iz;_~}fL8ZteEpMbk zkxL}5%|>OEd@-#){IcWTwoq4g#S0bXFn%Hk8ma)TNTT;1IU$m{CM4P;PQISN0+GjT z??Pyys6ESXxWOaDt zQ^L(OtqV`m13jud*Ant+Z*Ca8tkeL1lE3V8y3zJjF;zGc%_*jm76pFI0O&JiJC~sP zdf&OLfCFlMS~h5b3d%w2N*=Vz<{^}D$~1e~T`z=8Ek(OrJI1n!X(FL;el7h^wY6zX z!o}G`9Q}$LHtliajN{2^)D~xx(VAJ>W~_5ZEd+db z6jlrye$*d45bf;Im7Uml5a=zr1Q#I_RknM}g+d~|gnBYaoJS=*8A{ZSfsgvbrf+op zv!>LF%|M>_7J6Kq#>u=;NG%iUQ(Q-A!5`|eKc6d zRVa^E$RlNMX>exrE%eBJbZc0x;ag~}<|APkQq)p+03U;(qU7V**zwF(#fOM;T0Q-8 z7&^BCJ~i(^H?20P_S-kol!Pi`gNsBR-gT;Ka=Xm1e(D}xnx0i=3%|w(O65w$jo-w1 z)U|dax4tBhwQ4PP#-r6Vtxvr$ame#*iz)Kon=W)q`&;+rJL&D~X*UKaZd%fEq-lZ)vRnRDP!lo9?EOWi;0ndSngo9 z49eU(o)oCgKUdiKai2s<4#OU3ovrm3<>&n87v$IGKb~$pnWoFA=rJl2VXk?CA*V%j z;Y)Ff36HERO^bn3_hz3aoWfg*ZQ~v9ia+N({{S;Qjph$G=~_O6XLoU``FhvY^F`X- zOo;DsPpa6>X6(ovE9-nn2o%`YZj-Qdyi&OjPw8eb;9ljx2H`&`Jiezdd zw?XQLs|tiuLO|$T_O1pLrzWS%lBo$DJ{VL|J-iQmP;4O|RbZu>Pl)WXj)M_0Iwl|< zXfM(dtD}OVQpB0Z#qkcG7wqlZ0mlQqZdnsZXxO_oNF|$*VZ90Mk(N6YHfytNzfFSi z&!+;9fqA*D5DyY^$b%8NwpVG?Lh0C_UKEX7McdoejD+p|0PEZQ`X= zEfDfMDysP5o^BnI2rPkYt>Z#rh$&zS1|*OO?_7wfDi->A^!qJB>fY6EuC48)mfjU# z?<7Smt3VBEM&l~g&O;e67Ql1aig{TyPcX|Cr{iK?vfNal)> zt!g4vF2H@NS3J*Cug|E-IC2r(yG&TK^##SqgAXk+RFfX*M+n zqXOI3nJSSyBq-mLIPxXFgllnicMQ7Gy7YAWd!j2C3IH&x&=zuQUewOd+3hBhBJ#`$ zcNY^k7eI>hj;EmCeu{$6S%UXjww;z3pmmXiZiGrCBAs}OQ@&5y446a=c)*u;UnZ;< zd$1e$Zq=>YNBHMo-5?+mNAob){W-zlGnK>wZP^^ODJ^Ro#XrAT8b=S!B5=o%`zi|5 zkGnG=qRxMSwegPhIfDAeDIKFPG(pUIX`!iZq_G0D1H&cxc>_`uSpo_pOw{Mp6=PTe zOX)L-O00`S*}!lqQ{johT-6HD>bAGA-)Z+Av<)+$ck2C+(BY0 zIKNR$A~aHmorA$I6S5p+A7m2q7qafHG=$Cc-N8Sm0`-G?3}VWSy^8UOH=~m(vy(&IUXcX z{35Hh4jD)?;t17>;ostr^6KCZQ9uKrJ{eZXBtQSx;IdjNMIxw|J%lvGCUk~xS#Pp4kaB_CV##OM+I1w4Rngz@Q8K{=q8vQslAJ>O%0=8GS> zwzSbnf;o(+IKv88)s&H5T$Mu+w&eECTUFVEPm}j@;+J>eIk1-2QCe&oc8->s+`8r4 z>d)$;+v)E(o&+mcsLp^B>JYS!t>9NPw7O%YG0&bm%X;o;$(T!IXP578FYmv^1}Sv8 zw6~t#!rJIVbLq7~`q_?Uk$q~4t1zJV&bVoC>r8S1Q5?gHWl3M2zcB3|^rPzf>DTpr zPVir9XHuGLu6IOGO(K$cx`D+A6+y5dW>j>zaeX0=8F@eatPeNpHB`J^A5J5RTEzrm zsa`A0ka~{PKKUs_9LC{%LaV2Fvs%+`?XRsa$-A^6tmRZl-4C>psJKPxDQc$B} zZq4C6QKfUuM{k-s-(!|l~}$a9Zy5wBqd24(As{G1Cn(OLgGNB<%!-m__}-}g7H8| zqSk{Y#@eK8?TlvU>n1@*QlJS7It|pIKMq?1VFX%UF2Xe~P@!4XEG3iTH8S z%`;LOd~v{I4{q}_Nja~mf$36IZS?0;*&fhCOCJrv%ZH7esN^demS6IB01;4rUisZ( zoFx%1E@J*}yyGC!(v4nJs)I_?Vsh^ay;o>4A#ptc01?z;g^awz0%=~9z;Q_K3Z>?d&!}KHQ82zoKRAtyX6@;;}g1L&4+3ab!{atlzNwp(@7^F+{;sw z3RE7u3g?=3&W>2}oQJEr(&Yv;k=rb5#VHCc+ zfz~k16ZKFSR06*K9dQDUv9#vPUQ2jV*6J}U+ajz?prZ)a?1oWVP@Sutr)PUf2*cOS z*5<)wsC6c~xqGSNiLK(dXe}&c9KZ}}(sL(vJ7%A>`)4kBiDNaxe`}Mb(+GoUj2hj& ztEH{mx?4)C^((oEtG?8PuU)G^X}?_Py93%WKTdtaiKxJDWS7l4O03Cs97Q9SlE@Ky zIQdiMolzj}ITs44=65kjhh!ifz&&Y!lv36%yPA(|SvBf_1rHYPe0(sn2&-v_s2hhO z0VTg`q|^$NxXSju`6lU=e~6q%0KUGKXSSl+AweXOiq@W?r^8;^hm%Q$a`T5!<6Fd6bj=P2kLwzfpFxFE6kxmj`{JqJ z)vUott?grur+{!dH3v$QP5z8k7k_6hm72_{3fm)rIOIiZ-Ib}nD#xOdX{HvWhWgE`7rbQ9VywmOAkytc#pIG+B9%n9MWVAY{gv?@YkhaP=w*`kEgl6zFy z@zsE1(TRr&W@}SglTuAhPHaHo2v}2=+<8}GHrySLTK36T7BdzXMdm}x`rnr<^*bFc zXVo;lN_La#P!xznUbP;H&@BY$~bpPlge7Pz*)S-s7Iw+ zxUUHrX1jXqK#U)SQoTvTruKdj9vr2){C6>yOXS7%Z8qx5Paj&LG!P@hk!)i(UnYsUS5yj&rk|wSS;xg$^z~9q$MzUEBBXTAJ6nQc63GArVlBudk`&?8wFqMiYkJ(!^HgxW zL$=L9$8Nh3nkaUZhRpa<&~IMiaWz`$LH*-}ECcLFb5c6??UiMm^2>_baf%2BKUC)m zaSKxvB}%OW?(7tGB#!w}jOEpuVG<%K0wrj}BS=8wRwNpq5If{pDPG#o9l|o(Md{r+ zXSi8K5Hjw=_L`tlgl&MTyV_0|Ts^wPh)_D3kklR@EDDoJMRt>zK$KPBzY%Zc4;g(k~A-FOCPMKq#mckaYNH=3ZwcuROEiS2L~*! zkw3+_*aahcdtu_HVRg-;LT&iSu+79$-I(!Wpa6a@jkY{UDQvd)5e7GlD$O7+DmS6p zr+t9&!o@bX7Z8;Bj6wEHc|3QX!61YO073P~XFx?`lX#Gf| z1^TSA1$L@be<po?-Hzay@5%UTp1bj%b1J9!E z%D&?*!P&Sp{{Xz5nRosJbh45u=lb8~mWg)INv3G?YnK-4#tB%Pdr0UCud4eo03Lv4 z*`W16F|-4cge;TKx`6sHjpK# zwULHb$@|KJPz{ZEiW>H*sqb9BfE7i;@(`ev3&gg{ zeqdFp`mu}zRU2+u+7duzR0Y5vVS(&O!zhU!RElI4`i$0vTG-LS43n`0`-&d58+6G^ zLx9BZYsp_!^4ZrJHGeM28Ir;Uj_b=4#$*K~m7ZB3k&P?yk`S#$ei8<99jnyM&9&XK`_%a*;(MQmRB5tawLjXw z?9#lAX@Qp|N{1%Px14G|V>7}nE-lPv%2M&jSTW*v3d#TkiVult_+&gns5`6a^%J`_=ln%MvvALTzZg9yuAhjpc?V2)BrX(4A_!NZ*OtM+GuL+ z5vvLYpaPZR!-)Ixqm-6hMO~&5BDq4+Iy06MRe^4d!Ky$W0OJ|axrc&%j!YC=dK3S3ZjJIM%iNzDT zd1dA+`!?kA{bnM(eF=we6=Asgb8n*U?Am!*Ad2e7T6oA(d2QycJ>v%M8;e#opp68| z4{gB*I$bxk*yr`o`M8-hgncQcmaA!~yCtNAvM(oAMyRLE0lsJB?VMSs!vfJPGKk$N z*IME$-965)4x6XV6Gd|qs~II!Zfp>*P*-77nHsFn!8q{~M4)3571fRF`m8tN+B+GU zlF-Ow1OyI}5%3xTN&(ldao*7OlyxV7RXKWm1{~P)HNwi%$1w=uSV0ivQkydHN*DGy z&c-wyf!#3|LPQh&W8+>^b8k&hDyS7=TATP0Tr|Z@!yNA&-k&$sel2B-TpF zcGeRr)K`i~0Ur}DJ?gtsl*=(s!sLrhbiXslCA=DLr^;C^qe$e`6->)1I~H|HvLBvz zS`OdEkO_&b!lXTG$V5=I?xXTT5pFaFpvr2Viy+80U?NH@5F=0=0PC+87XX6h@sJzK#`T^ zQ(_nbG8MW+iZjzyP_gnsL-2z^zqTX-%G^_sruFv09AIvcY^p~TtH7Z~75G^EG(ExJ zdSR5eOtw$#{Rd${vv8@AL8U+)2IHy2YN>JPmf`4>AwxG7J1GG1txa$lQWD8#DniEm z6!ZzO`@8))A-buzBtXF_U)fVr^p4o6irCz^N#_i)$yNX`s{!-C!0w$|YWiidB0D(@ zr|dGao^|Lu^zXJS!prStH&Lvps~mEn^xT2~9rivL+VG=f^A?w;gj9vErG$K5ih?*ppUa?kS5Df0y*Dtxn=OBY+EjO7q=FtfOPm z38vVFZMDpHR|ZpaY&KYsmWHd;)cAMJUbD6IxX%sq*|IPrb_6VD zkQtzmURd3pP{|5>Xy%23Qi`CRi96>J+C85=MEp#DOPdK;-9GZ<@afV?XCp@YuPF47TJ@(%+`vKG6~`b9>11c{#A99c@8vHM*< z{{YvL2Du_zwhtB$T6$zK-*ZmDp8MqZ$&9&jQz>j7S*u3YSI;b!lJ5Rv6HXPR02VA1 zfH_iwu=(eeY6e+r?973E9fl~-wyx%v%+U*J?c%XWLr!IMDIg8-&`9)EB<@1(n~u;K zbyXQ~(Avj8j_bp~NeY&~mzMI#kzU?iqX>kI(8i+Nr(h@L@q6#KU!?3UI0AV|q3-=n zGs`p4o5XY*cd@XJOG7o4R>=#ig(Ok9o`9aY(BjXcfDxgyOoWO@<{7N@Gi7NE!s%j` zQ+E&qC#X1u4tiF*f-9WowL0jSaN>~z$;iVF5RyHeliRAzXvkSasUc=ipzT(m;qd#8 zn`arP&zBxE9x_4aZT(WzjRPnLf`;SkN+?JGlf)WVrrYIJy|YWw3zw0uJyCLw3q-^f zW&qcHswwly%PFcy5ei?Ur3_|x`6!WiO;f?X9z+s%1Y{#K72_$SLIWB_Y+72O;y^0M z$E^tjF#2+QMHW{jjHW0iw&f!ua%dSy_`q+n2?49~!Nkftp`LrkmD%l$q=>ASoJ5@5 z&{PF&xf9fZjk2Ugy_6R*h~{Gi^D!$RJmpu6Rgs4tG~>ToqJ}HG=uO0p zBooA{V15(~tgX-r?Y2BfG!q4QKB(5W?sar})^=rBWM@ANY6lt>r(sNOF{0~B3rHRy zBj#Xo6=pQq`Uv<_a693vNuZ+Ib*kI17#+D5kyWJR<+)JQQh@EYJd{ylvD{hDZFeo? zpx(tgt+G7}gz8b5E6e3dR~{xZ6rAbyZelNW2IitDrdm1%`#V!_mJ3X5gyQ2%GcZL` zS%4gYE5&_Lut-~(-7|5$yGvlk|-+G z@W+gxHB^i4LW<{#!=y@{{V;K1fN8gC;(Ly_?L0^apEgTd30&5 zeK(S<%mmRw{A6#7+v2GoI^hypfB(_>n?IX;{{X2-P1l&skW#M#+Mr^Lz14t?YeP+z zw9i5U2aw&NjjjGOJv_7vyS5DnT3NgAPt$saX|;gfwJ<426Xq>m!0Y zhkBB7-MLS8DA$%T#ZgZYuv5R!r7&>ErzKb7Nn6%;*pJvPRb7?Oh>Uh~xC zXtwk<*lk18rcNrU9F(A6vr){o2X55NfRs!^qx;TH_Ps8r=T4NugmTD96{jKZzAA|I zc%Dl@l=*shxrG&Y1P;-x-zsr}BQG5_z#3Tk^f- zxzgh6y>FN&TP^lXcnmPG5q%+ve&`HOGH5NsZ5Dh_~p{C%Pj+t1JvW*UX z6I8XcvA=ombyy^LMwu_c84f_Lwc;xT;yxmhgUFADg1L7JtKaz#QnS;SS<)uA*5hSK zUdrB4E!ZMfBkBvv!*q+0MQ{O9>ytAoK-IQc#IPQc{^Wja~mSbg+5~P8< zFMS@;;3R)l;Zs6LKFMN@1V&tYok|kzXl0wPKj03Wr%>nO> zW?K9NjXa5@nmlBpJ93Pxx|$#!qcCzn_NLiqh*B}r8rF0hh;E8lSjzS>s=HgrRe`Da zS*2q@8@)2v%GZP?KfLr%!z6x{td6JZ-@c5u?J}LJ6Q<+eBG#*^TgVnW`AS_!IrQeb zjg^luifDL&wL4QJ6^Z)MCCtQ@ZbQ{&5>TldD*)Xq(wQn%Lw2$;DpDBQGOh6hEArU& z9vGt6$9FnQ6l+;Id>la~MK|P0$Ale=D9Vc@P|rytP-EFhJG!3a5%^^?h#Z@Ia1$*i z_DwrcGR%a5QU9f!^TZg-jme^L<7ED>ULsnii{)D7--c22~yEdgq)7 z9xEl;@!IGmQi~D##IdY_*POL#Av=~mvnZQTuF)si2$0&!U({lND~3=_5`<9TOQE-xKC09W~`BD6@1)+v0jENH% z)hAXic?wW7k}2Hcs4#9=dbbx3#whsu9LgucYFWKHb3Vr@$^^*Z=FnuHX!n=)GFc5a zd1bMhXw3H9RiaP`4<{w3O84)Z?#%5h_$L_5nqp!k9=R-Dp!AD+&^p!XyRajv2gf}$ zOT~aaT}-~Zc|V!FuJC%7R#ba34!~}$?gmzQvX?iUP9%Z21z=ZV)E|D>EddT^BX(lm z*xNPjbfBRTgjN)1b|QzjOg$4GXrVRC2^^G0Bo+!!Aw#yrb~#j;Pnt44Qd@B0?cqPW zD5?n@Y7fOH2Eb76Fc~2ZZzq0UrJRbyl}G)W*Quf3CmAXh zcA4m`kM_PGcNF=KnR6o8nR=^+r`l@$6shU+z}3~z3!4^Ogi??|c{{3!0)xFxJXX-UsfvI!uE=Ld|ncUC%Hp134 zFhPABVpp~*#BDbXck%O-&Xu6L8)pxx;7nn=GZnAJXLb ze3CosyQztJC5T)wsc9;Jaqfgyez~B}pDeR+Ta{E0 z=5-hKem-dtu!Z%$538h-k5LiSG>l@238QdQb{^R|c7~&egq@ee19ajoHYoisi<*vL zp*2?`v|-pEbC{o)$s^5ZD>av^dLQMcZ2O?Pr+C0bgh~P_!3YOn>9~h+#6phbdP6gpvr&!EGJ3P^>s^jX!fE3q? zlEZR4k9?Z&ro;DfvO21w?ZrR@0o0EiQUxHVS*~Mu<;F?*FV<1P-g+Zvwi!K0&y3m>w zj)}r%Q7iGM6<&+Ux)4qVJSloZbpWNr5v1_FCXJufUI+cyIEwe_izvl5irzTZSmq4g zyhUx;{_Lv)3blGrj9Kso+fL={$rl+Uh!SHJUr|)-z@3MNEI0yNHI;)4XOdQhE+km3 z=XI)22^8Tj~=+Xx}V~sMh0cL<#j(!5U8YiBXF!h003Hp_2iWrueyrz6(NNN_5PUg5U7=K zfGKrn0*V|OANU-2%C7Yp&lW(Aon#-h4`u$`$cH4NB5;ZkiQ+fwQ}^X}MMObIL2v{5 zm7^!wCuRG);o?sKP2;+CW@%VP$7Nmj@Sq(x$?>6)-D>xmmYF7veSRRZxCpac1QHR% z?pa7CgV@)=jKS>GRoR4P0ARrP~U0tiCHCJhkzVh z#G&~PMAD*_&J#Cf%TE$Ob1`H@`HRikN1H9}^*`{O9#y)6*U`O;Ls&(%#Kyd&aE)F^ z;oF5xNCkL|)?~mqM2|A$aadvmeR|eMgH4tz%V8{+E}Vlbfz=36w$c5fd@~v{t(b6G zPNMS+;?L?=qE?z1+v*pw&`AO0y-4HEAVK&|MM>kfONk~l%{-5P18P?ZCCo6S$!=nZ z7X_tVzjkP8U-GjbA+ossr?$suG#sww4q8I34XFWSRZv3{UY|}u%_!L;xsWlM*Xk(K zd@LKA&>$_ycQiP%No2HwuBK+5H6Vz1dT&SVz=5?k!)sQ=?ra(vSs+AIlaoqZ1vLGd zgI+_n*zq*VDI}US0!Y%8BVWFs7sH4uX!5zy)q$5_J|IC1pk zCx{GtQ{KJv9(eLbUZ9|YnJ%X>1j`D>&GtYvuG{kOQ_`chObXqVQmhlomcd=+NFy#` z46=GCPV9gwH9s?!eqh%RdsXh1&2b#A!Xol3tyaIgZaxgXJ9fy$pArZqw9+rDSXSMG z3w0-p7T75WO;60_gwl9|=}RLRVo6q68H{S9i}N4@Qb`2+VB$v*bUID--TPcxBQnV0 zCe*4DFob}8Qq%#I?sG3ki^e~^j{{$fStL3hj*u8(^J>d<6s@|Xd@b3x0Zfh3q?(hP z@8q2vV`5@N{fL%w5fFJu&33V0&3~s|BU0VvkDa*(t0aiz5PMe~UeDyreLR|FsZMNs zhhbz^?@+yK<+VzcZ{47+d2`(IuV14!*u9;Gl=!(iB08fjnBJ$UTi)MEGoiSDI1F&i+j!JWpxVWfpgauQ#j`?v^xl)`JT7`)$rK?j~cid(? z)uVMRe`Dh3RVz=~=*oBKepq0sbdMa6rshONCKu``y+i)cI3}oQE*cjNP7F6q`g@W` zT#OA#5*8krr1^&TT)K+d{{T@%c#tijkvM`Bijq{*l?K_7#@E93eHhrA5o|RmwJMOV zrPauxG#p5+Yug0KkWUeg%z-Er0aP7A(wqFKGI%Tk0iwKQ?3UhJ$#WX1x;83Mv$P}< zU3^))c;>UUw7xV%a^&0J`&kJX@<{Hi^pz1$bZ+iqkwB8_H&#(jq)_w+ZkeRb*u9me zh%%6nBF`pcB&E%4vgx*OFX*^j&qZHeNee2cQbN52Ggf;~O@!8qWBB(s#FQQMw==WB z565u~O~}j};!wPsiQhSWMzc1c?#qQHlwONBX%Sx0*!q#f)N~*Q`(=-Y0gh3Q?BXe? z?4pH?aNQATh)h=pXL*@^!VidsTG6>;$x2I$yKUZP^hBrEyD}mm_UzRN;82VIF zN9mZORZt45p(PoKBy4JHTpUcGwp|t%jeSUrBAf_S^xA-fT7ytMuoG;`vOg9nJZvgL z1}n}s0f|qGuTG}|uSJxQS%XnZ#-NTM^#MryYmW~K8bD+r91=h!*a}d!2 zXMapdHOz)y5fQhm@sYK56{SI@P-NsrG?_`HUd1wqWJtudQwk_3g+|nE_wmT_Gi+$> zLMF9Y1gwc1q#1rXRgFO3r%GeQyd@v{6_sI5L;x4m1!#`uhmAU~5#xkPmxQ!*b}SVg z1h+g;PQ!|ZkE?tlf`e~-J|Z|uX%3df>p6-T5lhJ6IV=*RoOJK8+PmaVMq(=08XeS< zTieA7aYQoKMF77-rCCWo2s9%Hh@KU#ro$!Ap(^}N!{R?0taRu{T34pnVJe)n2>gc$bCN(p+22zMO(o zPWB0*ko07aw{nk9lS7Fx+nCWsUIc=hF3LR_UW}UU@9`S zEm8w=_=PsFwiQ-cACaM;Jpdgt$bm|(j?~=L*X(KR7Qw-yHO=#pmS9Mlm@xwddVI+N4S?W8L;=?B58J~%aL7c7Gqa!SJ8^` z%&yNBv0$wNr~p(lqf=r4-np+Qh0TV^2c3MQrNI@_`C;Rh^GcN4-@=y>iP9+4yT?Z) z5(3n(Zk4VPJ4DA52GRLmSz260Dbwy?y;N;V7b)tri&Pvy=@?SQf%X|b3*Oj69|^b8 zHhy&0W7DjqO(ablPaGGQO)CId8;s>SDD@2mPW>uZWi+UYayYG#MGM6tisjPW8Q+9v zUtL}x+=Q;+5UgqTN&7!M1k+&MTH-4oPDhI5-WfTUoE_0vlC+|LqP;iDjQ3^9j9pta zoFp@G;-3T*SLSK3C*Q`oAZ>|ax3EZDtb(l41z-sW!nGUk_hhZd%jrliOlcgl{8Ett zAx7b(uftkUic_{c+;U!js9Q>BNbVz)MEg=Q&WD%8RGM!?glvmT?QAqy?qZixHw-zC zQVVJ+0;YttgMGy)KK$G0vf$f^$1#=jW%_=*qgY>;va*>hW7UF79MQ@kk$oxGbz0Q?MuTDvclOS6CYLV=o+z2b_2v58hF*xpdzg~u-clKX z46=z_DgBa4Yz=!<50+6OD34TWY#`@bw`CHsP^zE-(13c>eDVV&BGFcM6HM|$X%ova zB!1`$nwl#&YHio98BX`=wvHANTCB^ePG^OF6tK1+Gfu*x+nC}2?nhh@pHs5h;VWK7 z%Pj26ZyNe=^7twCLMKh>*C&%%mnS)Kdxa%1(Av@~*nYcelEVRMB?dl6k}X1jz^?u3 zHq8FW&kQ-PaXa^xtdX~cD{d-m5@4_QREw;gduUh1F6Fs4f_}rlOwvo)JQ08#Tv8Idui9Hiefs5O0;_``_XV?U-X+85WK9^`vff%8lN1j=Dv-T z`Tqb>yR^8HR4wB%T? zD92C*RMY6o3nZrE*<}vVuM};W2T@P515&wMp=y#`!WORaxe7-VZ}^tSE4~#{f{!ck zJfqw_Ko$A#*0~aGR9$M*Rh8Tto+hK^QME=xlDZ%VPY8Noc z9n^PnBk+Z!7><<<0aMRIM8WL9O3LbnzbMrv(ZZ(J8!9glJer=Z5Ee;JBokI}i8lEc6=7XTJK z$SOULTqgPigKG_ywYipHJv82FX9w(X27m*;{u|_Yk5Gdu*^JL^2EP+s$8Ys1?Uj84 z(V5TKbYWA!bI@Qi*{r4>Uz+6q0J!VqX|Le{;VR61NZP!Zv88=7JU8~pGlL+O(oRhy zk_ck56aXjaYyhAY17dPAE@UY_wrTXs zXS}q!j@BeXZtbLDZiG1Wo6>XfBR5_r;csJ1q>$QpYt(5GVdsx4$uP4wmpX;jq;dMT zR`9cWYAeM#wIUBe{MGs9*F)I4omupX9qtx=UOaq_vcD~BdJmcPg|xP?zqh%XHxY?t ziBdFBY8|4fZokSiC$#$mCWjc2m7eOa(zrE|$OhERC(uMeL5(#CWqQwW28O-F(z&CSj9!my^3!8s{Um+_l%2YL2Dn}7uzM&-2hLy$>G8O^}u3;ac=~{Kg z!Lih>uQaJvS1}u#XNun8-T_BUu^_ zjlds?;v9<;zalq1MhME=Olg7L=ySz!8chR8)NU6b@``Q-hwASb+z#OG4^fuHqlK%@ zDo8yA}*kKU9 zsGp@VK1siUSlQ{4T}UQaTKEXs)-(2+DWq2wkw0lbBz*SFjIa>u<3>dEVz<^y4b8QU z{*S0eUP%YmeGg7JSxNZXS7lJ8fE!h}>4^~$yR^o8@_+x-`9!QAb!riwl<6B24Z|k& zrF?$;O19>Ux#RQ5s+oEOP=&b)@)W1jksQ@oIkwE4NNtG#gO-IxEOnz))92q6M5;F~ zRQMEcxEr3BL8Vtn-;YsR^uxreiU>44a!gS`tyB|F3U$jM!br%~K@CGr)!!!0Jdv=w zFRRDxNCyDbJC2`cF`1*5@S?`I1B1BPkx5FCx4uIutaA5$kgTi96Gtw&ruvLtE>21= z+ai`E^69u9`Id5sQ9sT7Xh}6&_SB*}WvmiC-m$J+++9edD$j2lg^P>sXuH&AE zL|cskZ6cmajb?jE8dy}1O6uYEd3JZJ9worf1?(5 z1;pZ{f_Q)k?SN$HyefWhid5AVt?%QQ$YneuNmMu45(t7Hh?QCnhMg!X4EcrOdj5mu z_0~Lra$rmAe=)%vpQANvM@huNe|qb42$D`HMI#}o!)kZTc}cP>)5}_n76~LCg_fZ; zvWxiL8_kCVAwpOKMw2jCEj1+fcQMnb{$1^>l)QnkU z1CR0YVUN_xte{uZ<*>S$FLeuG(k;=aC16JauTDx-8g6r-(DsHnX=ui%F`N$*71Xp- zsa#2WbuveEVvR09{m-jHNtd`Re`x0+43g~}lHueV1PDr=z-fXhR`guQ$$!z~q^v_8 z$P^8SbCJ!XIJv3@9amL`OQZnWsS*GJ1#gJ_Enb~GGYE?H^a(>PwD+>AM+@Asi27ht z_k?w+JxzRa%vxitH577WR=!Nsrj|jdyc%=~_EHBEN_HJ+0;>x4&eyYjk(6U{VflcF zmq65xp!#)=p9D5YsOMXlG@R6>IkOfdwMp1*k20rI9;Ge$?z%~2X3=2WIg?X@tsQPF;} zbxtyX+t+@$A)Zk@mFl*))>p7B)^`akZVL^tGx(jHQ#g8 zcw&$(IE5U>s<8(wYDnx4Tvvrr<%fiIP8`qzPV5DIPV_z)suU2#l(KqdnzFE`O@Se4 zwgRbatHA-43FgHkxsAg|$n>hykj!}@A~lv#4WKW^sUrjM#{U5EVCpg|w*EzmD_Cvi zOR1T-sdX%opW2sd3RhuV1yE}`0q}&mxsiw{(YY(ND^O@aBO>iRO7Phz88Ue<9o3x*+pKq%tggrXN?4mL{zNG=TBzwP~8|Uuo#D z%Z6r(_(of`{t3B`C6Tq;Ipk4UEtOq(_)(@qm}TS5M-_Wsm(Md~_csV%;d zacL&FZuNDJB(#D_6tWROO1}Z{k8`#T((R2Y(asQ;74`1>+cC$6Nz7J@tH7^)dubM; z#KSGC&qQdO_Q7x|Q@sJtErFtB>`*ouRE;f^php$W5;yj9Vw zcHt&NX*iRL0k7b*#a*Ye(4&ueUr4dl_QLIZN4Vm=^GN&t4QJVslVL@L;5 z{#=$AWs=~Rjx|?|xQ=Ed{6yEH{WxRIcvGt=w5>X69@02|u#gz$xH5;4A{8J8<+VVq z2V90Y9GQ4n$Z)Q^)^v+&!*bVh%3(%ZZ99-+1fRC+O^NO8o|)J^mkmBY60Uc*xx&;; zvB|vEeH;3*qQ@j^ey_C(lTGR?%A;y#{{UGLu8#&`Uyp;0ie}R9@g}o!^2>WHETG6B zwv9bC2=(|`_hQ1kZ?&xDy@$Mv}fDJvk=uaLJGt-_EB#__a+lBh}-s5KyF z4{LinEb=nMNv?N)wPTZoHPQ8J+o`?ELy^Q<;xA zr=i;FG3gIAuDcnrxCj~~xd(|;uwZ#`YJZa1gDE*N$cxu?XtjMkwD@j5xohy9O(I}S zfVlMI=8aTUCZtxU#+kD0IAY7H125A@=d%q=t{b83;IOpeZ}nMY)8lqqi#<5U1g45Z zG-cy-tw=kK`cziA>$$O9^jVof}wriq<&o z$txPwZsJCgRd7l52O@cjR4>JzIoq1<(4J$DFGKj~^tvrJBLGhpbb?7GdLd)-R+u9MNkKsbIdWs*iEl&^p7cOepvH{qjjljNn`p-&c{tiVwaue z?Xt%e+sI82K!yD}5mM*&s53K7Q5&@899)xqLsirK+vU9;I~X7~)^_Sp-J#-R zK|(`15x(c{$>z!k*{ckAO)w2wJ2$p~+UlC6w6@YW3(F~^wlr_HSP*#%kB65`!Hfyr z%9{_=HEmB(q(<7t;ccUlnsy=?=LLe&LMt3+xRfXic46NvjF6FEYO8MwL?%mnlxGX4 zTt~uSs+6E8S|;(To%}p(<6?P)fi>xDq>kp@1PTa9t|Kfzd=AdViK(C;WCA>L*vXD= zNo0Oyx6uvcb}{~m7t$n`R$R}cad5v0xG}NhuP8J;e%E}iMp;vxhveXf3p z7Q{=aTVEml@>P{6KX*hRk{Y{_(xY-Q%NX6RWLy8$`8J3YvIAEeFdYSa4~}{>rC-Pd zD$dWp!^{o7SPB<$ggk^OSjikWsT+8F^2nZ=nDAS(bl9tubuyBrp% zsMWs8uwmC{892#NAOTvkox1V|@ykSlu2vias|Fnb1ReY~$A~Jla#X1zj7S8NGq)^2iM6aza6uXK7c!R%O^9@Mh%`xU(t^?^0s(&o3qSxS1mjcsB zyOpCemw9cXDvW22C^nS43Q-oHK(1hAhgUuZ+3um`#H6OwbDNT-jmyMil^#H(vc{k( z9T9c{gQoQ~Gp1$aZ_7JhIcisLsOuk4gHF?~H7T7H1Kq_HN-9F9l}I4`Js0UK1I>)0 z@po+>OY@bh>KZlft!#!1tuslmD>TwH61kF5D4=yEK|6d(1%52H=rwTe_38ERC+PZD znKh*H+?pPva?5cAjpRR2n)jIf+ZR^|iqs=$Hn4n*bsgj1(Z58mdC=#+#gTLvYa9u-%xmW$f^;qV!H%U(CtY$(v|ERaBJLP19T#l2>trPtnu*{+tZ2ZQ{p$RGiTY_ z&&p--Jc#+CQQ{P#7MAyu&vAD-25P*n4^j4h0oV{eoTFE){LJjEankF_;L~D?6cI@q zM=Gqu6yjM!cUF2-{7P<3b`jyT7#3?gR9B`H){V16eko}cjv_9u6 z*7l6G2H_DA%_Vve7KfDKLS+K#~eHb@+BQ-{*wN`R<*P7L>f6 zpgdTOoA#;m=}d(MSho@e`&Aw5gbL)V8g@d?jL3R|y-CPPQ|nD~Nn=QEt`#D!WQs{X zCkxSbJq|)QYKyp(T&lXtiBzCKL9ewtW=|icl^~Koj*6TLkB9(z{PGH=Kn*L3s>aT) zyg-mP!B0?qv9(40XVrEeAXvRNH0Ahz{RjEpT%{$iz6DBWorAH?RiZ>-aD673b`e3_C z0WPC*?K_y_AeG=M^(Un=nIVqf-A5Z3>|0tQduXEs__6P zUxJ$uy+Zic0aa9$iq&cgFBLt9LOv0_J@Ro^rf6FA{r%;Iy}WYWOc@atNf?T1~9eZazEsL%tY5vVR*3w$1G<4;Jxz0c*u8~4ZZ`{4m<^sqdnNw>p%VHMuAgSb3$q`Kn-+}9 zQ{e;wu+IMgv%4DxlzJt9k9(=KoEpx8*<(qhD;DcY`ke)PS2q~p6J&rWHRQdSbKA?J zD4to@{pK-5qk%}}E-I(F01dO9hPpX5Tm-BnDx?;$FT>d-*Uq}3NJy^uIw&=hVt|3^W8WWcM+nCcaorRb#t&^5wJe_ zqsOh!*vEok$~?RN_R(2=Ap-VLMRj>_?H`~gXy>?rz7s4@{NrM3DMQ;j0h39t(-}?_ ze;#ddiGk**EFK$(>{`|k*W98AaADnf-TQYlak0jTYrq&=d=h7l9k(}npd60fFtOIp<$FRJNRRx5A|#dC8Q;VO|u z<0ArqG29)#Ewfjv_P$5x7Tp~IWLF+U)NIAvvcw>JVqEErVkVRvekeg+RH-~pVrhM^ z%unwEXQCyHzJaRF^P4>e?V^doq+^4C7*}>?UiHoPFKhJi-hYp^#X1REb!+7R05-CE zQfQIb!v2#i+K&eepp*NxjIkn{bMvJ|1HjP= zIR$xBdTd8g99c#=ad#wPCuG|9N!4`Q3k_RPwGdhAQZ#ncw21DqCjOj=4|W<8=htbPqT%(wuPFZ{A^FebIB!{s|flULMq(#GmXj4iZqO&qdF706aDNLtdO zhX=JCoe5zb6Y5Yo{wR5sza;jz$991alp3McIi?5@`@~gc#ZsX9$AgD@ab-`8$}bc zdInSgK&V*^l9eO^18-FX>@z1E&`5Z;p{i?(sfq3M+vK*Dg2i_MhG+@mca$W7)oZm` zetC3UX(d{OclQ&6c#<;5BO9i=Kndd=K>}gIth{?jD z${?~IFaAAD@w^Xd}Cb2h1YJ=N{ZcLJQ_N4}K100>{SYPDYZc1-c6(F=e7 z*7+$t%u%dp(khV57CMr^4b4jU=c2k-E!1X3X643F`>rC3@?gBa`r?NDW?;-&l)LbY zhzrN>$pcEcrkMI>Mlv2$Z&IWWoen}crViEFz{tM$F-(RiOL$@yB(h$EO;f zRys&n6(UM(I_yEoS{0&}r-Dc6%4_kd0MPg4L4cJzCr?`L07qXEXOUx zy0N*A+TT$}vehkIaa3u3E+}ibW=?zUxf#QD)`D1!vUDV!oXip=H*Vh z9<3_P<>;KBKuTB%B3Tf8GDcf!kQq$@Cpjoj#fdztz1icR3ElMl)sku#aq9AFki{L` z$k$dWpx6;TVHfX>G zh?tPF`k^;*%${9jj(aL-FxwwY#%7z}6JlojN}>?w^k z5lI-;?Zwnfa)v%c1$u>l}s;7!ruWl@6UpfIo&281!KxPbN2gtlUc>63FsJ2`gv{&=5xa zqui2DTrtx?o+&jGzUT5$OP?_6sIt6r6Y0c1VdOo)A7l!9 z=cjf~haQ$UTbCOotnBg|%~oHmz0KU`P`Q`lmVQK0$=iSjhy%b3*%=cn=*5lR-!n6Y zBb=w>akG2W^*???AmTeF(rH_l5<3m)+>ZDT!AU~;tg0d^NF(AstKOr&M~Mp&*`3gj zhpco^yp(i3TWa*nEn9Y=rFX&&s*AI5`FF@kRCp_rc!FtC)U5~3nOHp)T0h;A!9ZcZ zDxLB|#_Eh~$=Ma1iT-26{<>v=+N=5!GOXOy)YI(Ih_8(>swN9*TnTxY;##qGN`tj1 z1}d1vXDc~UvCYfkQbACF>_sW}WTLFwL$sO%nsXVqOJpiqMou7}wBM~dW!yk13EbCf zI|a8N14a@fE39f&O?lR!@~#gMBAhO*<9Xp(4EEwb-#Qv|E}Q&gVe`t0Se~O~j}W+x zmNcn)6ZRKj@lvWya14MYgWX2bT*>uu>P^Thv}T(g3bjM6w9nv8mj`StW`4Jbe@>^#7isU*t$ew6N8GOa6`Hx3yxlWxNnyhiMn@f-Yj*7*; z5Kk2(3iPIX4`gZo04abDuPvTtQrV1Z8pZack{O)G5}^^<$3Tdz#g8Ji=I6z$PSnhZ zX=9I+f;ha2TNs)tR#aYX6D$7leiBfR9}Kw4GN_pWYs_-w&tTWECX%Sq|4 z5hTp5xoUA<3%1oct&WdPk5oNE*<hk{zt|F__t>EjKZ4Obkjv=1adU zXmY`(>Z=@+T1m=fwpVE%fB_|#tvD?}>%TzVMJ$(!MaXQ|DaJD4Jki(k`FX9O)U9n= z;o96gMpapc#Iq<=b{)SAt{FHFr>{F~Fa;~Kx02!(yN#tP2t*f4>4y|70upzndx4oB znXXY5$H6YqZLTfMQfil)OuCX!AT|)B{{UB#-F^t_v$v>bU}$J~*QVJXE+qI$_kKdt z?R5){YRWYAbvtN<=aU&F1k0zc*QUue7rpq|w>E(WWs*3h<6KYVJtrMRu=)YOux`q&(ic4s$52)Ai}&ia*je*EXhFBo}azBu;h& zBa*uT)}t|{j@!mcL^iQy3O>epxfGrRjFw(a#yJ2{$&~oyd>yT{Oc0XX+;E>h@cAV;#Gwj%ed`jHN0;siy%@wIt?VG9;b_x7U{X6~>V-DPpm_)Kc3} zy@i=4jyIr%+E)!#;!7|ad)I7d5_u#Fdp3on!w|UC^?NuYyM}p+z_N3-vbTVhjp8AQ zq=`ujG38TC)@BprqPkV8yg>lcGq?k7@l|mzDvBPI=s%_^ z(uScCl7RKaRpSIHsN7Vk@Y|*;y*QA7Y}|MGcw(;jm=Rv0fOZ24Le5+zF@xI&_01({1w@jtr+TKUq#jQ8MJ+F@gi3OOGibb-2@x}RsgcdjYm>VM*jd8!%Xtd z(Cm5Q%w->?-Qv_nai`MWQPXC;^7e%+`puT3sU10G))Lf3KkrmWMhOa&8-PJ(M6)_U$R$^#fK(4axmwJ71fm8 zYjK(NJqyixU-*{S%onp-9EgoYsmj}doLi46hb7OpBlHOoOYyAKZ89o*K7BsS38 zn^GeHra)Q0XKN!JL9X-++)n-SxiP9^SCYvgRE3H~ZoJ&Of?ZaOJ{nYYpsq1v9#1*f z?%H{gW98_qit_Uv%}G+@zzn`F9z#Xv+J*W#f2-aGdE`*Bl#sOu;t`54P!tktl5wRZ z&quR}1;4lvTs$#@WW|017e9=ZHRVR4)O72GkmQEcuAcJdC$m18j!A+!;>cK!h^ZuP zy#U0iOSJ}HQf6a1!D=YP5EP0hDC1gFl|@fnlvtpU%W@iFZY(WT!#&GYZq|Ef@*adE>0?yOh{)S?Zs~N5}H$os) zL&)Nf+B?zZu(xB7ZJvuVt zh`xcuG6$0bxt$cy%gNb`74AvNAuVZ(xawNJ2{@{;ZGu$tJune!wm4*W;mi&|mOm^U zDzZpQe|Bob{9=F>QT9NuzlH@%nqa=4G7Im;0N$0{HaAM!J94VfqkV<<%H<_q8`p4R zJW4AUNeERT_E5ZcAQ9gq6LktRFRb`r+%lk zPhGN6RN~$U;MyRoS`jNyoyPe!P3!hp37hjRK;E<3M*f6-j5FDTL{$xi(G~-aAwJkk&p<%NJvjyq>RZ`2pmK8T9p^QN5BrF*LBn7Y=ka zQUN57k*;Xv?GB^8$^K1?QvU$XJKEdo3k9E)?oOKu0(IDK6%_InWD&?&`|U%R)9u{z zly~Zb+3^6T)_;;3K9aZ6UP(5IXd;nruCFGJMfA84>q{(@QMl+xuZYVu{h^ySta^}i zF@_>vC*SF?Owx->rJK{1L|f?9;aioB$VnC=K~U7F&v3ztIWb3zxP8wtAyO=3%{ooi ztL6ADez0Nv6FIuGFZMXF;ObO#<=l)Pmc73J4) zlJM)26A7#)Cf4T0V-%1xabQmXrFN=y5iET ztiqg#KxhRkzEe2(UqEdVDwq1jh`WJ?U;sLALDw-c_9i(`h=#+cAZ+wc z%l`m1`GZQixwf_Qot~2ev~IF$z+5C;sy$f4DPjk3s&}V`V|I^WVwXmEH8Ql$$6UMD zb*L?`H5qlgYwLqPruBIxx?6>a<{gAyWUYTEL=x}L!IOLGtnc~WFXMT@)FUWS1 z`EJH(;d@x;A6t^z`oM~^6lmTz^;MJroOqtSv&N;Lej&)cRy{ckwjV2bUT4%*G&?wm zZ(8bAi_wgbpc{oGunk?9ZG-bIz6%!fSCMq|GD&Hs)H(wt!?FSxd|_iO{K%#1USmxv2!tibcwXoW%gzZl?CJ*~IAo09f@o#XZXUj8W>P1d8CTYAQ+g zrbV9$CGGAmEyT_~qaCcAxRT81$xqyp7_bfdByH`D-pou-Mlqymm$K?G-dyT!X>&s) zHda?5eIoT7UD*LGP4*a(!j2g;x%E5CRGqIinI}i8@S0YY?hQ9iAbdbmuWVa{c6m0j zt6mEj?$=M$Zf!+tZ)Cq%g}fTtc=DV=CObMn`jH0e&iZu-RcbHvx0_L*=}NM;Mh zB>J?fu)A>kKmZBc@0pOx5*lPnAs$@v{*$Qa(r8+&@@Y4625&Gz?Wau~2tFY31H`#v zKyF5${gO7!Ou{9}h137g`6we)h|0{YIs8g`sNzUJBc6z69V1m!#*xrhaNSS7{jxEg zl~E1Gs^*NQoxg@nD9C=uBdv140u|XvZY1@jIf)Dh#t9sb^{B}e zRgNjx8mfdWOAy@;LU+KFLPoozCb{8=@HZ!F_bs+o=xadtk z9E7lA$T(#XL0%&f>Dll90G2*%g44`8W!|qf_torO;kipzMZ0@xqi7^+dHDP;gsX*W zhYD2hxZ%C0>@f<-iaaC9+UYd}>`lJeHWyc>TdR*STixmw<_jmXwsg3twMPM zccd6NCk@1vDxGN9@i8%pd48cRmeE`~BS|Ak#U*9ns=!pJ zYW!3qGB`tpGhCQm=hcm*(_M)T=sugsLWqYkQYrgY7WLKWSJSJ+Sq%Z~gb#@LgOZRD*@!k(gszPYv6Pe*Lld&U6)m+0{<#q#8F0GfwY9{u zT}&C`qs1jEs?V~hUW`fGCkUCE9adBWA+gb>PfGs)Sdn-F?GBK=34ZR)x%mw2yCd1c zYbHU&Jlq_aWw-?;^M~p>G>*vaHR z*A-DNiz!f8C0G?&5wY*@kd%s`r@1lB&LK}s1w!YL0QTeC=aIES$ta$4FAq+FflppU zd{y=xu~a)Va-y*uM%3&)F`%oWF;u*qqgqiZ@bZ6}?}K1f9~UVdPr}i#1rdoXKe32s z!Mks;6u?f(q@|FBUQ#%vOq8v9?8mNG0IF|!BC|$mD*phxR48f>^}FUoNUhabFCgMi zrRp&Ocqt(`gHRX_yX0i6b;0Ra$EwY6klZ~Xi%(QM-3*jwRp>$SIb5w+6phW;5>P8{ zfPx6#ojPR_GF4TLD@8wRdV6M0DBm?tY@W{1Bj*vind(**JW231IhG;^B}dJB3Zjc! zR$G@Pt}Y}Y!zDUVdT}@!K&SY$xF4Ikdk0-h;(n97deLK;+mRT9C)q@hkjLz>;TZl9aPHM6cUDg=phsOwO7%n9laKcv%{JSIVrL2PWK7U>LeBucLf#yG7B zKM&6-{P8_l{#*`W>iR|9g`Ko1&TN$RSuVt9xpjK;(U+l%(kL+ro!BOEc{%N{D)&zHsK^ZPwy znC))_{K@>7^FNXF`+ZMVy|UDFi>VgTFYP3daJhKQqB){qN)97pT7>PL&t!X9q}Luo zB=vOqp2f+6JXZPIPcJRQD!LYi;H_jJD)8&bo`R;oJnJB0M-)wmP-8fq-tqZ={{T3# z=ASx2ZK`RSg}#ZPUY>T^h5U-@;TWWg6j4;YC`hSX;`?jcTzV};wER29xA%a1{N1LL zvuB)f^eLB}f9DiGGjv2c0yYD&JeMc*9A>3otgU%PMfD<$)P@W_wws)YNiI zgdV-$duFS$a==`AK33E;PcUhxh31KKr72=wcZrZ}Xv3KR1GOog95s4re{++I-~EBr z%N9s;2;CRT(_coV7l#0SIVBVaet`Q7%#5xac_brUJigYRB6?FOlgi&!Pu?VKqJ^X` zpJ;u6D@s@I$YP$KIo?gNgvj*l`Umn$$ojT`1@42izI5Wsc9@|lz zeUZL!9@_SdArA&JxOa4R{gb4WPZak(@3}1XuQT6UNd92c)*F-i_-3#zCA7Bkp=4zQ z@?f1So>pUVe;Wq^hVyu+i| z^J}eA-d%T3V&uEEx7AC$YAP3majPCwqKb^o!<59+i>SlHyBOAB(DgLF)GmX0X5{*C zTwC1Ef+^;3zM6+Ss~%vjJV4Cyc*f+yQIJiypN4Ad2t9fHLp%uCVabSOaA}Meb!76ZW6dR!@k6g*eKr)oK+mdxO zr2;_HQpDW@HOUIa(ZJ$W*MEtsrXkB+oS}_#R48p@X#8urdx{lrxzp0{N1HlTiL^H zf22qkP_!3z<~akmrtL(RZP#Sqmt4B#-r~#y&E{HGzpHs8ShUpi`I_@bk$$JFXtxn@ zTZ=+!vC6061OiI9_>}IWER7CMDa*U*pD#`2KQu+9&7f*>J(i`;Z7w+^Q7x?gp+~j4 zjJTu5XbB)IuMjIPS< zxd3;^ibYpah?4Z|-)<#B8YLilun`KoA0; z6!~<*Vy(5gP!$qCfvQmRZl`+hx6m>%G^ms7m*?xGNUin}d2D-Bn(yzE=Br~zjlKX} zJAhyLLGkNMX;qpwQdlraBNCO;XcI^ER1u@Ll+o5aWrfMkY6DUaT^|Hq4p?xn)m~pPiW|}X*EPhP?s*hbF#sxj#yAThnDD`f7M{~ z3R^7FUgT0pdzfh3V8~gK=Y%g^;mpwq|FukeNL% zjY`#|QZ^1eeTGNEo>Bw_?%-sVb7Al07-XHKTiGsSc4DSg5i==Yh!84Nli{6Sm)V^8 zVRDb!8vH=1sOYj5Ng;*hSmKN%akn`k3srH+_|!FPzkTwI{>*Bz8-#ZEkJf{fcctRj zOVgx^9YauQH5;BDjis;>QHt^6?XXfi=I=@D)FqDcZ6?1Kxh9in7sfba(=}0P5|#Dh zxl(wj>%gEKj{Ww_W$c_K^!|i+<&J8aRn!*(TZrYop3+5Yaf1!Msm53n(Db zc>e(AJjrPun(&F1=I_*jn3eRxL-Bl7sU*~jW11%ROkQ0$Tc91mGa&d&00R%@H0w;H zq@^WT8gi$$C|<4*b)o6w*BVt%SwggXkQCKcyuXG#l?ye;rdiZ40tpCu{{S4SMN(HJ zhL$&axfO}Y753Y4k+jnFo>XNH%ESXf+kOMB20}^z>~jo(Ehx()|N>t zypk$Ru4*{^G$+M=(fwHoT4}Xrw*-YUiu_X$Pt8Fz@4f?TNo<;nJ!7_0MJJrhNM$Fg zuZ4VYMnMQ8GKDQtp=xTTtWSTnxycz{B}LoZkWZ*un|ua~TKuwcJ?gKh-dVrZ(%mi@ z;)l|jS=e!68l%%e_C-4X0F}N-kf{p90}=&80r30e01B8WKooGJFJEl7AqGGrV7HQa zq7jk|$BK3Y`~Lu3yNCeDZpb3BHs~d|fG}s_8%g#mr*f>P;yZZY86uGqS@)Opi@W8u zk*o~yH>hlFz$)^f6fIg&R1zvhN!uS5JesC=r?>uGc^h51)$K0rgo4`6;ac+cBg)z$ zgOd_ih>H+t6jy%RW{wvu*paUnjWvT2!Y8Yjm-qEPMX|YpcuI*rg|;`A^B7Q}R}cW#t_v2_e($ zl&zJ|sp`CwPQ|C1SpeCcx`3b$kj-ys_KDZb=8)cBpjYT}@Wa4}gn0%^-dMDXTc(eV zw3h~=c;qFj55R=7&{M5OX|}qy!;qd~1vZ~~ai>0&E|+Pqo0-`i^$SF}h(?`WNZ71o z_*XMD{h^mme|I7p&Kz_4gUCG7`Ahj{sMu<&tNveFS>DNOE#1_bWC>wArJPL7^4od^h;>d!6jt!?19j^j_cKn-Idh%~3!qfogA zbG~aoHUZ}3_!6#3<(=F&3bI=U4G+N83M6h_K~9u8kqn?4EqaJZgchacjS}+a-&9>Y zmbGLlXpnIjn%xqN^(OIq2DalK%h$@uR-pPdN_Imy5wJPiMD= z{>oc;mgJ?xexe4C7+silZ`+uTa2>pKOGO9^nya>uUGV zL&8M2xo=PFmj{d%;07$sA>`!OZYZSqW)?_Ev`8vmTYi&)EOhIHc6RjJP?1b+DkAch zfc!xVe%Bi1IOKYwQV%=)z_5XAg3*6(2gEQ&+VF)>DwDiZQG<+kwYnY)fo zHdvEX^Lf86eC@3?I;OgU(9UDDk4-KfXf0q)5r#vusGuEdUCu=0A)w&Mc?Xkuv&dd$ z&?Wlq)Memf#%2zW>VVZ%c#x0*9rEbp4nAEhhew@TA2j(hQab09Z{^aj5CM5q=%pyz%&;Qc-TF}M`_<4ZU4u6!5!wPiyXQRq4kp$&{ z1!8rG)Ff?Ir^#vw%BqzO=z5}*cO|whQHrlI6=DJ(gj9`(-Aq-Y#y(t>REiT?kzTk$ zuZbgwmiSp*a#nFxKS9YQ7a2}$!F^inq#7vtIt-9PEjbcqm8%#W0x#I8+Mf>iRdpp* zBh=ZAP*d!W3jY9HcvW)Om&AF2><8+`sZ|Su!~n|0*O6YOM)aqARjESqeksXIb(W>N z*KoM-t5h|TS0X@we)Nh`yKxIm@-h^vu}q?fk5E)GjY-|=29QJKtwB|sG_Yp^8rJu*psSNSFRuccW2 zm(cvvqBfhJbcCc|IbflFn{;G?KGBC1naYuPTx$zW9uErI-0HS-g)^i%+tE@sqxl(Fl281%wrl5)%XD{u4W}Qx+IU~);)64@& zMZMr_9(NK$Yj13>1kSB6^vm&QRTLz%>?=S9`B$^qvPVo~E^%E|b9qnZJ>9g&NU}+T z(o2hvMnT4SRH#%Ejno-AazGf>elCYMxbsR}+-S+>vb<=E87z*ckyafm+PyOJ%$rLj zljG%DgWm$I^%IbB_J>OJ$Z;yhWrZXhiQ-JW{{U#WT75X(s$VJfC6P@J*-|uaD7+qv7I!4h(_l|izlJ( zqPDeXo!nr^mlR|7g8*~n2^MTQaFfiG~>wpvxD}N+UV)8O^kZG-REX@cZxWq`X+rcNcA^| zK-0ANe7~o=+S=($5QaEXJ*2p`Ra$bC_2pCGbItQ-)MSlLR!h<1(?=I4r)fHU&Ayhi z$EI1jx)Bo@_{AAjA&PO`%XbH%%}lUQechaB#f)C+*Ufut4E7P*Te<@zp-EM7UL{hr z>)hmHqMU`2h{>4wd3gZyj&era=ny(B8I;{DdzgQHet%IBKEcP(ChQhS`xAnR9BC zgn27!-gui!aJt5eHKW|jg4`)GMDPXpo-(UQ=ubu)<$8@5hy{1D!>H$I8!s|g>-RSg zWpONA5ne#t(FAHbN6Bao+tVwShCp*~$DT7Zp6S=0S=20S!In$7ohNHZ)Jju}9xW-5 zg#;RHT)@dGVlGVMvop1gAdcb#&dbnNO93({^m!g{DSjXdn)J-98H~BOa*Z(W%eyZ+ z#pa!5?low&ts)rNgo01qOX`|~4M-}=q*kMR+Y=5A++MG6)$L@xdrO#A;t`>j)+|7i z_IIax48!AvP-iY_ZojNWV)j>!S=Tnm2PFSbGzgl9uhB5K8W}i!D~h{{T<8R*u_Jx0(xruUAHyeLq++1OgR`?c47ec;&N3 zSX0XU>jbyfH@;r;L`s*|C}N)K+&V$1Ta~KZ+sPPUl9e2agH(0y6$#&HGu1lmk>>pS z(tPjcPayf{R@1!au3u_8W!>9Dtz1aaLQ0eo!Kp;C1x0fZjhw9mFCalX=c(#DD^IKJ z<2+U3Q_SGjWx<}L`#Z|MVbi?3HT-^O`qrTKuN0b2v=u!GZ6%Fe452o5B-Kc7vrO`x zPiIaw5;xx7y9TUE$xkEmY(8plS4)vC?V`DrJ!u}FS&k*EGOFw%1dfN7zG8nS0l9KN zI!?hmw=WD!amEPu{W{!&`$(A|D)`F7^s(mg`<2z=+EOzr7SHQ*4(ab){& zk&2FSv80FW{AP{lzRUYjETmz~eJ>l@U709LjxQ+k_vXi&ypyUniRV2weSXJDMAIhF zuL9a?7BRuZN5W1ua}sg=+=p@0uUzXpSJ{mYyqV!XsW@70(3T^^G0Ev3VEp^?gt|QG zpm}#$)-`WIr;66@1hWzFsg+)69#&whR$eE=txj_oy^ha@U`|7WsN40qnL9|&XpNZ% zmjpV_jc;>n<@4qpCs>XP+b^kJn|ZBF(W^@VXlp`@yjU`BMM%wG@^+&JNeq!DJsWW9 z$5m+ttrW#<{Jni+VyBYYyF7(wCz1%+mbIYh$A4_a12pf_M($L#F(+nZy56z`an6@E zx|Ap&p51NM85R^p3g$w_gp)(XNv{>RveTX`zKp9{*4ozARuM+zr^7Eg7?pQ5rA<53jHZclgur-rneM+#Ad~CM z5J=-?S3vQVC+$#Dr{|g88-IZkgsp|jhi4=uJy(;Lwp8#uFY7~IIs5<3|q(a<0%!N^c8iL$NA2VDW zMT)vT7x}t@BUMtrKBpu%=Boq9^$95BP24RA_6H3rB7oGi^GRBBuJ!s>m{l17Qtsbl z;;engN_W6TtD=M;P*@NJ2GnYN`eFqtx<(YS6yo1w#C*yQB2 ztJbD64FRhoQncl@ed$b1g;up`Z7!|mgu56VJaY7Esp~*{{y7NmAbO9+?Kv?Co!>)g zes%Kqn*6mVmVC$()>N2W>3Xn>l-81#9;8K9i7Zo6oBT>iscxC2)o9KwN9J*gkl)MV z9P_A@p}{U+j;vcm)}pYzzw*wc1?7yF3=9ys5K*YjPasZK1r{ZwHu!-YZ5^sNiLOs%jp$TeL?Y6>tBVp1pDWn>ohqu)2VXk<>Af6yXox* zQ+-cLipCq4lFs4F2S#X$JOhg_8jYB3u@vvuHPII>`8!AvA-l{x_Z6O#u4%Wr53i@q zev?^ib3q+FYna#6wvjE#U`rr$JAIwCWVzI|do=iomf04r0SXZFWRQ7iTX=5&~qf;Vj;lWluQ5x`C@oJjTo<^TZ&Ym?}hZfPcR(E=hz_qc7 zr$K0Ms1ik+|~PZ-8}W`E>EcDA>@$3bMHh^#$W4xT*ebRomMdT28D3#)KAD zjI|b@2Q~0Dtudvf!buuHKDlb_lO4E~WeT6M$WoLW;;B{IM$~qaPem1q+c>RSl~5RB zs2^E{BaH)v2luCLy=qP>f|$x&y0K!wazbfPKa>um7ARIPy0oB@Y8b6H@b;z!$xq8$k2!04f0uOWIi_~@+IF2WSXm9ckr$FTJ1B19v7V?C zxnvD6D`VxmdpmorLhj}(+j}Y6=Ez*c zPonXlJf5}Yfq*Ii9djxB1Ifp#PTQ_3FAZ#YyUA3@+9Y;{s z3RukMIj16_OQcAYE7TP#PT8o=Or^WD;<%FC{w_(txply z49dX}1BsgJW<#p#dT*Dbdzhh;c$uQNwXzggrINIWmphJM%y!!{GGmmZvqn)E5Qehz z)y>>bs9))(+fIqr3wu-^tC`5CJk^y#q3#6;&3vyIrz~NCh>+&Tb*m=6ytuse9!ra+ zWwVJv5mb+gwKW*xCP#L`5F$}}HTCpj&q$ePid{JbS6t*@O_`UPGVFN{-Ez6(JW4qx z(^`uM4$my;X50#sLsmRRKr|yVw~oyd99+^bKWkcWk3+Mxxsk55+xE5+EkH$hnXWxk z_Tq)sFs-!-%E%cyD1Z>4I|#}E2EkV#dFS8>HZ zcI&}Pjz17q&q?+#wIXG~KE3ZR+PDuNA5@3(x6WF2sb{A7FH^O(snekOy`d&a`+=bsN%6A`XBQ8>dWf(*8YXG4{>)S z5$wdh!m%u=8V`UpR3n$qzHoVRN>MiNu|z~zdu)=)X9U)gTKcFh{;>nU*>bB^ELUaN zn&u`!VY(7Fo7-9>`f>fxFiO0kpQ|c`<{Up-ih=K3*5)=T%*X2H$s0|v*L<}Ojjz}x z)}N`_MsDD9Rgei%Pyy-)Xw;7eq3x9EEnms)pTfI6ac(n*%sr6=PYOh4E z$HbZsi|ps1>Aj%Q>v6^t0^JsU7HDrCOdm@8?fl%)ZEtOKZ$4`_5NcvL?$lmP!PQra zl@f+Eq1&Muyq{)irAE4RaYk7M0r{!g7h+Kj_kKH`ich`qxD*VulXcbHGQ+#kj)ZtMZZn0 zo-;)3`ZLN}*ORo%Q-21xEbo6iJ>t$0CMfI3M;&M$K9S-kfMcm;ZnSq?kTn!YT|$Y)cJ24#zAlIH>nk<0Cuj_ z2R$o=(jvvh#4$a+q;}AYkVMY$RgFlX<;tJ|wFU_Q5)&9K^c_@N!3^{0I*fEkqdaAf z;&!TqMcu~x)waxBq{Wpny-v$h)2}7c??c0N0Z}uQry);^h<>>oa}padDLj_$=B+8A z_>@#s4#K2va?SdoSx_icmLOU{0cMe?2adxfMO6N;Z5xIb@lR0@!XcH#UnR77=ljFjY+GCI_NDdKwl7^?MkL}wt98j1$uzSu!j zP)22}_vc$||AKo`O!yVb? zK}Ie+Q#cC!&fiyeS80bP$WJp{>e|HXtY~w6ZIbF8LG;-hgPEd?!&`oh!-=O8hdm5J zxuYq!oa-+Zr)4DapHA}Gspt|!gORC5QN2Mu^Uyt%*NI^;CvXPNt5FlS%pwgQYsPm- z4-v?dPz?a+DPH;6!aQyzhql@!mW!f&W-Da3iW_x#?SKemkkFoF?n&)kvYyh^$4QTh zLbgmdEN=JDEfMtWtkz<9rJZU^HAO)Ho%>X06%T3WmoEe&Nbeum9iC&VJC1j3z2ZnZr})17D%)MB%-VX_j#&U({&wy&qy-rC$AF~@c4DPBJk zm3WGD9yx&?$;C1Iz;EKBRLQhWZ(LbgEl%CgA6f2}b__h?ABB6Ud=jJ5^&|1w}%d^{;mM5z`F?YDn$lAsB~g4Hbst@CPFxkl0mX z+@okJcacKxwK`X9jU^Esy3A2S$Z9Cjm0B|R15x-Kunm^k1+}pXqy%I|DxpsnQoV(0 zPtO@gWwlpW)fzuTf~#?sQhB!P$kYk~PfnG}=~7#_R&;#GCj5gAh5Doa064jK-5J6!HSCB6s zfSy!PXa#w6&n(NTjJ+`w^)b_d>SWedI>?G!jZ((O-X1DrvbT`kI>$;Nn&Ie#(|RVu zwqQ(3Ca&D5M~qoXu5Bcl{S~w?2Q%u%gdjBDp!ipOh?#GUM0aE7^1|lsX|AWaNKuRN zlGVL8;@v(i_>tl=*w2Tn9Fx9`w@%WnG%I9^?(RiYij8w4@{&T7ufzZ(@$XE!GvaWk zvaX}5>FlWzw2`&PHHnBN8Gh2x(x#)^EshZ`t$av*Cg#&ow&L=Om|lqdlogE?crp;w z+J>DnCg8*iQ@Ddjw!gEI+SV&|i5VmGl~k8I1r@DB4!y7)M5VJ~hzZV-8fq5ONnt8Y z1WfTp>eXIg{_--QnvhQW$`u z40s}$2$nz*cnyG1I#;%H8l&ni=M;Jb*zxqPt>TtQ^#+VbA!0cwX87p9aV`gLw92rW zPGDoQcch6R6qWroL{CK;wdu1k6co#h``8Xj+Kt7rmJ;#${{T`xv?vF{3osnc#;1|+ z>5|7U5Zg?)Vb|VVhSo`S31Eo%gH?7-OHw7z)(P93l=!$uu%!S3fK{_#Jv^K#yz^DH z*Aq*>ywoqEx3ROZTMIjOr_}E~SzTTu35>I+4~VHA2Xjo_VAXIDlNhH1J~5UAm%&=J zcAiK4+MCgVq|x-vRtwu}XcRaQt1QZhDg!WzLKIixruppJXv`)kJcdGW<`vcU zmXGEeO&dwom&sQ#YEf&N)7)s@VpooPY0JgM?AchWLnKAivNZ@DslIt8vjnkBi2^<1 zo~s5?I0`mi(2YE{wvg%)!3~`8#BL)BW0DJ+0v<5DzR(|M?Dg$T*5%kac(-L1z{hFA zFpnX2NMhcA4uz{j&}~fBjT_m%q~(x8Q}5ko^- zW_CG83Ea)*JY&-!T=RMJ!zRDHW13J_1QFqw3Z^$ z`b4(|ZXuBUr38XNKKW#4z&L8!r@4DBhpx$~={Bi0B0Aj>{;n?dc7mh zXJ?C3#mO|hWc3mtklriCtR`a0YsaGn*l{_ka^%MTq_(Qk8I>*qvq^j-=D|r7D5Qbx z3F+4t9!3Av`7-61s${Pc2~u|-c6v_}q(?(JQWcGA#HlB!J{bv{UPz~v-J_B=q_EME z*Lnmyd_B!~u16^1jW)(huP(2(D~YeQJA*yf1&JgAiio>~3D8%*V`=el8(}TVT2Qbb zvre`7W=!`s#e8T00G?zGtK*hMTOg_8$+_v%CaWX_IsyAb^>xKtMXN62mE8Dz@l-(s z(9)GO72D~>R+ZcU-x>XoL9fy=Rq5D<=AX=QRex9EAwj1~D5=F$D8y02C#XwENMpeC zX4-)GZHl6lF;Ku(MJ0<=lV00&#Z@Abe^C+Pjz%NnGWmLN+_~~{o?wBH59W7ZPtRBDKyKPw6ZDz52OIPa2S;YdSF(7Q!&e6Lr93B zrMFWAoPT@7&`MMqb6$<@(<8)`O`Y}akoxVMY%S-FP3^p(n`y}E0`*oMj#Zxq9N5U8 zK8&JimuX&U)2|$)@kehYrna%%Hwn3_(M)p#Lqp@&I8A4>*(D-zxiHN^o7id)+s`bv z_jh`0EPkZQ<&jyL3~x!tDu)e1RP@`!Ijuw|9$~T>Z7}mS{ftv+x`1IdgppiWTulUE z`g0c&ePPWxabkM6P5g3tJ$6kzxS{d)Gs_+@gt681%NZkteL{Ia5}AaID-$1ujA{!8 zK0WiV#qFTW4-O)Wf#3^6Ynt?z`e}{_jlwfYG*R=I$Ogi-6ZxcW0XJuxXIkM{%qCny-N=-&!!|J(}pxumWq0jB)t!X z7a8EnWzC6|BJIB}e9frbdV0pEc9OLujT-7gIMSsRBPcf>I3=RUVrcH7NXb7gw4EmV zjnpRjq=nhNUZ@+nWARtO1DIcvF+aRynYN>6<>}Ql_}bPKLFl9j6NPR5GhPqLb~LRG zeYZNiK;z)W%k;90sWZOwu9tS2e9vQXV*@LhtYW0Gs;T16(ec>GcT&9u*~??>4R;m9 z&}GE)y;y!*YXzpd)24fcSeNT@D@P#+)8x~Q<;J{8ZN8cLdmq*9 zG<`7MT)!CPy1RKeCn6Mx;-IS<16t-rBjS=cIBV@=BWR6x^76{aOMRnUNWPUlKz`J+ zu^_Ao9BRNNI=06zjy?lySWGW+iqJgfP!g*#U_%O;)rWDDO5o6}oY!>}6hDqCiHnP< zcK-l%o>3tH?tRTMR9%`nk~oEc0?i8w3fITK(S%71j?Ur*F+Vl{uptwP3d`8A@$Z%y zY^_al^Dilr)p-L+5M`*`>|A&O;Bus-)7*ORFRAG}0YadSyeZ1K2(%>kYO1wJd7_fc zweEZEj|!}T2`U6?gMa~8mK8qzGI3PZ7l7c@sq6;%Vyj0QMH@M8Bz05ailS}IauL6L zl365nB-_VuB6Do*z)i>D<@8s!N+y*R9B{$MnwZOh#hFOzDmEjgPmNL5vosR%N&`ys zT2vnXBO{yBipNsG@-Mo7=My!{tuM_t5lsY#OVspx*tHZ;NkI@pBI z0D?Xk&qWD;7S8M0!&yhg_W-%_&9p+(>T%p#%Fi*hlosV7uf!O9My0%V&l2!t_Z(q7 z^3Ry(p4kQc&Aqjp%wdke^K(EdIC7y>9XfB3mKiUM12nR~(d?NG@M)52Bo{W#@S|=@ zdTuMdDO{l8l6+=HFDxysT6{iI5=W{H@%YeHc6$EV3~jZ&Hf>X!%w!i}A@C zgxo2w(wzI+eyTvx~s~{>Fx*fL^AR5;)vE$q^ zk+kRX&VMo7Tu&Xwp)2U}D@5>57%nF&p2^sI{>LSb1ePX-?>+Mml;PJU znp>MDhTcSsTwL&C&nzj%HZqVZ$O%;^_DwT1%)%^jfJ+(GBfZh=TI9~!b(}|vN~Mge z`yz=LZXkHmFeE%#66eN33cgIUis}HTKv=)&CKnAotU;P6R?jjV-IM^+#*AuUr% zkVykC#aQ-hBZ(yaIdL;tdZb+0a576Er>3Xv#>~QuOE4TyVZQCYXTv7V62`|o#|@sZ zZ6(AP4R38K1ip&YdeSo>_?EQU0W}r^z3hKbNrUkzVBFUYpVNn1xMz^9o~siRX{f3wCaw>r#+2gKqf<6s)pkJ3hmIV}iP`$Ij#T^C%9^}# zYPx(9!#pVja$8Lm#Gu3LqzcrEn=mTGp(k;kRjz@IYq{(6L=$ghwz-c^-Q#&A*vAS0 z%*?{18tf_GeCI@@Wlrb_^=jW$yVc~7CB!kq0~K`!p*~!w2_D!+DFbaeBqPa1w1kpK zZe-LhF6hDdGKDUH8tjX*`}ggcT2LfNjBZT_QwR$zGxIn8a$oY>^0!a2wbk`ByuH>| zbEn#Aex1X&)er~urG==9WTI4x_1kRe`xn{l+Pr{FdP}R;c9dfiDDw}PYUS*33uW^*en zgaDtr^w;)iz@7X}GiwuVVHF&N6;*B^`*>uMRm8lB0#zh+u!HbKf)`*5UDV)aL0; zGONg6(OabA5@XG-;pp|~q%COQJo8`xcYIcYgHKuODRUXOe^MopjUQ@}@la57$jg?^ za*aR#*7-77KvH;#Dhn_jX`YJd8i7iHppn;&ccpPsEy89(Rf|$Sj*Z2R``6nMvPR0X zPQ^hosyh9Z-i$nOlCF)*w*x05N|Kw?BU>R9&mScQR4K47tVsv`T30NJsiOx4mzm;e z_IlT+%jwCgxQ+T23|C22t1KV?s^gJ;h59v$p<-k6rW6>bsV0Xg)|`Sd*xtSrm!28 zhk!+5Dys38q+y3$`+pn~#w}2MdtqiFu<1zEG)m=hZMhCSv?h*5cDxft_ND3 z#%OgO&SH$BVzC{O zpVMT;Sp72Z4P0eH^G&|B)D6$oqp{QyHjUy4;u$%bb5{q5EPEb+=LxCMX2Ef-hhFz2 z8wf+E#*<99mhs+P+zAY*#l&)M09hOnRReKOnUSFFkIIf1i;^V~Et^Z5JrG*MYozJX z!z_$uMh;q(txXtpJ~hqZ_NyU~93$q_EOhmKCs5O;wvtO|QqU<4Ew})XY5?NEZWx`n z&gVs~mZJ=2MO%+3?!k3^YVGbl6@@t;f;MRDF%{se@R6_^l5;ZTdZ0#&&h;&3YdgEE zI3y*IkMxk!{{s5s}w-aoB*eh6osV&et0 zv$4|_B6u`^2r3bUei{K%d*(TXC5jk{^&^c3!%(vY@HD9VvH@E$Gctz?EB2j_U8z&= zlBGx4lw>I@$r_>JE@Dv3r^Anj%OGRArt!$|ah4mX?)Yw_j~%=mQ-7x=X=+<*nWN;^ z+?AD;{Wk%EF661~cfq=)O$k|Kl0iT?m;R2Lw7uVaL& z8Rj54Na|QnJFRHF>DsvvX;gnm4k~KPO_f-0PZE1%xYZK39Eb|s$)@Vn1LuztrgpM0 zTJiw+j@f0Zdu2M9#B<-hwY;N?I4nsgY6V{(9BosrXHqTe25(Vzphyi=AK7(yprJ__ugNUws2_L2BE3_Y}{SW$qI#H zI7Fn$A(T`Su0RX7Z1dl4^)ktp7;9kfdmk8ws`q<>eqiazbp@+P-&PE)Sdfa3UR49A z@Xi=%BUf(jT81hd6 zj_E;kQhJ68d)IPuqofw!k5UN?n(y-gVYkzfezA3PtX!LWOIT!3i5hP+$mDz=0kZXD zwnBPw7Fjh!8l-$aVtckLAh=j5%00b0BYl?Q+aISWI0W0Hl!3CMM-9yJTuZ1=6h)(k zNg{LcC~vV$N!BaefVFm04t+8EYl)Abjfc**h2y(HyTR;UH3(!WkK^>kxtUWnVuwnO2-e(uN)|6oc%l+22?YK* zPHY}2vRfiqewpT2CbXTWoV*<5o!a6>UraXb@ze!XuGQ_83J!c?&gYA#ra&QS-^Vcy0t=L7#20GX)ORj^ zt!#!5OW;k1CZ`%5=sNew%K-w~@yLyX%Y4n|C^R@NBb{9m;#n43bw3&)=+vj!Q?}Wg zqtl$6+BG@+K8!qh>I-|gWDgLu<208%YGjF!0tlfMu5Ww}6KNfX!6|5G< z=0LTQ$COev2kol>sw>DSTIZR2L8O+SQ7H3?k)!2%JuZhOfJ5n9A2VqhowLDbau(pu z(VJ9ej^PiaITEB6VYgwN{O|!GK$mEBF*_4Q<$h@V@$ygQr2ha>)V$9f#;FokZ!E(D zUdk1_x+NY8dS?5x{hrk8HW8rU=j|Bd^L$D9;raW2`HgvNqxo{@Q}W-IbV!fs z3njXETKahyG;cV!a6SYSRbo_Erz#QXor~+IH%Rn>bpW&WNTpgUTa%bjpQDh z2~?tUL&OqAYTatbsqxOD7%{-yMLOb1=28ciTM6BdRFD;ms3ob<`co%fYqxV;zBhJi z$nMQA`o)e-gr!Q!D5%-Cuj7h1%e_`dEP|U5Yup@JT4APAYp5d%30EA@nl%r7`s24$ z89lel@=I}VKASATB;w0yw-!o@>`h10n7yN?{KPm4W0b|8c~l&;ehgJr&Zns!OtlUR-Iwbv`_PSgMzx%pRdowLKET zr+_=}QTB!^tYVF;QPfg|cJS|tsS9-30`U=aVcwoNlp|tLqM-ew$!IB0mQE_TmjqFH z4vfaVJ^XTNs|`yYTR^+B)3ED`q9gdgaZSnNup4$bt4+u;Qg%CHtH1-G?Mzi+Q_L{> zaaCn@QV8CiF;!5+Q)&j4)^&lCrfv0zu!9@FQ%-pCYQ?R!~81aj8Iz zwV_a?fwBBD5mam}@bis_AO%SqH9J=>0>Y}wj6{B;gTks100+g@w#XS$sZmf$uKxfC z9IHyxwJC*CsjfuG1c+86uvR<2f$<$N*z8qomhoJtqcmdRZ$jT{I`33rx*u_XX}CQ{ zlCn)R%zkLl;)>qR{WV=OA`E(NqItO6iQ{lSDh|Mm#-5)ZVnl|_yh6|PPd4b9#l^On zd1EetsNC@u(N9V3rkn2b)}|4?2oiCpAP0QO#%|b`pj`QXU%b=>!`ZV(1W6UW0J zMGYiqr*X^!wMouP+YZkC;K|(N>2(GMnup9fhN6*6cXARE3avgV8P{&U9vSDEHZMrz*aVRfvS}Qu@wY=HEKnBWn32I9GALjW#;FLh`!YbnTxWCE5+V|oZXM@ zVHiVfbu<%u-#kfYbrQzwG%UXdABW=rvjRz{Uf|_B4*BJIC2js3jH!R+pYA;fVr z8Dmx7kgW?DDMAKU;WvJ57o~aal2Bv5TVl`7TXRJemv&}yH){4BFdR$ywqGBbMeVZ_ zBF%c|iisrS8ietnsT8Ftk?@0Lb%+f^&X&?!-dXB%#WtUD47T_7@=;@&DOZcem7&~h z3F($%(|~PrWF%V@^4FcNv|rLXZQq!$bt{WlK)2H_f)A_P^I>o4ObB-zKvV68QHeCv zGLR8h-K7KVz4UhaW|uX!%u*!^%KQHSqqJo5AM1mUf&-I>Hq7Yxj&@@S z3+SJUBs-Z$A_}c~aVIgQj9Z-?-j)lh`SL9;XOGpA=63}|N`$7(PzeH?c;%mz88>mx zx5L?t`G?K0>pE*Urm;(BB1vyBk)(1-qsGL6@V8yFI}Ra<$IG9^c(%2!Ne`}}xvk2p zERFFwk-?}_;Ak@{QVy@hDVBvZ>AscX+@<})+lhciV;n`-?8>_zQE9ynz~v-ya%CBk zZ@KDb;_Fb+Z6}<;Ev5aftZk>L{oImOkEX$^%BHkERQu*emr*<_}=5OX6xgGYHzG1yxGVr&nV`2rYA}~G}mC$;=n)IQ1_}4l;7qj@WW4J_0WA1Qr z>m@VB7`~7BedixDYEW5enoaG^#l(voYZ5gA(A2!lrBzf7xiA@*F3{8991|QRufv{X zG`bFvWp{OFuIs|e-%pT!mXQ@Co~6Rb;vQ6yg*sOzaza?d;BF_8VsV^)lhNi{w6R5g ztEJw}b*DXA*6MiGBzS|BtHOlvEsiXf5XbLimRSOTJvh~UY7l-V1ktwYDVA{*wG)mj zA6_6)k9zN4yycKK7?Eg^B{s>g2zMjWl)!{$lPgDhhhtg;$+(JF$EV+w%o0Nq_5T3U zFK2gWaR6R%as|i~qX0+>I-T<4AOabEwxMmN>-ui8ClToStZi>`chV^5*amc=rFwFu zK+ie$w@NT%1a)>AOyshAonn1eBD0nWOjF9@cbky)BZyS89}ZM1d*>wq$0)lDld%5) z|IqngIxQ8QWLc{1BD#)CLJtt$2g5xZh0-k+&SRB=uu^ynsKS+EMR@Y120SWj$Awp>-9h`Z!O2&ZW*k?KA}dzt2Xlgam1v9=tx2KToA$lN2&;!K!zQYU z_I>NVDypP{2*p($*pWe8w;73G9e0uD@H9}Y_#%9s;|OIpNT#yRF0qRpQBDS(PW zQ-$dt5hKc_xsu-#ZP7(ADjIc=EAT+#R^~eq^kkBw3_Qgoi6~D(OCO|>ilT&Ec8)bp z%zd#`SD?zGwCpR?Q^Nq}gg{8HVrVWR6T{PhJXm;eJ&5WE%XrKMgxe>x)E@TQ%EMcb zO)^Cty|%E?7n9Qr%Dl+lq#6@U=6iFn{{T2fQPHw8Y0bq3k9Te&Xe1C@YF6ajz^FbN zNWcOZ4-9)JwEqAkJRHA7c_LWEjjJw$WEJPMj(t`*0=2}%eOe_X&;>G4n4fIUmu+Ln zCE@=7cl=)F2M_@{(6rlMQhiZpU#i4C3kzus*enwzTonkq&DZrdrIF z!Y90)h2EyIeP7pv1H?|@S%7g+fof~xo=dFO&s0tKxmbk+RGQJX{TruPwDL!8O>|h? z#}u(B;tZ2URFcDTPHeRq23;_ZP};WA)sf~~E0bo9#$>dCxg;)sXPYHY&m*AiT-spN zMXJB)dvGmVQI+PNiw2`LL))n2Sw7K?hlNMWHe=e%`;W)o)^Kqo&#Y>ehT*PN?<`Fc zJExSvEHBXdND8BpJ*kIJ?G|gcaluTRTGQjc($i4VUOAk?oYpQ6MRnM>r}kUbuIj6y$$s?aDW4~P!Z<6)PKTaYBkW4gUZ zj&pF21M(CNN`bKy8v*Zpdra5RPB!uPY_CU{bpCYvzgs4 zRH2IEH{{@gg-e8~E5I7z=EI3KT}y&B>^IR1(nNN!2@Jey-xsKQ?l%J@Axz;WNo{!1 z2`|>+vw98E{V zh>CdWI)lzSqkUF$s=S6ZC1JULgr!YaYET;NGJGxY)zGFrs`-~vX>M*Vq>{0aybU=j zvFN`IN{?(HQ(W?K8$hude`0`=I7^VHplUy-&Fv^mwaf*;A zY0{tqO>2>8l(%NSU69EuL-kX4IrtG!o!NdMLT|XH|=;MTg(1s)AT!gTPuq> z^|m;Opm8zkX6$t#& zMt($Y)!w;>tL?2$wnWRO?m+CUSSlfz`IlPLe1W5Do?z82Z1h_V4$fUd3#Eh@Qbtke z0UTcmX&!)rqkP2dX=*i^z$;)|b@IauRQx>ihnhdcI{u@65mjc8w1d(M$=I_>FGxiZ!D)1k7tn%*WaZ^xWsHUtHr08k#a>S>16D4rmUA}?3s3sdZh?@U!m)s`nvcm0!! zp^9*!0I?&8T3{l=s#FACT)FfrIuB!j3RaecAAkek4RT8ET>zl2*&zj9KpUExZ$L0o zX%}CHF}jjE595*%TBSh|VBETRcgp1yHZ0==9$h|JWO=co*;Q60Ta`~r*DmO!DiF+3 zR9E6tO3;1zM45$9jKZZt09lBwcCSj{0R*mxa{dXHkwI;95<;~&(A0b7Yi%bWj$&W7 z-w|#8>@=;1V0aJ%Z|czR$FUyxM0ZlI$|!iQ>Ocp^z0OR~VY(nPFA%|a)qWBy;xegj z$R-QvaN`<)QGhhq(v+^)DJl|iSzF^fidV4r$rzB81|j574F>-J8R~L2h3G)%$o2a_ zF_Hq(yaunr^p5!vkU#m2W zw^YqD>!cCP+sUr&2hge{wgaFcTh&)WaAlK-pztGnq94=cK1_X z+ysUgxm__($`p$6CZm4=HD=+k5QJJH7!T3L5s3g#ZAlD^B zxg242?znXs(SEKk7Hddhdb{zS;V7as%R9B+t(UZGj51#s{a6L zh-BMt^}wr=7$e~#@pmspPDJnDw}v58IF&axw!EYV_irmv6d$$oKGRU|Shl|`>YDrhqh z!y)AY&d?C~nk!=>yiu4c#Y|#^5!RGH4SNb@k;lWdhUGj=j_XicD4$Z*Zez5H@(AL$ zx4Lm0%#{ycML80FjM-_sA5*CMF_ZHBY)(|O^qcDH(C8O&a(P_N$gaGqqu~-Viv1a# zi`i{Y4-p`I7!07I^xNrSNv&loYcfc@T2sWD8W6yZzImq04hfh`YWrJZBz?!3?XDzk zA5C#{e0d{kTuF^SANNtMXe*RoaJFViJ6@Y*Z&LZ$-bzS}crPw1Q&2kB$0gv}EHC=| z)@O*7O^ne=S5m6LP;@mooLoDk5QURhppSypsQlayg+V5ReW{S76KGlPo@flE3E-e3 z5<-G%Nhh~Xm_7&!wzrIn>4%D;h)Zr;fCo}N@Q-qBG`G|bBW`B&Wj_k?9V@*mdW@B| zb+q1BYsBF+^fZDtB+<bu{8@L(?_$l<1SV4(k;Uq*Bi->1lB~%(rqi z#lrKmvtP4tRFG)(1aYA>@XQHhl%hyA(w&qc84po>-~RwPXXm!lt!#fSVZM8dt7ICN znSD77zNPE0D`*{SKp{g~AKE@6JuBE=%`kzd=7BKbIkUtI;goW6*7ovhtF19FD{{rOkN*@YbC-_c>-xNThz1 zbk?Fvr6Cwd3P1YY1$~cPx)8ivKgHkV#6+uK`JPABEhoQt?VzVPK@0)vNz97~!IL0~|7ZA@yC4X)y$ ze%DYdl*v?@qwJa<$0r_XSZHZosrw^g^UF&aE-b1&L%58JuZ~eBL0UGY5U>K9j|%UI zVq5|;Or($)&=6=(%P*@4R!IH;qNFIGu1A4YRw^MJskqxDBFHW=jraTMhLWlmhaRWj zwnA%5+A=gRU#b|0p4LW6zRMssvBOoM~_-XKp5CE-ycuJ=W z1&x$KTh1|h1p#3o48@N^55-z`t{C%Fn_RvZ6H9PMq>!Vu5zum2#@hk0$VpPTAhy1L zQgb3&M#I$rd`zcuI(P4oR8!fep{YTq=@#+9adQ}0t>XkVDi2oxfzu-?2#Y-xJJzjj zZ1oEyx0WlZbR8x;XO1-HBe*h91(0mUtQm*no_+0JVLfCkxyZzu!6lFBTe}f=9MNf> zoH8=FZ>>(8d8H2ARmnaC=O#r?UiS4}W6bba%`7lS^_jxc)p9*FC*q?O9zB4|qsg># zVfQ-4?ymyFdvnIzp`xO26%F=%>W^y?^!-D)HwL9q+pt}Z zN)zJbnaB~d2XzYanH`GC7QCD7F!|-5U#3Qbjv>D3d&a@V#7@gJL^N_MadnfRU_}U_ z-!8?Hcn!d^;fvb*wX2Uc={Nd*s-Cswn2j!_8?%QLS^bD%O|!V{4%3!;gt>-{k)yIt z=5H-q*;|?I&@6GIbCsHa5zrdwMWOpa)OJ5Cgz{~|N2P>hoK5FL zG_%hhm1hO(zasI5SV1Cy@C1WSqjA1-`kunm>LZQNTZA2{j^Vz^s|tR|`y1fd%m zkUCe#HhO-})8d6l3u)q#IR0bJZmT7hm0>;i6YA?1aaB@Nva%u?FY|5W+ySA1>>%X;Z;9 z8bnRha-j^=so%cYk~MS59vKQ@8+yO#Z!TR+HlXl2-dsji)JPkX5!e&4J~__neVo(k zC&f15GXw^!Z>P_1b*yOtwArkZB$XpwgE^%`e!qOs_QzsFM+?T}LUzP1byGc4iV-3f zo0VIeAB2`2MSJHa+>ieN5VW?d7u6z)b)klJG*#bWB9l@DGBOqtsix}-b3LqgkjE4z zPFF0Zt4jXJ`Q$iN8L8_c2q0@jS!AAel5zzMYMUh#RCmb=3dZ5Tc&->gtHriL!;9{< zEmK|Vj>tTdRMhPxG5XU;E)iBgRe<#+X4_@yKzGRSuuoxeGQkkLDRf_iO5{d30C^t! z)MQAd49YD=<_m~pZXS{#S&@{6_(gdoXs=%Q8)Em*Ea>T|=z6xT1(&S4YNzSjeS#Qf za!W)_6__ga>5z-H!w8U(YPu9q!j}=Ly0z6BIc$VXeK`YsO17cRSw%h}O^?qkIYbWq zR$6dMW#z*blW>=sr>N?)ELQ4@f;Dn$&Qr55rhd;}{wFEVn#RsvEL6$|pS3GJO3z5q z{dx50rH`=5~|$ZKPc47YHx4OUIY| zEuzHS49!qpMsc{ekC80Z6`)lllgD$|zRpWpM8_e!gRAW_AyMZ1?ek`}KDl*$sNIjO zYC4qdcYS!wOBQX-SkRH+GuGjT0~|&zxOu$9=4UG`HB6jAh=g_vNeJCkeXpdBnKL0R z!cR4LeJIA!)j||l`~mBV5h-x$^iX3$n}i*EP#(h-O|35#-+_*hQ}=?WU^~?9geoM( z9pId=5{%rXlB0_96;L^JBp%)HgswJe6iF?Az9o=%Ulldn9GuXW$jq-u!C?UvKurZl zQQEuZT~(Io?+@tvnE0WW({59h;>yM20b@~0v8g-dnK>(ZmBU-3TXGStYV;cu+bqQ` zl_Jz+HxOG~lf=RdFTF_ypncWIPI3ojfB)0@MzlOiRnP2555f5F_-CPl=@GV!gA!RlfmL$*t zf;tcyzlK(Dp>&W-DFq6n#=pE^^j00gQV2LaE)_;uFV)V(a89T8 zx8H0uQDHx_lj{Gb+v4j?tyL{_>-j-gq4eWrCToh0Dyh5g^2nSgAr-YEw`5jo`bL>F>t!tZ zzP6Qulpckwr;I?csjCCn^v-wMF4%?$98uVw=IBRok_u^@EX0oX+EvMIT5ECp>1E^5 zd2PlavitPUJk)9qbHy#sd2)aOM*CG+Vzh$R*=+4>ihWQr)=(5~UB7FQ__yzv!Y21h zO!CIUevD~RM&e19J6I-vL0rn#r~9KPXYEow@>sPIdW-iLATnG>QnM7bs67a@zrX(O7j=koeHsC5}GVw_vq z+{l)G}# zH1jEKY3E4=k zd)A`4B%))U-CdkO!m0v|h~?Iv)xjl44N5*KSlm3DF)SC2LHi=2wD-uRuUY3Q8b%(7 zeL`E}C;Y04WKgwQe@aDYk^wAck`g%z9>7+(-6~fyqPrEjR^d<8|$a z>w0j@BM}{}PJS}%KfDXzo7THwfCfU?&6;ZG^lz2yVhhCTlY=V;0k}uHuND>D?r3wC z_P5+i*f?Burfs?gVQQ^ZTogPAVV|B9s9Ud zt{;dFzYRK;9yla#lMT>j&!8L}f0~C1K-aCs% z0$5b`A~Fdlz~l}N7W_GgFKY6ym~iUMIVF|W}P>v^cwT%=?kgKVqKIW7h zsC+XMGzBH%{l=rKT}^+eU6J*R$(fy-hUkN`qJGMahivY2`grLh;lK#{w)>nJWin$I4$c6l zFH!liK0Y~QeLS|dDm%4mD_^uR01iru;)0>ukEpZ_S{7rl6#4ZyRaC}>c$N5g@FX4n z9}WC)(zLB4K=2iHqK-m>hpjmE`f?>x7$t=dCji~j&x=H?_$A{h!9TVTa{kOxX-Rzeu*k%|T62q%$W5)F6BLR3}%)cHXe zJW*&xE7xPTdL%(~ilK-A)a-r~`y#zJ_oZ^^g+y}^m2oL=Odb@cGvV=jcw$W|tb9<+ z?DQ<58RI(<*W&BHz96b3^Ijn;;HVs!?kkO}YNZcBQBZjb_3MRE3o3%KgdYl?B}FNU zw4B<6zcc)&ED{u|qD~b@LJ8>9+K?AVMTI zY>&Kjz}LHrktBN>QjBs2?XoGtDm}(Tn^jJHhTKjfcDArhKz5~e$zOX3mn6y=w*i3f zwhIk*m}$52Sj@9q$dBBg zW;9=;EtbJ;Ni{I?7M2v5>BZwJ0)-v+>PA;-3$L}m^cRFct8X_5I8cs$q=86Yo1U0) z8B2&qn=l@QtXs95sWtG1<}?TNaqAbQ64g?T(5ApwJfpU8WEzv>5znEv=vBNvS#B86 zyV3qJD-GJDny?!hl5<(Z5y`!xc_NNf+mnOT5!Bbi0=r_Z5(S(->;n`V^xV^Iun-ke zJ22=y6nMdAW(0v4CY7l>cJa#9Fk5Bxy>ym2g45Lsc?x#>u~jLOu8$GpQBEX}O@%AJ z@TMxM8xkX!BeYX(3vh3Uj?1-j+Z3tYy``*<(rQTvXp(Ju!+Eq+ZF(mqpzb9iuQC`^@ zLK6Cp?5tBKi&?pGZ*5@mSuKn%(oGvMlHx(}7m-C)gQC;7T%HYnuTCo&_in&|%Dl7Y zo1IDGx4&z5gvB(kskbP76pvr&01%hOcoQ=8vmd zh;I2#maO13JMnI7wKv~896h_H)JKZzrsA4>IY*lm);xoMXKpS%c(33s#LaEVj4wiJ zRBuWQ*kjaU$UQP2HawnvCY>}5`^8`itw9vr{QJ`-IP!T2asB|DN{f{ zURF-l%Fs^JsY<+R%Thi7dX2WhYKLt?_A;&|UMjQ;97-0asqwA_an-J*sB4+1RFDx8 zi?ufTGBf0G#MLlcRzDAV=#H$cS!>f<7KAcs5?$)Tkyr`-o?_V0@ zN{RwSRU)fOaD_!1lYZGJvf#BvLvac{BVSQKB)>vfc>Cp?L0Ju^rl}&83W~}ZnKlYL zuf@0|?}Q!083(3o(BJEN4wI@_gDiHDdUtkF)0Gd|ZT|ohoUgT743m$ES0Bel*h~&@ zIF(w^KxdEChD9=}f>cNep&YlN4ZeBg4;I7i*~y8wt^G?&lSR@bv{Z>jl8NP2UNZ_3 zRziLt-Le@cMw`TTdFH2KG-(8-SU|kFQ|!kX=)`!Fl8n(wSpilc4SFxRuY9wb3qh5+ zux=6+P=cLEJ{VB4Wtkm;kJDu#oC8Lu%ikogQSxje4LD6T1T3a#g8=Jr>{t>%m5>3k z%I0ZBJj3%F@~_RGn0|K`wl?!OmtnNDhFgf`Lg4yzc1R?VW8cJdIgzK&!W*JP>KzZt znqHr4XJ(dgT-j*t6@`zjH6@8-Kv`i$Vd^`D9LIm4W+#a$b8U_mRpnha#@Albbj>xR zD`#*`)KNH*l!(vwvZ1G_g|{6-kz8d1M7QDuTLt{h^W6UcUzTk(P{l37MP+j%Rg2q= zi0&0lX;IfYpJ#g)^AY1CXJ4z-3!wRnQM!3vSDA}EuF^ctNoIB+v$c0DbJ2ggh#0yD zS60TSbuCVO!QQzY<-ED4gdk7E)Tp5QITNx~ppDz?it=Cw%$j1T*R}#Qb`^6_s(OM6 z=}P$I;{$54ILUPZO<2%;^1=X0%92=6mIQGW>S_fC-;~H%*$A?U6HF10!f6;LgO_n$ zwFmCQ6;3S(1(C-oLm*J6nPxo#pVyX5Dh}dF;y#a}$lVr{G!-=m-zuW0{SH{+7mx-K z`u>=1PFInu6F_=nMOd7dB55ura?IB=$tnTFg$#DBJ%$BZ7DM@aR8r*f2hhlN>xR5ejGMqAWD0J5ETQhH^~J=ePtb&ikcC#kilA= zNF)rBq83Hjkv%4Dqf&bN;;Y1ET8;LJ`$Naa6<%Xv!Amg=Xh`e#<&a8)D+5Zg9gB7Q z^6IoYn;L*BDO1xalvPu4vkH8&wNon8C2Cu;*J@&@lxXQiZbzwOvX5_`D&=+NNfa3* zs{vEUQ;6;`6n9y|JwS1ej zC6Zc$$KK{g9@hElD5Gej4zk3+5J^M*+7L|^w5>cd87`6&3JauC8s%O%B0JPKM+3Il zsuEhv3d|OC5%)DQi1e%VW>S>P>s@NNeUAfAR@`ezl(IL6@B^dWw z^!u_VO=p`ox6WWu_@Zwr9H~5a&IH?@lgNj;0;*Q*yar<3+*C8=E3yi6-z%r;HxLIuyDI>OH z0^B8rRG2GT2)l70nbqD>} zN7!@MB&l4}`kX?s3O?O7-yy`PWt9=?Iw&OaJ68cVs>+jyf+sm9M)>8AYEYktuS#T6 zo7qIMs3fTjNO#_=^2x?1PT_%Lp{mrc+mm2NdJ5O?%YagwLQ2usn=+x|BUJO>(zVl&1Oh13P<%idw!`eyZI8rxZmeqS;&Ue$6(ui3^3J7qV{;Lhprb;-Y zn;987F=tw~j~%O8&u^!TjW1O{>H1mtgjYRP;-=~X^*x5!=04Q+SLH#TE=PAG9Fg$a zM`p2F#-cqvm?anD=%%U$zr)SeuDpgps)Yk>4$f zSe~JzKA!O_s!7eHSixfDs7Dqef`HWgvhk1&n4WIX>~B+1jWr84OF5O~hmwUQ=}|{D zp%mO=a*9Ge_siC^D%{NnsWXOWi6k-fKLRnK-+sAQh^w@#h0`@Q(&K_#OG}+TU#qh2 zzM?-F9F6-mD^2N{m_VK~e9_hF9$mVFOO4F#lG>>rMi)Qc%prlnN5vckr(LbJ(<+ zSZVNxLz}6bxXa6LJxL1}ZNcaVj$OjVEoJOf)|Bayn4pCzE$IoDkVRv_F+KAhO2{-w zOwS_68j)oe)@~(XMMP3JXFmw!XrjH&5U*U)?mV5WS=;GPV7ff=4@%nhWfC*GuO@#{ zNEAW2ECyT+1iaT+(dN?TPF0rLT6$NJgXzC2fSK6(-E^i|QH=`>r6pZc-ejsvOaaWzI5TO|I z;uHb^A7yFKQz=7rR{;!ss&))Et}6ck|JM18x^b4?TaqaeotvAVfg%Q-4^8%|&rRkx zbc|n6f?GC#00Aba;-||nGIK~=YY--WXpEtcGf#x{aJ@xx@F*sc5XhkN zA$Q=hHyVZew;3#E`Jq-t__?VF6j6us0!a8*dQ-h|nWM54-55tzW|o^S{{RyK;q8(I zQBh3vjha7Cg+iZx<0PrX1sQo%JO2P6+Mhb&6*H2^CA@b~nQjzuGD`r9Ky<&sRx!zU z6)jW0a5CXRDPzaQxKM(Ej2P6{?in#9LGC#g-kmY9RbrD)BsSk^&q0(@7xCr+JgZt# zn^0p)t-zF1Mq=BMOle%AUMG}ASGLvtSfy~FHRtir{2c(r1zw_nvjzJ#U%X>DDN53rL2tqcVmyN>cAvnSR;IP-hA|gqRyEQ_5JMtL zLIxqKz=N<}+v6;P)pW$rmQ-gd7^`j$^#pvf@kT0>O+2FY7AkRAK`Ow~tn@U@GaD+b zj5a*O71&VJR<%7wWQz+*>u_7tXId>uEE|^IwwPcNebo(p`QVoC1V6?Qdorx9h zPD0qN56R6<6k}^jZWWvPtMHGR#?pb*3rB3v0ON57?_pupo-zm@jz&@7^>_14OPGC$ zzNsZ6nP@0>1P(OLTetfs9!U7uqgA=) z>@@j-^vkQp{M)7-8&|woqiF2)1ygD2H^&i)xXls(DO!)X=MRp!h?3<5A5SJFJT7In zc^`yRAdwXZ#k|QN*DY4&+0Z*8&Dy-zgJcy!%lFBJfnAC5Am73^4-YQ;d5!)E-)R-Dn zAKn(HE?d`bhM5u=5xXsPjEKyQ&RG!;mGEbC<(-P_wJ{o0OV zGz5LA0iaM#YnAZVCMF9nuAVI(>(z`z;Bb!ng(=Kbs<{+3{hADqqlgOid&>zBM(>*Z z@TnHCC5hFZ^4cbvG&M2GiUi9iP08Oqhe9}X@b@?eo6jVaNLYHb2XMglIhDjvhLhBx z;65I#-z<$PnuTJ;lb9l^pjY)^R8$Amb}>fnDvz=%rFne%{Ib9mI90{naDI^WL z?UssE@nB^O>4cA%_*8eNPQxucl`@VSkddNtiCcMO5ve7=lrvNhrz_oQMqUdni0t<* zF772_0OQ(%gYd|eN+wWTx~yU(`%Ht5{f5{rP>QYgniXQ(g*yiKC)i@G$vjboV<#6< zLZbbpT79F)QimfVLZnw$Z9MVvotadcp>hJMDJew@x|7?jau!ue83_@s2mp{lCy@a4 zBPJC&hDtf_L-u@f;8l@W-4(cipai3<9$Nr?ve8C7JrX8<@#w z1h?!8RWoN6J zO-93|f$g|{j<~oggz^ zHO5i0)}L8jJK9NVjHV$X$f&jWcB1vB{{3(WDpzsCoX^Rby*1tzrB1z_w#8OHLBIFClLDVvVLE}#x%ECBeLO^;1FtoZndXAlNAM}XzZuHxQ zFv=rpQb0b-j?6Y?J&r`vCPQzoUU_21SW-Eyul0LoRI^zYNJ->Bc~v}lfI5@5R7sN| zGC43QE@d{T(#W!06CCqEzr6j^o-EA7o=nBNZJE8BnBdevo~5fO;^y=J05IK0aXI?B zg^UBm0|ugvhd?RQrh66~wZk$jI_!YQlLVP+U+o>oZ|RrHSGq!hv{tdbyfZO2r4=Ji zJNl-ITag^9f0r?*GfJmJG;rB1uQLgG5n@8jz|bfvJPmgz5;j%H(^;AAWc|pU6iXRk z3z+5Rs7TtR(_@f{RN~5aSzc!ZdQrMaz;Ws-=mZ5{hT7lt~VjC$-FFdbxr`&onp;99<`h&WHHs9xyF$I7uUP!=jtxy}_;;qJ%HRNeQ z?Uj%NHCss{f&F=$+i)k0)e0(p$OQei?Y=W8O*C71F0}=n;5;pWmQ-=b0H&c>*LEi> zjBlD$e9Sb4_qipop?j0k}yu%8|e-spSiXYyhy$Kxt zT?Sy}2Z73)Fba#+C#M=X&~Hy#TcF+5>b zAo198G~cgWaso;g!ku9wl#y`Vw>}$9`ENpkG=1BlX^^_o? zs%}djgdWr#va=GZX4p95VgZRYkeU%QN1LIRHJx*$1`&x0cO=uTx)Q%Gv!hP*an2Iu^s z2fjja?pCCMU)7KX1*jEN(xi8x+abbL1xY~x_W-c%w@PFPLrw)p2M9lC9{3eW`7aO- z#=fI?P;H8+vE+)5YsiKJ-kXd^tQekM7BV+o8E56snXWv$s>`BG)YCONeQQ}OPey8j zKx4Sv0z5LkEJ2L1&RaAI;s^)$mwsGyxAf(DcTvH}b- zTL20MG-|p1uWW%sCbiS8^?fqsEa8$3LK=EWDX*y#eW31s62xFsj@HfPzPPcKcua}= z=VnrWcezlI^$s&$f`Wk`-{o%EYs@q!D|S1PhCd4@fb%o;tRgWl-pe(Ot(<0o*TtmUVrF*q$~|6Ck19>$4MkK7G8B zd9Ek8X&P&p{yAoC%bx6f5Bc;1JFXrNNaQ&*6qVIU2+BhW@)&IjE&|tq!wN9=70C@bQ;H@eO zmmd%VdJl1zLe)1WG)T+L41u_|!PqHNxj%PIwvv}z-Nuc}gS6tRQiE@qZStAK+7jb1 zC0&mXM176;RQTm|sbsP+F&A1!yoaRAO4s&)JMDo|tBE~oKP8f9P^H|}7l{N^WF%Dw z&F14*5=R-9fmetn*b>z7BVmGys>F(f1O|t#a$!>#&%`KcOqnX2+6kPUt4-hLr9ft|wO0U_H&N$_TSV-;1lJIz_#PW@YZL+w;w}L5a z$#zm60wqTX46^{Nd2UTQwMN-+#!p7NwJBzD&u?yt)mvY+3eJG3)NEkiadU2ouzA@drD@ucjzO3TOEf(Tudt?S- zDGFgFnuU!5u|Ex8+bSl_C5q{@E~ORqlitZK-j988W>HTSL=3g|-&wc@qDmc@1NKgO zhqJw>EmoV=7Y8t6bK8VyiD6mO)B>iV38hUub9iJLxg^uum1uw~BF2m(M=C^qrBzCD z+>&y+*dDyqH2 zvdZxw*clHdrF<)x(IoB_9Tm$*7ZN#DIEL-SC?AQ-4UtI+zK?e#6D=4apdncEUPGq; z06fXXuu>l9Y}!V>q}}SyobDDGezMXzq!LDyD7?B3;AF|6y8sKp?~F2DNU*;!)G-D4 zm<}L-XOP1}68W@772K8=YQp&{9V&}C%J2QLz8}-OXb}H64B`1I0kqRwklp>A>U28OCS_3w(TI$i$&sWO;MGJ(aAngA4U$R3{9s+hFk8YYdJSbi0b zLTDLCrrQ&WrtKR>C6IhP*Lng4NvZg0+Z91HoRBjxW6&x1LHavlts^o4K%iE<0mV@d zM;y6sKm-G}*sEa1peSw6Y#~-sGRM?kP%54&UL%p{eek6k78X4fNc%wmUGl*_m9o&+ zpD|vXoYSw+a7tDca8Xuvb=`>qg?=9Y02n9rWEEa9B#pX+jBn~A1{Ceqm@bMHmP#Hx z0Uek%Tj>L!%S5(H8Qz?O0;aonuib$Ob=6EqjR_M^c&`&({$noVO0 zlq4?=ldhsbC*gw#5LFKdSKgcgIP3F7E{EK~c6}{#5(E6?+NiNYp zaVkAFk=b}q5n9tZzi6}{oYEYJ>yIZdN0)jmgYyUS)asYbc@3nt8q5rmUg+C9WqQlb+!nREM@9H^@_QdNN+xRO1x zRtrbv%gprXQSKhv{{T*C85ls&PFfPLP+3S}LR4=;Yu}~`HA|DxZgkrOwvk>XF-0Jj zj@sygD9OQ-3OYWE(ky}3(y zmF0#b$DgPLPsR?zl__4>uo2xlx6@ZmzPY)8Ey=lGSTtx02{_S)`|Z6qz*|7119@Cc zcyHe7SkdkeqU;lycH(G3>rUj-z8DgmrGiUx$ex_G_GQVHeh>&^1#3Vm#N|?!>W@Di z*;5la;FOb%SJOR|iUWX4bcA-Gk~O4kSOtdIDg`B3xVIJnf-694lS&frPLbf6(lHcr zObNDf^ll|U5xWw1=eZsjj%+`PjBEOg+Hd=hirsxUk=|)48aWA}-iCx8R2j7FT^w^{ z-LE!Ec&4E%%{iJzX>x#!HR>8DJ2eoa%mL$aa5}@H6)Jo$<7-B z)oEPOJGf~1G;$VxN2#vV9>XERs8EavdV3ho$L`1_q0&GUD354?UO?Bad)MWJAr%9J zF~-t`S2Tt?QMq>%?N5A?rtl756IH@D#GOS(-8*FBsl}{`>cbNS3cxe4Jb~Y#C%@B~ z5lUtCXKzweh$@QnkQy@7`{i$h6ACbUPg-GK@PeDk!q9|AiZS9GujD@96-vxUNgpIR^rbB2>n3ivKI@ra{ zU0Kh^D@ZpIEq=*ggg1s&)hs60L%7i|Jjo1J^FwC$$$w>XtMIf>67n35?rJkDQf(jt+9?6=5Vsx^0y229aXAGVk@EX|hIaXR_3+Xzc{RtZ{|{ zJ~64FAkw>c&pzzF+{>udoPWb^MDfsg{mC)NL0T%*Z|~PTsl-M^4o*03Fw`N42@v85 z{%;Heno)6ajd+mU$gGYx0Z)M)_RNTqMfoz*oije z3l(6%_;K8RIII8B`8N%yW9mQHQcSFhT7`NoE4_2j;T|4Nkrg8^5X&d1q1Zcg+MPOV za#FIWxV;eJ%crCQ4^NLBjcZowPT44hM5V$s04d;9JIv1;3IWl5>ysvxI#{iqE^)iO z%*00vfl#OgO;)=T(;{U`tRCx642d9!OzY~#uF;`WLPbH^w89OmCw*&4x=Cd)$ql5= z4aKX1@+72jQ&c;rde;dcDvDd$iT!(4Yp1WPHN=g~s_rPL4R_)wPt%VOR87UruCo(B zU>4v>Sk$#@c!N_)0qug-hiY1K$4L?}LpL9U9)N645LGXUS~2i)UPI#OYxm(*Xx;wG znGYVURAg;YL5nylrN|WlfB>IzI%J|%Q*Ssbt?&rPfDcDQxNht*H2PLZYSdK3AZ%RXUUTSt+NsMJ&hys(zwKN#+< z=}6pw3bA52b=x@((9<0aabGuKhH=OrG`*d&cFh-z z7Zb-FBZ}b%!1Oe3pbV~AVtF{z)6>aZYaU-|H2r$X?e7Uvmkv*%aU7gU^yQQUb)f(e zLMgua3vlHF6}MhqXk+^H5WJ9r9EinXyJ}0+qjJ6DKb(b1)vcVnw zq|*p2W;apWfR89{C5ovhed$wP`M>sF5;-7GX>-AHQHb|4T)rE>XtfE~&OAsBOW%nAjfZIm6AE0qgSlS%`~jkouv zR%1$lwy5D70!>e-+mJjDT&$W@%v-M!%qPYuUbP=b?F^VUsnw)GvNKM;%#{k~az4V6c|!@!FXRE)9vT$HG8s=S3d*DX}Gd0ptGno8H<>+ug0 z(t`m?Uh3^AuO%p_?SRSw{jI57qDV_Gm^nhIRy9D48n7(X>RG!J;4-o;Qn?XOahxhh zPwvQ~g&nKHmHJLrMHNDjtXJY9hJ>*KzaxZ7l@f@cDFbtsDyRdJl1&CXBr;tsl#jH2 zA_yM&Ja;3r89zY(050@P8!ySL%fW1t-)p+ewqIOkA~urV-Wg(EN(oSgLQPNF13do# z+l@&Y%u%mMh`)Qf?7Tq0%c@wuR@JZVWz;2}=KLXMmzjAv9yLCnQB@IC3oT~K%u6^4*nbEv6~(gwCJ{?NiJOgotZ~M!_*xrhMx}q z0BgrA;z$&QxwNsy(~O&`l6nyyv$j_p=D<^HKhjC%H@;;U0TfqlwC@)+fMMf zv$i2FZl_=(SCAHNKg>7S9lUFq+HT9wsoEoB&8*L6BdRlM7mvb8BvuR|mRBqS16ur# zYG7hKJhVPJBg_=w40I?kpDm`2BI`Y9jJ6M<2N>xy-)V?TGe%lw_fNk&76S zXV7WCqx8k)3fU}fSJNQXPM%qGM6~A{)kw;E7-ln+{QjKX+ z;pDfB`i$WEn-&Uyh2ZVu?Sd+jUU63tMko_yVbZ_LmXTp845TcIcu|0(mITlWjkYxU zGKmB>BXG3`n{`wk9{8%WN5xc-U(_GngH65tu~+}n`COt&5TKXT2ug8t@YHo7N9)f@ z;dF?QLlqBhSk!u4fI@0$PacGOoQ%aP!yt`L zrCNjRjrt5Hnxf)+h>$FSnnO>D5CBy1J?MtliM#i zt(xkD?`_&3+8;wDyQ(ebgAy?ACqpU!qmgJ_j3OkB;WR(Ew zQ=7*rD58jpwL|_;KfvU;RcL0dN5Mf>RvtT4W5Y_X_9%|j1MLCV6rvI&Jlz8V3i?2r zf_v8%JWBDP08qCeYsF7Od@GG8Hn>6_s-u~1psMYQCrEuDgs&p!)AYclJJjN+c7ykX z)FG(kDbl?H_+qPHmg`H!0}cAqeKK4SDQ#U{6jv5s@ZlJVTYKh3@)O{&A1a z+TDkr^#1@YUEeW@E^X{CZH){%jg9O2O0uifNLFx5bs4Dbtv(%A5@a_3xtd(&1PAG_ zl{}MquiNVnr)d|rnx=$ilHyBecVi1i>g=m4g{TYmKs)D_j7Bd&WDDf~0L;A}*YsAY zb$5QZR=Q+g=~i;8nAO>78a!lGT0f8Q#>;WGUsp(GHM7gB_ zETTDMRGKz^JY_7U&%`#|3T=|c4-i7>6D1* zTukS8i0jX(-fBA4#m}iclgTNa)chWTGKkaRrzKJCom5&F+eX4hL&_#b9<5fLdQ^24 z?UvrjLER1{0HsdgDXn_@@07_2CDQ_206;BCW9Y$$YGh=nNRY2N8Ic>Xa7g-Tlu1!g zOzgBImIIT~4Jf^7lZvCQu6W51Nm19Tp%id^hlWflc^%Kz1g+20Rvc)=9z=B@^{0kg z6H1xc`a)5~zj(kDW*dg_sq0ab<4U#Tg>bP(WMt$(p!iR62UC)}3ddz|O$z|0z-?Tn zNJ{1)tGPiOW~z(Eq#twdkyIZe8r4TZ`^0h-ALEdcq3WiG(q*SbJ5%V$rCDF#RX=N` zMp}eY!#R{k>9~4UgLVVNVG!a-dIp8%d$(&@ZzL8FTob?@2c)7;w*LSs zJk4)sZk|!SoUVs{=6gjUTt$4bh2q5ao;3?j%&L3mE$xqF44PA@8<1Sx7OR4Bk9*ei zopK*7Ll4%Xy`M{yliWvY$phRk2Bd!)I7;*+3iuFn%1AKbzM<%KLWl#a&g2(fVbt#~ zBhrSSrSf9{AH4KX07PM%;(B*GQ2W;|jH$-pM_uTbAHNa9&N*Xg7J6~m5EVc*+;z)% z&|=0$k$TGJ_f3u){!&LDplY)zKWGD9-9|iZCMhk>i7l1PDz?6q*JehxwUv0Y#(;97 z9fH(SzButCg$&C!rFCp$h({<41-B!_#H&&(T7JpfE`hMfK`HZmHWu1WpEbUv^|#cn zXx1?y1t^Tsfy?13T#TBeX@px?OK|@HTAu7jrCP!n;c-G___;F_tC*2> z(#XYi-9{_hhLluA7y`~9NeF}6pgHM!eH?VL0xc5Aku1D_ddFe{BUfNatxjd+l;kKD zm>Vxs^5x~ty{gVR5d`rnB7n!zlViXgg-?cZ{@h~6lS2{K-0shh6pJd?Icau!n_fA0 z2{Wb3H!=v?K1%xo+dRU2G2w{rcDWA-e6{AQw+$7nk`|nExxAK7iHwq}fCV-ibk9uo zV@x56&d!@DxiH{_>;dFX!0$}x%SlGt#`2+=!7+SYY6ro#=eM>fWtye-o1@ujR~8YI zsA_hNBgHb6ngTum^-t#LFxnXPwahW`Eg-gN!z>6sB@M@5!*2C8$dZuAp4C!oc_F=u z>K0Kf(xSHjNTm-w!wh#yq-v3`)!Fd>nFELinE z{{SP3zyH(uYWGHI7I{iD58Xyl1p=U|?YCU?o+n7Ct-(PDliX97Uy7kYtx2s01G=d* zFa=UR2=uK@YCp;F$ndJQQid{{kFZfqJ&E~bfTdqI7ZP%lk%*3Kza|H8R^btpcE^sr(PqlT~zb;~0qQD_3P(fJ;XwWwk2b0Q=aT+!Ev zlWu!E{IXOMiHtWC0!1P-L0yGDj<^^VbR(Ez{yyJ^At6)(OE&yKsU!O2WXVqEc-3R! zEN?1og1es)n8rS&AmW%!D}<7#{n-~n56I=hTT+$e#zxfT-1}r$p_(-ym8E}}<&a22 z@MQR&jt}zflS=gp0Sds7H(KxaWH{2Is9LK)#c0Ke=~L4IohrD9lQjbnQ;|X94#Z&b z5a~!lz)Hx)PZ|(6rr3De%y&~k5gnKyt2e)VOw$sKC-;E zv4$&$w;_y`KB)kR!k>vpP)h(7yAy=u*;t*-w;rsLNmjX#^Oji!Nps>l3VUWfSyTf= zWJ2y}Rn)T+UCF8XGJFA1*0%CXCn8ls4s$#70MxC1fr4V8OI==<{{T4u0B?1vet7AS zLsTIwjLwU)qFe{&2K^Ks*{bbX@L@jV_c@w>Q6Bf}4x$aNy>)Y_sOoHBN z4MbvIU+&~mND2pTndJFitYQ@Tlk>%%*UI4~`Z-J7go5cW|(RGqU5s9e0Xca)lt5y`eDr0fSw zx-vaYd97Mcb*n+A!5d0aNWRIKmIxis!^BXt)BK&YCOSO11;BB!G!b?xw^z}_`XzlL zEA^-NK>$>kz^xbNGiTYIiJK--ERf-8o3mgVKsqswtS^M6u8!b#bSJA=}!O+fYoER;}(mgVZ-TDYC}8#8kN z3VT%UHp*(1F1wVIB1Groeq{ALzGk!^ELAI+h*nU%O$!pcRll01q}SgoDui(F@FC{G8=iPZc6G&;lr>MVL{i!Dx6hPS#C`#=@RoKfJ}^g5J?It^2tC@ zRK7zauO*I+85H25LGa=?IWJ^VHA*UAhx-=S;VuM4a(6bc96TR2FeLE6t7{HL6hD*jj7EfZ4(A#8gq_H z{9M86Di7+*4k4Z<1+O9XMqSUn^i{F*KjmGfwwAXL&24jWZLiMB$|s&KC7Rrdo&+$U z72~)y>O4!@JRg?UcwPIwW}iH>Ko^@uCG}NckVOOv7F#|g3n@ESU`>6qTdI`++frt~ zqxjjx;!_VG8KQoqR+L`@m6_Q=fhq}X)~y8EckW)@>lCg-s>puH2Xn}t{jx$WCL6Fn zGhFI78m*j{mowg7+rcHO$n-Jj@?X{OlSh^qJIrOjn4e9WBxaP5r|okqPop_)4il)HWAStKl@V`}wX3Nw zF6O;Fk~^shjus%g3hWI%v)DA)L@`8pIw?xZU2f4dgmYOapAaO`ed;qHgcSYtNz+VC zI5PcD)DlO@RJr;`U#9_9Eb=hAl1GfNV@E*SFJJ*ZmGOi(nPHD#zHCd!&JH&j)T2xY+o~#tUs7LJ;v=}&Y(D&gq3#keJ_4phJWKxo zct{;~Gy@fACnn?vz-hth$MCKy{{a8g`9BjdRaF#_g;wyQ*J1CzdMl(y#^E`bcL9D4 z>s11jKPu#*%~hja_!1bD97`Gj-)^~LsXf5t6!L;IUQ&L@r-|$MU?EkR5?*YM2OwB+ zsahS*^seWo*<6aN*@i_)QUsD^6#CKlpVR%MsbB}SM)@eJX+E7jt3wpfN+hSNEQ9uy zg-5~wP)B<2lT^9lF@qTWlgNYE9;TzewoFA=FT+ZL!>H|(wp(|iVgW@`s5_d}@AJvT zu_&dAE~o;rV8!>TKKtc!#l_VYs-f#m=tVfzoA`{6gE&nwl(M@nRAT5qfKCcMBkUI=)T)B(tXO?IU*6X{CjLh+AF znUxJ>m6Q}vd^%8%4e~_ns*aS5uhx=ll6a8v?4p$>iURcU$l9rTwyu+xo7R!aOAKf^ zq=iTW)Zx&l+Fn^5$y5`qc@>wMPR^?{^kRmM$K~UeaP4ZnZ0KTU97PF{>B&m>J06t$ zax{C@Qh9CAMHE1ysxX$~MPLaDMXBk~Y%!L>kla((zvmYgc)vI9wP+#rjfbKpGPMX# ztGETY)_@ipW{0r!%bz7D$NFNJGrCW~sa;{FP(`#f&4=lO7 zD&{&LP6~x(`$2gY`&~$>+?);!eI;eNxF^$;GpvjyF;Fo=!j)DP*!=MZ*&|9M5%YrQ{ZbHQ4YKrx0oRNj4dijFy)wr^2mbkcvA@#Lo9KtaaS{ibxJ+OFeNu-`#TZQ9W z+DRl+S@NqOsAg)>B-`QX;BryMdX1DDYf7@$e8qpLM|Y^aI(3`J9mUn7DjBAXhY^Y> z2d?CF&XckG4m#ot{*J8~GjQ!pk5r#X^8AAC(%BBRbT}-MlJb@4UD(#16%?*_dMySW z7~#hk7IQLTx`w-}O&pQ6+p5Sou#Jd2_!G4acNw;8Z;_Y z04YO3KutP$W;{(D_hyy5g20pUnsTQ7e-FndW(pFiix!Y81HC#|DVYkFI^^=O8w!DuWMm~tB?rWL0hJOJu?kUGA|p4)EV3gNAZ=21A9hBS8jHq;KS1(Q(RWObvkVMf%>M&x{OvHi5xFpl3g$@uEH@AgiQR^7tR&(ivB0Z^1sYAD1wk1(U z;y7bfM3(3QxKYfOs5LCquS|iS^r%ToOrY>85E`kVJMY^rjyL$0C{KXfD&X@}3tBfJ>LSUxFDEWkuJmEw4+6HlP$*Z}lA?+53iluZ zk{c>{qowNIq?S>%@h$Mr6F1Hd-DLn73-3 ztGTWmjH4QP-Mot$f`IU-E3g#@dj0qWsgu><>;fLGvXSOcC*?d}tUS~4BSFPqo)B!R`@ zRi1b5OzfhcP;1p`4DF^oO$=^=DOM>y$SXlm5597m+ae@8KTXp))1X_uGHH=kdEj&F z#@n|}2Apa7AFTfXqjHT@D+Dg8#(`N4Iu57bGw{!dI5|eo3)XJ67QVQ* zVyP@e1IxSeGEs?F8}0JUxVU7Hl0ISkB6?`G2wvnLYJ;6YQe)PJMB~9?~t`vmqs|*Vp<|poww;0)Y` zl^ih&$lC$X^`&w*x}%2&3ni%x%}z=HG1vBsas&;s&AZhT9Sg+q$x@0`NW7LY5c?z^ zgqoh1K~%-#D4QXLO&(5EIMpk@8-VD;}rY zELNF_qgJ&Bhv$h^NaXblaRKhk+jIkv1wh+;qDqUkkbxPYPgHCT8l1M|ds8fmrx5BB zD=FfvKnM}!D_HqasKa{g-zKSz%(gQWcopNSD>tYBR%RxEQn_?hCYB(r&7=yhYe)D> zpXHzj0z5L>0mL3vt#|E{ia2RpG3#8Cu1Plpl1Muqw817z#}}_BpeJ_f+y2nZaurZ7 zAi+R$(x+{_etBeKsDT+q;-;18dTsK{3Q+(^qD{$0QW{P}@Evl3Ee=u5>d=Kq%{qnb zI#cn%z*SN+6mr%zkv&63VATej_wdUApsr)hlZ!A@UPuiAuT#s%D<%B_+dtn0AP5oP^Bs+SI@QD}gZQ_1eE)`s` zvI8Vi`ejcA00ty=t#_q-a13Z(W%Q7*6_!V%D=@7o)|p|)vZ0yBSrvbJ#IkHg{dUOs zYO+@{p$tnQ+MR$?wFgev_;jjazBDZxJ8@&geU2<@ReTBe%FfERS&IJvqc|@Nd|ov> z?nl}AWK|5aNfQGjaaCdJh9vwX(|=)H1u*)bRQ~|ZA?T4Z`K!&>aLFv!LH?l-6j3`r zrS`U`?$Fck&PUpu{vI$LuVupKUsvirXP(MeWROL2AT~!)xn?meZiJU~Jc}<5RN}QP zHlWS|4)=>^&t7?y>fV3UZ3XOJVOUl>JwEo%*dz|r0_s?hJf9hpk!K7+HRDQCEt9Ix zxng=|oyzw0q*~i6806qV43(&_i0wg~5z%Qbpp^dA^as#ORa7BVf z$#HUKwUWu!FgZeG=)R%r#B~IY`Eo)Y-%V>Phnt*_bvhX4o1z*T><>y)77|LYY+$)E zO0uK6^O4z|l#|nm;p5ogCnizB9*tnL4=+b?qv%&3qzc+7b~b3#CxBmtO+H_KdUvvz zr;ke^Cl4&WPbk#&dx@@Id0*F-WjmkQLD5up&Efi(C6B7dBx)8z6qEs%i7bEBreD#J zW4CSl=^j34k}{80MOBfWo2?B`U!y3OG@zn}Nl}?&#TAL)_cC`3V~-rW-w zx~Nq6k%;0CbMZF+0Dcb$l~I>KzH2ji7>%KlLa2(%BkX8NRiPrj82Ck4^!Afm%^;aV zxaeF^f2um~knl>ar#RS%$|yCdZ-}4rLBwMrQ4!k)8@CToR#ya)2XBNf=MM^|$S8R` z65MuDTX4NA;gbaeGH>zdo}QTaN!_^(hmKPuERh8U)o^~^K~QZOZa|Yp*@b%I ztL^Mvn}jhd2?YS~KP*)~zSJbqV2Z-f1fFrqOQ5E)qo^b<`w~wb@>4tt#UzpCnI*Y* zl4s;eW-M2>)jJd40F|n$$jk}lK(wG8P873WEl)gGP~1XVCyeq|CYz3#Zk!N!yPC{x z_WuCo51!k}T8#HPgy-}}n5@mVuBZzLik?tN%R|XQVy;H?HSL-YYWo}cOG-%Q2tOxj z*?pii*{t%SK5uKZw|!Y}lFs@V^)#1_wc@pH<$^F7U)4L4AU_D{N*wX|%tV|=n0kyc zGd?FpX>RT`*x~goX0;LkC1O?5L_#XSuEK_+txjNpZf;5Oiw`N*yu+(q-dyR6Ab8=P zPfGDC%&Fa~dS=T2^p{zabiVF5r~T~nlQ{u-C)qs!BoCD~%cCb2QDGXWv$$E{S;R5Q z8|xQ4pi&J>7ACt9mjgQVxVZ%vo9g$GL-kKeWt2C@Wfk~B9hrG``R85ij+S|H5_&qF zT@awsvn)>c&#|Y<|S3}%_?Z3rNs*=rmR7n&O5y5wAlhmEQ%`4-U9yyLo2r(>z>hj*^Cbc%|OM)hT zBoBy#@GW;Dm<%jcHh^l&%k|qB>~5Og89h{B8aF#P$mKGPDoU}xAQ=lE5l_Pcs<=f{ zv7;KQkwSgGoClJjf}4qzLGdD3g;$=hul(;NwyA~h;Ul0yMiBa~vq@uf01YSabDy#QyCw8FeQ$B9&fkgT!sUFt{d)4$6eB(99WNj$l@8>;pPrF;euLZcN( zHQ4eLXH!vA)}J6UTuQ1rox`!F-7(@;&^3KdbR+EI3b(0W~_8>MSI@mi30{{VKYwKn(fg;aG zlTon;PRTVY}M#tC@?SYCKO^Z>~NT+|E6oe?Ol2>K^O7>pW_r)un z0OC4UrkJXkc^8n4_%R<8o&M~MhRTLMqS231NP6@pokmcUHPaDeb0Lt1^yF_&n>bZH zPEnuuee7iWQ~q((L2c#BSW@Hw_To#MR^+wdIU%P)YI|o7?T7f(M@n}cn)R!J`c}(U zXdsg7SeH~0-NNt!7Si6-MLdfs+Au?s6!qKzUGtRTcG(_jKBaMG1gYhf!C5%xDs2w*a<%>k5 zkX<yiWHGxG_)HT?j1D#*9 z-HSa|PaNzyxcQ|+hq;D%ht1;k9@5Us(ug-Bbu+TF5J;$19|)n(O2?388w%j=*~AYs zl4ZG;N08OnQiGtT-FoEgGD89qtVcc@1?|26?gzvMNUsSCSLXj%)AJrE(lf zS?-eFUY^&}emrAPC3FP|BD*v7ugGMhCaNl$(9rJSMuzDvXNE9`Z-QPRZoEF#e180y zEZ`VTqeE+Ur23;%1iWq2B6sK&k`KaXW3?WfrMo+aPGTgNau{XuzJmO>-JjvXu*hk}C09w|{SA@0l?ARV;Ae7LI{~1qwTZ)|m;a z8_<}t@Fkhg!YWSnpxT*AwH3X?%JGF(l8skm#TSO`S&qOART~x32;i~Pt^He>WeS(9 z)RI;`ql>r%>`z>_DznTJTg!TjYXZk5oFd;=x>6WTb@q)-Xn5C&BWjGOs~=j?Kp~s< zerK(4T`HjhGC|_>ASqL@Bd|TjSs5!W((Y9RY{atzQiG@aS&2V z`!k0x5Ebrv?$6fLI9aTIWlciFJhD$Z+av4dI?UN9JeK>+7kY%1k?q(> zyh22Ta9+rb(t|x)OQRY%3Uvh8MWn(zJEQe!t^+5=A|L>~KtsPM98F6W*{k?wNjxH$ zMdFc_8xVOm?4rCydU3C|V@G0JQwwAUR3wuSJH`CRG9x8=zMrR*w7094IhNkx+E$t}#zV=StIDItD`tm{ zIJAv8RgDz0%uPrDY!!RgB4tXgJDHW9J8w;ZE}{69pak!~dSqoQ3cA_|QrYEefEChF zECRey1poz)QN2eU@QzB8T}l3xaUHlQ!J=Mr0HE+z3$WgU-!b?s+N(!x8oQaC$+Cd% z4FC!^r_q@)00m6_UVIT)s(!)Z3jjNTwE@DYkA_}VVvI#ZYt#9YnLtJIz7HyI$tN!)&ri;LHkU>67C0gq~q=Q5Ilxq>*E=VIilFT@7aI}%4@+ZBKR z*ZDbac%*Gm7@*i!V_uo*VbUU;4@}EYS--psJs{Ee1lgG*Vb~ui3A*Dz@2~I7Xq>Nag@MQ-MAo+l?U}<|b7NrA0|zJAys( z$c>dvS~TPseZAGHR9C}dEA-(ii9mP(yMLAaxfqpIgb>G$?wuC9S1l5yMIe>9n$e3= zgRM`ora+ri$~!p`7HK2&RFVm09QNzG5O?<&tEOl;a*7sr0JjpfMI8p?V~ABK&(-6PE7Pu6s768@da(t1_?jFRmCG4w%B7Qu;T1X-J^cf$JV2l|@UG)= z*o;O%O(j?%dXfup_=P>a`cQYt8B(auEtTD)l38Nn3QAQ}F=0>wIV61Y2Ov8t6O4?J zpGBcXp^=_WWSUUW4wwuLB@1)s1P+VgrFd zY6CSYPi)zCKV;_AX9jd5=GQ!+a$}xl^EHm24BAXliCF@)v|uCTe_^)Xo#~#X;m1!H z!w%KW!6cay@f+<mD2m|tsTyAd1QTSuVlr*kLuQGSs zR==PP0jONx2X!p2$kF~ILd-UR-Y9P zJOx(z41GoQRh#UXnANu2(1Ft@2+>qxrye}zAqb#gyny;nPL`1>P!bqabPj00tc)f* zAco{wfh}*ysv)f_vktvHGZuCcNI1fzlH4#w;LXB7OA=dpg2a(umRAT8Z7Z5po11ba zpQ?o>ldSFxx+NHt1ZBx^MuH}=Q7ThYa#sw4+ z#cM&-lh@lOBm$)EQb_cEtgOYv0P+jWmZ3fJ3bZ_d_zD61!>&d^m0v>4q>*2L3?jm& zP+dGmn*ur>)XPNaHW?0=tjlRE5+sFKGM$fb)!Mx>ekGzY1ipvRywMfLpLuYxGs`Wk z(9LF~ywNcDgrKb}&!%&}(&?qB$LJPYw3&ov%_Z|g&ok-|W|y~fgl3F>@)-(_0zzXo zSE#KTgE%Z5hposxIHY{t=1p7y>W7!jch3-p>&nV4p@gDb32pd0)})22GW(O6W7(Z` z?~H-oc@KMyF42cA-e<3VU}^Sn7~{N->ri-^Q%}adE98bKOUYG2JS4TNJeRP!stlS zPa43Wkfd@Xk72m3Y$IptYKW#otm}66x+Kvm7@N{)<74)DGV!9R-@aq&CAuRL9xDTJ zi4=oC6b&>e{^Z`SL5uv)G#55HfgdCP3 zx*G4e@fjsmjBEfKd+bR)h8k2!K*T+(roTuE7DPBF%%NLrqX zpqg#p2naE>-qP|Ujv&r?M#{d8OK!)afnELcDN*XPT}vUj0Tcc`qCv=&1d`47(;#L7 zzyHwrPKi?GX~C2-uW-j|eHrON(k}Fm5JdoBYxBg5R4^(=>&RAtyBcJ8Rk05U-Pn8} z?ni8iRT#r8oLmsfK^%v^Ayr^`B(y+9Q~=FUy+Jg|DzeX0@k)_XdJ#ZL><%|d-@?QK z11C^VkMY1{s_{!xLsctKP@TQD8{-v5C_`6N;>Y&CURbN)m7zP3Pj2L5sJP`U#)Jl1 zl3Kgh_2R1|Wh609BnGc8_1ok|D!rab<9Ja~*(hzvH7Qo9py`UbS=u&G>cxPkq+@ao zcjd?qGy|=13aJ?(qh&2dq2{FVJJl#CC;|4&h$R;jEm4VQ6)cFy;WcWK>bsL)y9|{u z9)yh?L?W7T^#0!)kwUD}!jYd&b&S6g{IujcWgaRUX-tuxQ}6^92hu6H?04R{ zd__XPs_sl}$T0u_iaS*GVfbXktyGzaZY-eJV^rVn!8q)yJl#|eRwd!PC|@3cb}I zV%oo$uSYp72h{XXMOHhh1yhjjLEm$loqnik@EJ0Ivie{0b@cdkEnfAZYu`f9Y0#wa z&7NzuGh9g08u4PvrAX*G4ut2G>v9~^GaX&#nmav4?IP6YG2B9av?CBe=)=>IRf&o~ zcI*zsRQ1ew#mkgfP55(sIT*O0{qzf3fVKMr#F5)9s%kMwuk4rO3rk;6kB+5@9ZwUK z$;8P7ifHWNcZHGawBppQN%tKvOZRZ`BGeI91&neb6%iUC*n$s5PSlIti;*nf6I7b= zH8ei>Cst{dQygj8ivvdl(xYH9DR-)ALU!#;Rj*Kc*T)riFx&MbrYf$o@>+U*2gGqz zS7FK!SK%~TeDH%xiIyoP4^X8cO4UyjQs4>!*RCEVYtWUCrXea&eWr3h1CJ7_qRYlT zm3<<4JD(lsJaWut%GxA)j&>24dNT29edOh<#EpU~Dn}{gIaIh{t5e#b6OrQHl~!w8 zcLALqP>cJwA(==Ai3HSFe&Ay$SX4itBr1_2Bz37^++zR@y~)Z?rBtI|TaiF!P(Iq4 zuhUvr?#p0oDjsWjN`;EqOFV&NSlfk2UPX%U;kNY2OOm=un7G`uGNZWt*&I@+wIHwU z08fr%r6ra}5_1g`GoVooLlsV+5)Fs2z)+&h9<@Ay8&_@mR+tq;141|CNhieDwkoQH z6}d64)F5@mR*_DIgRwZPUZSdy&CQQMF;q-40^k4vr2#)=6XS!2i)Ce6UzqN+d10Oj z{{VQePhLHk{{WM=^sZa^j|^2?7@iYvSd;TZL$tAo7~1PmEBotvI(=R@rqz|Wit_3x zay~h(Aub;#bIN3G_F&L45!APO}NP)k0ziAHiDN* zk{FOjHzs01K}A&qbFlkF(wSh5HYLuEtWsiP^oL3lPFt$%cFP2knnS@^BjW!65v!1C z_IiLl`(fi$qg=c+Hj$E6G6b=(p(L7sK0|Yu*=1!3TuD-)O7$FM`|E^8f~FA0ImFR| z;OZjrdT0yRbMDh~Amv^|Dcs2P@7r4k~U2MR_jR&Gy0MK$OK zDy#Y$SxqD?IY-V#3sQq|Q@N%pg}6xV-bhr6t*i?=Y{k#4U4l5L6U9g0l}PTXHO$N- z2ssytHd^yl1%aRq><2-Rk=as%ENoIBr_xp7>Gc(+{Hxy>s;qlDmn4MQRQAcLJtPLK zlnWllolSPdRTuY_s?he5q!IUIlJ7-h`e!HOwvmQNf@d^uTvQn)-_Dtn28| zaADKv#+6u;>M0TgayC*bNb$mzaK%0X3m+Qf;!vp>VakJv_sLqK722FwR=x36bqz%0 zrm|8y)*(;sI1ywT%$A{D;CGyAE6Lmk5sKLm4EAm(*ZU*Mi9HyAW$Y zK3Hm$rZ)94ES{Jw#E9v&X^R_8W4Dr2sY5_P<5~~AV@b5g@K^%hQH>&kUohrbYfy1P+macdihzIJVw`)o(}kRQAy}&ME3?V8bOWjBl#_hYm?H@U zdogZKB#;UyDrhN@5RY=Ay$e~m%OMg;7$8fzAfCHqBm%fmWN4<4%q`N9w*o51#k@e; znF!8`cnaBN5^_jEP#cPgMN4hl<(Xa}BA0}Owd0UnML|SRwV1EkZ{^znq$)X~9Mj?5 ziyl=2!y;yHnyEV=Q5I6i50CEG+n+S`BDgM(~FkxPyD034}Yy*rMIDIlgA=LDy|r@184YXM{~Y; ze&AO}bD|{7gURist!^!ha8BBENbGIx-cuw|gsDcWAaKNzXiv|!E_9L$)VsKd!*LP2 z`l5icMa3I#UmqW|YhAJ87rRLyb4k`~i0mOZ5iH?Pq_daxJ}OiLP&k@(&6i~Mem!n( z6CwxW$-vcS1CmKCoKrKuCI(U&VyNTO`G)4c8QtUdOHYhZ0zQJ#(?+#1q=2DSJ18LS-nm00j(FJ0a1{Ri4)B-aA>ZEt<|b)t=cI*I-W6U$jj+oS88JQ2fh$C^l+k2 zXpyQ0b~WwchE&ejOvmcX(1jqYb9mf*RXxs7N`;azRaqmuK+yptgiz9*sC(eFvFAyr zxo%vE_?U)27cy&8?@h8IH_cU`wwAXBFA++s&Z$Nct}D|dm)9;zZfG^$)nhI3bh-y=X{RnN~K>{)?(h6otaf>PFyGr zK7vLA6-s4B1JsUgOZHZvSL}_!>(eSBQsV-KC0mdK;cpuC{BY8=g@XaakZWD>vZ$C` zk`giTG5G$BvLRDQACTb6P=mf%!igGIH3N}dszpanrzH_g2K?6|RX|o!#Mh5vJbsLl zXeTytdS*2NOECetjwi2H9hWPWvrlymL|n9X>2QC$SZ0wI)8>dxRCs*+G60)b|I+zb ze$$%pmQp=1iODJ4@ljAuKmb1Z={y0_HY00y0$N1XD)F}DA8L5x!UrW<&QK7?sXq+} z#+ASl0i`M`1x7&gRR@q&OO{S1ib1Dcuv($x1jiU85{t%w5z@Xm+OG>!UcMv4=Z&iH z5d16!0NF|Cd~vl>Q1M6%ZOKZ2^#q@grWC6Bjk2glYuc6Ht{VzdD4eYolB`OeL#IJeixkC7jY2rap|>P&L)aSj z#ZxJiBuGgotr@zH3{@*=Rg1GXE*(d{DuJCNuPeOTL(R*agM$Unf0 zS;SC5Nf?pI0L1C=zY5Yg&u%87zdWMCQFFD_YHi1^;vg8jflk0|XtW(Zc>^G=i>r`B zG>Y{AkQZ=2mbD#nvI*p?loQHJiKL-$@-mtRV0PFV<)aSE#!)M7E)VV}x{frEl`SA* zN!!4jd@>h^mC{>A+{e~u5`qBSo_Tl}=Nv(s#~NS0RO*7nOJauO~YQxNq40;HlH zgHRKmah9R6=Iyjbq)X6^h5n~Hi$eDeJ4Y`#lthulv{26@9w3DjJhv3e-18wJvL9a4 zn%hc+ot9ghD~Q%9guL0gvn$eNV0eY8Bq{I%;;7$t5BHKD9~d=zjk)*txH_ruhC1%f z(j&}nQ5=}%|{v7W#BDPdzxR0I@FZBR0Sa z^aH8O&LIPP&*`(?W&S{bOOi$FTl2tiEZ zD#(N{9qU#8IIt#@ILe7bmkd}DA22pPHNwNHI!P8sjhHmdMR__2JVX6S8a!Xf2RQ;AgRb}$wxYo@PI&2K3@3~AxJ|s5j-+W=__$6 zU29$;S8b{QB;^*#QY))6CRr4`tp}?WtPr%$MMp1GlAslHb8Vcb%D@$oKs#-gKPCnCDpdIn0 zR!HNDjN#-GjoKfGDE|N|yDkE0P-5lbk-Y_t5nK0D%0o%M`zif+N!d_$GD~+cxRytn za(N4>ShKx0=x9_PgKWo_5!fo_iPebQMilWKDo?oFWthPn)!!9Ylc-c9bKo+lB8^1dX7f(hvpFcHSwfB;mm>G2)@?2z44C?itUjy`W8;}l>XTLL){H?M|U z0cy(Zbio=qno1;NipsPD_h<<<-nlb<5L4c9=@w0NVOxT%Q;HG0nrwR#2KaJh*$G9Q zQl+J$&Y;{xoZY$)gp#yDx7zEK2o_vrRx39E#v&nz9G{O;-xCr?i8L8t70q~w=Dy~` zf;|42R8A#0txAx6{C-$=TS+B?L_!NA^J1bTU_dNtYSiUH;egWGPb>_ao!gr$Q9%F- zdnnj_8CMOJv=fS}5{p5HfT|UT!a|a@r2zotQX8uE3;-L~b6lKG>Y2w>VL@I?yJkux zEihG805wf|4#v2#0+j+2yAOt-YzQOWYusQ;b8ie`O#qBYJ~=2$F&)iL_)8`3kb}tp zjz!s6d|yw*e+;XIU;oqjPtDB^;C85?`?t?abcnLY(^X@z0Yaa$z;4Rm8L3;NVv1rs;}CcjIeTGWQu`BTAK!` zq4vo~n(s~9Zbe9@_3+CQkAfs$w0M)aW4F;BcU%j`qcUY-ei{=|@l$hxMuI}couzV-!z)yB61h;6>+uSf$Z@hvmgutZjyRYCSTW_r z4@whVf$Nq7VG3zHCUuT$ib_EWs~t#R^{CrnRNBfUY3*T9RvBhM(t)t607>M2{Dwor z8&u28FZadDsiA2 zXQOr(V8=owGH;H)%l&SPRju(&cPW6udQ=XS&X#pl90?m>{%@5QGS0rMLlTHruf|X9 z9k$A6$&6nw>yJ0qXOIN}fdzm9j6TrJGTg=0$yyP=bCF7{60$e|fIJRN6eeqR%zSJp zodEl>;#FAW5*jG&TzHjD?h$&n{l+{><(w4{PysuA81X8T%sEvbuiC{|#0-j0N}m0P zi10WkR1)T+}Ih|yJ%n8be5$aa-kO%!yf zCW3~YhS;+~&1zUG)Tl+S-v~a$la))F3X?+4D3O;@LeD|RhmORYi9!})g&MZ+DNqzd z)Kz*{s@H#=GPX)aNu6HZ=4*KFQDc}y3W5-ZP{(3GBgTim)xrg;8dg#zBq}PB&LKg- zDeFgSZ}Q1-svbEb9;|O0xseD-i*O^bJODKwz~vbMwM1Ln%Op;1&(;c1O0k0My@_QY zQ!d97TdE#qF%{*yt$9XvH3onYwQ-bHN{Z600ci^YT>v|G6{QA1st!2a+mMZ-jn{cd z_?QOSn06J&4r+|2r@+Y~#;sq8kHUN?NA$}T4{>mfCkSH-fvG*}DYita1&Kl< zRpt=eabZ=)U?RQBG=Nj*4V3Qfr1Lw>*l zuHg78?#H$~RIH~*7Qb4I1!+W4tFuyyCvnClFGEtQE7PeNb{TA}m^zr6DT|ms7+sYB zVx{>oUMH(li1rySJY z52(a)H28@g01P})Rv&w1Et8da*d;%ADME_fg91S7l}nnjyR}|q2B@uiV;*aCmNJgD zpdzGYl1CaCuOcWnI{-3+8(t(#P)-O#A0%^6hjUy+cU~r8VdY&;;Z4Ft`+&Tem>q!Y zQJD+Iptcf5P!tm(B%=5K05Ri%Zq(j3k76H#H}|cuUy(SarIKk1t8E&CN^eSct`jj*QJsIhUbf)13Nlns$sWfADMmwUD2-3n6~NhjMXOWj zrZkIJSf?hGNh!A!Bp=5wj71}a6=-5(P|!@KGCyaKKT7t*irsiXN2dz^0D7G3$(R#O zyHwKwS1=H` zIph@$9lApc*hH$kMX&Iwl<5=!#^f&zD^geLcEx$YOe52)!8rwr2QI0P( z+}t=>Z8U#eGq#*%=IuMO0Q+&`4)vyauD3ACWJg0z(+mKMIJdO3u!cCrjFHU@LH@9w zo66{_JrM2@Ih0+2ZRwg30!g<&PqHpM-8t-DEk)sba;WILNRca7;AZ9U_<#mWL^EWV zhCi>}`WenZ!`8%ZTG6CaXKrob^FzxE z8MjczjCbN+#+fBfAvUlqQg8*mML{IwIYwdEiQ9aMh$~5a?Dr4pyx&+*YAu$5Q24Np zl>qzWz!s8*5>uC@>9Jmp0CE1P+|wiBg;=RU$g@yvSatbtk`Vz`%%T1jj;r>Qy&K!M z8dMmteqaVEQ}(OVBQa@B^uMjadWmboNu?zouuAL3l`cvVQYn@3l|o-US99H%P!;tH zq_QE5R4>L>l{6=@$&XhxOQ*Mr2uyN3b#5jg39UMBO}05qhUig@BFQT)B@qxkMXgGK z`y;;nG8`dL*OA2}t;RV&c3GlH7;<2vb4BS>+boE+Xxm7FMvU+vi9}|mzA8Z{wnHGU zO0>e#D5`p3Fn6b32cfTzwniI`)d4I^BM=l9`)uZ+O*)c#^vP1DFhqgjxR82Kh6~An zG*$J1zmq}IO7xwelJ8C6mJh+PQT>lJdN^HYFxZ!-UbFn2a}=N z6IzmMzGQ9&$l)lJ)Fg#OLWS_7_Byz%t07U@pjZ+%|1uVuv zP!AOpKRlFqt%I@zwHvnE3gw21@C46JvupM!j*&8*-0Y{o6P3u-sJ_r zRro>TIuLsCJr4OSd$Fgp=?!YpMGdluxJ6llgYh1lS8SbtH*Dbw(^}}p>m0 zJ!s5QNeQT|e70a{MOV1WVVFpifb$(@+QsKZO+WN_5b;$kt;ikKi0!so0X&$KOhQ{2 zV^YPLS%nrfG!z}pcRxlI;wTT@AYyuszW&$}4Zr`@`DVbSI7wDM+gIq%OLU8xBO-=b z3~c`ZYBD|wj}z2ls%2Hby>_;*LN`)J^80-8RcI1nU*9a8s#oC^0DIQB(xMa8dewkX zM+4)&G^^uga}gy-e~HzQF=eR~Q?)*vX;q+vA#MdE;s`v!HSiSJeK{c#t34AVgkmk- z#Z_cS;kSbd;ovIRNkLyyA5tbi-YE>bd#y+w#AGQ}$w#b66%O?ZHvTyv6%QOv8N#t4 zKFxdWict}(dfT~;S8{}ZUYTvjy;DF*H4VgcICk$rM5Ic9@j%A4Vs;>$XfZ@2QXVX; z*QGtZ@PZj8w$U&w%~I>VPw~cFm0sY0f*C+%KM>_Yp!TSxPBAKzvwCa{Zo$|Ul2kk@ z4&aWv4w(sAJ1vD7CX_1G-0!zOBz_y$=YU$+LCW02e06UI2anTEn8=c-Cz?>|v_+5X zGpQgwdrFKF`s% z0;pzU+(8sQzMLFER@9L|#E+iYC2}_9jZu!kic|sf#==ob?0S4YG~BnoHmdPBqNwTPtr9Tbo8Z;TYK2&TS(-Plo7}jwA_Iu zSAy}+FV*6fo^p+IHtlf`V)WauGo4!B>sD;4E=ZE$<0s?z6oLr?gx57Q$U)dSxJU>Y z?`F955X>1_mQxxcttcqGo2et)JqOvX1`qL&L6>&c>NVNtbOBOg#aZiCJxS_wshokA z7b|cog`TQLVv6qIfT&A1MGCu;O$qz4oCp?d*>IU!dmDiazy7~CQ3%0_MRWa7tki9>{23cZq_5*ib= z2*b^KsYGqNgQ`Q@i1m~NTRYfvkrFZ=nZ5>ukTy1s&uEmSHMu5SZEV!HgjFC z1$ZRkEvm7oLUtgw-+oyLcdEwGERk$0IG0qi++zc(Gl`-iR@t0QF!# z%?`sO!cd6RY-6$dt6R#?^^jenZOExK{4ym_D|0H4fY3QSSa&P?Bj4Kw>a33>VNX5J zT#yL0>fva-JweF)YqdFT-+ai5Z5j_Xr`kVca$-e$RZpy|qNA!gUq7_94g$d+G%Pffj z38Z$m(oD;DFc7Kc(L+$wE45X=1px24tumQNSyZ#?u(K-1>Bhha?a|+xC{RdpKmxVF z#1&L&RZ;u80Z=Fb+x(;AGI5aaRS~AJ3_zzoi@w$B#E?2;G7nWj+}TW!fpAK~ zSyaer@w%S7bO)fp5m73pEkv?S5s_gl@mx-8L_xSkUCAS|*3Bu7yjQ1T;ip!?Up5I0^f6#6Y6)r-|a(!#xDBjFV3*nK&aKp}io zG}zX<8l zyYJfv8Dym!NhcD_3bg96awMpQCDPQIkyRzX zc-sThd>l-j>#~T&LJ5FAl7gzLHU;b4)4oDQNM;%*n)Mwj4@%ZpWq}KNX>|~AytenzNvB&j&I%f|o z;)IlnGytkD?XafjF|q0RNl?pD8+*m{hX;+fj*-s(g(Fctw+#Cpbe5hk(^(z}W_*abx_9K1qWf%X}`EwAGp->M|mu_1D z?_Bi$7fOirXW|TeQEB#*kpz!(hk;RRY>s2~QA?fKz$U+cOn4PhG~kY2CkwrOBk>`p zO}p2=R%{e47WXRW*S8V?M$p!juKS9N7FBJ!FQUH!sEvD&qz`4^Cly9|Y7Y);B#YU5 zZH7~#s`1G>loWCYMNmN}#)GfZlNl^3V-2me;z=GZGR&b~;YS+K_1J<3jzw0>qFQ=p zQd(tpJUu_P^Q8eeM@53}|@|i^Lw-nW%~mLdI8(R-8p#e_CXC+Yoa*A59qoj#TB)8sH|< zv($_M%mxGO??Nl>-vYG~mMp4Ue}qtg7Ne^(5lmGLB0|v<@VBT)OPbTC!&-nz0N^~3 zk^NzACQy>IS&$W6g3QXhbFSM|8fGEpsk}(8jU;jj0RHfef|KprGD@LZNS3T5^>+h; z?rPmKtD>ufg-Hy;IMw(+b6(Uqc$KxeflVW3RDbVWnws|MlZ=%(ws1nw1zt2H8k+YX zF_%Q%$w$RM)n~W4j;|yVE2m>s@I8)X8Zo71_AhO!>J8=_PpiwU@2cfyOEBUsN6we>yQehXlIc+ zgUX(-5nIvc;Z~JFenW1g3RA}>a^fsF5Z5hfAz7l<^t1!vib*4eMiuyg3>&c(8CFrH zpVBvH#8}>|Z>p#_59S>@MVJvA^Nf9;@_B8xS;S!txge5Q5!LiVI7{2>?L~q3($YWO zcybKPwI3{pj8VduUTZ#G^$OVOS2rOQgw1$bAW7~S31RnTa+xKV8zfe@uOIqF&8?sc zSQMT)4R`oUFf=voOfZ?Wrg3YQOsrnU-6M&(@l=_a*zOvmwRZ29@vjRbx79qqG!k3g zX!9$}@TJ|p#Ww3l9}xU=ft$AY8L??j@aY+PYkEt6SxkS=ay)wAT4 zY20yE5eANg_4rLmJ*$RtOAUWDSwdV!?GqZYnnLP8A1%&f%1BA1^DUIl@*9|#%)#11 z#Yv}Ow$;jpX%$a&>x+VuNer7@L}BCzKf54;0N#gwwaY=ZM9zg?DIO+_GXo5r0&x`g z6`&n(s+!Dze((2y0#C*dPNSe0K}9P>S%VLTm19cpK~3`bn@u88K#m1ffUi250h3h5 z)^Q=Cf;!QUProXcHYGF@vML9Xfq~>%g8sY%nx@v*HegFEt8NM<7u4qN=db}qKAPps zxLj_P$}y(|_?hHYSoa6v1a3FjZ;_Fu0+81;C7-4xj5ExiyM_kl%~huK>V9;{@ug(& zMJ1cuPb^=&kJMXRa~!iGAfpK#r~p34B80w6n`K27wh{y&$mPwV@D4)k2zryjs1g+=&@%RWMmNMiMpz zG2~CkZ<30#9T@X?nZOaLt5<%W2P~IHG8W3Nbx0tNC?a-MbtHhq3XkSq_yp;X0-Qc- zXd{v-Z7i=+X!t7683cdNLGe@D9yQ=ehOG=!!zIP6b3n5zTooj-PCsHbb56a^JZXrc zmO*g^)}|e2i$(Z@KqZ(XLWoIo>TxUaSG95DW{SVJ()9LNEHwzV24phHa|x_yO9!Vj zQ2eVxYqkTEqEaz3HDq)@8xXZ(%}$>Y`TJxL+bojMA{de|3o8&@NDso!NZZ5#im#yx zRa^y=b1C?l$N5C}t$JYs)mAYxBP?n-4VZBZH|_!6zT*gv>e3@9A)KvF#O!wQ2dT`J zPi$m(nPw6+WPB{>Xld-nq4{Eh^}QR-j3SQK%GfzoCSRPZ}GSh4xwLTma;Sp_A! zS)MV;nt@Or;YP%K@oQna{PNEOafN4;Q;#^~kxYIZfa)-YaDV^T`GpdxQe;;^dZRUd zd}-4?NKMis5ks($pis-udwXFLwMIr5DGEgyc#_7Q>(eBQM#CBwLbU)7hJ$QriIOEE zk(iBuBm+Wxa2SFqB36jDxBbOr1eHbLC^u2H2H6pe1(Bph#5S@k#?d7QMh(G%BYKgM zo)Asi1kwWzp=iWgT_wz8b+(-RTlC>5>^<^>aV>(Hk64m9kX_kHWgsCK{{VRtFR>mO zXA%>UbeAgS7)a)<%#3OP=xAs_%Q5<`6rfs1V5?e@Kt)Iu@g$mkI3*Ct2Pl(~M|G8# zr!DF7J7d8WOIq1fyr_WjH3l>3wS9unWKJ-7Y^x2lZ}D8Ik%F-L#GpF>#1qn#J7q^5 zbwZq1S60PMrOGd+#gIxq6|aaS*XD5ol@=%kyuFyg+m&rnik%NZMUavi3F-5HIf&8P0BT4 z!-yqCI+70ip13$w60pXhN^Iz31=56aHDh0FoM5QX;4_HWqdS*(_inVy0-{pn@^3}z zW7*>(qnrGe%W3n5=J`C8~nKB47Hi%Zz#Gb_Py>qKUk`_k;hFjl7HiLUw$}O(dS?J+N zL(6wnJ%uUPB6Q&ON@E_8pz0C*Qu{``_IW;e(y%Bnrp*tIB{=+b80l=2nN4af~T>u6RErGEM4N!GJEqY=oz1v;i_Jv&KWS8kvtG z3GiwW_+YhClTme#i2Avbq-=IdY{Z2l=ot?b_bLiqLh|E~j_OIJb5w>BA_kp6K}s5T zIUzDtD{I-Ka{if)Knt;Etq(;kO?e)@@)9b9OQ$czqYDv!+wmZD1bCbreoBg4mE%@J zN_Ept?^cFOXx13gFHDXs!ld%*T}I@5^0PjasR3%3&@U89nETh_9IH>}$ndL@ArMtS zN~of#>^uj{9tChxN$c{-4V7Fd0RY;a@<7s}qq?5iNsZ`(_G!?b;|ZF#^_f`mmD$^^ zaFhS! zra;GgRMIB^QCoy&o~GXu0ob2>nzbd=k~I}*oP!E=s`MoHrVuSx2CXP43D|gK?}uef zY-ASG3!XuEw;xgVprv>A@WfAbwn-kVF$vl zmUljylN+lAG)7L<9{DJp&`~XAI19=xn1H0I8~b(35S&`sy+Pq81QaB#0Qv2U0*vA4 z6>%8_nuS~+xp7Q+s3Sks<35ANcnT@0AP*c{4I+|f;c90axS5^V(hgYXeD zFYKw@pKvL)awZM2##A5F28z6!{Gdr6cKIF_Xjxw2DZ1%_~J9 z^xY+9sS(wAc-OX9DJsC%Vbt@G1~e$qh8yj$U@L=(4M_JvIG9AGYOIUNNGf^(LIKIb zR#gmSb5(SaUO_<{uMi0T04s3W87jvU6k;LfPhW)ORYpN@#BxWCsqh{gs87?8k)WtD zw~840MqTL0Dus`=MFvBSR)}XW$j2mPjfeyj?OdEqg;Xnf$BHzKPqHKiP5zo3mlbZU zgK|P6S-VKUhjpb$J`@{ebIHW0K?U4yeHf~OMPQS!E*y4aUc2Twi3*8nB$b_Hwc;sI zf-^(m_JGS{60I1?3I2-iM(QNlN6b)+DOzHe({S;*S$c?-h#u=uK^O^Dc8XVSN$M3K z5R9XXDvEIc9jn%-EQ|p{*R*=8g^;IUpqAU9$#AOC4C180AqV`LedO<7qZ(HjC$BF~ zR$^*T5(uZid}&n@DbP_Z*%^s7E458)`terHy~9Q#F^~b?R8lMcs-3{aRpWwHW%T2& z)M8h2^TkmfjmQkbBh7bJ3sP&=fNzooQ4on@B$a6t(9{ZiN3AK>=^1=VQ%GYai9sQH z0I@KkuRth%c}7VplfiN>U1f;yC6+lU$gKr=8dUY$u2YQNp#vSg$&5%Kb(9)h22$SK zz}w~5EVXh+>B!AJBjZKk#iFS_z7b5Tak{2ai04xja7gko<01qkhV4QJOuH6PO)5Iq zM8BC8;k1?HMQ1!z)k5{y)9=iS2~=x2O)OxxFK|(w;^e7iN{WRN3aw67WGxC-x^}kr zk=a3|Ni)a;qDxR3f`NqOP1mK3~-O(CW)={?eV01(7{B0)}_&RGLtiHjn8Z7w8HX?<;dbrWzf#>&dfPfvuM z$4rsrju4#M*l>bht&gf$fL?iJP5}~!_kyG1-)yA}edDl|jitTeB%ek%qbv(h8>wFX zcEcG`LL2mK$;;D&)kOfj@uMoUD{aJ)$bsIYu1k%Qd1V%#98Z07G9;G9qS8j<8oQED zaK9?$a?BvFIP+GkFPUL|GfIJGhIb|bX#$r0N#lW|iZv}pJe(;ze=cHV)eN;B`;8s)nGa#9NDY>9#`E1u1o!0z%w8 zY~Zks7vtK8;Utg;^I$TiKuN|*AE_hL`@V_-Is>(5y@L|^kS+82PCwRvnipGRVh+>3Q+7mc<`%glLrj3 z$SJVc@*mlV6s?%xYxrCQlefLQT@v=rmgXDHRVG?PWzly3~lZ?nj=O~dR)qoy=rOhP983b zv{}g+2hnC=w2-o${3vi&RbF79s=&%?Q$_yFRj~xkUUA3>6xn~X64V-T}p+&=@32@?uTUW_WWf9%BLh`oJX7c;OLv z3eoXvEXj!gixLR9cqB3|E)EfAis0}fk!TzaC*{CkOe7vA{C#WzO=!aA>waS(0(?4; z!4)t#Y^aox7RK2tAiyMy3$ZwyaNxQ2{=3-4u|=zi=I&&0f!&O;X)m}u~0)Y zjm}_84Mv|4WHR1`%@@$vbijp3fJrzI3`RKK-V%q#5OEG9Q+o^=O)|%!iFP;)$;^z1 z!Vw+q9KKKNDh3u;5}63_7_mUOBag#^el8l%_;D_F zKjiz04gaTHzSLp=Lo8B~3{pDU{~7f+lSDt#?RViy4&S8@uqAruNrWvTswja#a)(@q zc0R(Poyk9tV?H42diG>F}``?x< zjPM^2rbnu(sVnjns4PScG669csoJA;3QKjafK5bhq6v`=sr=ZP&eBu#ut?Dm zJrenY)0~Uz3QhEipgUZ)q-=ydQ)N0|Jg>WIzqM%l8bG8gs_KoS7}RzWx>Q5839ehy zu5U4YF5d>b?3JEpeJs4(H7xB4&J%dfLPlI#^&2}buO zn`}S^je_Kcca10940Txof z<+T^)&10+JO9S0u>mB`udk04k-pVO9yl>GtlwAKhetzZc?-kACcVwA@Yq>>#Xf4bf z18}Zp!Lc+ymWuVMU`Szy?OpBmJvP{|`3tWNtH@f}C)k<$DGkvJkv(#?$&1b7VEN+e z)y_@&`C&~)#%AC*A7BWv)f6n6gLnZtF6<;;Vbys2}=X5L~%Dkmdq6*Z{M-N5F zcg%YK{d!{WenjZ)daPoP=^M)R^?Z)W&4Tqc7Y`pbI=Fa$gcfzZXxVjgQDHD|a}w!2 zJfWdU!$3UmNX}57-Z}E_71da7+4Ny`tva@>)T*|>#YMJmpWWVel-rz~g6962{F94= z_j=Fi()!%~NNe}rOvyIT3=D0%`MUVs{Ia@mMi{+20sY`E<%p+?OoI{|h z@d}`pU-3L$hm7&HmTonbXIu5QzC>tsABForU0j*a^>Qyia&muhbZnS)z=7#U<}tV9 z-!xKQhG68LmUsIW?DpM#r|Ws}Ojgm@Cvv9WrhvM<)vJ~k>wP=?vW1B@aNp_YSx)Cv zwX)9ovq;wB-~aSHcc=g&a3)uYNCrj^4F0+fOoTRNPTOe|w<{SNoN0~rWV*!eRR7p| z@71I8QC-gOvuY8Fa}^2Bu2K5Jy}1gU1oh#;GT))o%(C)5C{j-1-A*UNB-zRBYL?~8 zdL^DEvW4clv!9YqwIVvivl}ae)YSBOAyX5tB22Na!FA_^_uMw`3=j)yG&u`w)m7{< zy)C0nLGC4Gi9pkzdHKUT9S+n%!V0J%`?ejg(XU4=PEZ}>^R*c+!8GJ%jje$?o5?{v zQR7Fi9iA&yPEqOubMvOkPrlhzsOj($&OFet?TD65c09{9__snuZ=y=}6s%&>stRrZ z&x%|3sf``gXx~zoo^7=OdC0TuQX;yzG1faUPXFq|Tc@?QD0UWSMBPLQV$;;d&MyZw zcoz)+t0MP&j%F^ucF?23bAw^|z+t167j0EN5!sik-~0V`-9jcm61+gF324^s8=Y5L zDSg=Y!<{;-5|t*5DPUa6 zoH)>qQ=NJqoUxqw!PBzmVlDwpZ)ty0;t`R&H1aA5HtSN-dUxZf?Ues*(=gcWnb^znm~cV6I! zcF9wb>DtVG73-7Hv*DtJ)M@)w_i?^?Fy!(jC;JNm_AXd9d{N!~NIwVTtdZ(5dtgzg nA0DtD+3ulmAAU=0BO?de9R|79@b4I~^q%HIawlG}4^90K{+mXl literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/loading.gif b/workflow/public_html/lib/pmdynaform/build/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..20efc128316fa3ec6482e3f7667736017262d6fd GIT binary patch literal 37076 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/logow.png b/workflow/public_html/lib/pmdynaform/build/img/logow.png new file mode 100644 index 0000000000000000000000000000000000000000..f8981bd46676063bc18c20230422ddb81c75ffea GIT binary patch literal 6383 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 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/pdf.png b/workflow/public_html/lib/pmdynaform/build/img/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed6877b1e718ceca936546982b6983363662bb1 GIT binary patch literal 2799 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 Z4-pJ2A1mB)dXfB+=IZ1@t|bK~{|BEwI*I@Q literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/print-icon.png b/workflow/public_html/lib/pmdynaform/build/img/print-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71f014fe6e6f0ef84d775f2e988a4b14f9bf50b2 GIT binary patch literal 1800 zcmaJ?eM}Q)9KLI5OA)kCh0-b9s+llouPvp}3$+I=RUE}yt2Vf7T-$>d+g`mMQq0uy zrKrrI!;diLV5oCsaTv4drt^zB-G*D|*qmmWLbfr@oH!T4CX-$H(m&A4UG9C~d!Fb0 zJ-_$&%WX3jEslv2Mgag2Q?Nv5qTdPOCz1^S;6Cv$N_vt=*idA)ZCGnl*+rT~P>vs=1>87=L4LQ(<3s#v(U>km zkHgEb2pWS>Yt^FhpezO>q$Nlk%9Lb?ZBm&GQYs}fMW#|IONZoAnH-kVw^A%qAel-; zo&`-@B6>H{UW%A>`iZ^hnOfwaC@%uTm6er}$_xoXmccTWN)^_S%f&Q8?5pxnm|yJi z&7V}z;XWJb^iod31BDeaD^WqIMRcU&7TjKwv&=#Hro=tIiDc1fgZ-EnmPw>AIfe=Q zn`Av3{{+xrcsA7So|5%ZCj7C>X#??@tGqaD!hJ*qX`_$3bbfd%FQO%Jj3P)gLAWM! zZ*&k8;d2mPNV`G_r5G@q(-U4u9b*^_NP)*kVICV^pi_%z4T;lfN3vDfTCGB-$dK!_ zGFg6Ru1=;^Df5(BnF?K&JWn~v)e*J|H}0V(x%S80%%^h0B{Z3DWTlU;S2Iq!eG_M$ z>!Kz`E@wE;hzs+S(UFPmcqvxlqC_zL84jP}I1+w}7QIZH)8V9ZJ#N>Ngc};mE8?8S zZf<^_T$Qia(;+LTw>!?YPh)qCtCvcj%AJb$i5i@=Ko@p+IMq?~WU41|58a3)-EqPz zP0awn=qu3Wn*BGdBcr35+Uq@AM-v5tB)XN(5rX%C1`QCwtG(UGF`y&K2U}x*R!k!sI1+I44El;DB1Wp;zh#fn^?H8y!Xs=prRk|f26&3!6WiK(GlNCw!0CDx zKRO5OFNSvJ9`B3og-ZY)DqS{%aXlemnYrW5mg>XTs=I}$s>r^9 z?FshYuLMo4JE8^c1+|vi`**4jl`AdRS;0;;of~X5_An|UVAHM#$wI}=w%ZR9c{kbp z_n>ucvo<}ywa;qo125*FJ?BxOpZU>jv*_pQLwrkD9e6C2x1$LgbU{PRev9LCuJ(vLtUI-w^yQn%nZtZjOHX#3FQwH9DA!k zJfkD=-vnV+T&Vdku=5B08k4y`e$m5#Wo|=EJ1aJ=x1!N8oNO)7__O;IfU5uso->4W{3=Cl_Y;qKjsn2NjB8SzC2^G2dS9tMHs Wdj`@51pMUizo{UDSr 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 N;luG|S281Z{|BDmu517R literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/video.png b/workflow/public_html/lib/pmdynaform/build/img/video.png new file mode 100644 index 0000000000000000000000000000000000000000..6d4b0ac01b4dd79f09068645747309b957b4475d GIT binary patch literal 2286 zcmaJ@dpuNWAD++scz88Zj-j+ryf92vbXMPbYR$_?=Z5OoGWrfPRL@AdyZza;sv}xZzw)cF_InVR_KELnxcl-YF9P#n~ z2O4FLLLd-mju+ccy^=NGQeE{wNNYAly_mrsJlG!!hhzA15aBL_!axj1!jAy`K)x_` z&t1?NfzZZ@0(dZwyOkk;Bt*W(hp3du)My04*-a_q3&bFd2?HZUQWxxG%}p#uBy_NDg9XL`s zbu_s!oZ-jz{1i)la=}Kzu#7<>#l*xAV;qQ(Jc2}_)9D%xdwYV~gP@3&!h9t`s<2sP zV1o*QTqJ`7OM?WS?oJicf7)H;km@%SaR=SyR%YBbWRCT_uvw z-U`?c{43wTB~}E)%0QAIsDPs70`=g+Z8V`|43-?^!;m}xf}$3?=o1OSkRlS2VOahE zW&@Wm5J@!#{6_?r%iu^AFkdPFIcyiKnu9132^maBfbBtXr+YXs?I{!w8lA#+r`vl_ zscbTx?di^1#Ihklv;>sGi&)`bSobetHDZv+)REbsT(lPyddeXQ=3~(e(ck4laq^^j z0OT+7eZmUAoQu;Ju_SdeB+Y35XVi-(wSF|)&%#w7K1&~zs`V~c3wuw8ZXyDq6Ut$` z2Pk_xcZj1_ZC~>~yzk}2^=m3=&4_Q`VcvSJicVhIi7l6z-)-RV0G_ZCcOlII@aTd8{fZT%)(cM|^*08%i@RFnV zbr~Ubr?xB76~Uk;WE;GzKNQ-W`QV`!p-Rsg@;unsL_0GOIAzJxAv&6+_-aX4mX$Q< z_)9`pD^21oTGq|gH%7TAQT$f1;+9%1S^mQQxFL{C@|nN7b>=oJ5IwcV z#lXaW{&(bfLquyE)9zhS^O<`FFO1Q_v@=$BR==7_GqG;;mW>GYEw%jdWm9NgWD}yM z_K@+)C*x*3q%^O|!{}{Y7V`9%Z7{oly>5P)1?~f2UeVfQF%Z16m6`o@;q$mnoF!(R z?T*ZRnX11HH=8K9f0^CbK)!(6ydm+_Hz9j%+NY;89x&##RZq8Ip)CKpV<=aXBSX>J zcJtirNaIT7l0og6u`p68@os*sL$G|@GrD=xQ&PxspVrBs$PY)XHqPw3qvK%IPN1-Y zlg|evC~Tt*b&AEItI~d`-kO2Z{y9vy`+&5x+pS}y@V{?bE%>g8hLRtrx4&sbhWq@iTY6zgdL2zy8Tioqv~4WO}rAO+c_%$-P&dB{OiX?u|0PNNd~^NOj4I~eD;ZneJ3dWxZ2UDd!%rRSKGa=gl6}5AC|Rm zdNcCy&8onDTyu<3NV0Pr zNtV3ShDlA<2j2=)gtnb1z~^H2^j*WUv~s%ng_pmsSZxY!96X6DPd~c0prxbk+}N@j znaR*i{c>)H_`)!il$)Mm_n-Gw1uGgyM}tlu|M}Tf^Nl%Z<&XqJ>Hvd^0#bT{Gp~5< z;q~}>ExoGzK<%~`Y6lgT9WVlZF`KNhswI2X81BAq)49STGOZG6Xx|>;D#>5VJ=J&R z9NMy@b+oLTw@bF5x4Zh}k7Xt|sxBRRJ>Lzk?-T*QQcTjfcT%^~cDMtQgsxKbRGo7d}Box#P&nJ#_yT4|$P zAD*{GQR~?@csr}|V)Y?|vo9R7_xnAXwkmmBbVk?nmJ0p59R;_wrAaX@e`(g+*Uvp? z{jA`c3ine_d%d0sN!eLT1HK<#ytJ(t*B;B*lm-J2&i|*|%$6P|$H}SGu*gSx#13a)$f$E_e3s z5IVP@GxBt;hGyI!d~Jx=i#c+b;5@la<-P5oZf$LWQ*z;KOy_eXZK`ba)iO+O<=nZB zjgd3Nka+E8s7uVY85s_d8Q}|`Pv6SR9Cx(9W~gXe5Vt}Sr1 literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/img/xls.png b/workflow/public_html/lib/pmdynaform/build/img/xls.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f44c7bd7b0c2a640a7334cfcdc9d37b0204155 GIT binary patch literal 2767 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 LA>zuNf@1#z509as literal 0 HcmV?d00001 diff --git a/workflow/public_html/lib/pmdynaform/build/index.html b/workflow/public_html/lib/pmdynaform/build/index.html new file mode 100644 index 000000000..4b7d297a8 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/index.html @@ -0,0 +1,66 @@ + + + + PMDynaform + + + + + + + + +
    + + + +
    + +
    + +
    + + + + + diff --git a/workflow/public_html/lib/pmdynaform/build/js/PMDynaform.js b/workflow/public_html/lib/pmdynaform/build/js/PMDynaform.js new file mode 100644 index 000000000..f8e7b84b2 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/js/PMDynaform.js @@ -0,0 +1,29653 @@ +/** + * @class PMDynaform + * Base class PMDynaform + * @singleton + */ + +/** + * @feature support for ie8 + * functions + */ + +function getScrollTop() { + if (typeof pageYOffset != 'undefined') { + //most browsers except IE before #9 + return pageYOffset; + } else { + var B = document.body; //IE 'quirks' + var D = document.documentElement; //IE with doctype + D = (D.clientHeight) ? D : B; + return D.scrollTop; + } +}; +//.trim to support ie8 +if (!Array.prototype.filter) { + Array.prototype.filter = function (fun/*, thisArg*/) { + 'use strict'; + + if (this === void 0 || this === null) { + throw new TypeError(); + } + + var t = Object(this); + var len = t.length >>> 0; + if (typeof fun !== 'function') { + throw new TypeError(); + } + + var res = []; + var thisArg = arguments.length >= 2 ? arguments[1] : void 0; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; + + // NOTA: Tecnicamente este Object.defineProperty deben en + // el indice siguiente, como push puede ser + // afectado por la propiedad en object.prototype y + // Array.prototype. + // Pero estos metodos nuevos, y colisiones deben ser + // raro, así que la alternativas mas compatible. + if (fun.call(thisArg, val, i, t)) { + res.push(val); + } + } + } + + return res; + }; +} + +if (!String.prototype.trim) { + (function () { + // Make sure we trim BOM and NBSP + var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + String.prototype.trim = function () { + return this.replace(rtrim, ''); + }; + })(); +} + +if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (elt /*, from*/) { + var len = this.length >>> 0; + + var from = Number(arguments[1]) || 0; + from = (from < 0) + ? Math.ceil(from) + : Math.floor(from); + if (from < 0) + from += len; + + for (; from < len; from++) { + if (from in this && + this[from] === elt) + return from; + } + return -1; + }; +} + +if (!document.getElementsByClassName) { + document.getElementsByClassName = function (classname) { + var a = []; + var re = new RegExp('(^| )' + classname + '( |$)'); + var els = this.getElementsByTagName("*"); + for (var i = 0, j = els.length; i < j; i++) + if (re.test(els[i].className)) + a.push(els[i]); + return a; + }; +} + +if (!Array.prototype.find) { + Array.prototype.find = function (callback, thisArg) { + "use strict"; + var arr = this, + arrLen = arr.length, + i; + for (i = 0; i < arrLen; i += 1) { + if (callback.call(thisArg, arr[i], i, arr)) { + return arr[i]; + } + } + return undefined; + }; +} + +var PMDynaform = { + VERSION: "0.1.0", + view: {}, + model: {}, + collection: {}, + Extension: {}, + restData: {}, + activeProject: null, + FLashMessage: null, + PATH_RTL_CSS: "css/PMDynaform-rtl.css" +}; +/** + * Extends the PMDynaform namespace with the given `path` and making a pointer + * from `path` to the given `class` (note that the `path`'s last token will be the pointer visible from outside + * the definition of the class). + * + * // e.g. + * // let's define a class inside an anonymous function + * // so that the global scope is not polluted + * (function () { + * var Class = function () {...}; + * + * // let's extend the namespace + * PMDynaform.extendNamespace('PMDynaform.package.Class', Class); + * + * }()); + * + * // now PMDynaform.package.Class is a pointer to the class defined above + * + * @param {string} path + * @param {Object} newClass + * @return {Object} The argument `newClass` + */ +PMDynaform.extendNamespace = function (path, newClass) { + var current, + pathArray, + extension, + i; + + if (arguments.length !== 2) { + throw new Error("Dynaform.extendNamespace(): method needs 2 arguments"); + } + + pathArray = path.split('.'); + if (pathArray[0] === 'PMDynaform') { + pathArray = pathArray.slice(1); + } + current = PMDynaform; + + // create the 'path' namespace + for (i = 0; i < pathArray.length - 1; i += 1) { + extension = pathArray[i]; + if (typeof current[extension] === 'undefined') { + current[extension] = {}; + } + current = current[extension]; + } + + extension = pathArray[pathArray.length - 1]; + if (current[extension]) { + + } + current[extension] = newClass; + return newClass; +}; + +/** + * Creates an object whose [[Prototype]] link points to an object's prototype (the object is gathered using the + * argument `path` and it's the last token in the string), since `subClass` is given it will also mimic the + * creation of the property `constructor` and a pointer to its parent called `superclass`: + * + * // constructor pointer + * subClass.prototype.constructor === subClass // true + * + * // let's assume that superClass is the last token in the string 'path' + * subClass.superclass === superClass // true + * + * An example of use: + * + * (function () { + * var Class = function () {...}; + * + * // extending the namespace + * PMDynaform.extendNamespace('PMDynaform.package.Class', Class); + * + * }()); + * + * (function () { + * var NewClass = function () {...}; + * + * // this class inherits from PMDynaform.package.Class + * PMDynaform.inheritFrom('PMDynaform.package.Class', NewClass); + * + * // extending the namespace + * PMDynaform.extendNamespace('PMDynaform.package.NewClass', NewClass); + * + * }()); + * + * @param {string} path + * @param {Object} subClass + * @return {Object} + */ +PMDynaform.inheritFrom = function (path, subClass) { + var current, + extension, + pathArray, + i, + prototype; + + if (arguments.length !== 2) { + throw new Error("PMDynaform.inheritFrom(): method needs 2 arguments"); + } + + // function used to create an object whose [[Prototype]] link + // points to `object` + function clone(object) { + var F = function () { + }; + F.prototype = object; + return new F(); + } + + pathArray = path.split('.'); + if (pathArray[0] === 'PMDynaform') { + pathArray = pathArray.slice(1); + } + current = PMDynaform; + + // find that class the 'path' namespace + for (i = 0; i < pathArray.length; i += 1) { + extension = pathArray[i]; + if (typeof current[extension] === 'undefined') { + throw new Error("PMDynaform.inheritFrom(): object " + extension + " not found, full path was " + path); + } + current = current[extension]; + } + + prototype = clone(current.prototype); + + prototype.constructor = subClass; + subClass.prototype = prototype; + subClass.superclass = current; +}; +/** + * Get the keys from active project + * @returns {*} + */ +PMDynaform.getProjectKeys = function () { + var resp = null, + options; + if (this.activeProject) { + options = this.activeProject.webServiceManager.options; + resp = _.extend(options.keys, options.token); + } + return resp; +}; + +/** + * Set the instance of an active project pmdynaform + * @param project + * @returns { null | PMDynaform.core.ProjectMobile | PMDynaform.core.Project } + */ +PMDynaform.setActiveProject = function (project) { + if ((PMDynaform.core.ProjectMobile && project instanceof PMDynaform.core.ProjectMobile) || project instanceof PMDynaform.core.Project) { + this.activeProject = project; + return project; + } + return null; +}; + +/** + * Get the active project instance of pmdynaform + * @returns { PMDynaform.core.ProjectMobile | PMDynaform.core.Project } + */ +PMDynaform.getActiveProject = function () { + return this.activeProject; +}; + +/** + * Get the workspace from the project + * @returns {*} + */ +PMDynaform.getWorkspaceName = function () { + var resp = null; + if (this.activeProject) { + resp = this.activeProject.webServiceManager.getKey("workspace"); + } + return resp; +}; + +/** + * Get the Accestoken from the project + * @returns {*} + */ +PMDynaform.getAccessToken = function () { + var resp = null; + if (this.activeProject) { + resp = this.activeProject.webServiceManager.getToken()["accessToken"]; + } + return resp; +}; + +/** + * Get the hostName from the project + * @returns {*} + */ +PMDynaform.getHostName = function () { + var resp = null; + if (this.activeProject) { + resp = this.activeProject.webServiceManager.getKey("server"); + } + return resp; +}; + +/** + * Get the enviroment (desktop, webkit android or iOS) + * @returns {string} + */ +PMDynaform.getEnvironment = function () { + var nav = navigator.userAgent, + resp; + resp = nav; + if (nav === 'formslider-ios') { + resp = "iOS"; + } + if (nav === 'formslider-android') { + resp = "android"; + } + return resp; +}; + +/** + * Helper to get user information. + * @return {*|{}|string} + */ +PMDynaform.getUserInfo = function () { + var navigator = window.navigator.userAgent, + response; + if (navigator === 'formslider-ios' || navigator === 'formslider-android') { + response = this.activeProject.userInfo; + } else { + response = this.activeProject.webServiceManager.getUserInfo(); + response['language'] = PMDynaform.lang.I18N.currentLanguage; + } + return response; +}; +/** + * Helper to escape the CSS selectors + * PMDynaform.escapeSelector() + * @param {string} sel + * @return {string} + */ +PMDynaform.escapeSelector = function(sel) { + var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g; + var fcssescape = function(ch, asCodePoint) { + if (asCodePoint) { + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if (ch === "\0") { + return "\uFFFD"; + } + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " "; + } + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }; + + return (sel + '').replace(rcssescape, fcssescape); +}; + +String.prototype.capitalize = function () { + return this.toLowerCase().replace(/(^|\s)([a-z])/g, function (m, p1, p2) { + return p1 + p2.toUpperCase(); + }); +}; + +jQuery.fn.extend({ + setLabel: function (newLabel, col) { + var field = getFieldById(this.attr("id")) || null; + if (typeof newLabel === "string" && field) { + field.setLabel(newLabel, col); + } + return this; + }, + getLabel: function (col) { + var field = getFieldById(this.attr("id")) || null; + if (field) { + return field.getLabel(col); + } + return null; + }, + /** + * Sets a field's value into a form or grid + * @param value + * @param row + * @param col + * @returns {jQuery} + */ + setValue: function (value, row, col) { + var field = getFieldById(this.attr("id")) || null; + if (field) { + if (field.model.get("type") === "grid") { + field.setValue(value, row, col); + } else { + field.setValue(value); + } + } + return this; + }, + /** + * Sets a field's value into a form or grid async mode + * @param {*} value + * @param {*} row + * @param {*} col + * @param {*} fn + */ + setValueAsync: function (value, row, col, fn) { + var field = getFieldById(this.attr("id")) || null; + if (field) { + if (field.model.get("type") !== "grid") { + field.setValueAsync(value, row); + } else { + field.setValueAsync(value, row, col, fn); + } + } + return this; + }, + /** + * Sets a field's text into a form or grid async mode + * @param {*} value + * @param {*} row + * @param {*} col + * @param {*} fn + */ + setTextAsync: function (value, row, col, fn) { + var field = getFieldById(this.attr("id")) || null; + if (field) { + if (field.model.get("type") !== "grid") { + field.setTextAsync(value, row); + } else { + field.setTextAsync(value, row, col, fn); + } + } + return this; + }, + setText: function (value, row, col) { + var field = getFieldById(this.attr("id")) || null; + if (field) { + if (field.model.get("type") === "grid") { + field.setText(value, row, col); + } else { + field.setText(value); + } + } + return this; + }, + /** + * Helper for get the value of a Field or Grid + * @param row + * @param col + * @returns {*} + */ + getValue: function (row, col) { + var field = getFieldById(this.attr("id")) || null, + val = "", + type; + if (field) { + type = field.model.get("type"); + if (type === "grid") { + val = field.getValue(row, col); + } else { + val = field.getValue(); + } + } + return val; + }, + /** + * helper getAppDocUID function to get app document uid as reference to a document + * @returns {array} val + */ + getAppDocUID: function () { + var item, + val = null; + if (getFieldById(this.attr("id"))) { + item = getFieldById(this.attr("id")); + if (typeof item.model.getAppDocUID === 'function' + && item.model.getAppDocUID()) { + val = item.model.getAppDocUID(); + } + } + return val; + }, + /** + * Helper setOnChange + * @param handler + * @returns {jQuery} + */ + setOnchange: function (handler) { + var item = this.getIntanceById(this.attr("id")); + if (item && typeof handler === "function" && typeof item.setOnChange === "function") { + item.setOnChange(handler); + } + return this; + }, + getInfo: function () { + var field = getFieldById(this.attr("id")) || null; + if (field) { + return field.getInfo(); + } + return null; + }, + setHref: function (value) { + var field = getFieldById(this.attr("id")) || null; + if (field.model.get("type") === "link") { + field.setHref(value); + } + return this; + }, + getHref: function () { + var field = getFieldById(this.attr("id")) || null; + if (field.model.get("type") === "link") { + return field.getHref(); + } + return this; + }, + setRequired: function (field) { + }, + required: function (field) { + }, + getText: function (row, col) { + var field = getFieldById(this.attr("id")) || null, + typeField, + val = null; + + if (field) { + typeField = field.model.get("type"); + if (typeField === "grid") { + val = field.getText(row, col); + } else { + val = field.getText(); + } + } + return val; + }, + disableValidation: function (col) { + var field = getFieldById(this.attr("id")) || null, val; + if (field && field.disableValidation) { + field.disableValidation(col); + } + return this; + }, + enableValidation: function (col) { + var field = getFieldById(this.attr("id")) || null, val; + if (field && field.enableValidation) { + field.enableValidation(col); + } + return this; + }, + /** + * Helper for get the control of a Field + * @param row + * @param col + * @returns {Array} + */ + getControl: function (row, col) { + var field = getFieldById(this.attr("id")) || null, + control = [], + type; + if (field) { + type = field.model.get("type"); + if (type === "grid") { + control = field.getControl(row, col); + } else { + control = field.getControl(); + } + } + return control; + }, + getLabelControl: function () { + var field = getFieldById(this.attr("id")) || null, val; + if (field) { + field.getLabelControl(); + } + return this; + }, + getHintHtml: function () { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field) { + html = field.$el.find(".glyphicon-info-sign"); + } + return $(html); + }, + getSummary: function (col) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid") { + return field.getSummary(col); + } + return this; + }, + getNumberRows: function () { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") === "grid") { + return field.getNumberRows(); + } + return this; + }, + addRow: function (data) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") === "grid") { + field.addRow(data, data ? data.length > 0 : false); + } + return this; + }, + deleteRow: function (row) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid") { + if (!row) { + row = field.getNumberRows(); + } + field.deleteRow(row); + } + return this; + }, + onBeforeAdd: function () { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid") { + if (typeof handler === "function") { + field.setOnBeforeAddCallback(handler); + } + } + }, + onAddRow: function (handler) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid") { + if (typeof handler === "function") { + field.setOnAddRowCallback(handler); + } + } + }, + onShowRowDialog: function (handler) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid" && PMDynaform.core.ProjectMobile) { + if (typeof handler === "function") { + field.setOnShowRowDialog(handler); + } + } + }, + onDeleteRow: function (handler) { + var field = getFieldById(this.attr("id")) || null, html = []; + if (field && field.model.get("type") == "grid") { + if (typeof handler === "function") { + field.setOnDeleteRowCallback(handler); + } + } + }, + hideColumn: function (col) { + var field = getFieldById(this.attr("id")) || null; + if (field && field.model.get("type") === "grid") { + field.hideColumn(parseInt(col, 10)); + } + }, + showColumn: function (col) { + var field = getFieldById(this.attr("id")) || null; + if (field && field.model.get("type") === "grid") { + field.showColumn(parseInt(col, 10)); + } + }, + getData: function () { + var field = getFieldById(this.attr("id")) || null, val; + if (field && field.getData) { + return field.getData(); + } + return this; + }, + getDataLabel: function () { + var field = getFieldById(this.attr("id")) || null, val; + if (field && field.getDataLabel) { + return field.getDataLabel(); + } + return this; + }, + getForm: function () { + var form; + if (this.length) { + form = getFormById(this.attr('id') || '') || null; + return form; + } + }, + submitForm: function () { + var project, + form = this.getForm(); + if (form) { + project = form.project; + if (project && !project.isMobile()) { + if (form.isValid()) { + form.submitNextStep(); + } + } else { + form.onSubmit(); + } + } + }, + /** + * Saves form's data + * @returns {jQuery} + */ + saveForm: function () { + var form; + form = getFormById(this.attr("id")); + if (form) { + form.saveForm(); + } + return this; + }, + /** + * Set a callback in submit action + * @param callback + * @returns {jQuery} + */ + setOnSubmit: function (callback) { + var form; + form = getFormById(this.attr("id")); + if (form) { + form.setOnSubmit(callback); + } + return this; + }, + _getJSONFormValues: function (elements) { + var i; + var data = {}; + if (elements.length > 0) { + for (i = 0; i < elements.length; i += 1) { + data[elements[i].name] = elements[i].value; + } + } + return data; + }, + /** + * This is a help function to close the form, supported for mobile version + * @returns {jQuery} + */ + closeForm: function () { + var form = getFormById(this.attr("id")); + if (form && form instanceof PMDynaform.view.FormPanel) { + form.close(); + } + return this; + }, + /** + * Show Modal Loading + * @returns {jQuery} + */ + showFormModal: function () { + var form = this.getForm(), modal; + if (form) { + modal = form.project.modalProgress; + modal.render(); + } + return this; + }, + /** + * Hide Modal Loading + * @returns {jQuery} + */ + hideFormModal: function () { + var form = this.getForm(), modal; + if (form) { + modal = form.project.modalProgress; + modal.hide(); + } + return this; + }, + /** + * Hide New Button of the Grid + * @returns {jQuery} + */ + hideNewButton: function () { + var field = getFieldById(this.attr("id")) || null, + actionButton = "add"; + if (field && field.model.get("type") === "grid") { + field.hideButton(actionButton); + } + return this; + }, + /** + * Show New Button of the Grid + * @returns {jQuery} + */ + showNewButton: function () { + var field = getFieldById(this.attr("id")) || null, + actionButton = "add"; + if (field && field.model.get("type") === "grid") { + field.showButton(actionButton); + } + return this; + }, + /** + * Clear Content File with params + * With out params clear all grid's rows + * @param row + * @param col + * @returns {jQuery} + */ + clear: function (row, col) { + var field = getFieldById(this.attr("id")) || null, + type; + if (field) { + type = field.model.get("type"); + if (type === "grid") { + if (row === undefined && col === undefined) { + field.clearAllRows(); + } else { + field.clearContent(row, col); + } + } else { + field.clearContent(); + } + } + return this; + }, + /** + * Get Instance by Id (Form or Field) + * @returns {*} + */ + getIntanceById: function (idItem) { + var idInstance = idItem || null, + instanceResult = getFormById(idInstance) || getFieldById(idInstance); + return instanceResult || null; + }, + /** + * Returns all the forms fields, including the ones in any nested subform. + * @param id The form's id. + * @returns {ArrayPMDynaform.view.Field} + */ + getFields: function (id) { + var form = getFormById(this.attr("id")) + || getFieldById(this.attr("id")); + + return (form && form.getAllFields()) || []; + }, + /** + * Enables the fixed location helper function + * @returns {ArrayPMDynaform.view.Field} + */ + enableFixedLocationGeomap: function () { + var field = getFieldById(this.attr("id")) || null; + if (field && typeof field.model.setFixedLocation === 'function' + && PMDynaform.core.ProjectMobile) { + field.model.setFixedLocation(true); + } + return this; + }, + /** + * Disables the fixed location helper function + * @returns {ArrayPMDynaform.view.Field} + */ + disableFixedLocationGeomap: function () { + var field = getFieldById(this.attr("id")) || null; + if (field && typeof field.model.setFixedLocation === 'function' + && PMDynaform.core.ProjectMobile) { + field.model.setFixedLocation(false); + } + return this; + } +}); +(function () { + var InputsValidation = function () { + var config = { + "data": { + "name": "", + "description": "", + "items": [ + { + "type": "form", + "variable": "", + "var_uid": "", + "dataType": "", + "id": "", + "name": "", + "description": "", + "mode": "edit", + "script": "", + "language": "en", + "externalLibs": "", + "printable": false, + "items": [], + "variables": [] + } + ] + }, + "delIndex": 0, + "dynaformUid": "", + "keys": { + "server": (location.protocol + "//" + window.location.host), + "projectId": "", + "workspace": "workflow" + }, + "token": { + "accessToken": "", + "expiresIn": 0, + "tokenType": "bearer", + "scope": "", + "refreshToken": "", + "clientId": "", + "clientSecret": "" + }, + isPreview : false, + isRTL: false, + language: null, + formAction: null, + formAjax: null, + submitRest: false, + globalMode: null, + externalLibs: "", + renderTo: document.body, + onLoad: new Function() + }; + return { + getDefaultData : function(){ + return config; + } + }; + }; + PMDynaform.extendNamespace("PMDynaform.util.InputsValidation", InputsValidation); +}()); + +(function () { + /** + * Class handler for events in PMDYNAFORM + * Object CHANNEL + * { + * channel:"channelName", + * type: "joinFork", + * callback: function(){}, + * events: [ + * { + * event: "eventName", + * complete: true, + * payload: {} + * } + * ] + * } + * + */ + var EventBus = function (options) { + this.bus = _.extend({}, Backbone.Events); + this.channels = {}; + this.topics = []; + }; + /** + * Emit events based in Redux Framework + * @param event + * { + * channel: "", + * event: "", + * payload: "", + * } + */ + EventBus.prototype.emit = function (event) { + this.bus.trigger(event.channel || "default", event); + }; + /** + * Create a channel for event bus + * @param {*} t + * @returns {EventBus} + */ + EventBus.prototype.createChannel = function (t) { + t.channel = t.channel || "default"; + if (!this.channels[t.channel]) { + this.channels[t.channel] = []; + } + this.channels[t.channel].push(t); + return this; + }; + /** + * Subscriber for callback in a channel in some TYPE (joinFork|joinForkTwice) + * INPUT + * { + * channel: "", + * type: "joinFork", + * id:"", + * events:[{ + * event:"event1", + * queue:[{payload: ""}] + * }], + * callback: ()=>{} + * } + * @param {*} t + */ + EventBus.prototype.subscribe = function (t) { + var that = this, isDefined = true; + t.channel = t.channel || "default"; + if (!this.channels[t.channel]) { + this.channels[t.channel] = []; + isDefined = false; + } + this.channels[t.channel].push(t); + if (!isDefined) { + PMDynaform.EventBus.on(t.channel, function (payload) { + var arr = that.channels[t.channel]; + payload.channel = payload.channel || "default"; + if (payload && payload.channel == t.channel) { + _.forEach(arr, function (el) { + _.forEach(el.events, function (e) { + if (e.event == payload.event) { + if (!e.queue) { + e.queue = []; + } + e.queue.push({ + payload: payload.payload + }); + + } + }); + that.pipe(el); + }); + that.channels[t.channel] = _.reject(arr, function (el) { + return el.complete && el.deleteOnCompletion; + }); + } + }, t.context); + } + }; + /** + * Executes a type of pipe joinForkTwice or joinFork + * @param {*} el + */ + EventBus.prototype.pipe = function (el) { + var evC = true; + if (el.type == "joinForkTwice") { + _.forEach(el.events, function (e) { + if (!e.queue || !(e.queue.length >= 1 && e.queue.length <= 2)) { + evC = false; + } + }); + if (evC) { + _.forEach(el.events, function (e) { + if (e.queue.length == 2) { + e.queue = [_.last(e.queue)]; + } + }); + if (_.isFunction(e.callback)) { + setTimeout(function () { + e.callback(); + }, 10); + } + } + } + + //For joinFork way in EventBus + if (el.type == "joinFork") { + _.forEach(el.events, function (e) { + if (!e.queue || !e.queue.length === 1) { + evC = false; + } + }); + if (evC) { + _.forEach(el.events, function (e) { + e.queue = null; + }); + el.complete = true; + if (_.isFunction(el.callback)) { + setTimeout(function () { + el.callback(); + }, 10); + } + } + } + }; + /** + * Add event to a observable object + * INPUT + * { + * channel: "", + * id:"", + * events:[{ + * event:"event1" + * }] + * } + * @param {String} t + */ + EventBus.prototype.subscribeEventToJoinFork = function (t) { + t.channel = t.channel || "default"; + var observables = this.channels[t.channel]; + if (observables) { + _.forEach(observables, function (o) { + if (o.id == t.id) { + o.events = o.events.concat(t.events); + } + }); + } + return this; + }; + /** + * The method verify if exists in channel a observable id + * @param {String} channel + * @param {String} idObservable + * @returns {*} + */ + EventBus.prototype.verifyObservableChannel = function (channel, idObservable) { + channel = channel || "default"; + var observables = this.channels[channel], + obs; + if (observables) { + obs = _.find(observables, function (o) { + return o.id == idObservable + }); + } + return obs; + }; + /** + * Bind a callback function to an object. The callback will be invoked whenever the event is fired. + * @param event + * @param callback + */ + EventBus.prototype.on = function (event, callback) { + this.bus.on(event, callback); + }; + + /** + * Trigger callbacks for the given event, or space-delimited list of events. Subsequent arguments to trigger will be passed along to the event callbacks. + * @param event + * @param payload + */ + EventBus.prototype.trigger = function (event, payload) { + this.bus.trigger(event, payload); + }; + + /** + * Create a channel Topic with events listeners in BUS + * @param topicStr + * @param events + * @param callback + */ + EventBus.prototype.joinForkTopic = function (topicStr, events, callback) { + var that = this, + topic = { + topic: topicStr, + events: events, + callback: callback + }; + + this.removeTopic(topic); + this.topics.push(topic); + _.forEach(events, function (v) { + var fn = function (payload) { + _.filter(topic.events, function (ev) { + if (ev.event == v.event) { + ev.complete = true; + ev.payload = payload; + } + return ev.event == v.event + }); + + if (_.every(topic.events, function (everyEvent) { + return everyEvent.complete == true; + })) { + topic.callback(); + that.emptyPayloadInTopic(topicStr); + } + }; + v.callback = fn; + that.bus.on(topicStr + "/" + v.event, fn); + }); + }; + + /** + * Remove all payloads of events in TOPIC + * @param topic + */ + EventBus.prototype.emptyPayloadInTopic = function (topic) { + var that = this; + _.find(this.topics, function (t) { + if (t.topic == topic) { + _.forEach(t.events, function (e) { + e.payload = null; + }); + } + return t.topic == topic; + }); + }; + + /** + * Remove all listener from topic + * @param topic + */ + EventBus.prototype.removeTopic = function (topic) { + var that = this, + nTopics; + nTopics = _.reject(this.topics, function (t) { + if (t.topic == topic) { + _.forEach(t.events, function (e) { + that.bus.off(t.topic + "/" + e.event); + }); + } + return t.topic == topic; + }); + this.topics = nTopics; + }; + + /** + * Create only topic without events + * @param topic + * @param callback + */ + EventBus.prototype.callbackJoinForkTopic = function (obj) { + var topic, + fTop = _.find(this.topics, function (top) { + if (top.topic == obj.topic) { + top.callback = obj.callback; + } + return top.topic == obj.topic; + }); + if (!fTop) { + topic = { + topic: obj.topic, + events: [], + callback: obj.callback + }; + this.topics.push(topic); + } + }; + + /** + * Add events to Join Topic + * @param topic + * @param event + * @param callback + */ + EventBus.prototype.addJoinForkTopic = function (obj) { + var topic, + that = this, + fTop = _.find(this.topics, function (top) { + return top.topic == obj.topic; + }); + if (!fTop) { + topic = { + topic: obj.topic, + events: [], + callback: null + }; + this.topics.push(topic); + } + + _.find(this.topics, function (t) { + //Find topic + if (t.topic == obj.topic) { + //Find event + var ev = _.find(t.events, function (e) { + return e.event == obj.event; + }); + if (!ev) { + t.events.push({ + event: obj.event, + complete: false, + payload: null + }); + var strTopicEvent = obj.topic + "/" + obj.event; + PMDynaform.EventBus.on(strTopicEvent, function (payload) { + var filterEvent = _.filter(t.events, function (ev) { + if (ev.event == obj.event) { + ev.complete = true; + ev.payload = payload; + } + return ev.event == obj.event; + }); + + if (_.every(t.events, function (everyEvent) { + return everyEvent.complete == true; + })) { + t.callback(); + that.emptyPayloadInTopic(t.topic); + } + }); + } + + } + return t.topic == obj.topic; + }); + }; + + PMDynaform.extendNamespace("PMDynaform.EventBus", new EventBus()); +}()); +(function () { + /** + * I18N Manager + * @type {{indexes: {}, repository: {}, observers: Array, defaultLanguage: string, currentLanguage: string, + * contextIndex: {}, setDefaultLanguage: setDefaultLanguage, MD5: MD5}} + */ + var I18N = { + indexes: {}, + repository: {}, + observers: [], + defaultLanguage: 'en', + currentLanguage: 'en', + contextIndex: {}, + setDefaultLanguage: function (lang) { + this.defaultLanguage = lang; + }, + MD5: function (string) { + + function RotateLeft(lValue, iShiftBits) { + return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); + } + + function AddUnsigned(lX, lY) { + var lX4, + lY4, + lX8, + lY8, + lResult; + + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); + if (lX4 & lY4) { + return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + } + if (lX4 | lY4) { + if (lResult & 0x40000000) { + return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); + } else { + return (lResult ^ 0x40000000 ^ lX8 ^ lY8); + } + } else { + return (lResult ^ lX8 ^ lY8); + } + } + + function F(x, y, z) { + return (x & y) | ((~x) & z); + } + + function G(x, y, z) { + return (x & z) | (y & (~z)); + } + + function H(x, y, z) { + return (x ^ y ^ z); + } + + function I(x, y, z) { + return (y ^ (x | (~z))); + } + + function FF(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function GG(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function HH(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function II(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + function ConvertToWordArray(string) { + var lWordCount, + lMessageLength = string.length, + lNumberOfWords_temp1 = lMessageLength + 8, + lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64, + lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16, + lWordArray = Array(lNumberOfWords - 1), + lBytePosition = 0, + lByteCount = 0; + + while (lByteCount < lMessageLength) { + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); + lByteCount++; + } + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; + + return lWordArray; + }; + + function WordToHex(lValue) { + var WordToHexValue = "", + WordToHexValue_temp = "", + lByte, + lCount; + + for (lCount = 0; lCount <= 3; lCount += 1) { + lByte = (lValue >>> (lCount * 8)) & 255; + WordToHexValue_temp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2, 2); + } + return WordToHexValue; + }; + + function Utf8Encode(string) { + var utftext = "", + n, + c; + + string = string.replace(/\r\n/g, "\n"); + for (n = 0; n < string.length; n += 1) { + c = string.charCodeAt(n); + if (c < 128) { + utftext += String.fromCharCode(c); + } + else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } + else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + } + + return utftext; + }; + + var x, + k, + AA, + BB, + CC, + DD, + a, + b, + c, + d, + S11 = 7, + S12 = 12, + S13 = 17, + S14 = 22, + S21 = 5, + S22 = 9, + S23 = 14, + S24 = 20, + S31 = 4, + S32 = 11, + S33 = 16, + S34 = 23, + S41 = 6, + S42 = 10, + S43 = 15, + S44 = 21, + temp; + + string = Utf8Encode(string); + + x = ConvertToWordArray(string); + + a = 0x67452301; + b = 0xEFCDAB89; + c = 0x98BADCFE; + d = 0x10325476; + + for (k = 0; k < x.length; k += 16) { + AA = a; + BB = b; + CC = c; + DD = d; + a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); + d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); + c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); + b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); + a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); + d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); + c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); + b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); + a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); + d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); + c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); + b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); + a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); + d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); + c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); + b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); + a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); + d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); + c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); + b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); + a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); + d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); + c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); + b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); + a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); + d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); + c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); + b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); + a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); + d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); + c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); + b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); + a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); + d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); + c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); + b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); + a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); + d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); + c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); + b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); + a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); + d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); + c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); + b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); + a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); + d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); + c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); + b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); + a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); + d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); + c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); + b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); + a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); + d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); + c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); + b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); + a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); + d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); + c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); + b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); + a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); + d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); + c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); + b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); + a = AddUnsigned(a, AA); + b = AddUnsigned(b, BB); + c = AddUnsigned(c, CC); + d = AddUnsigned(d, DD); + } + + temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); + + return temp.toLowerCase(); + } + }; + /** + * Set Deafult Language + * @param lang + * @returns {I18N} + */ + I18N.setDefaultLanguage = function (lang) { + this.defaultLanguage = lang; + if (this.repository[lang]) { + this.loadDefaultLanguege(this.repository[lang]); + } + return this; + }; + /** + * Load Language + * @param data + * @param lang + * @param loaded + * @returns {I18N} + */ + I18N.loadLanguage = function (data, lang, loaded) { + if (typeof data != 'object') { + throw new Error("loadLanguage(): the first parameter is not valid, should be 'object'"); + } + if (typeof lang != 'string') { + throw new Error("loadLanguage(): the second parameter is not valid, should be 'string'"); + } + if (this.defaultLanguage == lang) { + this.loadDefaultLanguege(data); + } + if (!loaded) { + this.repository[lang] = data; + } + return this; + }; + /** + * Load Default Language + * @param data + * @returns {I18N} + */ + I18N.loadDefaultLanguege = function (data) { + var label, + value; + + this.indexes = {}; + this.contextIndex = {}; + for (label in data) { + if (!this.indexes[data[label]]) { + this.indexes[data[label]] = label; + } else { + if (!this.contextIndex[data[label]]) { + value = this.indexes[data[label]]; + this.contextIndex[data[label]] = {}; + this.contextIndex[data[label]]['0'] = value; + this.contextIndex[data[label]]['1'] = label; + } else { + var n = this.getSizeJson(this.contextIndex[data[label]]); + this.contextIndex[data[label]][n.toString()] = label; + } + } + } + return this; + }; + /** + * Get Size Json + * @param json + * @returns {I18N} + */ + I18N.getSizeJson = function (json) { + var size = 0, + i; + + if (typeof json == 'object') { + for (i in json) { + size += 1; + } + return size; + } else { + throw new Error('the parameter is not a JSON'); + } + return this; + }; + /** + * Set Current Language + * @param lang + * @returns {I18N} + */ + I18N.setCurrentLanguage = function (lang) { + this.currentLanguage = lang; + if (this.repository[lang]) { + this.loadLanguage(this.repository[lang], lang, true); + } + return this; + }; + /** + * Get Translate value + * @param variablesLabels + * @returns {string} + */ + I18N.translate = function (variablesLabels) { + var translation = String(this), + index, + i; + + index = I18N.indexes[this]; + if (index && I18N.repository[I18N.currentLanguage][index]) { + translation = I18N.repository[I18N.currentLanguage][index]; + } + if (variablesLabels) { + for (i = 0; i < variablesLabels.length; i += 1) { + translation = translation.replace("{" + i + "}", String(variablesLabels[i])); + } + } + return translation; + }; + /** + * Get Translate Context + * @param value + * @returns {*} + */ + I18N.translateContext = function (value) { + var translation, + index, + label; + + if (typeof value != 'number') { + for (label in I18N.contextIndex[this]) { + if (I18N.contextIndex[this][label] == value) { + index = I18N.contextIndex[this][label]; + } + } + } else { + index = I18N.contextIndex[this][value.toString()]; + } + + if (index) { + translation = I18N.repository[I18N.currentLanguage][index]; + return translation; + } + + return String(this); + }; + // Declarations created to instantiate in NodeJS environment + if (typeof exports !== 'undefined') { + module.exports = I18N; + } + + PMDynaform.extendNamespace("PMDynaform.lang.I18N", I18N); + +}()); +/** + * Class representing a Translation + * @constructor + */ +var Translation = function () { + this.lang = null; + Translation.prototype.initialize.call(this); +}; +/** + * A module representing a Translation + **/ +Translation.prototype = { + /** + * Sets the lang + * @param {string} lang + */ + setLang: function (lang) { + this.lang = lang; + return this; + }, + /** + * Get the Lang value + * @returns {null|*|string} The Lang value + */ + getLang: function () { + return this.lang || 'en'; + }, + /** + * initialize Translation + */ + initialize: function () { + String.prototype.translate = PMDynaform.lang.I18N.translate; + String.prototype.translateContext = PMDynaform.lang.I18N.translateContext; + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (elt /*, from*/) { + var len = this.length >>> 0; + + var from = Number(arguments[1]) || 0; + from = (from < 0) + ? Math.ceil(from) + : Math.floor(from); + if (from < 0) + from += len; + + for (; from < len; from += 1) { + if (from in this && + this[from] === elt) + return from; + } + return -1; + }; + } + return this; + }, + /** + * Get Language + * @returns {string} + */ + getLanguageFromWindowLocation: function () { + var url, + lang = 'en'; + + if (window.parent) { + try { + url = window.parent.location.pathname.split('/'); + } catch (e) { + url = window.location.pathname.split('/'); + } + lang = url[2] || lang; + } + return lang; + }, + /** + * Load Language + * @param data + * @param lang + * @param loaded + * @returns {Translation} + */ + loadLanguage: function (data, lang, loaded) { + PMDynaform.lang.I18N.loadLanguage(data, lang, loaded); + return this; + }, + /** + * Set Current Language + * @param lang + * @returns {Translation} + */ + setCurrentLanguage: function (lang) { + PMDynaform.lang.I18N.setCurrentLanguage(lang); + return this; + }, + /** + * Set Default Language + * @param lang + * @returns {Translation} + */ + setDefaultLanguage: function (lang) { + PMDynaform.lang.I18N.setDefaultLanguage(lang); + return this; + }, + /** + * Load Translation + * @param lang + * @returns {Translation} + */ + loadTranslation: function (lang) { + this.setLang(lang || this.getLanguageFromWindowLocation()); + /** + * To maintain compatibility we use the same MAFE translation array. + * Now the translations of PMDynaform will also be in the same array. + */ + if (typeof __TRANSLATIONMAFE != 'undefined' && typeof __TRANSLATIONMAFE[this.getLang()] != 'undefined') { + this.loadLanguage(__TRANSLATIONMAFE.en, 'en'); + this.loadLanguage(__TRANSLATIONMAFE[this.getLang()], this.getLang()); + + this.setDefaultLanguage('en'); + this.setCurrentLanguage(this.getLang()); + } + return this; + }, +}; +PMDynaform.extendNamespace("PMDynaform.lang.Translation", Translation); + +var translatePMDynaform = new Translation(); +translatePMDynaform.loadTranslation(); +/** + * Singleton for implement the flow Case independent + * @type {{VERSION: string, view: {}, model: {}, collection: {}, Extension: {}, restData: {}, activeProject: null, FLashMessage: null}} + */ +var xCase = { + VERSION: "0.1.0", + view: {}, + model: {}, + collection: {}, + Extension: {}, + restData: {}, + activeProject: null, + FLashMessage: null +}; + +xCase.extendNamespace = function (path, newClass) { + var current, + pathArray, + extension, + i; + + if (arguments.length !== 2) { + throw new Error("xCase.extendNamespace(): method needs 2 arguments"); + } + + pathArray = path.split('.'); + if (pathArray[0] === 'xCase') { + pathArray = pathArray.slice(1); + } + current = xCase; + + // create the 'path' namespace + for (i = 0; i < pathArray.length - 1; i += 1) { + extension = pathArray[i]; + if (typeof current[extension] === 'undefined') { + current[extension] = {}; + } + current = current[extension]; + } + + extension = pathArray[pathArray.length - 1]; + if (current[extension]) { + + } + current[extension] = newClass; + return newClass; +}; +(function () { + /* + * @param {String} + * The following key selectors are availables for the + * getField and getGridField methods + * - Using '#', is possible select a field with the identifier of the field + * - Using ''. is possible select a field with the className of the field + * - Putting 'attr[name="my-name"]' is possible select fields with the same name attribute + **/ + var Selector = function (options) { + this.onSupportSelectorFields = null; + this.fields = {}; + this.queries = []; + this.form = {}; + + Selector.prototype.init.call(this, options); + }; + /** + * Initializes properties of the selector + * @param options + */ + Selector.prototype.init = function (options) { + var defaults = { + fields: {}, + queries: [], + form: {}, + onSupportSelectorFields: { + text: "onTextField", + textarea: "onTextAreaField" + } + }; + + $.extend(true, defaults, options); + + this.setOnSupportSelectorFields(defaults.onSupportSelectorFields) + .setFields(defaults.fields) + .setForms(defaults.form) + .applyGlobalSelectors(); + }; + Selector.prototype.addQuery = function (query) { + if (typeof query === "string") { + this.queries.push(query); + } else { + throw new Error("The query selector must be a string"); + } + + return this; + }; + Selector.prototype.setOnSupportSelectorFields = function (support) { + if (typeof support === "object") { + this.onSupportSelectorFields = support; + } else { + throw new Error("The parameter for the support fields is wrong"); + } + + return this; + }; + /** + * Sets fields + * @param fields + * @returns {Selector} + */ + Selector.prototype.setFields = function (fields) { + if (typeof fields === "object") { + this.fields = fields; + } + return this; + }; + /** + * Sets form + * @param form + * @returns {Selector} + */ + Selector.prototype.setForms = function (form) { + if (typeof form === "object") { + this.form = form; + } + return this; + }; + Selector.prototype.onTextField = function () { + return this; + }; + Selector.prototype.onTextAreaField = function () { + return this; + }; + /** + * Gets field instance searched + * @param selectorId + * @returns {object || null} + */ + Selector.prototype.findFieldById = function (selectorId) { + return selectorId && this.fields.hasOwnProperty(selectorId) ? + this.fields[selectorId] : null; + }; + /** + * Gets form instance by id + * @param selectorId + * @returns {object || null} + */ + Selector.prototype.findFormById = function (selectorId) { + return selectorId && this.form.model.get("id") === selectorId ? + this.form : null; + }; + /** + * Gets fields searched by name + * @param selectorAttr + * @returns {Array} + */ + Selector.prototype.findFieldByName = function (selectorAttr) { + var prop, + fieldFinded = []; + + for (prop in this.fields) { + if (this.fields[prop].model.get("name") === selectorAttr) { + fieldFinded.push(this.fields[prop]); + } + } + return fieldFinded; + }; + /** + * Gets fields by attribute + * @param parameter + * @param value + * @returns {Array} + */ + Selector.prototype.findFieldByAttribute = function (parameter, value) { + var prop, + fieldFinded = [], + modelField; + for (prop in this.fields) { + modelField = this.fields[prop].model; + if (value && modelField.attributes.hasOwnProperty(parameter) && modelField.get(parameter) === value) { + fieldFinded.push(this.fields[prop]); + } + } + return fieldFinded; + }; + /** + * findFieldByVariable: Gets a field considering the variable name as a parameter + * @returns {object} + */ + Selector.prototype.findFieldByVariable = function(selectorAttr) { + var prop, + fieldFinded; + for (prop in this.fields) { + if (this.fields[prop].model.get("variable") === selectorAttr) { + fieldFinded = this.fields[prop]; + break; + } + } + return fieldFinded; + }; + Selector.prototype.applyGlobalSelectors = function () { + var that = this; + + window.getFieldByAttribute = function (attr, value) { + that.addQuery(attr + ": " + value); + return that.findFieldByAttribute(attr, value); + }; + + window.getFieldById = function (query) { + that.addQuery("id: " + query); + return that.findFieldById(query); + }; + + window.getFieldByName = function (query) { + that.addQuery("name: " + query); + return that.findFieldByName(query); + }; + + window.getFormById = function (query) { + that.addQuery("id: " + query); + return that.findFormById(query); + }; + /** + * getFieldByVariable :Gets a field searched by the variable + * @returns {object|undefined} + */ + window.getFieldByVariable = function(query) { + that.addQuery("name: " + query); + return that.findFieldByVariable(query); + }; + /** + * get the subform with the supplied id + * @param id + * @returns {PMDynaform.view.SubForm|null} + */ + window.getSubformById = function (id) { + return that.findFieldById(id); + }; + return this; + }; + + PMDynaform.extendNamespace("PMDynaform.core.Selector", Selector); +}()); + +(function () { + + var Utils = { + generateID: function () { + var rand = function (min, max) { + // Returns a random number + // + // version: 1109.2015 + // discuss at: http://phpjs.org/functions/rand + // + original by: Leslie Hoare + // + bugfixed by: Onno Marsman + // % note 1: See the commented out code below for a + // version which will work with our experimental + // (though probably unnecessary) srand() function) + // * example 1: rand(1, 1); + // * returns 1: 1 + + // fix for jsLint + // from: var argc = arguments.length; + if (typeof min === "undefined") { + min = 0; + } + if (typeof max === "undefined") { + max = 999999999; + } + return Math.floor(Math.random() * (max - min + 1)) + min; + }, + uniqid = function (prefix, more_entropy) { + var php_js = {}, + retId, + formatSeed; + // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + revised by: Kankrelune (http://www.webfaktory.info/) + // % note 1: Uses an internal counter (in php_js global) to avoid collision + // * example 1: uniqid(); + // * returns 1: 'a30285b160c14' + // * example 2: uniqid('foo'); + // * returns 2: 'fooa30285b1cd361' + // * example 3: uniqid('bar', true); + // * returns 3: 'bara20285b23dfd1.31879087' + if (typeof prefix === 'undefined') { + prefix = ""; + } + + formatSeed = function (seed, reqWidth) { + var tempString = "", + i; + + seed = parseInt(seed, 10).toString(16); // to hex str + if (reqWidth < seed.length) { // so long we split + return seed.slice(seed.length - reqWidth); + } + if (reqWidth > seed.length) { // so short we pad + // jsLint fix + tempString = ""; + for (i = 0; i < 1 + (reqWidth - seed.length); i += 1) { + tempString += "0"; + } + return tempString + seed; + } + return seed; + }; + + // BEGIN REDUNDANT + if (!php_js) { + php_js = {}; + } + // END REDUNDANT + if (!php_js.uniqidSeed) { // init seed with big random int + php_js.uniqidSeed = Math.floor(Math.random() * 0x75bcd15); + } + php_js.uniqidSeed += 1; + + retId = prefix; // start with prefix, add current milliseconds hex string + retId += formatSeed(parseInt(new Date().getTime() / 1000, 10), 8); + retId += formatSeed(php_js.uniqidSeed, 5); // add seed hex string + if (more_entropy) { + // for more entropy we add a float lower to 10 + retId += (Math.random() * 10).toFixed(8).toString(); + } + + return retId; + }, + sUID; + + do { + sUID = uniqid(rand(0, 999999999), true); + sUID = sUID.replace('.', '0'); + } while (sUID.length !== 32); + + return "PMD-" + sUID; + }, + generateName: function (type) { + return type + "[" + PMDynaform.core.Utils.generateID() + "]"; + }, + /** + * validate JSON parse + * @param str + * @returns {boolean} + */ + isJsonAndParse: function (str) { + var result; + try { + result = JSON.parse(str); + } catch (e) { + result = str.split(','); + } + return result; + }, + /** + * check if it is a valid version of Internet Explorer for pmdynaform + */ + checkValidIEVersion: function () { + var version = false, + appName = navigator.appName, + appVersion = navigator.appVersion; + if (appName == "Netscape") { + if (appVersion.indexOf('Trident') !== -1){ + version = 11; + } + if(appVersion.indexOf('Edge') !== -1){ + version = 12; + } + } + return version; + } + }; + PMDynaform.extendNamespace("PMDynaform.core.Utils", Utils); + +}()); +(function () { + /** + * @class PMDynaform.util.ExternalLibraries + * Class that manages all external resources used and presented in json definition. + * + * The external libraries are used into a form as a externalLib property. + * + * The external library has the following types: + * - Regular js files + * - Regular css files + * - Images + * Example to use: + * // e.g. + * // let's assume that there are an arroy of external resources + * // let's assume that callback is callback function to render after all resources has been load + * + * this.externalLibraries = new PMDynaform.util.ExternalLibraries({ + * "libs": libs, + * "afterLoad": callback + * }); + * @param options + * @constructor + */ + var ExternalLibraries = function (options) { + this.libs = []; + this.cachedLibs = []; + this.afterLoad = null; + + ExternalLibraries.prototype.init.call(this, options); + }; + /** + * This function init the class External libraries + * * @param options + * @returns {CaseManager} + */ + ExternalLibraries.prototype.init = function (options) { + var defaults = { + "libs": [], + "afterLoad": null + }; + defaults = _.extend(defaults, options); + this.setLibs(defaults.libs) + .setAfterLoad(defaults.afterLoad); + return this; + }; + /** + * Loads all scripts, an arroy of all libraries is used to do that + * after has been load completly all libraries the collback afterLoad is executed + * @returns {ExternalLibraries} + */ + ExternalLibraries.prototype.setExternalLibreries = function (i) { + var that = this, link; + if (that.libs && i < that.libs.length) { + link = that.onLoadScript(that.libs[i]); + if (link) { + link.onload = function () { + that.setExternalLibreries(i + 1); + }; + link.onerror = function () { + console.error('invalid link :' + that.libs[i].url); + that.setExternalLibreries(i + 1); + }; + } else { + that.setExternalLibreries(i + 1); + } + } else { + this.afterLoad(); + } + }; + /** + * Hook to execute all scripts and call loadjscssfile method + * to load the external libraries and that is stored in cachedLibs property + * @param lib + * @returns {ExternalLibraries} + */ + ExternalLibraries.prototype.onLoadScript = function (lib) { + var type = lib.url.substring(lib.url.lastIndexOf(".") + 1); + this.cachedLibs.push(lib); + return this.loadjscssfile(lib.url, type); + }; + /** + * Append css or js external libraries to html head + * if filetype is not js or css return null, + * @param filename + * @param filetype + * @returns {*} + */ + ExternalLibraries.prototype.loadjscssfile = function (filename, filetype) { + var fileref = null; + if (filetype === "js") { //if filename is a external JavaScript file + fileref = document.createElement('script'); + fileref.setAttribute("type", "text/javascript"); + fileref.setAttribute("src", filename); + } else if (filetype === "css") { //if filename is an external CSS file + fileref = document.createElement("link"); + fileref.setAttribute("rel", "stylesheet"); + fileref.setAttribute("type", "text/css"); + fileref.setAttribute("href", filename); + } + if (fileref && fileref !== "undefined") { + document.getElementsByTagName("head")[0].appendChild(fileref); + } + return fileref; + }; + + /** + * Sets the array libs property + * @param libs + * @returns {ExternalLibraries} + */ + ExternalLibraries.prototype.setLibs = function (libs) { + if (_.isArray(libs)) { + this.libs = libs; + } + return this; + }; + /** + * Sets the afterLoad callback as a external library property + * @param callback + * @returns {ExternalLibraries} + */ + ExternalLibraries.prototype.setAfterLoad = function (callback) { + if (_.isFunction(callback)) { + this.afterLoad = callback; + } + return this; + }; + /** + * Gets the External library cachedLibs property + * @returns {Array} + */ + ExternalLibraries.prototype.getCachedLibs = function () { + return this.cachedLibs; + }; + /** + * Clean the External library cachedLibs property + */ + ExternalLibraries.prototype.clearCachedLibs = function () { + this.cachedLibs = []; + }; + + PMDynaform.extendNamespace("PMDynaform.util.ExternalLibraries", ExternalLibraries); +}()); +(function () { + /** + * Jquery Transport for download file type Blob. + */ + jQuery.ajaxTransport("binary", function(options, originalOptions, jqXHR) { + if (window.FormData && options && options.dataType && (options.dataType === 'binary' || options.dataType instanceof Blob) && + options.url && options.type && options.headers && + options.hasOwnProperty('async') && typeof options.async === "boolean") { + return { + send: function (headers, callback) { + var xhr = new XMLHttpRequest(), + url = options.url, + type = options.type, + asynchronous = options.async, + headers = options.headers, + dataType = options.responseType || 'blob', + data = {}; + xhr.addEventListener('load', function () { + data[options.dataType] = xhr.response; + callback(xhr.status, xhr.statusText, data, xhr.getAllResponseHeaders()); + }); + xhr.open(type, url, asynchronous); + xhr.setRequestHeader('Authorization', headers.authorization); + xhr.responseType = dataType; + xhr.send(data); + }, + abort: function () { + jqXHR.abort(); + } + }; + } + }); + +}()); +(function () { + var messageRequired = "This field is required.".translate(), + Validators = { + requiredText: { + message: messageRequired, + fn: function (val) { + var value = val; + if (_.isNumber(val)) { + value = val.toString(); + } + value = value.trim(); + if (value === null || value.length === 0 || /^\s+$/.test(value)) { + return false; + } + return true; + } + }, + requiredDropDown: { + message: messageRequired, + fn: function (value) { + value = typeof value === 'string' ? value.trim() : value; + return !!value || typeof value === 'number'; + } + }, + requiredCheckBox: { + message: messageRequired, + fn: function (value) { + if (typeof value === "number") { + var bool = (value > 0) ? true : false; + } else { + bool = false; + } + return bool; + } + }, + requiredCheckGroup: { + message: messageRequired, + fn: function (value) { + if (typeof value === "number") { + var bool = (value > 0) ? true : false; + } else { + bool = false; + } + return bool; + } + }, + requiredFile: { + message: messageRequired, + fn: function (value) { + value = value.trim(); + if (value === null || value.length === 0 || /^\s+$/.test(value)) { + return false; + } + return true; + } + }, + requiredRadioGroup: { + message: messageRequired, + fn: function (value) { + value = typeof value === 'string' ? value.trim() : value; + return !!value || typeof value === 'number'; + } + }, + integer: { + message: "Invalid value for the integer field".translate(), + mask: /[\d\.]/i, + fn: function (n) { + return (typeof n === 'string') ? /^-?\d+$/.test(n) : !isNaN(n = parseFloat(n, 10) && n % 1 === 0); + } + }, + float: { + message: "Invalid value for the float field".translate(), + fn: function (n) { + return /^-?\d+\.?\d*$/.test(n); + } + }, + string: { + fn: function (string) { + return true; + } + }, + boolean: { + fn: function (string) { + return true; + } + }, + maxLength: { + message: "The maximum length are ".translate(), + fn: function (value, maxLength) { + var maxLen; + if (typeof maxLength !== "number") { + throw new Error("The parameter maxlength is not a number".translate()); + } + maxLen = (value.toString().length <= maxLength) ? true : false; + return maxLen; + } + }, + /** + * validate that there is at least one row on the grid + * return [boolean] + */ + requiredGrid: { + message: "Information Required".translate(), + fn: function (value) { + if (value === null || value === 0) { + return false; + } + return true; + } + } + }; + + PMDynaform.extendNamespace("PMDynaform.core.Validators", Validators); +}()); + +(function () { + var ModalProgressBar = Backbone.View.extend({ + timeHide: 1000, + template: _.template($("#tpl-modal-global").html()), + initialize: function () { + //TODO: no need params. + }, + render: function () { + if ($('#modalProgressBar').length) { + $('#modalProgressBar').remove(); + } + $('body').append(this.template()); + this.show(); + return this; + }, + show: function () { + $('#modalProgressBar').modal({backdrop: 'static', keyboard: false}, 'show'); + return this; + }, + hide: function () { + if ($('#modalProgressBar').length) { + setTimeout(function () { + $('#modalProgressBar').modal('hide'); + }, this.timeHide); + } + return this; + }, + setTimeHide: function (timeHide) { + this.timeHide = timeHide; + return this; + }, + getTimeHide: function () { + return this.timeHide; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.ModalProgressBar", ModalProgressBar); +}()); +(function () { + var Project = function (options) { + this.model = null; + this.modalProgress = null; + this.view = null; + this.data = null; + this.delIndex = null; + this.fields = null; + this.keys = null; + this.token = null; + this.renderTo = null; + this.urlFormat = null; + this.endPointsPath = null; + this.forms = null; + this.externalLibs = null; + this.externalLibsArray = []; + this.dependentLibraries = null; + this.submitRest = null; + this.formAjax = null; + this.globalMode = null; + this.onSubmitForm = new Function(); + this.language = ""; + this.onBeforePrintHandler = null; + this.onAfterPrintHanlder = null; + this.flashView = null; + this.isRTL = false; + this.isPreview = false; + this.dynaformUid = null; + this.googleMaps = { + key: "" + }; + this.loadDataField = true; + Project.prototype.init.call(this, options); + }; + + Project.prototype.init = function (options) { + var defaults = new PMDynaform.util.InputsValidation(), + that = this; + defaults = jQuery.extend(true, defaults.getDefaultData(), options); + defaults.endPointsPath = { + project: "", + createVariable: "process-variable", + variableList: "process-variable", + /** + * @key {var_uid} Defines the identifier of the variable + * The Endpoint is for get all information about Variable + **/ + variableInfo: "process-variable/{var_uid}", + /** + * @key {var_name} Defines the variable name + * The Endpoint executes the query associated to variable + **/ + executeQuery: "process-variable/{var_name}/execute-query", + /** + * + * @key {field_name} Defines the field name + * The Endpoint uploads a file + **/ + uploadFile: "uploadfile/{field_name}", + executeQuerySuggest: "process-variable/{var_name}/execute-query-suggest", + fileStreaming: "en/neoclassic/cases/casesStreamingFile?actionAjax=streaming&a={caseID}&d={fileId}", + getAllDataCase: "case/{caseID}/variables", + imageDownload: 'light/case/{caseID}/download64', + fileDownload: "case/{caseID}/file/{fileID}", + imageInfo: "light/case/{caseID}/download64", + getImageGeo: "light/case/{caseID}/download64" + }; + defaults.urlFormatMobile = "{server}/api/1.0/{workspace}/{endPointPath}"; + defaults.urlFormat = "{server}/{apiName}/{apiVersion}/{workspace}/{keyProject}/{projectId}/{endPointPath}"; + this.urlFormatStreaming = "{server}/sys{workspace}/{endPointPath}"; + that.setIsRTL(defaults.isRTL); + that.setIsPreview(defaults.isPreview); + $("body").append("
    "); + this.loadExternalLibs(defaults.data, defaults.keys.server, function () { + that.delIndex = defaults.delIndex; + that.setDynaformUID(defaults.dynaformUid); + that.setFormAjax(defaults.formAjax); + that.setBeforePrintHandler(defaults.onBeforePrintHandler); + that.setAfterPrintHandler(defaults.onAfterPrintHandler); + that.setData(defaults.data); + that.setLanguage(); + that.initModalProgress(); + that.setUrlFormat(defaults.urlFormat); + that.setUrlFormatMobile(defaults.urlFormatMobile); + that.setKeys(defaults.keys); + that.setToken(defaults.token); + that.setRenderTo(defaults.renderTo); + that.setEndPointsPath(defaults.endPointsPath); + that.setGoogleMapsSettings(defaults.googleMaps); + that.createWebServiceManager(); + PMDynaform.setActiveProject(that); + that.checkMobileData(); + that.submitRest = defaults.submitRest; + if (!PMDynaform.core.ProjectMobile) { + that.checkGeoMapsLibraries(defaults.onLoad); + } else { + that.checkGeoMapsLibraries(); + } + //stop loading + $("body").find(".pmDynaformLoading").remove(); + }); + }; + Project.prototype.setDynaformUID = function (dynUid) { + var dyn_uid = null; + if (dynUid || dynUid === null) { + dyn_uid = dynUid; + } + this.dynaformUid = dyn_uid; + return this; + }; + /** + * sets the value true if the project is a preview of processmaker + * and false if it is running case + * @param value, true or false + * @returns {Project} + */ + Project.prototype.setIsPreview = function (value) { + if ((typeof value === "boolean") && value) { + this.isPreview = true; + } else { + this.isPreview = false; + } + return this; + }; + /** + * setIsRTL + * if the project is actually owned RTL this fixed property to adds + * a stylesheet to support RTL + */ + Project.prototype.setIsRTL = function (value) { + if (typeof value === "boolean") { + this.isRTL = value; + } else { + if (window.isRTL != undefined && window.isRTL != null) { + this.isRTL = typeof window.isRTL === "boolean" ? window.isRTL : false; + } + } + if (this.isRTL) { + this.addCSSToRTL(); + } else { + this.removeCSSToRTL(); + } + }; + /** + * getIsRTL + * get the value of the property isRTL, this can be true or false + */ + Project.prototype.getIsRTL = function () { + return this.isRTL; + }; + /** + * addCSSToRTL + * add a stylesheet with support of view (right to left) + */ + Project.prototype.addCSSToRTL = function () { + var link = document.createElement("link"); + link.rel = "stylesheet"; + link.id = "rtl-style"; + if (window.pathRTLCss !== undefined && window.pathRTLCss !== null) { + link.href = window.pathRTLCss; + PMDynaform.PATH_RTL_CSS = window.pathRTLCss; + } else { + link.href = PMDynaform.PATH_RTL_CSS || ""; + } + document.head.appendChild(link); + return this; + }; + /** + * Remove CSS RTL + * @returns {Project} + */ + Project.prototype.removeCSSToRTL = function () { + var link = $("#rtl-style"); + if (link) { + link.remove(); + } + return this; + }; + + Project.prototype.setFormAjax = function (params) { + if (params) { + this.formAjax = params; + } + return this; + }; + Project.prototype.getFormAjax = function () { + return this.formAjax; + }; + Project.prototype.initModalProgress = function () { + this.modalProgress = new PMDynaform.view.ModalProgressBar(); + return this; + }; + /** + * @param globalMode + * @returns {Project} + */ + Project.prototype.setGlobalMode = function (globalMode) { + if (globalMode) { + this.globalMode = globalMode; + } + return this; + }; + Project.prototype.checkMobileData = function () { + if (!PMDynaform.core.ProjectMobile) { + this.mobileDataControls = this.loadAllDataCase(); + } + return this; + }; + Project.prototype.setLanguage = function () { + if (window.sysLang) { + this.language = window.sysLang; + } + return this; + }; + + /** + * Loads external libraries, here instance ExternalLibraries class. + * @param jsonForm + * @param callback + */ + Project.prototype.loadExternalLibs = function (jsonForm, server, callback) { + var libs = this.prepareLibsPath(jsonForm, server); + this.externalLibraries = new PMDynaform.util.ExternalLibraries({ + "libs": libs, + "afterLoad": callback + }); + this.externalLibraries.setExternalLibreries(0); + + }; + /** + * Prepare external libraries path + * @returns {Array} + */ + Project.prototype.prepareLibsPath = function (jsonForm, server) { + var expression = /^(?:(http|https):)?(\/{2,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/; + this.getAllExternalLibs(jsonForm, true); + return _.map(this.externalLibsArray, function (lib) { + lib = $.trim(lib); + if (!expression.test(lib) && lib !== "") { + lib = (lib.charAt(0) !== '/') ? '/' + lib : lib; + lib = server + lib; + + } + return { + "url": lib, + "skipCache": true + }; + }); + }; + /** + * Gets all external libraries considering json definition, that method is recursive. + * @param jsonForm + * @param externalLibs + * @param root + * @returns {*} + */ + Project.prototype.getAllExternalLibs = function (jsonForm, root) { + var i, + form, + result = "", + max; + if (root) { + if (_.isArray(jsonForm.items)) { + for (i = 0, max = jsonForm.items.length; i < max; i += 1) { + form = jsonForm.items[i]; + if (form.type === 'form') { + result = (typeof form.externalLibs !== 'undefined' && form.externalLibs !== null) ? + form.externalLibs.replace(/\s+/g, '') : result; + if (result !== "") { + result = result.split(","); + this.externalLibsArray = _.union(this.externalLibsArray, result); + } + if (form.items && form.items.length > 0) { + this.getAllExternalLibs(form.items, false); + } + + } + } + } + } else { + for (i = 0, max = jsonForm.length; i < max; i += 1) { + form = jsonForm[i]; + if (form[0].items && form[0].items.length > 0) { + if (form[0].type === 'form') { + result = (typeof form[0].externalLibs !== 'undefined' && form[0].externalLibs !== null) ? + form[0].externalLibs.replace(/\s+/g, '') : result; + if (result !== "") { + result = result.split(","); + this.externalLibsArray = _.union(this.externalLibsArray, result); + this.getAllExternalLibs(form[0], true); + } + + } + } + } + } + }; + + Project.prototype.setData = function (data) { + if (typeof data === "object") { + this.data = data; + } + if (this.view) { + this.destroy(); + this.loadProject(); + } + return this; + }; + Project.prototype.setData2 = function (data) { + this.view.setData2(data); + return this; + }; + /** + * setAppData Sets the data to the form + * @param {object} Set of valid data for the form + */ + Project.prototype.setAppData = function(data) { + var forms = this.getForms(), + firstForm = 0; + if (_.isArray(forms) && forms.length) { + forms[firstForm].setAppData(data); + } + return this; + }; + Project.prototype.setUrlFormat = function (url) { + if (typeof url === "string") { + this.urlFormat = url; + } + return this; + }; + Project.prototype.setUrlFormatMobile = function (url) { + if (typeof url === "string") { + this.urlFormatMobile = url; + } + return this; + }; + Project.prototype.setKeys = function (keys) { + var keysFixed = {}, + key, + leftBracket; + if (!PMDynaform.core.ProjectMobile) { + if (keys.server.indexOf("http://") == -1 || keys.server.indexOf("https://") == -1) { + keys.server = keys.server; + } + } + if (typeof keys === "object") { + for (key in keys) { + leftBracket = (keys[key][0] === "/") ? keys[key].substring(1) : keys[key]; + keysFixed[key] = (leftBracket[leftBracket.length - 1] === "/") ? leftBracket.substring(0, leftBracket.length - 1) : leftBracket; + } + this.keys = keysFixed; + } + return this; + }; + Project.prototype.setToken = function (objToken) { + if (typeof objToken === "object") { + this.token = objToken; + } + + return this; + }; + Project.prototype.setRenderTo = function (to) { + this.renderTo = to; + + return this; + }; + Project.prototype.setEndPointsPath = function (endpoints) { + var leftBracket, + point, + endpointsVerified = {}; + + for (point in endpoints) { + if (typeof endpoints[point] === "string") { + leftBracket = (endpoints[point][0] === "/") ? endpoints[point].substring(1) : endpoints[point]; + endpointsVerified[point] = (endpoints[point][endpoints[point].length - 1] === "/") ? + endpoints[point].substring(0, endpoints[point].length - 1) : + endpoints[point]; + } else { + throw new Error("The endpoint path is not correct, " + endpoints[point]); + } + } + this.endPointsPath = endpointsVerified; + + return this; + }; + /** + * Sets the google maps keys and other settings + * @param {*} settings + */ + Project.prototype.setGoogleMapsSettings = function (settings) { + if (settings) { + this.googleMaps = settings; + } + return this; + }; + Project.prototype.checkGeoMapsLibraries = function (onload) { + var i, + libs = [], + enableGeoMap = false, + searchingMap, + forms = this.data.items; + + searchingMap = function (fields) { + var j, + k, + l, + dependent = [ + "geomap", + "other", + "location" + ]; + + outer_loop: + for (j = 0; j < fields.length; j += 1) { + for (k = 0; k < fields[j].length; k += 1) { + if ($.inArray(fields[j][k].type, dependent) >= 0) { + enableGeoMap = true; + break outer_loop; + } else if (fields[j][k].type === "form") { + searchingMap(fields[j][k].items); + } + } + } + }; + + for (i = 0; i < forms.length; i += 1) { + searchingMap(forms[i].items || []); + } + + if (enableGeoMap) { + this.loadGeoMapDependencies(onload); + } else { + this.loadProject(onload); + } + + return this; + }; + Project.prototype.checkScript = function () { + var i, j, k, code, model, scriptCode = "", rows, item, type, row; + for (i = 0; i < this.forms.length; i += 1) { + rows = this.forms[i].model.get("items"); + if (!_.isEmpty(this.forms[i].model.get("script"))) { + scriptCode = scriptCode.concat(this.forms[i].model.get("script").code); + } + for (j = 0; j < rows.length; j += 1) { + row = rows[j]; + for (var k = 0; k < row.length; k += 1) { + item = row[k]; + if (item.type === "form") { + if (!_.isEmpty(item.script)) { + scriptCode = scriptCode.concat(item.script.code); + } + } + } + } + } + if (scriptCode.trim().length) { + code = new PMDynaform.core.Script({ + script: scriptCode + }); + code.render(); + } + }; + Project.prototype.setAllFields = function (fields) { + if (typeof fields === "object") { + this.fields = fields; + this.selector.setFields(fields); + } + return this; + }; + Project.prototype.getModelForm = function (index) { + if (this.data.items[index] !== undefined) { + return this.data.items[index]; + } else { + return false; + } + }; + + Project.prototype.loadProject = function (onload) { + var that = this, firstForm; + firstForm = this.getModelForm(0); + if (firstForm) { + if (typeof this.onBeforePrintHandler === "function") { + firstForm.onBeforePrintHandler = this.onBeforePrintHandler; + } + if (typeof this.onAfterPrintHandler === "function") { + firstForm.onAfterPrintHandler = this.onAfterPrintHandler; + } + } + this.model = new PMDynaform.model.Panel(this.data); + this.view = new PMDynaform.view.Panel({ + tagName: "div", + renderTo: this.renderTo, + model: this.model, + project: this + }); + this.flashMessage(); + if (onload && typeof onload === "function") { + onload(); + } + this.forms = this.view.getPanels(); + this.createGlobalPmdynaformClass(this.view); + this.createSelectors(); + this.checkScript(); + this.createMessageLoading(); + that.view.afterRender(); + that.view.$el.find(".pmdynaform-form-message-loading").remove(); + $("#shadow-form").remove(); + this.onScrollUpdate(); + return this; + }; + Project.prototype.createMessageLoading = function () { + var msgTpl = _.template($('#tpl-loading').html()); + this.view.$el.prepend(msgTpl({ + title: "Loading", + msg: "Please wait while the data is loading..." + })); + this.view.$el.find("#shadow-form").css("height", this.view.$el.height() + "px"); + }; + /** + * Create selector instance + * @returns {Project} + */ + Project.prototype.createSelectors = function () { + var currentForm = this.getForm(), + allFields = this.getAllItems(currentForm); + + this.fields = allFields; + this.selector = new PMDynaform.core.Selector({ + fields: allFields, + form: currentForm + }); + return this; + }; + /** + * Creates a object with all children fields of the + * form (included the fields into SubForms and SubForms objects) ordered by id. + * Example: + * { + * "textVar001": [Object View], + * "textareaVar001": [Object View], + * "suggestVar001": [Object View], + * "dropdownVar001": [Object View], + * "checkboxVar001": [Object View], + * "32123154646546545644565": [Object View], //SubFormId + * "textareaSubForm": [object View] // Children SubForm + * ... + * } + * @param form + * @returns {{}} + */ + Project.prototype.getAllItems = function (form) { + var that = this, + formItems = form ? form.getFields() : [], + type, + items = {}, + subItems = {}; + + if (formItems.length) { + $.each(formItems, function (index, item) { + type = item.model.get("type"); + if (type !== "empty") { + items[item.model.get("id")] = item; + if (type === "form") { + subItems = that.getAllItems(item.getFormView()); + } + $.extend(items, subItems); + } + }); + } + return items; + }; + Project.prototype.createGlobalPmdynaformClass = function (form) { + + }; + Project.prototype.loadGeoMapDependencies = function (onload) { + var i, + auxClass, + instanceClass, + that = this, + loadScript = true, + libs = ""; + + libs = document.body.getElementsByTagName("script"); + outer_script: + for (i = 0; i < libs.length; i += 1) { + if ($(libs[i]).data) { + if ($(libs[i]).data("script") === "google") { + loadScript = false; + break outer_script; + } + } + } + if (loadScript) { + auxClass = function (params) { + this.project = params.project; + }; + auxClass.prototype.load = function () { + this.project.loadProject(onload); + }; + window.pmd = new auxClass({project: this}); + var script = document.createElement('script'); + script.type = 'text/javascript'; + $(script).data("script", "google"); + script.src = "https://maps.googleapis.com/maps/api/js?callback=pmd.load"; + script.src += window.pmd.project.googleMaps.key ? "&key=" + window.pmd.project.googleMaps.key : ""; + document.body.appendChild(script); + } else { + this.loadProject(onload); + } + return this; + }; + Project.prototype.registerKey = function (key, value) { + if ((typeof key === "string") && (typeof value === "string")) { + if (!this.keys[key]) { + this.keys[key] = value; + } else { + throw new Error("The key already exists."); + } + } else { + throw new Error("The parameters must be strings."); + } + + return this; + }; + Project.prototype.getEndPoint = function (type) { + return this.endPointsPath[type]; + }; + Project.prototype.setModel = function (model) { + if (model instanceof Backbone.Model) { + this.model = model; + } + return this; + }; + Project.prototype.setView = function (view) { + if (view instanceof Backbone.View) { + this.view = view; + } + return this; + }; + /** + * Gets the current form + * @returns {object || null} + */ + Project.prototype.getForm = function () { + var forms = this.getForms(), + index = 0; + return forms && forms.length ? forms[index] : null; + }; + /** + * Gets Array forms + * @returns {array || null} + */ + Project.prototype.getForms = function () { + var forms; + if (this.view instanceof PMDynaform.view.Panel) { + forms = this.view.getPanels(); + } + return forms; + }; + Project.prototype.getData = function () { + var formData = this.view.getData(); + + return formData; + }; + Project.prototype.destroy = function () { + this.view.$el.remove(); + + return this; + }; + /* + Mobile project methods + */ + Project.prototype.loadAllDataCase = function () { + var restClient, endpoint, url, that = this, resp = {}; + if (window.app_uid) { + this.webServiceManager.getData(function (err, data) { + if (!err) { + resp = data; + } + }); + } + return resp; + }; + + Project.prototype.getFullEndPoint = function (urlEndpoint) { + var k, + keys = this.keys, + urlFormat = urlEndpoint; + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlFormat = urlFormat.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + return urlFormat; + }; + Project.prototype.getFullURLMobile = function (endpoint) { + var k, + keys = this.keys, + urlFormat = this.urlFormatMobile; + urlFormat = urlFormat.replace(/{endPointPath}/, endpoint); + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlFormat = urlFormat.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + urlFormat = window.location.protocol + "//" + urlFormat.replace(/{endPointPath}/, endpoint); + return urlFormat; + }; + Project.prototype.getFullURL = function (endpoint) { + var k, + keys = this.keys, + urlFormat = this.urlFormat; + + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlFormat = urlFormat.replace(new RegExp("{" + k + "}", "g"), keys[k]); + //endPointFixed =endpoint.replace(new RegExp(variable, "g"), keys[variable]); + } + } + urlFormat = window.location.protocol + "//" + urlFormat.replace(/{endPointPath}/, endpoint); + if (urlFormat.indexOf("file") > -1) { + urlFormat = urlFormat.replace(/file/g, "http"); + } + return urlFormat; + }; + + Project.prototype.getFullURLStreaming = function (endpoint) { + var k, + keys = this.keys, + urlFormat = this.urlFormatStreaming; + urlFormat = urlFormat.replace(/{endPointPath}/, endpoint); + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlFormat = urlFormat.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + urlFormat = window.location.protocol + "//" + urlFormat.replace(/{endPointPath}/, endpoint); + return urlFormat; + }; + Project.prototype.createWebServiceManager = function () { + var keys1 = { + server: this.keys.server, + processUID: this.keys.projectId, + taskUID: window.app_uid ? window.app_uid : null, + caseUID: window.app_uid ? window.app_uid : null, + workspace: this.keys.workspace, + formUID: null, + keyProject: "project", + stepID: null, + delIndex: this.delIndex, + dyn_uid: this.dynaformUid + }; + + this.webServiceManager = new xCase.service.WebServiceManager({ + keys: keys1, + token: this.token, + language: this.language + }); + }; + Project.prototype.setBeforePrintHandler = function (handler) { + if (typeof handler === "function") { + this.onBeforePrintHandler = handler; + } else { + handler = null; + } + return this; + }; + Project.prototype.setAfterPrintHandler = function (handler) { + if (typeof handler === "function") { + this.onAfterPrintHandler = handler; + } else { + handler = null; + } + return this; + }; + Project.prototype.flashMessage = function (config) { + if (typeof config === "object") { + if (!Project.flashMessage) { + this.flashModel = new PMDynaform.ui.FlashMessageModel({ + message: config.message || "", + emphasisMessage: config.emphasisMessage || "", + startAnimation: config.startAnimation || 1000, + type: config.type || "info", + appendTo: config.appendTo || document.body, + duration: config.duration, + absoluteTop: config.absoluteTop || false + }); + this.flashView = new PMDynaform.ui.FlashMessageView({ + model: this.flashModel + }); + } else { + this.configFlashMessage(config); + } + this.flashView.render(); + if (this.flashModel.get("absoluteTop")) { + this.onScrollUpdate(this.flashView.el); + } + } + return this; + }; + Project.prototype.configFlashMessage = function (config) { + if (this.flashModel && this.flashModel instanceof PMDynaform.ui.FlashMessageModel) { + this.flashModel.set("message", config.message || "undefined message"); + this.flashModel.set("emphasisMessage", config.emphasisMessage || "undefined emphasisMessage"); + this.flashModel.set("startAnimation", config.startAnimation || 500); + this.flashModel.set("type", config.type || "info"); + this.flashModel.set("appendTo", config.appendTo || document.body); + this.flashModel.set("duration", config.duration || 1500); + this.flashModel.set("absoluteTop", config.absoluteTop || false); + } + return this; + }; + Project.prototype.hideCalendars = function (exclude) { + var dateTimePicker, + picker, + i; + + dateTimePicker = $(document).find(".datetime-container").children(); + for (i = 0; i < dateTimePicker.length; i += 1) { + if (dateTimePicker.get(i) === exclude) { + continue; + } + if (dateTimePicker.eq(i).data) { + picker = dateTimePicker.eq(i).data().DateTimePicker; + if (picker) { + picker.hide(); + } + } + } + }; + Project.prototype.onScrollUpdate = function (element) { + var that = this; + + if (!this.isMobile()) { + $(window).scroll(function () { + if (element) { + element.style.top = $(document).scrollTop() + "px"; + } + that.hideCalendars(); + }); + } + }; + Project.prototype.isMobile = function () { + return !!PMDynaform.core.ProjectMobile; + }; + + /** + * getDynUID: Get the form id, to consume services + * @returns {string} + */ + Project.prototype.getDynUID = function() { + var content = this.data, + masterFormIndex = 0; + if (content && _.isArray(content.items) && content.items[masterFormIndex]) { + return content.items[masterFormIndex].id; + } + return null; + }; + /** + * Gets current language. + * @returns {string} + */ + Project.prototype.getLanguage = function () { + return this.language || 'en'; + }; + + PMDynaform.extendNamespace("PMDynaform.core.Project", Project); + +}()); + +(function () { + /** + * @class PMDynaform.core.TokenStream + * Class to handle tokens or attributes for build de Formula + * @param {Object} tokens + */ + var TokenStream = function (tokens) { + /** + * @property {Number} [cursor=0] The property represents the current index + * of the tokens array. + * @private + */ + this.cursor = 0; + /** + * @property {Object} Encapsulate all tokens passed as parameter + * @private + */ + this.tokens = tokens; + }; + /** + * Gets the next token element of the array + * @return {String} element selected. + * @private + */ + TokenStream.prototype.next = function () { + return this.tokens[this.cursor++]; + }; + /** + * The method helps in the cases when exist brackets inside of Formula + * @private + * @param {String} direction + * @return {String} token Element selected from token array + */ + TokenStream.prototype.peek = function (direction) { + if (direction === undefined) { + direction = 0; + } + return this.tokens[this.cursor + direction]; + }; + PMDynaform.extendNamespace("PMDynaform.core.TokenStream", TokenStream); + + + /** + * @class PMDynaform.core.Tokenizer + * Class to manage all fields and their values, those values may be CONSTANTS, + * MATH functions and FIELDS. + * @param {Object} tokens + */ + var Tokenizer = function () { + /** + * @property {Number} [tokens={}] The property represents all the tokens stored + * @private + */ + this.tokens = {}; + /** + * @property {String} [regex=null] Represents the property that encapsulate the execution + * of the Regular Expression when the token is been finded or executed + * @private + */ + this.regex = null; + /** + * @property {Array} [fields=[]] Encapsulate all the fields associated or that are inside + * of the tokens + * @private + */ + this.fields = []; + /** + * @property {Array} [tokenNames=[]] All the names of the tokens are stored in the array + * @private + */ + this.tokenNames = []; + /** + * @property {Object} [tokenFields={}] All the tokens fields are stored in this property + * @private + */ + this.tokenFields = {}; + }; + /** + * Adds new token to tokens array. If the element already exist this is replaced. + * @param {String} name The name corresponde to name of the property inside of the tokens + * @param {String} expression This is the value if the element is a field and is an expression + * if the element is a bracket or some function. + * @private + */ + Tokenizer.prototype.addToken = function (name, expression) { + this.tokens[name] = expression; + }; + /** + * Adds new expression to field + * @param {String} name Parameter that describes to new element (Must of times is 'field') + * @param {String} expression Value of the new element (Must of times is the name of the field) + * @private + */ + Tokenizer.prototype.addField = function (name, expression) { + var expr; + + if ($.inArray(expression, this.fields) === -1) { + this.fields.push(expression); + } + + expr = this.fields.toString().replace(/,/g, "|"); + expr = expr.replace(new RegExp("\\[", "g"), "\\["); + expr = expr.replace(new RegExp("\\]", "g"), "\\]"); + this.tokens[name] = expr; + }; + /** + * Sets the value for the field selected + * @param {String} name Corresponds to name of the field + * @param {String||Number} value Value for the field + * @private + */ + Tokenizer.prototype.addTokenValue = function (name, value) { + this.tokenFields[name] = parseFloat(value); + }; + /** + * Executes and find tokens based on the formula expression + * @param {Object} data + * @private + */ + Tokenizer.prototype.tokenize = function (data) { + var tokens; + + this.buildExpression(data); + tokens = this.findTokens(data); + + return new TokenStream(tokens); + }; + /** + * Builds the formula expression separating by tokens + * @param {object} data Represent the data of the formula + * @private + */ + Tokenizer.prototype.buildExpression = function (data) { + var tokenRegex = [], + tokenName; + + for (tokenName in this.tokens) { + this.tokenNames.push(tokenName); + tokenRegex.push('(' + this.tokens[tokenName] + ')'); + } + + this.regex = new RegExp(tokenRegex.join('|'), 'g'); + }; + /** + * Find the tokens based of the data parameter and build an tokens array + * @param {String} data + * @private + */ + Tokenizer.prototype.findTokens = function (data) { + var tokens = [], + match, + group; + + while ((match = this.regex.exec(data)) !== null) { + if (match === undefined) { + continue; + } + + for (group = 1; group < match.length; group += 1) { + if (!match[group]) continue; + + tokens.push({ + name: this.tokenNames[group - 1], + data: match[group], + value: null + }); + } + } + + return tokens; + }; + PMDynaform.extendNamespace("PMDynaform.core.Tokenizer", Tokenizer); + + /** + * @class PMDynaform.core.Formula + * Class to handle all the formula property. The class support brackets that encapsulates + to numbers, mathematical operations and functions. + * @param {Object} tokens + */ + var Formula = function (data) { + this.data = data.toString(); + this.tokenizer = new Tokenizer(); + + }; + /** + * Initializes tokens by default, like division, multiplication, constant and function. + * Using the {@link PMDynaform.core.Tokenizer Tokenizer} class for sets the new tokens + */ + Formula.prototype.initializeTokens = function () { + this.tokenizer.addToken('whitespace', '\\s+'); + this.tokenizer.addToken('l_paren', '\\('); + this.tokenizer.addToken('r_paren', '\\)'); + this.tokenizer.addToken('float', '[0-9]+\\.[0-9]+'); + this.tokenizer.addToken('int', '[0-9]+'); + this.tokenizer.addToken('div', '\\/'); + this.tokenizer.addToken('mul', '\\*'); + this.tokenizer.addToken('add', '\\+'); + this.tokenizer.addToken('sub', '\\-'); + this.tokenizer.addToken('constant', 'pi|PI'); + this.tokenizer.addToken('function', '[a-zA-Z_][a-zA-Z0-9_]*'); + + return this; + }; + /** + * Adds new token using the {@link PMDynaform.core.Tokenizer Tokenizer} class for + * set the data + * @param {String} name Name of the token + * @param {String} value Value for the new token + */ + Formula.prototype.addToken = function (name, value) { + this.tokenizer.addToken(name, value); + return this; + }; + /** + * Adds new token using the {@link PMDynaform.core.Tokenizer Tokenizer} class for + * set the data + * @param {String} name Name of the token + * @param {String} value Value for the new token + */ + Formula.prototype.addField = function (name, value) { + this.tokenizer.addField(name, value); + return this; + }; + /** + * Adds value for the field using {@link PMDynaform.core.Tokenizer Tokenizer} class for set + * the data + * @param {String} name Name of the token + * @param {String} value Value for the new token + */ + Formula.prototype.addTokenValue = function (name, value) { + this.tokenizer.addTokenValue(name, value); + + return this; + }; + /** + * The current method add the prefix 'Math' to data from token + * @param {String} token Represents the token + * @return {String} Return the Mathematical valid data + */ + Formula.prototype.consumeConstant = function (token) { + return 'Math.' + token.data.toUpperCase(); + }; + /** + * Gets the valid value for the field passed as parameter + * @param {String} token Token that represent the data of the field + * @return {String} + */ + Formula.prototype.consumeField = function (token) { + return (this.tokenizer.tokenFields[token.data] === undefined) ? 0 : this.tokenizer.tokenFields[token.data]; + }; + /** + * Adds new token using the {@link PMDynaform.core.Tokenizer Tokenizer} class + * @param {String} name Name of the token + * @param {String} value Value for the new token + */ + Formula.prototype.consumeFunction = function (ts, token) { + var a = [token.data], + t; + + while (t = ts.next()) { + a.push(t.data); + if (t.name === 'r_paren') { + break; + } + } + + return 'Math.' + a.join(''); + }; + /** + * Adds new token using the {@link PMDynaform.core.Tokenizer Tokenizer} class + * @param {String} name Name of the token + * @param {String} value Value for the new token + */ + Formula.prototype.evaluate = function () { + var ts, + valueFixed, + expr = [], + e, + t, + message, + auxExpr; + + this.initializeTokens(); + ts = this.tokenizer.tokenize(this.data); + + while (t = ts.next()) { + switch (t.name) { + case 'int': + case 'float': + case 'mul': + case 'div': + case 'sub': + case 'add': + + expr.push(t.data); + break; + case 'field': + expr.push(this.consumeField(t)); + break; + case 'constant': + expr.push(this.consumeConstant(t)); + break; + case 'l_paren': + expr.push("("); + break; + case 'r_paren': + expr.push(")"); + break; + case 'function': + var n = ts.peek(); + if (n && n.name === 'l_paren') { + expr.push(this.consumeFunction(ts, t)); + continue; + } + default: + break; + } + } + auxExpr = []; + for (var i = 0; i < expr.length; i += 1) { + if (typeof expr[i] === "number") { + auxExpr.push("(" + expr[i] + ")"); + } else { + auxExpr.push(expr[i]); + } + } + expr = auxExpr; + e = expr.join(''); + try { + valueFixed = (new Function('return ' + e))(); + } catch (e) { + valueFixed = 0; + message = new PMDynaform.implements.Logger(); + message.showMessage("formula"); + throw new Error("Error in the formula property"); + } + valueFixed = _.isNaN(valueFixed) ? "" : valueFixed; + return valueFixed; + }; + + PMDynaform.extendNamespace("PMDynaform.core.Formula", Formula); +}()); + + +(function () { + var WebServiceManager = function (options) { + /* + options.keys + options.endPoints + options.urlBase + options.token + */ + this.options = options || {}; + this.options.endPoints = { + startCase: "light/process/{processUID}/task/{taskUID}/start-case", + trigger: "light/process/{processUID}/task/{taskUID}/case/{caseUID}/step/{stepUID}/execute-trigger/{triggerOption}", + getData: "light/{caseUID}/variables?pro_uid={processUID}&act_uid={taskUID}&app_index={delIndex}&dyn_uid={dyn_uid}", + conditionalSteps: "light/process/{processUID}/case/{caseUID}/{delIndex}/step/{stepPosition}", + form: "light/project/{processUID}/dynaforms", + saveData: "light/{caseUID}/variable?dyn_uid={formUID}&del_index={delIndex}", + query: "project/{processUID}/process-variable/{var_name}/execute-query", + querySuggest: "project/{processUID}/process-variable/{var_name}/execute-query-suggest", + imageInfo: "light/case/{caseUID}/download64", + nextStep: "light/get-next-step/{caseUID}", + uploadMultipart: "case/{caseUID}/upload/{var_name}", + uploadMultipartInputDoc: "case/{caseUID}/upload/{var_name}/{docUID}", + uploadMultipartVersion: "case/{caseUID}/upload/{var_name}/{docUID}/{appDocUid}", + fileStreaming: "en/neoclassic/cases/casesStreamingFile?actionAjax=streaming&a={caseUID}&d={fileId}", + fileVersionsList: "cases/{caseUID}/input-document/{docUID}/versions", + downloadFile: "cases/{caseUID}/input-document/{docUID}/file?v={version}", + userInfo: "light/user/data" + }; + this.options.links = { + showDocument: "{server}/sys{workspace}/en/{skin}/cases/cases_ShowDocument?a={docUID}&v={version}" + }; + this.options.urlBase = "{server}/api/1.0/{workspace}/{endPointPath}"; + this.options.urlBaseStreaming = "{server}/sys{workspace}/{endPointPath}"; + this.memoryCache = {}; + + }; + + WebServiceManager.prototype.getFullEndPoint = function (keys, urlBase, endPoint) { + var k; + urlBase = urlBase.replace(/{endPointPath}/, endPoint); + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlBase = urlBase.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + return urlBase; + }; + + WebServiceManager.prototype.setKey = function (name, value) { + if (this.options.keys) + this.options.keys[name] = value; + return this; + }; + + WebServiceManager.prototype.getKey = function (name) { + var resp = false; + if (this.options.keys) + resp = this.options.keys[name]; + return resp; + }; + + WebServiceManager.prototype.deleteKey = function (name, value) { + if (this.options.keys) + delete this.options.keys[name]; + return this; + }; + + WebServiceManager.prototype.getToken = function () { + return this.options.token; + }; + + WebServiceManager.prototype.startCase = function (callback) { + var that = this, + resp, + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.startCase), + method = "POST"; + + $.ajax({ + url: url, + type: method, + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + resp = { + "caseUID": data.caseId, + "caseTitle": data.caseNumber, + "caseNumber": data.caseNumber + }; + callback(null, resp); + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "state": "internetFail" + }; + callback(resp, null); + } + }); + return resp; + }; + + WebServiceManager.prototype.getData = function (callback, options) { + var that = this, + method, url, resp; + if (typeof options === 'object') { + this.setKey('dyn_uid', options['dyn_uid']); + } + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.getData); + method = "GET"; + this.deleteKey('dyn_uid'); + + $.ajax({ + url: url, + type: method, + async: false, + cache: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + callback(null, data); + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "status": "error" + }; + callback(resp, null); + } + }); + return resp; + }; + /** + * This function that execute a endpoint VARIABLES of ProcessMaker + * @param formID + * @param data + * @returns {*} + */ + WebServiceManager.prototype.saveData = function (config, callback) { + var that = this, + url, + method; + this.setKey('formUID', config["formUID"]); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.saveData); + method = "PUT"; + this.deleteKey('formUID'); + + config.data = (config.data && _.isObject(config.data)) ? config.data : {}; + $.ajax({ + url: url, + type: method, + async: false, + data: JSON.stringify(config.data), + contentType: "application/json", + timeout: (1000), + dataType: 'text', + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language !== null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + callback(null, data); + }, + error: function (jqXHR, textStatus, errorThrown) { + console.error("Error! Type: " + textStatus); + callback(textStatus, null); + } + }); + }; + + WebServiceManager.prototype.execAjax = function (ajaxParams) { + var resp; + var that = this; + + function beforeSendCallback(xhr) { + if (ajaxParams.isJSON) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + } + } + + var params = { + url: ajaxParams.url, + type: ajaxParams.method, + async: false, + data: ajaxParams.data || {}, + beforeSend: function (xhr) { + beforeSendCallback(xhr); + }, + success: function (data, textStatus) { + resp = { + "state": "success" + }; + }, + error: function (xhr, textStatus, errorThrown) { + if (xhr.status == 200) { + resp = { + "state": "success" + }; + } else { + resp = { + "state": "internetFail" + }; + } + } + }; + + $.ajax(params); + }; + WebServiceManager.prototype.trigger = function (config, callback) { + var that = this, + method = "POST", + url, + resp = {}; + + this.setKey('stepUID', config["stepUID"]); + this.setKey('triggerOption', config["triggerOption"]); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.trigger); + + this.deleteKey('stepUID'); + this.deleteKey('triggerOption'); + + $.ajax({ + url: url, + type: method, + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + resp = data ? data : true; + callback(null, resp); + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "status": "error" + }; + callback(resp, null); + } + }); + return resp; + }; + /** + * This function executes synchronously the endpoint "execute-query" of ProcessMaker + * @param data + * @param varName + */ + WebServiceManager.prototype.executeSyncQuery = function (data, varName) { + var that = this, + method = "POST", url, resp = []; + this.setKey('var_name', varName); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.query); + this.deleteKey('var_name'); + data = data || {}; + data.app_uid = (this.options && this.options.keys && this.options.keys.caseUID) || null; + data.del_index = (this.options && this.options.keys && this.options.keys.delIndex) || null; + $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + resp = data; + } + }); + return resp; + }; + /** + * This function executes the endpoint "execute-query" of ProcessMaker + * @param data + * @param varName + * @param target + */ + WebServiceManager.prototype.executeQuery = function (data, varName, target) { + var that = this, + method = "POST", url, resp = []; + + this.setKey('var_name', varName); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.query); + + this.deleteKey('var_name'); + + data = data || {}; + data.app_uid = (this.options && this.options.keys && this.options.keys.caseUID) || null; + data.del_index = (this.options && this.options.keys && this.options.keys.delIndex) || null; + + return $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: target.get("form").get("isSync") ? false : true, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + target.afterExecuteQuery(data); + }, + error: function (xhr, textStatus, errorThrown) { + target.afterExecuteQueryFail(textStatus); + } + }); + }; + + WebServiceManager.prototype.conditionalStep = function (config, callback) { + var that = this, + method = "GET", url, resp; + + this.setKey('stepUID', config["stepUID"]); + this.setKey('stepPosition', config["stepPosition"]); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.conditionalSteps); + + this.deleteKey('stepUID'); + this.deleteKey('stepPosition'); + + $.ajax({ + url: url, + type: method, + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function (data, textStatus) { + callback(null, data); + }, + error: function (xhr, textStatus, errorThrown) { + resp = JSON.parse(xhr.responseText); + callback(resp, null); + } + }); + return resp; + }; + + WebServiceManager.prototype.getForm = function (config, callback) { + var that = this, + method, + url, + sendData = [], + resp = {}; + + sendData.push(config["formUID"]); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.form); + + method = "POST"; + $.ajax({ + url: url, + type: method, + async: false, + data: JSON.stringify({ + formId: sendData + }), + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + var respData = null; + if (data.length != 0) { + respData = data[0].formContent; + } + callback(null, respData); + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "state": "internetFail" + }; + callback(resp, null); + } + }); + return resp; + }; + + WebServiceManager.prototype.getFormDefinition = function () { + var that = this, + method, + url, + resp = {}; + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.dynaformDefinition); + method = "GET", + $.ajax({ + url: url, + type: method, + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function (data, textStatus) { + resp = { + "data": data.data.formContent, + "state": "success" + }; + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "state": "internetFail" + }; + } + }); + return resp; + }; + + WebServiceManager.prototype.imageInfo = function (id, width) { + var that = this, + method, + url, + resp = {}; + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.imageInfo); + method = "POST"; + $.ajax({ + url: url, + type: method, + async: false, + data: JSON.stringify([{ + fileId: id, + width: width, + version: 1 + }]), + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language !== null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lan); + } + }, + success: function (data, textStatus) { + resp = { + id: data[0].fileId, + base64: data[0].fileContent + } + }, + error: function (error) { + resp = false; + } + }); + return resp; + }; + + WebServiceManager.prototype.imagesInfo = function (data) { + var that = this, + method, + url, + resp = []; + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.imageInfo); + method = "POST"; + $.ajax({ + url: url, + type: method, + async: false, + data: JSON.stringify(data), + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language !== null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function (data, textStatus) { + resp = data; + } + }); + return resp; + }; + + WebServiceManager.prototype.restClient = function () { + defaults = { + url: "/rest/v10", + method: "GET", + contentType: "application/json", + data: '', + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + keys.access_token); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function () { + }, + error: function () { + } + }; + _.extend(defaults, parems); + + defaults.type = _methodsMap[defaults.method]; + defaults.data = JSON.stringify(defaults.data); + $.ajax(defaults); + }; + + WebServiceManager.prototype.getFullURLStreaming = function (id) { + var k, + keys = this.options.keys, + urlFormat = this.options.urlBaseStreaming; + this.setKey('fileId', id); + urlFormat = urlFormat.replace(/{endPointPath}/, this.options.endPoints.fileStreaming); + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlFormat = urlFormat.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + this.deleteKey("fileId"); + return urlFormat; + }; + /** + * consumes suggest rest service + * @param data + * @param varName + * @returns {Array} + */ + WebServiceManager.prototype.executeQuerySuggest = function (data, varName, target, options) { + var that = this, + method = "POST", url, + appUID = this.options && this.options.keys ? this.getKey("caseUID") : null, + delIndex = this.options && this.options.keys ? this.getKey("delIndex") : null; + + this.setKey('var_name', varName); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.querySuggest); + + this.deleteKey('var_name'); + + data = data ? data : {}; + data.app_uid = appUID; + data.del_index = delIndex; + + return $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: target.get("form").get("isSync") ? false : true, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus, xhr) { + target.afterExecuteQuery(data, xhr, options); + } + }); + }; + /** + * consumes suggest rest service Asynchronously + * @param data + * @param varName + * @returns {Array} + */ + WebServiceManager.prototype.executeSyncQuerySuggest = function (data, varName) { + var that = this, + method = "POST", url, + appUID = this.options && this.options.keys ? this.getKey("caseUID") : null, + delIndex = this.options && this.options.keys ? this.getKey("delIndex") : null, + resp; + + this.setKey('var_name', varName); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.querySuggest); + + this.deleteKey('var_name'); + + data = data ? data : {}; + data.app_uid = appUID; + data.del_index = delIndex; + + $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus, xhr) { + resp = data; + } + }); + return resp; + }; + /** + * Consume and initialize Suggest rest service + * @param data + * @param varName + * @param uidModal + * @param suggest + * @returns {Object} + */ + WebServiceManager.prototype.executeSuggestSelect2 = function (data, varName, uidModal, suggest) { + var that = this, + res, + retObj, + transport, // Use this for the changes in REACT NATIVE with select2 + method = "POST", url, + appUID = this.options && this.options.keys ? this.getKey("caseUID") : null, + delIndex = this.options && this.options.keys ? this.getKey("delIndex") : null; + + this.setKey('var_name', varName); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.querySuggest); + this.deleteKey('var_name'); + data = data ? data : {}; + data.app_uid = appUID; + data.del_index = delIndex; + + retObj = { + ajax: { + url: url, + type: method, + dataType: 'json', + delay: suggest.model.get('delay'), + async: suggest.model.get("form").get("isSync") ? false : true, + contentType: 'application/json', + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + data: function (params) { + var dt = suggest.model.buildDataForQuery(); + dt.filter = params.term || ""; + return JSON.stringify(dt); + }, + processResults: function (data, params) { + var results = $.map(suggest.model.mergeLocalAndRemoteOptions(data, params), function (item) { + return { + id: item.value, + text: item.text || item.label + } + }); + if (!suggest.model.get('forceSelection') && !_.findWhere(results, {text: params.term})) { + results.unshift({ + id: params.term, + text: params.term + }) + } + return { + results: results + }; + }, + transport: function (params, success, failure) { + var res, + request, + cacheKey = params.data; + if (params.dataType === "json") { + //Build your cache key, typically with url and search term and page number + if (suggest.model.get("memoryCache") && that.memoryCache && that.memoryCache[cacheKey]) { + res = that.memoryCache[cacheKey]; + success(res); + return { + abort: function () { + console.log("ajax call aborted"); + } + } + } else { + request = $.ajax(params); + request.then(function (data) { + that.memoryCache[cacheKey] = data; + return data; + }) + .then(success); + request.fail(failure); + return request; + } + } else { + request = $.ajax(params); + request.then(success); + request.fail(failure); + return request; + } + }, + cache: true + }, + width: '100%', + placeholder: suggest.model.get('placeholder') || '', + dir: suggest.model.get('project').isRTL ? 'rtl' : 'ltl', + dropdownParent: uidModal, + tags: !suggest.model.get('forceSelection'), + allowClear: true, + theme: 'bootstrap' + }; + + if (PMDynaform.core.ProjectMobile) { + $.extend(retObj, { + ajax: { + data: function (params) { + var dt = suggest.model.buildDataForQuery(); + dt.filter = params.term || ""; + return dt; + }, + transport: function (params, success, failure) { + var dtQuery = suggest.model.buildDataForQuery(); + dtQuery.filter = params.data && params.data.filter ? params.data.filter : ""; + //If there is not sql in suggest return the local options + if (suggest.model.get("datasource") === "database" && suggest.model.get("sql") === "") { + res = { + results: $.map(suggest.model.mergeLocalAndRemoteOptions([], params), function (item) { + return { + id: item.value, + text: item.text || item.label + } + }) + }; + success(res); + } else { + suggest.model.get("project").requestManager.channelEvents( + { + handler: suggest.model.get("id"), + type: suggest.model.eventsMobile.EXECUTE_QUERY_SUGGEST, + bridge: true, + data: dtQuery, + callback: function (response) { + if (!response.error) { + res = { + results: $.map(suggest.model.mergeLocalAndRemoteOptions(response, params), function (item) { + return { + id: item.value, + text: item.text || item.label + } + }) + }; + success(res); + } else { + failure(response); + } + } + }); + } + } + } + }); + } + return retObj; + }; + WebServiceManager.prototype.nextStep = function (config, callback) { + var that = this, + data, + method = "POST", url, resp = []; + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.nextStep); + + data = { + "pro_uid": this.getKey("processUID"), + "act_uid": this.getKey("taskUID"), + "step_uid": config["stepUID"], + "step_pos": config["stepPosition"], + "app_index": this.getKey("delIndex"), + "dyn_uid": null + }; + + $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: false, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + resp = data; + callback(null, data); + }, + error: function (xhr, textStatus, errorThrown) { + callback(textStatus, null); + } + }); + return resp; + }; + /** + * Returns all the versions of a doc. + * @param {String} appDocUid The doc uid from the versions must be retrieved. + * @param {Function} callback A callback to invoke when the petition completes or fails. + * @returns {WebServiceManager} + */ + WebServiceManager.prototype.getFileVersions = function (appDocUid, callback) { + var url = this.getFullEndPoint({ + caseUID: this.options.keys.caseUID, + docUID: appDocUid, // or use the options one? + server: this.options.keys.server, + workspace: this.options.keys.workspace + }, this.options.urlBase, this.options.endPoints.fileVersionsList), + that = this; + + $.ajax({ + url: url, + type: 'GET', + async: true, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function (data, textStatus) { + resp = { + status: "success", + data: data + }; + callback(null, resp); + }, + error: function (xhr, textStatus, errorThrown) { + resp = { + "status": "error" + }; + callback(resp, null); + } + }); + return this; + }; + + /** + * Upload multipart of a file. + * @param data + * @param callback + * @param callbackupdate + * @return {*} + */ + WebServiceManager.prototype.uploadMultipart = function (data, callback, callbackupdate) { + var that = this, + method = "POST", + url, + index = 0, + formData = data[index].formData, + resp; + this.setKey('var_name', data[index].fieldName); + if (data[index].docUid !== "") { + this.setKey('docUID', data[index].docUid); + if (data[index].appDocUid) { + this.setKey('appDocUid', data[index].appDocUid); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.uploadMultipartVersion); + this.deleteKey('appDocUid'); + } else { + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.uploadMultipartInputDoc); + } + this.deleteKey('docUID'); + } else { + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.uploadMultipart); + } + if (typeof this.options.keys.delIndex !== 'undefined') { + formData.append("delIndex",this.options.keys.delIndex); + } + this.deleteKey('var_name'); + return $.ajax({ + url: url, + type: method, + data: formData, + async: true, + processData: false, + contentType: false, + xhr: function () { + var myXhr = $.ajaxSettings.xhr(); + if (myXhr.upload) { + myXhr.upload.addEventListener('progress', callbackupdate, false); + } + return myXhr; + }, + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.language); + } + }, + success: function (data) { + resp = { + status: "success", + data: data + }; + callback(null, data); + }, + error: function (xhr, textStatus, errorThrown) { + var message; + if (xhr.responseJSON) { + message = xhr.responseJSON.error.message; + callback({ code: xhr.status, message: message }); + } + } + }); + }; + + /** + * Make the URL to download the file + * @param data + * @returns {string} + */ + WebServiceManager.prototype.showDocument = function (data) { + var keys = { + docUID: data.uid || "", + type: data.type || "", + version: data.version || 1 + }; + return this.getDocumentLink(keys); + }; + + WebServiceManager.prototype.getDocumentLink = function (options) { + var k, + keys, + urlbase = this.options.links[options["type"]]; + if (urlbase) { + keys = $.extend(true, this.options.keys, options); + for (k in keys) { + if (keys.hasOwnProperty(k)) { + urlbase = urlbase.replace(new RegExp("{" + k + "}", "g"), keys[k]); + } + } + } + return urlbase; + }; + /** + * Gets file type blob + * @param data {object} + * @param callback + */ + WebServiceManager.prototype.downloadFile = function (data, callback) { + var that = this, + method = "GET", + url; + + this.setKey('docUID', data.docUID); + this.setKey('version', data.version); + url = this.getFullEndPoint(this.options.keys, this.options.urlBase, this.options.endPoints.downloadFile); + this.deleteKey('docUID'); + this.deleteKey('version'); + + $.ajax({ + url: url, + type: method, + headers: { authorization: "Bearer " + that.options.token.accessToken }, + dataType: 'binary', + async: true, + responseType: 'blob', + success: function (data) { + callback(data); + }, + error: function () { + callback(null); + } + }); + }; + + /** + * Gets information of user logged. + */ + WebServiceManager.prototype.getUserInfo = function () { + var that = this, + method = "GET", + url, + response = {}; + url = this.getFullEndPoint(this.options.keys, this.options.urlBase, this.options.endPoints.userInfo); + $.ajax({ + url: url, + type: method, + headers: { authorization: "Bearer " + that.options.token.accessToken }, + async: false, + success: function (data) { + response = { + "uid": data.userId, + "username": data.userName, + "firstName": data.firstName, + "lastName": data.lastName + }; + }, + error: function () { + return "error"; + } + }); + return response; + }; + /** + * New implementation of execute query + * @param {*} data + * @param {*} varName + * @param {*} async + * @param {*} callback + * @returns {*} + */ + WebServiceManager.prototype.execQuery = function (data, varName, async, memoryCache, callback) { + var that = this, + method = "POST", url, resp = [], + cacheKey = JSON.stringify(data); + + this.setKey('var_name', varName); + + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.query); + + this.deleteKey('var_name'); + + data = data || {}; + data.app_uid = (this.options && this.options.keys && this.options.keys.caseUID) || null; + data.del_index = (this.options && this.options.keys && this.options.keys.delIndex) || null; + if (memoryCache && this.memoryCache && this.memoryCache[cacheKey]) { + callback(this.memoryCache[cacheKey], null); + return false; + } + return $.ajax({ + url: url, + type: method, + data: JSON.stringify(data), + async: async, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (data, textStatus) { + that.memoryCache[cacheKey] = data; + callback(data, null); + }, + error: function (xhr, textStatus, errorThrown) { + callback(null, textStatus); + } + }); + }; + /** + * Consumes suggest rest service + * @param data + * @returns {*} + */ + WebServiceManager.prototype.execQuerySuggest = function (data) { + var that = this, + dt, + method = "POST", url, + appUID = this.options && this.options.keys ? this.getKey("caseUID") : null, + delIndex = this.options && this.options.keys ? this.getKey("delIndex") : null, + cacheKey = JSON.stringify(data); + + this.setKey('var_name', data.variable); + url = that.getFullEndPoint(that.options.keys, that.options.urlBase, that.options.endPoints.querySuggest); + this.deleteKey('var_name'); + dt = data.data ? data.data : {}; + dt.app_uid = appUID; + dt.del_index = delIndex; + if (this.memoryCache && this.memoryCache[cacheKey]) { + data.callback(this.memoryCache[cacheKey], null); + return false; + } + return $.ajax({ + url: url, + type: method, + data: JSON.stringify(dt), + async: data.async, + contentType: "application/json", + beforeSend: function (xhr) { + xhr.setRequestHeader("Authorization", "Bearer " + that.options.token.accessToken); + if (that.options.language != null) { + xhr.setRequestHeader("Accept-Language", that.options.keys.lang); + } + }, + success: function (res, textStatus, xhr) { + that.memoryCache[cacheKey] = res; + data.callback(res, null); + } + }); + }; + + xCase.extendNamespace("xCase.service.WebServiceManager", WebServiceManager); +}()); + +(function () { + var Logger = function (option) { + this.template = _.template($("#tpl-messageWarning").html()), + this.messages = { + "formula": "There are references to missing objects in the form. The form configuration is not completed and it is not going to be displayed (rendered). Please contact the administrator.", + "default": "Please contact the administrator." + }, + this.$el; + Logger.prototype.init.call(this, option); + }; + + Logger.prototype.init = function (options) { + + }; + + Logger.prototype.showMessage = function (optionMessage) { + var html, + json = { + message: this.messages[optionMessage] || this.messages["default"] + }; + html = this.template(json); + $(".pmDynaformLoading").css("background", "no-repeat #f9f9f9"); + $(".pmDynaformLoading").append(html); + }; + + PMDynaform.extendNamespace("PMDynaform.implements.Logger", Logger); +}()); +(function () { + var TransformJSON = function (settings) { + this.parentMode = null; + this.field = null; + this.json = null; + this.jsonBuilt = null; + TransformJSON.prototype.init.call(this, settings); + }; + + TransformJSON.prototype.init = function (settings) { + var defaults = { + parentMode: "edit", + field: {}, + json: { + text: TransformJSON.prototype.text, + textarea: TransformJSON.prototype.textArea, + checkgroup: TransformJSON.prototype.checkgroup, + checkbox: TransformJSON.prototype.checkbox, + radio: TransformJSON.prototype.radio, + dropdown: TransformJSON.prototype.dropdown, + button: TransformJSON.prototype.button, + submit: TransformJSON.prototype.submit, + datetime: TransformJSON.prototype.datetime, + suggest: TransformJSON.prototype.suggest, + link: TransformJSON.prototype.link, + file: TransformJSON.prototype.file, + grid: TransformJSON.prototype.grid, + multipleFile: TransformJSON.prototype.file + } + }; + + jQuery.extend(true, defaults, settings); + + this.jsonBuilt = defaults.field; + this.setParentMode(defaults.parentMode) + .setField(defaults.field) + .setJSONFactory(defaults.json) + .buildJSON(); + + return this; + }; + TransformJSON.prototype.setParentMode = function (mode) { + this.parentMode = mode; + + return this; + }; + TransformJSON.prototype.text = function (field) { + return { + type: "label", + colSpanControl: field.colSpanControl, + colSpanLabel: field.colSpanLabel, + colSpan: field.colSpan, + label: field.label, + fullOptions: [ + field.defaultValue || field.value + ], + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.textArea = function (field) { + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + fullOptions: [ + field.defaultValue || field.value + ], + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.checkgroup = function (field) { + var validOpt = [], + i; + + for (i = 0; i < field.options.length; i += 1) { + if (field.options[i].selected) { + if (field.options[i].selected === true) { + validOpt.push(field.options[i].label); + } + } + + } + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + fullOptions: validOpt, + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.checkbox = function (field) { + var validOpt = [], + i; + for (i = 0; i < field.options.length; i += 1) { + if (field.options[i].selected) { + if (field.options[i].selected === true) { + validOpt.push(field.options[i].label); + } + } + } + return { + type: "checkbox", + colSpan: field.colSpan, + label: field.label, + fullOptions: validOpt, + id: field.id, + data: field.data, + mode: field.mode + }; + }; + TransformJSON.prototype.radio = function (field) { + var validOpt = [], + i; + for (i = 0; i < field.options.length; i += 1) { + if (field.defaultValue) { + if (field.options[i].value.toString() === field.defaultValue.toString()) { + validOpt.push(field.options[i].label); + } + } + } + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + fullOptions: validOpt, + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.dropdown = function (field) { + var validOpt = [], + i; + + for (i = 0; i < field.options.length; i += 1) { + if (field.defaultValue) { + if (field.options[i].value.toString() === field.defaultValue.toString()) { + validOpt.push(field.options[i].label); + } + } + } + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + fullOptions: validOpt, + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.button = function (field) { + return field; + }; + TransformJSON.prototype.submit = function (field) { + return field; + }; + TransformJSON.prototype.datetime = function (field) { + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + fullOptions: [ + field.defaultValue || field.value + ], + id: field.id, + data: field.data + }; + }; + TransformJSON.prototype.suggest = function (field) { + return field; + }; + TransformJSON.prototype.link = function (field) { + return { + type: "label", + colSpan: field.colSpan, + label: field.label, + id: field.id, + options: [ + field.value + ] + }; + }; + TransformJSON.prototype.file = function (field) { + return field; + }; + TransformJSON.prototype.grid = function (field) { + return field; + }; + TransformJSON.prototype.setField = function (field) { + this.field = field; + + return this; + }; + TransformJSON.prototype.setJSONFactory = function (factory) { + this.json = factory; + return this; + }; + TransformJSON.prototype.discardViewField = function (type) { + var disabled = [ + "button", + "submit", + "image", + "label", + "title", + "subtitle" + ]; + return ($.inArray(type, disabled) < 0) ? true : false; + }; + TransformJSON.prototype.reviewField = function (field) { + var jsonBuilt = field, + total, + sigleControl = ["text", "suggest", "textarea", "datetime"], + data, + i; + + if (this.json[field.type] && this.discardViewField(field.type)) { + switch (field.mode) { + case "disabled": + jsonBuilt = field; + jsonBuilt.disabled = true; + break; + case "parent": + field.mode = this.parentMode; + jsonBuilt = this.reviewField(field); + break; + case "view": + jsonBuilt = this.json[field.type](field); + break; + default: + jsonBuilt = field; + } + } + jsonBuilt.dataType = field.dataType || ""; + jsonBuilt.originalType = field.originalType || field.type; + jsonBuilt.var_name = field.var_name || ""; + jsonBuilt.var_uid = field.var_uid || ""; + jsonBuilt.options || field.var_accepted_values; + if (field.data) { + jsonBuilt.fullOptions = []; + if (sigleControl.indexOf(jsonBuilt.originalType) !== -1) { + if (jsonBuilt.originalType === "suggest") { + jsonBuilt.fullOptions = [field.data["label"] || field.defaultValue]; + } else { + jsonBuilt.fullOptions = [field.data["value"] || field.defaultValue]; + } + } else { + if (jsonBuilt.originalType === "checkgroup") { + data = []; + if ($.isArray(field["optionsSql"])) { + total = field["options"].concat(field["optionsSql"]); + } else { + total = field["options"]; + } + for (i = 0; i < total.length; i += 1) { + if (field.data["value"].indexOf(total[i]["value"]) !== -1) { + data.push(total[i]["label"]); + } + } + jsonBuilt.fullOptions = data || [field.defaultValue]; + } else { + jsonBuilt.fullOptions = [field.data["label"] || field.defaultValue]; + } + } + } + return jsonBuilt; + }; + TransformJSON.prototype.buildJSON = function () { + this.jsonBuilt = this.reviewField(this.field); + return this; + }; + + TransformJSON.prototype.getJSON = function () { + return this.jsonBuilt; + }; + PMDynaform.extendNamespace("PMDynaform.core.TransformJSON", TransformJSON); + +}()); +(function () { + var FileReader = window.FileReader, + FileReaderSyncSupport = false, + workerScript = "self.addEventListener('message', function(e) { var data=e.data; try { var reader = new FileReaderSync; postMessage({ result: reader[data.readAs](data.file), extra: data.extra, file: data.file})} catch(e){ postMessage({ result:'error', extra:data.extra, file:data.file}); } }, false);", + syncDetectionScript = "self.addEventListener('message', function(e) { postMessage(!!FileReaderSync); }, false);", + fileReaderEvents = ['loadstart', + 'progress', + 'load', + 'abort', + 'error', + 'loadend'], + FileStream = { + enabled: false, + setupInput: setupInput, + setupDrop: setupDrop, + setupClipboard: setupClipboard, + sync: false, + output: [], + opts: { + dragClass: "drag", + accept: false, + readAsDefault: 'BinaryString', + readAsMap: { + 'image/*': 'DataURL', + 'text/*': 'Text' + }, + on: { + loadstart: function () { + }, + progress: function () { + }, + load: function () { + }, + abort: function () { + }, + error: function () { + }, + loadend: function () { + }, + skip: function () { + }, + groupstart: function () { + }, + groupend: function () { + }, + beforestart: function () { + } + } + } + }; + + // Not all browsers support the FileReader interface. Return with the enabled bit = false. + if (!FileReader) { + return; + } + + // WorkerHelper is a little wrapper for generating web workers from strings + var WorkerHelper = (function () { + + var URL = window.URL || window.webkitURL; + var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; + + // May need to get just the URL in case it is needed for things beyond just creating a worker. + function getURL(script) { + if (window.Worker && BlobBuilder && URL) { + var bb = new BlobBuilder(); + bb.append(script); + return URL.createObjectURL(bb.getBlob()); + } + + return null; + } + + // If there is no need to revoke a URL later, or do anything fancy then just return the worker. + function getWorker(script, onmessage) { + var worker, + url = getURL(script); + + if (url) { + worker = new Worker(url); + worker.onmessage = onmessage; + return worker; + } + + return null; + } + + return { + getURL: getURL, + getWorker: getWorker + }; + + })(); + + // setupClipboard: bind to clipboard events (intended for document.body) + function setupClipboard(element, opts) { + var instanceOptions = {}; + if (!FileStream.enabled) { + return; + } + + $.extend(true, instanceOptions, FileStream.opts); + $.extend(true, instanceOptions, opts); + //instanceOptions = extend(extend({}, FileStream.opts), opts); + + element.addEventListener("paste", onpaste, false); + + function onpaste(e) { + var files = []; + var clipboardData = e.clipboardData || {}; + var items = clipboardData.items || []; + + for (var i = 0; i < items.length; i++) { + var file = items[i].getAsFile(); + + if (file) { + + // Create a fake file name for images from clipboard, since this data doesn't get sent + var matches = new RegExp("/\(.*\)").exec(file.type); + if (!file.name && matches) { + var extension = matches[1]; + file.name = "clipboard" + i + "." + extension; + } + + files.push(file); + } + } + + if (files.length) { + processFileList(e, files, instanceOptions); + e.preventDefault(); + e.stopPropagation(); + } + } + } + + // setupInput: bind the 'change' event to an input[type=file] + function setupInput(input, opts) { + var instanceOptions = {}; + + if (!FileStream.enabled) { + return; + } + //var instanceOptions = extend(extend({}, FileStream.opts), opts); + $.extend(true, instanceOptions, FileStream.opts); + $.extend(true, instanceOptions, opts); + + input.addEventListener("change", inputChange, false); + input.addEventListener("drop", inputDrop, false); + + function inputChange(e) { + processFileList(e, input.files, instanceOptions); + } + + function inputDrop(e) { + e.stopPropagation(); + e.preventDefault(); + processFileList(e, e.dataTransfer.files, instanceOptions); + } + } + + // setupDrop: bind the 'drop' event for a DOM element + function setupDrop(dropbox, opts) { + var dragClass, + initializedOnBody, + instanceOptions = {}; + + if (!FileStream.enabled) { + return; + } + //var instanceOptions = extend(extend({}, FileStream.opts), opts); + $.extend(true, instanceOptions, FileStream.opts); + $.extend(true, instanceOptions, opts); + + if (!instanceOptions.dnd) { + return; + } + dragClass = instanceOptions.dragClass; + initializedOnBody = false; + + // Bind drag events to the dropbox to add the class while dragging, and accept the drop data transfer. + dropbox.addEventListener("dragenter", onlyWithFiles(dragenter), false); + dropbox.addEventListener("dragleave", onlyWithFiles(dragleave), false); + dropbox.addEventListener("dragover", onlyWithFiles(dragover), false); + dropbox.addEventListener("drop", onlyWithFiles(drop), false); + + // Bind to body to prevent the dropbox events from firing when it was initialized on the page. + document.body.addEventListener("dragstart", bodydragstart, true); + document.body.addEventListener("dragend", bodydragend, true); + document.body.addEventListener("drop", bodydrop, false); + + function bodydragend(e) { + initializedOnBody = false; + } + + function bodydragstart(e) { + initializedOnBody = true; + } + + function bodydrop(e) { + if (e.dataTransfer.files && e.dataTransfer.files.length) { + e.stopPropagation(); + e.preventDefault(); + } + } + + function onlyWithFiles(fn) { + return function () { + if (!initializedOnBody) { + fn.apply(this, arguments); + } + }; + } + + function drop(e) { + e.stopPropagation(); + e.preventDefault(); + if (dragClass) { + removeClass(dropbox, dragClass); + } + processFileList(e, e.dataTransfer.files, instanceOptions); + } + + function dragenter(e) { + e.stopPropagation(); + e.preventDefault(); + if (dragClass) { + addClass(dropbox, dragClass); + } + } + + function dragleave(e) { + if (dragClass) { + removeClass(dropbox, dragClass); + } + } + + function dragover(e) { + e.stopPropagation(); + e.preventDefault(); + if (dragClass) { + addClass(dropbox, dragClass); + } + } + } + + // setupCustomFileProperties: modify the file object with extra properties + function setupCustomFileProperties(files, groupID) { + for (var i = 0; i < files.length; i++) { + var file = files[i]; + file.extra = { + nameNoExtension: file.name.substring(0, file.name.lastIndexOf('.')), + extension: file.name.substring(file.name.lastIndexOf('.') + 1), + fileID: i, + uniqueID: getUniqueID(), + groupID: groupID, + prettySize: prettySize(file.size) + }; + } + } + + // getReadAsMethod: return method name for 'readAs*' - http://www.w3.org/TR/FileAPI/#reading-a-file + function getReadAsMethod(type, readAsMap, readAsDefault) { + for (var r in readAsMap) { + if (type.match(new RegExp(r))) { + return 'readAs' + readAsMap[r]; + } + } + return 'readAs' + readAsDefault; + } + + // processFileList: read the files with FileReader, send off custom events. + function processFileList(e, files, opts) { + + var filesLeft = files.length, + group = { + groupID: getGroupID(), + files: files, + started: new Date() + }, + sync, + syncWorker; + + function groupEnd() { + group.ended = new Date(); + opts.on.groupend(group); + } + + function groupFileDone() { + if (--filesLeft === 0) { + groupEnd(); + } + } + + FileStream.output.push(group); + setupCustomFileProperties(files, group.groupID); + + opts.on.groupstart(group); + + // No files in group - end immediately + if (!files.length) { + groupEnd(); + return; + } + + sync = FileStream.sync && FileReaderSyncSupport; + syncWorker; + + // Only initialize the synchronous worker if the option is enabled - to prevent the overhead + if (sync) { + syncWorker = WorkerHelper.getWorker(workerScript, function (e) { + var file = e.data.file; + var result = e.data.result; + + // Workers seem to lose the custom property on the file object. + if (!file.extra) { + file.extra = e.data.extra; + } + + file.extra.ended = new Date(); + + // Call error or load event depending on success of the read from the worker. + opts.on[result === "error" ? "error" : "load"]({target: {result: result}}, file); + groupFileDone(); + + }); + } + + Array.prototype.forEach.call(files, function (file) { + + file.extra.started = new Date(); + + if (opts.accept && !file.type.match(new RegExp(opts.accept))) { + opts.on.skip(file); + groupFileDone(); + return; + } + + if (opts.on.beforestart(file) === false) { + opts.on.skip(file); + groupFileDone(); + return; + } + + var readAs = getReadAsMethod(file.type, opts.readAsMap, opts.readAsDefault); + + if (sync && syncWorker) { + syncWorker.postMessage({ + file: file, + extra: file.extra, + readAs: readAs + }); + } + else { + + var reader = new FileReader(); + reader.originalEvent = e; + + fileReaderEvents.forEach(function (eventName) { + reader['on' + eventName] = function (e) { + if (eventName == 'load' || eventName == 'error') { + file.extra.ended = new Date(); + } + opts.on[eventName](e, file); + if (eventName == 'loadend') { + groupFileDone(); + } + }; + }); + + reader[readAs](file); + } + }); + } + + // checkFileReaderSyncSupport: Create a temporary worker and see if FileReaderSync exists + function checkFileReaderSyncSupport() { + var worker = WorkerHelper.getWorker(syncDetectionScript, function (e) { + FileReaderSyncSupport = e.data; + }); + + if (worker) { + worker.postMessage({}); + } + } + + + // hasClass: does an element have the css class? + function hasClass(el, name) { + return new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)").test(el.className); + } + + // addClass: add the css class for the element. + function addClass(el, name) { + if (!hasClass(el, name)) { + el.className = el.className ? [el.className, name].join(' ') : name; + } + } + + // removeClass: remove the css class from the element. + function removeClass(el, name) { + if (hasClass(el, name)) { + var c = el.className; + el.className = c.replace(new RegExp("(?:^|\\s+)" + name + "(?:\\s+|$)", "g"), " ").replace(/^\s\s*/, '').replace(/\s\s*$/, ''); + } + } + + // prettySize: convert bytes to a more readable string. + function prettySize(bytes) { + var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB'], + e = Math.floor(Math.log(bytes) / Math.log(1024)); + return (bytes / Math.pow(1024, Math.floor(e))).toFixed(2) + " " + s[e]; + } + + // getGroupID: generate a unique int ID for groups. + var getGroupID = (function (id) { + return function () { + return id++; + }; + })(0); + + // getUniqueID: generate a unique int ID for files + var getUniqueID = (function (id) { + return function () { + return id++; + }; + })(0); + + // The interface is supported, bind the FileStream callbacks + FileStream.enabled = true; + + + PMDynaform.extendNamespace("PMDynaform.core.FileStream", FileStream); + +}()); +(function () { + /** + * FullScreen class + */ + var FullScreen = function (options) { + this.element = null; + this.onReadyScreen = null; + this.onCancelScreen = null; + this.isInFullScreen = null; + this.supported = null; + FullScreen.prototype.init.call(this, options); + }; + /** + * [init description] + * @param {Object} options Config options + */ + FullScreen.prototype.init = function (options) { + var defaults = { + element: document.documentElement, + onReadyScreen: function () { + }, + onCancelScreen: function () { + } + }; + jQuery.extend(true, defaults, options); + this.element = defaults.element; + this.onReadyScreen = defaults.onReadyScreen; + this.onCancelScreen = defaults.onCancelScreen; + this.checkFullScreen(); + }; + FullScreen.prototype.checkFullScreen = function () { + var el = this.element, + request = el.requestFullScreen || + el.webkitRequestFullScreen || + el.mozRequestFullScreen || + el.msRequestFullScreen; + + this.supported = request ? true : null; + + return this; + }; + FullScreen.prototype.cancel = function () { + var requestMethod, fnCancelScreen, wscript, el; + if (parent.document.documentElement === document.documentElement) { + el = document; + } else { + el = parent.document; + } + requestMethod = el.cancelFullScreen || + el.webkitCancelFullScreen || + el.mozCancelFullScreen || + el.exitFullscreen; + if (requestMethod) { + requestMethod.call(el); + try { + fnCancelScreen = this.onCancelScreen; + fnCancelScreen(el); + } catch (e) { + throw new Error(e); + } + } else if (typeof window.ActiveXObject !== "undefined") { // Older IE. + wscript = new ActiveXObject("WScript.Shell"); + if (wscript !== null) { + wscript.SendKeys("{F11}"); + } + } + }; + + FullScreen.prototype.applyZoom = function () { + var requestMethod, wscript, fnReadyScreen, el = this.element; + requestMethod = el.requestFullScreen || + el.webkitRequestFullScreen || + el.mozRequestFullScreen || + el.msRequestFullScreen; + + if (requestMethod) { + requestMethod.call(el); + try { + fnReadyScreen = this.onReadyScreen; + fnReadyScreen(el); + } catch (e) { + throw new Error(e); + } + } else if (typeof window.ActiveXObject !== "undefined") { + wscript = new ActiveXObject("WScript.Shell"); + if (wscript !== null) { + wscript.SendKeys("{F11}"); + } + } + return false + }; + FullScreen.prototype.toggle = function () { + var el; + if (parent.document.documentElement === document.documentElement) { + el = document; + } else { + el = parent.document; + } + this.isInFullScreen = (el.fullScreenElement && el.fullScreenElement !== null) || (el.mozFullScreen || el.webkitIsFullScreen); + if (this.isInFullScreen) { + this.cancel(); + } else { + this.applyZoom(); + } + return false; + }; + + PMDynaform.extendNamespace("PMDynaform.core.FullScreen", FullScreen); +}()); +(function () { + var Script = function (options) { + this.name = null; + this.type = null; + this.html = null; + this.script = ""; + this.renderTo = document.body; + + Script.prototype.init.call(this, options); + }; + Script.prototype.init = function (options) { + var defaults = { + type: "text/javascript", + script: "" + }; + + $.extend(true, defaults, options); + this.setType(defaults.type) + .setScript(defaults.script); + }; + Script.prototype.setType = function (type) { + this.type = type; + return this; + }; + Script.prototype.setScript = function (script) { + this.script = script; + return this; + }; + Script.prototype.createHTML = function () { + var html = document.createElement("script"); + + html.type = this.type; + html.text = this.script; + this.html = html; + + return html; + }; + Script.prototype.getHTML = function () { + if (!this.html) { + this.createHTML(); + } + + return this.html; + }; + Script.prototype.render = function () { + var html = this.getHTML(); + $(this.renderTo).append(html); + + return this; + }; + PMDynaform.extendNamespace("PMDynaform.core.Script", Script); +}()); + +(function () { + /** + * @class PMUI.util.ArrayList + * Construct a List similar to Java's ArrayList that encapsulates methods for + * making a list that supports operations like get, insert and others. + * + * some examples: + * var item, + * arrayList = new ArrayList(); + * arrayList.getSize() // 0 + * arrayList.insert({ // insert an object + * id: 100, + * width: 100, + * height: 100 + * }); + * arrayList.getSize(); // 1 + * arrayList.asArray(); // [{id : 100, ...}] + * item = arrayList.find('id', 100); // finds the first element with an id that equals 100 + * arrayList.remove(item); // remove item from the arrayList + * arrayList.getSize(); // 0 + * arrayList.isEmpty(); // true because the arrayList has no elements + * + * @constructor Returns an instance of the class ArrayList + */ + var ArrayList = function () { + /** + * The elements of the arrayList + * @property {Array} + * @private + */ + var elements = [], + /** + * The size of the array + * @property {number} [size=0] + * @private + */ + size = 0, + index, + i; + return { + + /** + * The ID of this ArrayList is generated using the function Math.random + * @property {number} id + */ + id: Math.random(), + /** + * Gets an element in the specified index or undefined if the index + * is not present in the array + * @param {number} index + * @returns {Object / undefined} + */ + get: function (index) { + return elements[index]; + }, + /** + * Inserts an element at the end of the list + * @param {Object} item + * @chainable + */ + insert: function (item) { + elements[size] = item; + size += 1; + return this; + }, + /** + * Inserts an element in a specific position + * @param {Object} item + * @chainable + */ + insertAt: function (item, index) { + elements.splice(index, 0, item); + size = elements.length; + return this; + }, + /** + * Removes an item from the list + * @param {Object} item + * @return {boolean} + */ + remove: function (item) { + index = this.indexOf(item); + if (index === -1) { + return false; + } + //swap(elements[index], elements[size-1]); + size -= 1; + elements.splice(index, 1); + return true; + }, + /** + * Gets the length of the list + * @return {number} + */ + getSize: function () { + return size; + }, + /** + * Returns true if the list is empty + * @returns {boolean} + */ + isEmpty: function () { + return size === 0; + }, + /** + * Returns the first occurrence of an element, if the element is not + * contained in the list then returns -1 + * @param {Object} item + * @return {number} + */ + indexOf: function (item) { + for (i = 0; i < size; i += 1) { + if (item === elements[i]) { + return i; + } + } + return -1; + }, + /** + * Returns the the first object of the list that has the + * specified attribute with the specified value + * if the object is not found it returns undefined + * @param {string} attribute + * @param {string} value + * @return {Object / undefined} + */ + find: function (target) { + var sortedValues = elements.sort(); + // summary: + // Performs a binary search on an array of sorted + // values for a specified target. + // sortedValues: Array + // Array of values to search within. + // target: String|Number + // Item to search for, within the sortedValues array. + // returns: + // Number or null. The location of the target within + // the sortedValues array, if found. Otherwise returns + // null. + + // define the recursive function. + function search(low, high) { + // If the low index is greater than the high index, + // return null for not-found. + if (low > high) { + return undefined; + } + + // If the value at the low index is our target, return + // the low index. + if (sortedValues[low] === target) { + return low; + } + + // If the value at the high index is our target, return + // the high index. + if (sortedValues[high] === target) { + return high; + } + + // Find the middle index and median element. + var middle = Math.floor(( low + high ) / 2); + var middleElement = sortedValues[middle]; + + // Recursive calls, depending on whether or not the + // middleElement is less-than or greater-than the + // target. + // Note: We can use high-1 and low+1 because we've + // already checked for equality at the high and low + // indexes above. + if (middleElement < target) { + return search(middle, high - 1); + } else if (middleElement > target) { + return search(low + 1, middle); + } + + // If middleElement === target, we can return that value. + return middle; + } + + // Start our search between the first and last elements of + // the array. + return search(0, sortedValues.length - 1); + }, + /** + * Returns true if the list contains the item and false otherwise + * @param {Object} item + * @return {boolean} + */ + contains: function (item) { + if (this.indexOf(item) !== -1) { + return true; + } + return false; + }, + /** + * Sorts the list using compFunction if possible, if no compFunction + * is passed as an parameter then a default sorting method will be used. This default method will sort in + * ascending order. + * @param {Function} [compFunction] The criteria function used to find out the position for the elements in + * the array list. This function will receive two parameters, each one will be an element from the array + * list, the function will compare those elements and it must return: + * + * - 1, if the first element must be before the second element. + * - -1, if the second element must be before the first element. + * - 0, if the current situation doesn't met any of the two situations above. In this case both elements + * can be evaluated as they had the same value. For example, in an array list of numbers, when you are + * trying to apply a lineal sorting (ascending/descending) in a array list of numbers, if the array sorting + * function finds two elements with the value 3 they should be evaluated returning 0, since both values are + * the same. + * + * IMPORTANT NOTE: for a correct performance the sent parameter must return at least two of the values + * listed above, if it doesn't the function can produce an infinite loop and thus an error. + * @return {boolean} + */ + sort: function (compFunction) { + var compFunction = compFunction || function (a, b) { + if (a < b) { + return 1; + } else if (a > b) { + return -1; + } else { + return 0; + } + }, swap = function (items, firstIndex, secondIndex) { + var temp = items[firstIndex]; + items[firstIndex] = items[secondIndex]; + items[secondIndex] = temp; + }, partition = function (items, left, right) { + var pivot = items[Math.floor((right + left) / 2)], + i = left, + j = right; + while (i <= j) { + while (compFunction(items[i], pivot) > 0) { + i++; + } + while (compFunction(items[j], pivot) < 0) { + j--; + } + if (i <= j) { + swap(items, i, j); + i++; + j--; + } + } + return i; + }, quickSort = function (items, left, right) { + var index; + if (items.length > 1) { + index = partition(items, left, right); + if (left < index - 1) { + quickSort(items, left, index - 1); + } + if (index < right) { + quickSort(items, index, right); + } + } + return items; + }; + + return quickSort(elements, 0, size - 1); + }, + /** + * Returns the list as an array + * @return {Array} + */ + asArray: function () { + return elements.slice(0); + }, + /** + * Swaps the position of two elements + * @chainable + */ + swap: function (index1, index2) { + var aux; + if (index1 < size && index1 >= 0 && index2 < size && index2 >= 0) { + aux = elements[index1]; + elements[index1] = elements[index2]; + elements[index2] = aux; + } + return this; + }, + /** + * Returns the first element of the list + * @return {Object} + */ + getFirst: function () { + return elements[0]; + }, + /** + * Returns the last element of the list + * @return {Object} + */ + getLast: function () { + return elements[size - 1]; + }, + + /** + * Returns the last element of the list and deletes it from the list + * @return {Object} + */ + popLast: function () { + var lastElement; + size -= 1; + lastElement = elements[size]; + elements.splice(size, 1); + return lastElement; + }, + /** + * Returns an array with the objects that determine the minimum size + * the container should have + * The array values are in this order TOP, RIGHT, BOTTOM AND LEFT + * @return {Array} + */ + getDimensionLimit: function () { + var result = [100000, -1, -1, 100000], + objects = [undefined, undefined, undefined, undefined]; + //number of pixels we want the inner shapes to be + //apart from the border + + for (i = 0; i < size; i += 1) { + if (result[0] > elements[i].y) { + result[0] = elements[i].y; + objects[0] = elements[i]; + + } + if (result[1] < elements[i].x + elements[i].width) { + result[1] = elements[i].x + elements[i].width; + objects[1] = elements[i]; + } + if (result[2] < elements[i].y + elements[i].height) { + result[2] = elements[i].y + elements[i].height; + objects[2] = elements[i]; + } + if (result[3] > elements[i].x) { + result[3] = elements[i].x; + objects[3] = elements[i]; + } + } + return result; + }, + /** + * Clears the content of the arrayList + * @chainable + */ + clear: function () { + if (size !== 0) { + elements = []; + size = 0; + } + return this; + }, + /** + * Sets the elements for the object. + * @param {Array|null} items Array with the items to set. + * @chainable + */ + set: function (items) { + if (!(items === null || jQuery.isArray(items))) { + throw new Error("set(): The parameter must be an array or null."); + } + elements = (items && items.slice(0)) || []; + size = elements.length; + return this; + } + }; + }; + + PMDynaform.extendNamespace("PMDynaform.util.ArrayList", ArrayList); + +}()); + +(function () { + /** + * @class PMDynaform.util.DependentsFieldManager + * Class that handles dependent field events + * @param options {Object} Instance configuration + */ + var DependentsFieldManager = function (options) { + /** + * @param {object}: eventsManager, Dependent field event manager + * extends Backbone.Events + */ + this.eventsManager = {}; + this.matrix = {}; + this.dependencies = {}; + this.fields; + + /** + * @param {object}: form, Related form + */ + this.form = null; + DependentsFieldManager.prototype.init.call(this, options); + }; + /** + * initialize the DependentsFieldManager + * @chainable + */ + DependentsFieldManager.prototype.init = function (options) { + var defaults = { + form: null + }; + _.extend(defaults, options); + this.setForm(defaults.form); + _.extend(this.eventsManager, Backbone.Events); + return this; + }; + /** + * setForm: Sets the corresponding Related form + * @param form {object} instace PMDynaform.model.FormPanel + * @chainable + */ + DependentsFieldManager.prototype.setForm = function (form) { + this.form = form; + return this; + }; + /** + * addEvent, Records a new dependent field event + * @param key {string} Is the identifier that is registered in the event manager + * @param callback {function} Is the function that will be called after executing the event + * @param target {object} Is the origin of the method call + * @chainable + */ + DependentsFieldManager.prototype.addEvent = function (key, callback, target) { + this.eventsManager.on(key, callback, target); + return this; + }; + /** + * removeEvent, Disable Events Logged on the Dependent Field Handler + * @chainable + */ + DependentsFieldManager.prototype.removeEvent = function (observer) { + this.eventsManager.off(observer); + return this; + }; + /** + * notify, executes the notification corresponding to the registered event + * @param info {object} Information of the item that ejects the event + * @chainable + */ + DependentsFieldManager.prototype.notify = function (info) { + this.eventsManager.trigger(info.registrationName, info); + return this; + }; + /** + * getForm, obtain the related form + * @returns {PMDynaform.model.FormPanel} + */ + DependentsFieldManager.prototype.getForm = function () { + return this.form; + }; + /** + * getProject, obtain the project related + * @returns {PMDynaform.core.Project} + */ + DependentsFieldManager.prototype.getProject = function () { + var form = this.getForm(); + if (form && form.get("project")) { + return form.get("project"); + } + return null; + }; + /** + * registerNewDependencyRelation, Prepares to Record Dependent Field for a Field That Has Dependents + * @param name + * @chainable + */ + DependentsFieldManager.prototype.registerNewDependencyRelation = function (name) { + var relations; + relations = this.matrix; + if (!relations.hasOwnProperty(name)) { + relations[name] = []; + } + return this; + }; + /** + * registerNewDependent,Registers a new dependent field + * @param dependency + * @param dependent + * @chainable + */ + DependentsFieldManager.prototype.registerNewDependent = function (dependency, dependent) { + var relations; + relations = this.matrix; + if (relations.hasOwnProperty(dependency)) { + relations[dependency].push(dependent); + } + return this; + }; + /** + * Register a new dependency for field model + * @param target + * @param dependency + * @chainable + */ + DependentsFieldManager.prototype.registerDependency = function (target, dependency) { + if (!this.dependencies[target]) { + this.dependencies[target] = []; + } + this.dependencies[target].push(dependency); + return this; + }; + /** + * Assign the fields to this class + * @param fields + * @chainable + */ + DependentsFieldManager.prototype.setupFields = function (fields) { + this.fields = fields; + return this; + }; + /** + * Return a field from array fields by ID + * @param id + * @returns {FieldModel} + */ + DependentsFieldManager.prototype.getFieldById = function (id) { + var result; + if (id && id !== undefined) { + result = _.find(this.fields, function (item) { + return item.model.get("id") == id; + }); + } + return result; + }; + /** + * Dispatch a event + * @param {*} payload + */ + DependentsFieldManager.prototype.emit = function (payload) { + PMDynaform.EventBus.emit(payload); + }; + /** + * Create dependencies callbacks for field model in desc tree of dependencies + * @param {FieldModel} modelField + */ + DependentsFieldManager.prototype.createOneDirectional = function (modelField) { + this.oneDirectional(modelField, "dependencies", ""); + if (this.matrix[this.getFieldId(modelField)]) { + PMDynaform.EventBus.emit({ + channel: "dependencies", + event: this.getFieldId(modelField), + payload: "" + }); + } + }; + /** + * Return the id from field model for dependencies + * @param {*} model + * @returns {String} + */ + DependentsFieldManager.prototype.getFieldId = function (model) { + var id, + parent = model.get("parent"); + id = parent.get("type") === "grid" ? (model.get("columnId") || model.get("id")) + "-" + model.get("keyEvent") : model.get("id"); + return id; + }; + /** + * Handle the dependencies when the independent field has default value + * Model Field dependent field + * @param {FieldModel} modelField + */ + DependentsFieldManager.prototype.defaultValuesDependency = function (modelField) { + var that = this, + serial = Date.now().toString(), + dt = {}; + _.forEach(this.dependencies[this.getFieldId(modelField)], function (el) { + _.extend(dt, that.getDependenciesData(that.matrix[el][0])); + }); + modelField.executeDependency(dt, serial); + }; + /** + * Create dependencies callback in asc and desc order + * Model Field has dependencies + * fn is a function to call when finish all + * @param {FieldModel} modelField + * @param {function} fn + */ + DependentsFieldManager.prototype.createBidirectional = function (modelField, fn) { + var that = this, + serial = Date.now().toString(), + channel = "dependencies", + that = this, evs = []; + if (this.matrix[this.getFieldId(modelField)]) { + _.forEach(this.matrix[this.getFieldId(modelField)], function (el) { + evs.push({ + event: that.getFieldId(el) + serial + }); + }); + + PMDynaform.EventBus.subscribe({ + channel: channel, + type: "joinFork", + id: this.getFieldId(modelField) + serial, + deleteOnCompletion: true, + callback: fn, + events: evs + }); + this.oneDirectional(modelField, channel, serial); + PMDynaform.EventBus.emit({ + channel: "dependencies", + event: this.getFieldId(modelField) + serial, + payload: "" + }); + } else if (_.isFunction(fn)) { + fn(); + } + }; + /** + * Create a dependencies callback in asc order + * ModelField has dependencies + * channel is a string for subsrcibe in event bus + * serial is a unique string for identify the calls + * @param {FieldModel} modelField + * @param {String} channel + * @param {String} serial + */ + DependentsFieldManager.prototype.oneDirectional = function (modelField, channel, serial) { + var that = this; + if (this.matrix[this.getFieldId(modelField)]) { + _.forEach(this.matrix[this.getFieldId(modelField)], function (el) { + if (PMDynaform.EventBus.verifyObservableChannel(channel, that.getFieldId(el) + serial)) { + PMDynaform.EventBus.subscribeEventToJoinFork({ + channel: channel, + id: that.getFieldId(el) + serial, + events: [{ event: that.getFieldId(modelField) + serial }] + }); + } else { + PMDynaform.EventBus.subscribe({ + channel: channel, + type: "joinFork", + id: that.getFieldId(el) + serial, + deleteOnCompletion: true, + callback: function () { + var dt = that.getDependenciesData(el); + el.executeDependency(dt, serial); + }, + events: [{ event: that.getFieldId(modelField) + serial }] + }); + } + if (that.matrix[that.getFieldId(el)]) { + that.oneDirectional(el, "dependencies", serial); + } + }); + } + }; + /** + * Return data for dependents fields from a field model + * @param {FieldModel} model + * @returns {*} + */ + DependentsFieldManager.prototype.getDependenciesData = function (model) { + var that = this, + deep, + grid, row, isColumn = false, + res = {}, id = model.get("id"); + // Get data from row in grid web is not working in mobile + if (model.get("parent") && model.get("parent").get("type") === "grid") { + if (this.dependencies[this.getFieldId(model)]) { + isColumn = true; + //For grids in Mobile + if (PMDynaform.core.ProjectMobile) { + row = _.find(model.get("parent").get("rowCollection").models, function (row) { + return (row.getCells()[0].get("keyEvent") === model.get("keyEvent")); + }); + _.forEach(row.getCells(), function (el) { + res[el.get("id")] = el.get("data")["value"]; + }); + } else { //For grid in Web Application + grid = model.get("parent").get("view"); + row = _.find(grid.gridtable, function (row) { + return (row[0].model.get("keyEvent") === model.get("keyEvent")); + }); + _.forEach(row, function (el) { + deep = _.find(that.dependencies[that.getFieldId(model)], function (o) { return o === that.getFieldId(el.model); }); + if (deep) { + res[el.model.get("columnId")] = el.model.get("data")["value"]; + } + }); + } + res["grid_name"] = model.get("parent").get("variable"); + } + } + // For form + _.forEach(this.dependencies[this.getFieldId(model)], function (el) { + var obj = _.find(that.fields, function (f) { + return f.model.get("id") == el; + }); + if (obj) { + res[obj.model.get("id")] = obj.model.get("data").value; + } + }); + return res; + }; + + PMDynaform.extendNamespace("PMDynaform.util.DependentsFieldManager", DependentsFieldManager); +}()); +(function () { + + var RestProxy = function (options) { + this.url = null; + this.method = null; + this.rc = null; + this.data = null; + RestProxy.prototype.init.call(this, options); + }; + + RestProxy.prototype.type = "RestProxy"; + RestProxy.prototype.init = function (options) { + var defaults = { + url: null, + method: 'GET', + data: {}, + dataType: 'json', + authorizationType: 'none', + authorizationOAuth: false, + success: function () { + }, + failure: function () { + }, + complete: function () { + } + }; + jQuery.extend(true, defaults, options); + this.setRestClient() + .setUrl(defaults.url) + .setAuthorizationOAuth(defaults.authorizationOAuth) + .setMethod(defaults.method) + .setData(defaults.data) + .setDataType(defaults.dataType) + .setSuccessAction(defaults.success) + .setFailureAction(defaults.failure) + .setCompleteAction(defaults.complete); + }; + + RestProxy.prototype.setRestClient = function () { + if (this.rc instanceof RestClient === false) { + this.rc = new RestClient(); + } + return this; + }; + + RestProxy.prototype.setUrl = function (url) { + this.url = url; + return this; + }; + + RestProxy.prototype.setAuthorizationOAuth = function (option) { + if (typeof option === 'boolean') { + this.rc.setSendBearerAuthorization(option); + } + return this; + }; + + RestProxy.prototype.setMethod = function (method) { + this.method = method; + return this; + }; + RestProxy.prototype.setSuccessAction = function (action) { + RestProxy.prototype.success = action; + return this; + }; + RestProxy.prototype.setFailureAction = function (action) { + RestProxy.prototype.failure = action; + return this; + }; + RestProxy.prototype.setCompleteAction = function (action) { + RestProxy.prototype.complete = action; + return this; + }; + + RestProxy.prototype.setData = function (data) { + this.data = data; + return this; + }; + RestProxy.prototype.getData = function () { + return this.data; + }; + RestProxy.prototype.setDataType = function (dataType) { + this.rc.setDataType(dataType); + return this; + }; + RestProxy.prototype.setCredentials = function (usr, pass) { + this.rc.setBasicCredentials(usr, pass); + return this; + }; + RestProxy.prototype.setContentType = function () { + this.rc.setContentType(); + return this; + }; + RestProxy.prototype.send = function () { + }; + + RestProxy.prototype.receive = function () { + }; + RestProxy.prototype.setAuthorizationType = function (type, credentials) { + this.rc.setAuthorizationType(type); + switch (type) { + case 'none': + break; + case 'basic': + this.rc.setBasicCredentials(credentials.client, credentials.secret); + break; + case 'oauth2': + this.rc.setAccessToken(credentials); + break; + } + + return this; + }; + + RestProxy.prototype.post = function (settings) { + var that = this; + if (settings !== undefined) { + that.init(settings); + } + if (this.rc) { + that.rc.postCall({ + url: that.url, + id: that.uid, + data: that.data, + success: function (xhr, response) { + that.success.call(that, xhr, response); + }, + failure: function (xhr, response) { + that.failure.call(that, xhr, response); + }, + complete: function (xhr, response) { + that.complete.call(that, xhr, response); + } + }); + that.rc.setSendBearerAuthorization(false); + + } else { + throw new Error("the RestClient was not defined, please verify the property 'rc' for continue."); + } + }; + + RestProxy.prototype.update = function (settings) { + var that = this; + if (settings !== undefined) { + that.init(settings); + } + if (this.rc) { + this.rc.putCall({ + url: this.url, + id: this.uid, + data: this.data, + success: function (xhr, response) { + that.success.call(this, xhr, response); + }, + failure: function (xhr, response) { + that.failure.call(this, xhr, response); + }, + complete: function (xhr, response) { + that.complete.call(that, xhr, response); + } + }); + } else { + throw new Error("the RestClient was not defined, please verify the property 'rc' for continue."); + } + }; + + RestProxy.prototype.get = function (settings) { + var that = this; + if (settings !== undefined) { + that.init(settings); + } + if (this.rc) { + that.rc.getCall({ + url: that.url, + id: that.uid, + data: that.data, + success: function (xhr, response) { + that.success.call(that, xhr, response); + }, + failure: function (xhr, response) { + that.failure.call(that, xhr, response); + }, + complete: function (xhr, response) { + that.complete.call(that, xhr, response); + } + }); + that.rc.setSendBearerAuthorization(false); + + } else { + throw new Error("the RestClient was not defined, please verify the property 'rc' for continue."); + } + }; + + RestProxy.prototype.remove = function (settings) { + var that = this; + if (settings !== undefined) { + that.init(settings); + } + if (this.rc) { + this.rc.deleteCall({ + url: this.url, + id: this.uid, + data: this.data, + success: function (xhr, response) { + that.success.call(this, xhr, response); + }, + failure: function (xhr, response) { + that.failure.call(this, xhr, response); + }, + complete: function (xhr, response) { + that.complete.call(that, xhr, response); + } + }); + } else { + throw new Error("the RestClient was not defined, please verify the property for continue."); + } + }; + + RestProxy.prototype.success = function (xhr, response) { + }; + + RestProxy.prototype.failure = function (xhr, response) { + }; + + RestProxy.prototype.complete = function (xhr, response) { + }; + + PMDynaform.extendNamespace('PMDynaform.proxy.RestProxy', RestProxy); + +}()); +(function () { + + var Validator = Backbone.View.extend({ + template: _.template($("#tpl-validator").html()), + events: { + "mouseover": "onMouseOver" + }, + initialize: function () { + this.render(); + }, + onMouseOver: function () { + + }, + render: function () { + this.$el.addClass("pmdynaform-message-error"); + this.$el.html(this.template(this.model.toJSON())); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Validator", Validator); + +}()); +(function () { + var PanelView = Backbone.View.extend({ + content: null, + colsIndex: null, + template: null, + collection: null, + items: null, + views: [], + renderTo: document.body, + project: null, + events: { + "click a#print-button": "printForm" + }, + initialize: function (options) { + var i, defaults = { + factory: { + products: { + "form": { + model: PMDynaform.model.FormPanel, + view: PMDynaform.view.FormPanel + }, + "fieldset": { + model: PMDynaform.model.Fieldset, + view: PMDynaform.view.Fieldset + }, + "panel": { + model: PMDynaform.model.FormPanel, + view: PMDynaform.view.FormPanel + } + }, + defaultProduct: "form" + } + }; + if (options.renderTo) { + this.renderTo = options.renderTo; + } + if (options.project) { + this.project = options.project; + } + this.views = []; + + this.makePanels(); + this.render(); + for (i = 0; i < this.views.length; i += 1) { + this.views[i].runningFormulator(); + this.views[i].afterRenderHook(); + } + }, + printForm: function () { + var result, + flashModel, + forms = this.views, + i, + form, + formMode = forms[0].model.get("mode"), + project = this.project; + + if ((project && project.isPreview) || formMode === "disabled") { + window.print(); + } else { + if (typeof this.views[0].model.get("onBeforePrintHandler") === "function") { + this.views[0].model.get("onBeforePrintHandler")(); + } + for (i = 0; i < forms.length; i += 1) { + form = forms[i]; + result = form.saveForm(); + } + if (result) { + window.print(); + if (typeof this.views[0].model.get("onAfterPrintHandler") === "function") { + this.views[0].model.get("onAfterPrintHandler")(); + } + } else { + flashModel = { + message: "error", + emphasisMessage: "Error:", + startAnimation: 1000, + type: "danger", + appendTo: this.el, + duration: 3000 + }; + this.project.flashMessage(flashModel); + } + } + return this; + }, + getData: function () { + var i, + k, + field, + subform, + fields, + panels, + formData; + + panels = this.model.get("items"); + formData = this.model.getData(); + for (i = 0; i < panels.length; i += 1) { + fields = this.views[i].items.asArray(); + for (k = 0; k < fields.length; k += 1) { + + if ((typeof fields[k].model.getData === "function") && (fields[k].model.attributes.type === "form")) { + subform = fields[k].getData(); + $.extend(true, formData.variables, subform.variables); + } else if (typeof fields[k].model.getData === "function") { + field = fields[k].model.getData(); + formData.variables[field.name] = field.value; + } + } + } + return formData; + }, + /** + * Function to get Data to end point + * @returns {{}} + */ + getData2: function () { + var i, + k, + fieldDt, + fields, + panels, + grid, + data = {}, + dataRecursive; + + panels = this.model.get("items"); + for (i = 0; i < panels.length; i += 1) { + fields = this.views[i].items.asArray(); + for (k = 0; k < fields.length; k += 1) { + if (this.isValidFieldToSendData(fields[k])) { + if (typeof fields[k].getItems === "function") { + dataRecursive = this.getDataRecursive(fields[k]); + $.extend(true, data, dataRecursive); + } else if (typeof fields[k].model.getData === "function") { + if (fields[k].model.get("type") === "grid") { + grid = fields[k].model; + data[grid.get("name")] = fields[k].getData2(); + } else { + fieldDt = fields[k].model.getAppData(); + $.extend(true, data, fieldDt); + } + } + } + } + } + return data; + }, + /** + * Function to get deleted data for multiple file upload field + * @returns {Object} + */ + getDeletedData: function () { + var i, + k, + fields, + panels, + removedDataRecursive, + grid, + data = {"__VARIABLE_DOCUMENT_DELETE__": {}}, + documentDelete; + panels = this.model.get("items"); + for (i = 0; i < panels.length; i += 1) { + fields = this.views[i].items.asArray(); + for (k = 0; k < fields.length; k += 1) { + if (this.isValidFieldToSendData(fields[k])) { + if (typeof fields[k].getItems === "function") { + removedDataRecursive = this.getRemovedDataRecursive(fields[k]); + $.extend(true, data["__VARIABLE_DOCUMENT_DELETE__"], removedDataRecursive); + } else if (typeof fields[k].model.getData === "function") { + if (fields[k].model.get("type") === "grid") { + grid = fields[k].model; + if (typeof fields[k].getDeletedData === "function") { + data["__VARIABLE_DOCUMENT_DELETE__"][grid.get("name")] = fields[k].getDeletedData(); + } + } else { + if (typeof fields[k].model.makeVariableDocumentDelete === "function") { + documentDelete = fields[k].model.makeVariableDocumentDelete(); + $.extend(true, data["__VARIABLE_DOCUMENT_DELETE__"], documentDelete); + } + } + } + } + } + } + return data; + }, + /** + * This function verify that field is valid to send data + * @param field + * @returns {boolean} + */ + isValidFieldToSendData: function (field) { + var flag = false, + invalidTypes = ["empty", "title", "subtitle", "button", "submit", "panel", "link", "image"]; + + if (field.model.get("mode") === "view") { + if (invalidTypes.indexOf(field.model.get("originalType")) === -1) { + flag = true; + } + } else { + if (invalidTypes.indexOf(field.model.get("type")) === -1) { + flag = true; + } + } + return flag; + }, + setAppData: function (data) { + this.getPanels()[0].setAppData(data); + }, + getDataRecursive: function (view) { + var items = view.getItems(), + viewField, + fieldDt, + dataRecursive = {}, + grid, + data = {}, + index; + + for (index = 0; index < items.length; index += 1) { + if (this.isValidFieldToSendData(items[index])) { + viewField = items[index]; + if (this.isValidFieldToSendData(viewField)) { + if (typeof viewField.getItems === "function") { + dataRecursive = this.getDataRecursive(viewField); + $.extend(true, data, dataRecursive); + } else if (typeof viewField.model.getData === "function") { + if (viewField.model.get("type") === "grid") { + grid = viewField.model; + data[grid.get("name")] = viewField.getData2(); + } else { + fieldDt = viewField.model.getAppData(); + $.extend(true, data, fieldDt); + } + } + } + } + } + return data; + }, + /** + * Get all subform multiple file removed data + * @param {*} view + * @returns {Object} + */ + getRemovedDataRecursive: function (view) { + var items = view.getItems(), + viewField, + fieldDt, + dataRecursive = {}, + grid, + data = {}, + index; + for (index = 0; index < items.length; index += 1) { + if (this.isValidFieldToSendData(items[index])) { + viewField = items[index]; + if (this.isValidFieldToSendData(viewField)) { + if (typeof viewField.getItems === "function") { + dataRecursive = this.getRemovedDataRecursive(viewField); + $.extend(true, data, dataRecursive); + } else if (typeof viewField.model.getData === "function") { + if (viewField.model.get("type") === "grid") { + grid = viewField.model; + if (typeof viewField.getDeletedData === "function") { + data[grid.get("name")] = viewField.getDeletedData(); + } + } else { + if (typeof viewField.model.makeVariableDocumentDelete === "function") { + fieldDt = viewField.model.makeVariableDocumentDelete(); + $.extend(true, data, fieldDt); + } + } + } + } + } + } + return data; + }, + setData2: function (data) { + var index = 0; + this.getPanels()[index].setData2(data); + return this; + }, + makePanels: function () { + var i, + items, + panelModel, + view; + + this.views = []; + items = this.model.get("items"); + + for (i = 0; i < items.length; i += 1) { + if ($.inArray(items[i].type, ["panel", "form"]) >= 0) { + items[i].parent = this; + panelModel = new PMDynaform.model.FormPanel(items[i]); + panelModel.set("project", this.project); + view = new PMDynaform.view.FormPanel({ + model: panelModel, + project: this.project + }); + + if (this.project) { + panelModel.set("project", this.project); + } + + this.views.push(view); + } + } + + return this; + }, + getPanels: function () { + return (this.views.length > 0) ? this.views : []; + }, + render: function () { + var i, + printed = true; + + this.$el = $(this.el); + for (i = 0; i < this.views.length; i += 1) { + printed = this.views[i].model.get("printable"); + this.$el.append(this.views[i].render().el); + if (i === 0 && printed && typeof PMDynaform.core.ProjectMobile === "undefined") { + this.addPrinForm(this.views[i].el); + if (typeof this.views[i].model.get("onBeforePrintHandler") === "function") { + this.model.set("onBeforePrintHandlder", this.views[i].model.get("onBeforePrintHandlder")) + } + if (typeof this.views[i].model.get("onAfterPrintHandler") === "function") { + this.model.set("onAfterPrintHandlder", this.views[i].model.get("onAfterPrintHandlder")) + } + } + } + this.$el.addClass("pmdynaform-container"); + if (PMDynaform.core.ProjectMobile) { + this.$el.css({ + height: "auto" + }); + } + $(this.renderTo).append(this.el); + + return this; + }, + afterRender: function () { + var i; + + for (i = 0; i < this.views.length; i += 1) { + this.views[i].afterRender(); + } + + return this; + }, + addPrinForm: function (container) { + var printContainer, + buttonPrint; + printContainer = document.createElement("div"); + buttonPrint = document.createElement("a"); + buttonPrint.className = "print-button"; + buttonPrint.id = "print-button"; + printContainer.appendChild(buttonPrint); + printContainer.className = "printContainer"; + if (container instanceof jQuery) { + container.prepend(printContainer); + } else { + $(container).prepend(printContainer); + } + return this; + }, + /** + * Execute this function on after the submit button + * @returns {PanelView} + */ + afterSubmit: function () { + var index; + for (index = 0; index < this.views.length; index += 1) { + if (_.isFunction(this.views[index].afterSubmit)) { + this.views[index].afterSubmit(); + } + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Panel", PanelView); + +}()); + +(function () { + var FormPanel = Backbone.View.extend({ + tagName: "form", + content: null, + template: null, + items: new PMDynaform.util.ArrayList(), + views: [], + templateRow: _.template($('#tpl-row').html()), + colSpanLabel: 3, + colSpanControl: 9, + project: null, + preTargetControl: null, + sqlFields: [], + changeFired: false, + submit: [], + events: { + 'submit': 'onSubmit' + }, + onChange: function () { + }, + onChangeCallback: function () { + }, + requireVariableByField: [], + /** + * Executes form and subForm's onChangeCallBack + * @param params + */ + checkBinding: function (params) { + var parent = this.project.getForm(), + mobileSubForm = this.model.get("form"), + idField = this.model.get("id") || (mobileSubForm && mobileSubForm.model.get("id")); + params = this.getExtraData(params); + //Executes onChangeCallBack of the SubForm + this.onChangeCallback(params.idField, params.current, params.previous, params.row); + if (parent && parent.model.isSubForm(idField)) { + //Executes onChangeCallBack of the Form + parent.onChangeCallback(params.idField, params.current, params.previous, params.row); + } + }, + /** + * Sets OnChangeCallBack function. + * @param handler + * @returns {FormPanel} + */ + setOnChange: function (handler) { + if (typeof handler === "function") { + this.onChangeCallback = handler; + } + return this; + }, + /** + * Modifies the current params. + * @param params {object} + * @returns {object} + */ + getExtraData: function (params) { + if (this.hasOwnProperty("extraData")) { + params.idField = this.createGridId(this.extraData.gridId, this.extraData.nRow, params.idField) || params.idField; + params.row = this.getFields() || null; + } + return params; + }, + /** + * Create newId for MobileGrid. + * @param gridId + * @param nRow + * @param idColumn + * @returns {string} + */ + createGridId: function (gridId, nRow, idColumn) { + return "[" + gridId + "][" + nRow + "][" + idColumn + "]"; + }, + onChangeHandler: function () { + var that = this; + return function (field, newValue, previousValue) { + if (typeof that.onChange === 'function') { + that.onChange(field, newValue, previousValue); + } + }; + }, + initialize: function (options) { + var fileConf, + gridConf; + + if (PMDynaform.core.ProjectMobile) { + gridConf = { + model: PMDynaform.model.GridMobile, + view: PMDynaform.view.GridMobile + }; + fileConf = { + model: PMDynaform.model.FileUpload, + view: PMDynaform.view.FileUpload + }; + } else { + gridConf = { + model: PMDynaform.model.GridPanel, + view: PMDynaform.view.GridPanel + }; + fileConf = { + model: PMDynaform.model.File, + view: PMDynaform.view.File + }; + } + var defaults = { + factory: { + products: { + "text": { + model: PMDynaform.model.TextR, + view: PMDynaform.view.TextR + }, + "textarea": { + model: PMDynaform.model.TextAreaR, + view: PMDynaform.view.TextAreaR + }, + "checkgroup": { + model: PMDynaform.model.CheckGroupR, + view: PMDynaform.view.CheckGroupR + }, + "checkbox": { + model: PMDynaform.model.CheckBox, + view: PMDynaform.view.CheckBox + }, + "radio": { + model: PMDynaform.model.RadioR, + view: PMDynaform.view.RadioR + }, + "dropdown": { + model: PMDynaform.model.DropdownR, + view: PMDynaform.view.DropdownR + }, + "button": { + model: PMDynaform.model.Button, + view: PMDynaform.view.Button + }, + "submit": { + model: PMDynaform.model.Submit, + view: PMDynaform.view.Submit + }, + "datetime": { + model: PMDynaform.model.DatetimeR, + view: PMDynaform.view.DatetimeR + }, + "fieldset": { + model: PMDynaform.model.Fieldset, + view: PMDynaform.view.Fieldset + }, + "suggest": { + model: PMDynaform.model.SuggestR, + view: PMDynaform.view.SuggestR + }, + "link": { + model: PMDynaform.model.Link, + view: PMDynaform.view.Link + }, + "hidden": { + model: PMDynaform.model.Hidden, + view: PMDynaform.view.Hidden + }, + "title": { + model: PMDynaform.model.Title, + view: PMDynaform.view.Title + }, + "subtitle": { + model: PMDynaform.model.Title, + view: PMDynaform.view.Title + }, + "label": { + model: PMDynaform.model.Label, + view: PMDynaform.view.Label + }, + "empty": { + model: PMDynaform.model.Empty, + view: PMDynaform.view.Empty + }, + "file": fileConf, + "image": { + model: PMDynaform.model.Image, + view: PMDynaform.view.Image + }, + "geomap": { + model: PMDynaform.model.GeoMap, + view: PMDynaform.view.GeoMap + }, + "grid": gridConf, + "form": { + model: PMDynaform.model.SubForm, + view: PMDynaform.view.SubForm + }, + "annotation": { + model: PMDynaform.model.Annotation, + view: PMDynaform.view.Annotation + }, + "location": { + model: PMDynaform.model.GeoMobile, + view: PMDynaform.view.GeoMobile + }, + "scannercode": { + model: PMDynaform.model.Qrcode_mobile, + view: PMDynaform.view.Qrcode_mobile + }, + "signature": { + model: PMDynaform.model.Signature_mobile, + view: PMDynaform.view.Signature_mobile + }, + "imagemobile": { + model: PMDynaform.model.ImageFieldModel, + view: PMDynaform.view.ImageFieldView + }, + "audiomobile": { + model: PMDynaform.model.FileMobile, + view: PMDynaform.view.FileMobile + }, + "videomobile": { + model: PMDynaform.model.FileMobile, + view: PMDynaform.view.FileMobile + }, + "panel": { + model: PMDynaform.model.PanelField, + view: PMDynaform.view.PanelField + }, + "multiplefile": { + model: PMDynaform.file.MultipleFileModel, + view: PMDynaform.file.MultipleFileView + } + }, + defaultProduct: "empty" + } + }; + this.items = new PMDynaform.util.ArrayList(); + this.onChangeCallback = options.onChangeCallback ? options.onChangeCallback : new Function(); + if (options.project) { + this.project = options.project; + } + this.setFactory(defaults.factory); + this.applyGlobalMode(); + this.makeItems(); + }, + setAction: function () { + this.$el.attr("action", this.model.get("action")); + return this; + }, + setMethod: function () { + this.$el.attr("method", this.model.get("method")); + + return this; + }, + setFactory: function (factory) { + this.factory = factory; + return this; + }, + getData: function () { + var i, + k, + field, + fields, + panels, + data = [], + + panels = this.viewsBuilt; + + for (i = 0; i < panels.length; i += 1) { + fields = panels[i]; + for (k = 0; k < fields.length; k += 1) { + field = fields[k].model.get("data"); + data.push(field); + } + } + return data; + }, + countElementsInJSON: function (obj) { + var i = 0, + item; + for (item in obj) { + i += 1; + } + return i; + }, + setData2: function (data) { + var key, value, label, field, nameReplace, name; + if (typeof data === "object") { + for (key in data) { + name = key; + field = getFieldByName(name); + if (_.isArray(field) && field.length > 0) { + value = data[key]; + if (data.hasOwnProperty(key + "_label")) { + label = data[key + "_label"]; + } else { + label = data[key]; + } + jQuery.each(field, function (index, element) { + element.setData({ + value: value, + label: label + }); + }); + } + } + } + return this; + }, + /** + * setAppData Sets the data to the form + * @param appData {object} Set of valid data for the form + * @chainable + */ + setAppData: function (appData) { + if (typeof appData === "object") { + this.model.setAppData(appData); + } + return this; + }, + validateVariableField: function (field) { + var isOk = false; + if ($.inArray(field.type, this.requireVariableByField) >= 0) { + if (field.var_uid) { + isOk = true; + } + } else { + isOk = "NOT"; + } + return isOk; + }, + makeItems: function () { + var i, + j, + factory = this.factory, + that = this, + product, + variableEnabled, + productBuilt, + rowView, + productModel, + jsonFixed, + fieldModel, + fields, + items, + configColSpan; + this.sqlFields = []; + fields = this.model.get("items"); + this.viewsBuilt = []; + this.items.clear(); + + for (i = 0; i < fields.length; i += 1) { + rowView = []; + for (j = 0; j < fields[i].length; j += 1) { + variableEnabled = this.validateVariableField(fields[i][j]); + if (fields[i][j] !== null && (variableEnabled === true || variableEnabled === "NOT")) { + fields[i][j] = this.applyGlobalModeField(fields[i][j]); + if (fields[i][j].type) { + if (!PMDynaform.core.ProjectMobile && fields[i][j].type === "location") { + fields[i][j].type = "geomap"; + } + if (fields[i][j].type === "label") { + fields[i][j].type = "annotation"; + } + if (fields[i][j].type === "checkbox" && fields[i][j].dataType !== "boolean" && fields[i][j].dataType !== "") { + fields[i][j].type = "checkgroup"; + } + if (fields[i][j].type === "file" && fields[i][j].hasOwnProperty("inputDocuments")) { + if ($.isArray(fields[i][j]["inputDocuments"])) { + $(fields[i][j]["inputDocuments"]).each(function () { + that.model.attributes.inputDocuments[fields[i][j]["variable"]] = this; + }); + } + } + jsonFixed = new PMDynaform.core.TransformJSON({ + parentMode: this.model.get("mode"), + field: fields[i][j] + }); + product = factory.products[jsonFixed.getJSON().type.toLowerCase()] ? + factory.products[jsonFixed.getJSON().type.toLowerCase()] : factory.products[factory.defaultProduct]; + } else { + jsonFixed = new PMDynaform.core.TransformJSON({ + parentMode: this.model.get("mode"), + field: fields[i][j] + }); + product = factory.products[factory.defaultProduct]; + } + + //The number 12 is related to 12 columns from Bootstrap framework + configColSpan = this.generateColSpan(fields[i][j].colSpan); + fieldModel = { + project: this.project, + parentMode: this.model.get("mode"), + namespace: this.model.get("namespace"), + variable: fields[i][j].variable ? fields[i][j].variable : null, + name: fields[i][j].name, + id: fields[i][j].id || PMDynaform.core.Utils.generateID(), + options: fields[i][j].options, + optionsSql: fields[i][j].optionsSql, + required: fields[i][j].required || false, + hint: fields[i][j].hint || "", + format: fields[i][j].format || "", + formula: fields[i][j].formula || "", + sql: fields[i][j].sql || "", + defaultValue: fields[i][j].defaultValue || "", + defaultDate: fields[i][j].defaultDate || null, + _hidden: fields[i][j]._hidden || false, + colSpanLabel: configColSpan.label, + colSpanControl: configColSpan.control + }; + if (fields[i][j].type === "form" || fields[i][j].type === "grid") { + fieldModel.variables = this.model.get("variables") || []; + fieldModel.data = this.model.get("data") || []; + } + + $.extend(true, fieldModel, jsonFixed.getJSON()); + + if (fieldModel.type === "form" && fieldModel.mode === "parent") { + fieldModel.mode = this.model.get("mode"); + } + + //format data: geotag to text and textarea + if (fieldModel.data && (fieldModel.type === "text" || fieldModel.type === "textarea" )) { + var geo = fieldModel.data.value; + if (geo && geo.latitude && geo.longitude && geo.altitude) { + fieldModel.data.value = geo.latitude + " " + geo.longitude + " " + geo.altitude; + fieldModel.data.label = geo.latitude + " " + geo.longitude + " " + geo.altitude; + } + } + fieldModel.form = this.model; + fieldModel.parent = this.model; + productModel = new product.model(fieldModel); + productBuilt = new product.view({ + model: productModel, + project: this.project, + parent: this, + form: this + }); + if (productModel.get("type") === "form") { + this.model.get("subForms").insert(productBuilt); + } + productBuilt.parent = this; + productBuilt.project = this.project; + this.model.addField(productModel, productModel.get("variable") || productModel.get("name") || productModel.get("id")); + //add view in mobile project + if (this.project.addViewFields && productModel.get("type") !== "empty") { + this.project.addViewFields(productBuilt); + } + rowView.push(productBuilt); + this.items.insert(productBuilt); + productBuilt.model.attributes.view = productBuilt; + } else { + console.error("The field must have the variable property and must to be an object: ", fields[i][j]); + } + } + if (rowView.length) { + this.viewsBuilt.push(rowView); + } + } + this.runningFormulator(); + + this.model.get("dependentsManager").setupFields(this.getAllFields()); + return this; + }, + /** + * Generate the colSpan to label and control + * @param colSpan + * @returns {{label: number, control: number}} + */ + generateColSpan: function (colSpan) { + var defaultColSpan = { + label: 2, + control: 10 + }; + switch (parseInt(colSpan)) { + case 6: + case 4: + case 1: + defaultColSpan.label = 4; + defaultColSpan.control = 8; + break; + case 5: + case 3: + case 2: + defaultColSpan.label = 5; + defaultColSpan.control = 7; + break; + } + return defaultColSpan; + }, + /** + * Execute a defined hook for all rendered views + * @chainable + */ + afterRenderHook: function () { + var items, + field, + i, + j, + rowCurrent, + col, + row, + rowsAll; + items = this.viewsBuilt; + for (i = 0; i < items.length; i += 1) { + for (j = 0; j < items[i].length; j += 1) { + field = items[i][j]; + if (typeof field.model.afterRenderHook === "function") { + field.model.afterRenderHook(); + } + if (field.model.get("type") === "grid") { + rowsAll = field.gridtable; + for (row = 0; row < rowsAll.length; row += 1) { + rowCurrent = rowsAll[row]; + for (col = 0; col < rowCurrent.length; col += 1) { + if (typeof rowCurrent[col].model.afterRenderHook === "function") { + rowCurrent[col].model.afterRenderHook(); + } + } + } + } + } + } + return this; + }, + runningFormulator: function () { + var items, + field, + i, + j, + fieldsAsocied, + rowCurrent, + col; + items = this.viewsBuilt; + for (i = 0; i < items.length; i += 1) { + for (j = 0; j < items[i].length; j += 1) { + field = items[i][j]; + if (field.model.get("type") === "form") { + if (field.runningFormulator) { + field.runningFormulator(); + } + } + if (field.model.get("type") === "grid") { + var rowsAll = field.gridtable; + for (var row = 0; row < rowsAll.length; row += 1) { + rowCurrent = rowsAll[row]; + for (col = 0; col < rowCurrent.length; col += 1) { + if (rowCurrent[col].model.get("formula") && rowCurrent[col].model.get("formula").trim().length) { + fieldsAsocied = rowCurrent.filter(function (element) { + if (rowCurrent[col].fieldValid.indexOf(element.model.get("id")) > -1) { + element.onFieldAssociatedHandler(); + } + }); + } + } + } + } else { + if (field.model.get("formula") && field.model.get("formula").trim().length) { + fieldsAsocied = items.filter(function (element) { + var k; + for (k = 0; k < element.length; k += 1) { + if (field.fieldValid.indexOf(element[k].model.get("id")) > -1) { + element[k].onFieldAssociatedHandler(); + } + } + }); + } + } + } + } + return this; + }, + getVariable: function (var_uid) { + var i, + varSelected, + variables = this.model.attributes.variables; + + loop_variables: + for (i = 0; i < variables.length; i += 1) { + if (variables[i] && variables[i].var_uid === var_uid) { + varSelected = variables[i]; + break loop_variables; + } + } + return varSelected; + }, + getFields: function () { + return (this.items.getSize() > 0) ? this.items.asArray() : []; + }, + /** + * Returns all the fields in the form including the ones in any nested subform. + * @returns {Array.PMDynaform.view.Field} + */ + getAllFields: function () { + var formElements = this.getFields(), + subformsFields = [], + fields; + + fields = formElements.filter(function (i) { + // The second expression is necessary since Grid for Mobile doesn't inherit from PMDynaform.view.Field. + if (i instanceof PMDynaform.view.Field + || (PMDynaform.view.GridMobile && i instanceof PMDynaform.view.GridMobile)) { + return true; + } else if (i instanceof PMDynaform.view.SubForm) { + subformsFields = subformsFields.concat(i.getAllFields()); + } + return false; + }); + + return fields.concat(subformsFields); + }, + beforeRender: function () { + return this; + }, + applySuccess: function () { + var items = this.items.asArray(), + i; + + for (i = 0; i < items.length; i += 1) { + if (items[i].applyStyleSuccess) { + items[i].applyStyleSuccess(); + } + } + }, + onSubmit: function (event) { + var booResponse; + if (this.executeSubmitArray()) { + if (!this.isValid(event)) { + booResponse = false; + } else { + this.applySuccess(); + booResponse = true; + } + //validate if has has submitRest enabled + if (this.project.submitRest) { + if (event !== undefined) { + event.preventDefault(); + } + if (booResponse) { + this.project.onSubmitForm(); + } + } else { + if (booResponse && event && event.type === 'submit') { + this.prepareFormToPost(); + } + } + } + else { + if (event !== undefined) { + event.preventDefault(); + } + } + return booResponse; + }, + /** + * Submit to next step the current form panel + */ + submitNextStep: function () { + this.$el.submit(); + return this; + }, + /** + * prepare and enable fields to post the data + * @param event + * @returns {FormPanel} + */ + prepareFormToPost: function () { + //force to enable to post data + if (this.project) { + this.project.modalProgress.render(); + } + this.$el.find(".form-control").prop('disabled', false); + this.$el.find("input[type='hidden']").prop('disabled', false); + this.$el.find(".pmdynaform-control-checkbox").prop('disabled', false); + this.$el.find(".pmdynaform-control-checkgroup").prop('disabled', false); + this.$el.find(".pmdynaform-control-radio").prop('disabled', false); + return this; + }, + executeSubmitArray: function () { + var executeSubmit = true, + responseCallback = true, + indexSubmit; + + for (indexSubmit = 0; indexSubmit < this.submit.length; indexSubmit += 1) { + if (typeof this.submit[indexSubmit] === "function") { + responseCallback = this.submit[indexSubmit](); + if (responseCallback !== undefined && typeof responseCallback === "boolean" && responseCallback === false) { + executeSubmit = false; + break; + } + } + } + return executeSubmit; + }, + /** + * Ckeck if there is a dependent field loading. + * @returns {Boolean} + */ + isRunningDependents: function () { + var i, + formValid = true, + itemsField = this.items.asArray(), + field, + hasLoadingFields = false; + if (itemsField.length > 0) { + for (i = 0; i < itemsField.length; i += 1) { + field = itemsField[i]; + if (field.isLoading && field.isLoading()) { + hasLoadingFields = true; + break; + } + } + } + if (hasLoadingFields) { + this.waitToLoadFieldsMessage(); + formValid = false; + } + return formValid; + }, + isValid: function (event) { + var i, + formValid = true, + itemField, + itemsField = this.items.asArray(), + filesNoUploaded = [], + field, + hasLoadingFields = false; + + if (itemsField.length > 0) { + for (i = 0; i < itemsField.length; i += 1) { + field = itemsField[i]; + if (field.validate) { + if (field.firstLoad) { + field.firstLoad = false; + } + field.validate(event); + if (!field.model.get("valid")) { + if (itemField === undefined) { + itemField = field; + } + formValid = field.model.get("valid"); + } + } + if (field.isLoading && field.isLoading()) { + hasLoadingFields = true; + } + // Verify if there is getFilesNotUploaded method + if (field.getFilesNotUploaded && typeof field.getFilesNotUploaded === "function") { + filesNoUploaded = filesNoUploaded.concat(field.getFilesNotUploaded()); + } + } + } + if (hasLoadingFields) { + this.waitToLoadFieldsMessage(); + formValid = false; + } + if (filesNoUploaded.length > 0) { + formValid = false; + this.showFilesNoUploaded(filesNoUploaded); + } + if (formValid) { + for (i = 0; i < itemsField.length; i += 1) { + if (( itemsField[i].model.get("var_name") !== undefined) && (itemsField[i].model.get("var_name").trim().length === 0 )) { + if (itemsField[i].model.get("type") === "radio") { + itemsField[i].$el.find("input").attr("name", ""); + } + } + } + } else { + if (itemField && itemField.model.get("type") !== "grid" && itemField.model.get("type") !== "form") { + itemField.setFocus(); + } + } + return formValid; + }, + render: function (subForm) { + var i, + j, + $rowView; + if (subForm) { + this.el = document.createElement("div"); + this.$el = $(this.el); + } + for (i = 0; i < this.viewsBuilt.length; i += 1) { + $rowView = $(this.templateRow()); + for (j = 0; j < this.viewsBuilt[i].length; j += 1) { + this.viewsBuilt[i][j].model.set('nameModalSuggest', this.__uidModal || null); + $rowView.append(this.viewsBuilt[i][j].render().el); + } + this.$el.append($rowView); + } + this.$el.attr("role", "form"); + this.$el.addClass("form-horizontal pmdynaform-form"); + this.el.style.height = "auto"; + this.setAction(); + this.setMethod(); + this.$el.attr("id", this.model.get("id")); + if (this.model.get("target")) { + this.$el.attr("target", this.model.get("target")); + } + + var ids = this.model.get("inputDocuments"); + for (var id in ids) { + var hidenInputs = document.createElement("input"); + hidenInputs.name = "INPUTS[" + id + "]"; + hidenInputs.type = "hidden"; + hidenInputs.value = ids[id]; + this.el.appendChild(hidenInputs); + } + return this; + }, + afterRender: function () { + var i, + items = this.items.asArray(); + for (i = 0; i < items.length; i += 1) { + if (items[i].afterRender) { + items[i].afterRender(); + } + } + return this; + }, + setOnSubmit: function (callback) { + this.submit = []; + if (callback && typeof callback === "function") { + this.submit.push(callback); + } else { + return null; + } + }, + applyGlobalModeField: function (json) { + if (this.project.globalMode && this.project.globalMode === 'view') { + json.mode = this.project.globalMode; + } + return json; + }, + applyGlobalMode: function () { + if (this.project.globalMode === "view") { + if (this.model.get("type") && this.model.get("type") === "form") { + this.model.set("mode", this.project.globalMode); + } + } + return this; + }, + /** + * this method close this form, stand alone version for mobile + */ + close: function () { + this.model.close(); + }, + /** + * This method looks fields from a valid criterion + * @param {String} criteria : es un criterio de filtro + * @return {Array} result filter + */ + searchFieldType: function (criteria) { + var result = [], + fields = this.getFields(); + if (criteria && criteria !== undefined) { + result = _.filter(fields, function (item) { + if (item.model.get("type") === criteria) { + return item; + } + }); + } + return result; + }, + /** + * Saves form's data and validate connection (offline/online) + * @returns {boolean} + */ + saveForm: function () { + var project = this.project, + panel = this.model.get("parent"), + formId = this.model.get("id"), + webServiceManager, + requestManager, + formData, + resp = true; + + if (project && panel && this.isRunningDependents()) { + webServiceManager = project.webServiceManager; + formData = panel.getData2(); + if (project.isMobile()) { + $.extend(true, + formData, + { + "__VARIABLE_DOCUMENT_DELETE__": project.getDataExtra("__VARIABLE_DOCUMENT_DELETE__") + }); + requestManager = project.getRequestManager(); + if (requestManager && requestManager.isOffLine()) { + app.saveFormDataOffLine(); + return resp; + } + } else { + $.extend(true, formData, panel.getDeletedData()); + } + webServiceManager.saveData({ + formUID: formId, + data: formData + }, function (err) { + resp = !err; + }); + return resp; + } + }, + /** + * Execute this function on after the submit button + * @returns {FormPanel} + */ + afterSubmit: function () { + var items = this.items.asArray(), + index; + for (index = 0; index < items.length; index += 1) { + if (items[index].afterSubmit) { + items[index].afterSubmit(); + } + } + return this; + }, + /** + * Show flash message with files no uploaded yet. + * @param files + */ + showFilesNoUploaded: function (files) { + var flashModel, + i, + nameFiles = [], + message = "Form cannot be submitted because file(s) {%%%FILES%%%} (are/is) still uploading".translate(); + for (i = 0; i < files.length; i += 1) { + if (files[i].type) { + message = "Form cannot be submitted because file(s) {%%%FILES%%%} (are/is) didn't upload correctly," + + " remove the files from the form or upload the files again".translate(); + } + nameFiles.push(files[i].name); + } + if (files.length > 0) { + message = message.replace("{%%%FILES%%%}", nameFiles); + flashModel = { + message: message, + startAnimation: 1000, + type: "danger", + duration: 4000, + absoluteTop: true + }; + this.project.flashMessage(flashModel); + } + }, + /** + * Show flash message with the labels of the not loaded fields. + * @param files + */ + waitToLoadFieldsMessage: function () { + var warningLabel = "Warning".translate(); + message = "The form cannot be saved, please wait until all the fields are loaded".translate(); + + $.notify({ + // options + message: ''+ warningLabel +': ' + message + },{ + // settings + type: 'warning', + spacing: 10, + allow_dismiss: true, + delay: 6000, + timer: 1000, + placement: { + from: "top", + align: "center" + }, + animate: { + enter: 'animated fadeInDown', + exit: 'animated fadeOutUp' + } + }); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.FormPanel", FormPanel); +}()); + +(function () { + var FieldView = Backbone.View.extend({ + form: null, + _hidden: false, + tagName: "div", + tagControl: "", + tagHiddenToLabel: "", + keyLabelControl: "", + enableValidate: true, + events: { + "click .form-control": "onclickField" + }, + language: null, + spinner: null, + initialize: function (options) { + var defaults = { + hidden: true + }; + this.form = options.form ? options.form : null; + jQuery.extend(true, defaults, options); + + if (defaults.hidden) { + this.hide(); + } else { + this.show(); + } + + if (options && options.project) { + this.project = options.project; + } + this.setClassName() + .render(); + }, + setColumnIndex: function (index) { + this.columnIndex = index; + }, + setClassName: function () { + return this; + }, + enableTooltip: function () { + var tl = this.$el.find("[data-toggle=tooltip]"); + tl.tooltip({ + placement: "auto left", + trigger: "click hover" + }); + return this; + }, + applyStyleError: function () { + this.$el.addClass("has-error has-feedback"); + return this; + }, + applyStyleWarning: function () { + this.$el.addClass('has-warning'); + return this; + }, + applyStyleSuccess: function () { + this.$el.removeClass("has-error"); + if (!this.model.get("disabled")) { + this.$el.addClass("has-success"); + } + + return this; + }, + /** + * The method is only supported if the field have options. + * Checks if the value to sets is inside of the options property. + */ + setValueToDomain: function () { + var htmlElement = this.getHTMLControl(); + + if (htmlElement.length && !this.model.attributes.disabled) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error'); + } + + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + + htmlElement.parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } + + return this; + }, + /** + * Apply Javascript events associated to control + * + */ + on: function (e, fn) { + var that = this, + control = this.$el.find("input"); + + if (control) { + control.on(e, function (event) { + fn(event, that); + + event.stopPropagation(); + }); + } else { + throw new Error("Is not possible find the HTMLElement associated to field"); + } + + return this; + }, + /** + * The method is just for return the Jquery HTML of the control + * @return {JQuery HTMLElement} Encapsulate the HTMLElement + */ + getHTMLControl: function () { + return this; + }, + render: function () { + if (this._hidden || this.model.get("_hidden")) { + this.hide(); + } else { + this.show(); + } + if (!this.model.get("enableValidate")) { + this.hideRequire(); + } + return this; + }, + onclickField: function () { + return this; + }, + setLabel: function (label, col) { + if (this.model.get("type") === "grid") { + if (col !== undefined) { + if (col > 0 && col <= this.columnsModel.length) { + this.domTitleHeader[col - 1].find("span[class='title-column']").text(label); + } else { + return null; + } + } + } else { + if (this.model.attributes.label !== undefined) { + this.model.attributes.label = label; + if (this.el || this.$el.length) { + this.$el.find("label").find("span[class='textlabel']").text(label); + this.$el.find("h4").find("span[class='textlabel']").text(label); + this.$el.find("h5").find("span[class='textlabel']").text(label); + this.$el.find(".pmdynaform-grid-title span").text(label); + this.$el.find(".pmdynaform-control-annotation span").text(label); + this.$el.find("button[type='button'].btn-primary span").text(label); + this.$el.find("button[type='submit'] span").text(label); + } + } + } + return this; + }, + getLabel: function (col) { + if (this.model.get("label") !== undefined) { + if (col && this.model.get("type") === "grid") { + if (col <= this.columnsModel.length) { + return this.columnsModel[col - 1].label || ""; + } else { + return null; + } + } else { + return this.model.get("label"); + } + } + return null; + }, + setText: function (value, row, col) { + var options, + data, + existData, + type, + dataType, + i, + valuesfortrue, + valuesforFalse; + existData = false; + type = this.model.get("type"); + dataType = this.model.get("dataType"); + data = {}; + if (type === "grid") { + if (row !== undefined && col !== undefined) { + if ((row > 0 && col > 0) && row <= this.gridtable.length && col <= this.columnsModel.length) { + return this.gridtable[row - 1][col - 1].setText(value); + } else { + return null; + } + } + } + if (value && value.toString().length || jQuery.isArray(value)) { + options = this.model.get("options"); + if (options && jQuery.isArray(options)) { + if (dataType === "boolean" && options.length) { + valuesfortrue = [1, true, "1", "true"]; + valuesforFalse = [0, false, "0", "false"]; + if (options[0].label === value) { + value = options[0].value; + } + if (options[1].label === value) { + value = options[1].value; + } + if (valuesfortrue.indexOf(options[0].value) > -1 && + valuesfortrue.indexOf(value) > -1) { + data = { + value: "1", + label: options[0].label + }; + this.setValue(data["value"]); + return; + } + if (valuesforFalse.indexOf(options[1].value) > -1 && + valuesforFalse.indexOf(value) > -1) { + data = { + value: "0", + label: options[1].label + }; + this.setValue(data["value"]); + return; + } + } else { + if (type === "checkgroup") { + var arrayDataValue = [], arrayDataLabel = []; + for (i = 0; i < options.length; i += 1) { + options[i].selected = false; + if (value.indexOf(options[i].label) > -1) { + options[i].selected = true; + arrayDataLabel.push(options[i].label); + arrayDataValue.push(options[i].value); + } + } + data = { + value: arrayDataValue, + label: arrayDataLabel + }; + this.setValue(data["value"]); + return; + } else { + for (i = 0; i < options.length; i += 1) { + if (options[i].label === value) { + data = { + label: options[i].label, + value: options[i].value + }; + existData = true; + this.setValue(data["value"]); + return; + } + } + } + } + } + if (!existData) { + if (type === "text" || type === "textarea" || type === "hidden" || type === "link" || type === "image" || + type == "title" || type == "annotation" || type == "subtitle" || type === "button" || type === "submit" || type === "suggest") { + data = { + value: value, + label: value + }; + this.setValue(data["value"]); + return; + existData = true; + } + if (type === "datetime") { + value = value.replace(/-/g, "/"); + if (new Date(value).toString() !== "Invalid Date") { + data = { + value: value, + label: value + } + this.setValue(data["value"]); + return; + } + existData = true; + } + } + if (existData) { + this.updateValueControlAndData(data, type, dataType); + } + } else { + if (this.model.get("type") === "annotation") { + this.$el.find(".pmdynaform-control-annotation span").text(value); + this.model.attributes.label = value; + } + if (this.model.get("type") === "button") { + this.$el.find("button[type='button'].btn-primary span").text(value); + this.model.attributes.label = value; + } + if (this.model.get("type") === "submit") { + this.$el.find("button[type='submit'] span").text(value); + this.model.attributes.label = value; + } + if (this.model.get("type") === "image") { + this.model.attributes.src = value; + this.$el.find("img").attr("src", value); + } + } + return this; + }, + updateValueControlAndData: function (data, type, dataType) { + var i; + if (this.tagControl instanceof jQuery && this.tagHiddenToLabel instanceof jQuery) { + if (type !== "datetime") { + this.model.attributes.data = data; + this.model.attributes.value = data["value"]; + if (this.model.attributes.hasOwnProperty("keyLabel")) { + this.model.attributes.keyLabel = data["label"]; + } + if (this.model.attributes.hasOwnProperty("keyValue")) { + this.model.attributes.keyValue = data["value"]; + } + if (type === "radio") { + this.tagControl.find("input[id='form\[" + this.model.get("id") + "\]'][value='" + data["value"] + "']").prop("checked", true); + } else if (type === "checkgroup" || type === "checkbox") { + this.tagControl.find("input[type='checkbox']").attr("checked", false); + for (i = 0; i < data["value"].length; i += 1) { + this.tagControl.find("input[id='form\[" + this.model.get("id") + "\][" + data["value"][i] + "]']").prop("checked", true); + } + this.model.attributes.labelsSelected = data["label"]; + } else { + this.tagControl.val(data["value"]); + } + if (type === "checkgroup") { + this.tagHiddenToLabel.val(JSON.stringify(data["label"])); + } else { + if (type === "link" || type === "annotation" || type === "title" || type === "subtitle" || + type === "button" || type === "submit") { + this.tagHiddenToLabel.html(data["label"]); + } else if (type === "image") { + this.setSrc(data["value"]); + } else { + this.tagHiddenToLabel.val(data["label"]); + } + } + if (this.validate) { + this.validate(); + } + } else { + this.$el.find("#datetime-container-control").data()["DateTimePicker"].date(new Date(data["value"])); + var label = this.$el.find("#datetime-container-control").data()["date"]; + var value = this.formatData(); + this.model.attributes.value = value; + this.model.attributes.data["value"] = value; + this.model.attributes.data["label"] = label; + this.model.attributes.keyLabel = label; + this.tagHiddenToLabel.val(this.model.get("data")["value"]); + } + } + return this; + }, + setValue: function () { + }, + getInfo: function () { + var info = this.model.toJSON(); + // validate if field has a data property + return typeof info.data !== "undefined" ? _.extend(info, {value: info.data.value || ""}) : info; + }, + setHref: function (value) { + }, + getDataType: function () { + return this.model.get("dataType") || null; + }, + getControlType: function () { + + }, + verifyData: function () { + }, + getData: function () { + return this.model.getData(); + }, + getDataLabel: function () { + return this.model.getKeyLabel(); + }, + getText: function () { + }, + getValue: function () { + return this.model.getValue(); + }, + disableValidation: function (col) { + var type, i, j; + var col = col; + type = this.model.get("type"); + if (type === "grid") { + if (col !== undefined) { + if (typeof col == "string") { + this.columnsModel.find(function (column, index) { + if (column.columnId === col) { + col = index + 1; + return; + } + }) + } + if ((col > 0 && col <= this.columnsModel.length)) { + this.domTitleHeader[col - 1].find(".pmdynaform-field-required").hide(); + for (i = 0; i < this.gridtable.length; i += 1) { + this.columnsModel[col - 1].enableValidate = false; + this.gridtable[i][col - 1].disableValidation(); + } + } else { + return null; + } + } else { + var i, j, row, cell; + for (i = 0; i < this.gridtable.length; i += 1) { + row = this.gridtable[i]; + for (j = 0; j < row.length; j += 1) { + cell = row[j]; + if (cell.model.get("enableValidate") !== undefined) { + cell.disableValidation(); + this.columnsModel[j].enableValidate = false; + this.domTitleHeader[j].find(".pmdynaform-field-required").hide(); + } + } + } + } + } + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (this.model.get("required")) { + this.$el.find(".pmdynaform-field-required").hide(); + } + this.model.attributes.enableValidate = false; + } + return this; + }, + enableValidation: function (col) { + var type, i, j, col = col; + type = this.model.get("type"); + if (type === "grid") { + if (col !== undefined) { + if (typeof col == "string") { + this.columnsModel.find(function (column, index) { + if (column.columnId === col) { + col = index + 1; + return; + } + }) + } + if (col > 0 && col <= this.columnsModel.length) { + this.domTitleHeader[col - 1].find(".pmdynaform-field-required").show(); + for (i = 0; i < this.gridtable.length; i += 1) { + this.columnsModel[col - 1].enableValidate = true; + this.gridtable[i][col - 1].enableValidation(); + } + } else { + return null; + } + } else { + var i, j, row, cell; + for (i = 0; i < this.gridtable.length; i += 1) { + row = this.gridtable[i]; + for (j = 0; j < row.length; j += 1) { + cell = row[j]; + if (cell.model.get("enableValidate") !== undefined) { + cell.enableValidation(); + this.columnsModel[j].enableValidate = true; + this.domTitleHeader[j].find(".pmdynaform-field-required").show(); + } + } + } + } + } + if (this.model.get("enableValidate") !== undefined) { + this.model.attributes.enableValidate = true; + if (this.model.get("group") === "form") { + this.$el.find(".pmdynaform-field-required").show(); + } + } + return this; + }, + /** + * Get Control HTML default + * @returns {Array} + */ + getControl: function () { + return this.model.getControl(); + }, + getLabelControl: function () { + + }, + getHref: function () { + return this.model.get("href"); + }, + setFocus: function () { + if (this.getControl().length) { + this.getControl().first().focus(); + } + }, + /* + This function change the values in the field formula associated, use with formulas + Render a new values in the field with formula + */ + onFieldAssociatedHandler: function () { + var i, + fieldsAssoc = this.formulaFieldsAssociated; + if (fieldsAssoc.length > 0) { + for (i = 0; i < fieldsAssoc.length; i += 1) { + if (fieldsAssoc[i].model.get("formulator") instanceof PMDynaform.core.Formula) { + this.model.addFormulaTokenAssociated(fieldsAssoc[i].model.get("formulator")); + this.model.updateFormulaValueAssociated(fieldsAssoc[i]); + } + } + } + return this; + }, + setData: function (data) { + var value, label; + if (this.model.get("type") !== "submit" && this.model.get("type") !== "button" && this.model.get("type") !== "panel") { + if (this.model.get("type") === "label") { + this.setValue(data); + } else { + value = data["value"]; + this.setValue(value); + } + } + return this; + }, + setOnFieldFocusCallback: function (callback) { + if (typeof callback === 'function' || callback === null) { + this.onFieldFocusCallback = callback; + } + return this; + }, + isDependent: function () { + return this.model.isDependent(); + }, + updateValueHiddenControl: function (value) { + var hidden; + hidden = this.$el.find("input[type='hidden']"); + if (value !== null && value !== undefined) { + if (hidden instanceof jQuery && hidden.length) { + hidden.val(value); + } + } + return this; + }, + /** + * Update the second hidden in the radio control + * @param {string} value + */ + updateValueRadioControl: function (value) { + var hidden; + hidden = this.$el.find("input[type='hidden']"); + if (value !== null && value !== undefined) { + if (hidden instanceof jQuery && hidden.length) { + hidden[1].value = value; + } + } + return this; + }, + show: function () { + if (this.el) { + this.el.style.display = ''; + } + this._hidden = false; + }, + hide: function () { + if (this.el) { + this.el.style.display = 'none'; + } + this._hidden = true; + }, + isHidden: function () { + return this._hidden; + }, + hideRequire: function () { + var tagRequired; + tagRequired = this.$el.find(".pmdynaform-field-required"); + tagRequired.hide(); + }, + showRequire: function () { + var tagRequired; + tagRequired = this.$el.find(".pmdynaform-field-required"); + tagRequired.show(); + }, + /** + * Default method clear File + */ + clearContent: function () { + }, + /** + * Gets the current language + * @returns {FieldView} + */ + initLanguage: function () { + var project = this.model.get('project'), + pmLang = project.getLanguage(); + this.language = moment.localeData(pmLang) ? pmLang : "en"; + moment.locale(this.language); + return this; + }, + /** + * Adds the spinner html component + * @chainable + */ + addSpinnerHTML: function () { + this.spinner = new PMDynaform.ui.Spinner(); + this.spinner.render(); + this.spinner.hide(); + if (this.model.get("parent") + && this.model.get("parent").get("type") === "grid") { + this.$el.find(".control-group").parent().append(this.spinner.$el); + } else { + this.$el.find(".pmdynaform-field-control").append(this.spinner.$el); + } + return this; + }, + /** + * Gets the is loading property of a field + * @returns {boolean} + */ + isLoading: function () { + return this.model.get("loading"); + }, + /** + * Shows spinner and hides the control + * @returns {DropdownModel} + */ + switchControlBySpinner: function () { + var control = this.getHTMLControl(); + if (this.spinner) { + control.hide(); + this.spinner.show(); + this.model.set({loading: true}); + } + return this; + }, + /** + * Show the spinner and hides the control + * @chainable + */ + switchSpinnerByControl: function () { + var control = this.getHTMLControl(); + if (this.spinner) { + this.spinner.hide(); + this.model.set({loading: false}); + } + if (control) { + control.show(); + } + return this; + }, + /** + * Shows the server fail message. + * @chainable + */ + showQueryFailMessage: function () { + var message = "There was an error when populating the values of field".translate(); + message = message + " " + this.model.get("label"); + message = 'Error: ' + message; + $.notify({ + // options + message: message + }, { + // settings + type: 'danger', + spacing: 10, + allow_dismiss: true, + delay: 6000, + timer: 1000, + placement: { + from: "top", + align: "center" + }, + animate: { + enter: 'animated fadeInDown', + exit: 'animated fadeOutUp' + } + }); + return this; + }, + /** + * Run all dependencies of a field. + */ + runDependency: function () { + var parent = this.parent, + data = {}, + i, + item, + dependency = []; + if (_.isArray(this.model.get("dependency")) && this.model.get("dependency").length) { + dependency = this.model.get("dependency"); + if (parent) { + for (i = 0; i < dependency.length; i += 1) { + if (parent.model.get("type") === "grid") { + this.switchControlBySpinner(); + item = parent.model.findCellInRow(this.model.get("row"), dependency[i]); + data[dependency[i]] = item.get("value") ? item.get("value") : ""; + } + this.model.recoveryRemoteOptions(data, true); + } + + } + } + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Field", FieldView); +}()); + +(function () { + var GridView = PMDynaform.view.Field.extend({ + block: true, + template: _.template($("#tpl-grid").html()), + templatePager: _.template($("#tpl-grid-pagination").html()), + templateTotal: _.template($("#tpl-grid-totalcolumn").html()), + templateEmptyGrid: _.template($("#tpl-grid-empty").html()), + colSpanLabel: 3, + colSpanControl: 9, + gridtable: [], + flagRow: 0, + dom: [], + row: [], + cols: [], + showPage: 1, + items: [], + numberRest: 0, + rest: 0, + priority: { + file: 1, + image: 2, + radio: 3, + checkbox: 4, + textarea: 5, + datetime: 6, + dropdown: 7, + text: 8, + button: 9, + link: 10, + defect: 0 + }, + section: 1, + titleHeader: [], + indexResponsive: "3%", + removeResponsive: "3%", + thereArePriority: 0, + columnsModel: [], + domCarousel: null, + tableBody: null, + pageSize: null, + paged: null, + rowDataAdd: null, + domTitleHeader: null, + totalWidtRow: 0, + colResponsiveTotalWidth: null, + hiddenColumns: [], + totalWidthStatic: 0, + minCellWidth: 200, + indexWidthStatic: 33, + _$gridHeader: null, + _gridHeader: null, + deleteButtonVisibility: true, + onDeleteRowCallback: function () { + }, + onAddRowCallback: function () { + }, + onBeforeAddRowCallback: function () { + }, + onClickPageCallback: function () { + }, + events: { + "click .pmdynaform-grid-newitem": "onClickNew", + "click .pagination li": "onClickPage" + }, + requireVariableByField: [ + "text", + "textarea", + "checkbox", + "radio", + "dropdown", + "datetime", + "suggest", + "link", + "hidden", + "label" + ], + factory: {}, + initialize: function (options) { + var factory = { + products: { + "text": { + model: PMDynaform.model.TextR, + view: PMDynaform.view.TextR + }, + "textarea": { + model: PMDynaform.model.TextAreaR, + view: PMDynaform.view.TextAreaR + }, + "checkbox": { + model: PMDynaform.model.CheckBox, + view: PMDynaform.view.CheckBox + }, + "radio": { + model: PMDynaform.model.Radio, + view: PMDynaform.view.Radio + }, + "dropdown": { + model: PMDynaform.model.DropdownR, + view: PMDynaform.view.DropdownR + }, + "button": { + model: PMDynaform.model.Button, + view: PMDynaform.view.Button + }, + "datetime": { + model: PMDynaform.model.DatetimeR, + view: PMDynaform.view.DatetimeR + }, + "suggest": { + model: PMDynaform.model.SuggestR, + view: PMDynaform.view.SuggestR + }, + "link": { + model: PMDynaform.model.Link, + view: PMDynaform.view.Link + }, + "file": { + model: PMDynaform.model.File, + view: PMDynaform.view.File + }, + "multiplefile": { + model: PMDynaform.file.MultipleFileModel, + view: PMDynaform.file.MultipleFileView + }, + "label": { + model: PMDynaform.model.Label, + view: PMDynaform.view.Label + }, + "hidden": { + model: PMDynaform.model.Hidden, + view: PMDynaform.view.Hidden + } + }, + defaultProduct: "text" + }, + k, + rows = parseInt(this.model.get("rows"), 10); + this.form = options.form ? options.form : null; + this.pageSize = this.model.get("pageSize"); + this.paged = this.model.get("pager"); + this.colResponsiveTotalWidth = 0; + this.items = []; + this.row = []; + this.dom = []; + this.cols = []; + this.showPage = 1; + this.gridtable = this.model.get("gridtable"); + this.titleHeader = []; + this.columnsModel = []; + this.checkColSpanResponsive(); + this.setFactory(factory); + this.rowDataAdd = []; + this.dom = []; + this.makeColumnModels(); + this.hiddenColumns = []; + this.model.attributes.titleHeader = this.titleHeader; + + }, + onClickNew: function (e) { + this.addRow(e); + return this; + }, + addRow: function (data, isHelper) { + var j, + row, + rowData, + currentRows, + flagRow; + currentRows = this.model.get("rows"); + this.rowDataAdd = []; + if (this.model.get("layout") === "static") { + flagRow = this.tableBody.find(".pmdynaform-static").last().children().length; + this.domCarousel = this.tableBody.find(".pmdynaform-static").last(); + } else { + flagRow = this.tableBody.children().last().children().length; + this.domCarousel = this.tableBody.children().last(); + } + if (flagRow === this.pageSize || flagRow === 0) { + this.block = true; + this.section = Math.ceil(this.dom.length / this.pageSize) + 1; + flagRow = 0; + } else { + this.block = false; + this.section = Math.ceil(this.dom.length / this.pageSize); + } + this.onBeforeAddRowCallback(this, this.model.attributes.rows, this.rowDataAdd); + if (data && jQuery.isArray(data) && data.length) { + this.rowDataAdd = data; + } + row = this.createHTMLRow(currentRows, this.rowDataAdd, [], flagRow, isHelper); + this.model.attributes.rows = parseInt(currentRows + 1, 10); + + //new carousel container fix a in active mode + if (this.model.get("rows") === 1) { + this.domCarousel.addClass('active'); + } + this.model.setPaginationItems(); + this.createHTMLPager("add"); + + this.model.attributes.gridFunctions.push(row.data); + + this.runningRowFormulator(row.view); + + for (j = 0; j < row.model.length; j += 1) { + if (row.model[j].get("type") !== "label" && row.model[j].get("operation") && row.model[j].get("operation").trim().length) { + row.view[j].onChangeCallbackOperation(); + } + if (row.model[j].get("type") == "label" && row.model[j].get("operation")) { + this.createHTMLTotal(); + } + } + if (typeof this.onAddRowCallback === "function") { + this.onAddRowCallback(this.gridtable[currentRows], this, this.gridtable.length); + } + this.validateGrid(); + return this.gridtable[currentRows]; + }, + runningRowFormulator: function (row) { + var fieldsAsocied; + for (var i = 0; i < row.length; i += 1) { + if (row[i].model.get("formula") && row[i].model.get("formula").trim().length) { + fieldsAsocied = row.filter(function (element) { + if (row[i].fieldValid.indexOf(element.model.get("id")) > -1) { + element.onFieldAssociatedHandler(); + } + }); + } + } + }, + removeRow: function (row) { + var currentRows = this.model.get("rows"), + itemRemoved; + + itemRemoved = this.gridtable.splice(row, 1); + this.model.detachRegisteredEvents(itemRemoved); + this.dom.splice(row, 1); + this.model.attributes.rows = parseInt(currentRows - 1, 10); + this.deleteFilesByRow(itemRemoved[0]); + return itemRemoved; + }, + makeColumnModels: function () { + var columns = this.model.get("columns"), + data = this.model.get("data"), + columnModel, + colSpanControl, + factory = this.factory, + product, + newNameField, + variableEnabled, + jsonFixed, + mergeModel, + i; + this.columnsModel = []; + for (i = 0; i < columns.length; i += 1) { + newNameField = ""; + mergeModel = columns[i]; + mergeModel.form = this.model.get("form") || null; + if (mergeModel.mode && mergeModel.mode === "parent") { + mergeModel.mode = this.model.get("mode"); + } + if ((mergeModel.originalType === "checkbox" || mergeModel.type === "checkbox") && mergeModel.mode === "view") { + mergeModel.mode = "disabled"; + mergeModel.disabled = true; + } + if ((mergeModel.originalType === "checkbox" || mergeModel.type === "checkbox") && mergeModel.mode === "disabled") { + mergeModel.mode = "disabled"; + mergeModel.disabled = true; + } + jsonFixed = new PMDynaform.core.TransformJSON({ + parentMode: this.model.get("parentMode"), + field: mergeModel + }); + if (jsonFixed.getJSON().type) { + product = factory.products[jsonFixed.getJSON().type.toLowerCase()] ? + factory.products[jsonFixed.getJSON().type.toLowerCase()] : factory.products[factory.defaultProduct]; + } else { + product = factory.products[factory.defaultProduct]; + } + colSpanControl = this.colSpanControlField(jsonFixed.getJSON().type, i); + columnModel = { + colSpanLabel: 4, + colSpanControl: (this.model.get("layout") === "form") ? 8 : colSpanControl, + colSpan: colSpanControl, + label: mergeModel.title, + title: mergeModel.title, + layout: this.model.get("layout"), + width: "200px", + project: this.model.get("project"), + namespace: this.model.get("namespace"), + mode: mergeModel.mode, + variable: (variableEnabled !== "NOT") ? this.getVariable(mergeModel.var_uid) : null, + _extended: { + name: mergeModel.name || PMDynaform.core.Utils.generateName("radio"), + id: mergeModel.id || PMDynaform.core.Utils.generateID(), + formula: mergeModel.formula || null + }, + group: "grid", + columnName: mergeModel.name || PMDynaform.core.Utils.generateName("radio"), + columnId: mergeModel.id, + originalType: mergeModel.type, + product: product, + formula: mergeModel.formula || "", + operation: mergeModel.operation || "", + columnWidth: mergeModel.columnWidth || "", + defaultValue: mergeModel.defaultValue || "", + sql: mergeModel.sql || "", + datasource: mergeModel.datasource || "", + required: mergeModel.required || false, + hint: mergeModel.hint || "", + format: mergeModel.format || null, + form: mergeModel.form || null, + options: mergeModel.options || [], + optionsSql: mergeModel.optionsSql || [], + defaultDate: mergeModel.defaultDate || null, + enableValidate: true, + parent: this.model + }; + jQuery.extend(true, columnModel, jsonFixed.getJSON()); + columnModel.row = this.gridtable.length; + columnModel.col = i; + if (this.model.get("layout") == "static") { + if (columnModel.columnWidth && jQuery.isNumeric(columnModel.columnWidth)) { + var width = parseInt(columnModel.columnWidth); + this.totalWidtRow = this.totalWidtRow + width; + } else { + this.totalWidtRow = this.totalWidtRow + 200; + } + } + this.columnsModel.push(columnModel); + } + if (this.model.get("layout") == "responsive") { + this.updateWidthResponsiveColumns(); + } + + return this; + }, + updateWidthResponsiveColumns: function () { + var i, totalWith = 0, width, undefinedWidth = []; + if (this.columnsModel.length) { + for (i = 0; i < this.columnsModel.length; i += 1) { + width = parseInt(this.columnsModel[i].columnWidth).toString(); + if (width !== "NaN") { + if (totalWith + Number(width) < 94) { + totalWith = totalWith + Number(width); + this.columnsModel[i].columnWidth = Number(width) + "%"; + } else { + if (94 - totalWith > 0) { + this.columnsModel[i].columnWidth = 94 - totalWith + "%"; + totalWith = totalWith + 94 - totalWith; + } else { + this.columnsModel[i].columnWidth = 0 + "%"; + undefinedWidth.push(this.columnsModel[i]); + } + } + } else { + this.columnsModel[i].columnWidth = 0 + "%"; + undefinedWidth.push(this.columnsModel[i]); + } + } + } + return this; + }, + setValuesGridFunctions: function (field) { + + if (this.model.attributes.functions) { + if (this.model.attributes.gridFunctions.length > 0) { + if (this.model.attributes.gridFunctions[field.row]) { + this.model.attributes.gridFunctions[field.row][field.col] = isNaN(parseFloat(field.data)) ? 0 : parseFloat(field.data); + } + this.model.applyFunction(); + } + } + return this; + }, + getVariable: function (var_uid) { + var i, + varSelected, + variables = this.model.get("variables"); + loop_variables: + if (_.isArray(variables)) { + for (i = 0; i < variables.length; i += 1) { + if (variables[i] && variables[i].var_uid === var_uid) { + varSelected = variables[i]; + break loop_variables; + } + } + } + return varSelected; + }, + checkColSpanResponsive: function () { + var i, + columns = this.model.get("columns"), + thereArePriority = 0, + layout = this.model.get("layout"); + + if (layout === "responsive" || layout === "form") { + this.numberRest = 10 % columns.length; + + if (this.numberRest > 0) { + for (i = 0; i < columns.length; i += 1) { + if (this.priority[columns[i].type] <= 6) { + thereArePriority += 1; + } + } + } + this.thereArePriority = thereArePriority; + } + return this; + }, + colSpanControlField: function (type, indexColumn) { + var itemsLength = this.model.get("columns").length, + layout = this.model.get("layout"), + defaultColSpan = 8; + if (this.numberRest > 0) { + if (this.priority[type] <= 6 && this.thereArePriority > 0) { + defaultColSpan = parseInt(10 / itemsLength) + 1; + this.numberRest -= 1; + this.thereArePriority -= 1; + } else { + if (this.numberRest >= parseInt(itemsLength - indexColumn)) { + defaultColSpan = parseInt(10 / itemsLength) + 1; + this.numberRest -= 1; + } else { + defaultColSpan = parseInt(10 / itemsLength); + } + } + } else { + defaultColSpan = parseInt(10 / itemsLength); + } + + return defaultColSpan; + }, + colSpanControlFieldResponsive: function () { + var columnWidth = 100, res; + res = parseInt(this.indexResponsive) + parseInt(this.removeResponsive); + columnWidth = parseInt((columnWidth - res) / (this.columnsModel.length - this.model.get("countHiddenControl"))); + return columnWidth - 1; + }, + /* + form[grid1][1][nombre] + form[grid1][2][nombre] + */ + changeIdField: function (nameform, row, column) { + return "[" + nameform + "][" + row + "][" + column + "]"; + }, + changeNameField: function (nameform, row, column) { + return "[" + nameform + "][" + row + "][" + column + "]"; + }, + updateNameFields: function (rowView) { + var i, + l, + formulaFields = ""; + for (i = 0; i < rowView.length; i += 1) { + formulaFields = rowView[i].model.get("_extended").formula; + if (typeof formulaFields === "string") { + for (l = 0; l < rowView.length; l += 1) { + if (i !== l) { + formulaFields = formulaFields.replace(new RegExp(rowView[l].model.get("_extended").id, 'g'), rowView[l].model.get("id")); + rowView[i].model.attributes.formula = formulaFields; + rowView[i].model.attributes.formulator.data = formulaFields; + } + } + } + } + return this; + }, + setFactory: function (factory) { + this.factory = factory; + return this; + }, + validate: function (event) { + var i, + k, + row = [], + validGrid = true, + gridpanel = this.gridtable, + itemCell; + if (!this.validateGrid()) { + return this; + } + for (i = 0; i < gridpanel.length; i += 1) { + row = []; + for (k = 0; k < gridpanel[i].length; k += 1) { + if (gridpanel[i][k].validate) { + if (event) { + gridpanel[i][k].validate(event); + if (!gridpanel[i][k].model.get("valid")) { + if (itemCell === undefined) { + itemCell = gridpanel[i][k]; + } + validGrid = gridpanel[i][k].model.get("valid"); + this.model.set("valid", validGrid); + validGrid = false; + } + } else { + gridpanel[i][k].validate(); + validGrid = gridpanel[i][k].model.get("valid"); + if (!validGrid) { + gridpanel[i][k].setFocus(); + this.model.attributes.valid = false; + } + } + } + } + } + if (itemCell) { + itemCell.setFocus(); + } + this.model.set("valid", validGrid); + return validGrid; + }, + onRemoveRow: function (event) { + var rowNumber; + if (event) { + rowNumber = $(event.target).data("row"); + this.deleteRow(rowNumber, event); + } + + return this; + }, + updateGridFunctions: function (rows, index) { + this.model.attributes.gridFunctions.splice(index - 1, 1); + this.model.applyFunction(); + this.createHTMLTotal(); + return this; + }, + deleteRow: function (index, event) { + var itemRemoved, + showPage, + removedSection, + initPage, + i; + showPage = Math.ceil(index / this.pageSize); + jQuery(this.dom[index - 1]).remove(); + if (index > 0) { + itemRemoved = this.removeRow(index - 1); + } else { + return this; + } + this.updateGridFunctions(itemRemoved, index); + this.updatePropertiesCell(index - 1); + if (this.model.attributes.pager) { + this.block = true; + this.flagRow = 0; + this.section = 0; + if (this.model.get("layout") === "static") { + for (var i = showPage; i < this.tableBody.find(".pmdynaform-static").length; i += 1) { + if (this.tableBody.find(".pmdynaform-static").eq(i).children().length) { + this.tableBody.find(".pmdynaform-static").eq(i - 1).append(this.tableBody.find(".pmdynaform-static").eq(i).children()[0]) + } + } + if (this.tableBody.find(".pmdynaform-static").eq(i - 1).children().length === 0) { + removedSection = this.tableBody.find(".pmdynaform-static").eq(i - 1).remove(); + if (i == 1) { + initPage = true; + } + } + if (!this.tableBody.find(".pmdynaform-static").eq(showPage - 1).children().length) { + if (this.tableBody.find(".pmdynaform-static").eq(showPage - 2).length) { + this.tableBody.find(".pmdynaform-static").eq(showPage - 2).addClass("active"); + } + } + } else { + for (i = showPage; i < this.tableBody.children().length; i += 1) { + if (this.tableBody.children().eq(i).children().length) { + this.tableBody.children().eq(i - 1).append(this.tableBody.children().eq(i).children()[0]) + } + } + if (this.tableBody.children().eq(i - 1).children().length === 0) { + removedSection = this.tableBody.children().eq(i - 1).remove(); + } + if (!this.tableBody.children().eq(showPage - 1).children().length) { + if (this.tableBody.children().eq(showPage - 2).length) { + this.tableBody.children().eq(showPage - 2).addClass("active"); + } + } + } + this.model.setPaginationItems(); + this.createHTMLPager("remove"); + if (removedSection && removedSection.length) { + this.showPage = showPage - 1; + if (initPage) { + this.showPage = 1; + } + } else { + this.showPage = showPage; + } + } + if (typeof this.onDeleteRowCallback === "function") { + this.onDeleteRowCallback(this, itemRemoved, index); + } + this.validateGrid(); + return this; + }, + /** + * Update Properties Model Cell. + * @param cell + * @param i + * @param j + */ + updateModelCell: function (cell, i, j) { + var index = i + 1, + name = "[" + this.model.get('name') + "][" + index + "][" + cell.model.get('columnName') + "]"; + + cell.model.set('name', name); + cell.model.set('id', name); + cell.model.set('nameToPostControl', this.createPostVariables(index, cell.model.get('columnName'))); + cell.model.set('nameToPostLabelControl', this.createPostVariables(index, cell.model.get('columnName'), '_label')); + if (cell.model.get('view').removeHiddens) { + cell.model.get('view').removeHiddens(); + } + }, + updatePropertiesCell: function (index) { + var i, + j, + k, + cell, + cells, + row, + rows, + element, + control, + container, + idContainer, + hiddenControls, + type, + nameHiddeControl = "", + nameControl = "", + idcontrol, + formulaExist = false; + rows = this.gridtable; + for (i = index; i < rows.length; i += 1) { + row = $(this.dom[i]); + row.find(".index-row span").text(i + 1); + row.find(".remove-row div").data("row", i + 1); + cells = rows[i]; + if (cells) { + for (j = 0; j < cells.length; j += 1) { + cell = cells[j]; + cell.model.attributes.row = i; + idContainer = this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + element = cell.$el; + container = element.find(".pmdynaform-" + cell.model.get("mode") + "-" + cell.model.get("type")); + container.attr({ + "id": idContainer + }); + type = cell.model.get("type"); + switch (type) { + case "checkbox": + control = $(cell.$el.find("input[type='checkbox']")); + hiddenControls = element.find("input[type='hidden']"); + if (this.model.get("variable") !== "") { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameControl.substring(0, nameControl.length - 1).concat("_label]"); + } + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + control.attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.attr({ + name: nameHiddeControl, + id: idcontrol + }); + this.updateModelCell(cell, i, j); + break; + case "suggest": + control = $(cell.$el.find(".form-control")); + hiddenControls = element.find("input[type='hidden']"); + if (this.model.get("variable")) { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameHiddeControl.substring(0, nameHiddeControl.length - 1).concat("_label]"); + } else { + nameControl = ""; + nameHiddeControl = "" + } + $(cell.getIdSelect()).select2('destroy'); + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + control.attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.attr({ + name: nameHiddeControl, + id: nameHiddeControl + }); + $(cell.getIdSelect()).select2(cell.initializeSelect2Query()); + this.updateModelCell(cell, i, j); + break; + case "label": + hiddenControls = element.find("input[type='hidden']"); + if (this.model.get("variable") !== "") { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameControl.substring(0, nameControl.length - 1).concat("_label]"); + } else { + nameControl = ""; + nameHiddeControl = ""; + } + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + hiddenControls.eq(0).attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.eq(1).attr({ + name: nameHiddeControl, + id: idcontrol + }); + this.updateModelCell(cell, i, j); + break; + case "file": + this.updateFileCell(cell, i, j); + // TODO need refactor + break; + case "multipleFile": + this.updateMultipleFileCell(cell, i, j); + break; + case "text": + // TODO need refactor Formula.js or update formulator with the index correct after update the model. PMC-762 + control = $(cell.$el.find(".form-control")); + hiddenControls = element.find("input[type='hidden']"); + if (this.model.get("variable") !== "") { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameControl.substring(0, nameControl.length - 1).concat("_label]"); + } else { + nameControl = ""; + nameHiddeControl = ""; + } + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + control.attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.attr({ + name: nameHiddeControl, + id: idcontrol + }); + for (k = 0; k < cells.length; k += 1) { + if (cells[k].model.get("formula")) { + formulaExist = true; + } + } + if (!formulaExist) { + this.updateModelCell(cell, i, j); + } + break; + default: + control = $(cell.$el.find(".form-control")); + hiddenControls = element.find("input[type='hidden']"); + if (this.model.get("variable") !== "") { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameControl.substring(0, nameControl.length - 1).concat("_label]"); + } else { + nameControl = ""; + nameHiddeControl = ""; + } + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + control.attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.attr({ + name: nameHiddeControl, + id: idcontrol + }); + this.updateModelCell(cell, i, j); + break; + } + } + } + } + return this; + }, + /** + * force to update the hidden tags to send that by POST method to server + * @param cell + * @param i + * @param j + */ + updateMultipleFileCell: function (cell, i, j) { + var files, + k; + + this.updateModelCell(cell, i, j); + files = cell.model.get("fileCollection"); + cell.model.get('view').removeHiddens(); + if (_.isArray(files.models)) { + for (k = 0; k < files.models.length; k += 1) { + cell.model.get('view').createHiddenByModel(files.models[k]); + } + } + + }, + /** + * Updates File cell when a row has been removed + * + * @param cell + */ + updateFileCell: function (cell, i, j) { + var element = cell.$el, + control = $(cell.$el.find(".form-control")), + hiddenControls = element.find("input[type='hidden']"), + fileControls = element.find("input[type='file']"), + nameControl, + nameHiddeControl, + idcontrol; + + if (this.model.get("variable") !== "") { + nameControl = "form" + this.changeIdField(this.model.get("name"), i + 1, cell.model.get("columnName")); + nameHiddeControl = nameControl.substring(0, nameControl.length - 1).concat("_label]"); + + } else { + nameControl = ""; + nameHiddeControl = ""; + } + idcontrol = "form" + this.changeIdField(this.model.get("id"), i + 1, this.columnsModel[j].id); + control.attr({ + name: nameControl, + id: idcontrol + }); + hiddenControls.attr({ + name: nameHiddeControl, + id: idcontrol + }); + + fileControls.attr({ + name: nameControl, + id: idcontrol + }); + this.updateModelCell(cell, i, j); + }, + + onClickPage: function (event) { + var objData = $(event.currentTarget.children).data(), + parentNode = $(event.currentTarget).parent(), + i, + index, + nextItemElement, + nextItem, + prevItem; + + /************************** pagination rotate ************************************/ + nextItem = $('
  • ...
  • '); + prevItem = $('
  • ...
  • '); + + if (!$.isNumeric($(event.currentTarget).find("a").text())) { + var $currentItem = parentNode.find('li.active'); + if ($(event.currentTarget).hasClass("toNextItem")) { + if ($currentItem.hasClass("toNext")) { + this.onClickNextSection($currentItem, parentNode, nextItem, prevItem); + } else { + if ($currentItem.next().attr("class") !== "toNextItem") { + parentNode.find('li').removeClass('active'); + $currentItem.next().addClass("active"); + $currentItem.next().find("a:eq(0)").trigger("click"); + } + } + } + if ($(event.currentTarget).hasClass("toPrevItem")) { + if ($currentItem.hasClass("toPrev")) { + this.onClickPrevSection($currentItem, parentNode, nextItem, prevItem); + } else { + if ($currentItem.prev().attr("class") !== "toPrevItem") { + parentNode.find('li').removeClass('active'); + $currentItem.prev().addClass("active"); + $currentItem.prev().find("a:eq(0)").trigger("click"); + } + } + } + if ($(event.currentTarget).hasClass("toLast")) { + var lastPosition = parseInt(parentNode.children().length) - 3; + if (!this.model.get("paginationRotate")) { + this.tableBody.find(".active").removeClass("active"); + var e = parentNode.find('li:eq(' + lastPosition + ')'); + if (parentNode.find("li.active a").text() != Math.ceil(this.gridtable.length / this.pageSize)) { + this.onClickNextSection(e, parentNode, nextItem, prevItem); + } + this.tableBody.children().last().addClass("active") + } + parentNode.find('.active').removeClass('active'); + lastPosition = parseInt(parentNode.children().length) - 3; + parentNode.find('li:eq(' + lastPosition + ')').addClass("active"); + return false; + } + if ($(event.currentTarget).hasClass("toFirst")) { + if (!this.model.get("paginationRotate")) { + var e = parentNode.find('li:eq(3)'); + if (parentNode.find("li.active a").text() !== "1") { + this.onClickPrevSection(e, parentNode, nextItem, prevItem); + } + } + parentNode.find('li').removeClass('active'); + parentNode.find('li:eq(2)').addClass("active"); + } + if ($(event.currentTarget).hasClass("toNext")) { + index = Number($(event.currentTarget).prev().text().trim()); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').removeClass("showItem"); + $(parentNode).find('.toPrev').remove(); + $(parentNode).find('.toNext').remove(); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').css({ + display: "none" + }); + if (((this.gridtable.length / this.pageSize) - index) > 5) { + for (i = index; i < index + 5; i += 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).before(nextItem); + } else { + for (i = index; i < (this.gridtable.length / this.pageSize); i += 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(index - 1).after(prevItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } + if ($(event.currentTarget).hasClass("toPrev")) { + index = Number($(event.currentTarget).prev().text().trim()); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').removeClass("showItem"); + $(parentNode).find('.toPrev').remove(); + $(parentNode).find('.toNext').remove(); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').css({ + display: "none" + }); + + if (index - 5 != 0) { + if (index - 5 > -1) { + for (i = index - 1; i >= index - 5; i -= 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + nextItemElement.after(nextItem); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).after(prevItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } else { + + for (i = 5 - 1; i >= 0; i -= 1) { + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + if ($(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(index - 1).length) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(index - 1); + } + $(parentNode).find(".showItem").last().after(prevItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } + } else { + for (i = index - 1; i > -1; i -= 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + nextItemElement.after(nextItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } + } + } else { + parentNode.children().removeClass('active'); + $(event.currentTarget).addClass("active"); + } + return this; + }, + onClickNextSection: function (currentTarget, parentNode, nextItem, prevItem) { + if ($(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').length - 1 > 5) { + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').removeClass("showItem"); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').css("display", "none"); + $(parentNode).find('.toPrev').remove(); + $(parentNode).find('.toNext').remove(); + var i, nextItemElement, length = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').length - 1; + for (i = length; i > length - 5; i -= 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).after(prevItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } + }, + onClickPrevSection: function (currentTarget, parentNode, nextItem, prevItem) { + if ($(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').length - 1 > 5) { + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').removeClass("showItem"); + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').css("display", "none"); + $(parentNode).find('.toPrev').remove(); + $(parentNode).find('.toNext').remove(); + var i, nextItemElement; + for (i = 0; i < 5; i += 1) { + if (!nextItemElement) { + nextItemElement = $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).css({ + display: "" + }).addClass("showItem"); + } + $(parentNode).children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(i).before(nextItem); + if (nextItemElement) { + nextItemElement.find("a").trigger("click"); + } + } + }, + + refreshButtonsGrid: function () { + var i, + tdNumber, + buttonRemove, + trs = this.dom, + element; + + for (i = 0; i < trs.length; i += 1) { + element = $(trs[i]).html(); + tdNumber = this.createRowNumber(i + 1); + buttonRemove = this.createRemoveButton(i); + $(trs[i].firstChild).replaceWith(tdNumber); + $(trs[i].lastChild).replaceWith(buttonRemove); + } + + return this; + }, + createRowNumber: function (index) { + var tdNumber = document.createElement("div"), + formgroup = document.createElement("div"), + divNumber = document.createElement("div"), + spanNumber = document.createElement("span"), + label = document.createElement("label"), + labelSpan = document.createElement("span"), + containerField = document.createElement("div"), + layout = this.model.get("layout"), + tdRemove; + if (layout === "form") { + tdNumber.className = "col-xs-12 col-sm-1 col-md-1 col-lg-1" + } + if (layout === "static") { + tdNumber.className = "pmdynaform-grid-field-static index"; + tdNumber.style.width = "33px"; + } + if (layout === "responsive") { + tdNumber.width = this.indexResponsive; + tdNumber.style.display = "inline-block"; + } + label.className = "hidden-lg hidden-md hidden-sm visible-xs control-label col-xs-4"; + labelSpan.innerHTML = "Nro"; + label.appendChild(labelSpan); + + divNumber.className = "col-xs-4 col-sm-12 col-md-12 col-lg-12 pmdynaform-grid-label rowIndex"; + spanNumber.innerHTML = index; + divNumber.appendChild(spanNumber); + if (layout === "form") { + containerField.appendChild(label); + + tdRemove = this.createRemoveButton(index - 1); + tdRemove.className = "col-xs-1 visible-xs hidden-sm hidden-md hidden-lg remove-row-form"; + tdRemove.style.cssText = "float: right; margin-right: 15%; padding: 5px"; + containerField.appendChild(tdRemove); + } + containerField.appendChild(divNumber); + formgroup.className = "row form-group"; + formgroup.appendChild(containerField); + tdNumber.appendChild(formgroup); + $(tdNumber).addClass("index-row"); + return tdNumber; + }, + createRemoveButton: function (index) { + var that = this, + tdRemove, + buttonRemove, + layout = this.model.get("layout"); + tdRemove = document.createElement("div"); + if (layout === "form") { + tdRemove.className = "pmdynaform-grid-removerow hidden-xs col-xs-1 col-sm-1 col-md-1 col-lg-1"; + } + if (layout === "static") { + tdRemove.className = "pmdynaform-grid-removerow-static"; + } + if (layout === "responsive") { + tdRemove.className = "pmdynaform-grid-removerow-responsive"; + tdRemove.style.display = "inline-block"; + } + buttonRemove = document.createElement("div"); + + buttonRemove.className = "glyphicon glyphicon-trash btn btn-danger btn-sm"; + buttonRemove.setAttribute("data-row", index); + buttonRemove.setAttribute("aria-label", this.model.get("removeAriaLabel") + " #" + index); + + $(buttonRemove).data("row", index); + $(buttonRemove).on("click", function (event) { + that.onRemoveRow(event); + }); + + tdRemove.appendChild(buttonRemove); + return tdRemove; + }, + createHTMLTitle: function () { + + var k, + dom, + title, + td, + colSpan, + label, + layout = this.model.get("layout"), + content, + hint, + spaceDelete; + this.domTitleHeader = []; + + dom = this.$el.find(".pmdynaform-grid-thead"); + td = document.createElement("div"); + content = document.createElement("div"); + label = document.createElement("span"); + + if (layout === "static") { + dom.addClass("pmdynaform-grid-thead-static"); + td.className = "pmdynaform-grid-field-static wildcard"; + td.style.minWidth = "33px"; + } + if (layout === "form") { + td.className = "col-xs-1 col-sm-1 col-md-1 col-lg-1 text-center wildcard"; + } + + if (layout === "responsive") { + //For the case: responsive and form + td.className = "text-center wildcard"; + td.style.display = "inline-block"; + td.style.width = this.indexResponsive; + } + td.appendChild(label); + dom.append(td); + for (k = 0; k < this.columnsModel.length; k += 1) { + if (this.columnsModel[k].type !== "hidden") { + colSpan = this.columnsModel[k].colSpan; + title = this.columnsModel[k].title; + td = document.createElement("div"); + label = document.createElement("span"); + label.className = "title-column"; + this.checkColSpanResponsive(); + + if (layout !== "responsive") { + colSpan = this.colSpanControlField(this.columnsModel, this.columnsModel[k].type, k); + td = this._createHtmlCell(this.columnsModel[k].type, colSpan, k); + } + label.innerHTML = title; + label.style.fontWeight = "bold"; + label.style.maginLeft = "2px"; + $(label).css({ + "text-overflow": "ellipsis", + "white-space": "nowrap", + "overflow": "hidden", + "display": "inline-block", + "width": "80%", + "text-align": "center" + }); + if (layout === "responsive") { + $(label).css({ + width: "70%", + display: "inline-block" + }); + $(td).css({ + width: this.colSpanControlFieldResponsive(this.columnsModel) + "%", + display: "inline-block" + }); + } + if (layout === "static") { + if (this.columnsModel[k]["columnWidth"] && Number(this.columnsModel[k]["columnWidth"]).toString() !== "NaN") { + $(td).css({ + "min-width": parseInt(this.columnsModel[k]["columnWidth"]) + }); + $(label).css({ + "width": parseInt(this.columnsModel[k]["columnWidth"]) - 40 + }); + } else { + $(td).css({ + "min-width": "200px" + }); + $(label).css({ + "width": "160px" + }); + } + } + if (layout === "responsive") { + $(td).css({ + "width": this.columnsModel[k].columnWidth + }); + } + label.title = title; + + td.appendChild(label); + if (this.columnsModel[k].required) { + if (parseInt(this.columnsModel[k].columnWidth) === 0) { + td.appendChild($("*")[0]); + label.style.display = "none"; + } else { + td.appendChild($("*")[0]); + } + } + + hint = document.createElement("span"); + if (this.columnsModel[k].hint && this.columnsModel[k].hint.trim().length) { + hint = document.createElement("span"); + hint.className = "glyphicon glyphicon-info-sign"; + hint.setAttribute("data-toggle", "tooltip"); + hint.setAttribute("data-container", "body"); + hint.setAttribute("data-placement", "bottom"); + hint.setAttribute("data-original-title", this.columnsModel[k]["hint"]); + hint.style.float = "inherit"; + $(hint).tooltip().click(function (e) { + $(this).tooltip('toggle'); + }); + if (layout === "responsive" || layout === "static" || layout === "form") { + td.appendChild(hint); + } else { + label.setAttribute("data-toggle", "tooltip"); + label.setAttribute("data-container", "body"); + label.setAttribute("data-placement", "bottom"); + label.setAttribute("data-original-title", this.columnsModel[k]["hint"]); + } + } + dom.append(td); + this.domTitleHeader.push($(td)); + } else { + this.domTitleHeader.push($("")); + } + } + if (layout === "static") { + spaceDelete = document.createElement("div"); + spaceDelete.className = "pmdynaform-grid-removerow-static"; + $(spaceDelete).css({ + "min-width": 38 + }); + dom.append(spaceDelete); + } + return this; + }, + createHTMLPager: function (behavior) { + var htmlPager, + pagerContainer, + activeIndex, + pager, + pagerItems, + elementList, + ellipsis; + pagerContainer = this.$el.find(".pmdynaform-grid-pagination"); + activeIndex = this.$el.find(".pagination").find("li.active"); + if (activeIndex.length) { + htmlPager = pagerContainer.children(); + pagerItems = htmlPager.children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').not('.toPrev').not('.toNext'); + if (behavior === "add") { + if (Math.ceil(this.gridtable.length / this.pageSize) > pagerItems.length) { + $(".sec_1").removeClass("showItem"); + $(".sec_1").addClass("showItem"); + elementList = jQuery("
  • " + Math.ceil(this.gridtable.length / this.pageSize) + "
  • "); + elementList.css({ display: "none" }); + if (htmlPager.find(".toNext").length === 0 && (Number(elementList.text().trim()) > 5)) { + ellipsis = jQuery('
  • ...
  • '); + htmlPager.find(".showItem").last().after(ellipsis); + ellipsis.after(elementList); + } else { + if (htmlPager.find(".toNext").length) { + htmlPager.find(".toNextItem").before(elementList); + } else { + elementList.css({ + display: "" + }).addClass("showItem"); + htmlPager.find(".showItem").last().after(elementList); + } + } + } + } + if (behavior === "remove") { + var itemRemoved; + if (Math.ceil(this.gridtable.length / this.pageSize) > 0 && Math.ceil(this.gridtable.length / this.pageSize) < pagerItems.length) { + if (pagerItems.eq(pagerItems.length - 1).hasClass("active")) { + pagerItems.eq(pagerItems.length - 1).prev().addClass("active"); + } + itemRemoved = pagerItems.eq(pagerItems.length - 1).remove(); + if (htmlPager.find(".active").hasClass("toPrev")) { + htmlPager.find(".active").trigger("click"); + htmlPager.find(".toNext").remove(); + } + if (htmlPager.find(".active").text().trim() == 5) { + htmlPager.find(".toPrev").remove(); + htmlPager.children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').css({ + display: "" + }); + } + if (Number(htmlPager.find(".showItem").last().text().trim()) <= (this.gridtable.length / 5)) { + htmlPager.find(".toNext").remove(); + } + } + } + } else { + pager = this.templatePager({ + id: this.model.get("id") + "-body", + paginationItems: this.model.get("paginationItems"), + paginationRotate: this.model.get("paginationRotate"), + itemsSections: Math.ceil(this.dom.length / this.pageSize) + }); + htmlPager = $(pager); + pagerItems = htmlPager.children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem'); + htmlPager.children().not(":first").not(':last').not('.toPrevItem').not('.toNextItem').eq(0).addClass("active"); + if (Math.ceil(this.gridtable.length / 5) > 5) { + pagerItems.eq(5 - 1).nextAll().not(':last').not('.toNextItem').css({ display: "none" }); + pagerItems.eq(5).prevAll().not(".toFirst").addClass("showItem"); + pagerItems.eq(5).before('
  • ...
  • '); + } else { + pagerItems.addClass("showItem"); + } + htmlPager.children('li:first').after('
  • '); + htmlPager.children('li:last').before('
  • '); + pagerContainer.append(htmlPager); + } + + return this; + }, + createHTMLTotal: function () { + var k, + dom, + title, + td, + operation, + colSpan, + label, + result, + icon, + totalrow = this.model.get("totalrow"), + layout = this.model.get("layout"), + iconTotal = { + sum: "∑", + avg: "Χ", + other: "ϝ" + }, + that = this; + if (totalrow.length) { + dom = this.$el.find(".pmdynaform-grid-functions"); + dom.children().remove(); + td = document.createElement("div"); + label = document.createElement("span"); + + if (layout === "static") { + dom.addClass("pmdynaform-grid-thead-static"); + if (this.$el.find(".pmdynaform-grid-static").length) { + dom.css({ + width: this.totalWidtRow + 77 + }); + } + } else { + //For the case: responsive and form + td.className = "col-xs-1 col-sm-1 col-md-1 col-lg-1 text-center"; + } + td.appendChild(label); + dom.append(td); + if (layout === "responsive") { + td.style.width = this.indexResponsive; + } else { + $(td).css({ + width: this.indexWidthStatic, + display: "inline-block" + }); + } + if (this.gridtable[0]) { + for (k = 0; k < this.gridtable[0].length; k += 1) { + colSpan = this.gridtable[0][k].model.get("colSpan"); + title = (totalrow[k] === null || totalrow[k] === undefined) ? '' : totalrow[k]; + td = document.createElement("div"); + label = document.createElement("span"); + result = document.createElement("input"); + result.style.width = "50%"; + jQuery(result).attr('readonly', true); + if (this.hiddenColumns.indexOf(k + 1) > -1) { + td.style.display = "none"; + } else if (layout === "form") { + this.checkColSpanResponsive(); + colSpan = this.colSpanControlField(this.gridtable[0], this.gridtable[0][k].model.get("type"), k); + td.className = "col-xs-12 col-sm-" + colSpan + " col-md-" + colSpan + " col-lg-" + colSpan; + } else { + if (layout === "static") { + $(td).css({ + display: "inline-block" + }); + if (this.gridtable[0][k].model.get("columnWidth") && Number(this.gridtable[0][k].model.get("columnWidth")).toString() !== "NaN") { + $(td).css({ + "width": parseInt(this.gridtable[0][k].model.get("columnWidth")) + }); + this.gridtable[0][k].$el.css({ + "width": parseInt(this.gridtable[0][k].model.get("columnWidth")) + }); + } else { + if (this.gridtable[0][k].model.get("type") !== "hidden") { + $(td).css({ + "min-width": this.minCellWidth + }); + this.gridtable[0][k].$el.css({ + "width": this.minCellWidth + }); + } + } + td.className = "pmdynaform-grid-field-static field-operation-result"; + } else { + if (parseInt(this.gridtable[0][k].model.get("columnWidth")) !== 0) { + $(td).css({ + "width": this.gridtable[0][k].model.get("columnWidth"), + display: "inline-block" + }); + } else { + $(td).css({ + "width": this.gridtable[0][k].model.get("columnWidth"), + display: "none" + }); + } + } + } + operation = this.gridtable[0][k].model.attributes.operation; + if (operation) { + $(td).addClass("total"); + icon = iconTotal[operation] ? iconTotal[operation] : iconTotal["other"]; + label.innerHTML = icon + ": "; + result.value = title; + result.id = (operation + "-" + this.model.get("name") + "-" + + this.gridtable[0][k].model.get("columnName")); + $(td).addClass("function-result-" + this.gridtable[0][k].model.get("columnName")); + td.appendChild(label); + td.appendChild(result); + } else { + label.innerHTML = ""; + result.value = ""; + } + dom.append(td); + } + if (this.model.get("layout") == "static") { + this.tableBody.on("scroll", function (e) { + that.$el.find(".containerStaticGrid")[0].scrollLeft = e.target.scrollLeft; + }); + } + } + } + this.showToolTip(); + return this; + }, + /** + * Creates the html row + * @param numberRow + * @param dataRow + * @param sectionAffected + * @returns {{model: Array, view: Array, data: (*|Array)}} + */ + createHTMLRow: function (numberRow, dataRow, rowsDataSchema, sectionAffected, isHelper) { + var tr = this._createHtmlRow(), + td, + k, + tdRemove, + tdNumber, + element, + colSpan, + product, + cellModel, + nameCell, + cloneModel, + idCell, + cellView, + row = [], + rowModel = [], + rowView = [], + rowData, + i, + that = this, + nameToPostControl, + nameToPostLabelControl, + keyEvent = PMDynaform.core.Utils.generateID(); + + if (sectionAffected) { + this.flagRow = sectionAffected; + } + tdNumber = this.createRowNumber(numberRow + 1); + tr.appendChild(tdNumber); + for (k = 0; k < this.columnsModel.length; k += 1) { + cloneModel = jQuery.extend(true, {}, this.columnsModel[k]); + cellModel = null; + product = cloneModel.product; + nameToPostControl = this.createPostVariables(numberRow + 1, cloneModel.name); + nameToPostLabelControl = this.createPostVariables(numberRow + 1, cloneModel.name, '_label'); + cloneModel["nameToPostControl"] = nameToPostControl; + cloneModel["nameToPostLabelControl"] = nameToPostLabelControl; + cloneModel["row"] = numberRow; + cloneModel["col"] = k; + cloneModel["keyEvent"] = keyEvent; + cloneModel["dataForDependent"] = {}; + cellModel = new product.model(cloneModel); + if (this.model.get("variable").trim().length === 0) { + nameCell = ""; + idCell = this.changeIdField(this.model.get("id"), numberRow + 1, cellModel.get("_extended").name); + } else { + nameCell = this.changeNameField(this.model.get("name"), numberRow + 1, cellModel.get("_extended").name); + idCell = this.changeIdField(this.model.get("id"), numberRow + 1, cellModel.get("_extended").name); + } + cellModel.attributes.name = nameCell; + cellModel.attributes.id = idCell; + rowModel.push(cellModel); + } + for (i = 0; i < rowModel.length; i += 1) { + product = this.columnsModel[i].product; + cellView = null; + cellView = new product.view({ + model: rowModel[i], + form: this.form + }); + + cellView.setColumnIndex(i); + cellView.setOnFieldFocusCallback(function () { + that.scrollToColumn(this.columnIndex); + }); + rowModel[i].set("view", cellView); + cellView.project = this.project; + cellView.parent = this; + colSpan = rowModel[i].attributes.colSpan; + element = cellView.render().el; + if (this.model.get("layout") === "responsive") { + if ($(element).find(".form-control")[0]) { + var elementParent = $(element).find(".form-control")[0].parentNode; + elementParent.style.padding = "0px"; + } + td = document.createElement("div"); + td.className = "grid-cell-responsive"; + td.style.display = "inline-block"; + } else { + td = this._createHtmlCell(rowModel[i].attributes.type, colSpan, i); + } + if (this.hiddenColumns.indexOf(i + 1) > -1) { + $(td).hide(); + } + if (cellView.model.get("type") !== "hidden" && this.model.get("layout") === "static") { + if (cellView.model.get("columnWidth") && Number(cellView.model.get("columnWidth")).toString() !== "NaN") { + $(td).css({ + "min-width": parseInt(cellView.model.get("columnWidth")), + "max-width": parseInt(cellView.model.get("columnWidth")) + }); + cellView.$el.css({ + "width": parseInt(cellView.model.get("columnWidth")) + }); + } else { + $(td).css({ + "min-width": "200px", + "max-width": "200px" + }); + } + } + + if (this.model.get("layout") === "responsive") { + if (parseInt(cellView.model.get("columnWidth")) !== 0) { + $(td).css({ + "width": cellView.model.get("columnWidth") + }); + } else { + $(td).css({ + "width": cellView.model.get("columnWidth"), + display: "none" + }); + } + } + + $(element).addClass("row form-group"); + td.appendChild(element); + tr.appendChild(td); + row.push(cellView); + rowView.push(cellView); + } + rowData = this.prepareNewRow(row, dataRow); + this.updateNameFields(row); + for (var k = 0; k < row.length; k += 1) { + if (row[k].model.get("formula")) { + row[k].model.attributes.formulaAssociatedObject = []; + row[k].onFormula(row); + } + } + if (this.model.get("mode") === "edit") { + if (this.model.get("deleteRow")) { + tdRemove = this.createRemoveButton(numberRow + 1); + $(tdRemove).addClass("remove-row"); + tr.appendChild(tdRemove); + } + } + if (this.model.get("layout") === "responsive") { + jQuery(tdNumber).css({ width: this.indexResponsive }); + jQuery(tdRemove).css({ width: this.removeResponsive }); + } + this.flagRow += 1; + if (this.paged) { + this._createHTLMCarucel(); + this.domCarousel.append(tr); + this.tableBody.append(this.domCarousel); + } else { + this.tableBody.append(tr); + } + if (!this.deleteButtonVisibility) { + this.hideButton("delete"); + } + this.gridtable.push(row); + this.dom.push(tr); + this._executeDependenciesByRow(row, rowsDataSchema, isHelper); + return { + model: rowModel, + view: rowView, + data: rowData + }; + }, + /** + * Prepare the data for the grid row + * @param row + * @param dataRow + * @returns {Array} + */ + prepareNewRow: function (row, dataRow) { + var cellView, + that = this, + rowData = []; + + this.setRowData(row, dataRow); + if (_.isArray(row)) { + for (var i = 0; i < row.length; i += 1) { + cellView = row[i]; + if (cellView.model.get("operation") !== "") { + cellView.on("changeValues", function () { + that.setValuesGridFunctions({ + row: this.model.attributes.row, + col: this.model.attributes.col, + data: this.model.get("data").value + }); + that.createHTMLTotal(); + }); + } + if (row[i].model.get("operation")) { + if (!isNaN(parseFloat(row[i].model.get("value")))) { + rowData.push(parseFloat(row[i].model.get("value"))); + } else { + rowData.push(0); + } + } + } + } + return rowData; + }, + /** + * Sets data in the cells identifying the mode (view, edit and disabled) + * @param {array|number} row: is a index of array + * @param {[type]} rowData : is a set of data + */ + setRowData: function (row, rowData) { + if (typeof row === "number") { + row = this.gridtable[row]; + } + this._populateRow(row, rowData); + return this; + }, + /** + * Populate the grid row data. + * @param {Array} row + * @param {Array} rowData + */ + _populateRow: function (row, rowData) { + var i; + if (_.isArray(row) && _.isArray(rowData)) { + for (i = 0; i < row.length; i += 1) { + if (rowData[i]) { + this._completeRowData(row[i], rowData[i]); + } + } + } + }, + /** + * After the data was populated we need execute dependencies + * @param {Array} row + * @param {Array|undefined} rowsDataSchema + * @param {boolean|undefined} isHelper + */ + _executeDependenciesByRow: function (row, rowsDataSchema, isHelper) { + var i; + if (_.isArray(row)) { //Only works in new Row in GridTable + for (i = 0; i < row.length; i += 1) { + if (rowsDataSchema && rowsDataSchema[i] + && row[i].model.get("isDependent") + && row[i].setValueWithoutTriggerDependencies + && (!rowsDataSchema[i].defined || isHelper)) { + row[i].setValueWithoutTriggerDependencies(row[i].model.get("data").value); + } + } + } + }, + /** + * Set the data to a grid cell. + * @param {*} cell + * @param {*} data + */ + _completeRowData: function (cell, data) { + var type = cell.model.get("originalType"), + viewMode = cell.model.get("mode"); + if (type !== "multipleFile") { + (viewMode === "edit" || viewMode === "disabled") ? + this._setDataToEditMode(cell, data) : this._setDataToViewMode(cell, data); + } + return this; + }, + _setDataToViewMode: function (cell, data) { + if (cell && data !== undefined && data !== null) { + if (typeof cell.setData === "function") { + cell.setData(data); + } + } + return this; + }, + _setDataToEditMode: function (cell, data) { + var fixedData; + if (cell && data !== undefined && data !== null && data.value) { + // Sanitizing the data because from helper arrives only the value and row works wit value and label + fixedData = { + value: data.value || '', + label: data.label || data.value || '' + }; + cell.model.set('addRowValue', fixedData.value || null); + switch (cell.model.get('type')) { + case 'checkbox': + case 'link': + cell.setValue(fixedData.value); + break; + case 'file': + fixedData.value = fixedData.value === 'string' ? [] : fixedData.value; + cell.setData(fixedData); + break; + case 'text': + cell.model.set({ "data": fixedData }, { silent: true }); + cell.model.set({ "value": fixedData.value }, { silent: true }); + cell.model.set("toDraw", true); + break; + case 'dropdown': + cell.model.set({ "data": fixedData }, { silent: true }); + cell.model.set("toDraw", true); + break; + default: + // Only from addRow arrive a empty label, + // here the dependent event need to be fired + if (!data.label) { + cell.setData(fixedData); + } else { + cell.model.set({ "data": fixedData }, { silent: true }); + cell.model.set({ "value": fixedData.value }, { silent: true }); + cell.model.set("toDraw", true); + } + break; + } + } + return this; + }, + _createHTLMCarucel: function () { + if (this.block === true) { + this.domCarousel = document.createElement("div"); + this.domCarousel.className = "pmdynaform-grid-section_" + this.section; + if (this.model.get("layout") === "static") { + this.domCarousel.className += " pmdynaform-static"; + } + this.domCarousel = $(this.domCarousel); + } + if (this.section === this.showPage) { + this.domCarousel.addClass("item active"); + } else { + this.domCarousel.addClass("item"); + } + if (this.flagRow == this.pageSize) { + this.block = true; + this.section += 1; + this.flagRow = 0; + } else { + this.block = false; + } + return this; + }, + _createHtmlRow: function () { + var tr; + tr = document.createElement("div"); + tr.className = "pmdynaform-grid-row row form-group show-grid"; + if (this.model.get("layout") === "static") { + tr.className += " pmdynaform-grid-static" + } + return tr; + }, + _createHtmlCell: function (typeControl, colSpan, index) { + var td, colSpan; + td = document.createElement("div"); + if (this.model.attributes.layout === "form") { + if (typeControl !== "hidden") { + this.checkColSpanResponsive(); + colSpan = this.colSpanControlField(typeControl, index); + td.className = "col-xs-12 col-sm-" + colSpan + " col-md-" + colSpan + " col-lg-" + colSpan; + } else { + jQuery(td).css({ + width: 0 + "%", + display: "inline-block" + }); + } + } else if (this.model.attributes.layout === "static") { + if (typeControl !== "hidden") { + td.className = "pmdynaform-grid-field-static"; + } + } else { + if (typeControl !== "hidden") { + td.className = "col-xs-" + colSpan + " col-sm-" + colSpan + " col-md-" + colSpan + " col-lg-" + colSpan; + jQuery(td).css({ + width: this.colSpanControlFieldResponsive() + "%", + display: "inline-block" + }); + } else { + jQuery(td).css({ + width: 0 + "%", + display: "inline-block" + }); + } + } + return td; + }, + setData: function (data) { + var col, + i, + j, + cloneData = data, + grid = this.gridtable; + + if (typeof data === "object") { + if (cloneData.length) { + for (j in cloneData) { + if (cloneData.hasOwnProperty(j)) { + for (col = 0; col < grid[0].length; col += 1) { + if (!_.isEmpty(grid[0][col].model.attributes.variable)) { + if (grid[0][col].model.attributes.variable.var_name === j) { + if (cloneData[j] instanceof Array) { + for (i = 0; i < grid.length; i += 1) { + + if (!this.gridtable[i][col].model.get("formulator")) { + grid[i][col].model.set("value", cloneData[j][i]); + if (this.gridtable[i][col].onFieldAssociatedHandler) { + this.gridtable[i][col].onFieldAssociatedHandler() + } + } + } + } + } + } + } + } + } + } + } else { + //console.log("Error, The 'data' parameter is not valid. Must be an array."); + } + return this; + }, + getData: function () { + var i, + k, + gridpanel, + fields, + rowData = [], + gridData = [], + gridFieldData = { + name: this.model.get("name"), + gridtable: [] + }, + data = this.model.getData(); + + gridpanel = this.gridtable; + for (i = 0; i < gridpanel.length; i += 1) { + rowData = []; + for (k = 0; k < gridpanel[i].length; k += 1) { + if ((typeof gridpanel[i][k].getData === "function") && + (gridpanel[i][k] instanceof PMDynaform.view.Field)) { + rowData.push(gridpanel[i][k].getData()); + } + } + gridData.push(rowData); + } + gridFieldData.gridtable = gridData; + + return gridFieldData; + }, + renderGridTable: function (newItem) { + var i, + j, + rows, + rowsData, + rowData, + row, + rowsDataSchema, + rowDataSchema; + this.tableBody = this.$el.find(".pmdynaform-grid-tbody"); + rows = this.model.get("rows"); + rowsData = this.model.get("data"); + rowsDataSchema = this.model.get("dataSchema"); + if (this.model.get("layout") === "static") { + this.tableBody.addClass("pmdynaform-static"); + } + this.model.attributes.gridFunctions = []; + if (!newItem) { + this.dom = []; + for (j = 0; j < rows; j += 1) { + rowData = rowsData[j + 1]; + rowDataSchema = rowsDataSchema[j + 1]; + row = this.createHTMLRow(j, rowData, rowDataSchema); + if (row && row.data) { + this.model.attributes.gridFunctions.push(row.data); + for (i = 0; i < row.model.length; i += 1) { + if (row.model[i].get("operation") && row.model[i].get("operation").trim().length) { + row.view[i].onChangeCallbackOperation(); + } + if (row.model[i].get("type") === "label" && row.model[i].get("operation")) { + this.createHTMLTotal(); + } + } + } + } + } else { + row = this.createHTMLRow(this.gridtable.length - 1); + if (row && row.data) { + this.model.attributes.gridFunctions.push(row.data); + } + } + this.model.setPaginationItems(); + this.createHTMLPager(); + return this; + }, + /** + * @Event + * @param Event This must be an event valid + * @param Function Callback for the event + **/ + on: function (e, fn) { + var allowEvents = { + remove: "setOnDeleteRowCallback", + add: "setOnAddRowCallback", + pager: "setOnClickPageCallback", + beforeAdd: "setOnBeforeAddCallback" + }; + + if (allowEvents[e]) { + this[allowEvents[e]](fn); + } else { + throw new Error("The event must be a valid event.\n The events available are remove, add and pager"); + } + + return this; + }, + setOnDeleteRowCallback: function (fn) { + if (typeof fn === "function") { + this.onDeleteRowCallback = fn; + } else { + throw new Error("The callback must be a function"); + } + return this; + }, + setOnAddRowCallback: function (fn) { + if (typeof fn === "function") { + this.onAddRowCallback = fn; + } else { + throw new Error("The callback must be a function"); + } + return this; + }, + setOnBeforeAddCallback: function (fn) { + if (typeof fn === "function") { + this.onBeforeAddRowCallback = fn; + } else { + throw new Error("The callback must be a function"); + } + return this; + }, + setOnClickPageCallback: function (fn) { + if (typeof fn === "function") { + this.onClickPageCallback = fn; + } else { + throw new Error("The callback must be a function"); + } + + return this; + }, + afterRender: function () { + this.showToolTip(); + }, + /** + * this method get data in json formated, of this field. + * The suports controls are: + * - text + * - textarea + * - dropdown + * - hidden + * - checkbox + * - suggest + * - datetime + * @return {object} json + */ + getData2: function () { + var validControls, + gridpanel, + cellName, + rowData, + cell, + data = {}, + key, + k, + i; + validControls = ["text", "textarea", "dropdown", "hidden", "checkbox", "datetime", "suggest", "multipleFile"]; + gridpanel = this.gridtable; + for (i = 0; i < gridpanel.length; i += 1) { + data[i + 1] = {}; + rowData = {}; + for (k = 0; k < gridpanel[i].length; k += 1) { + cell = gridpanel[i][k].model; + if (validControls.indexOf(cell.get("originalType")) > -1) { + cellName = cell.get("columnName"); + rowData[cellName] = cell.get("data")["value"]; + rowData[cellName + "_label"] = cell.get("data")["label"]; + } + } + data[i + 1] = rowData; + } + return data; + }, + /** + * Get deleted files into a grid + * @returns {Object} + */ + getDeletedData: function () { + var validControls, + gridpanel, + cellName, + rowDeletedData, + cell, + deletedData = {}, + k, + i; + validControls = ["text", "textarea", "dropdown", "hidden", "checkbox", "datetime", "suggest", "multipleFile"]; + gridpanel = this.gridtable; + for (i = 0; i < gridpanel.length; i += 1) { + rowDeletedData = {}; + for (k = 0; k < gridpanel[i].length; k += 1) { + cell = gridpanel[i][k].model; + if (validControls.indexOf(cell.get("originalType")) > -1) { + cellName = cell.get("columnName"); + documentDelete = cell.makeVariableDocumentDelete ? cell.makeVariableDocumentDelete() : {}; + if (!_.isEmpty(documentDelete) && !_.isEmpty(documentDelete[cell.get("name")])) { + rowDeletedData[cellName] = documentDelete[cell.get("name")]; + } + } + } + if (!_.isEmpty(rowDeletedData)) { + deletedData[i + 1] = rowDeletedData; + } + + } + return deletedData; + }, + setData2: function (data) { + var rowIndex, grid, dataRow, + colIndexm, cols, colIndex, + cellModelItem, cellViewItem, + modeItem, dataItem, newItem, value, richi, option, options, i; + grid = this.gridtable; + for (rowIndex in data) { + if (parseInt(rowIndex, 10) > this.gridtable.length) { + newItem = this.addRow(); + this.renderGridTable(); + this.onAddRowCallback(newItem, this); + } + cols = grid[parseInt(rowIndex, 10) - 1].length; + for (colIndex = 0; colIndex < cols; colIndex += 1) { + cellViewItem = grid[parseInt(rowIndex, 10) - 1][colIndex]; + cellModelItem = grid[parseInt(rowIndex, 10) - 1][colIndex].model; + modeItem = cellModelItem.get("mode"); + for (dataItem in data[rowIndex]) { + if (cellModelItem.get("columnName") === dataItem) { + if (modeItem === "edit" || modeItem === "disabled") { + if (cellModelItem.get("type") === "suggest") { + + for (richi = 0; richi < cellModelItem.get("localOptions").length; richi += 1) { + option = cellModelItem.get("localOptions")[richi].value; + if (option === data[rowIndex][dataItem]) { + value = cellModelItem.get("localOptions")[richi].label; + break; + } + } + if (value && !value.length) { + for (richi = 0; richi < cellModelItem.get("options").length; richi += 1) { + option = cellModelItem.get("options")[richi].value; + if (option === data[rowIndex][dataItem]) { + value = cellModelItem.get("options")[richi].label; + break; + } + } + } + + $(cellViewItem.el).find(":input").val(value); + cellModelItem.attributes.value = data[rowIndex][dataItem]; + } else if (cellModelItem.get("type") === "checkbox") { + options = cellModelItem.get("options"); + if (cellModelItem.get("dataType") === "boolean") { + if (data[cellModelItem.get("name")] === options[0].value) { + options[1].selected = false; + options[0].selected = true; + } else { + delete options[0].selected; + options[1].selected = true; + options[0].selected = false; + } + } else { + for (i = 0; i < options.length; i += 1) { + delete options[i].selected; + if (data[rowIndex][dataItem].indexOf(options[i]) > -1) { + options[i].selected = true; + } + } + } + cellModelItem.set("options", options); + cellModelItem.initControl(); + cellModelItem.set("value", [data[rowIndex][dataItem]]) + } else { + cellModelItem.set("value", data[rowIndex][dataItem]); + } + } + if (modeItem === "view") { + if (cellModelItem.get("originalType") === "checkbox") { + cellModelItem.set("fullOptions", data[rowIndex][dataItem]); + } else if (cellModelItem.get("originalType") === "dropdown") { + value = []; + for (richi = 0; richi < cellModelItem.get("localOptions").length; richi += 1) { + option = cellModelItem.get("localOptions")[richi].value; + if (option === data[rowIndex][dataItem]) { + value.push(cellModelItem.get("localOptions")[richi].label); + cellModelItem.set("fullOptions", value); + break; + } + } + if (!value.length) { + for (richi = 0; richi < cellModelItem.get("options").length; richi += 1) { + option = cellModelItem.get("options")[richi].value; + if (option === data[rowIndex][dataItem]) { + value.push(cellModelItem.get("options")[richi].label); + cellModelItem.set("fullOptions", value); + break; + } + } + } + } else { + value = []; + value.push(data[rowIndex][dataItem]); + cellModelItem.set("fullOptions", value); + } + } + } + } + } + } + return this; + }, + render: function () { + var that = this, + bodyGrid; + + this.$el.html(this.template(this.model.toJSON())); + this.createHTMLTitle(); + this.renderGridTable(false); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + + this._$gridHeader = this.$el.find(".pmdynaform-grid-thead"); + this._gridHeader = this._$gridHeader.get(0); + + if (this.model.get("layout") === "static") { + bodyGrid = this.$el.find(".pmdynaform-grid-tbody"); + bodyGrid.css("overflow", "auto"); + bodyGrid.scroll(function (event) { + that._$gridHeader.scrollLeft(bodyGrid.scrollLeft()); + event.stopPropagation(); + }); + } + if (!this.model.get("addRow")) { + this.$el.find(".pmdynaform-grid-new").find("button").hide(); + } + if (this.model.get("layout") === "responsive") { + var size = { + "1200": 5, + "992": 4, + "768": 3, + "767": 2 + }; + + $(window).resize(function () { + var j, + k, + width = $(window).width(); + + if (width >= 1200) { + //console.log("1200"); + } + if (width >= 992 && width < 1200) { + //console.log("992"); + } + if (width >= 768 && width < 992) { + //console.log(">768"); + } + if (width < 768) { + //console.log("<768"); + } + + }); + } + + this.attachListeners(); + if (this._hidden) { + this.hide(); + } else { + this.show(); + } + return this; + }, + scrollToColumn: function (columnIndex) { + // We add 1 because the columnIndezx is ignoring the column for row number. + var gridBody = this.$el.find('.pmdynaform-grid-tbody').get(0), + gridBodyBR = gridBody.getBoundingClientRect(), + columnHeader, + headerIndex = 0; + if (this.model.get("layout") === "static") { + columnHeader = this.$el.find('.pmdynaform-grid-thead') + .find('.pmdynaform-grid-field-static').eq(columnIndex + 1); + if (columnHeader.get(headerIndex)) { + columnHeader = columnHeader.get(headerIndex).getBoundingClientRect(); + if (columnHeader.left < gridBodyBR.left) { + gridBody.scrollLeft -= gridBodyBR.left - columnHeader.left; + } + } + } + }, + setValue: function (value, row, col) { + if (value !== undefined) { + if (row !== undefined && col !== undefined) { + if ((row > 0 && col > 0) && row <= this.gridtable.length && col <= this.columnsModel.length) { + return this.gridtable[row - 1][col - 1].setValue(value); + } else { + return null; + } + } + } + return this; + }, + /** + * Method to set Value Async in grid field + * @param {*} value + * @param {*} row + * @param {*} col + * @param {*} fn + */ + setValueAsync: function (value, row, col, fn) { + if (value !== undefined) { + if (row !== undefined && col !== undefined) { + if ((row > 0 && col > 0) && row <= this.gridtable.length && col <= this.columnsModel.length) { + return this.gridtable[row - 1][col - 1].setValueAsync(value, fn); + } else { + return null; + } + } + } + return this; + }, + /** + * Method to set Text Async in grid field + * @param {*} text + * @param {*} row + * @param {*} col + * @param {*} fn + */ + setTextAsync: function (text, row, col, fn) { + if (text !== undefined) { + if (row !== undefined && col !== undefined) { + if ((row > 0 && col > 0) && row <= this.gridtable.length && col <= this.columnsModel.length) { + return this.gridtable[row - 1][col - 1].setTextAsync(text, fn); + } else { + return null; + } + } + } + return this; + }, + getValue: function (row, col) { + return this.model.getValue(row, col); + }, + /** + * Create grid variables to send by AJAX to the server side + * using the native form action to send via POST. + * @param rowIndex index number + * @param columnName column number + * @param suffix when the field has _label suffix + * @returns {string} + */ + createPostVariables: function (rowIndex, columnName, suffix) { + var index = this.model.get("variable") || this.model.get("id"), + suffix = suffix || ''; + return "form[" + index + "][" + rowIndex + "][" + columnName + suffix + "]"; + }, + + getColumnHeader: function (index) { + var cols; + if (this._gridHeader) { + cols = this.model.getHiddensBeforeColumn(index - 1); + return this._$gridHeader.find('> *').eq(index - cols.length); + } + return null; + }, + hideColumn: function (col) { + var field = this, + table, + row, + cell, + i, + label; + table = field.gridtable; + if (col > 0 && col <= field.columnsModel.length) { + if (field.hiddenColumns.indexOf(col) === -1) { + field.hiddenColumns.push(col); + } + for (i = 0; i < table.length; i += 1) { + row = table[i]; + cell = row[col - 1]; + if (cell.model.get("type") !== "hidden") { + cell.$el.hide(); + if (cell.$el.parent().length) { + cell.$el.parent().hide(); + } + if (cell.model.get("operation") !== "") { + field.$el.find("." + "function-result-" + cell.model.get("columnName")).hide(); + } + } + } + if (field.$el.find(".field-operation-result") && field.columnsModel[col - 1].type !== "hidden") { + field.$el.find(".field-operation-result").eq(col - 1).hide(); + this.getColumnHeader(col).hide(); + } + } + }, + showColumn: function (col) { + var field = this, + table, + row, + cell, + label, + i, + index; + table = field.gridtable; + if (col > 0 && col <= field.columnsModel.length) { + index = field.hiddenColumns.indexOf(col); + if (index > -1) { + field.hiddenColumns.splice(index, 1); + } + for (i = 0; i < table.length; i += 1) { + row = table[i]; + cell = row[col - 1]; + if (cell.model.get("type") !== "hidden") { + cell.$el.show(); + if (cell.$el.parent().length) { + cell.$el.parent().show(); + } + } + } + if (cell) { + if (cell.model.get("operation") !== "") { + field.$el.find("." + "function-result-" + cell.model.get("columnName")).show(); + } + if (field.$el.find(".field-operation-result") && field.columnsModel[col - 1].type !== "hidden") { + field.$el.find(".field-operation-result").eq(col - 1).show(); + this.getColumnHeader(col).show(); + } + } + } + }, + /** + * Hide Buttons "NewRow" or "deleteRow" + * @param buttonText + * @returns {GridView} + */ + hideButton: function (buttonText) { + var itemNewButton = this.$el.find(".pmdynaform-grid-newitem"), + itemDeleteButton = this.$el.find("button.glyphicon.glyphicon-trash"); + switch (buttonText) { + case "add": + if (this.model.get("addRow") && itemNewButton.is(":visible")) { + itemNewButton.hide(); + } + break; + case "delete": + if (this.model.get("deleteRow") && itemDeleteButton.is(":visible")) { + this.deleteButtonVisibility = false; + itemDeleteButton.hide(); + } + break; + } + return this; + }, + /** + * Show Buttons "NewRow" or "deleteRow" + * @param buttonText + * @returns {GridView} + */ + showButton: function (buttonText) { + var itemNewButton = this.$el.find(".pmdynaform-grid-newitem"), + itemDeleteButton = this.$el.find("button.glyphicon.glyphicon-trash"); + switch (buttonText) { + case "add": + if (this.model.get("addRow") && !itemNewButton.is(":visible")) { + itemNewButton.show(); + } + break; + case "delete": + if (this.model.get("deleteRow") && !itemDeleteButton.is(":visible")) { + this.deleteButtonVisibility = true; + itemDeleteButton.show(); + } + break; + } + return this; + }, + getNumberRows: function () { + return this.gridtable.length; + }, + /** + * this method execute, when the grid undergoes a change that requires validation check + * @returns {boolean} + */ + validateGrid: function () { + var valid = true; + if (this.validator) { + this.validator.$el.remove(); + } + valid = this.model.isValid(); + if (!valid) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".pmdynaform-grid").parent().append(this.validator.el); + this.$el.find(".pmdynaform-grid").addClass("has-error"); + } else { + this.$el.find(".pmdynaform-grid").removeClass("has-error"); + } + if (this.model.get("rows") === 0) { + this.renderEmptyGrid(); + } else { + this.removeEmptyGrid(); + } + return valid; + }, + /** + * this template is append when the rows not exist in the grid + * @returns {GridView} + */ + renderEmptyGrid: function () { + var emptyTag, + container = this.$el.find("#" + this.model.get("id") + "-body"); + emptyTag = this.$el.find(".grid-empty"); + if (emptyTag instanceof jQuery && emptyTag.length === 0) { + emptyTag = this.templateEmptyGrid({ + message: this.model.get("emptyMessage") + }); + container.prepend(emptyTag); + } + return this; + }, + /** + * this template is removed when the rows exist in the grid + * @returns {GridView} + */ + removeEmptyGrid: function () { + this.$el.find(".grid-empty").remove(); + return this; + }, + attachListeners: function () { + var grid = this.$el.find('.pmdynaform-grid-tbody'), + that = this; + + if (grid.length) { + grid.on('scroll', function () { + if (that.project) { + that.project.hideCalendars(); + } + }); + } + }, + getColumnToId: function (id) { + var column, colIndex, cell = {}; + column = this.columnsModel.find(function (column, index) { + if (column.columnId === id) { + colIndex = index + 1; + return column; + } + }); + if (colIndex) { + cell = { + colIndex: colIndex, + column: column + } + } + return cell; + }, + getSummary: function (col) { + var result = null, column, colIndex; + column = parseInt(col); + if (_.isNaN(column)) { + column = this.getColumnToId(col); + colIndex = column['colIndex'] ? column['colIndex'] : -1; + } else { + colIndex = column; + } + if (colIndex > 0 && colIndex <= this.columnsModel.length) { + column = this.columnsModel[colIndex - 1]; + if (column && column.operation) { + result = this.model.get("totalrow")[colIndex - 1]; + } + } + return !!result ? result : 0; + }, + validateRowCol: function (row, col) { + var rowAux = Math.floor(row), + colAux = Math.floor(col), + sw = false; + + if (!_.isNaN(rowAux) && !_.isNaN(col)) { + if (rowAux > 0 && colAux > 0 && rowAux <= this.gridtable.length && colAux <= this.columnsModel.length) { + sw = true; + } + } + return sw; + }, + getItemGrid: function (row, col) { + var itemGrid = null; + if (this.validateRowCol(row, col)) { + itemGrid = this.gridtable[row - 1][col - 1]; + } + return itemGrid; + }, + getText: function (row, col) { + var itemGrid = this.getItemGrid(row, col); + return itemGrid ? itemGrid.getText() : null; + }, + /** + * Get Control HTML from Field + * @param row + * @param col + * @returns {Array} + */ + getControl: function (row, col) { + var htmlControl = []; + if (row && col) { + if (this.model.isRowInRange(row) && this.model.isColumnInRange(col)) { + htmlControl = this.gridtable[row - 1][col - 1].getControl(); + } + } + return htmlControl; + }, + /** + * Create Tooltip and show in the event hover + * and hide in the event blur or make scrolling in Body of the Datatable + */ + showToolTip: function () { + var dataTableResult = $(".pmdynaform-grid-functions").find("input"), + toolTipVar = new PMDynaform.view.ToolTipView(); + + if (dataTableResult) { + dataTableResult.hover(function (e) { + toolTipVar.show($(this), $(this).val(), "bottom"); + e.stopPropagation(); + e.preventDefault(); + }); + + dataTableResult.mouseout(function (e) { + toolTipVar.hide($(this)); + e.stopPropagation(); + e.preventDefault(); + }); + } + }, + /** + * Set the columnId to know the column delete file + * @returns {number} + */ + getColumnFileDelete: function (columnId, nameRow) { + return this.model.getColumnFileDelete(columnId, nameRow); + }, + /** + * Clear Content File Grid + * @param row + * @param col + * @returns {GridView} + */ + clearContent: function (row, col) { + var viewFile; + if (row && col) { + if (this.model.isRowInRange(row) && this.model.isColumnInRange(col)) { + viewFile = this.gridtable[row - 1][col - 1]; + if (viewFile && viewFile.model.get("type") === "file") { + viewFile.clearContent(); + } + } + } + return this; + }, + /** + * Delete a files in a row of grid + * @param row + * @returns {GridView} + */ + deleteFilesByRow: function (row) { + var index; + for (index = 0; index < row.length; index += 1) { + if (row[index].model.get("originalType") === "multipleFile") { + row[index].model.deleteFiles(); + } + } + return this; + }, + /** + * Clear all grid's row. + */ + clearAllRows: function () { + var totalItems = this.gridtable.length, + mode = this.model.get('mode'); + if (mode === "edit") { + while (totalItems >= 0) { + this.deleteRow(totalItems); + totalItems -= 1; + } + } + }, + /** + * Gets all fields that was not already uploaded. + * @returns {array} + */ + getFilesNotUploaded: function () { + var i, + j, + filesError = [], + row, + rows = this.model.get("gridtable"); + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + for (j = 0; j < row.length; j += 1) { + if (row[j].model.get("type") === "multipleFile") { + filesError = filesError.concat(row[j].getFilesNotUploaded()); + } + } + } + return filesError; + }, + /** + * Gets the loading value into the grid fields + * @returns {boolean} + */ + isLoading: function () { + var i, + j, + row, + rows = this.model.get("gridtable"); + for (i = 0; i < rows.length; i += 1) { + row = rows[i]; + for (j = 0; j < row.length; j += 1) { + if (row[j].model.get("type") !== "multipleFile") { + if (row[j].model.get("loading")) { + return true; + } + } + } + } + return false; + } + + }); + PMDynaform.extendNamespace("PMDynaform.view.GridPanel", GridView); +}()); + +(function () { + var ButtonView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-button").html()), + events: { + "keydown": "preventEvents" + }, + tagControl: null, + tagLabel: null, + initialize: function () {}, + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + on: function (e, fn) { + var that = this; + if (this.tagControl.length) { + this.tagControl.on(e, function (event) { + fn(event, that); + event.stopPropagation(); + }); + } + return this; + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + this.tagControl = this.$el.find("button"); + this.tagLabel = this.$el.find("button span"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setValue: function (text) { + if (text) { + this.model.set("label", text); + this.tagLabel.text(text); + } + return this; + }, + getText: function () { + var label = this.model.get("label"); + return label ? label : null; + }, + getValue: function () { + return this.model.getValue(); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Button", ButtonView); +}()); +(function () { + var DropDownView = PMDynaform.view.Field.extend({ + events: { + "change select": "changeSelectEvent", + "keydown select": "preventEvents", + "focus select": "focusSelectEvent" + }, + clicked: false, + jsonData: {}, + firstLoad: true, + dirty: false, + previousValue: "", + triggerCallback: false, + template: _.template($("#tpl-dropdown").html()), + templateOptions: _.template($("#tpl-dropdown-options").html()), + existHTML: false, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + this.form = options.form ? options.form : null; + this.previousValue = this.getValue(); + this.formulaFieldsAssociated = []; + this.model.on("change:options", this.redrawOptions, this); + this.model.on("change:toDraw", this.refreshHTML, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + this.model.on("change:disablePlaceholder", this.removePlaceholder, this); + }, + /** + * removePlaceholder(), this method remove placeholder option, + * when is change option. + * @return {object} + */ + removePlaceholder: function () { + this.tagControl.find("#placeholder-option").remove(); + return this; + }, + /** + * Default function + */ + onChangeCallback: null, + /** + * Sets onChangeCallback function + * @param fn {function} + * @returns {DropDownView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + setValueDefault: function () { + var val = $(this.el).find(":selected").val(); + if (val != undefined && val != null) { + this.model.set("value", val); + } else { + this.model.set("value", ""); + } + }, + validate: function () { + var drpValue; + drpValue = this.$el.find("select").val() || ""; + this.model.set({ value: drpValue }, { validate: true }); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator"), + domain: false + }); + this.$el.find("select").parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + on: function (e, fn) { + var that = this, + control = this.$el.find("select"); + if (control) { + control.on(e, function (event) { + fn(event, that); + event.stopPropagation(); + }); + } + return this; + }, + /** + * Get the html control using its class identifier + * @returns {Object} + */ + getHTMLControl: function () { + return this.$el.find("select"); + }, + /** + * Refresh dropdown in grids + * @return {DropDownView} + */ + refreshHTML: function () { + if (this.existHTML && this.model.get("group") === "grid") { + if (!this.model.findValueInOptions(this.model.get("data")["value"])) { + this._setOptions([this.model.get("data")]); + this.tagHiddenToLabel.val(this.model.get("data")["label"]); + } else { + this.render(); + } + } + return this; + }, + /** + * Render the field View + * @return {DropDownView} + */ + render: function () { + var hidden, + name; + this.existHTML = true; + this.$el.html(this.template(this.model.toJSON())); + this.$el.find("input[type='hidden']").val(this.model.get("data")["label"]); + // Only works in Mobile grid + if (PMDynaform.core.ProjectMobile && this.model.get("parentField")) { + this._setDataOption(); + } + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + } + if (this.model.get("hint")) { + this.enableTooltip(); + } + this.setValueToDomain(); + if (this.model.get("name").trim().length === 0) { + this.$el.find("select").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.$el.find(".content-print").text(this.model.get("data")["label"]); + this.tagControl = this.$el.find("select"); + this.tagControl.val(this.model.get("data")["value"].toString() || ""); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Set options in html control + * @param {*} options + * @return {DropDownView} + */ + _setOptions: function (options) { + var htmlOptions, + placeholderOption = {}, + selectControl = this.$el.find("select"), + therePlaceholder = this.model.get("therePlaceholder"); + if (therePlaceholder) { + placeholderOption = this.model.get("placeholderOption"); + } + selectControl.empty(); + htmlOptions = this.templateOptions({ + options: options, + therePlaceholder: therePlaceholder, + placeholderOption: placeholderOption + }); + selectControl.append(htmlOptions); + return this; + }, + /** + * Set data in options + * @return {DropDownView} + */ + _setDataOption: function () { + var data = this.model.get("data"); + if (data && data["value"]) { + this._setOptions([data]); + } + return this; + }, + /** + * Returns a label from model + * @return {*} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Returns the value model + * @return {String} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Returns the control field + * @return {*} + */ + getControl: function () { + var htmlControl = this.$el.find("select"); + return htmlControl; + }, + /** + * redrawOptions, Draw component options + * @chainable + */ + redrawOptions: function () { + if (this.existHTML) { + this.firstLoad = false; + this._setOptions(this.model.get("options")); + this.tagHiddenToLabel.val(this.model.get("data")["label"]); + } + return this; + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @return {DropDownView} + */ + changeSelectEvent: function (event, value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + that.validate(); + }); + return this; + }, + /** + * When the source of change is a helper + * @param {*} value + * @param {*} fn + * @return {DropDownView} + */ + changeHelperEvent: function (value, fn) { + var dt, that = this; + this.tagControl.val(value); + dt = this.updateView(function () { + that.executeChangeCallback(); + if (_.isFunction(fn)) { + fn(); + } + }); + return this; + }, + + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @param {*} fn + * @return {DropDownView} + */ + updateView: function (fn) { + var dt = { + value: "", + label: "" + } + dt = this.updateFieldView(); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + //The validation works with the model data: value-label, in this moment the model data is correct + this.validate(); + return this; + }, + /** + * Update the view + * @return {*} + */ + updateFieldView: function () { + var hiddenInput, + label, + option; + if (this.model.get("therePlaceholder")) { + this.removePlaceholder(); + } + option = this.tagControl.find(":selected"); + if (this.tagControl) { + this.tagControl.children().removeAttr("selected"); + option.prop("selected", true); + option.attr("selected", "selected"); + label = option.text().trim(); + hiddenInput = this.$el.find("input[type='hidden']"); + hiddenInput.val(label); + value = this.tagControl.val(); + } + this.$el.find(".content-print").text(label); + this.clicked = false; + return { + value: value, + label: label + }; + }, + /** + * Helper setValue + * @param {*} value + * @param {*} fn + * @return {DropDownView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Helper setText + * @param {*} txt + * @return {DropDownView} + */ + setText: function (txt) { + var opt = this.model.findTextInOptions(txt); + if (opt) { + this.setValue(opt["value"]); + } + return this; + }, + /** + * Helper setText async mode + * @param {*} txt + * @param {function} fn + * @return {DropDownView} + */ + setTextAsync: function (txt, fn) { + var that = this, + callback, + currentValue = this.model.get("data").value; + if (txt) { + this.previousValue = currentValue; + callback = function () { + var opt = that.model.findTextInOptions(txt); + if (opt && opt["value"]) { + that.changeHelperEvent(opt && opt["value"] ? opt["value"] : "", fn); + that.firstLoad = false; + } + that.switchSpinnerByControl(); + }; + this.switchControlBySpinner(); + if (txt !== currentValue && this.firstLoad) { + this.model.getRemoteOptions(callback); + } else { + callback(); + } + } + return this; + }, + /** + * Helper SetValueAsync + * @param {*} value + * @param {*} fn + * @return {DropDownView} + */ + setValueAsync: function (value, fn) { + var that = this, + callback, + currentValue = this.model.get("data").value; + if (value !== undefined) { + this.previousValue = currentValue; + callback = function () { + that.changeHelperEvent(value, fn); + that.firstLoad = false; + that.switchSpinnerByControl(); + }; + this.switchControlBySpinner(); + if (value !== currentValue && this.firstLoad) { + this.model.getRemoteOptions(callback); + } else { + callback(); + } + } + return this; + }, + /** + * SetValue, get Remote options, update the view and model but not trigger the dependencies without execute onchangecallbacks + * @param {*} value + * @param {*} fn + * @return {DropDownView} + */ + setValueWithoutTriggerDependencies: function (value, fn) { + var that = this, + dataOption, + criteria = "value"; + if (value !== undefined && value !== null) { + this.model.getRemoteOptions(function (data, err) { + dataOption = that.model.findOption(value, criteria); + that.model.setFirstOptionInData(); + if (dataOption) { + that.model.set("data", dataOption); + that.refreshHTML(); + } + if (_.isFunction(fn)) { + fn(); + } + }); + } + return this; + }, + /** + * Prevents bubble events in dropdown + * @param {*} event + * @return {DropDownView} + */ + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + /** + * Event focus in Select, trigger the remote options + * @return {DropDownView} + */ + focusSelectEvent: function () { + var value, that = this; + if (this.firstLoad && this.model.get("sql")) { + this.tagControl.empty(); + //Save the value older to set when exeecute query for remote options + value = this.model.get("data").value || ""; + this.model.set("showDependentSpinners", false); + this.model.getRemoteOptions(function (data, err) { + that.tagControl.val(value); + that.switchSpinnerByControl(); + }); + if (PMDynaform.core.ProjectMobile) { + this.model.trigger("change:options"); // Only display with old data in dropdown + } + } + return this; + }, + /** + * Change the hidden view in Dropdown field + * @return {DropDownView} + */ + changeHidden: function () { + var data = this.model.get("data"), + hiddenInput = this.tagHiddenToLabel; + if (data.hasOwnProperty("label")) { + hiddenInput.val(data.label); + } + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + dependencyDidUpdateView: function () { + this.changeHidden(); + this.switchSpinnerByControl(); + this.validate(); + }, + /** + * Execute the change callback on view + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + if (paramsValue.current !== paramsValue.previous) { + if (_.isFunction(this.onChangeCallback)) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + } + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + this.onFieldAssociatedHandler(); + this.switchSpinnerByControl(); + }, + setData: function (data) { + var value, label; + if (this.model.get("type") !== "submit" && this.model.get("type") !== "button" && this.model.get("type") !== "panel") { + if (this.model.get("type") === "label") { + this.setValue(data); + } else { + value = data["value"]; + this.setValue(value); + } + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.DropdownR", DropDownView); + +}()); +(function () { + var RadioView = PMDynaform.view.Field.extend({ + clicked: false, + previousValue: null, + template: _.template($("#tpl-radio").html()), + templateOptions: _.template($("#tpl-radio-options").html()), + existHTML: false, + events: { + "change input": "changeRadioEvent", + "keydown input": "preventEvents" + }, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + this.form = options.form ? options.form : null; + this.previousValue = this.getValue(); + // this property have a control of formulas field + this.formulaFieldsAssociated = []; + this.model.on("change:options", this.redrawOptions, this); + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + }, + /** + * Prevent propagation + * @param {*} event + * @returns {RadioView} + */ + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallback function + * @param fn + * @returns {RadioView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Render the view + * @returns {RadioView} + */ + render: function () { + this.existHTML = true; + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint")) { + this.enableTooltip(); + } + this.setValueToDomain(); + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='radio']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.$el.find(".content-print").text(this.getText()); + this.tagControl = this.$el.find(".pmdynaform-radio-items"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Validate the model and update the view with the validators + * @returns {RadioView} + */ + validate: function () { + this.model.set({}, { validate: true }); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".pmdynaform-control-radio-list").parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + /** + * Update accessibility HTML attributes + * @param {Object} params + * @chainable + */ + updateAccessibility: function (params) { + if (this.model.get("ariaLabelVisible")) { + this.$el.find("input[type='radio']").removeAttr("aria-label"); + params.tagOption.attr("aria-label", params.ariaLabel); + } + return this; + }, + /** + * Gets the html control using its class identifier + * @returns {Object} + */ + getHTMLControl: function () { + return this.$el.find(".pmdynaform-control-radio-list"); + }, + /** + * Helper getText + * @returns {Object} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Helper getValue + * @returns {Object} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Render the options model + * @returns {RadioView} + */ + renderOptions: function () { + var htmlOptions, + contendControl, + config; + contendControl = this.$el.find(".pmdynaform-radio-items"); + contendControl.empty(); + + if (_.isArray(this.model.get("options"))) { + config = { + name: this.model.get("name"), + id: this.model.get("id"), + type: this.model.get('type'), + namespace: this.model.get("namespace"), + disabled: this.model.get("disabled"), + options: this.model.get("options") + }; + htmlOptions = this.templateOptions(config); + contendControl.append(htmlOptions); + } + return this; + }, + /** + * Returns the html control + * @returns {*} + */ + getControl: function () { + return this.$el.find("input[type='radio']"); + }, + /** + * redrawOptions, Draw component options + * @chainable + */ + redrawOptions: function () { + var data = this.model.get("data"); + if (this.existHTML) { + this.renderOptions(); + this.updateValueHiddenControl(data["label"] || ""); + } + return this; + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @returns {RadioView} + */ + changeRadioEvent: function (event, value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + }); + return this; + }, + /** + * When the source of change is a helper + * @param {*} value + * @param {*} fn + * @returns {RadioView} + */ + changeHelperEvent: function (value, fn) { + var that = this; + this.updateView(function () { + that.executeChangeCallback(); + if (_.isFunction(fn)) { + fn(); + } + }, value); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of checkgroup + * @param {*} value + * @param {*} fn + * @returns {RadioView} + */ + updateView: function (fn, value) { + var dt = { + value: "", + label: "" + } + dt = this.updateFieldView(value); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.validate(); + return this; + }, + /** + * Update the view radio items + * @param {*} value + * @returns {*} + */ + updateFieldView: function (value) { + var tagOption, option, selectedHTMLOption; + this.clicked = true; + if (typeof value !== "undefined") { + option = this.model.findOption(value, "value"); + if (option !== null) { + selectedHTMLOption = this.tagControl.find('input[type=radio][value="' + option.value + '"]'); + } + if (selectedHTMLOption && selectedHTMLOption.length) { + selectedHTMLOption[0].checked = true; + this.updateValueHiddenControl(option.label); + this.updateValueRadioControl(option.value); + } else { + this.tagControl.find('input[type=radio]').attr('checked', false); + option = {label: "", value: ""}; + this.model.set("data", option); + this.updateValueHiddenControl(option.label); + this.updateValueRadioControl(option.value); + } + this.$el.find(".content-print").text(this.model.get("data")["label"]); + } else { + tagOption = $(event.target); + value = tagOption.val(); + option = this.model.findOption(value, "value"); + if (option && option.value) { + this.$el.find(".content-print").text(option.label); + this.updateAccessibility({ ariaLabel: option.label, tagOption: tagOption }); + this.updateValueHiddenControl(option.label); + this.updateValueRadioControl(option.value); + } + } + if (option) { + this.clicked = false; + } + return option; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + dependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate").error && this.model.get("dependencyDidUpdate").error !== "abort") { + this.showQueryFailMessage(); + } + this.switchSpinnerByControl(); + this.validate(); + }, + /** + * Executes onChangeCallBack function + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + // For execute the formula field associated + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + this.onFieldAssociatedHandler(); + }, + /** + * Sets value and update previousValue + * @param value + * @returns {RadioView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Sets value and update previousValue + * @param value + * @returns {RadioView} + */ + setValueAsync: function (value, fn) { + var that = this, + currentValue = this.model.get("data").value; + if (value !== undefined) { + this.previousValue = currentValue; + that.changeHelperEvent(value, fn); + } + return this; + }, + /** + * Helper setText + * @param {*} txt + * @returns {RadioView} + */ + setText: function (txt) { + var opt = this.model.findTextInOptions(txt); + if (opt) { + this.setValue(opt["value"]); + } + return this; + }, + /** + * Helper setText async mode + * @param {*} txt + * @returns {RadioView} + */ + setTextAsync: function (txt, fn) { + var opt = this.model.findTextInOptions(txt); + if (opt) { + this.setValueAsync(opt["value"], fn); + } + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.RadioR", RadioView); +}()); + +(function () { + var SubmitView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-submit").html()), + events: { + "keydown": "preventEvents" + }, + tagControl: null, + tagLabel: null, + initialize: function () {}, + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + on: function (e, fn) { + var that = this; + if (this.tagControl.length) { + this.tagControl.on(e, function (event) { + fn(event, that); + event.stopPropagation(); + }); + } + return this; + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + this.tagControl = this.$el.find("button"); + this.tagLabel = this.$el.find("button span"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setValue: function (text) { + if (text) { + this.model.set("label", text); + this.tagLabel.text(text); + } + return this; + }, + getText: function () { + var label = this.model.get("label"); + return label? label : null; + }, + getValue: function () { + return this.model.getValue(); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Submit", SubmitView); +}()); +(function () { + var TextareaView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-textarea").html()), + validator: null, + keyPressed: false, + previousValue: "", + events: { + "change textarea": "changeInputEvent", + "keydown textarea": "refreshBinding" + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallback function + * @param fn {function} + * @returns {TextareaView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Initializes Textarea properties + * @param options + */ + initialize: function (options) { + // this property have a control of formulas field + this.form = options.form ? options.form : null; + this.formulaFieldsAssociated = []; + this.model.on("change:data", this.updateValueInput, this); + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + }, + /** + * Update the keypressed property + * @returns {TextareaView} + */ + refreshBinding: function () { + this.keyPressed = true; + return this; + }, + /** + * Updates the values in the inputs controls nodes + * @returns {TextareaView} + */ + updateValueInput: function () { + var textInput, hiddenInput; + textInput = this.$el.find("textarea"); + hiddenInput = this.$el.find("input[type='hidden']"); + if (this.model.get("data")) { + textInput.val(this.model.get("data")["label"]); + hiddenInput.val(this.model.get("data")["label"]); + } + return this; + }, + /** + * Render method + * @returns {TextareaView} + */ + render: function () { + var hidden, name; + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + } + this.previousValue = this.model.get("value"); + + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='textarea']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.$el.find(".content-print").text(this.model.get("data")["label"]); + this.tagControl = this.$el.find("textarea"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Validate the model and views validators + * @param {*} event + * @returns {TextareaView} + */ + validate: function (event) { + var originalValue; + originalValue = this.tagControl.val(); + this.model.set("validate", true); + this.model.attributes.value = originalValue; + this.model.validate(); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.tagControl.parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + this.keyPressed = false; + // For execute the formula field associated + this.onFieldAssociatedHandler(); + return this; + }, + /** + * Suscribe listeners in field + * @returns {TextareaView} + */ + on: function (e, fn) { + var that = this, + control = this.$el.find("textarea"); + + if (control) { + control.on(e, function (event) { + fn(event, that); + + event.stopPropagation(); + }); + } + + return this; + }, + /** + * Gets HTML textarea of the control + * @returns {*} + */ + getHTMLControl: function () { + return this.$el.find("textarea"); + }, + /** + * Calls setValue of the TextareaModel + * @param value + * @returns {TextareaView} + */ + setValue: function (value) { + if (value !== undefined && value !== null) { + this.previousValue = this.getValue(); + this.form.model.set("isSync", true); + this.model.setValue(value); + this.form.model.set("isSync", false); + } + return this; + }, + /** + * Gets label of data + * @returns {null} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Gets value of data + * @returns {*} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Returns the html control + * @returns {*} + */ + getControl: function () { + return this.$el.find("textarea"); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @returns {TextareaView} + */ + updateView: function (fn, val) { + var dt = { + value: "", + label: "" + } + dt = this.updateFieldView(val); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.validate(); + return this; + }, + /** + * Update the view and return the data to update the model + * @param {*} val + */ + updateFieldView: function (val) { + var label = "", + textInput = this.getControl(), + hiddenInput = this.$el.find("input[type='hidden']"); + if (val && val != "") { + textInput.val(val); + } + hiddenInput.val(textInput.val()); + this.$el.find(".content-print").text(textInput.val()); + this.clicked = false; + return { + value: textInput.val(), + label: textInput.val() + } + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @returns {TextareaView} + */ + changeInputEvent: function (event, value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + }); + return this; + }, + /** + * When the source of change is a helper + * @param {*} value + * @param {*} fn + * @returns {TextareaView} + */ + changeHelperEvent: function (value, fn) { + var dt, that = this; + this.tagControl.val(value); + dt = this.updateView(function () { + that.executeChangeCallback(); + if (_.isFunction(fn)) { + fn(); + } + }, value); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + dependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate").error && this.model.get("dependencyDidUpdate").error !== "abort") { + this.showQueryFailMessage(); + } + this.switchSpinnerByControl(); + }, + /** + * Executes onChangeCallBack function + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + if (this.model.get("group") === "grid" && this.onChangeCallbackOperation) { + if (typeof this.onChangeCallbackOperation === "function") { + this.onChangeCallbackOperation(); + } + } + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + this.onFieldAssociatedHandler(); + }, + /** + * Helper SetValueAsync + * @param {*} value + * @param {*} fn + * @returns {TextareaView} + */ + setValueAsync: function (value, fn) { + var that = this, + currentValue = this.model.get("data").value; + if (value !== undefined && currentValue.toString() !== value.toString()) { + this.previousValue = currentValue; + that.changeHelperEvent(value, fn); + } + return this; + }, + /** + * Helper SetValueAsync + * @param {*} value + * @param {*} fn + * @returns {TextareaView} + */ + setTextAsync: function (value, fn) { + var that = this, + currentValue = this.model.get("data").value; + if (value !== undefined) { + this.previousValue = currentValue; + that.changeHelperEvent(value, fn); + } + return this; + }, + /** + * Helper setValue + * @param {*} value + * @param {*} fn + * @returns {TextareaView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Helper setText + * @param {*} txt + * @returns {TextareaView} + */ + setText: function (txt) { + this.setValue(txt); + return this; + }, + /** + * SetValue, get Remote options, update the view and model but not trigger the dependencies without execute onchangecallbacks + * @param {*} value + * @param {*} fn + * @return {TextAreaView} + */ + setValueWithoutTriggerDependencies: function (value, fn) { + var that = this, + dataOption, + criteria = "value"; + if (value !== undefined && value !== null) { + this.model.getRemoteOptions(function (data, err) { + dataOption = that.model.findOption(value, criteria); + if (dataOption) { + that.updateFieldView(dataOption.value); + } else { + that.model.setFirstOptionInData(); + } + if (_.isFunction(fn)) { + fn(); + } + }); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.TextAreaR", TextareaView); +}()); + +(function () { + var TextView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-text").html()), + validator: null, + keyPressed: false, + fieldValid: [], + previousValue: null, + firstLoad: false, + formulaFieldsAssociated: [], + jsonData: {}, + spinner: null, + events: { + "change input": "changeInputEvent", + "keydown input": "refreshBinding" + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallBack function + * @param fn {function} + * @returns {TextView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Initializes field properties + * @param options {object} + */ + initialize: function (options) { + var that = this; + this.form = options.form ? options.form : null; + this.previousValue = this.model.get("value"); + this.formulaFieldsAssociated = []; + this.model.on("change:data", this.updateValueInput, this); + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + }, + /** + * Prevent Events + * @param {*} event + * @returns {TextView} + */ + refreshBinding: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + this.keyPressed = true; + return this; + }, + /** + * Merge remote options + * @param {*} remoteOptions + * @param {*} click + */ + mergeOptions: function (remoteOptions, click) { + var item; + if (remoteOptions.length) { + item = remoteOptions[0]; + if (item.hasOwnProperty("value")) { + this.model.setValue(item["value"]); + } else { + this.model.setValue(""); + } + } else { + this.model.setValue(""); + } + }, + /** + * Validate the view + * @param {*} event + * @param {*} b + * @param {*} c + * @returns {TextView} + */ + validate: function (event, b, c) { + this.keyPressed = true; + this.model.set("validate", true); + this.model.validate(); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.tagControl.parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + this.keyPressed = false; + return this; + }, + /** + * Executes formula associated + * @returns {TextView} + */ + onFieldAssociatedHandler: function () { + var i, + fieldsAssoc = this.formulaFieldsAssociated; + if (fieldsAssoc.length > 0) { + for (i = 0; i < fieldsAssoc.length; i += 1) { + if (fieldsAssoc[i].model.get("formulator") instanceof PMDynaform.core.Formula) { + this.model.addFormulaTokenAssociated(fieldsAssoc[i].model.get("formulator")); + this.model.updateFormulaValueAssociated(fieldsAssoc[i]); + } + } + } + return this; + }, + /** + * Turns text value to uppercase or lowercase + * @param val + * @returns {TextView} + */ + onTextTransform: function (val) { + var transformed, + transform = this.model.get("textTransform"), + availables = { + upper: function () { + return val.toUpperCase(); + }, + lower: function () { + return val.toLowerCase(); + }, + none: function () { + return val; + }, + capitalizePhrase: function () { + return val.charAt(0).toUpperCase() + val.slice(1); + }, + titleCase: function () { + return val.capitalize(); + } + }; + if (transform) { + transformed = (availables[transform]) ? availables[transform]() : availables["none"](); + this.$el.find("input[type='text']").val(transformed); + } + return this; + }, + /** + * Validates fields supported on formula + * @param fields + * @returns {{}} + */ + checkFieldsValidForFormula: function (fields) { + var validFields = ["text", "label", "dropdown", "suggest", "textarea", "radio"], + responseObject = {}, + itemField, + i; + for (i = 0; i < fields.length; i += 1) { + itemField = fields[i]; + if (validFields.indexOf(itemField.model.get("type")) > -1) { + responseObject[itemField.model.get("id")] = itemField; + } + } + return responseObject; + }, + /** + * Event to process the formula + * @param rows + * @returns {TextView} + */ + onFormula: function (rows) { + var fieldsList, + that = this, + allFieldsView, + formulaField = this.model.get("formula"), + idFields = {}, + fieldFormula, + fieldAdded = [], + group = this.model.get("group"); + fieldsList = group === "grid" ? rows : this.parent.items; + allFieldsView = (fieldsList instanceof Array) ? fieldsList : fieldsList.asArray(); + idFields = this.checkFieldsValidForFormula(allFieldsView); + fieldFormula = formulaField.replace(/\s/g, '').split(/[\-(,|+*/\)]+/); + if (this.model.get("group") === "grid") { + for (var k = 0; k < rows.length; k += 1) { + if (fieldFormula.indexOf(rows[k].model.get("id")) > -1) { + rows[k].onFieldAssociatedHandler(); + } + } + } + this.fieldValid = fieldFormula.filter(function existElement(element) { + var result = false; + if ((idFields[element] !== undefined) && ($.inArray(element, fieldAdded) === -1)) { + fieldAdded.push(element); + result = true + } + return result; + }); + //Insert the Formula object to fields selected + for (var obj = 0; obj < this.fieldValid.length; obj += 1) { + this.model.addFormulaFieldName(this.fieldValid[obj]); + idFields[this.fieldValid[obj]].formulaFieldsAssociated.push(that); + if (this.model.get("group") === "grid") { + if (idFields.hasOwnProperty(this.fieldValid[obj])) { + this.formulaFieldsAssociated.push(idFields[this.fieldValid[obj]]); + } + } + } + return this; + }, + /** + * Gets HTML input of the control + * @returns {*} + */ + getHTMLControl: function () { + return this.$el.find("input"); + }, + /** + * Render method + * @returns {TextView} + */ + render: function () { + var hidden, + name; + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + hidden.value = this.model.get("data").value; + } + if (this.model.get("group") === "form" && this.model.get("formula")) { + this.onFormula(); + } + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='text']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.$el.find(".content-print").text(this.getText()); + this.tagControl = this.$el.find("input[type='text']"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + this.onTextTransform(this.tagControl.val()); + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Gets label of data + * @returns {null} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Gets value of data + * @returns {*} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Gets HTML control + * @returns {*} + */ + getControl: function () { + return this.$el.find(":input:not([type=hidden])") //hidden is not considered + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @param {*} fn + * @param {*} val + * @returns {TextView} + */ + updateView: function (fn, val) { + var dt = { + value: "", + label: "" + } + this.form.model.set("rootField", this.model); + dt = this.updateFieldView(val); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.validate(); + return this; + }, + /** + * Update the field view :: if exist val, the execution comes from helper + * @param {*} val + * @returns {*} + */ + updateFieldView: function (val) { // ATTENTION:: With any change verify the fix with helpers, change input, the hidden update and the textTransform method + var textInput = this.getControl(), + hiddenInput = this.$el.find("input[type='hidden']"); + if (!val) { + // The execution comes from change in input + val = textInput.val(); + } + this.onTextTransform(val); + hiddenInput.val(val); + this.$el.find(".content-print").text(textInput.val()); + this.clicked = false; + return { + value: val, + label: val + } + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @returns {TextView} + */ + changeInputEvent: function (event, value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + }); + return this; + }, + /** + * When the source of change is a helper + * @param {*} value + * @param {*} fn + * @returns {TextView} + */ + changeHelperEvent: function (value, fn) { + var dt, that = this; + this.tagControl.val(value); + dt = this.updateView(function () { + that.executeChangeCallback(); + if (_.isFunction(fn)) { + fn(); + } + }, value); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + dependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate").error && this.model.get("dependencyDidUpdate").error !== "abort") { + this.showQueryFailMessage(); + } + this.onFieldAssociatedHandler(); + this.switchSpinnerByControl(); + }, + /** + * Executes onChangeCallBack function + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + if (this.model.get("group") === "grid" && this.onChangeCallbackOperation) { + if (typeof this.onChangeCallbackOperation === "function") { + this.onChangeCallbackOperation(); + } + } + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + this.onFieldAssociatedHandler(); + }, + /** + * Helper SetValueAsync + * @param {*} value + * @param {*} fn + * @returns {TextView} + */ + setValueAsync: function (value, fn) { + var that = this, + currentValue = this.model.get("data").value; + if (value !== undefined && currentValue.toString() !== value.toString()) { + this.previousValue = currentValue; + that.changeHelperEvent(value, fn); + } + return this; + }, + /** + * Helper Set Text in Async mode + * @param {*} value + * @param {*} fn + * @returns {TextView} + */ + setTextAsync: function (value, fn) { + var that = this, + currentValue = this.model.get("data").value; + if (value !== undefined) { + this.previousValue = currentValue; + that.changeHelperEvent(value, fn); + } + return this; + }, + /** + * Helper setValue + * @param {*} value + * @returns {TextView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Helper setText + * @param {*} txt + * @returns {TextView} + */ + setText: function (txt) { + this.setValue(txt); + return this; + }, + /** + * Suscribe listeners to field + * @param {*} e + * @param {*} fn + * @returns {TextView} + */ + on: function (e, fn) { + var that = this, + control, + localEvents = { + "changeValues": "setOnChangeCallbackOperation" + }; + if (localEvents[e]) { + this[localEvents[e]](fn); + } else { + control = this.$el.find("input"); + if (control) { + control.on(e, function (event) { + fn(event, that); + event.stopPropagation(); + }); + } else { + throw new Error("Is not possible find the HTMLElement associated to field"); + } + } + return this; + }, + /** + * Updates the values in the inputs controls nodes + * @returns {TextView} + */ + updateValueInput: function () { + var currentLabel = this.getText(), + textInput = this.getControl(), + hiddenInput = this.$el.find("input[type='hidden']"); + textInput.val(currentLabel); + hiddenInput.val(currentLabel); + return this; + }, + /** + * Sets onChangeCallbackOperation this is used in functions (SUM, AVG) + * @param fn {function} + * @returns {TextView} + */ + setOnChangeCallbackOperation: function (fn) { + if (typeof fn === "function") { + this.onChangeCallbackOperation = fn; + } + return this; + }, + /** + * SetValue, get Remote options, update the view and model but not trigger the dependencies without execute onchangecallbacks + * @param {*} value + * @param {*} fn + * @return {TextView} + */ + setValueWithoutTriggerDependencies: function (value, fn) { + var that = this, + dataOption, + criteria = "value"; + if (value !== undefined && value !== null) { + this.model.getRemoteOptions(function (data, err) { + dataOption = that.model.findOption(value, criteria); + if (dataOption) { + that.updateFieldView(dataOption.value); + } else { + that.model.setFirstOptionInData(); + } + if (_.isFunction(fn)) { + fn(); + } + }); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.TextR", TextView); +}()); + +(function () { + var File = PMDynaform.view.Field.extend({ + item: null, + isIE: false, + template: _.template($("#tpl-file").html()), + filesLength: 0, + events: { + "click .pmdynaform-file-container .form-control": "onClickButton" + }, + /** + * Default function + */ + onChange: function () { + }, + initialize: function (options) { + var auxiliarValue = this.getText(); + this.form = options.form ? options.form : null; + this.model.addLabelToStack(auxiliarValue.length > 0 ? auxiliarValue[0] : ""); + if (_.isArray(this.model.get("value"))) { + this.filesLength = this.model.get("value").length; + } + if (!this.model.get("cleaned")) { + this.model.on("change:data", this.render, this); + } + }, + onClickButton: function (event) { + if (!PMDynaform.core.ProjectMobile) { + this.$el.find("input").trigger("click"); + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + /** + * Sets the callback onChange function + * @param callback + */ + setOnChange: function (callback) { + if (_.isFunction(callback)) { + this.onChange = callback; + } + return this; + }, + render: function () { + var that = this, + hidden, + nameDefault = this.model.get("name"), + name, + fileButton, + title = 'Allowed file extensions: '.translate() + this.model.get('extensions'), + link, + i, + data = this.model.get("data"), + label = data.label; + + this.$el.html(this.template(this.model.toJSON())); + fileButton = that.$el.find("button[type='button']"); + + if (PMDynaform.core.ProjectMobile) { + fileButton.attr("disabled", "disabled"); + } + link = this.$el.find("a.pmdynaform-control-file"); + fileButton.text(title); + fileButton[0].title = title; + hidden = this.$el.find("input[type='hidden']"); + + if (this.model.get("hint")) { + this.enableTooltip(); + } + + if (link.length > 0 && label.length > 0) { + for (i = 0; i < label.length; i += 1) { + link.children()[i].title = label[i]; + } + } + $(hidden).val(JSON.stringify(label)); + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = nameDefault.substring(0, nameDefault.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + hidden.value = this.model.get("value"); + } + if (nameDefault.trim().length === 0) { + this.$el.find("input[type='file']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.eventChangeFile(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + this.$el.find(".content-print").text(this.model.get("data")["label"]); + return this; + }, + /** + * Get File Type + * @param file + * @returns {{type: *, fileTarget: *}} + */ + getFileType: function (file) { + var type, + fileTarget; + if (file.files) { + if (file.files[0]) { + type = file.files[0].name.substring(file.files[0].name.lastIndexOf(".") + 1); + fileTarget = file.files[0].name; + } + } else { + if (file.value.trim().length) { + type = file.value.split("\\")[2].substring(file.value.split("\\")[2].lastIndexOf(".") + 1); + fileTarget = file.value; + } + } + return { + type: type, + fileTarget: fileTarget + } + }, + /** + * Check File + * @param file + * @returns {boolean} + */ + isValid: function (file) { + var validated = false, + maxSize, + type, + that = this, + errorType = {}, + extensions = this.model.get("extensions"), + getType = that.getFileType(file), + validatorModel = this.model.get('validator'), + tagFile = this.$el.find("input[type='file']")[0], + fileButton = that.$el.find("button[type='button']"), + title = 'Allowed file extensions: '.translate() + extensions, + maxSizeInt = parseInt(this.model.get("size"), 10), + sizeUnity = this.model.get("sizeUnity"); + + extensions = _.isString(extensions) ? extensions.toLowerCase() : ""; + type = (_.isObject(getType) && _.isString(getType.type)) ? getType.type.toLowerCase() : ""; + + if (this.model.get("sizeUnity").toLowerCase() !== "kb") { + maxSize = maxSizeInt * 1024; + } else { + maxSize = maxSizeInt; + } + if (extensions === "*" || extensions === ".*") { + validated = true; + } else { + if (extensions.indexOf(type) > -1) { + validated = true; + } else { + errorType = { + type: 'support', + message: 'The file extension is not supported. Supported extension(s): ' + + extensions + }; + validatorModel.set('fileOnly', errorType); + fileButton.text(title); + fileButton[0].title = title; + validated = false; + } + } + if (validated && file.files) { + if (file.files[0] && (file.files[0].size / 1024 <= maxSize)) { + validated = true + } else { + errorType = { + type: 'size', + message: "The file size exceeds the limit. Max allowed limit is: ".translate() + maxSizeInt + sizeUnity + }; + validatorModel.set('fileOnly', errorType); + fileButton.text(title); + fileButton[0].title = title; + validated = false; + } + } + if (validated) { + validatorModel.set('fileOnly', null); + this.updateValue(file.value); + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + this.$el.removeClass('has-warning has-feedback'); + } + } else { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + this.$el.removeClass('has-warning has-feedback'); + } + if (!this.model.isValid() && validatorModel.get('fileOnly') !== null) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + $(tagFile).prev().append(this.validator.el); + if (this.model.get('validator').get('fileOnly')) { + this.applyStyleWarning(); + this.validator.$el.children().removeClass('alert'); + this.validator.$el.children().addClass('warning'); + } + validatorModel.set('fileOnly', null); + this.model.set({value: []}, {silent: true}); + } + } + return validated; + }, + /** + * Validate Field File + * @param e + * @returns {boolean} + */ + validate: function (e) { + var tagFile = this.$el.find("input[type='file']")[0], + validated = true; + if (this.model.get("mode") == "view" || this.model.get("mode") == "disabled") { + return true; + } + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + this.$el.removeClass('has-warning has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + $(tagFile).prev().append(this.validator.el); + this.applyStyleError(); + this.model.get('validator').get('fileOnly', null); + validated = false; + this.model.attributes.valid = false; + } else { + validated = true; + this.model.attributes.valid = true; + } + } else { + this.model.attributes.valid = true; + } + return validated; + }, + /** + * Event change listener for update data file + * @returns {File} + */ + eventChangeFile: function () { + var that = this, + fileControl = this.$el.find("input[type='file']"), + file; + if (fileControl) { + fileControl.on("change", function (event) { + file = event.target; + if (file.value && that.isValid(file)) { + that.changeFile(file.files); + } + }); + } + return this; + }, + /** + * Change File and update data + * @param files + */ + changeFile: function (files) { + var nameFileLoad = "", + index = 0; + if (files && files.length > 0) { + nameFileLoad = files[index] ? files[index].name : nameFileLoad; + } + this.updateValueButton(nameFileLoad); + this.model.addLabelToStack(nameFileLoad); + this.updateHidden(nameFileLoad); + this.checkBinding(); + }, + /** + * Update Text Button + * @param nameFileLoad + * @returns {File} + */ + updateValueButton: function (nameFileLoad) { + var index = 0, + fileButton = this.$el.find("button[type='button']"); + if (_.isObject(fileButton) && !_.isEmpty(fileButton)) { + fileButton.text(nameFileLoad); + fileButton[index].title = nameFileLoad; + } + return this; + }, + /** + * Update Hidden Value + * @returns {File} + */ + updateHidden: function (nameFileLoad) { + var hidden, + nameFile = "[]", + id; + if (this.model.get("group") === "form") { + id = "form[" + this.model.get("name") + "_label]"; + hidden = this.$el.find("input[type='hidden'][id='" + id + "']"); + if (hidden) { + nameFile = "[" + '"' + nameFileLoad + '"' + "]"; + $(hidden).val(nameFile); + } + } + return this; + }, + /** + * Updates the values of the value of the model + * @param {string} pathFile the new path to update + * @return {this} + */ + updateValue: function (pathFile) { + var value = this.model.get("value"); + if (pathFile && _.isArray(value)) { + value.push(pathFile); + if (value.length === this.filesLength + 1) { + this.model.attributes.value = value; + } else { + value.splice(this.filesLength, 1); + this.model.attributes.value = value; + } + } + return this; + }, + /** + * Gets Text File + * @returns {null} + */ + getText: function () { + return this.model.getText(); + }, + /** + * Gets Value File + * @returns {*} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Gets Html Control of the File + * @returns {*} + */ + getControl: function () { + var htmlControl = this.$el.find("button").eq(0); + return htmlControl; + }, + /** + * Clear Content File + * @returns {File} + */ + clearContent: function () { + var controlFileHtml = this.$el.find(".pmdynaform-field-file"), + valueControlFile = this.model.getValue(), + appDocUID = this.model.getAppDocUID(), + name; + appDocUID = _.isArray(appDocUID) && !_.isEmpty(appDocUID) ? appDocUID[0] : null; + if (valueControlFile && controlFileHtml && controlFileHtml.length > 0 && this.model.get("mode") !== "view") { + name = this.createNameForHidden(); + this.model.clearContent(); + this.clearDomFile(); + if (appDocUID) { + this.appendHiddenInput(name, appDocUID); + } + this.model.clearStackLabels(); + } + return this; + }, + /** + * Clear DOM File Control + */ + clearDomFile: function () { + var extension = this.model.get('extensions'), + text = 'Allowed file extensions: '.translate() + extension; + this.$el.find("input[type=file]").val(""); + this.$el.find("input[type=hidden]").val("[]"); + this.$el.find("button").text(text); + this.$el.find("button").prop("title", text); + }, + /** + * Append Hidden Fields + * @param name + * @param appDocUid + */ + appendHiddenInput: function (name, appDocUid) { + var hiddenDocUid = [], + hiddenVersion = [], + inputType = "hidden", + versionDefault = "1"; + hiddenDocUid = $("", { + name: name + "[appDocUid]", + type: inputType, + value: appDocUid + }); + hiddenVersion = $("", { + name: name + "[version]", + type: inputType, + value: versionDefault + }); + this.$el.append(hiddenDocUid); + this.$el.append(hiddenVersion); + }, + /** + * Create Name for Files Deleted + * @returns {string|*} + */ + createNameForHidden: function () { + var varName = "form[__VARIABLE_DOCUMENT_DELETE__]", + idFile; + idFile = this.model.get("id"); + varName = varName + "[" + idFile + "]"; + return varName; + }, + /** + * Executes onChange function + */ + checkBinding: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.model.getCurrentNameFile(), + previous: this.model.getPreviousNameFile() + }; + if (paramsValue.current !== paramsValue.previous) { + this.onChange(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + } + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.File", File); +}()); + +(function () { + var CheckGroupView = PMDynaform.view.Field.extend({ + item: null, + template: _.template($("#tpl-checkgroup").html()), + templateOptions: _.template($("#tpl-checkgroup-options").html()), + previousValue: null, + firstLoad: false, + /** + * @param {boolean} existHTML: If html exists the value changes to true + */ + existHTML: false, + events: { + "change input": "changeSelectEvent", + "keydown input": "preventEvents" + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallback function + * @param fn {function} + * @returns {CheckGroupView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + this.form = options.form ? options.form : null; + this.model.on("change:options", this.redrawOptions, this); + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + }, + /** + * Stop the propagation events + * @param {*} event + * @returns {CheckGroupView} + */ + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + /** + * Render the field view + * @returns {CheckGroupView} + */ + render: function () { + var hidden, + name; + this.existHTML = true; + this.$el.html(this.template(this.model.toJSON())); + this.$el.find(".form-control").css({ + height: "auto" + }); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + this.setValueToDomain(); + this.$el.find("input[type='hidden']")[0].name = "form[" + this.model.get("name") + "_label]"; + this.setValueHideControl(); + this.previousValue = this.model.get("data").value; + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='checkbox']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.tagControl = this.$el.find(".pmdynaform-checkbox-items"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Update accessibility HTML attributes + * @param {Object} params + * @chainable + */ + updateAccessibility: function (params) { + var i; + if (this.model.get("ariaLabelVisible")) { + this.$el.find("input[type='checkbox']").removeAttr("aria-label"); + for (i = 0; i < params.data.values.length; i += 1) { + this.$el.find("input[type='checkbox'][value='" + PMDynaform.escapeSelector(params.data.labels[i]) + "']").attr("aria-label", params.data.labels[i]); + } + } + return this; + }, + /** + * Return the array of options checked + * @returns {*} + */ + getDataChecked: function () { + var dataChecked = { + values: [], + labels: [] + }, + checkedControls = this.$el.find("input[type='checkbox']:checked"); + checkedControls.each(function (index, element) { + dataChecked.values.push(element.value); + dataChecked.labels.push($(element).next().text()); + }); + return dataChecked; + }, + /** + * Verify if exist a check in options + * @param {*} item + * @returns {boolean} + */ + checkValueInOptions: function (item) { + var options, + i; + options = this.model.get("options"); + for (i = 0; i < options.length; i += 1) { + if (options[i]["value"] === item) { + return { + value: options[i]["value"], + label: options[i]["label"], + index: i + } + } + } + return false; + }, + /** + * Gets the html control using its class identifier + * @returns {Object} + */ + getHTMLControl: function () { + return this.$el.find(".pmdynaform-control-checkbox-list"); + }, + /** + * Update the input hidden + * @returns {CheckGroupView} + */ + setValueHideControl: function () { + var control; + control = this.$el.find("input[type='hidden']"); + $(control).val(this.model.get("data").label); + return this; + }, + /** + * Helper get Text + * @returns {*} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Helper getValue + * @returns {array} + */ + getValue: function () { + return this.model.get("data").value; + }, + /** + * Return the control html object + * @returns {*} + */ + getControl: function () { + var htmlControl = this.$el.find("input[type='checkbox']"); + return htmlControl; + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @returns {CheckGroupView} + */ + changeSelectEvent: function (event, value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + that.validate(); + }); + return this; + }, + /** + * When the source of change is a helper + * @param {*} value + * @param {*} fn + * @returns {CheckGroupView} + */ + changeHelperEvent: function (value, fn) { + var that = this; + this.updateView(function () { + that.executeChangeCallback(); + if (_.isFunction(fn)) { + fn(); + } + }, value); + return this; + }, + /** + * Execute the onChangeCallback after the executes de dependencies + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: JSON.stringify(this.model.get("data").value), + previous: JSON.stringify(this.previousValue) + }; + + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(this.model.get("data").value, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.model.get("data").value; + } + }, + /** + * Populate Checkgroup in print mode + * @param arrayItems + */ + populateItemsPrintMode: function (arrayItems) { + var i, + max, + containerPrint = this.$el.find(".content-print"); + containerPrint.empty(); + for (i = 0, max = arrayItems.length; i < max; i += 1) { + containerPrint.append("
  • " + arrayItems[i] + "
  • "); + } + + }, + /** + * Render options from model + * @returns {CheckGroupView} + */ + renderOptions: function () { + var htmlOptions, + contendControl, + config; + contendControl = this.$el.find(".pmdynaform-checkbox-items"); + contendControl.empty(); + + if (_.isArray(this.model.get("options"))) { + config = { + name: this.model.get("name"), + id: this.model.get("id"), + type: "checkbox", + namespace: this.model.get("namespace"), + disabled: this.model.get("disabled"), + options: this.model.get("options") + }; + htmlOptions = this.templateOptions(config); + contendControl.append(htmlOptions); + } + return this; + }, + /** + * redrawOptions, Draw component options + * @chainable + */ + redrawOptions: function () { + if (this.existHTML) { + this.renderOptions(); + } + return this; + }, + /** + * Method for validate the model and update the view with validators + * @returns {CheckGroupView} + */ + validate: function () { + this.model.set({ value: this.model.get("data").value }, { validate: true }); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".pmdynaform-control-checkbox-list").parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * method UPDATE very IMPORTANT + * Update only view of checkgroup + * @param {function} fn + * @param {string} value + * @returns {CheckGroupView} + */ + updateView: function (fn, value) { + var dt = { + value: "", + label: "" + } + dt = this.updateFieldView(value); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.validate(); + return this; + }, + /** + * Method for update the view in this field and return the data to update the model + * @param {*} values + * @returns {*} + */ + updateFieldView: function (values) { + var i, + dataChecked = { + values: [], + labels: [] + }, + item, + elements, + data, + inputsTag; + + if (values && _.isArray(values)) { + inputsTag = this.$el.find("input[type='checkbox']"); + inputsTag.attr("checked", false); + elements = this.$el.find("input[type='checkbox']"); + for (i = 0; i < values.length; i += 1) { + item = values[i]; + data = this.checkValueInOptions(item); + if (data) { + elements[data["index"]].checked = true; + dataChecked.values.push(data['value']); + dataChecked.labels.push(data['label']); + } + } + } else { + dataChecked = this.getDataChecked(); + } + this.updateAccessibility({ data: dataChecked }); + this.populateItemsPrintMode(this.getKeyLabels()); + this.$el.find("input[type='hidden']").val(JSON.stringify(dataChecked.labels)); + return { + value: dataChecked.values, + label: JSON.stringify(dataChecked.labels) + }; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + */ + dependencyDidUpdateView: function () { + this.validate(); + }, + /** + * Sets value and update previousValue + * @param value + * @returns {CheckGroupView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Sets value and update previousValue + * @param value + * @param callback + * @returns {CheckGroupView} + */ + setValueAsync: function (value, fn) { + if (value && $.isArray(value)) { + this.previousValue = this.getValue(); + this.changeHelperEvent(value, fn); + this.switchSpinnerByControl(); + } + return this; + }, + /** + * Set text + * @param txt + * @param fn + * @returns {CheckGroupView} + */ + setTextAsync: function (txt, fn) { + var options = this.model.get("options"), + arrayDataValue = [], arrayDataLabel = []; + for (i = 0; i < options.length; i += 1) { + options[i].selected = false; + if (txt.indexOf(options[i].label) > -1) { + options[i].selected = true; + arrayDataLabel.push(options[i].label); + arrayDataValue.push(options[i].value); + } + } + data = { + value: arrayDataValue, + label: arrayDataLabel + }; + this.setValueAsync(data["value"], fn); + return this; + }, + /** + * Return an array with the items selected. + * @returns {Array} + */ + getKeyLabels: function () { + var i, + j, + arrayItems = [], + values = this.getDataChecked().values, + options = this.model.get("options"); + for (i = 0; i < options.length; i += 1) { + for (j = 0; j < values.length; j += 1) { + if (values[j] === options[i].value) { + arrayItems.push(options[i].label); + } + } + } + return arrayItems; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.CheckGroupR", CheckGroupView); +}()); + +(function () { + var CheckBoxView = PMDynaform.view.Field.extend({ + item: null, + template: _.template($("#tpl-checkbox_yes_no").html()), + templateView: _.template($("#tpl-checkbox_view_mode").html()), + previousValue: null, + /** + * This property is a handler the events + * change input: when the change the control input type checkbox is fired the method handler event Listener + */ + events: { + "change input": "eventListener", + "keydown input": "preventEvents" + }, + firstLoad: false, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallback function + * @param fn + * @returns {CheckBoxView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + this.form = options.form ? options.form : null; + this.previousValue = this.getValue(); + this.model.on("change:value", this.eventListener, this); + this.model.on("change:toDraw", this.render, this); + }, + /** + * Listens to change event + * @param event + * @param value + */ + eventListener: function (event, value) { + this.onChange(event, value); + this.checkBinding(); + }, + /** + * Executes onChangeCallback function + * @returns {CheckBoxView} + */ + checkBinding: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: JSON.stringify(this.getValue()), + previous: JSON.stringify(this.previousValue) + }; + + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + }, + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + render: function () { + var hidden, + name; + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + this.setValueToDomain(); + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + } else { + this.$el.find("input[type='hidden']")[0].name = "form[" + this.model.get("name") + "_label]"; + } + if (this.model.get("options").length) { + this.$el.find("input[type='checkbox']").eq(0).data({ + value: this.model.get("options")[0]["value"], + label: this.model.get("options")[0]["label"] + }); + this.$el.find("input[type='checkbox']").eq(1).data({ + value: this.model.get("options")[1]["value"], + label: this.model.get("options")[1]["label"] + }); + } + this.setValueHideControl(); + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='checkbox']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.updateAccessibility({ ariaLabel: this.model.get("data")["label"] }); + this.$el.find(".content-print").text(this.model.get("data")["label"]); + this.tagControl = this.$el.find(".pmdynaform-checkbox-items"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.keyLabelControl = this.$el.find("input[type='hidden']"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Render checkbox only, it's works in grid mobile + */ + renderView: function () { + this.$el.html(this.templateView(this.model.toJSON())); + }, + /** + * Update accessibility HTML attributes + * @param {Object} params + * @chainable + */ + updateAccessibility: function (params) { + // for accessibilty arial label + if (this.model.get("ariaLabelVisible") && this.model.get("value") === "1") { + this.$el.find("input[type='checkbox']").eq(0).attr("aria-label", params.ariaLabel); + } else { + this.$el.find("input[type='checkbox']").eq(0).removeAttr("aria-label"); + } + return this; + }, + validate: function () { + this.model.set({}, { validate: true }); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".pmdynaform-control-checkbox-list").parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + /** + * This method is fired when the property value is changed + * @param event: is the event target tag + * @param value: is the change model when use set method + */ + onChange: function (event, value) { + this.updateValues(event, value); + if (!this.firstLoad) { + this.validate(); + } + return this; + }, + /** + * Gets the html control using its class identifier + * @returns {Object} + */ + getHTMLControl: function () { + return this.$el.find(".pmdynaform-control-checkbox-list"); + }, + setValueHideControl: function () { + var control; + control = this.$el.find("input[type='hidden']"); + if (this.model.get("dataType") === "boolean") { + $(control).val(this.model.get("data")["label"].toString()); + } else { + try { + $(control).val(JSON.stringify(this.model.get("data")["label"])); + } catch (e) { + console.error(e); + } + } + return this; + }, + updateValues: function (event, value) { + var controlHtml = this.$el.find("input[type='checkbox']"), + firstCheckbox = controlHtml.eq(0), + secondCheckbox = controlHtml.eq(1), + newValue = "0", + valuesForTrue = [1, true, "1", "true"], + data; + if (!value) { + if (firstCheckbox.prop("checked")) { + secondCheckbox.prop("checked", false); + newValue = "1"; + } else { + secondCheckbox.prop("checked", true); + newValue = "0"; + } + this.model.set({ value: newValue }, { silent: true }); + } else { + newValue = value; + if (valuesForTrue.indexOf(newValue) !== -1) { + firstCheckbox.prop("checked", true); + secondCheckbox.prop("checked", false); + } else { + firstCheckbox.prop("checked", false); + secondCheckbox.prop("checked", true); + } + } + this.updateDataModel(newValue); + data = this.model.get("data"); + firstCheckbox.val(data.value); + this.updateAccessibility({ ariaLabel: data.label }); + this.$el.find(".content-print").text(data.label); + this.$el.find("input[type='hidden']").val(data.label); + return this; + }, + /** + * Update data of checkbox model + * @param value + * @returns {CheckBoxView} + */ + updateDataModel: function (value) { + this.model.setData(value); + return this; + }, + /** + * Call to setValue of Model + * @param value + * @returns {CheckBoxView} + */ + setValue: function (value) { + this.previousValue = this.getValue(); + this.model.setValue(value); + this.firstLoad = false; + return this; + }, + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + getValue: function () { + return this.model.getValue(); + }, + getControl: function () { + var htmlControl = this.$el.find("input[type='checkbox']"); + return htmlControl; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.CheckBox", CheckBoxView); +}()); + +(function () { + var SuggestView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-suggest2").html()), + templateViewMode: _.template($("#tpl-label-extension").html()), + validator: null, + input: null, + makeFlag: false, + keyPressed: false, + pointerItem: 0, + orientation: "under", + stackItems: [], + stackRow: 0, + clicked: false, + firstLoad: true, + dirty: false, + jsonData: {}, + previousValue: "", + previousLabel: "", + prevValueprevValue: "", + prevValue: "", + numberOfOptions: 10, + containerOpened: false, + events: { + 'change': function (event) { + this.changeSuggestEvent(this.getDataSelect2('change')); + } + }, + stamp: null, + /** + * @param {Number} timeToWait - is the timer required to trigger an action data request + * if the value is 0, does not perform cancellation requests, if the value is not 0, + * this will be the time to waiting before making a request + */ + timeToWait: 0, + timeoutHandler: null, + xhr: null, + remoteOptions: [], + scrollTop: 0, + controlSuggest: null, + showVisibleElements: 5, + heightItem: 40, + /** + * @param {Array} - navigationKeys are valid navigation keys for selecting an item from the list + */ + navigationKeys: [38, 40, 13], + /** + * @param {Array} invalidEnterKeys - is the list of keyboard events captured incorrect not to execute queries + */ + invalidEnterKeys: [16, 17, 18, 20, 37, 39, 9], + /** + * This method is called for cancellation of writing board per share + * when the value of "timeToWait" is 0 this method is not call + * @private + */ + selectedListItem: null, + iconLoadingActive: true, + keyNavigatorPress: false, + /** + * Abort the xhr jquery + */ + _abortRequest: function () { + if (this.xhr) { + this.xhr.abort(); + } + clearTimeout(this.timeoutHandler); + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets onChangeCallback function + * @param fn {function} + * @returns {SuggestView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + var defaultLimit = 10; + this.form = options.form ? options.form : null; + this.formulaFieldsAssociated = []; + this.numberOfOptions = parseInt(this.model.get('resultsLimit')) || defaultLimit; + this.setTimeToWait(parseInt(this.model.get("delay"))); + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + }, + /** + * Get ID Select2 Control + * @returns {string} + */ + getIdSelect: function () { + return '#' + this.$el.find('select').attr('id').replace(/(:|\.|\[|\]|,|=|@)/g, "\\$1"); + }, + /** + * set the time to wait + * @param time + * @returns {boolean} + */ + setTimeToWait: function (time) { + if (!isNaN(time)) { + this.timeToWait = time; + } + return this; + }, + /** + * Updates value dom + * @returns {SuggestView} + */ + updateValueInput: function () { + var textInput, + hiddenInput; + textInput = this.$el.find("input[type='suggest']"); + hiddenInput = this.$el.find("input[type='hidden']"); + if (this.model.get("data")) { + textInput.val(this.model.get("data")["label"]); + hiddenInput.val(this.model.get("data")["value"]); + } + return this; + }, + /** + * Update the Hidden Input + * @param data + * @returns {SuggestView} + */ + updateHiddenInput: function (data) { + var hiddenInput = this.$el.find("input[type='hidden']"); + hiddenInput.val(data.label); + return this; + }, + /** + * Validate the model and validator views + * @param event + * @returns {SuggestView} + */ + validate: function (event) { + if (event && (event.which === 9) && (event.which !== 0)) { //tab key + this.keyPressed = true; + } + this.model.attributes.validator.set("valid", true); + this.model.validate(this.model.toJSON()); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error has-feedback'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find("select").parent().parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + /** + * Show the Suggest control + * @returns {SuggestView} + */ + render: function () { + var self = this; + if (this.model.get("mode") == "view") { + this.renderViewMode(); + } else { + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get('hint') !== '') { + this.enableTooltip(); + } + this.setNameHiddenControl(); + setTimeout(function () { + if (self.model.get('project')) { + $(self.getIdSelect()).select2(self.initializeSelect2Query()); + self.afterRenderSelect2(); + } + }, 0); + this.model.set({ "toDraw": false }, { silent: true }); + } + return this; + }, + /** + * Render the field in view Mode + */ + renderViewMode: function () { + this.$el.html(this.templateViewMode(this.model.toJSON())); + if (this.model.get('hint') !== '') { + this.enableTooltip(); + } + this.setNameHiddenControl(); + this.model.set({ "toDraw": false }, { silent: true }); + }, + /** + * Initialize select2 Query + * @returns {Object} + */ + initializeSelect2Query: function () { + var prj, + options, + variable, + uidModal = (this.model.get('nameModalSuggest')) ? $('#' + this.model.get('nameModalSuggest')) : null, + data = this.model.buildDataForQuery({}); + prj = this.model.get("project"); + if (this.model.get("group") === "grid") { + variable = this.model.get("columnName"); + } else { + if (this.model.get("variable") !== "") { + variable = this.model.get("variable"); + } else { + variable = this.model.get("id"); + } + } + return prj.webServiceManager.executeSuggestSelect2(data, variable, uidModal, this); + }, + /** + * Set in the control suggest the Data of the Case Data + * @returns {SuggestView} + */ + afterRenderSelect2: function () { + var data = this.model.get('data'), + id = this.getIdSelect(), + newOption; + this.previousValue = data.value || ''; + this.previousLabel = data.label || ''; + if (data.value !== '' && data.label !== '') { + if ($(id).find("option[value='" + data.value + "']").length) { + $(id).val(data.value); + } else { + this.setOption(data); + } + } + this.firstLoad = false; + this.$el.find(".content-print").text(this.previousLabel); + this.$el.find(".select2.select2-container").attr("aria-label", this.model.get("ariaLabel")); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Execute the executeSuggest query from Helpers + * @param data + * @param callback + * @returns {SuggestView} + */ + executeSelect2Query: function (data, callback) { + var dt, that = this; + this.model.executeQuery(data, function (response, err) { + if (response) { + dt = that.afterExecuteQuery(response, data); + that.updateViewFromHelper(function () { + that.executeChangeCallback(); + if (_.isFunction(callback)) { + callback(response); + } + }, dt); + } + }); + return this; + }, + /** + * Deselect the items in DOM html + * @returns {SuggestView} + */ + deselectItems: function () { + if (this.containerOpened) { + this.containerList.find("li").removeClass("pmdynaform-suggest-list-keyboard"); + } + return this; + }, + /** + * Return the html control + * @returns {*} + */ + getHTMLControl: function () { + return this.$el.find("input[type='suggest']"); + }, + /** + * Abstract method + * @returns {SuggestView} + */ + afterRender: function () { + return this; + }, + /** + * Update the name in hidden associated + * @returns {SuggestView} + */ + setNameHiddenControl: function () { + var hidden, + name; + if (this.el) { + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = "form" + name; + hidden.id = "form" + name; + } + } + return this; + }, + /** + * Set text + * @param value + * @returns {SuggestView} + */ + setText: function (value) { + if (value !== undefined && this.model.get("mode") !== "disabled") { + this.form.model.set("isSync", true); + this.executeSelect2Query({ + value: value, + typeSearch: 'text', + callback: this.afterExecuteQuery + }); + this.form.model.set("isSync", false); + } + return this; + }, + /** + * Set text async mode + * @param value + * @param fn + * @returns {SuggestView} + */ + setTextAsync: function (value, fn) { + if (value) { + this.executeSelect2Query({ + value: value, + typeSearch: 'text' + }, fn); + } + return this; + }, + /** + * Sets value in view + * @param value {string} + * @returns {SuggestView} + */ + setValue: function (value) { + this.form.model.set("isSync", true); + this.setValueAsync(value, null); + this.form.model.set("isSync", false); + return this; + }, + /** + * Sets value Async and updates previousValue + * @param value {string} + * @param fn {function} + * @returns {SuggestView} + */ + setValueAsync: function (value, fn) { + if (value !== undefined && this.model.get("mode") !== "disabled") { + this.previousValue = this.getValue(); + this.executeSelect2Query({ + value: value, + typeSearch: 'val' + }, fn); + } + return this; + }, + /** + * Callback executed after the server returns a response + * @param response + * @param xhr + * @param options + * @returns {SuggestView} + */ + afterExecuteQuery: function (response, options) { + var option = this._findOption(response, options.typeSearch, options.value), + id, + data; + data = this._forceSelectionIsConfigurated(option, options); + data = { + value: data.id, + label: data.text + }; + this.updateHiddenInput(data); + if (this.model.get("mode") != "view") { + id = this.getIdSelect(); + this.setOption(data); + } else { + this.model.set({ + data: data + }, { silent: true }); + this.model.set({ "toDraw": true }); + } + return data; + }, + /** + * Look up the value and the text + * @param response + * @param typeSearch + * @param value + * @returns {*} + * @private + */ + _findOption: function (response, typeSearch, value) { + var newOpt, + dataMerge = response.concat(this.model.get('options')); + if (typeSearch === 'text') { + //if the setText helper is executed + newOpt = _.find(dataMerge, function (item) { + var text = item.label || item.text; + return text.toUpperCase() === value.toUpperCase(); + }); + } else { + //if the setValue helper is executed + newOpt = _.find(dataMerge, function (item) { + return item.value.toUpperCase() === value.toUpperCase(); + }); + } + return newOpt; + }, + /** + * If forceSelection is configured + * @param option + * @param value + * @returns {{id: string, text: string}} + * @private + */ + _forceSelectionIsConfigurated: function (option, options) { + var dataOption = { + id: '', + text: '' + }, + value = options.value, + type = options.typeSearch; + if (this.model.get('forceSelection')) { + if (option) { + dataOption.id = option.value; + dataOption.text = option.text || option.label; + } + } else if (type !== "text") { + dataOption.id = (option) ? option.value : value; + dataOption.text = (option) ? option.text || option.label : value; + } else { + dataOption.id = (option) ? option.value : value; + dataOption.text = (option) ? option.text || option.label : value; + } + return dataOption; + }, + /** + * Update data model property + * @param {*} data + * @returns {SuggestView} + */ + setData: function (data) { + var dataObject; + if (typeof data === "object") { + dataObject = { + value: data['value'] !== undefined ? data['value'] : "", + label: data['label'] !== undefined ? data['label'] : "" + }; + this.setValue(data['value']); + this.render(); + } + return this; + }, + /** + * Helper getText + * @returns {*} + */ + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + /** + * Helper getValue + * @returns {*} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * Return the control object html + * @returns {*} + */ + getControl: function () { + return this.$el.find(".select2-selection__rendered"); + }, + /** + * PreparePostData, Prepares the additional data to execute the service to execute the query + * @returns data {object} + */ + preparePostData: function () { + var data; + data = this.jsonData || {}; + if (this.model.get("group") === "grid") { + data["field_id"] = this.model.get("columnName"); + } else { + data["field_id"] = this.model.get("id"); + } + if (this.model.get("form")) { + if (this.model.get("form").get("form")) { + data["dyn_uid"] = this.model.get("form").get("form").get("id"); + } else { + data["dyn_uid"] = this.model.get("form").get("id"); + } + } + return data; + }, + /** + * Get data control suggest + * @param type + * @returns {{label: string, value: string}} + */ + getDataSelect2: function (type) { + var dataSelected, + data, + index = 0, + id = this.getIdSelect(); + + dataSelected = ($(id).data('select2')) ? $(id).select2('data')[index] : null; + data = { + label: dataSelected ? dataSelected.text : '', + value: dataSelected ? dataSelected.id : '' + }; + if (!dataSelected) { + $(id).find("option").remove(); + } + return data; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @param fn + * @param val + * @returns {SuggestView} + */ + updateView: function (fn, val) { + var dt = { + value: "", + label: "" + } + dt = this.updateFieldView(val); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.onFieldAssociatedHandler(); + this.validate(); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @param fn + * @param dt + * @returns {SuggestView} + */ + updateViewFromHelper: function (fn, dt) { + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + this.validate(); + return this; + }, + /** + * Update view method and return a data to update the model + * @param {*} data + * @returns {*} + */ + updateFieldView: function (data) { + var id = this.getIdSelect(), + hiddenInput = this.$el.find("input[type='hidden']"); + //Update hidden input + hiddenInput.val(data.label); + //Update select2 + if (!data.value) { + $(id).val(null); + } + this.$el.find(".content-print").text(data.label); + this.keyNavigatorPress = false; + return data; + }, + /** + * When The select control change value + * @param {*} event + * @param {*} value + * @returns {SuggestView} + */ + changeSuggestEvent: function (value) { + var that = this, dt; + dt = this.updateView(function () { + that.executeChangeCallback(); + }, value); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of text + */ + dependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate").error && this.model.get("dependencyDidUpdate").error !== "abort") { + + } + this.setOption(this.model.get("data")); + this.onFieldAssociatedHandler(); + }, + /** + * Executes onChangeCallBack function + */ + executeChangeCallback: function () { + //If the key is not pressed, executes the render method + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + this.previousLabel = this.getText(); + } + this.onFieldAssociatedHandler(); + }, + /** + * Set option force in suggest + * @param {*} data + */ + setOption: function (data) { + var option = new Option(data.label, data.value, true, true); + $(this.getIdSelect()).empty().append(option); + $(this.getIdSelect()).trigger({ + type: 'change.select2', + params: { + data: { id: data.value, text: data.label } + } + }); + } + + }); + + PMDynaform.extendNamespace("PMDynaform.view.SuggestR", SuggestView); +}()); + +(function () { + var LinkView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-link").html()), + validator: null, + initialize: function (options) { + this.form = options.form ? options.form : null; + this.model.on("change", this.render, this); + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + this.$el.find(".content-print").text(this.model.get("data")["label"]); + this.tagControl = this.tagHiddenToLabel = this.$el.find(".pmdynaform-control-link span"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setText: function (value) { + if (value !== undefined) { + this.model.set("text", value); + } + return this; + }, + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : ""; + }, + updateValues: function (value) { + this.$el.find(".pmdynaform-control-link span").text(value); + this.model.set("data", { + value: value, + label: value + }); + return this; + }, + validationURL: function (url) { + return this.model.validationURL(url); + }, + reformatURL: function (url) { + return this.model.reformatURL(url); + }, + setHref: function (href) { + if (href !== undefined) { + this.model.setHref(href); + } + return this; + }, + setValue: function (value) { + return this.setHref(value); + }, + getValue: function () { + return this.model.getValue(); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Link", LinkView); +}()); + +(function () { + var Label = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-label").html()), + template_showLabels: _.template($("#tpl-label-fullOptions").html()), + validator: null, + singleControl: [], + fieldValid: [], + formulaFieldsAssociated: [], + initialize: function () { + this.formulaFieldsAssociated = []; + this.specialHiddens = ["dropdown", "radio", "suggest", "checkbox", "datetime"]; + this.model.on("change:value", this.eventListener, this); + this.model.on("change:fullOptions", this.updateViewControls, this); + this.model.on("change:toDraw", this.render, this); + this.initLanguage(); + }, + /** + * updateViewControls, redrawing the labels of the component, is call when the fulloptions is change + * @chainable + */ + updateViewControls: function () { + var labelSpan, + valueHidden = this.$el.find(".value-hidden"), + labelHidden = this.$el.find(".label-hidden"), + data = this.model.get("data"), + originalType = this.model.get("originalType"), + formControlContent = this.$el.find(".form-control"); + + labelSpan = this.$el.find(".label-" + originalType); + labelSpan.remove(); + labelSpan = this.template_showLabels({ + originalType: originalType, + fullOptions: this.model.get("fullOptions") + }); + formControlContent.prepend(labelSpan); + this.model.get("fullOptions"); + valueHidden.val(data["value"]); + labelHidden.val(data["label"]); + return this; + }, + eventListener: function (event) { + this.onChange(event); + this.onFieldAssociatedHandler(); + return this; + }, + /** + * On change handler + * @param {Object} event + * @chainable + */ + onChange: function (event) { + var newData, + originalType = this.model.get("originalType"), + data = this.model.get("data"); + switch (originalType) { + case "checkbox": + newData = this.model.getCheckBoxData(data.value); + break; + case "checkgroup": + newData = this.model.getCheckGroupData(data.value); + break; + case "dropdown": + newData = this.model.getDropDownData(data.value); + break; + case "datetime": + newData = this.model.getDateTimeData(data.value); + break; + case "radio": + newData = this.model.getRadioData(data.value); + break; + case "suggest": + newData = this.model.getSuggestData(data.value); + break; + default: + newData = this.model.getTextBoxData(data.value); + break; + } + if (newData["label"] !== undefined && newData["label"] !== null) { + this.model.setFullOptions(newData["label"]); + } + return this; + }, + /** + * Set the default option or first option. + * @returns {Label} + */ + setFirstOption: function () { + var data = this.model.get("data"), + optionsArray = this.model.get("options"), + defaultValue = this.model.get("defaultValue"), + fullOptions = this.model.get("fullOptions"), + optionDefault = data, + auxiliarOption, + index = 0; + if (fullOptions.length && !fullOptions[index]) { + if (_.isArray(optionsArray) && optionsArray.length) { + if (defaultValue) { + auxiliarOption = this.model.findOption(defaultValue, "value"); + optionDefault = { + value: auxiliarOption.value, + label: auxiliarOption.label + }; + } else { + optionDefault = { + value: optionsArray[index].value, + label: optionsArray[index].label + } + } + } + this.model.set({ "data": optionDefault }, { silent: true }); + this.model.set({ "value": optionDefault.value }, { silent: true }); + this.model.set("fullOptions", [optionDefault.label]); + } + return this; + }, + render: function () { + var hidden, name, newDateTime, $textAreaContent, msie; + this.setFirstOption(); + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + if (this.model.get("originalType") === "datetime") { + newDateTime = this.renderDataTimeViewMode(); + } + this.setDataInHiddenControls(this.model.get("originalType")); + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("]"); + hidden.name = hidden.id = "form" + name; + + hidden.name = hidden.id = "form" + name; + hidden = this.$el.find("input[type = 'hidden']")[1]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + } else { + this.onFormula(); + } + this.tagControl = this.$el.find("input[type='hidden']").eq(0); + this.keyLabelControl = this.$el.find("input[type='hidden']").eq(1); + if (newDateTime) { + this.keyLabelControl.val(newDateTime); + this.model.set('keyValue', newDateTime); + } + + $textAreaContent = this.$el.find("span.label-textarea"); + if ($textAreaContent.length) { + $textAreaContent.html(this.model.get('value').replace(/(?:\r\n|\r|\n)/g, "
    ")); + } + // Append Spinner + this.addSpinnerHTML(); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * render datetime field at view mode + * + **/ + renderDataTimeViewMode: function () { + var formatedText = '', data; + data = this.model.get('data'); + if (this.model.get("format") && data['value']) { + formatedText = moment(data['value']).format(this.model.get('format')); + } else { + formatedText = this.model.get("data")['label']; + } + this.$el.find(".label-" + this.model.get("originalType")).text(formatedText); + return formatedText; + }, + setDataInHiddenControls: function (type) { + type = (type && type.trim()) || null; + if (type && this.specialHiddens.indexOf(type) !== -1) { + switch (type) { + case 'suggest': + case 'dropdown': + case 'radio': + case 'datetime': + this.$el.find("input[type='hidden']")[1].value = this.model.get("data")["label"]; + break; + } + this.$el.find("input[type='hidden']")[0].value = this.model.get("data")["value"]; + } + return this; + }, + /** + * Executes formula associated + * @returns {Label} + */ + onFieldAssociatedHandler: function () { + var i, + fieldsAssoc = this.formulaFieldsAssociated; + if (fieldsAssoc.length > 0) { + for (i = 0; i < fieldsAssoc.length; i += 1) { + if (fieldsAssoc[i].model.get("formulator") instanceof PMDynaform.core.Formula) { + this.model.addFormulaTokenAssociated(fieldsAssoc[i].model.get("formulator")); + this.model.updateFormulaValueAssociated(fieldsAssoc[i]); + } + } + } + return this; + }, + setOnChangeCallbackOperation: function (fn) { + if (typeof fn === "function") { + this.onChangeCallbackOperation = fn; + } + return this; + }, + on: function (e, fn) { + var that = this, + control, + localEvents = { + "changeValues": "setOnChangeCallbackOperation" + }; + if (localEvents[e]) { + this[localEvents[e]](fn); + } else { + control = this.$el.find("input"); + if (control) { + control.on(e, function (event) { + fn(event, that); + event.stopPropagation(); + }); + } else { + throw new Error("Is not possible find the HTMLElement associated to field"); + } + } + return this; + }, + /** + * Validates fields supported on formula + * @param fields + * @returns {{}} + */ + checkFieldsValidForFormula: function (fields) { + var validFields = ["text", "label", "dropdown", "suggest", "textarea", "radio"], + responseObject = {}, + itemField, + i; + for (i = 0; i < fields.length; i += 1) { + itemField = fields[i]; + if (validFields.indexOf(itemField.model.get("type")) > -1) { + responseObject[itemField.model.get("id")] = itemField; + } + } + return responseObject; + }, + /** + * Event to process formula + * @param rows + * @returns {Label} + */ + onFormula: function (rows) { + var fieldsList, + that = this, + allFieldsView, + formulaField = this.model.get("formula"), + idFields = {}, + fieldFormula, + fieldAdded = [], + group = this.model.get("group"); + fieldsList = group === "grid" ? rows : this.parent.items; + allFieldsView = (fieldsList instanceof Array) ? fieldsList : fieldsList.asArray(); + idFields = this.checkFieldsValidForFormula(allFieldsView); + fieldFormula = formulaField.replace(/\s/g, '').split(/[\-(,|+*/\)]+/); + if (this.model.get("group") === "grid") { + for (var k = 0; k < rows.length; k += 1) { + if (fieldFormula.indexOf(rows[k].model.get("id")) > -1) { + rows[k].onFieldAssociatedHandler(); + } + } + } + this.fieldValid = fieldFormula.filter(function existElement(element) { + var result = false; + if ((idFields[element] !== undefined) && ($.inArray(element, fieldAdded) === -1)) { + fieldAdded.push(element); + result = true + } + return result; + }); + //Insert the Formula object to fields selected + for (var obj = 0; obj < this.fieldValid.length; obj += 1) { + this.model.addFormulaFieldName(this.fieldValid[obj]); + idFields[this.fieldValid[obj]].formulaFieldsAssociated.push(that); + if (group === "grid") { + if (idFields.hasOwnProperty(this.fieldValid[obj])) { + this.model.attributes.formulaAssociatedObject.push(idFields[this.fieldValid[obj]]); + } + } + } + return this; + }, + getValue: function () { + return this.model.getValue(); + }, + setValue: function (value) { + this.model.setValue(value); + return this; + }, + setText: function (text) { + var originalType = this.model.get("originalType"), + newData; + switch (originalType) { + case "text": + case "textarea": + newData = this.model.getTextBoxData(text); + break; + case "suggest": + newData = this.model.getSuggestData(text); + break; + case "dropdown": + newData = this.setDropdownText(text); + break; + case "checkgroup": + newData = this.setChekgroupTexts(text); + break; + case "checkbox": + newData = this.setCheckboxText(text); + break; + case "radio": + newData = this.setRadioText(text); + break; + case "datetime": + newData = this.model.getDateTimeData(text); + break; + } + if (newData) { + this.model.setNewData(newData); + } + return this; + }, + setRadioText: function (text) { + var data; + data = this.model.findOption(text, "label"); + return data ? data : { label: "", value: "" }; + }, + setDropdownText: function (text) { + var data; + data = this.model.findOption(text, "label"); + return data ? data : { label: "", value: "" }; + }, + setChekgroupTexts: function (texts) { + var data, + resultOptions; + if (_.isArray(texts)) { + resultOptions = this.model.findOptions(texts, "label"); + data = this.model.returnOptionsData(resultOptions); + } + return { + value: data["value"], + label: data["label"] + }; + }, + setCheckboxText: function (text) { + var data; + data = this.model.findOption(text, "label"); + return data ? data : { label: "", value: "" }; + }, + updateTextData: function (data) { + if (data && data.hasOwnProperty("value")) { + this.model.set("data", { + value: data["value"], + label: data["value"] + }); + this.model.set("value", data["value"]); + } else { + this.model.set("value", ""); + this.model.set("data", { value: "", label: "" }); + } + return this; + }, + updateDropdownData: function (data) { + var options = this.model.get("options"); + if (data === null) { + if (options.length > 0) { + data = { + value: options[0].value, + label: options[0].label + } + } else { + data = { + value: "", + label: "" + } + } + } + this.model.setData(data); + return this; + }, + updateCheckgroupData: function (data) { + if (!_.isArray(data['value']) || data['value'].length === 0) { + data = { + value: [], + label: JSON.stringify([]) + } + } + this.model.setData(data); + return this; + }, + updateRadioData: function (data) { + var options = this.model.get("options"); + if (!data) { + data = { + value: "", + label: "" + } + } + this.model.setData(data); + return this; + }, + findDefValueInOptions: function (defVal) { + var data = { + value: "", + label: "" + }, + originalType, + i, + items, + options, + firstOption = 0, + option; + originalType = this.model.get("originalType"); + switch (originalType) { + case 'checkgroup': + items = this.model.findOptions(defVal, "value"); + if (_.isArray(items)) { + data = { + value: [], + label: [] + }; + for (i = 0; i < items.length; i += 1) { + data["value"].push(items[i].value); + data["label"].push(items[i].label); + } + data["label"] = JSON.stringify(data["label"]); + } + break; + case 'radio': + option = this.model.findOption(defVal, "value"); + if (option) { + data = option; + } + break; + case 'text': + case 'textarea': + case 'dropdown': + option = this.model.findOption(defVal, "value"); + if (option) { + data = option; + } else { + options = this.model.get("options"); + if (_.isArray(options) && options.length) { + data = options[firstOption] || data; + } + } + break; + } + return data; + }, + mergeOptions: function (remoteOptions) { + var data, + originalType = this.model.get("originalType") || ""; + if (_.isArray(remoteOptions) && remoteOptions.length) { + this.model.mergeOptions(remoteOptions); + data = this.findDefValueInOptions(this.model.get("defaultValue")); + switch (originalType) { + case "text": + case "textarea": + case "suggest": + this.updateTextData(data); + break; + case "dropdown": + this.updateDropdownData(data) + break; + case "checkgroup": + this.updateCheckgroupData(data); + break; + case "radio": + this.updateRadioData(data); + break; + } + } else { + this.model.set("data", { value: "", label: "" }); + this.model.set("value", ""); + } + return this; + }, + + /** + * Set data and set value + * @param data + * @returns {Label} + */ + setData: function (data) { + var value; + this.model.set("data", data); + if (this.model.get("originalType") === "suggest") { + this.setValue(data); + } else { + this.setValue(data["value"]); + } + return this; + }, + getText: function () { + var data = this.model.get("data"); + return data && data["label"] ? data["label"] : null; + }, + /** + * Gets the html control using its class identifier + * @returns {Object} + */ + getHTMLControl: function () { + return this.$el.find(".pmdynaform-label-options"); + }, + /** + * SetValue, get Remote options, update the view and model but not trigger the dependencies without execute onchangecallbacks + * @param {*} value + * @param {*} fn + * @return {Label} + */ + setValueWithoutTriggerDependencies: function (value, fn) { + var that = this, + dataOption; + if (value !== undefined && value !== null) { + this.model.getRemoteOptions(function (data, err) { + dataOption = that.findDefValueInOptions(value) + if (dataOption) { + that.updateFieldView(dataOption); + } else { + that.model.setFirstOptionInData(); + } + if (_.isFunction(fn)) { + fn(); + } + }); + } + return this; + }, + /** + * Update the field view + * @param {Object} data + * @returns {Label} + */ + updateFieldView: function (data) { + var originalType = this.model.get("originalType") || ""; + switch (originalType) { + case "text": + case "textarea": + case "suggest": + this.updateTextData(data); + break; + case "dropdown": + this.updateDropdownData(data) + break; + case "checkgroup": + this.updateCheckgroupData(data); + break; + case "radio": + this.updateRadioData(data); + break; + } + this.model.set("fullOptions", [this.model.get("data").label]); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.Label", Label); +}()); + +(function () { + var Title = PMDynaform.view.Field.extend({ + template: null, + validator: null, + etiquette: { + title: _.template($("#tpl-label-title").html()), + subtitle: _.template($("#tpl-label-subtitle").html()) + }, + tagControl: null, + tagLabel: null, + initialize: function () { + this.template = this.etiquette[this.model.get("type")]; + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("type") === "title") { + this.tagControl = this.$el.find("h4"); + } else { + this.tagControl = this.$el.find("h5"); + } + this.tagLabel = this.tagControl.find("p span"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setValue: function (text) { + if (text !== undefined) { + this.model.set("label", text); + this.tagLabel.text(text); + } + }, + /** + * SetValueAsync works as SetValue + * @param text + * @param fn + */ + setValueAsync: function (text, fn) { + if (text !== undefined) { + this.model.set("label", text); + this.tagLabel.text(text); + if (_.isFunction(fn)) { + fn(); + } + } + }, + getText: function () { + var label = this.model.get("label"); + return label ? label : null; + }, + getValue: function () { + return this.model.getValue(); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Title", Title); +}()); + +(function () { + var Empty = Backbone.View.extend({ + item: null, + template: _.template($("#tpl-empty").html()), + render: function () { + this.$el.html(this.template(this.model.toJSON())); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.Empty", Empty); + +}()); +(function () { + var HiddenView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-hidden").html()), + onChangeCallback: null, + initialize: function (options) { + this.model.on("change:value", this.eventListener, this); + }, + /** + * + * @param fn + * @returns {HiddenView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Listener change value + */ + eventListener: function () { + this.checkBinding(); + }, + /** + * Execute onchangecallback + * @returns {HiddenView} + */ + checkBinding: function () { + var form = this.parent; + if (typeof this.onChangeCallback === "function") { + this.onChangeCallback(this.getValue(), this.model.previous("value")); + } + if (form && typeof form.onChangeCallback === "function") { + form.onChangeCallback(this.model.get("id"), this.getValue(), this.model.previous("value")); + } + return this; + }, + render: function (isConsole) { + var data = {}, + hidden; + if (isConsole) { + data["value"] = this.model.get("value"); + data["label"] = this.model.get("value"); + this.model.attributes.data = data; + } + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("group") === "grid") { + hidden = this.$el.find("input[type = 'hidden']")[1]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + hidden.name = hidden.id = "form" + name; + hidden.value = this.model.get("value"); + } + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='hidden']").attr("name", ""); + } + this.tagControl = this.$el.find("input[type='hidden']").eq(0); + this.keyLabelControl = this.$el.find("input[type='hidden']").eq(1); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']").eq(1); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Sets value and data + * @param value + * @returns {HiddenView} + */ + setValue: function (value) { + this.model.setValue(value); + this.updateValues(value); + return this; + }, + /** + * Updates dom values + * @param value + * @returns {HiddenView} + */ + updateValues: function (value) { + if (value !== undefined && value !== null) { + this.tagControl.val(value); + this.$el.find("input[type='hidden']").eq(1).val(value); + } + return this; + }, + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + getValue: function () { + return this.model.getValue(); + }, + getControl: function () { + var htmlControl = this.$el.find("input[type='hidden']").eq(0); + return htmlControl; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.Hidden", HiddenView); + +}()); + +(function () { + var ImageView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-image").html()), + events: { + "keydown": "preventEvents" + }, + initialize: function () { + this.model.on("change", this.render, this); + }, + preventEvents: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + return this; + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + this.tagControl = this.tagHiddenToLabel = this.$el.find("img"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + getSrc: function () { + return this.model.get("src"); + }, + setSrc: function (value) { + this.model.set("src", value); + this.tagControl.attr("src", value); + return this; + }, + setValue: function (phat) { + if (phat !== undefined) { + this.setSrc(phat); + this.model.attributes.value = phat; + this.model.set("data", { + value: phat, + label: phat + }); + } + return this; + }, + getText: function () { + return this.getSrc(); + }, + getValue: function () { + return this.model.getValue(); + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.Image", ImageView); + +}()); + +(function () { + var SubFormView = Backbone.View.extend({ + template: _.template($('#tpl-form').html()), + formView: null, + defaultElement: "empty", + availableElements: null, + parent: null, + /** + * Sets Onchange function of the subForm. + * @param callback + * @returns {SubFormView} + */ + setOnChange: function (callback) { + this.formView.setOnChange(callback); + return this; + }, + /** + * Initialize sproperties + * @param options + */ + initialize: function (options) { + var availableElements = [ + "text", + "textarea", + "checkbox", + "checkgroup", + "radio", + "dropdown", + "button", + "datetime", + "fieldset", + "suggest", + "link", + "hidden", + "title", + "subtitle", + "label", + "empty", + "file", + "image", + "grid", + "panel", + "videomobile", + "audiomobile", + "imagemobile", + "signature", + "scannercode", + "multiplefile", + "location" + ]; + this.availableElements = availableElements; + if (options.project) { + this.project = options.project; + } + this.checkItems(); + this.makeSubForm(); + }, + checkItems: function () { + var i, + j, + newItems = [], + row = [], + json = this.model.toJSON(); + + if (json.items) { + for (i = 0; i < json.items.length; i += 1) { + row = []; + for (j = 0; j < json.items[i].length; j += 1) { + if (json.items[i][j].type) { + if ($.inArray(json.items[i][j].type.toLowerCase(), this.availableElements) >= 0) { + row.push(json.items[i][j]); + } + } else { + json.items[i][j].type = this.defaultElement; + row.push(json.items[i][j]); + } + } + if (row.length > 0) { + newItems.push(row); + } + } + } + + json.items = newItems; + this.model.set("modelForm", json); + + return this; + }, + makeSubForm: function () { + var panelmodel = new PMDynaform.model.FormPanel(this.model.get("modelForm")); + this.model.set("formModel", panelmodel); + this.formView = new PMDynaform.view.FormPanel({ + model: panelmodel, + project: this.project + }); + + return this; + }, + validate: function (event) { + this.isValid(event); + }, + getItems: function () { + return this.formView.items.asArray(); + }, + /** + * Returns all the fields in the subformform including the ones in any nested subform. + * @returns {Array.PMDynaform.view.Field} + */ + getAllFields: function () { + var items = this.getItems(), + subformFields = [], + fields; + + fields = items.filter(function (i) { + // The second expression is necessary since Grid for Mobile doesn't inherit from PMDynaform.view.Field. + if (i instanceof PMDynaform.view.Field + || (PMDynaform.view.GridMobile && i instanceof PMDynaform.view.GridMobile)) { + return true; + } else if (i instanceof PMDynaform.view.SubForm) { + subformFields = subformFields.concat(i.getAllFields()); + } + return false; + }); + + return fields.concat(subformFields); + }, + /** + * Validate and set the subform valid property. + * @param event + * @returns {boolean} + */ + isValid: function (event) { + var i, + formValid = true, + formItems = this.formView.getFields(), + item, + itemField; + + if (_.isArray(formItems)) { + for (i = 0; i < formItems.length; i += 1) { + item = formItems[i]; + if (item.validate) { + if (item.firstLoad) { + item.firstLoad = false; + } + // Validate field + item.validate(event); + if (!item.model.get("valid")) { + formValid = item.model.get("valid"); + // Save the first field to set the focus, that field must be distinct to grid + itemField = (itemField === undefined && item.model.get("type") !== "grid") ? item: itemField; + } + } + } + if (itemField) { + itemField.setFocus(); + } + } + // Finally set valid value to data model + this.model.set("valid", formValid); + return formValid; + }, + + /** + * Gets all files that was not uploaded completely + * @returns {array} + */ + getFilesNotUploaded: function () { + var i, + field, + formItems = this.formView.getFields(), + filesNoUploaded = []; + for (i = 0; i < formItems.length; i += 1) { + field = formItems[i]; + if (field.getFilesNotUploaded) { + filesNoUploaded = filesNoUploaded.concat(field.getFilesNotUploaded()); + } + } + return filesNoUploaded; + }, + /** + * Gets the loading value into the subfom fields + * @returns {boolean} + */ + isLoading: function () { + var i, + field, + formItems = this.formView.getFields(); + for (i = 0; i < formItems.length; i += 1) { + field = formItems[i]; + if (field.isLoading && (typeof field.isLoading === 'function') && field.isLoading()) { + return true; + } + } + return false; + }, + setData: function (data) { + //using the same method of PMDynaform.view.FormPanel + this.formView.setData(data); + + return this; + }, + /** + * Gets data of the form. + * @returns {{}} + */ + getData: function () { + var formView = this.getFormView(), + fields = formView.getFields(), + formData = {}, + item, + dataField, + i; + for (i = 0; i < fields.length; i += 1) { + item = fields[i]; + if (item.model.get("type") === "grid") { + dataField[item.model.get("name")] = item.getData2(); + } else { + dataField = item.model.getAppData(); + } + $.extend(true, formData, dataField); + } + return formData; + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + this.$el.find(".pmdynaform-field-form").append(this.formView.render(true).el); + + return this; + }, + afterRender: function () { + this.formView.afterRender(); + return this; + }, + /** + * Calls to running formulator method + * @returns {SubFormView} + */ + runningFormulator: function () { + this.formView.runningFormulator(); + return this; + }, + /** + * Gets the formView(FormPanel View) related to SubForm. + * @returns {null} + */ + getFormView: function () { + return this.formView; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.SubForm", SubFormView); + +}()); + +(function () { + + var GeoMapView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-map").html()), + validator: null, + events: { + "click .pmdynaform-map-fullscreen button": "applyFullScreen" + }, + $hiddens: [], + initialize: function (options) { + this.$hiddens = []; + this.form = options.form ? options.form : null; + var that = this; + }, + onLoadGeoLocation: function () { + var appData = this.project.mobileDataControls, + that = this; + if (appData && appData[this.model.get("name")]) { + this.model.set("altitude", appData[this.model.get("name")]["altitude"]); + this.model.set("latitude", appData[this.model.get("name")]["latitude"]); + this.model.set("longitude", appData[this.model.get("name")]["longitude"]); + this.createHiddens(appData[this.model.get("name")]); + } else { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (position) { + var pos = position.Geoposition ? position.Geoposition : position; + that.model.set("latitude", pos.coords.latitude || 0); + that.model.set("longitude", pos.coords.longitude || 0); + that.model.set("altitude", 0); + that.onLoadLocation(); + }); + } + } + this.onLoadLocation(); + return this; + }, + onLoadLocation: function () { + var that = this, + coords, + mapOptions, + map, + marker, + canvasHTML = that.$el.find(".pmdynaform-map-canvas")[0]; + coords = new google.maps.LatLng(this.model.get("latitude"), this.model.get("longitude")); + mapOptions = { + zoom: this.model.get("zoom"), + center: coords, + panControl: this.model.get("panControl"), + zoomControl: this.model.get("zoomControl"), + scaleControl: this.model.get("scaleControl"), + streetViewControl: this.model.get("streetViewControl"), + overviewMapControl: this.model.get("overviewMapControl"), + mapTypeControl: this.model.get("mapTypeControl"), + navigationControlOptions: { + style: google.maps.NavigationControlStyle.SMALL + }, + mapTypeId: google.maps.MapTypeId.ROADMAP + }; + + map = new google.maps.Map(canvasHTML, mapOptions); + this.model.set("googlemap", map); + + marker = new google.maps.Marker({ + position: coords, + map: map, + draggable: this.model.get("dragMarker"), + title: "" + }); + google.maps.event.addListener(marker, 'dragend', function (event) { + that.model.set("latitude", event.latLng.lat().toFixed(that.model.get("decimals"))); + that.model.set("longitude", event.latLng.lng().toFixed(that.model.get("decimals"))); + + }); + this.model.set("marker", marker); + + return this; + }, + applyFullScreen: function () { + if (this.fullscreen.supported) { + this.fullscreen.toggle(); + } else { + this.$el(".pmdynaform-map-fullscreen").hide(); + } + return this; + }, + render: function () { + var that = this; + + that.$el.html(that.template(that.model.toJSON())); + this.loadAsyncData(1000); + if (this.model.get("fullscreen")) { + this.fullscreen = new PMDynaform.core.FullScreen({ + element: this.$el.find(".pmdynaform-map-canvas")[0], + onReadyScreen: function () { + setTimeout(function () { + that.$el.find(".pmdynaform-map-canvas").css("height", $(window).height() + "px"); + }, 500); + }, + onCancelScreen: function () { + setTimeout(function () { + that.$el.find(".pmdynaform-map-canvas").css("height", ""); + }, 500); + } + }); + } + if (this.model.get("hint")) { + this.enableTooltip(); + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Load the map in async mode + * @param time + * @returns {GeoMapView} + */ + loadAsyncData: function (time) { + var that = this; + if (_.isNumber(time)) { + setTimeout(function () { + that.onLoadGeoLocation(); + }, time); + } + return this; + }, + /** + * Create the hiddens input for the field + * @param obj + * @returns {GeoMapView} + */ + createHiddens: function (obj) { + var prop, + hidden, + name; + if (_.isObject(obj) && _.isArray(this.$hiddens)) { + for (prop in obj) { + if (obj.hasOwnProperty(prop)) { + name = this.createNameforHidden(prop); + hidden = $("", {name: name, type: "hidden", value: obj[prop]}); + this.$el.append(hidden); + this.$hiddens.push(hidden); + } + } + } + return this; + } + , + /** + * Create names form the hidden input + * @param prop + * @returns {string} + */ + createNameforHidden: function (prop) { + var name = ""; + if (_.isString(prop)) { + name = "form[" + this.model.get("variable") + "]" + "[" + prop + "]"; + } + return name; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.GeoMap", GeoMapView); +}()); + +(function () { + var Annotation = PMDynaform.view.Field.extend({ + validator: null, + template: _.template($("#tpl-annotation").html()), + tagControl: null, + tagLabel: null, + initialize: function () { + this.model.set("type", "label"); + }, + render: function () { + this.$el.html(this.template(this.model.toJSON())); + this.tagControl = this.$el.find("span"); + this.tagLabel = this.tagControl.find("p span"); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setValue: function (text) { + if (text !== undefined) { + this.model.set("label", text); + this.tagLabel.text(text); + } + return this; + }, + setText: function (text) { + this.setValue(text); + }, + getText: function () { + var label = this.model.get("label"); + return label ? label : null; + }, + getValue: function () { + return this.model.getValue(); + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Annotation", Annotation); +}()); + +/** + * The Datetime class was developed with the help of DateBootstrap plugin + */ +(function () { + var DatetimeView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-datetime2").html()), + validator: null, + keyPressed: false, + previousValue: null, + datePickerObject: null, + timeFormatRegEx: /[hHmsSaAZ]/, + navigatorKeys: [37, 38, 39, 40], + events: { + "blur input": "onBlurInput", + "keydown input": "refreshBinding", + 'focus .form-control': 'onFieldFocus' + }, + /** + * Initializes properties + * @param options + */ + initialize: function (options) { + this.form = options.form ? options.form : null; + this.model.on("change:toDraw", this.render, this); + this.model.on("change:dependencyDidUpdate", this.afterDependencyDidUpdateView, this); + this.initLanguage(); + this.previousValue = this.getValue(); + }, + /** + * Gets standard date + * @param date + * @returns {string} + */ + getStandardFormat: function (date) { + if (date !== undefined && date !== null && moment(date).isValid()) { + //TODO: This method isn't the best form to get the standard date and it will be resolved on the ticket FBI-2254. + return moment(date).hasOwnProperty("_i") ? moment(date)._i : ""; + } + }, + /** + * onBlurInput helper to force to update the hidden with the real data + * @param event + */ + onBlurInput: function (event) { + var localeDate = this.datePickerObject.date(), + defaultFormatted = this.prepareFormatValue(localeDate); + if (moment(defaultFormatted).isValid()) { + this.tagHiddenToLabel.val(this.getStandardFormat(defaultFormatted)); + this.validate(); + } + event.preventDefault(); + event.stopPropagation(); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of Datetime + */ + afterDependencyDidUpdateView: function () { + if (this.model.get("dependencyDidUpdate")) { + this.dependencyDidUpdateView(); + } + this.model.set({ "dependencyDidUpdate": false }, { silent: true }); + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of Datetime + */ + dependencyDidUpdateView: function () { + this.changeHidden(); + this.validate(); + }, + /** + * Change the hidden view in Datetime field + * @return {DatetimeView} + */ + changeHidden: function () { + var data = this.model.get("data"), + hiddenInput = this.tagHiddenToLabel; + if (data.hasOwnProperty("value")) { + hiddenInput.val(data.value); + } + return this; + }, + /** + * Default function + */ + onChangeCallback: function () { + }, + /** + * Sets the setOnchange helper function to a property + * @param fn + * @returns {DatetimeView} + */ + setOnChange: function (fn) { + if (typeof fn === "function") { + this.onChangeCallback = fn; + } + return this; + }, + /** + * Validate if the field is required or has an RegEx + * @param event + * @returns {DatetimeView} + */ + validate: function (event) { + this.model.set({ validate: true }); + this.model.validate(); + if (this.model.get("enableValidate")) { + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error'); + } + if (!this.model.isValid()) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".control-group").parent().append(this.validator.el); + this.applyStyleError(); + } + } else { + this.model.attributes.valid = true; + } + return this; + }, + /** + * prevent default events + * @param event + * @returns {DatetimeView} + */ + refreshBinding: function (event) { + //Validation for the Submit event + if (event.which === 13) { + event.preventDefault(); + event.stopPropagation(); + } + this.keyPressed = true; + return this; + }, + /** + * Render main method to represent the component in the page + * @returns {DatetimeView} + */ + render: function () { + var name, + dateInput, + control, + that = this, + windowResizeHandler; + + this.$el.html(this.template(this.model.toJSON())); + if (this.model.get("hint") !== "") { + this.enableTooltip(); + } + control = this.$el.find('#datetime-container-control'); + + windowResizeHandler = function () { + if (control.data("DateTimePicker")) { + control.data("DateTimePicker").hide(); + } + $(window).off('resize', windowResizeHandler); + }; + + control.datetimepicker({ + format: this.model.get("format"), + stepping: this.model.get("stepping"), + useCurrent: this.model.get("useCurrent"), + collapse: this.model.get("collapse"), + defaultDate: this.model.get("defaultDate") ? moment(this.model.get("defaultDate")) : false, + disabledDates: this.model.get("disabledDates"), + sideBySide: this.model.get("sideBySide"), + daysOfWeekDisabled: this.model.get("daysOfWeekDisabled"), + calendarWeeks: this.model.get("calendarWeeks"), + viewMode: this.model.get("viewMode"), + toolbarPlacement: this.model.get("toolbarPlacement"), + showClear: this.model.get("showClear"), + focusOnShow: true, + showTodayButton: true, + ignoreReadonly: true, + locale: this.language, + tooltips: { + today: 'Go to today'.translate(), + clear: 'Clear selection'.translate(), + close: 'Close the picker'.translate(), + selectMonth: 'Select Month'.translate(), + prevMonth: 'Previous Month'.translate(), + nextMonth: 'Next Month'.translate(), + selectYear: 'Select Year'.translate(), + prevYear: 'Previous Year'.translate(), + nextYear: 'Next Year'.translate(), + selectDecade: 'Select Decade'.translate(), + prevDecade: 'Previous Decade'.translate(), + nextDecade: 'Next Decade'.translate(), + prevCentury: 'Previous Century'.translate(), + nextCentury: 'Next Century'.translate(), + incrementHour: 'Increment Hour'.translate(), + pickHour: 'Pick Hour'.translate(), + decrementHour: 'Decrement Hour'.translate(), + incrementMinute: 'Increment Minute'.translate(), + pickMinute: 'Pick Minute'.translate(), + decrementMinute: 'Decrement Minute'.translate(), + incrementSecond: 'Increment Second'.translate(), + pickSecond: 'Pick Second'.translate(), + decrementSecond: 'Decrement Second'.translate() + }, + "minDate": this.model.get("minDate").trim().length ? this.model.get("minDate") : false, + "maxDate": this.model.get("maxDate").trim().length ? this.model.get("maxDate") : false + }).on('dp.show', function () { + if (that.project) { + that.project.hideCalendars(this); + } + that.recalculateWidgetPosition(); + $(window).on('resize', windowResizeHandler); + }).on('dp.hide', function () { + that.$el.find('input.form-control').eq(0).blur(); + }).on('dp.change', function (event) { + that.changeSelectEvent(event.date); + }).find('.form-control').attr('readonly', this.project.isMobile()); + this.datePickerObject = this.$el.find('#datetime-container-control').data()["DateTimePicker"]; + this.tagControl = this.$el.find("input[type='text']"); + this.tagHiddenToLabel = this.$el.find("input[type='hidden']"); + this.valueReader(); + if (this.model.get("group") === "grid") { + dateInput = this.$el.find("input[type='text']")[0]; + name = this.model.get("name"); + name = name.substring(0, name.length - 1).concat("_label]"); + dateInput.name = dateInput.id = "form" + name; + } + if (this.model.get("name").trim().length === 0) { + this.$el.find("input[type='text']").attr("name", ""); + this.$el.find("input[type='hidden']").attr("name", ""); + } + + this.keysNavigatorDefineEvents(); + this.$el.find(".content-print").text(this.model.get("data")["label"]); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Prepare the value because many formats is allowed in Datetime field + * suported types: "08102017", "2017-10-23" or "2017-10-23 04:00:00" + * @returns {DatetimeView} + */ + valueReader: function () { + var value = this.model.get("value"), + formattedDate, + defaultFormatted; + // I use the value instead of data because in an specific format + // "dddd, Do-MMM-YYYY", the data property arrives empty from the server. + // Data is not reliable. + if (value) { + // Need formated the value because from server arrives in the next way + // "08102017" or + // "2017-10-23" or + // "2017-10-23 04:00:00" + formattedDate = moment(value, [ + this.model.get("datetimeIsoFormat"), + this.model.get("dateIsoFormat"), + this.model.get("format") + ]); + defaultFormatted = this.prepareFormatValue(formattedDate); + if (moment(defaultFormatted).isValid()) { + this.setValue(defaultFormatted); + this.tagHiddenToLabel.val(this.getStandardFormat(defaultFormatted)); + } + } + }, + /** + * Prepares the value in the required format. + * if has time we will use "datetimeIsoFormat" format + * if has not we will use "dateIsoFormat" format + * @param userValue + * @returns {object} + */ + prepareFormatValue: function (userValue) { + var formattedValue = null; + if (userValue && userValue instanceof moment) { + formattedValue = !this.timeFormatRegEx.test(this.model.get('format')) ? + userValue.format(this.model.get("dateIsoFormat")) : userValue.format(this.model.get("datetimeIsoFormat")); + } + return formattedValue; + }, + /** + * navigation event handler Time control + * only keyboards navigation is controlled, up, down, right and left + */ + keysNavigatorDefineEvents: function () { + var that = this; + if (this.tagControl instanceof jQuery) { + this.tagControl.keyup(function (e) { + if (that.navigatorKeys.indexOf(e.keyCode) > -1) { + that.recalculateWidgetPosition(); + } + }); + } + return this; + }, + updateAttributeDatepicker: function (attribute, value) { + if (this.datePickerObject && this.datePickerObject[attribute]) { + this.datePickerObject[attribute](value); + } + return this; + }, + /** + * Parse the all formats to the user format + * @param value + * @returns {{value: string, label: string}} + */ + formatData: function (value) { + var originalFormat = this.model.get("format"), + newData = { + value: "", + label: "" + }; + if (value) { + value = this.getStandardFormat(value); + newData = { + value: value, + label: moment(value, [ + this.model.get("datetimeIsoFormat"), + this.model.get("dateIsoFormat"), + originalFormat + ]).format(originalFormat) + }; + } + return newData; + }, + /** + * Sets a valid date, here we validate if is a correct dateTime value + * @param value + * @returns {DatetimeView} + */ + setValue: function (value) { + if (value !== undefined && value !== null) { + this.previousValue = this.getValue(); + value === "" ? this.clear() : + this.datePickerObject.date(this.formatData(value).label); + } + return this; + }, + + /** + * Clear the value and clear the datetimepicker control + * @returns {DatetimeView} + */ + clear: function () { + this.datePickerObject.clear(); + this.tagHiddenToLabel.val(""); + return this; + }, + /** + * gets the value of a DatetimePicker + */ + getValue: function () { + return this.model.getValue(); + }, + getText: function () { + var data = this.model.get("data"); + return data ? data["label"] : null; + }, + + /** + * Recalculate The Wiget Postion + * @returns {DatetimeView} + */ + recalculateWidgetPosition: function () { + var index = 0, + fixedPosition = 'fixed', + absolutePosition = 'absolute', + controlDatePicker = this.$el.find(".datetime-container"), + widgetCalendar = this.$el.find(".bootstrap-datetimepicker-widget"), + picker = controlDatePicker.get(index), + controlSpace = picker ? picker.getBoundingClientRect() : null, + mainContainer = this.getParentElementForFloatingElements(), + factorAlign = 2, + isMobile = this.project.isMobile(), + widgetRect, + widgetSpace; + + //widgetRect is read only + widgetRect = !_.isEmpty(widgetCalendar.get(index)) ? widgetCalendar.get(index).getBoundingClientRect() : null; + if (widgetRect) { + // widgetRect' clone + widgetSpace = { + position: fixedPosition, + top: widgetRect.top, + left: widgetRect.left, + height: widgetRect.height + }; + // Update the arrows's widget + this.updateArrowsToRTL(widgetCalendar); + // Check if the available space is short up and down + if (this.spaceIsShort("up_down", controlSpace, widgetSpace)) { + widgetSpace = this.setWidgetPosition(widgetSpace, "top"); + } else { + //Check widget's initial position + if (this.positionWidgetIsUp(widgetSpace.top, controlSpace.top)) { + if (!this.existSpaceAvailable("up", controlSpace, widgetSpace)) { + widgetSpace = this.setWidgetPosition(widgetSpace, "under"); + } else { + widgetSpace.top = widgetSpace.top - factorAlign; + } + } else { + if (!this.existSpaceAvailable("down", controlSpace, widgetSpace)) { + widgetSpace = this.setWidgetPosition(widgetSpace, "over"); + } else { + widgetSpace.top = widgetSpace.top - factorAlign; + } + } + } + //If is mobile set properties and add scroll + if (mainContainer && isMobile) { + widgetSpace.position = absolutePosition; + widgetSpace.top += mainContainer.scrollTop; + widgetSpace.left += mainContainer.scrollLeft; + } + //Append widget calendar to main container + if (mainContainer && widgetCalendar.get(index)) { + mainContainer.appendChild(widgetCalendar.get(index)); + this.applyPosition(widgetCalendar, widgetSpace); + } + } + return this; + }, + /** + * Check the position widget + * @param widgetTop + * @param controlTop + * @param controlHeight + * @returns {boolean} + */ + positionWidgetIsUp: function (widgetTop, controlTop) { + var flag = false; + + if (controlTop > widgetTop) { + flag = true; + } + return flag; + }, + /** + * Check if the available space is short + * @param controlSpace + * @param widgetSpace + */ + spaceIsShort: function (position, controlSpace, widgetSpace) { + var flag = false, + defaultZoom = 1, + factorZoom = window.devicePixelRatio || defaultZoom, + availableSpace; + + availableSpace = { + up: controlSpace.top * factorZoom, + down: ($(window).height() - controlSpace.bottom) * factorZoom + }; + + if (availableSpace.up < widgetSpace.height * factorZoom && + availableSpace.down < widgetSpace.height * factorZoom) { + flag = true; + } + + return flag; + }, + /** + * Check the available space + * @param position + * @param controlSpace + * @param widgetSpace + * @returns {boolean} + */ + existSpaceAvailable: function (position, controlSpace, widgetSpace) { + var flag = false, + defaultZoom = 1, + factorZoom = window.devicePixelRatio || defaultZoom, + availableSpace; + + availableSpace = { + up: controlSpace.top * factorZoom, + down: ($(window).height() - controlSpace.bottom) * factorZoom + }; + + switch (position) { + case "up": + if (availableSpace.up >= widgetSpace.height * factorZoom) { + flag = true; + } + break; + case "down": + if (availableSpace.down >= widgetSpace.height * factorZoom) { + flag = true; + } + break; + } + return flag; + }, + /** + * Apply widget's new positions + * @param objPos + */ + applyPosition: function (widgetCalendar, newPositions) { + widgetCalendar.css({ + position: newPositions.position, + left: newPositions.left, + top: newPositions.top, + height: newPositions.height + }); + return this; + }, + /** + * Sets Widget Position + * @param widgetSpace + * @param position TOP, BOTTOM, OVER, UNDER and MIDDLE + */ + setWidgetPosition: function (widgetSpace, position) { + var factorPixelBottom = 2, + factorPixeTop = 6, + index = 0, + controlDatePicker = this.$el.find(".datetime-container"), + controlSpace = controlDatePicker.get(index).getBoundingClientRect(), + factorAlign, + factorInverse = -1; + + switch (position) { + case "top": + widgetSpace.top = factorPixelBottom; + break; + case "bottom": + widgetSpace.top = $(window).height() - widgetSpace.height - factorPixelBottom; + break; + case "over": + widgetSpace.top = widgetSpace.top - (widgetSpace.height + controlSpace.height + factorPixeTop); + break; + case "under": + widgetSpace.top = widgetSpace.top + (widgetSpace.height + controlSpace.height + factorPixelBottom); + break; + case "middle": + factorAlign = factorPixelBottom + (controlSpace.height / 2 + widgetSpace.height / 2); + if (this.positionWidgetIsUp(widgetSpace.top, controlSpace.top)) { + widgetSpace.top = widgetSpace.top - (factorAlign * factorInverse); + } else { + widgetSpace.top = widgetSpace.top - factorAlign; + } + break; + } + return widgetSpace; + }, + onFieldFocus: function () { + if (typeof this.onFieldFocusCallback === 'function') { + this.onFieldFocusCallback(); + } + }, + isOpen: function () { + var widget = this.$el.find(".bootstrap-datetimepicker-widget").get(0); + if (widget) { + return true; + } + return false; + }, + /** + * when the project has the RTL variable true value, date arrows component + * is reversed, so that the slide functionality is reversed + */ + updateArrowsToRTL: function (widget) { + var arrowsPrev, + arrowsNext, + i = 0, + classPrev, + classNext; + if (widget && widget instanceof jQuery) { + if (this.project && this.project.isRTL) { + arrowsPrev = widget.find(".table-condensed .prev"); + arrowsNext = widget.find(".table-condensed .next"); + while (i < arrowsPrev.length && i < arrowsNext.length) { + classPrev = arrowsPrev.eq(i).find("span").attr("class"); + classNext = arrowsNext.eq(i).find("span").attr("class"); + if (classPrev !== undefined && classNext !== undefined) { + arrowsPrev.eq(i).find("span").attr("class", classNext); + arrowsNext.eq(i).find("span").attr("class", classPrev); + i += 1; + } + } + } + } + return this; + }, + /* Returns the element in which floating elements should be appended for this field. + */ + getParentElementForFloatingElements: function () { + var text = this.$el.find("input[type='text']"), + parent = text.closest('.modal').get(0); + + return parent || document.body; + }, + /** + * Gets control user for helper function purposes. + * the result must be an instance of jquery of the HTML control. + */ + getControl: function () { + var htmlControl = this.$el.find("input[type='text']"); + return htmlControl; + }, + /** + * When the select control change value + * @param {*} date + * @return {DatetimeView} + */ + changeSelectEvent: function (date) { + var that = this, dt; + dt = this.updateView(date, function () { + that.executeChangeCallback(); + }); + return this; + }, + + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of Datetime + * @param {*} fn + * @return {DatetimeView} + */ + updateView: function (date, fn) { + var dt = { + value: "", + label: "" + }, + newData = this.formatData(date ? this.prepareFormatValue(date) : ""); + this.model.set({ "data": newData }, { silent: true }); + this.model.set({ "value": newData.value }, { silent: true }); + + dt = this.updateFieldView(newData); + // is very important pass the control to dependencyWillUpdate + this.model.dependencyWillUpdate({ + data: dt, + fn: fn + }); + return this; + }, + /** + * Update the view + * @return {DatetimeView} + */ + updateFieldView: function (data) { + if (data) { + this.tagHiddenToLabel.val(data.value); + this.tagControl.val(data.label); + this.$el.find(".content-print").text(data.label); + + } + }, + /** + * Execute the change callback on view + */ + executeChangeCallback: function () { + var form = this.form, + paramsValue = { + idField: this.model.get("id"), + current: this.getValue(), + previous: this.previousValue + }; + if (paramsValue.current !== paramsValue.previous) { + this.onChangeCallback(paramsValue.current, paramsValue.previous); + if (form) { + form.checkBinding(paramsValue); + } + this.previousValue = this.getValue(); + } + }, + /** + * Update bootstrap DateTimePicker widget + * @param {Object} options + * @return {DatetimeView} + */ + updateSettings: function (options) { + var maxDate = moment(options.maxDate || null), + minDate = moment(options.minDate || null), + currentData = moment(this.model.get("data").value ? this.model.get("data").value : null); + + if (this.validator) { + this.validator.$el.remove(); + this.$el.removeClass('has-error'); + } + if (minDate.isValid() && currentData.isValid() && currentData.diff(minDate) < 0 && this.model.get("data").value !== "") { + this.applyErrorStyle(); + this.clear(); + this.datePickerObject.options(options); + return this; + } + if (maxDate.isValid() && currentData.isValid() && maxDate.diff(currentData) < 0 && this.model.get("data").value !== "") { + this.applyErrorStyle(); + this.clear(); + this.datePickerObject.options(options); + return this; + } + if (maxDate.isValid() && minDate.isValid() && maxDate.diff(minDate) < 0) { + this.applyErrorStyle(); + return this; + } + this.datePickerObject.options(options); + this.model.attributes.valid = true; + return this; + }, + /** + * Apply error styles + * @return {DatetimeView} + */ + applyErrorStyle: function () { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + this.$el.find(".control-group").parent().append(this.validator.el); + this.applyStyleError(); + this.model.attributes.valid = false; + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.DatetimeR", DatetimeView); +}()); +(function () { + var PanelField = PMDynaform.view.Field.extend({ + validator: null, + template: _.template($("#tpl-panelField").html()), + initialize: function () { + }, + render: function () { + var content, + footer; + this.$el.html(this.template(this.model.toJSON())); + this.$el.find(".panel-body").html(this.model.get("content")); + footer = $(this.model.get("footerContent")); + if (footer.length && footer instanceof jQuery) { + this.$el.find(".panel-footer").append(footer); + } else { + this.$el.find(".panel-footer").text(this.model.get("footerContent")); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.PanelField", PanelField); +}()); + +/** + * Class Tooltip + */ +(function () { + var ToolTipView = Backbone.View.extend({ + trigger: 'manual', + position: 'bottom', + title: 'Default Content', + element: null, + initialize: function () { + //TODO: no need params. + }, + /** + * Creation of the Tooltip + * @returns {ToolTipView} + */ + render: function () { + if (this.getElement()) { + this.getElement().tooltip('destroy'); + this.getElement().tooltip({ + 'container': 'body', + 'trigger': this.trigger, + 'placement': this.getPosition(), + 'title': this.getTitle() + }); + } + return this; + }, + /** + * Show Tooltip + * @param element + * @param title + * @param position + * @returns {ToolTipView} + */ + show: function (element, title, position) { + var tooltipWidget = null; + this.setPosition(position); + this.setTitle(title); + this.setElement(element); + this.render(); + this.getElement().tooltip('show'); + tooltipWidget = $(".tooltip"); + if (!this.validatePosition(tooltipWidget, position)) { + this.reposition(tooltipWidget); + this.getElement().tooltip('show'); + } + return this; + }, + /** + * Hide Tooltip + * @param element + * @returns {ToolTipView} + */ + hide: function (element) { + var tooltipWidfget = $(".tooltip"); + element.tooltip('hide'); + element.tooltip('destroy'); + if (tooltipWidfget) { + $(".tooltip").remove(); + } + this.setElement(null); + return this; + }, + /** + * Set Element of the Tooltip + * @param element + * @returns {ToolTipView} + */ + setElement: function (element) { + this.element = element ? element : this.element; + return this; + }, + /** + * Set Position Tooltip + * @param position + * @returns {ToolTipView} + */ + setPosition: function (position) { + this.position = position ? position : this.position; + return this; + }, + /** + * Set Text content of the Tooltip + * @param title + * @returns {ToolTipView} + */ + setTitle: function (title) { + this.title = title ? title : this.title; + return this; + }, + /** + * Get Position Tooltip + * @returns {string} + */ + getPosition: function () { + return this.position; + }, + /** + * Get Text Content Tooltip + * @returns {string} + */ + getTitle: function () { + return this.title; + }, + /** + * Get Element of the Tooltip + * @returns {null} + */ + getElement: function () { + return this.element; + }, + /** + * Validate Position Tooltip + * @param element + * @param position + * @returns {boolean} + */ + validatePosition: function (element, position) { + var isAvailable = false, + propsElement = [], + margin = {top: 10, left: 20, bottom: 10, right: 20}; + + propsElement = this.getPositionAvailable(element); + if (propsElement && propsElement.length > 0) { + switch (position) { + case "top": + isAvailable = (this.getPositionArray(propsElement, "top") > margin.top && + this.getPositionArray(propsElement, "right") > margin.right && + this.getPositionArray(propsElement, "left") > margin.left) ? true : isAvailable; + break; + case "bottom": + isAvailable = (this.getPositionArray(propsElement, "bottom") > margin.bottom && + this.getPositionArray(propsElement, "right") > margin.right && + this.getPositionArray(propsElement, "left") > margin.left) ? true : isAvailable; + break; + case "right": + case "left": + isAvailable = true; + break; + default: + isAvailable = false; + } + } + return isAvailable; + }, + /** + * Get Array of Positions of the element + * @param element + * @returns {Array} + */ + getPositionAvailable: function (element) { + var top, + right, + bottom, + left, + propsElement, + widthWindow = $(window).width(), + heightWindow = $(window).height(), + position = 'bottom', + available, + arrayProps = [], + prop; + + propsElement = element ? element[0].getBoundingClientRect() : null; + if (propsElement) { + available = { + top: propsElement.top, + right: widthWindow - propsElement.right, + bottom: heightWindow - propsElement.bottom, + left: propsElement.left + }; + for (prop in available) { + arrayProps.push({ + 'key': prop, + 'value': available[prop] + }); + } + arrayProps.sort(function (a, b) { + return b.value - a.value; + }); + position = arrayProps[0]; + } + + return arrayProps; + }, + /** + * Reposition Tooltip + * @param element + * @returns {ToolTipView} + */ + reposition: function (element) { + var i, + max, + bestPosition = false, + position, + arrPositions = []; + + arrPositions = this.getPositionAvailable(element); + for (i = 0 , max = arrPositions.length; i < max; i += 1) { + position = arrPositions[i]["key"]; + if (this.validatePosition(element, position)) { + bestPosition = true; + break; + } + } + this.setPosition(position); + this.render(); + return this; + }, + /** + * Get Value Position of the Array Positions + * @param arrayProps + * @param position + * @returns {*} + */ + getPositionArray: function (arrayProps, position) { + var valuePos, + max, + object, + i; + + if (arrayProps && arrayProps.length > 0) { + for (i = 0, max = arrayProps.length; i < max; i += 1) { + object = arrayProps[i]; + if (object.key === position) { + valuePos = object.value; + break; + } + } + } + return valuePos; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.ToolTipView", ToolTipView); +}()); +(function () { + /** + * @class PMDynaform.util.ui.FlashMessageModel + * A message to display for a while. + * + * Usage example: + * + * @example + * flashModel = new PMDynaform.ui.FlashMessageModel({ + * message : "This is a flas message", + * emphasisMessage: "Info", + * startAnimation:5000, + * closable:true, + * type:"danger", + * appendTo:document.body, + * duration:5000 + * }); + * + * + * @constructor + * Creates a new instance of the class. + * + * @cfg {String} [emphasisMessage=""] The object's emphasisMessage. It can be a single string + * @cfg {String} [message=""] The object's message. It can be a single string + * @cfg {Number} [duration=3000] The time in milliseconds the message will be displayed. + * @cfg {String} [type="info"] The type for the message. Valid values: 'info', 'success', 'error', 'warning'. + */ + var FlashMessageModel = Backbone.Model.extend({ + defaults: { + /** + * The message property sets a simple label that will be displayed in the component + * @type {String} + * @readonly + */ + message: '', + /** + * The duration in milliseconds to show the message. Set by the config option + * and the method. + * @type {Number} + * @readonly + */ + duration: 3000, + /** + * The html element's object the message will be displayed in the DOM element + * @type {HTMLElement} + */ + appendTo: document.body, + /** + * The message's type. Set by the, config option with success, info, warning, danger + * @type {String} + * @readonly + */ + type: 'info', + /** + * The duration in milliseconds to start the message. Set by the config option + * and the method. + * @type {Number} + * @readonly + */ + startAnimation: 1000, + /** + * The emphasisMessage property sets a emphasis label that will be displayed in the component + * @type {String} + * @readonly + */ + emphasisMessage: '', + /** + * The valid Type 's set by config option with success, info, warning, danger + * @type {Array} + */ + validTypes: [], + /** + * add scroll of the scroll in the top, when show the flash message + * @type {Boolean} + */ + absoluteTop: false, + closable: false + }, + /** + * When creating an instance of a model, you can pass in the initial values of the attributes + * @param settings: properties with custom values + * @returns {FlashMessageModel} + */ + initialize: function (config) { + this.set("validTypes", ["success", "info", "warning", "danger"]); + this.on("change:type", this.setType); + this.on("change:appendTo", this.setAppendTo); + }, + /** + * This method, set the type for the message. Valid values: 'info', 'success', 'error', 'warning'. + * @param {[type]} type [description] + */ + setType: function (model, type) { + if (this.get("validTypes").indexOf(type) > -1) { + this.set("type", type); + } else { + this.set("type", "info"); + } + return this; + }, + /** + * The html element's object the message will be displayed in the DOM element + * @param {[type]} model : is a object model + * @param {[type]} parentNode : this a html element container. + */ + setAppendTo: function (model, parentNode) { + if (_.isObject(parentNode)) { + if (parentNode instanceof jQuery || parentNode.ELEMENT_NODE) { + this.set("appendTo", parentNode); + } + } else { + this.set("appendTo", document.body); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.ui.FlashMessageModel", FlashMessageModel); +}()); +(function () { + var FileMobile = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-extfile").html()), + templateAudio: _.template($("#tpl-extaudio").html()), + templateVideo: _.template($("#tpl-extvideo").html()), + templateMediaVideo: _.template($("#tpl-media-video").html()), + templateMediaAudio: _.template($("#tpl-media-audio").html()), + templateImage: _.template($("#tpl-extfile").html()), + templatePlusImage: _.template($("#tpl-extfile-plus-image").html()), + templatePlusAudio: _.template($("#tpl-extfile-plus-audio").html()), + templatePlusVideo: _.template($("#tpl-extfile-plus-video").html()), + templateRenderingWeb: _.template($("#tpl-multimedia-renderingWeb").html()), + boxPlus: null, + viewsFiles: [], + mediaVideos: [], + validator: null, + messageRequired: "This field is required.".translate(), + events: { + "click buttonImage": "onClickButtonMobile", + "click .pmdynaform-file-resizeimage": "onClickImage" + }, + initialize: function () { + return this; + }, + /** + * Listen OnclickEvent for Mobile Controls + * @param event + * @returns {FileMobile} + */ + onClickButtonMobile: function (event) { + var type = this.model.get("type"); + switch (type) { + case "imageMobile": + this.onClickButtonImage(event); + break; + case "audioMobile": + this.onClickButtonAudio(event); + break; + case "videoMobile": + this.onClickButtonVideo(event); + break; + } + event.preventDefault(); + event.stopPropagation(); + return this; + }, + /** + * Listen OnclickEvent for Image Control + * @param event + * @returns {FileMobile} + */ + onClickButtonImage: function (event) { + var respData, + project = this.model.get("project"); + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + type: "image", + galleryEnabled: this.model.get("galleryEnabled"), + cameraEnabled: this.model.get("cameraEnabled") + }; + project.requestManager.getImage(respData); + return this; + }, + /** + * Listen OnclickEvent for preview a image + * @param event + * @returns {FileMobile} + */ + onClickImage: function (event) { + var respData, + project = this.model.get("project"); + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + idFile: event.target.id, + type: "image", + availableOffline: this.model.get("availableOffline") + }; + project.requestManager.previewImage(respData); + return this; + }, + /** + * Listen OnclickEvent for Audio Control + * @param event + * @returns {FileMobile} + */ + onClickButtonAudio: function (event) { + var respData; + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + type: "audio" + }; + this.model.get("project").requestManager.getAudio(respData); + return this; + }, + /** + * Listen OnclickEvent for Video Control + * @param event + * @returns {FileMobile} + */ + onClickButtonVideo: function (event) { + var respData; + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + type: "video" + }; + this.model.get("project").requestManager.getVideo(respData); + return this; + }, + /** + * Validate a File Mobile Controls + * @returns {FileMobile} + */ + validate: function () { + if (this.validator) { + this.validator.$el.remove(); + if (_.isFunction(this.removeStyleError)) { + this.removeStyleError(); + } + } + + this.model.validate(); + if (!this.model.get("valid")) { + this.validator = new PMDynaform.view.Validator({ + model: new Backbone.Model({ + message: { + required: this.model.get("requiredFieldErrorMessage") || this.messageRequired + } + }) + }); + this.$el.find(".pmdynaform-field-control").append(this.validator.$el); + if (_.isFunction(this.applyStyleError)) { + this.applyStyleError(); + } + } + return this; + }, + /** + * This function apply style error in this field + * @returns {FileUpload} + */ + applyStyleError: function () { + this.$el.addClass("has-error has-feedback"); + this.$el.find(".pmdynaform-file-droparea-ext").addClass("file-mobile-error"); + return this; + }, + /** + * THis function remove style error in this field + * @returns {FileUpload} + */ + removeStyleError: function () { + this.$el.removeClass('has-error has-feedback'); + this.$el.find(".pmdynaform-file-droparea-ext").removeClass("file-mobile-error"); + return this; + }, + render: function () { + var dataFiles, + nameField, + options = _.extend( + this.model.toJSON(), + { + dottedBox: !(this.model.get("mode") === "view" || (this.model.get("mode") === "parent" && this.model.get("parent").get("mode") === "view")) + } + ); + + if (PMDynaform.core.ProjectMobile) { + if (this.model.get("mode") === "edit" || (this.model.get("mode") === "parent" && this.model.get("parent").get("mode") === "edit")) { + this.createBoxPlus(); + } + this.$el.html(this.template(options)); + if (this.model.get("hint")) { + this.enableTooltip(); + } + this.$el.find(".pmdynaform-file-droparea-ext").append(this.boxPlus); + } else { + this.$el.html(this.template(options)); + dataFiles = this.project.mobileDataControls; + nameField = this.model.get("name"); + if (dataFiles.hasOwnProperty(nameField)) { + this.renderingWeb(dataFiles[nameField]); + } + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * controls renders video, audio and image, according to the values + * obtained from the mobile version. + * @param items, is the list of the elements multimedia. + * @returns {HTMLElement} + */ + renderingWeb: function (items) { + var ieVersion, + type = this.model.get("type"), + i, + viewFiles, + elements = [], + container = this.$el.find(".pmdynaform-file-control"), + downloadLink, + data, + linkService = "showDocument"; + if (_.isArray(items)) { + this.model.set({"data": {"value": items}}); + container.empty(); + ieVersion = PMDynaform.core.Utils.checkValidIEVersion(); + if (type === "imageMobile") { + elements = this.model.remoteProxyData(items); + } else { + for (i = 0; i < items.length; i += 1) { + data = { + uid: items[i], + type: linkService + }; + downloadLink = this.project.webServiceManager.showDocument(data); + data = $.extend(true, this.model.urlFileStreaming(items[i]), {downloadLink: downloadLink}); + elements.push(data); + } + } + viewFiles = this.templateRenderingWeb({ + elements: elements, + type: type, + ieVersion: ieVersion + }); + container.append(viewFiles); + } + }, + setFilesRFC: function (arrayFiles) { + var type = this.model.get("type"); + switch (type) { + case "imageMobile": + this.loadMixingSourceImages(arrayFiles); + break; + case "audioMobile": + case "videoMobile": + this.loadMixingSourceMedia(arrayFiles); + break; + } + }, + loadMixingSourceImages: function (arrayFiles) { + var max = arrayFiles.length ? arrayFiles.length : 0, + i, + response; + + if (max) { + response = this.model.remoteProxyData(arrayFiles); + } + if (response && response.length) { + for (i = 0; i < response.length; i += 1) { + this.updateFiles(response[i]); + } + } + }, + loadMixingSourceMedia: function (arrayFiles) { + var itemMedia, + item; + for (var i = 0; i < arrayFiles.length; i++) { + item = arrayFiles[i]; + if (typeof item === "string") { + itemMedia = this.model.urlFileStreaming(item); + this.createBoxFile(itemMedia); + this.model.addItemFile(itemMedia); + } + if (item.filePath) { + this.createBoxFile(item); + this.model.addItemFile(item); + } + } + }, + /** + * Create box and update array of files + * @param item + * @returns {FileMobile} + */ + updateFiles: function (item) { + if (_.isObject(item) && !_.isEmpty(item)) { + this.model.addItemFile(item); + this.createBoxFile(item); + } + return this; + }, + /** + * [setFiles Function for set files images, video and audio from a interface to mobile] + * @param {[type]} arrayFiles [description] + */ + setFiles: function (arrayFiles) { + var i; + for (i = 0; i < arrayFiles.length; i += 1) { + this.updateFiles(arrayFiles[i]); + } + this.validate(); + }, + setData: function (data) { + this.setFilesRFC(data["value"]); + return this; + }, + /** + * Create Box of Mobile Controls + * @param file + */ + createBoxFile: function (file) { + var type = this.model.get("type"); + switch (type) { + case "imageMobile": + this.createBoxImage(file); + break; + case "audioMobile": + this.createBoxAudio(file); + break; + case "videoMobile": + this.createBoxVideo(file); + break; + } + }, + createBoxImage: function (file) { + var newSrc, + rand = Math.floor((Math.random() * 100000) + 3), + template = document.createElement("div"), + resizeImage = document.createElement("div"), + preview = document.createElement("span"), + progress = document.createElement("div"); + + if (file["filePath"]) { + newSrc = file["filePath"]; + } + if (file["base64"]) { + newSrc = this.model.makeBase64Image(file["base64"]); + } + + if (newSrc) { + template.id = rand; + template.className = "pmdynaform-file-containerimage"; + + resizeImage.className = "pmdynaform-file-resizeimage"; + resizeImage.innerHTML = ''; + preview.id = rand; + preview.className = "pmdynaform-file-preview"; + preview.appendChild(resizeImage); + progress.id = rand; + progress.className = "pmdynaform-file-progress"; + progress.innerHTML = ""; + template.appendChild(preview); + template.setAttribute("data-toggle", "modal"); + template.setAttribute("data-target", "#myModal"); + this.viewsFiles.push({ + "id": file.id, + "data": template + }); + this.$el.find(".pmdynaform-file-droparea-ext").prepend(template); + } + return this; + }, + createBoxAudio: function (file) { + var model, + tplContainerAudio, + tplMediaAudio, + mediaElement; + model = { + src: file.filePath ? file.filePath : file, + extension: file.extension ? file.extension : null, + name: file.name + }; + + tplMediaAudio = this.templateMediaAudio(model); + mediaElement = new PMDynaform.core.MediaElement({ + el: $(tplMediaAudio), + type: "audio" + }); + + tplContainerAudio = $(this.templateAudio(model)); + tplContainerAudio.find(".pmdynaform-file-resizevideo").append(mediaElement.$el); + this.$el.find(".pmdynaform-file-droparea-ext").prepend(tplContainerAudio); + + this.viewsFiles.push({ + "id": file.id, + "data": tplContainerAudio + }); + return this; + }, + createBoxVideo: function (file) { + var model, + tplContainerVideo, + tplMediaVideo, + mediaElement, + + model = { + src: file.filePath ? file.filePath : file, + name: file.name + }; + tplMediaVideo = this.templateMediaVideo(model); + mediaElement = new PMDynaform.core.MediaElement({ + el: $(tplMediaVideo), + type: "video", + streaming: file.filePath ? false : true + }); + + tplContainerVideo = $(this.templateVideo(model)); + tplContainerVideo.find(".pmdynaform-file-resizevideo").append(mediaElement.$el); + this.$el.find(".pmdynaform-file-droparea-ext").prepend(tplContainerVideo); + + this.viewsFiles.push({ + "id": file.id, + "data": tplContainerVideo + }); + return this; + }, + createBoxPlus: function () { + var type = this.model.get("type"); + switch (type) { + case "imageMobile": + this.boxPlus = $(this.templatePlusImage()); + break; + case "audioMobile": + this.boxPlus = $(this.templatePlusAudio()); + break; + case "videoMobile": + this.boxPlus = $(this.templatePlusVideo()); + break; + default: + } + return this; + }, + changeID: function (arrayNew) { + var array = this.model.getFiles(), + itemNew, + itemOld; + for (var i = 0; i < arrayNew.length; i++) { + itemNew = arrayNew[i]; + for (var j = 0; j < array.length; j++) { + itemOld = array[j]; + if (typeof itemOld === "string") { + if (itemNew["idOld"] === itemOld) { + itemOld = itemNew["idNew"]; + } + } + if (typeof itemOld === "object") { + if (itemNew["idOld"] === itemOld["id"]) { + itemOld["id"] = itemNew["idNew"]; + } + } + } + } + }, + afterRender: function () { + var data = this.model.get("data"), + prj = this.model.get("project"); + if (data && data.value && prj && prj.loadDataField) { + this.setFilesRFC(data.value); + } + return this; + }, + /** + * Enable the validation when only property required is true + * @returns {FileMobile} + */ + enableValidation: function () { + if (this.model.get("required")) { + this.model.set("enableValidate", true); + this.showRequire(); + } + return this; + }, + /** + * Disable the validation when only property required is true + * @returns {FileMobile} + */ + disableValidation: function () { + if (this.model.get("required")) { + this.model.set("enableValidate", false); + if (_.isFunction(this.removeStyleError)) { + this.removeStyleError(); + } + if (this.validator) { + this.validator.$el.remove(); + } + this.hideRequire(); + } + return this; + }, + + /** + * Exchange the file ids. + * @param oldId + * @param newId + * @returns {FileMobile} + */ + exchangeMobileDataId: function (oldId, newId){ + this.model.exchangeMobileDataId(oldId, newId); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.FileMobile", FileMobile); +}()); + +(function () { + var ImageFieldView = PMDynaform.view.Field.extend({ + eventsMobile: { + PREVIEW: "image/preview", + UPLOAD_PROGRESS: "image/uploadProgress", + CANCEL: "image/request/cancel", + DELETE: "image/delete", + THUMBNAIL: "imageThumbnail/request" + }, + template: _.template($("#tpl-extfile").html()), + templateImage: _.template($("#tpl-extfile").html()), + templatePlusImage: _.template($("#tpl-extfile-plus-image").html()), + templateRenderingWeb: _.template($("#tpl-multimedia-renderingWeb").html()), + boxPlus: null, + viewsFiles: [], + mediaVideos: [], + validator: null, + messageRequired: "This field is required.".translate(), + events: { + "click buttonImage": "onClickAddImage", + "click .pmdynaform-file-resizeimage": "onClickPreviewImage", + }, + initialize: function () { + return this; + }, + + /** + * Delete File View + * @param fileId + */ + deleteFileView: function (fileId) { + var that = this; + var view = _.find(that.viewsFiles, function (obj) {return obj.id === fileId;}); + if (view && view.data.remove) { + view.data.remove(); + } + }, + /** + * Listen OnclickEvent for Mobile Controls + * @param event + * @returns {FileMobile} + */ + onClickAddImage: function (event) { + var type = this.model.get("type"), + that = this, + respData, + project = this.model.get("project"); + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + type: "image", + galleryEnabled: this.model.get("galleryEnabled"), + cameraEnabled: this.model.get("cameraEnabled") + }; + project.requestManager.getImage(respData); + + this.model.get("project").requestManager.channelEvents( + { + handler: this.model.get("id"), + type: this.eventsMobile.UPLOAD_PROGRESS, + bridge: false, + data: {}, + callback: function (event) { + that.updateProgressBar(event); + } + }); + + event.preventDefault(); + event.stopPropagation(); + return this; + }, + /** + * Cancel Upload Image, remove the file from model and view + * @param event + * @returns {ImageFieldView} + */ + onCancelUpload: function (event) { + var that = this; + this.model.get("project").requestManager.channelEvents( + { + handler: this.model.get("id"), + type: this.eventsMobile.CANCEL, + bridge: true, + data: { + idField: this.model.get("name"), + idFile: event.currentTarget.id, + id: this.model.get("id") + }, + callback: function (event) { + that.cancelProgressBar(event.idFile); + } + }); + this.model.deleteFile(event.currentTarget.id); + this.deleteFileView(event.currentTarget.id); + event.preventDefault(); + event.stopPropagation(); + return this; + }, + /** + * Cancel progressbar in image + * @param idFile + */ + cancelProgressBar: function (idFile) { + this.model.set("blockPreviewImage", false); + this.$el.find("img").css("opacity", 1); + $("#" + idFile).find("progress").css("display", "none"); + $("#" + idFile).find(".image-cancel").css("display", "none"); + }, + /** + * The update method about upload Progress bar from mobile api + * @param data + */ + updateProgressBar: function (data) { + if (data.value < 100) { + $("#" + data.idFile).find("progress").css("display", "block"); + this.model.set("blockPreviewImage", true); + this.model.set("fileInProgress", data.idFile); + this.$el.find("img").css("opacity", 0.2); + $("#" + data.idFile).find(".image-cancel-icon").css("marginTop", (this.$el.find("img").height() - 42) / 2); + $("#" + data.idFile).find(".image-cancel").css("display", "block"); + + } else { + this.model.set("blockPreviewImage", false); + this.model.set("fileInProgress", ""); + this.$el.find("img").css("opacity", 1); + $("#" + data.idFile).find("progress").css("display", "none"); + $("#" + data.idFile).find(".image-cancel").css("display", "none"); + } + $("#" + data.idFile).find("progress")[0].value = data.value; + }, + + /** + * Listen OnclickEvent for preview a image + * @param event + * @returns {FileMobile} + */ + onClickPreviewImage: function (event) { + var respData, + that = this, + project = this.model.get("project"); + respData = { + idField: this.model.get("name"), + docUid: this.model.get("inp_doc_uid"), + idFile: event.currentTarget.id, + type: "image", + value: this.model.get("files"), + availableOffline: this.model.get("availableOffline") + }; + + this.model.get("project").requestManager.channelEvents({ + handler: this.model.get("id"), + type: this.eventsMobile.DELETE, + bridge: false, + data: {}, + callback: function (event) { + that.model.deleteFile(event.idFile); + that.deleteFileView(event.idFile); + } + }); + + if (this.model.get("blockPreviewImage") === false) { + this.model.get("project").requestManager.channelEvents({ + handler: this.model.get("id"), + type: this.eventsMobile.PREVIEW, + bridge: true, + data: respData, + callback: function (event) { + } + }); + } else if (this.model.get("fileInProgress") === event.currentTarget.id) { + this.onCancelUpload(event); + } + return this; + }, + /** + * Validate a File Mobile Controls + * @returns {FileMobile} + */ + validate: function () { + if (this.validator) { + this.validator.$el.remove(); + if (_.isFunction(this.removeStyleError)) { + this.removeStyleError(); + } + } + + this.model.validate(); + if (!this.model.get("valid")) { + this.validator = new PMDynaform.view.Validator({ + model: new Backbone.Model({ + message: { + required: this.model.get("requiredFieldErrorMessage") || this.messageRequired + } + }) + }); + this.$el.find(".pmdynaform-field-control").append(this.validator.$el); + if (_.isFunction(this.applyStyleError)) { + this.applyStyleError(); + } + } + return this; + }, + /** + * This function apply style error in this field + * @returns {FileUpload} + */ + applyStyleError: function () { + this.$el.addClass("has-error has-feedback"); + this.$el.find(".pmdynaform-file-droparea-ext").addClass("file-mobile-error"); + return this; + }, + /** + * This function remove style error in this field + * @returns {FileUpload} + */ + removeStyleError: function () { + this.$el.removeClass('has-error has-feedback'); + this.$el.find(".pmdynaform-file-droparea-ext").removeClass("file-mobile-error"); + return this; + }, + /** + * Render component, in two format web and mobile + * @returns {ImageFieldView} + */ + render: function () { + var dataFiles, + nameField, + options = _.extend( + this.model.toJSON(), + { + dottedBox: !(this.model.get("mode") === "view" || (this.model.get("mode") === "parent" && this.model.get("parent").get("mode") === "view")) + } + ); + + if (PMDynaform.core.ProjectMobile) { + if (this.model.get("mode") === "edit" || (this.model.get("mode") === "parent" && this.model.get("parent").get("mode") === "edit")) { + this.boxPlus = $(this.templatePlusImage()); + } + this.$el.html(this.template(options)); + if (this.model.get("hint")) { + this.enableTooltip(); + } + this.$el.find(".pmdynaform-file-droparea-ext").append(this.boxPlus); + } else { + this.$el.html(this.template(options)); + dataFiles = this.project.mobileDataControls; + nameField = this.model.get("name"); + if (dataFiles.hasOwnProperty(nameField)) { + this.renderWeb(dataFiles[nameField]); + } + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * controls renders video, audio and image, according to the values + * obtained from the mobile version. + * @param items, is the list of the elements multimedia. + * @returns {HTMLElement} + */ + renderWeb: function (items) { + var ieVersion, + type = this.model.get("type"), + i, + viewFiles, + elements = [], + container = this.$el.find(".pmdynaform-file-control"), + downloadLink, + data, + linkService = "showDocument"; + if (_.isArray(items)) { + this.model.set({"data": {"value": items}}); + container.empty(); + ieVersion = PMDynaform.core.Utils.checkValidIEVersion(); + if (type === "imageMobile") { + elements = this.model.remoteProxyData(items); + } else { + for (i = 0; i < items.length; i += 1) { + data = { + uid: items[i], + type: linkService + }; + downloadLink = this.project.webServiceManager.showDocument(data); + data = $.extend(true, this.model.urlFileStreaming(items[i]), {downloadLink: downloadLink}); + elements.push(data); + } + } + viewFiles = this.templateRenderingWeb({ + elements: elements, + type: type, + ieVersion: ieVersion + }); + container.append(viewFiles); + } + }, + /** + * Set File data from mobile api + * @param arrayFiles + */ + setFilesRFC: function (arrayFiles) { + var type = this.model.get("type"), max = arrayFiles.length ? arrayFiles.length : 0, + i, + response; + + if (PMDynaform.core.ProjectMobile) { + response = arrayFiles; + } else { + if (max) { + response = this.model.remoteProxyData(arrayFiles); + } + } + if (response && response.length) { + for (i = 0; i < response.length; i += 1) { + this.updateFiles(response[i]); + } + } + }, + /** + * Create box and update array of files + * @param item + * @returns {FileMobile} + */ + updateFiles: function (item) { + if (_.isObject(item) && !_.isEmpty(item)) { + this.model.addItemFile(item); + this.createBoxFile(item); + } + return this; + }, + /** + * setFiles Function for set files images, video and audio from a interface to mobile + * @param {[type]} arrayFiles [description] + */ + setFiles: function (arrayFiles) { + var i; + for (i = 0; i < arrayFiles.length; i += 1) { + this.updateFiles(arrayFiles[i]); + } + this.validate(); + }, + /** + * Set data from Pmdynaform Project, from mobile api + * @param data + * @returns {ImageFieldView} + */ + setData: function (data) { + if (data && data["value"]) { + this.setFilesRFC(data["value"]); + } + return this; + }, + /** + * Create view for image + * @param file + * @returns {ImageFieldView} + */ + createBoxFile: function (file) { + var template = _.template($("#tpl-thumbnail-image").html()), + tplResp, + newSrc; + + if (file["filePath"]) { + newSrc = file["filePath"]; + } + if (file["base64"]) { + newSrc = this.model.makeBase64Image(file["base64"]); + } + + if (file["fileContent"]) { + newSrc = this.model.makeBase64Image(file["fileContent"]); + } + + if (newSrc) { + tplResp = $(template({ + id: Math.floor((Math.random() * 100000) + 3), + src: newSrc, + idFile: file.id + })); + + this.viewsFiles.push({ + "id": file.id, + "data": tplResp + }); + this.$el.find(".pmdynaform-file-containerimage.file-plus").before(tplResp); + } + return this; + }, + /** + * Execute when after render PMDynaform, subscribe listener for thumbnails in Mobile + * @returns {ImageFieldView} + */ + afterRender: function () { + var that = this, + data = this.model.get("data"), + prj = this.model.get("project"); + + if (PMDynaform.core.ProjectMobile) { + this.model.get("project").requestManager.channelEvents( + { + handler: this.model.get("id"), + type: this.eventsMobile.THUMBNAIL, + bridge: this.model.get("data").value.length == 0 ? false : true, + data: { + idField: this.model.get("id"), + images: this.model.get("data").value + }, + callback: function (imagesThumbnail) { + var ims = []; + _.forEach(imagesThumbnail, function (obj) { + ims.push({ + id: obj.fileId, + base64: obj.fileContent + }); + }) + + that.setFilesRFC(ims); + } + }); + + + } else { + if (data && data.value && prj && prj.loadDataField) { + this.setFilesRFC(data.value); + } + } + return this; + }, + /** + * Enable the validation when only property required is true + * @returns {FileMobile} + */ + enableValidation: function () { + if (this.model.get("required")) { + this.model.set("enableValidate", true); + this.showRequire(); + } + return this; + }, + /** + * Disable the validation when only property required is true + * @returns {FileMobile} + */ + disableValidation: function () { + if (this.model.get("required")) { + this.model.set("enableValidate", false); + if (_.isFunction(this.removeStyleError)) { + this.removeStyleError(); + } + if (this.validator) { + this.validator.$el.remove(); + } + this.hideRequire(); + } + return this; + }, + }); + + PMDynaform.extendNamespace("PMDynaform.view.ImageFieldView", ImageFieldView); +}()); + +(function () { + var GeoMobile = PMDynaform.view.Field.extend({ + item: null, + template: _.template($("#tpl-extgeo").html()), + templatePlus: _.template($("#tpl-extfile-plus").html()), + templateGeoDesktop: _.template($("#tpl-map").html()), + boxPlus: null, + boxModal: null, + boxBackground: null, + viewsImages: [], + imageOffLine: "geoMap.jpg", + events: { + "click button": "onClickButton" + }, + initialize: function () { + }, + onClickButton: function (event) { + var respData; + this.model.set("interactive", true); + respData = { + idField: this.model.get("name"), + interactive: true + }; + this.model.get("project").requestManager.getLocation(respData); + event.preventDefault(); + event.stopPropagation(); + return this; + }, + makeBase64Image: function (base64) { + return "data:image/png;base64," + base64; + }, + /** + * Create Box Geo Map + * @param data + * @returns {GeoMobile} + */ + createBox: function (data) { + var rand, + newsrc, + template, + resizeImage, + preview; + + if (data.base64) { + this.clearBox(); + newsrc = this.makeBase64Image(data.base64); + rand = Math.floor((Math.random() * 100000) + 3); + template = document.createElement("div"); + resizeImage = document.createElement("div"); + preview = document.createElement("span"); + + template.id = rand; + template.className = "pmdynaform-file-containergeo"; + resizeImage.className = "pmdynaform-file-resizeimage"; + resizeImage.innerHTML = ''; + + preview.id = rand; + preview.className = "pmdynaform-file-preview"; + preview.appendChild(resizeImage); + template.appendChild(preview); + this.$el.find(".pmdynaform-ext-geo").prepend(template); + this.hideButton(); + } + return this; + }, + /** + * Clear Box Geo Map + * @returns {GeoMobile} + */ + clearBox: function () { + var htmlBox = this.$el.find(".pmdynaform-ext-geo"); + if (htmlBox.length) { + htmlBox.empty(); + } + return this; + }, + /** + * Hide Button Map + */ + hideButton: function () { + var button; + button = this.$el.find("button"); + button.hide(); + }, + render: function () { + var that = this, + fileContainer, + fileControl, + auxClass, + geomapDesktop, + that = this, + data, + canvasMap, + coords, + latitude, + longitude, + altitude; + if (PMDynaform.core.ProjectMobile) { + this.$el.html(this.template(this.model.toJSON())); + fileContainer = this.$el.find(".pmdynaform-file-droparea-ext")[0]; + fileControl = this.$el.find("input")[0]; + } else { + this.$el.html(this.templateGeoDesktop(this.model.toJSON())); + auxClass = function (params) { + this.project = params.project; + }; + auxClass.prototype.load = function () { + canvasMap = that.$el.find(".pmdynaform-map-canvas"); + coords, mapOptions, map, marker; + if (that.project.mobileDataControls) { + if (that.project.mobileDataControls) { + data = that.project.mobileDataControls[that.model.get("name")]; + if (data) { + latitude = data["latitude"] || 0; + longitude = data["longitude"] || 0; + altitude = data["altitude"] || 0; + coords = new google.maps.LatLng(latitude, longitude); + mapOptions = { + zoom: 15, + center: coords, + panControl: false, + zoomControl: false, + scaleControl: true, + streetViewControl: false, + overviewMapControl: false, + mapTypeControl: true, + navigationControlOptions: { + style: google.maps.NavigationControlStyle.SMALL + }, + mapTypeId: google.maps.MapTypeId.ROADMAP + }; + map = new google.maps.Map(canvasMap[0], mapOptions); + marker = new google.maps.Marker({ + position: coords, + map: map, + draggable: false, + title: "" + }); + } + } + } + }; + window.pmd = new auxClass({project: this}); + var script = document.createElement('script'); + script.type = 'text/javascript'; + $(script).data("script", "google"); + script.src = "https://maps.googleapis.com/maps/api/js?callback=pmd.load"; + script.src += window.pmd.project.googleMaps.key ? "&key=" + window.pmd.project.googleMaps.key : ""; + document.body.appendChild(script); + } + if (this.model.get("hint")) { + this.enableTooltip(); + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + /** + * Set Location + * @param location + */ + setLocation: function (location) { + var newLocation = {}, + imageResponse, + render; + if (location && typeof location === "object" && !_.isEmpty(location)) { + render = location.hasOwnProperty("render") && !location.render? location.render : true; + newLocation = { + idField: location.idField, + id: location.id, + base64: null, + latitude: location.latitude, + longitude: location.longitude, + altitude: location.altitude + }; + this.setGeoData(newLocation); + if (render) { + imageResponse = this.model.remoteProxyData(newLocation.id); + if (imageResponse) { + newLocation.base64 = imageResponse.base64; + this.createBox(newLocation); + } + } + } + }, + createImageOffLine: function (location) { + location["filePath"] = this.imageOffLine; + this.createBox({ + filePath: this.imageOffLine + }); + }, + setData: function (data) { + if (data["value"] && data["value"] !== "") + this.setLocation(data["value"]); + return this; + }, + /** + * Function for after render in dynaforms + * @returns {GeoMobile} + */ + afterRender: function () { + var data = this.model.get("data"), + prj = this.model.get("project"); + if (data && data.value && prj && prj.loadDataField) { + this.setLocation(data.value); + } + return this; + }, + /** + * Get Geo Data from View + * @returns {*} + */ + getGeoData: function () { + return this.model.getGeoData(); + }, + /** + * Set Geo Data Model From View + * @param data + * @returns {GeoMobile} + */ + setGeoData: function (data) { + this.model.setGeoData(data); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.view.GeoMobile", GeoMobile); +}()); + +(function () { + var MediaElement = function (settings) { + this.el = settings.el; + this.$el = settings.el; + this.streaming = settings.streaming ? settings.streaming : null; + this.type = settings.type; + if (this.type == "video") { + MediaElement.prototype.initVideo.call(this, this.el); + } + if (this.type == "audio") { + MediaElement.prototype.initAudio.call(this, this.el); + } + }; + + MediaElement.prototype.initVideo = function (element) { + var video = element.find("video"); + var control = element.find(".pmdynaform-media-control"); + //remove default control when JS loaded + video[0].removeAttribute("controls"); + element.find('.pmdynaform-media-control').fadeIn(500); + element.find('.pmdynaform-media-caption').fadeIn(500); + + //before everything get started + video.on('loadedmetadata', function () { + + //set video properties + element.find('.current').text(timeFormat(0)); + element.find('.duration').text(timeFormat(video[0].duration)); + updateVolume(0, 0.7); + + //start to get video buffering data + setTimeout(startBuffer, 150); + //bind video events + }); + + //display video buffering bar + var startBuffer = function () { + var that = this; + var currentBuffer = video[0].buffered.end(0); + var maxduration = video[0].duration; + var perc = 100 * currentBuffer / maxduration; + element.find('.pmdynaform-media-bufferBar').css('width', perc + '%'); + + if (currentBuffer < maxduration) { + setTimeout(startBuffer, 500); + } + }; + + //display current video play time + video.on('timeupdate', function () { + var currentPos = video[0].currentTime; + var maxduration = video[0].duration; + var perc = 100 * currentPos / maxduration; + element.find('.pmdynaform-media-timeBar').css('width', perc + '%'); + element.find('.current').text(timeFormat(currentPos)); + }); + + //CONTROLS EVENTS + //video screen and play button clicked + video.on('click', function () { + playpause(); + }); + element.find('.btnPlay').on('click', function () { + playpause(); + }); + var playpause = function () { + if (kitKatMode != null) { + JsInterface.startVideo(video[0].src, "video/mp4"); + } else { + if (video[0].paused) { + element.find('.btnPlay').addClass('paused'); + element.find('.btnPlay').find('.glyphicon.glyphicon-play').addClass('glyphicon glyphicon-pause').removeClass('glyphicon-play'); + video[0].play(); + } + else { + element.find('.btnPlay').removeClass('paused'); + element.find('.btnPlay').find('.glyphicon.glyphicon-pause').addClass('glyphicon glyphicon-play').removeClass('glyphicon-pause'); + video[0].pause(); + } + } + }; + + + //fullscreen button clicked + element.find('.btnFS').on('click', function () { + if ($.isFunction(video[0].webkitEnterFullscreen)) { + video[0].webkitEnterFullscreen(); + } + else if ($.isFunction(video[0].mozRequestFullScreen)) { + video[0].mozRequestFullScreen(); + } + else { + alert('Your browsers doesn\'t support fullscreen'); + } + }); + + //sound button clicked + element.find('.sound').click(function () { + video[0].muted = !video[0].muted; + $(this).toggleClass('muted'); + if (video[0].muted) { + element.find('.pmdynaform-media-volumeBar').css('width', 0); + } + else { + element.find('.pmdynaform-media-volumeBar').css('width', video[0].volume * 100 + '%'); + } + }); + + //VIDEO EVENTS + //video canplay event + video.on('canplay', function () { + element.find('.loading').fadeOut(100); + }); + + //video canplaythrough event + //solve Chrome cache issue + var completeloaded = false; + video.on('canplaythrough', function () { + completeloaded = true; + }); + + //video ended event + video.on('ended', function () { + element.find('.btnPlay').removeClass('paused'); + video[0].pause(); + }); + + //video seeking event + video.on('seeking', function () { + //if video fully loaded, ignore loading screen + if (!completeloaded) { + element.find('.loading').fadeIn(200); + } + }); + + //video seeked event + video.on('seeked', function () { + }); + + //video waiting for more data event + video.on('waiting', function () { + element.find('.loading').fadeIn(200); + }); + + //VIDEO PROGRESS BAR + //when video timebar clicked + var timeDrag = false; + /* check for drag event */ + element.find('.pmdynaform-media-progress').on('mousedown', function (e) { + timeDrag = true; + updatebar(e.pageX); + }); + $(document).on('mouseup', function (e) { + if (timeDrag) { + timeDrag = false; + updatebar(e.pageX); + } + }); + $(document).on('mousemove', function (e) { + if (timeDrag) { + updatebar(e.pageX); + } + }); + var updatebar = function (x) { + var progress = element.find('.pmdynaform-media-progress'); + + //calculate drag position + //and update video currenttime + //as well as progress bar + var maxduration = video[0].duration; + var position = x - progress.offset().left; + var percentage = 100 * position / progress.width(); + if (percentage > 100) { + percentage = 100; + } + if (percentage < 0) { + percentage = 0; + } + element.find('.pmdynaform-media-timeBar').css('width', percentage + '%'); + video[0].currentTime = maxduration * percentage / 100; + }; + + //VOLUME BAR + //volume bar event + var volumeDrag = false; + element.find('.pmdynaform-media-volume').on('mousedown', function (e) { + volumeDrag = true; + video[0].muted = false; + element.find('.sound').removeClass('muted'); + updateVolume(e.pageX); + }); + $(document).on('mouseup', function (e) { + if (volumeDrag) { + volumeDrag = false; + updateVolume(e.pageX); + } + }); + $(document).on('mousemove', function (e) { + if (volumeDrag) { + updateVolume(e.pageX); + } + }); + var updateVolume = function (x, vol) { + var volume = element.find('.pmdynaform-media-volume'); + var percentage; + //if only volume have specificed + //then direct update volume + if (vol) { + percentage = vol * 100; + } + else { + var position = x - volume.offset().left; + percentage = 100 * position / volume.width(); + } + + if (percentage > 100) { + percentage = 100; + } + if (percentage < 0) { + percentage = 0; + } + + //update volume bar and video volume + element.find('.pmdynaform-media-volumeBar').css('width', percentage + '%'); + video[0].volume = percentage / 100; + + //change sound icon based on volume + if (video[0].volume == 0) { + element.find('.sound').removeClass('sound2').addClass('muted'); + } + else if (video[0].volume > 0.5) { + element.find('.sound').removeClass('muted').addClass('sound2'); + } + else { + element.find('.sound').removeClass('muted').removeClass('sound2'); + } + + }; + + //Time format converter - 00:00 + var timeFormat = function (seconds) { + var m = Math.floor(seconds / 60) < 10 ? "0" + Math.floor(seconds / 60) : Math.floor(seconds / 60); + var s = Math.floor(seconds - (m * 60)) < 10 ? "0" + Math.floor(seconds - (m * 60)) : Math.floor(seconds - (m * 60)); + return m + ":" + s; + }; + this.$el = element; + }; + + + MediaElement.prototype.initAudio = function (element) { + var video = element.find("audio"); + var control = element.find(".pmdynaform-media-control"); + //remove default control when JS loaded + video[0].removeAttribute("controls"); + element.find('.pmdynaform-media-control').fadeIn(500); + element.find('.pmdynaform-media-caption').fadeIn(500); + + //before everything get started + video.on('loadedmetadata', function () { + + //set video properties + element.find('.current').text(timeFormat(0)); + element.find('.duration').text(timeFormat(video[0].duration)); + updateVolume(0, 0.7); + + //start to get video buffering data + setTimeout(startBuffer, 150); + + //bind video events + }); + + //display video buffering bar + var startBuffer = function () { + var that = this; + var currentBuffer = video[0].buffered.end(0); + var maxduration = video[0].duration; + var perc = 100 * currentBuffer / maxduration; + element.find('.pmdynaform-media-bufferBar').css('width', perc + '%'); + + if (currentBuffer < maxduration) { + setTimeout(startBuffer, 500); + } + }; + + //display current video play time + video.on('timeupdate', function () { + var currentPos = video[0].currentTime; + var maxduration = video[0].duration; + var perc = 100 * currentPos / maxduration; + element.find('.pmdynaform-media-timeBar').css('width', perc + '%'); + element.find('.current').text(timeFormat(currentPos)); + }); + + //CONTROLS EVENTS + //video screen and play button clicked + video.on('click', function () { + playpause(); + }); + element.find('.btnPlay').on('click', function () { + playpause(); + }); + var playpause = function () { + if (kitKatMode != null) { + JsInterface.startVideo(video[0].src, "audio/mp4"); + } else { + if (video[0].paused || video[0].ended) { + element.find('.btnPlay').addClass('paused'); + element.find('.btnPlay').find('.glyphicon.glyphicon-play').addClass('glyphicon-pause').removeClass('glyphicon-play'); + video[0].play(); + } + else { + element.find('.btnPlay').removeClass('paused'); + element.find('.btnPlay').find('.glyphicon.glyphicon-pause').removeClass('glyphicon-pause').addClass('glyphicon-play'); + video[0].pause(); + } + } + }; + + + //fullscreen button clicked + element.find('.btnFS').on('click', function () { + if ($.isFunction(video[0].webkitEnterFullscreen)) { + video[0].webkitEnterFullscreen(); + } + else if ($.isFunction(video[0].mozRequestFullScreen)) { + video[0].mozRequestFullScreen(); + } + else { + alert('Your browsers doesn\'t support fullscreen'); + } + }); + + //sound button clicked + element.find('.sound').click(function () { + video[0].muted = !video[0].muted; + $(this).toggleClass('muted'); + if (video[0].muted) { + element.find('.pmdynaform-media-volumeBar').css('width', 0); + } + else { + element.find('.pmdynaform-media-volumeBar').css('width', video[0].volume * 100 + '%'); + } + }); + + //VIDEO EVENTS + //video canplay event + video.on('canplay', function () { + element.find('.loading').fadeOut(100); + }); + + //video canplaythrough event + //solve Chrome cache issue + var completeloaded = false; + video.on('canplaythrough', function () { + completeloaded = true; + }); + + //video ended event + video.on('ended', function () { + element.find('.btnPlay').removeClass('paused'); + video[0].pause(); + }); + + //video seeking event + video.on('seeking', function () { + //if video fully loaded, ignore loading screen + if (!completeloaded) { + element.find('.loading').fadeIn(200); + } + }); + + //video seeked event + video.on('seeked', function () { + }); + + //video waiting for more data event + video.on('waiting', function () { + element.find('.loading').fadeIn(200); + }); + + //VIDEO PROGRESS BAR + //when video timebar clicked + var timeDrag = false; + /* check for drag event */ + element.find('.pmdynaform-media-progress').on('mousedown', function (e) { + timeDrag = true; + updatebar(e.pageX); + }); + $(document).on('mouseup', function (e) { + if (timeDrag) { + timeDrag = false; + updatebar(e.pageX); + } + }); + $(document).on('mousemove', function (e) { + if (timeDrag) { + updatebar(e.pageX); + } + }); + var updatebar = function (x) { + var progress = element.find('.pmdynaform-media-progress'); + + //calculate drag position + //and update video currenttime + //as well as progress bar + var maxduration = video[0].duration; + var position = x - progress.offset().left; + var percentage = 100 * position / progress.width(); + if (percentage > 100) { + percentage = 100; + } + if (percentage < 0) { + percentage = 0; + } + element.find('.pmdynaform-media-timeBar').css('width', percentage + '%'); + video[0].currentTime = maxduration * percentage / 100; + }; + + //VOLUME BAR + //volume bar event + var volumeDrag = false; + element.find('.pmdynaform-media-volume').on('mousedown', function (e) { + volumeDrag = true; + video[0].muted = false; + element.find('.sound').removeClass('muted'); + updateVolume(e.pageX); + }); + $(document).on('mouseup', function (e) { + if (volumeDrag) { + volumeDrag = false; + updateVolume(e.pageX); + } + }); + $(document).on('mousemove', function (e) { + if (volumeDrag) { + updateVolume(e.pageX); + } + }); + var updateVolume = function (x, vol) { + var volume = element.find('.pmdynaform-media-volume'); + var percentage; + //if only volume have specificed + //then direct update volume + if (vol) { + percentage = vol * 100; + } + else { + var position = x - volume.offset().left; + percentage = 100 * position / volume.width(); + } + + if (percentage > 100) { + percentage = 100; + } + if (percentage < 0) { + percentage = 0; + } + + //update volume bar and video volume + element.find('.pmdynaform-media-volumeBar').css('width', percentage + '%'); + video[0].volume = percentage / 100; + + //change sound icon based on volume + if (video[0].volume == 0) { + element.find('.sound').removeClass('sound2').addClass('muted'); + } + else if (video[0].volume > 0.5) { + element.find('.sound').removeClass('muted').addClass('sound2'); + } + else { + element.find('.sound').removeClass('muted').removeClass('sound2'); + } + + }; + + //Time format converter - 00:00 + var timeFormat = function (seconds) { + var m = Math.floor(seconds / 60) < 10 ? "0" + Math.floor(seconds / 60) : Math.floor(seconds / 60); + var s = Math.floor(seconds - (m * 60)) < 10 ? "0" + Math.floor(seconds - (m * 60)) : Math.floor(seconds - (m * 60)); + return m + ":" + s; + }; + this.$el = element; + }; + PMDynaform.extendNamespace("PMDynaform.core.MediaElement", MediaElement); + +}()); + + +(function () { + var Qrcode_mobile = PMDynaform.view.Field.extend({ + item: null, + template: _.template($("#tpl-ext-scannercode").html()), + templatePlus: _.template($("#tpl-extfile-plus").html()), + templateCode: _.template($("#tpl-ext-scanner-code").html()), + boxPlus: null, + boxModal: null, + boxBackground: null, + viewsImages: [], + events: { + "click button": "onClickButton" + }, + initialize: function () { + }, + onClickButton: function (event) { + var respData = { + idField: this.model.get("name") + }; + + this.model.get("project").requestManager.getScannerCode(respData); + event.preventDefault(); + event.stopPropagation(); + return this; + }, + hideButton: function () { + var button; + button = this.$el.find("button"); + button.hide(); + }, + showLabel: function (scannercode) { + var container; + container = this.$el.find("scanner").find(".pmdynaform-label-options"); + container.append(this.templateCode({label: scannercode})); + }, + render: function () { + var that = this, + data; + if (PMDynaform.core.ProjectMobile) { + this.$el.html(this.template(this.model.toJSON())); + } else { + this.$el.html(this.template(this.model.toJSON())); + if (that.project.mobileDataControls) { + if (that.project.mobileDataControls) { + data = that.project.mobileDataControls[that.model.get("name")]; + if (data) { + this.setScannerCode(data); + } + } + } + this.$el.find("button").detach(); + } + if (this.model.get("hint")) { + this.enableTooltip(); + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setScannerCode: function (scannercode) { + var model, i; + model = this.model; + if (_.isArray(scannercode)) { + for (i = 0; i < scannercode.length; i += 1) { + model.addCode(scannercode[i]); + this.showLabel(scannercode[i]); + } + } else { + model.addCode(scannercode.data); + this.showLabel(scannercode.data); + } + return this; + }, + setData: function (data) { + this.setScannerCode(data["value"]); + return this; + }, + readFileDeviceScanner: function (data) { + var str; + $.ajax({ + url: data.data, + dataType: 'text', + async: false, + success: function (data, xhr) { + str = data; + } + }); + this.setScannerCode({data: str}); + return this; + }, + /** + * Function for after render in dynaforms + * @returns {Qrcode_mobile} + */ + afterRender: function () { + var data = this.model.get("data"), + prj = this.model.get("project"); + if (data && data.value && prj && prj.loadDataField) { + this.setScannerCode(data.value); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Qrcode_mobile", Qrcode_mobile); +}()); + +(function () { + var Signature_mobile = PMDynaform.view.Field.extend({ + item: null, + template: _.template($("#tpl-ext-signature").html()), + templatePlus: _.template($("#tpl-extfile-plus").html()), + viewsImages: [], + imageOffLine: "geoMap.jpg", + events: { + "click button": "onClickButton" + }, + initialize: function () { + + }, + onClickButton: function (event) { + var respData; + this.model.set("interactive", true); + respData = { + idField: this.model.get("name") + }; + + this.model.get("project").requestManager.getSignature(respData); + event.preventDefault(); + event.stopPropagation(); + return this; + }, + makeBase64Image: function (base64) { + return "data:image/png;base64," + base64; + }, + createBox: function (data) { + var rand, + newsrc, + template, + resizeImage, + preview, + progress; + + if (data.filePath) { + newsrc = data.filePath; + } else { + newsrc = this.makeBase64Image(data.base64); + } + rand = Math.floor((Math.random() * 100000) + 3); + + template = document.createElement("div"), + resizeImage = document.createElement("div"), + preview = document.createElement("span"), + progress = document.createElement("div"); + + template.id = rand; + template.className = "pmdynaform-file-containergeo"; + + resizeImage.className = "pmdynaform-file-resizeimage"; + resizeImage.innerHTML = ''; + preview.id = rand; + preview.className = "pmdynaform-file-preview"; + preview.appendChild(resizeImage); + template.appendChild(preview); + this.$el.find(".pmdynaform-ext-signature").prepend(template); + this.hideButton(); + return this; + }, + hideButton: function () { + var button; + button = this.$el.find("button"); + button.hide(); + }, + render: function () { + var fileContainer, + fileControl, + signature, + files = [], + itemElement; + if (PMDynaform.core.ProjectMobile) { + this.$el.html(this.template(this.model.toJSON())); + fileContainer = this.$el.find(".pmdynaform-file-droparea-ext")[0]; + fileControl = this.$el.find("input")[0]; + } else { + this.$el.html(this.template(this.model.toJSON())); + fileContainer = this.$el.find(".pmdynaform-ext-signature").empty(); + this.$el.find("button").hide(); + if (this.project.mobileDataControls) { + signature = this.project.mobileDataControls; + if (signature && signature[this.model.get("name")] && signature[this.model.get("name")].length > 0) { + signature = signature[this.model.get("name")]; + signature = this.model.remoteProxyData(signature[0]); + files.push(signature); + this.model.set("files", files); + itemElement = $("Thumbnail Image"); + fileContainer.append(itemElement); + } + } + } + if (this.model.get("hint")) { + this.enableTooltip(); + } + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + setFiles: function (arrayFiles) { + for (var i = 0; i < arrayFiles.length; i++) { + this.createBox(arrayFiles[i]); + this.model.attributes.files.push(arrayFiles[i]); + } + }, + setSignature: function (arraySignature) { + var i, + response, + files = []; + for (i = 0; i < arraySignature.length; i++) { + if (typeof arraySignature[i] === "string") { + response = this.model.remoteProxyData(arraySignature[i]); + this.createBox(response); + files.push(response); + + } else { + this.createBox(arraySignature[i]); + files.push(arraySignature[i]); + } + } + this.model.set("files", files); + }, + changeID: function (arrayNew) { + var array = this.model.attributes.files, + itemNew, + itemOld; + for (var i = 0; i < arrayNew.length; i++) { + itemNew = arrayNew[i]; + for (var j = 0; j < array.length; j++) { + itemOld = array[j]; + if (typeof itemOld === "string") { + if (itemNew["idOld"] === itemOld) { + itemOld = itemNew["idNew"]; + } + } + if (typeof itemOld === "object") { + if (itemNew["idOld"] === itemOld["id"]) { + itemOld["id"] = itemNew["idNew"]; + } + } + } + } + }, + setData: function (data) { + this.setSignature(data["value"]); + return this; + }, + /** + * Function for after render in dynaforms + * @returns {Signature_mobile} + */ + afterRender: function () { + var data = this.model.get("data"), + prj = this.model.get("project"); + if (data && data.value && prj && prj.loadDataField) { + this.setSignature(data.value); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.view.Signature_mobile", Signature_mobile); +}()); + +(function () { + + var Validator = Backbone.Model.extend({ + defaults: { + message: {}, + title: "", + type: "", + dataType: "", + value: "", + valid: true, + maxLength: null, + required: false, + requiredFieldErrorMessage: "", + domain: false, + options: [], + factory: {}, + valueDomain: null, + regExp: null, + requiredGrid: false, + haveOptions: [ + "suggest", + "checkbox", + "radio", + "dropdown" + ] + }, + initialize: function () { + var factoryValidator = { + "text": "requiredText", + "checkbox": "requiredCheckBox", + "checkgroup": "requiredCheckGroup", + "radio": "requiredRadioGroup", + "dropdown": "requiredDropDown", + "textarea": "requiredText", + "datetime": "requiredText", + "suggest": "requiredText", + "file": "requiredFile", + "grid": "requiredGrid" + }; + this.setFactory(factoryValidator); + this.checkDomainProperty(); + }, + setFactory: function (obj) { + this.set("factory", obj); + return this; + }, + checkDomainProperty: function () { + this.attributes.domain = ($.inArray(this.get("type"), this.get("haveOptions")) >= 0) ? true : false; + return this; + }, + verifyValue: function () { + var value = this.get('value'), + valueDomain = this.get('valueDomain'), + options = this.get('options'), + validator = this.attributes.factory[this.get("type").toLowerCase()], + regExp; + + this.set("valid", true); + delete this.get("message")[validator]; + if (this.get('type') == 'file') { + if (this.get('fileOnly') && this.get('fileOnly') !== null) { + if (this.get('fileOnly')['type'] == 'support') { + this.set('valid', false); + this.set('message', { + validator: this.get('fileOnly')['message'] + }); + return this; + } + if (this.get('fileOnly')['type'] == 'size') { + this.set('valid', false); + this.set('message', { + validator: this.get('fileOnly')['message'] + }); + return this; + } + } + } + if (this.get("required")) { + if (PMDynaform.core.Validators[validator].fn(value) === false) { + this.set("valid", false); + this.set("message", { + validator: this.get("requiredFieldErrorMessage") || + PMDynaform.core.Validators[validator].message + }); + return this; + } + } + if (this.get("type") === "text" || this.get("type") === "textarea") { + if (this.get("dataType") !== "" && value !== "") { + if (PMDynaform.core.Validators[this.get("dataType")] && + PMDynaform.core.Validators[this.get("dataType")].fn(value) === false) { + this.set("valid", false); + this.set("message", { + "validator": PMDynaform.core.Validators[this.get("dataType")].message + }); + return this; + } + } + + if (this.get("maxLength")) { + if (PMDynaform.core.Validators.maxLength.fn(value, parseInt(this.get("maxLength"))) === false) { + this.set("valid", false); + this.set("message", { + validator: PMDynaform.core.Validators.maxLength.message + " " + this.get("maxLength") + " characters" + }); + return this; + } + } + + if (this.get("regExp") && this.get("regExp").validate !== "") { + regExp = new RegExp(this.get("regExp").validate); + if (value.length > 0 && !regExp.test(value)) { + this.set("valid", false); + this.set("message", {validator: this.get("regExp").message}); + } else { + this.set('valid', true); + } + return this; + } + } + return this; + }, + /** + * verifies that meets validation having at least one row + * when the grid is required + * @returns {Validator} + */ + verifyGrid: function () { + if (this.get("required")) { + if (PMDynaform.core.Validators["requiredGrid"].fn(this.get("rowsNumber")) === false) { + this.set("valid", false); + this.set("message", { + validator: this.get("requiredFieldErrorMessage") || + PMDynaform.core.Validators["requiredGrid"].message + }); + } else { + this.set('valid', true); + } + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Validator", Validator); + +}()); +(function () { + var PanelModel = Backbone.Model.extend({ + defaults: { + items: [], + mode: "edit", + namespace: "pmdynaform", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("form"), + type: "form", + onBeforePrintHandler: null, + onAfterPrintHandler: null, + jsonOptions: { + id: null, + fields: {} + } + }, + getData: function () { + return { + type: this.get("type"), + name: this.get("name"), + variables: {} + } + }, + /** + * Update a json from a specific Field + * @param id + * @param jsonModel + */ + updateModel: function (id, jsonModel) { + this.browseFields(this.attributes, function (obj) { + if (obj.id === id) { + _.extend(obj, jsonModel); + } + }); + }, + /** + * Update the json model Options from fields in dynaform + * @param id + * @param jsonModel + */ + updateJsonOptions: function (id, jsonModel) { + if (this.attributes.jsonOptions.fields && id != "") { + this.attributes.jsonOptions.fields[id] = jsonModel + } + }, + /** + * Return the JSON definition Model + * @returns {*} + */ + getJsonOptions: function () { + var js = this.get("jsonOptions"); + js.id = this.attributes.items[0].id; + return js; + }, + /** + * Return the JSON definition Model + * @returns {*} + */ + getJson: function () { + var mod = this.toJSON(); + delete mod.items[0].parent; + return mod; + }, + /** + * Search a specific Field in Json Definition + * @param json + * @param callbackAction + * @returns {PanelModel} + */ + browseFields: function (json, callbackAction) { + var that = this; + if ((_.isObject(json) || _.isArray(json)) && _.isFunction(callbackAction)) { + _.mapObject(json, function (value, key, obj) { + if (key === "type" && key != "parent" && obj.hasOwnProperty(key)) { + if (_.isObject(obj) && _.has(obj, "id") && _.has(obj, "type")) { + callbackAction(obj); + } + } + if (_.isObject(value) && obj.hasOwnProperty(key) && key != "parent") { + that.browseFields(value, callbackAction); + } + }); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Panel", PanelModel); + +}()); +(function() { + var FormPanel = Backbone.Model.extend({ + defaults: { + action: "", + autocomplete: "on", + script: {}, + data: [], + items: [], + name: 'PMDynaform-form', + method: "get", + namespace: "pmdynaform", + target: null, + type: "panel", + inputDocuments: {}, + printable: false, + project: null, + /** + * @param {PMDynaform.util.DependentsFieldManager}, dependentsManager: Dependent field event handler + */ + dependentsManager: null, + /** + * @param {object}, dependencyRelations: Dependent field relation + */ + dependencyRelations: {}, + /** + * @param {object}, fields: Fields that belong to this form + */ + fields: {}, + /** + * @param {PMDynaform.util.ArrayList}, subForms: Set of subforms + */ + subForms: null, + visited: [], + rootField: null + }, + getData: function() { + return { + type: this.get("type"), + action: this.get("action"), + method: this.get("method") + } + }, + /** + * initialize the model of the Form and Reset parameters + * @chainable + */ + initialize: function() { + this.set("dependencyRelations", {}); + this.set("fields", {}); + this.set("subForms", new PMDynaform.util.ArrayList()); + this.set("dependentsManager", null); + this.set("dependentsManager", + new PMDynaform.util.DependentsFieldManager({ + form: this + })); + return this; + }, + /** + * This method closes this form, stand alone version for mobile + * @returns {FormPanel} + */ + close: function() { + var project = this.get("project"), + windowMain; + if (project) { + if (project.isMobile() && project.requestManager) { + project.requestManager.closeForm(); + } else { + if (!project.isPreview) { + windowMain = this.getMainWindowFrame(); + windowMain.parent.location.reload(true); + } + } + } + return this; + }, + /** + * Get the main window + * @returns {Window} + */ + getMainWindowFrame: function() { + var windowMain = window.parent; + while (windowMain && windowMain.frameElement && windowMain.frameElement["name"] !== "casesFrame") { + windowMain = windowMain.parent; + } + return windowMain; + }, + /** + * addField, Register a new field created in this form + * @chainable + */ + addField: function(field, key) { + var fields; + fields = this.get("fields"); + if (field && key) { + fields[key] = field; + } + return this; + }, + /** + * dispachEvents, Executes logged events when a field that has dependents changes its value + * @chainable + */ + dispachEvents: function(nameToRegisterEvent, target, data) { + this.get("dependentsManager").notify({ + registrationName: nameToRegisterEvent, + target: target, + data: data + }); + return this; + }, + /** + * addEvent, Records a new dependent field event + * @chainable + */ + addEvent: function(field, callback, target) { + this.get("dependentsManager").addEvent(field, callback, target); + return this; + }, + /** + * detachRegisteredEvents, Disable Events Logged on the Dependent Field Handler + * @chainable + */ + detachRegisteredEvents: function(field, target) { + this.get("dependentsManager").removeEvent(field, target); + return this; + }, + /** + * Retrieves the options when a field is dependent and needs the options for drawing, + * this method is currently working on radio type and checkgroup + */ + loadSqlOptionsInFields: function() { + var item, + relations = this.get("dependencyRelations"), + i, + dependents, + dependent, + optionsSql; + for (item in relations) { + if (relations.hasOwnProperty(item)) { + dependents = relations[item]; + for (i = 0; i < dependents.length; i += 1) { + dependent = dependents[i]; + optionsSql = dependent.get("optionsSql"); + if (!_.isEmpty(dependent.get("sql")) && _.isArray(optionsSql) + && _.isEmpty(optionsSql) && typeof dependent.loadRemotesOptions === "function") { + dependent.loadRemotesOptions(); + } + } + } + } + return this; + }, + /** + * registerNewDependencyRelation, Prepares to Record Dependent Field for a Field That Has Dependents + * @chainable + */ + registerNewDependencyRelation: function(name) { + var relations; + relations = this.get("dependencyRelations"); + if (!relations.hasOwnProperty(name)) { + relations[name] = []; + } + return this; + }, + /** + * registerNewDependent,Registers a new dependent field + * @chainable + */ + registerNewDependent: function(dependency, dependent) { + var relations; + relations = this.get("dependencyRelations"); + if (relations.hasOwnProperty(dependency)) { + relations[dependency].push(dependent); + } + return this; + }, + /** + * setAppData: Sets the data to the form, set _label too + * @param data {object} Set of valid data for the form + */ + setAppData: function(data) { + var dependency, + key, + field, + dataForDependent; + for (key in data) { + if (data.hasOwnProperty(key)) { + field = this.getField(key); + if (field) { + if (this.needsValueAndLabelToSetData(field)) { + field.setAppData({ + value: data[key], + label: data[key + "_label"] + }); + } else { + if (field.isDependent && field.isDependent()) { + dataForDependent = this.dependentFilterData(field.get("dependency"), data); + } + field.setAppData(data[key], dataForDependent); + } + } + } + } + return this; + }, + /** + * needsValueAndLabelToSetData, Evaluates if it is necessary to send data with value and label + * @param field {object}, the efected field + * @returns {boolean} result + */ + needsValueAndLabelToSetData: function(field) { + var needs = ["suggest", "file", "dropdown"], + type, + mode; + if (field) { + type = field.get("type"); + mode = field.get("mode"); + type = mode === "view" ? field.get("originalType") : type; + if (needs.indexOf(type) > -1) { + return true; + } + } + return false; + }, + + /** + * dependentFilterData, If the field is dependent, construct the data by + * performing the search of the values in the appdata + * @param dependency {array}, Values on which it depends + * @param appData {object}, Set of valid data for the form + * @returns newAppData {object} + */ + dependentFilterData: function(dependency, appData) { + var newAppData = {}, + i, + item; + if (_.isArray(dependency)) { + for (i = 0; i < dependency.length; i += 1) { + item = dependency[i]; + if (appData.hasOwnProperty(item)) { + newAppData[item] = appData[item]; + } + } + } + return newAppData; + }, + /** + * getField, Gets a form field from a key, this can be variable, name or id. + * @param name {string}, Identifier, can be variable, name or id + * @returns item {object} + */ + getField: function(name) { + var fields = this.get("fields"), + subformModel, + subForms, + i, + item = fields[name] || null; + for (i = 0; i < this.get("subForms").getSize(); i += 1) { + subForms = this.get("subForms").get(i); + subformModel = subForms.model.get("formModel"); + fields = subformModel.get("fields"); + if (fields && fields[name]) { + item = fields[name]; + } + } + return item; + }, + /** + * Validates if a subForm exists into of the mainForm + * @param id + * @returns {boolean} + */ + isSubForm: function (id) { + var i, + view, + response = false, + subForms = this.get("subForms"), + size = subForms.getSize(); + if (id) { + for (i = 0; i < size; i += 1) { + view = subForms.get(i); + if (view.model.get("id") === id) { + response = true; + break; + } + } + } + return response; + }, + /** + * Walks by the field dependency tree (recursive); + * @param {*} name + * @param {*} callbackName + * @chainable + */ + walkByDependencyTree: function(name, callbackName) { + var relations = this.get("dependencyRelations"), + dependents = relations[name]; + this.visited.push(name); + if(dependents && dependents.length) { + for (i = 0; i < dependents.length; i += 1) { + dependent = dependents[i]; + if (dependent.get("view") && dependent.get("view")[callbackName] + && typeof dependent.get("view")[callbackName] === 'function') { + dependent.get("view")[callbackName](); + } + } + } + }, + /** + * Shows the dependent field spinners + * @param {*} name field's name + * @chainable + */ + enableDependencySpinners: function(name) { + this.walkByDependencyTree(name, "switchControlBySpinner"); + return this; + }, + /** + * Hides the dependent field spinners + * @param {*} name field's name + * @chainable + */ + disableDependencySpinners: function(name) { + this.walkByDependencyTree(name, "switchSpinnerByControl"); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.FormPanel", FormPanel); +}()); + +(function () { + var FieldModel = Backbone.Model.extend({ + defaults: { + colSpan: 12, + id: PMDynaform.core.Utils.generateID(), + label: "Untitled", + name: PMDynaform.core.Utils.generateName(), + value: "", + nameGridColum: null, + text: "", + data: null, + _hidden: false, + /** + * @param {object}: dataForDependent, Stores data to eject dependent field service + */ + dataForDependent: {}, + /** + * toDraw: When this property change, the view is redrawn + * @member {boolean} + */ + toDraw: false, + /** + * @param {object}: stores the request ajax instance + */ + xhr: null, + /** + * @param {boolean}: stores the field loading status. + */ + tabIndex: "", + ariaLabel: "", + isSync: false + }, + eventsMobile: { + EXECUTE_QUERY: "dependentField/executeQuery", + SYNC_EXECUTE_QUERY: "dependentField/syncExecuteQuery" + }, + initialize: function (options) { + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + }, + + /** + * Generate default data object + * @param defaultValue + * @param value + * @param data + * @returns {{label: string, value: string}|*} + */ + initData: function (defaultValue, value, data) { + var auxData, + auxValue = "0", + auxLabel = "false", + options = this.get("options"), + i; + + if (typeof data === "object") { + if (data.hasOwnProperty("value") && data["value"] !== "") { + if (this.get("optionsToFalse").indexOf(data["value"]) > -1) { + auxValue = "0"; + } else { + if (this.get("optionsToTrue").indexOf(data["value"]) > -1) { + auxValue = "1"; + } + } + } else { + if (typeof defaultValue === "boolean") { + if (this.get("optionsToFalse").indexOf(defaultValue) > -1) { + auxValue = "0"; + } else { + if (this.get("optionsToTrue").indexOf(defaultValue) > -1) { + auxValue = "1"; + } + } + } + } + } + for (i = 0; i < options.length; i += 1) { + if (options[i].value === auxValue) { + auxLabel = options[i].label; + break; + } + } + auxData = { + label: auxLabel, + value: auxValue + }; + return auxData; + }, + defineModelEvents: function () { + this.on("change:text", this.onChangeText, this); + this.on("change:options", this.onChangeOptions, this); + this.on("change:data", this.onChangeData, this); + return this; + }, + /** + * onChangeData: This event is executed by modifying the data property + * @chainable + */ + onChangeData: function () { + this.setDataToSuggest(); + this.executeDependentsEvents(); + }, + /** + * onChangeData: Executes the dependency event if it is registered in the + * "PMDynaform.util.DependentsFieldManager" in the form + * @chainable + */ + executeDependentsEvents: function () { + var form = this.get("form"), + name = this.evaluateName(), + data = this.get("data"); + if (form) { + // creates visited to register all nodes that was walked + form.visited = []; + // here enables the dependency spinner for all dependent fields + this.enableDependencySpinners(); + // register the dependency events + form.dispachEvents("dependency:" + this.getNameToRegisterEvent(name), name, data); + } + return this; + }, + /** + * setDataToSuggest: PMDynaform.model.Suggest type fields are not executed in form-dependent + * field events, but the dataForDependent property must be updated to be used in suggest + * @chainable + */ + setDataToSuggest: function () { + var form = this.get("form"), + dependent, + dependentsRelation, + dependents, + i, + data = {}, + name = this.evaluateName(); + if (this.get("group") === "grid") { + name = name + ":" + this.attributes.keyEvent; + } + if (form) { + dependentsRelation = this.get("form").get("dependencyRelations") || {}; + if (dependentsRelation.hasOwnProperty(name)) { + dependents = dependentsRelation[name]; + for (i = 0; i < dependents.length; i += 1) { + dependent = dependents[i]; + if (dependent.get("type") === "suggest") { + data[this.evaluateName()] = this.get("data")["value"] || ""; + dependent.set("dataForDependent", data); + dependent.set("value", ""); + dependent.get("view").$el.find(".select2-selection__rendered").text(""); + $(dependent.get('view').getIdSelect()).empty(); + } + } + } + } + return this; + }, + /** + * evaluateName: Evaluates the valid name either a cell or a regular field + * @chainable + */ + evaluateName: function () { + var parent = this.get("group"), + name = ""; + if (parent === "form") { + name = this.get("variable") || this.get("id"); + } else if (parent === "grid") { + name = this.get("columnName") || this.get("columnId"); + } + return name; + }, + /** + * getNameToRegisterEvent: Creates an identifier to register in the event handler of form-dependent fields + * @param variable {string}: Is the base name to create a new key + * @returns {string}, the new key for registered event + */ + getNameToRegisterEvent: function (variable) { + var result = "", + row = this.get("row"), + parent = this.get("parent"); + if (parent.get("type") === "form") { + result = variable; + } else if (parent.get("type") === "grid") { + result = variable + ":" + this.get("keyEvent"); + } + return result; + }, + onChangeValue: function (attrs, item) { + var data; + data = this.findOption(item, "value"); + if (data) { + this.set("data", data); + } else { + this.set("data", { value: "", label: "" }); + } + this.set("text", this.get("data")["label"]); + return this; + }, + onChangeText: function (attrs, item) { + var data; + data = this.findOption(item, "label"); + if (data) { + this.set("data", data); + } else { + this.set("data", { value: "", label: "" }); + } + this.set("value", this.get("data")["value"]); + return this; + }, + getData: function () { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + }, + /** + * Get Control HTML default + * @returns {Array} + */ + getControl: function () { + return this.get("mode") !== "edit" ? undefined : []; + }, + parseLabel: function () { + var currentLabel = this.get("label"), + maxLength = this.get("maxLengthLabel"), + itemsLabel, + k, + parsed = false; + + itemsLabel = currentLabel.split(/\s/g); + for (k = 0; k < itemsLabel.length; k += 1) { + if (itemsLabel[k].length > maxLength) { + parsed = true; + } + } + if (parsed) { + this.set("tooltipLabel", currentLabel); + this.set("label", currentLabel.substr(0, maxLength - 4) + "..."); + } + return this; + }, + validate: function (attrs) { + this.set("value", this.get("value")); + this.set("label", this.get("label")); + return this; + }, + getEndpointVariable: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + } + } + } + + return endPointFixed; + }, + setLocalOptions: function () { + if (this.get("options")) { + this.set("localOptions", this.get("options")); + } + return this; + }, + setRemoteOptions: function () { + if (this.get("remoteOptions")) { + this.set("remoteOptions", this.get("optionsSql")); + } + return this; + }, + mergeOptionsSql: function () { + var options = []; + if (this.get("options") && this.get("optionsSql")) + options = this.get("localOptions").concat(this.get("optionsSql")); + this.set("options", options); + return this; + }, + /** + * This function add value from a field in a field formula + * @param formulator + * @returns {FieldModel} + */ + addFormulaTokenAssociated: function (formulator) { + if (formulator instanceof PMDynaform.core.Formula) { + formulator.addTokenValue(this.get("id"), this.get("value")); + } + return this; + }, + /** + * This function update the field with formula + * @param field + * @returns {FieldModel} + */ + updateFormulaValueAssociated: function (field) { + var resultField = field.model.get("formulator").evaluate(); + field.model.set("value", resultField); + return this; + }, + /** + * findOption(): This method find and return a option in the array options if exist + * @param value = the filter in the search "value", "label" or "defaultValue" + * @param criteria = is the criteria in the find the option should be a "value", "label" + * @returns {boolean||object} + */ + findOption: function (value, criteria) { + var i, + index = -1, + options, + option = null; + if (_.isArray(this.get("options"))) { + options = this.get("options").slice(0); + if (_.isArray(options) && value !== undefined && typeof criteria === "string") { + for (i = 0; i < options.length; i += 1) { + if (options[i] && (value == options[i][criteria])) { + option = _.extend({}, options[i]); + index = i; + break; + } + } + } + } + if (option !== null) { + option['index'] = index; + } + return option; + }, + /** + * findOptions(): This method find and return multiple options in the array options if exist the values + * @param values = the filter in the search "value" or "label" + * @param criteria = is the criteria in the find the option should be a "value" or "label" + * @returns {Array} + */ + findOptions: function (values, criteria) { + var options = this.get("options"), + filterOptions = []; + if (typeof values === "string") { + values = values.split('|'); + } + if (_.isArray(values) && _.isArray(options) && typeof criteria === "string") { + filterOptions = options.filter(function (item) { + index = _.find(values, function (num) { + return item[criteria] == num; + }); + if (index) { + return item; + } + }); + } + return filterOptions; + }, + /** + * returnOptionsData(): This build the data for the multiple options + * @param options: this options the field + * @returns {{value: Array, label: Array}} + */ + returnOptionsData: function (options) { + var i, + labels = [], + values = [], + options = options || this.get("options"); + if (_.isArray(options)) { + for (i = 0; i < options.length; i += 1) { + values.push(options[i]["value"]); + labels.push(options[i]["label"]); + } + } + return { + value: values, + label: labels + } + }, + /** + * Executes the dependency query + * using the data parameters + * @param {*} data necessary data for execute the query + * @returns {FieldModel} + */ + executeQuery: function (data) { + var project = this.get("project"), + that = this, + xhr; + if (PMDynaform.core.ProjectMobile) { + data.var_name = this.get("variable") || ""; + data.sql = this.get("sql") || ""; + project.requestManager.channelEvents( + { + handler: this.get("id"), + type: this.eventsMobile.EXECUTE_QUERY, + bridge: true, + data: data, + callback: function (response) { + if (response.error) { + that.afterExecuteQueryFail(response.error); + } else { + that.afterExecuteQuery(response); + } + } + }); + } else if (project) { + this._abortRequest(); + xhr = project.webServiceManager.executeQuery(data, this.get("variable") || "", this); + this.set({ xhr: xhr }); + } + return this; + }, + /** + * preparePostData, Prepares the additional data to execute the service to execute the query + * @returns data {object} + */ + preparePostData: function () { + var data = {}, + parent = this.get("parent"), + project = this.get("project"); + if (this.get("group") === "grid") { + data["field_id"] = this.get("columnName"); + } else { + data["field_id"] = this.get("id"); + } + if (project) { + data["dyn_uid"] = project.getDynUID() || ""; + } else { + data["dyn_uid"] = ""; + } + return data; + }, + /** + * isDependent, Verify if a field is dependent + * @returns dependent {boolean} + */ + isDependent: function () { + var dependent = false, + parentDependents = this.get("dependency"); + if (_.isArray(parentDependents) && parentDependents.length > 0) { + dependent = true; + } + return dependent; + }, + /** + * formatResponse, Valid query execution service response + * @param response {array}: a set of options + * @returns response {array} + */ + formatResponse: function (response) { + var k, + remoteOpt = []; + if (_.isArray(remoteOpt)) { + for (k = 0; k < response.length; k += 1) { + remoteOpt.push({ + value: response[k].value, + label: response[k].text || response[k].label || "" + }); + } + } + return remoteOpt; + }, + canExecuteQuery: function () { + var sql = this.get('sql'), + flag = false, + executeQueryMap = ["database", "datavariable"]; + if (sql && sql.length) { + flag = true; + } else { + //verify by datasource property + flag = executeQueryMap.indexOf(this.get('datasource').toLowerCase()) > -1 ? true : false; + } + return flag; + }, + getValue: function () { + var value = ""; + return value; + }, + /** + * Trigger a event bus an specific topic [onChange/target/source] + * @param topic + */ + triggerTopicEventBus: function (topic) { + var that = this, + deps = this.get("dependency"); + _.forEach(deps, function (dep) { + PMDynaform.EventBus.trigger(topic + "/" + dep + "/" + that.get("id"), ""); + }); + }, + + /** + * _dependentFieldEventRegister, if this component depends on another field, the dependence is recorded + * @param sql {string}, Is the query, of which is made the search of the + * variables on which this component depends + * @chainable + */ + _dependentFieldEventRegister: function (sql) { + var parse, + result, + variable = null, + form = this.get("form"), + parent = this.get("parent"), + hasMultipleDependents = false, + relationName; + this.set("dependency", []); + parse = /\@(?:([\@\%\#\=\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/g; + while ((result = parse.exec(sql)) !== null) { + if (_.isArray(result) && result.length) { + variable = result[0]; + variable = variable.substring(2, variable.length); + + relationName = parent.get("type") === "grid" ? variable + ":" + this.attributes.keyEvent : variable; + form.get("dependentsManager").registerNewDependencyRelation(relationName); + form.get("dependentsManager").registerNewDependent(relationName, this); + form.get("dependentsManager").registerDependency(this.get("id"), variable); + } + } + return this; + }, + /** + * Add event to the dependency manager + * updated de dependency model property + * @param {*} variable + * @chainable + */ + addEvent: function (variable) { + var form = this.get("form"), + prefix = "dependency:"; + if (_.indexOf(this.get("dependency"), variable) === -1) { + this.get("dependency").push(variable); + form.get("dependentsManager").addEvent(prefix + this.getNameToRegisterEvent(variable), this.dependentHandler, this); + } + return this; + }, + + /** + * Dependent field handler, this callback is instanced for all register event, + * and runs when the event logged in PMDynaform.util.DependentsFieldManager + * param info {object}, Is the field information on which this component depends + */ + dependentHandler: function (info) { + var data = this.buildDataForQuery(info); + this.executeQuery(data); + return this; + }, + /** + * getDependentsManager, Retrieves form-dependent field handler + * @returns {PMDynaform.util.DependentsFieldManager} + */ + getDependentsManager: function () { + var form; + form = this.get("form"); + if (form) { + return this.get("form").get("dependentsManager"); + } + return null; + }, + /* + * buildDataForQuery, Builds the data needed to execute the query correctly + * @param info {object}: the initial data of the fields on which this component depends + * @returns dataForDependent {object} + */ + buildDataForQuery: function (info) { + var dependency = this.get("dependency"), + i, + dataForDependent = this.get("dataForDependent"), + dependencyItem, + form = this.get("form"), + parent = this.get("parent"); + if (!_.isEmpty(info)) { + dataForDependent[info.target] = info.data.value; + } + if (_.isArray(dependency)) { + for (i = 0; i < dependency.length; i += 1) { + if (parent && parent.get("type") === "grid") { + dependencyItem = parent.findCellInRow(this.get("row"), dependency[i]); + } else { + dependencyItem = form.get("fields")[dependency[i]]; + } + if (dependencyItem) { + dataForDependent[dependency[i]] = dependencyItem.get("data").value; + } + } + } + _.extend(dataForDependent, this.preparePostData()); + return dataForDependent; + }, + /* + * Abstract method + */ + afterExecuteQuery: function (response) { + }, + /* + * Abstract method fires whe the service fails + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(); + form.visited = []; + if (this.get("view")) { + this.get("view").switchSpinnerByControl(); + } + if (response !== "abort") { + this.get("view").showQueryFailMessage(); + } + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + return this; + }, + /* + * Abstract method, + */ + onChangeOptions: function () { + }, + /* mergeRemoteOptions, merge the options obtained from the query to the + * service with the local options + * @chainable + */ + mergeRemoteOptions: function (remoteOptions) { + var k, + remoteOpt = [], + localOpt = this.get("localOptions") || [], + options; + for (k = 0; k < remoteOptions.length; k += 1) { + remoteOpt.push({ + value: remoteOptions[k].value, + label: remoteOptions[k].text || remoteOptions[k].label || "" + }); + } + this.set("optionsSql", remoteOpt); + options = localOpt.concat(remoteOpt); + this.set("options", options); + if (this.get("view") && this.get("view").firstLoad) { + this.trigger('change:options', this.model, options); + } + this.updateJsonOptions({ + optionsSql: remoteOpt + }); + return this; + }, + + /** + * Update json in Project Model + * @param json + */ + updateJsonOptions: function (json) { + var prj = this.get("project"); + if (prj && prj.updateModel) { + prj.updateModel(this.get("id"), json); + } + }, + /** + * Load the remote options by referring to the service + * Anonymous function + */ + loadRemotesOptions: function () { + var data; + data = this.buildDataForQuery({}); + dependentsManager = this.getDependentsManager(); + this.executeQuery(data); + return this; + }, + /** + * Retrieves the domain of the component based on + * the fields on which it depends + * @param data {object}: Data of the fields on which it depends + */ + recoveryRemoteOptions: function (data) { + var dependentsManager = this.getDependentsManager(), + response; + if (typeof data === "object" && _.isArray(this.get("options"))) { + _.extend(data, this.preparePostData()); + this.executeQuery(data); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (value) { + var data; + data = this.findOption(value, "value"); + if (!data) { + data = { + value: value, + label: value + } + } + this.set({ "data": data }, { silent: true }); + this.set({ "value": value }, { silent: true }); + this.set("toDraw", true); + return this; + }, + /** + * Return the name and name_label data + * @param value + * @returns {object} + */ + getAppData: function () { + var dt = this.get("data") || {}, + data = {}; + data[this.get("name")] = dt.value; + data[this.get("name") + "_label"] = dt.label; + return data; + }, + /** + * selectedOptions, Select an option from the option set + * @param criteria {string}, is the search criterion + * @param values {array}, set of the values + */ + selectedOptions: function (criteria, values) { + var options = this.get("options"), + i, + validCriteria = ["index", "value", "label"]; + if (_.isArray(options) && validCriteria.indexOf(criteria) > -1) { + for (i = 0; i < options.length; i += 1) { + if (criteria === "index" && values.indexOf(i) > -1) { + options[i].selected = true; + } else if (values.indexOf(options[i][criteria]) > -1) { + options[i].selected = true; + } else { + options[i].selected = false; + } + } + } + return this; + }, + /** + * Abort the current ajax request + * @returns {DropdownModel} + */ + _abortRequest: function () { + if (this.get("xhr")) { + this.get("xhr").abort(); + } + return this; + }, + /** + * Enable the dependent field spinner + * @chainable + */ + enableDependencySpinners: function () { + var name = this.evaluateName(), + form = this.get("form"); + form.visited = []; + form.enableDependencySpinners(this.getNameToRegisterEvent(name)); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Field", FieldModel); +}()); + +(function () { + var FieldModel = Backbone.Model.extend({ + defaults: { + colSpan: 12, + id: PMDynaform.core.Utils.generateID(), + label: "Untitled", + name: PMDynaform.core.Utils.generateName(), + value: "", + nameGridColum: null, + text: "", + data: null, + _hidden: false, + /** + * @param {object}: dataForDependent, Stores data to eject dependent field service + */ + dataForDependent: {}, + /** + * toDraw: When this property change, the view is redrawn + * @member {boolean} + */ + toDraw: false, + /** + * @param {object}: stores the request ajax instance + */ + xhr: null, + tabIndex: "", + ariaLabel: "", + isSync: false, + isDependent: false + }, + eventsMobile: { + EXECUTE_QUERY: "dependentField/executeQuery", + SYNC_EXECUTE_QUERY: "dependentField/syncExecuteQuery" + }, + initialize: function (options) { + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + }, + /** + * Generate default data object + * @param defaultValue + * @param value + * @param data + * @returns {{label: string, value: string}|*} + */ + initData: function (defaultValue, value, data) { + var auxData, + auxValue = "0", + auxLabel = "false", + options = this.get("options"), + i; + + if (typeof data === "object") { + if (data.hasOwnProperty("value") && data["value"] !== "") { + if (this.get("optionsToFalse").indexOf(data["value"]) > -1) { + auxValue = "0"; + } else { + if (this.get("optionsToTrue").indexOf(data["value"]) > -1) { + auxValue = "1"; + } + } + } else { + if (typeof defaultValue === "boolean") { + if (this.get("optionsToFalse").indexOf(defaultValue) > -1) { + auxValue = "0"; + } else { + if (this.get("optionsToTrue").indexOf(defaultValue) > -1) { + auxValue = "1"; + } + } + } + } + } + for (i = 0; i < options.length; i += 1) { + if (options[i].value === auxValue) { + auxLabel = options[i].label; + break; + } + } + auxData = { + label: auxLabel, + value: auxValue + }; + return auxData; + }, + /** + * Define events (Deprecated in the new classes) + */ + defineModelEvents: function () { + this.on("change:text", this.onChangeText, this); + this.on("change:options", this.onChangeOptions, this); + this.on("change:data", this.onChangeData, this); + return this; + }, + /** + * onChangeData: This event is executed by modifying the data property + * @chainable + */ + onChangeData: function () { + this.setDataToSuggest(); + this.executeDependentsEvents(); + }, + /** + * onChangeData: Executes the dependency event if it is registered in the + * "PMDynaform.util.DependentsFieldManager" in the form + * @chainable + */ + executeDependentsEvents: function () { + var form = this.get("form"), + name = this.evaluateName(), + data = this.get("data"); + if (form) { + // creates visited to register all nodes that was walked + form.visited = []; + // here enables the dependency spinner for all dependent fields + this.enableDependencySpinners(); + // register the dependency events + form.dispachEvents("dependency:" + this.getNameToRegisterEvent(name), name, data); + } + return this; + }, + /** + * setDataToSuggest: PMDynaform.model.Suggest type fields are not executed in form-dependent + * field events, but the dataForDependent property must be updated to be used in suggest + * @chainable + */ + setDataToSuggest: function () { + var form = this.get("form"), + dependent, + dependentsRelation, + dependents, + i, + data = {}, + name = this.evaluateName(); + if (this.get("group") === "grid") { + name = name + ":" + this.attributes.keyEvent; + } + if (form) { + dependentsRelation = this.get("form").get("dependencyRelations") || {}; + if (dependentsRelation.hasOwnProperty(name)) { + dependents = dependentsRelation[name]; + for (i = 0; i < dependents.length; i += 1) { + dependent = dependents[i]; + if (dependent.get("type") === "suggest") { + data[this.evaluateName()] = this.get("data")["value"] || ""; + dependent.set("dataForDependent", data); + dependent.set("value", ""); + dependent.get("view").$el.find(".select2-selection__rendered").text(""); + $(dependent.get('view').getIdSelect()).empty(); + } + } + } + } + return this; + }, + /** + * evaluateName: Evaluates the valid name either a cell or a regular field + * @chainable + */ + evaluateName: function () { + var parent = this.get("group"), + name = ""; + if (parent === "form") { + name = this.get("variable") || this.get("id"); + } else if (parent === "grid") { + name = this.get("columnName") || this.get("columnId"); + } + return name; + }, + /** + * getNameToRegisterEvent: Creates an identifier to register in the event handler of form-dependent fields + * @param variable {string}: Is the base name to create a new key + * @returns {string}, the new key for registered event + */ + getNameToRegisterEvent: function (variable) { + var result = "", + row = this.get("row"), + parent = this.get("parent"); + if (parent.get("type") === "form") { + result = variable; + } else if (parent.get("type") === "grid") { + result = variable + ":" + this.get("keyEvent"); + } + return result; + }, + /** + * Handler for change value (Deprecated in the new classes) + * @param {*} attrs + * @param {*} item + * @returns {FieldModel} + */ + onChangeValue: function (attrs, item) { + var data; + data = this.findOption(item, "value"); + if (data) { + this.set("data", data); + } else { + this.set("data", { value: "", label: "" }); + } + this.set("text", this.get("data")["label"]); + return this; + }, + /** + * Handler for change text property (Deprecated in the new classes) + * @param {*} attrs + * @param {*} item + * @returns {FieldModel} + */ + onChangeText: function (attrs, item) { + var data; + data = this.findOption(item, "label"); + if (data) { + this.set("data", data); + } else { + this.set("data", { value: "", label: "" }); + } + this.set("value", this.get("data")["value"]); + return this; + }, + /** + * Return data with value + * @returns {Object} + */ + getData: function () { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + }, + /** + * Get Control HTML default + * @returns {Array} + */ + getControl: function () { + return this.get("mode") !== "edit" ? undefined : []; + }, + /** + * Function base for others models + * @param {*} attrs + * @returns {FieldModel} + */ + validate: function (attrs) { + return this; + }, + /** + * Return the url endpoint + * @param {*} urlObj + * @returns {String} + */ + getEndpointVariable: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + } + } + } + + return endPointFixed; + }, + /** + * Set the localoptions (Array hardcode from designer) + * @returns {FieldModel} + */ + setLocalOptions: function () { + if (this.get("options")) { + this.set("localOptions", this.get("options")); + } + return this; + }, + /** + * Set the options from sql query + * @returns {FieldModel} + */ + setRemoteOptions: function () { + if (this.get("remoteOptions")) { + this.set("remoteOptions", this.get("optionsSql")); + } + return this; + }, + /** + * Merge local options with the sql options + * @returns {FieldModel} + */ + mergeOptionsSql: function () { + var options = []; + if (this.get("options") && this.get("optionsSql")) + options = this.get("localOptions").concat(this.get("optionsSql")); + this.set("options", options); + return this; + }, + /** + * This function add value from a field in a field formula + * @param formulator + * @returns {FieldModel} + */ + addFormulaTokenAssociated: function (formulator) { + if (formulator instanceof PMDynaform.core.Formula) { + formulator.addTokenValue(this.get("id"), this.get("data")["value"]); + } + return this; + }, + /** + * This function update the field with formula + * @param field + * @returns {FieldModel} + */ + updateFormulaValueAssociated: function (field) { + var resultField = field.model.get("formulator").evaluate(); + field.model.set("data", { + value: resultField, + label: resultField + }); + return this; + }, + /** + * findOption(): This method find and return a option in the array options if exist + * @param value = the filter in the search "value", "label" or "defaultValue" + * @param criteria = is the criteria in the find the option should be a "value", "label" + * @returns {boolean||object} + */ + findOption: function (value, criteria) { + var i, + index = -1, + options, + option = null; + if (_.isArray(this.get("options"))) { + options = this.get("options").slice(0); + if (_.isArray(options) && value !== undefined && typeof criteria === "string") { + for (i = 0; i < options.length; i += 1) { + if (options[i] && (value == options[i][criteria])) { + option = _.extend({}, options[i]); + index = i; + break; + } + } + } + } + if (option !== null) { + option['index'] = index; + } + return option; + }, + /** + * findOptions(): This method find and return multiple options in the array options if exist the values + * @param values = the filter in the search "value" or "label" + * @param criteria = is the criteria in the find the option should be a "value" or "label" + * @returns {Array} + */ + findOptions: function (values, criteria) { + var options = this.get("options"), + filterOptions = []; + if (typeof values === "string") { + values = values.split('|'); + } + if (_.isArray(values) && _.isArray(options) && typeof criteria === "string") { + filterOptions = options.filter(function (item) { + index = _.find(values, function (num) { + return item[criteria] == num; + }); + if (index) { + return item; + } + }); + } + return filterOptions; + }, + /** + * returnOptionsData(): This build the data for the multiple options + * @param options: this options the field + * @returns {{value: Array, label: Array}} + */ + returnOptionsData: function (options) { + var i, + labels = [], + values = [], + options = options || this.get("options"); + if (_.isArray(options)) { + for (i = 0; i < options.length; i += 1) { + values.push(options[i]["value"]); + labels.push(options[i]["label"]); + } + } + return { + value: values, + label: labels + } + }, + /** + * Executes the dependency query + * using the data parameters + * @param {*} data necessary data for execute the query + * @returns {FieldModel} + */ + executeQuery: function (data) { + var project = this.get("project"), + that = this, + xhr; + if (PMDynaform.core.ProjectMobile) { + data.var_name = this.get("variable") || ""; + data.sql = this.get("sql") || ""; + project.requestManager.channelEvents( + { + handler: this.get("id"), + type: this.eventsMobile.EXECUTE_QUERY, + bridge: true, + data: data, + callback: function (response) { + if (response.error) { + that.afterExecuteQueryFail(response.error); + } else { + that.afterExecuteQuery(response); + } + } + }); + } else if (project) { + this._abortRequest(); + xhr = project.webServiceManager.executeQuery(data, this.get("variable") || "", this); + this.set({ xhr: xhr }); + } + return this; + }, + /** + * preparePostData, Prepares the additional data to execute the service to execute the query + * @returns data {object} + */ + preparePostData: function () { + var data = {}, + parent = this.get("parent"), + project = this.get("project"); + if (this.get("group") === "grid") { + data["field_id"] = this.get("columnName"); + } else { + data["field_id"] = this.get("id"); + } + if (project) { + data["dyn_uid"] = project.getDynUID() || ""; + } else { + data["dyn_uid"] = ""; + } + return data; + }, + /** + * isDependent, Verify if a field is dependent + * @returns dependent {boolean} + */ + isDependent: function () { + var dependent = false, + parentDependents = this.get("dependency"); + if (_.isArray(parentDependents) && parentDependents.length > 0) { + dependent = true; + } + return dependent; + }, + /** + * Verify if the model contains sql property + * @returns {boolean} + */ + canExecuteQuery: function () { + var sql = this.get('sql'), + flag = false, + executeQueryMap = ["database", "datavariable"]; + if (sql && sql.length) { + flag = true; + } else { + //verify by datasource property + flag = executeQueryMap.indexOf(this.get('datasource').toLowerCase()) > -1 ? true : false; + } + return flag; + }, + /** + * Abstract method + * @returns {String} + */ + getValue: function () { + var value = ""; + return value; + }, + /** + * Trigger a event bus an specific topic [onChange/target/source] + * @param topic + */ + triggerTopicEventBus: function (topic) { + var that = this, + deps = this.get("dependency"); + _.forEach(deps, function (dep) { + PMDynaform.EventBus.trigger(topic + "/" + dep + "/" + that.get("id"), ""); + }); + }, + + /** + * _dependentFieldEventRegister, if this component depends on another field, the dependence is recorded + * @param sql {string}, Is the query, of which is made the search of the + * variables on which this component depends + * @chainable + */ + _dependentFieldEventRegister: function (sql) { + var parse, + result, + variable = null, + form = this.get("form"), + parent = this.get("parent"), + hasMultipleDependents = false, + relationName; + this.set("dependency", []); + parse = /\@(?:([\@\%\#\=\?\!Qq])([a-zA-Z\_]\w*)|([a-zA-Z\_][\w\-\>\:]*)\(((?:[^\\\\\)]*?)*)\))/g; + while ((result = parse.exec(sql)) !== null) { + if (_.isArray(result) && result.length) { + variable = result[0]; + variable = variable.substring(2, variable.length); + relationName = parent.get("type") === "grid" ? form.getField(variable) ? variable : variable + "-" + this.attributes.keyEvent : variable; + form.get("dependentsManager").registerNewDependencyRelation(relationName); + form.get("dependentsManager").registerNewDependent(relationName, this); + form.get("dependentsManager").registerDependency(parent.get("type") === "grid" ? this.get("id") + "-" + this.attributes.keyEvent : this.get("id"), relationName); + this.set("isDependent", true); + } + } + return this; + }, + /** + * Dependent field handler, this callback is instanced for all register event, + * and runs when the event logged in PMDynaform.util.DependentsFieldManager + * param info {object}, Is the field information on which this component depends + * @param {*} info + * @returns {FieldModel} + */ + dependentHandler: function (info) { + var data = this.buildDataForQuery(info); + this.executeQuery(data); + return this; + }, + /** + * getDependentsManager, Retrieves form-dependent field handler + * @returns {PMDynaform.util.DependentsFieldManager} + */ + getDependentsManager: function () { + var form; + form = this.get("form"); + if (form) { + return this.get("form").get("dependentsManager"); + } + return null; + }, + /* + * buildDataForQuery, Builds the data needed to execute the query correctly + * @param info {object}: the initial data of the fields on which this component depends + * @returns dataForDependent {object} + */ + buildDataForQuery: function (info) { + var dependency = this.get("dependency"), + i, + dataForDependent = this.get("dataForDependent"), + dependencyItem, + form = this.get("form"), + parent = this.get("parent"); + if (!_.isEmpty(info)) { + dataForDependent[info.target] = info.data.value; + } + if (_.isArray(dependency)) { + for (i = 0; i < dependency.length; i += 1) { + if (parent && parent.get("type") === "grid") { + dependencyItem = parent.findCellInRow(this.get("row"), dependency[i]); + } else { + dependencyItem = form.get("fields")[dependency[i]]; + } + if (dependencyItem) { + dataForDependent[dependency[i]] = dependencyItem.get("data").value; + } + } + } + _.extend(dataForDependent, this.preparePostData()); + return dataForDependent; + }, + /** + * Abstract Method + * @param {*} response + */ + afterExecuteQuery: function (response) { + }, + /* + * Method fires when the service fails + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(); + form.visited = []; + if (this.get("view")) { + this.get("view").switchSpinnerByControl(); + } + if (response !== "abort") { + this.get("view").showQueryFailMessage(); + } + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + return this; + }, + /* + * Abstract method, + */ + onChangeOptions: function () { + }, + /* mergeRemoteOptions, merge the options obtained from the query to the + * service with the local options + * @chainable + */ + mergeRemoteOptions: function (remoteOptions) { + var k, + remoteOpt = [], + localOpt = this.get("localOptions") || [], + options; + for (k = 0; k < remoteOptions.length; k += 1) { + remoteOpt.push({ + value: remoteOptions[k].value, + label: remoteOptions[k].text || remoteOptions[k].label || "" + }); + } + this.set("optionsSql", remoteOpt); + options = localOpt.concat(remoteOpt); + this.set("options", options); + if (this.get("view") && this.get("view").firstLoad) { + this.trigger('change:options', this.model, options); + } + this.updateJsonOptions({ + optionsSql: remoteOpt + }); + return this; + }, + /** + * Update json in Project Model + * @param json + */ + updateJsonOptions: function (json) { + var prj = this.get("project"); + if (prj && prj.updateModel) { + prj.updateModel(this.get("id"), json); + } + }, + /** + * Load the remote options by referring to the service + * Anonymous + * @returns {FieldModel} + */ + loadRemotesOptions: function () { + var data; + data = this.buildDataForQuery({}); + dependentsManager = this.getDependentsManager(); + this.executeQuery(data); + return this; + }, + /** + * Retrieves the domain of the component based on + * the fields on which it depends + * @param data {object}: Data of the fields on which it depends + */ + recoveryRemoteOptions: function (data) { + var dependentsManager = this.getDependentsManager(), + response; + if (typeof data === "object" && _.isArray(this.get("options"))) { + _.extend(data, this.preparePostData()); + this.executeQuery(data); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (value) { + var data; + data = this.findOption(value, "value"); + if (!data) { + data = { + value: value, + label: value + } + } + this.set({ "data": data }, { silent: true }); + this.set({ "value": value }, { silent: true }); + this.set("toDraw", true); + return this; + }, + /** + * Return the name and name_label data + * @param value + * @returns {object} + */ + getAppData: function () { + var dt = this.get("data") || {}, + data = {}; + data[this.get("name")] = dt.value; + data[this.get("name") + "_label"] = dt.label; + return data; + }, + /** + * selectedOptions, Select an option from the option set + * @param criteria {string}, is the search criterion + * @param values {array}, set of the values + * @returns {FieldModel} + */ + selectedOptions: function (criteria, values) { + var options = this.get("options"), + i, + validCriteria = ["index", "value", "label"]; + if (_.isArray(options) && validCriteria.indexOf(criteria) > -1) { + for (i = 0; i < options.length; i += 1) { + if (criteria === "index" && values.indexOf(i) > -1) { + options[i].selected = true; + } else if (values.indexOf(options[i][criteria]) > -1) { + options[i].selected = true; + } else { + options[i].selected = false; + } + } + } + return this; + }, + /** + * Abort the current ajax request + * @returns {FieldModel} + */ + _abortRequest: function () { + if (this.get("xhr")) { + this.get("xhr").abort(); + } + return this; + }, + /** + * Enable the dependent field spinner + * @chainable + */ + enableDependencySpinners: function () { + var name = this.evaluateName(), + form = this.get("form"); + form.visited = []; + form.enableDependencySpinners(this.getNameToRegisterEvent(name)); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @returns {FieldModel} + */ + dependencyWillUpdate: function (any) { + if (any.data) { + this.set({ + data: any.data + }, { silent: true }); + } + this.get("form").get("dependentsManager").createBidirectional(this, any.fn); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Subscribe the changes in dependencies + * @param {*} dt + * @param {*} serial + * @returns {FieldModel} + */ + executeDependency: function (dt, serial) { + var that = this, + data = _.extend(dt, this.preparePostData()), + callback = function (data, err) { + var rootField; + that.dependencyDidUpdate(data, dt, err); + that.get("form").get("dependentsManager").emit({ + channel: "dependencies", + event: that.getFieldId() + serial, + payload: "" + }); + // Hack to manage when we need update the grid columns model + rootField = that.get("form").get("rootField"); + if (rootField && rootField.get("group") !== "grid" && that.get("group") == "grid") { + //means there are form grid dependecy relations + that.get("parent").updateGridColumn(dt, { + optionsSql: that.get("optionsSql"), + data: that.get("data") + }); + } + }; + if (this.get("view")) { + this.get("view").switchControlBySpinner(); + } + if (PMDynaform.core.ProjectMobile) { + this.executeQueryMobile(data, callback); + } else { + this.executeQueryWeb(data, this.get("form").get("isSync") ? false : true, callback); + } + return this; + }, + /** + * Execute Query for Mobile + * @param {*} data + * @param {*} callback + * @returns {FieldModel} + */ + executeQueryMobile: function (data, callback) { + var project = this.get("project"), + that = this; + data.var_name = this.get("variable") || ""; + data.sql = this.get("sql") || ""; + project.requestManager.channelEvents({ + handler: this.get("id"), + type: this.eventsMobile.EXECUTE_QUERY, + bridge: true, + data: data, + callback: callback + }); + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Update only view of dropdown + * @param {*} data + * @param {*} err + */ + dependencyDidUpdate: function (data, dt, err) { + var that = this; + if (data) { + that.afterExecuteQuery(data); + } else { + that.afterExecuteQueryFail(err); + } + this.set("dependencyDidUpdate", { error: err || false }); + this.trigger('change:dependencyDidUpdate'); + }, + /** + * Will update the column model + * in order to create a new cell + * @param {Object} dt + */ + updateGridModels: function (dt) { + }, + /** + * Execute query for web + * @param {*} data + * @param {*} async + * @param {*} callback + * @returns {FieldModel} + */ + executeQueryWeb: function (data, async, callback) { + var project = this.get("project"), + xhr; + this._abortRequest(); + xhr = project.webServiceManager.execQuery(data, this.get("variable") || this.get("columnName") || "", async, this.get("memoryCache"), callback); + this.set({ xhr: xhr }); + return this; + }, + /** + * Return the id for triggers the dependencies + * @returns {String} + */ + getFieldId: function () { + var id, + parent = this.get("parent"); + id = parent.get("type") === "grid" ? (this.get("columnId") || this.get("id")) + "-" + this.get("keyEvent") : this.get("id"); + return id; + }, + /** + * Find text in options model + * @param {*} text + * @returns {Array} + */ + findTextInOptions: function (text) { + var options = this.get("options"); + return _.find(options, function (o) { + return o.label === text; + }); + }, + /** + * Find the val in options model + * @param {*} val + * @returns {Array} + */ + findValueInOptions: function (val) { + var options = this.get("options"); + return _.find(options, function (o) { + return o.value === val; + }); + }, + /** + * Execute the remote options for this field + * @param {*} fn + * @chainable + */ + getRemoteOptions: function (fn) { + var that = this, + data = this.get("form").get("dependentsManager").getDependenciesData(this); + if(this.get("sql")){ + data = _.extend(data, this.preparePostData()); + if (data) { + if (PMDynaform.core.ProjectMobile) { + this.executeQueryMobile(data, function (res, err) { + that.mergeRemoteOptions(res && _.isArray(res) ? res : []); + if (_.isFunction(fn)) { + fn(res, err); + } + }) + } else { + this.executeQueryWeb(data, false, function (res, err) { + that.mergeRemoteOptions(res && _.isArray(res) ? res : []); + if (_.isFunction(fn)) { + fn(res, err); + } + }); + } + } + } + return this; + }, + /** + * Clear the options and optionsSql property of a field (dropdown). + * @chainable + */ + clearOptions: function () { + this.set('options', []); + this.set('optionsSql', []); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.FieldR", FieldModel); +}()); + +(function () { + var GridModel = PMDynaform.model.Field.extend({ + defaults: { + title: "Grid".translate(), + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + columns: [], + data: [], + disabled: false, + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("grid"), + gridtable: [], + layoutOpt: [ + "responsive", + "static" + ], + layout: "responsive", + pager: true, + paginationRotate: false, + paginationItems: 1, + pageSize: 5, + mode: "edit", + rows: 1, + type: "grid", + functions: false, + totalrow: [], + functionOptions: { + "sum": "sumValues", + "avg": "avgValues" + }, + dataColumns: [], + gridFunctions: [], + titleHeader: [], + valid: true, + countHiddenControl: 0, + addRow: true, + deleteRow: true, + variable: "", + required: false, + emptyMessage: "No records".translate(), + addRowText: "New".translate(), + addAriaLabel: "Add a new row to grid".translate(), + removeAriaLabel: "Remove row".translate(), + hint: "", + columnFileDelete: {}, + /** + * @param {Object}: dataSchema, used to validate the data because empty string is valid. + */ + dataSchema: {} + }, + /** + * initialize the validator object in the grid + * @returns {GridModel} + */ + initValidators: function () { + this.set("validator", new PMDynaform.model.Validator({ + type: this.get("type"), + required: this.get("required"), + rowsNumber: this.get("rows"), + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + return this; + }, + /** + * verify if the grid is valid + * @returns {boolean} + */ + isValid: function () { + this.validate(); + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + /** + * execute the validation of the validator associated object + * and evaluate the grid validation + * @returns {GridModel} + */ + validate: function () { + this.get("validator").set("rowsNumber", this.get("rows")); + this.get("validator").verifyGrid(); + return this; + }, + initialize: function (options) { + var pagesize; + this.set("gridtable",[]); + options = options || {}; + this.set("totalrow", []); + if (options["addRow"] === undefined) { + this.set("addRow", true); + } + if (options["deleteRow"] === undefined) { + this.set("deleteRow", true); + } + if (jQuery.isNumeric(this.get("pageSize"))) { + pagesize = parseInt(this.get("pageSize"), 10); + if (pagesize < 1) { + pagesize = 1; + this.set("pager", false); + } + } else { + this.set("pager", false); + } + if (!PMDynaform.core.ProjectMobile) { + this.set("pageSize", pagesize); + } + this.set("label", this.get("label")); + this.on("change:label", this.onChangeLabel, this); + if (options.project) { + this.project = options.project; + } + if (this.get("variable").trim().length === 0) { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("variable"); + } + this.fixCoutFieldsHidden(); + this.setLayoutGrid(); + this.setPaginationItems(); + this.checkTotalRow(); + this.initValidators(); + }, + /** + * Changes undefined layout properties to static + * @param initial + * @param final + * @returns {GridModel} + */ + setLayoutGrid: function () { + if ($.inArray(this.get("layout"), this.get("layoutOpt")) < 0) { + this.set("layout", "static"); + } + + return this; + }, + setPaginationItems: function () { + var rows = this.get("rows"), + size = this.get("pageSize"), + rotate = this.get("paginationRotate"), + pagerItems; + + pagerItems = Math.ceil(rows / size) ? Math.ceil(rows / size) : 1; + + this.set("paginationRotate", rotate); + this.set("paginationItems", pagerItems); + + return this; + }, + checkTotalRow: function () { + var i; + + loop_total: + for (i = 0; i < this.attributes.columns.length; i += 1) { + if (this.attributes.columns[i].operation) { + if (this.attributes.functionOptions[this.attributes.columns[i].operation.toLowerCase()]) { + this.attributes.functions = true; + break loop_total; + } + + } + } + return this; + }, + applyFunction: function () { + var i; + + for (i = 0; i < this.attributes.columns.length; i += 1) { + if (this.attributes.columns[i].operation) { + if (this.attributes.functionOptions[this.attributes.columns[i].operation.toLowerCase()]) { + this.attributes.totalrow[i] = this[this.attributes.functionOptions[this.attributes.columns[i].operation.toLowerCase()]](i); + } + } + } + + return this; + }, + sumValues: function (colIndex) { + var i, + sum = 0, + grid = this.attributes.gridFunctions; + + for (i = 0; i < grid.length; i += 1) { + sum += grid[i][colIndex]; + } + + return sum; + }, + avgValues: function (colIndex) { + var i, + sum = 0, + grid = this.attributes.gridFunctions; + + for (i = 0; i < grid.length; i += 1) { + sum += grid[i][colIndex]; + } + + return Math.round((sum / grid.length) * 100) / 100; + }, + fixCoutFieldsHidden: function () { + var i, countHiddenControl = 0; + for (i = 0; i < this.get("columns").length; i += 1) { + if (this.get("columns")[i].type === "hidden") { + countHiddenControl += 1; + } + } + this.set("countHiddenControl", countHiddenControl); + return this; + }, + /** + * Get Array of the Values of each field + * @returns {{name: *, value: Array}} + */ + getData: function () { + var i, + j, + cell, + row, + dataGrid = [], + gridTable = this.attributes.view.gridtable, + max = gridTable.length, + dataRow, + data; + if (this.get("view")) { + for (i = 0; i < max; i += 1) { + dataRow = []; + row = gridTable[i]; + for (j = 0; j < row.length; j += 1) { + cell = row[j]; + dataRow.push(cell.getValue()); + } + dataGrid.push(dataRow); + } + } + data = { + name: this.get("name"), + value: dataGrid + }; + return data; + }, + /** + * Get array of the values or an value cell + * @param row + * @param col + * @returns {*} + */ + getValue: function (row, col) { + var valueGrid = "", + gridData = this.getData(), + values = ""; + if (row && col) { + if (this.isColumnInRange(col) && this.isRowInRange(row)) { + values = gridData ? gridData.value : values; + valueGrid = values[row - 1][col - 1]; + } + } else { + valueGrid = gridData ? gridData.value : valueGrid; + } + return valueGrid; + }, + /** + * Validate index col + * @param col + * @returns {boolean} + */ + isColumnInRange: function (col) { + var valid = false, + numCols = 0, + columns = this.get("columns"); + numCols = columns ? columns.length : numCols; + if (col >= 1 && col <= numCols) { + valid = true; + } + return valid; + }, + /** + * Validate index row + * @param row + * @returns {boolean} + */ + isRowInRange: function (row) { + var valid = false, + numRows = this.get("rows"); + if (row >= 1 && row <= numRows) { + valid = true; + } + return valid; + }, + /** + * add a columnId to array columnFileDelete to know the columns to delete multiple files and update the variable to delete files; return the number of index in the array + * @returns {number} + */ + getColumnFileDelete: function (columnId, nameRow) { + var prop, + indexCol = -1, + indexName = -1, + arrFiles = this.get("columnFileDelete"); + + if (!arrFiles.hasOwnProperty(columnId)) { + arrFiles[columnId] = []; + } + for (prop in arrFiles) { + if (arrFiles.hasOwnProperty(prop)) { + indexCol = indexCol + 1; + if (prop === columnId) { + break; + } + } + } + + indexName = arrFiles[columnId].indexOf(nameRow); + if (indexName === -1) { + if (_.isString(nameRow)) { + arrFiles[columnId].push(nameRow); + indexName = arrFiles[columnId].indexOf(nameRow); + } + } + + return { + col: indexCol, + row: indexName + }; + }, + /** + * Returns the array hiddens columns json before a number col + * @param col + * @returns {Array} + */ + getHiddensBeforeColumn: function (col) { + var arrCols = [], index, + columns = this.get("columns"); + if (_.isNumber(col)) { + for (index = 0; index < col; index += 1) { + if (columns[index].type === "hidden") { + arrCols.push(columns[index]); + } + } + } + return arrCols; + }, + /** + * detachRegisteredEvents, Disable Events Logged on the Dependent Field Handler + * @chainable + */ + detachRegisteredEvents: function(row) { + var i = 0, + form = this.get("form"), + cell, + name; + if (_.isArray(row) && row.length) { + row = row[0]; + for (i = 0; i < row.length; i += 1) { + cell = row[i]; + if (cell && form) { + name = cell.model.getNameToRegisterEvent(cell.model.get("columnName")); + form.detachRegisteredEvents(name, cell.model.get("columnName")); + } + } + } + return this; + }, + /** + * findCellInRow: Obtains a cell that belongs to a row + * @param rowIndex {number}: Row position + * @param cellId {string}: cell original id + * @returns {PMDynaform.model.Field} + */ + findCellInRow: function(rowIndex, cellId) { + var i, + row = this.get("gridtable")[rowIndex]; + if (_.isArray(row)) { + for (i = 0; i < row.length; i += 1) { + if (row[i].model.get("columnId") === cellId) { + return row[i].model; + } + } + } + return null; + }, + /** + * Update the grid model and columnModel property in order + * to create new rows + * @param {Object} dt + * @param {Object} options + * @returns {PMDynaform.model.Field} + */ + updateGridColumn: function (dt, options) { + this.updateColumnCollection(this.get("columns"), dt, options); + this.updateColumnCollection(this.get("view").columnsModel, dt, options); + return this; + }, + /** + * Update a column object into the collection + * @param {Array} collection + * @param {Object} dt + * @param {Object} options + * @returns {PMDynaform.model.Field} + */ + updateColumnCollection: function (collection, dt, options) { + var match = _.find(collection, function(item) { return item.id === dt.field_id }) + if (match) { + _.extend(match, options); + } + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.GridPanel", GridModel); +}()); + +(function () { + var ButtonModel = PMDynaform.model.Field.extend({ + defaults: { + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("button"), + label: "untitled label", + type: "button", + namespace: "pmdynaform", + disabled: false, + colSpan: 12, + tabIndex: "", + ariaLabel: "" + }, + getValue: function () { + var label = this.get("label"); + return label ? label : ""; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Button", ButtonModel); +}()); +(function () { + var DropdownModel = PMDynaform.model.FieldR.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dataType: "string", + defaultValue: "", + disabled: false, + executeInit: true, + group: "form", + hint: "", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("dropdown"), + label: "untitled label", + tabIndex: "", + ariaLabel: "", + localOptions: [], + mode: "edit", + options: [], + remoteOptions: [], + required: false, + type: "text", + valid: true, + validator: null, + variable: null, + var_uid: null, + var_name: null, + variableInfo: {}, + columnName: null, + originalType: null, + data: { + value: "", + label: "" + }, + optionsSql: [], + enableValidate: true, + placeholder: "", + /** + * this parameter verify if exist placeholder in the component + */ + therePlaceholder: false, + /** + * this property fix the custom placeholder options + */ + placeholderOption: null, + /** + * @param {object}: dependency, Fields on which it depends + */ + dependency: [], + /** + * @param {object}: dataForDependent, Stores data to eject dependent field service + */ + showDependentSpinners: true, + isSync: false, + dependencyDidUpdate: false, + memoryCache: false, + disablePlaceholder: false + }, + initValidators: function () { + this.set("validator", new PMDynaform.model.Validator({ + domain: true, + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + return this; + }, + initialize: function (options) { + var data; + this.initValidators(); + this.setLocalOptions(); + this.setRemoteOptions(); + this.mergeOptionsSql(); + //verify the exist a placeholder an set the therePlaceholder parameter + this.verifyExistPlaceholder(); + this.setDefaultValue(); + this.set("dataForDependent", {}); + data = this.get("data"); + if (data && data["value"] === "" && !this.get("therePlaceholder")) { + this.setFirstOptionInData(); + } + if (this.get("variable") && this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this._dependentFieldEventRegister(this.get("sql")); + //create a placeholder option if exist + if (this.get("therePlaceholder")) { + this.set("placeholderOption", this.createPlaceHolderOption()); + } + }, + /** + * Verify if exist placeholder, when exist set paremeter therePlacehodler = true + * @returns {DropdownModel} + */ + verifyExistPlaceholder: function () { + var placeholder = this.get("placeholder"), + therePlaceholder = false; + if (typeof placeholder === "string") { + if (placeholder.trim().length !== 0) { + therePlaceholder = true; + } + } + this.set("therePlaceholder", therePlaceholder); + return this; + }, + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + } + }, + setDefaultValue: function () { + var options = this.get("options"), + defaultValue = this.get("defaultValue"), + arrayDefaults = ["", null, undefined]; + + if (arrayDefaults.indexOf(defaultValue) > -1 && options.length > 0) { + this.set("value", options[0].value); + } + + return this; + }, + isValid: function () { + return this.get("valid"); + }, + validate: function () { + var valueFixed = this.get("data")["value"]; + this.attributes.value = valueFixed; + if (this.get("enableValidate")) { + this.get("validator").set("type", this.get("type")); + this.get("validator").set("required", this.get("required")); + this.get("validator").set("value", valueFixed); + this.get("validator").set("dataType", this.get("dataType")); + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + setLocalOptions: function () { + var item = {}; + if (this.get("options")) { + this.set("localOptions", this.get("options")); + } + return this; + }, + /** + * createPlaceHolderOption(), when the property 'therePlaceholder' is true + * then the placeholder option is created + * @returns {{}} + */ + createPlaceHolderOption: function () { + var option = {}; + option["label"] = this.get("placeholder"); + option["value"] = undefined; + return option; + }, + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * Set value method, this method only will works for gridMobile class. + * @param {*} value + * @param {*} callback + */ + setValue: function (value, callback) { + var that = this, + dataOption, + criteria = "value"; + if (value !== undefined && value !== null) { + this.getRemoteOptions(function (data, err) { + dataOption = that.findOption(value, criteria); + that.dependencyWillUpdate({ + data: dataOption, + fn: callback + }); + }); + } + return this; + }, + /** + * SetValue, get Remote options, update the view and model but not trigger the dependencies without execute onchange callbacks only works in mobile + * @param {*} value + * @param {*} fn + * @return {DropDownModel} + */ + setValueWithoutTriggerDependencies: function (value, fn) { + var that = this, + dataOption, + criteria = "value"; + if (value !== undefined && value !== null) { + this.getRemoteOptions(function (data, err) { + dataOption = that.findOption(value, criteria); + that.setFirstOptionInData(); + // If not exist the value in options, we need show the first option and we need update the hidden + if (dataOption) { + that.set("data", dataOption); + } + if (_.isFunction(fn)) { + fn(); + } + }); + } + return this; + }, + /** + * Set text method, this method only will works for gridMobile class. + * @param {*} txt + * @param {*} callback + */ + setText: function (txt, callback) { + var that = this, + dataOption, + criteria = "label"; + if (typeof txt !== undefined && txt !== null) { + this.getRemoteOptions(function (data, err) { + dataOption = that.findOption(txt, criteria); + that.dependencyWillUpdate({ + data: dataOption, + fn: callback + }); + }); + } + return this; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + */ + afterExecuteQuery: function (response) { + var currentValue = this.get("value"), + newValue; + if (_.isArray(response)) { + this.clearOptions(); + this.mergeRemoteOptions(response); + this.set('addRowValue', null); + this.setFirstOptionInData(); + this.set('disablePlaceholder',true); + } + newValue = this.get("value"); + if (_.isArray(response) && response.length > 0 && this.get("showDependentSpinners") && currentValue !== newValue) { + this.set("showDependentSpinners", true); + } + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(); + form.visited = []; + if (response !== "abort") { + this.get("view").showQueryFailMessage(); + this.get("view").switchSpinnerByControl(); + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + } + this.mergeRemoteOptions([]); + this.setFirstOptionInData(); + return this; + }, + /** + * setFirstOptionInData: Sets the first domain option if it exists + * if there are not domain a default empty data has been setted + */ + setFirstOptionInData: function () { + var options = this.get("options"), + defaultData, + index = 0, + val; + if (options.length) { + val = this.get('addRowValue') || (options[index] && options[index].value); + defaultData = _.find(options, function (item) { + return item.value === val; + }); + this.set("data", defaultData || { value: '', label: '' }); + } else { + this.set("data", { value: '', label: '' }); + this.set('toDraw', true); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var newData; + if (typeof data === "object") { + newData = data; + } else { + newData = this.findOption(data, "value"); + if (!newData) { + newData = { + value: "", + label: "" + } + } + } + this.set({ "data": newData }, { silent: true }); + this.set("toDraw", true); + return this; + }, + /** + * Execute the remote options for this field + * @param {*} fn + * @chainable + */ + getRemoteOptions: function (fn) { + var that = this, + data = this.get("form").get("dependentsManager").getDependenciesData(this); + data = _.extend(data, this.preparePostData()); + if (data) { + if (PMDynaform.core.ProjectMobile) { + this.executeQueryMobile(data, function (res, err) { + that.mergeRemoteOptions(res && _.isArray(res) ? res : []); + if (_.isFunction(fn)) { + fn(res, err); + } + }) + } else { + this.executeQueryWeb(data, false, function (res, err) { + that.mergeRemoteOptions(res && _.isArray(res) ? res : []); + if (_.isFunction(fn)) { + fn(res, err); + } + }); + } + } + return this; + }, + /** + * Will update the column model + * in order to create a new cell + * @param {Object} dt + */ + updateGridModels: function (dt) { + newOptions = { optionsSql: this.get("options") }; + this.get("parent").updateGridColumn(dt, newOptions); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.DropdownR", DropdownModel); +}()); + +(function () { + var RadioboxModel = PMDynaform.model.FieldR.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("radio"), + dataType: "string", + disabled: false, + defaultValue: "", + label: "untitled label", + tabIndex: "", + ariaLabel: "", + ariaLabelVisible: true, + localOptions: [], + group: "form", + hint: "", + options: [], + mode: "edit", + type: "radio", + readonly: false, + remoteOptions: [], + required: false, + validator: null, + valid: true, + variable: "", + var_uid: null, + var_name: null, + variableInfo: {}, + columnName: null, + originalType: null, + itemClicked: false, + optionsSql: [], + enableValidate: true, + data: { + value: "", + label: "" + }, + dependencyDidUpdate: false, + memoryCache: false + }, + /** + * Initialize Field Model + * @param {*} attrs + */ + initialize: function (attrs) { + var data = this.get("data"); + this.set("label", this.get("label")); + this.set("dataForDependent", {}); + this.set("validator", new PMDynaform.model.Validator({ + domain: true, + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + this.verifyControl(); + this.setLocalOptions(); + this.setRemoteOptions(); + this.mergeOptionsSql(); + this.initControl(); + + if (data && data["value"].toString()) { + this.set("data", data); + } else { + this.set("data", { value: "", label: "" }); + } + if (this.get("group") === "form") { + if (this.get("variable").trim().length === 0) { + this.attributes.name = this.get("id"); + } + } else { + this.attributes.name = this.get("id"); + } + this._dependentFieldEventRegister(this.get("sql")); + }, + /** + * Init the values in Field + */ + initControl: function () { + var opts = this.get("options"), + i, + newOpts = [], + itemsSelected = []; + + if (this.get("defaultValue")) { + this.set("data", { + value: this.get("defaultValue"), + label: this.get("data").label + }); + } + for (i = 0; i < opts.length; i += 1) { + if (opts[i].selected) { + itemsSelected.push(opts[i].value.toString()); + } + newOpts.push({ + label: opts[i].label, + value: opts[i].value, + selected: opts[i].selected ? true : false + }); + } + + this.set("options", newOpts); + this.set("selected", itemsSelected); + }, + /** + * Set the local options in model + * @returns {RadioboxModel} + */ + setLocalOptions: function () { + this.set("localOptions", this.get("options")); + return this; + }, + /** + * Verify the validation in model + * @returns {boolean} + */ + isValid: function () { + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + /** + * Verify the data in control + */ + verifyControl: function () { + var opts = this.get("options"), i; + for (i = 0; i < opts.length; i += 1) { + opts[i].value = opts[i].value.toString(); + } + this.set("data", { + value: this.get("data").value.toString(), + label: this.get("data").label + }); + }, + /** + * Validate the radio Model + * @param {*} attrs + * @returns {RadioboxModel} + */ + validate: function (attrs) { + if (this.get("enableValidate")) { + if (attrs) { + this.get("validator").set("type", attrs.type); + this.get("validator").set("value", attrs.data.value); + this.get("validator").set("valueDomain", attrs.data.value); + this.get("validator").set("required", attrs.required); + this.get("validator").set("dataType", attrs.dataType); + } + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + /** + * Set the selected option + * @param {*} itemUpdated + * @returns {RadioboxModel} + */ + setItemClicked: function (itemUpdated) { + var opts = this.get("options"), + selected = this.get("selected"), + i; + this.itemClicked = true; + if (opts) { + for (i = 0; i < opts.length; i += 1) { + if (opts[i].value.toString() === itemUpdated.value.toString()) { + this.set("value", itemUpdated.value.toString()); + } + } + } + return this; + }, + /** + * Returns the data model + * @returns {Object} + */ + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + } + }, + /** + * Listener for value property in Radio Model + * @param {*} attrs + * @param {*} value + * @returns {RadioboxModel} + */ + onChangeValue: function (attrs, value) { + var option; + this.attributes.value = attrs.attributes.value; + option = this.findOption(value, "value"); + if (option && typeof option === "object") { + if (!this.itemClicked) { + this.set("data", { + value: option.value, + label: option.label + }); + } + this.itemClicked = false; + this.get("validator").set({ + valueDomain: this.get("value"), + options: this.get("options") || [] + }); + this.get("validator").verifyValue(); + } else { + this.attributes.value = this.previous("value"); + } + return this; + }, + /** + * Returns the value model + * @returns {Object} + */ + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + * @returns {RadioboxModel} + */ + afterExecuteQuery: function (response) { + this.set("data", { value: "", label: "" }); + this.mergeRemoteOptions(response); + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(); + form.visited = []; + if (response !== "abort") { + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + } + this.mergeRemoteOptions([]); + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param value {object} valid data for this component + * @param dependencyData {object}, data to complete the component domain + * @returns {RadioboxModel} + */ + setAppData: function (value, dependencyData) { + var data; + if (dependencyData) { + this.recoveryRemoteOptions(dependencyData); + } + data = this.findOption(value, "value") || { value: "", label: "" }; + this.set({ "data": data }, { silent: true }); + this.set("toDraw", true); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.RadioR", RadioboxModel); +}()); + +(function () { + var SubmitModel = PMDynaform.model.Field.extend({ + defaults: { + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("submit"), + label: "untitled label", + type: "submit", + namespace: "pmdynaform", + disabled: false, + colSpan: 12, + tabIndex: "", + ariaLabel: "" + }, + getValue: function () { + var label = this.get("label"); + return label ? label : ""; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Submit", SubmitModel); +}()); +(function () { + var TextAreaModel = PMDynaform.model.FieldR.extend({ + defaults: { + type: "textarea", + placeholder: "", + label: "untitled label", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("textarea"), + colSpan: 12, + value: "", + defaultValue: "", + tabIndex: "", + ariaLabel: "", + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + maxLengthLabel: 15, + rows: 2, + group: "form", + dataType: "string", + hint: "", + disabled: false, + maxLength: null, + mode: "edit", + required: false, + validator: null, + valid: true, + columnName: null, + originalType: null, + data: null, + enableValidate: true, + variable: '', + memoryCache: false + }, + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("data").value + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("data").value + } + } + }, + initialize: function (attrs) { + var data, maxLength; + this.set("optionsSql", null); + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + this.set("dataForDependent", {}); + this.set("validator", new PMDynaform.model.Validator({ + "type": this.get("type"), + "required": this.get("required"), + "maxLength": this.get("maxLength"), + "requiredFieldErrorMessage": this.get("requiredFieldErrorMessage"), + "dataType": this.get("dataType") || "string", + "regExp": { + validate: this.get("validate"), + message: this.get("validateMessage") + } + })); + + data = this.get("data"); + if (data && data["value"] !== "") { + data = { + value: data["value"], + label: data["value"] + }; + this.set("data", data); + this.set("defaultValue", data["value"]); + } else { + this.set("data", { value: "", label: "" }); + } + this.initControl(); + + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this._dependentFieldEventRegister(this.get("sql")); + }, + initControl: function () { + if (this.get("defaultValue")) { + this.set("value", this.get("defaultValue")); + } + }, + isValid: function () { + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + validate: function (attrs) { + var valueFixed; + if (this.get("data") !== undefined) { + valueFixed = this.get("data")["value"]; + if (this.get("enableValidate")) { + this.get("validator").set("value", valueFixed); + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + } + return this; + }, + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * Set value Only works from gridMobile + * @param value + * @param callback + * @returns {DropdownModel} + */ + setValue: function (value, callback) { + if (value) { + this.dependencyWillUpdate({ + data: { + value: value, + label: value + }, + fn: callback + }); + } + return this; + }, + /** + * Set text Only works from gridMobile + * @param txt + * @param callback + * @returns {DropdownModel} + */ + setText: function (txt, callback) { + this.setValue(txt, callback); + return this; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + */ + afterExecuteQuery: function (response) { + var currentValue = this.get("value"), + newValue; + this.clearOptions(); + this.mergeRemoteOptions(response); + this.setFirstOptionInData(); + newValue = this.get("value"); + if (_.isArray(response) && response.length > 1 && this.get("showDependentSpinners") && currentValue !== newValue) { + this.enableDependencySpinners(); + } + return this; + }, + /** + * setFirstOptionInData: Sets the first domain option if it exists + * if there are not domain a default empty data has been setted + */ + setFirstOptionInData: function() { + var indexValue = 0, + val, + responseDefault = [{ + value: "", + text: "" + }], + options = this.get("options") || []; + _.defaults(options, responseDefault); + if (_.isArray(options)) { + val = options[indexValue].value; + this.set("data", { + value: val, + label: val + }); + } + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(), + data = { + value: "", + label: "" + }; + form.visited = []; + if (response !== "abort") { + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + } + this.set("data", data); + return this; + }, + /** + * Superclass override method + */ + recoveryRemoteOptions: function (data, postRender) { + if (postRender) { + if (typeof data === "object") { + _.extend(data, this.preparePostData()); + this.executeQuery(data); + } + } + return this; + }, + /** + * Will update the column model + * in order to create a new cell + * @param {Object} dt + */ + updateGridModels: function(dt) { + newOptions = {data: this.get("data")}; + this.get("parent").updateGridColumn(dt, newOptions); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.TextAreaR", TextAreaModel); +}()); + +(function () { + + var TextModel = PMDynaform.model.FieldR.extend({ + defaults: { + type: "text", + placeholder: "", + label: "untitled label", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("text"), + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + maxLengthLabel: 15, + namespace: "pmdynaform", + operation: null, + tooltipLabel: "", + tabIndex: "", + ariaLabel: "", + group: "form", + defaultValue: "", + dataType: "string", + hint: "", + mask: "", + disabled: false, + maxLength: null, + mode: "edit", + autoComplete: "off", + required: false, + formulator: null, + validator: null, + textTransform: "", + valid: true, + variable: '', + var_uid: null, + var_name: null, + columnName: null, + originalType: null, + data: null, + keyValue: null, + formulaAssociatedObject: [], + enableValidate: true, + formula: '', + memoryCache: false + }, + initialize: function (attrs) { + var data, maxLength; + this.set("optionsSql", null); + this.set("dataType", this.get("dataType").trim().length ? this.get("dataType") : "string"); + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + this.set("validator", new PMDynaform.model.Validator({ + "type": this.get("type"), + "required": this.get("required"), + "requiredFieldErrorMessage": this.get("requiredFieldErrorMessage"), + "maxLength": this.get("maxLength"), + "dataType": this.get("dataType") || "string", + "regExp": { + validate: this.get("validate"), + message: this.get("validateMessage") + } + })); + + if (this.get("formula").trim().length) { + this.attributes.formula = this.get("formula").replace(/\s/g, ''); + } + if (this.attributes._extended && this.attributes._extended.formula) { + this.attributes._extended.formula = this.attributes._extended.formula.replace(/\s/g, ''); + } + + data = this.get("data"); + if (data && data["value"] !== "") { + if (data["label"] !== "") { + data = { + value: data["value"], + label: data["label"] + }; + } else { + data = { + value: data["value"], + label: data["value"] + }; + } + this.set("data", data); + this.set("defaultValue", data["value"]); + } else { + this.set("data", { value: "", label: "" }); + } + this.initControl(); + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this._dependentFieldEventRegister(this.get("sql")); + }, + initControl: function () { + if (typeof this.get("formula") === "string" && + this.get('formula') !== "undefined" && + this.get('formula') !== "null" && + this.get('formula').length > 1) { + this.set("formulator", new PMDynaform.core.Formula(this.get("formula"))); + this.set("disabled", true); + } + }, + addFormulaTokenAssociated: function (formulator) { + if (formulator instanceof PMDynaform.core.Formula) { + formulator.addTokenValue(this.get("id"), this.get("data")["value"]); + } + return this; + }, + addFormulaFieldName: function (otherField) { + this.get("formulator").addField("field", otherField); + return this; + }, + // Update the field with formula property + updateFormulaValueAssociated: function (field) { + var resultField = field.model.get("formulator").evaluate(); + field.setValue(resultField); + return this; + }, + isValid: function () { + return this.get("valid"); + }, + validate: function (attrs) { + var valueFixed; + if (this.get("data") !== undefined) { + valueFixed = this.get("data")['value']; + if (this.get("enableValidate")) { + this.get("validator").set("value", valueFixed); + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + } + return this; + }, + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("data").value + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("data").value + } + } + }, + getData2: function () { + var data = {}, name, value; + name = this.get("variable") ? this.get("variable").var_name : this.get("name"); + value = this.get("data").value; + data[name] = value; + return data; + }, + /** + * Set value Only works from gridMobile + * @param value + * @param callback + * @returns {TextModel} + */ + setValue: function (value, callback) { + if (value) { + this.dependencyWillUpdate({ + data: { + value: value, + label: value + }, + fn: callback + }); + } + return this; + }, + /** + * Set text Only works from gridMobile + * @param txt + * @param callback + * @returns {TextModel} + */ + setText: function (txt, callback) { + this.setValue(txt, callback); + return this; + }, + /** + * Returns the value from model + * @returns {TextModel} + */ + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + */ + afterExecuteQuery: function (response) { + var currentValue = this.get("value"), + newValue; + this.clearOptions(); + this.mergeRemoteOptions(response); + this.setFirstOptionInData(); + newValue = this.get("value"); + if (_.isArray(response) && response.length > 1 && this.get("showDependentSpinners") && currentValue !== newValue) { + this.enableDependencySpinners(); + } + return this; + }, + /** + * setFirstOptionInData: Sets the first domain option if it exists + * if there are not domain a default empty data has been setted + */ + setFirstOptionInData: function() { + var indexValue = 0, + val, + responseDefault = [{ + value: "", + text: "" + }], + options = this.get("options") || []; + _.defaults(options, responseDefault); + if (_.isArray(options)) { + val = options[indexValue].value; + this.set("data", { + value: val, + label: val + }); + } + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(), + data = { + value: "", + label: "" + }; + form.visited = []; + if (response !== "abort") { + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + } + this.set("data", data); + return this; + }, + /** + * Will update the column model + * in order to create a new cell + * @param {Object} dt + */ + updateGridModels: function(dt) { + newOptions = {data: this.get("data")}; + this.get("parent").updateGridColumn(dt, newOptions); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.TextR", TextModel); +}()); + +(function () { + var File = PMDynaform.model.Field.extend({ + defaults: { + autoUpload: false, + camera: true, + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + defaultValue: "", + disabled: false, + dnd: false, + dndMessage: "Drag or choose local files", + extensions: "pdf, png, jpg, mp3, doc, txt", + group: "form", + height: "200px", + hint: "", + id: PMDynaform.core.Utils.generateID(), + items: [], + label: "Untitled label", + tabIndex: "", + ariaLabel: "", + labelButton: "Choose Files", + mode: "edit", + multiple: false, + name: PMDynaform.core.Utils.generateName("file"), + variable: null, + inputDocuments: null, + preview: false, + required: false, + size: 1, //1 MB + type: "file", + proxy: [], + valid: true, + validator: null, + value: "", + columnName: null, + originalType: null, + data: { + value: [], + label: [] + }, + appDocUID: [], + enableValidate: true, + sizeUnity: "", + stackLabels: [], + cleaned: false + }, + initialize: function (properties) { + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + this.set("items", []); + this.set("proxy", []); + this.set("validator", new PMDynaform.model.Validator({ + "type": "file", + "required": this.get("required"), + "requiredFieldErrorMessage": this.get("requiredFieldErrorMessage") + })); + this.formatData(properties.data); + this.setSizeAndUnity(properties.size, properties.sizeUnity); + this.clearStackLabels(); + return this; + }, + /** + * Format Data File + * @param data + * @returns {File} + */ + formatData: function (data) { + var defaultValue = [], + defaultLabel = [], + valueAux, + labelAux; + if (data && _.isObject(data) && data.value && data.label) { + labelAux = this.parseToArray(data.label); + valueAux = this.parseToArray(data.value); + if (_.isArray(labelAux) && _.isArray(valueAux)) { + defaultLabel = labelAux; + defaultValue = valueAux; + } + this.setAppDocUID(data.app_doc_uid ? data.app_doc_uid : null); + } + this.set("data", { + value: defaultValue, + label: defaultLabel + }); + this.set("value", defaultValue); + return this; + }, + /** + * Apply JSON PARSE + * @param data + * @returns {*} + */ + parseToArray: function (data) { + var arrData = data; + if (data && _.isString(data)) { + arrData = JSON.parse(data); + } + return arrData; + }, + /** + * Validate File + * @returns {boolean} + */ + isValid: function () { + var valid = false; + this.get("validator").set("value", this.get("value").toString()); + this.get("validator").verifyValue(); + if (this.get("validator").get("valid")) { + valid = true; + } + return valid; + }, + /** + * Gets appDocUID to file field + */ + getAppDocUID: function () { + return this.get("appDocUID") || null; + }, + /** + * Set AppDocUid + * @param appDocUid + * @returns {File} + */ + setAppDocUID: function (appDocUid) { + if (_.isArray(appDocUid) && appDocUid.length) { + this.set("appDocUID", appDocUid); + } + return this; + }, + /** + * Set Size and SizeUnity + * @param size + * @param unity + * @returns {File} + */ + setSizeAndUnity: function (size, unity) { + var defaultSize = parseInt(size) || 999999, + defaultUnity = parseInt(size) ? unity : "MB"; + this.set("size", defaultSize); + this.set("sizeUnity", defaultUnity); + return this; + }, + /** + * Get name file (text). + * @returns {Array} + */ + getText: function () { + var data = this.get("data"), + label = []; + if (_.isArray(data.label) && data.label.length) { + label = data.label; + } else if (this.getCurrentNameFile()) { + label = [this.getCurrentNameFile()]; + } + return label; + }, + /** + * Get Doc UID (value). + * @returns {Array} + */ + getValue: function () { + return this.getAppDocUID() || []; + }, + /** + * Add Label File To stackLabels + * @param label + * @returns {File} + */ + addLabelToStack: function (label) { + var auxiliarStack = this.get("stackLabels"); + if (typeof label === "string") { + auxiliarStack.unshift(label); + } + this.set("stackLabels", auxiliarStack); + return this; + }, + /** + * Clear stackLabels + * @returns {File} + */ + clearStackLabels: function () { + this.set("stackLabels", []); + return this; + }, + /** + * Clear Content File Data + * @returns {File} + */ + clearContent: function () { + var data = this.get("data"); + if (data && !_.isEmpty(data) && data.value && data.label) { + this.set("cleaned", true); + this.set("data", { + value: [], + label: [], + app_doc_uid: [] + }); + this.set("value", []); + this.set("appDocUID", []); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param value {array} valid data for this component + */ + setAppData: function (value) { + this.set("value", value); + return this; + }, + /** Return the previous name of last file + * @returns {string} + */ + getPreviousNameFile: function () { + var auxiliarStack = this.get("stackLabels"), + index = 1; + return (auxiliarStack && auxiliarStack.length > 1) ? auxiliarStack[index] : ""; + }, + /** + * Return the name of the current file + * @returns {string} + */ + getCurrentNameFile: function () { + var auxiliarStack = this.get("stackLabels"), + index = 0; + return (auxiliarStack && auxiliarStack.length > 0) ? auxiliarStack[index] : ""; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.File", File); +}()); + +(function () { + var CheckGroupModel = PMDynaform.model.FieldR.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dataType: "string", + disabled: false, + group: "form", + hint: "", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("checkgroup"), + label: "untitled label", + tabIndex: "", + ariaLabel: "", + ariaLabelVisible: true, + localOptions: [], + maxLengthLabel: 15, + mode: "edit", + options: [], + readonly: false, + required: false, + optionsSql: [], + selected: [], + type: "checkgroup", + validator: null, + valid: true, + columnName: null, + originalType: null, + data: { + value: [], + label: "" + }, + defaultValue: [], + variable: "", + enableValidate: true, + dependencyDidUpdate: false, + memoryCache: false + }, + initialize: function (attrs) { + var data; + this.set("validator", new PMDynaform.model.Validator({ + type: this.get("type"), + required: this.get("required"), + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + this.set("dataForDependent", {}); + if (this.get("optionsSql") || this.get("options")) { + this.set("localOptions", this.get("options")); + this.mergeRemoteOptions(this.get("optionsSql")); + } + if (this.get("data") || this.get("data")["value"] || this.get("data")["defaultValue"]) { + this.set("data", this.initData(this.get("defaultValue"), this.get("value"), this.get("data"), this.get("variable"))); + this.attributes.value = this.get("data")["value"]; + } + this.initControl(); + this.get("validator").set("value", this.get("data").value); + + if (this.get("variable") === "") { + this.attributes.name = ""; + } + this._dependentFieldEventRegister(this.get("sql")); + return this; + }, + initData: function (defaultV, value, data) { + var auxData = {}, existData = false; + if (data) { + if (typeof data === "object") { + if (data.hasOwnProperty("value") && $.isArray(data["value"])) { + if (data.hasOwnProperty("label") && data["label"].toString().trim() === "") { + auxData["value"] = data["value"]; + auxData["label"] = []; + for (var i = 0; i < this.get("options").length; i += 1) { + if (data["value"].indexOf(this.get("options")[i]["value"]) > -1) { + auxData["label"].push(this.get("options")[i]["label"]); + } + } + } else { + if ($.isArray(data["label"])) { + data["label"] = JSON.stringify(data["label"]); + auxData = data; + } else { + if (data["label"].indexOf("[") === 0 && data["label"].lastIndexOf("]") === data["label"].length - 1) { + auxData = data; + } + } + } + existData = true; + } else { + if (typeof data["value"] === "string" && data["value"].length) { + data["value"] = data["value"].split(/,/g); + if (data["label"].indexOf("[") === 0 && data["label"].lastIndexOf("]") === data["label"].length - 1) { + this.attributes.labelsSelected = JSON.parse(data["label"]); + data["label"] = JSON.stringify(this.attributes.labelsSelected); + } + auxData = data; + } + if (!data.hasOwnProperty("value") || data["value"] === "") { + auxData["value"] = []; + auxData["label"] = []; + } + existData = true; + } + } else { + auxData["value"] = []; + auxData["label"] = []; + } + } else { + auxData["value"] = []; + auxData["label"] = []; + } + if (defaultV && !existData) { + var defaultV = defaultV.split("|"); + for (var i = 0; i < this.get("options").length; i += 1) { + if (defaultV.indexOf(this.get("options")[i]["value"]) > -1) { + auxData["value"].push(this.get("options")[i]["value"]); + auxData["label"].push(this.get("options")[i]["label"]); + } + } + } + if ($.isArray(auxData["label"])) { + auxData["label"] = JSON.stringify(auxData["label"]); + } + return auxData; + }, + initControl: function () { + var opts = this.get("options"), + i, + newOpts = [], + itemsSelected = []; + + for (i = 0; i < opts.length; i += 1) { + if (this.get("data") && this.get("data").value) { + if (this.get("data").value.indexOf(opts[i].value) > -1) { + opts[i].selected = true; + itemsSelected.push(opts[i]); + } + } + newOpts.push({ + label: opts[i].label, + value: opts[i].value, + selected: opts[i].selected ? true : false + }); + } + this.set("options", newOpts); + this.set("selected", itemsSelected); + }, + setLocalOptions: function () { + this.set("localOptions", this.get("options")); + return this; + }, + getData: function () { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + }; + }, + validate: function (attrs) { + if (this.get("enableValidate")) { + this.get("validator").set("value", attrs.value.length); + if (this.get("options").length) { + this.get("validator").set("options", this.attributes.options); + } + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + isValid: function () { + return this.get("valid"); + }, + setItemChecked: function (itemUpdated) { + var opts = this.get("options"), + selected = [], + i; + if (opts) { + for (i = 0; i < opts.length; i += 1) { + if (opts[i].value.toString() === itemUpdated.value.toString()) { + opts[i].selected = itemUpdated.checked; + } + } + this.set("options", opts); + for (i = 0; i < opts.length; i += 1) { + if (i === opts.length - 1 && selected.length) { + opts[i].selected = false; + } + if (opts[i].selected) { + selected.push(opts[i].value); + } + } + if (selected.length) { + this.attributes.value = selected; + } else { + this.attributes.value = []; + } + this.set("selected", selected); + } + return this; + }, + setItemsChecked: function (items) { + for (var index = 0; index < items.length; index++) { + this.setItemChecked({ + value: items[index], + checked: true + }); + } + return this; + }, + updateItemSelected: function () { + var i, + selected = this.get("selected"), auxValue, opts = this.get("options"); + if ($.isArray(this.get("value"))) { + this.set("selected", []); + selected = this.get("selected"); + for (i = 0; i < opts.length; i += 1) { + opts[i].selected = false; + } + this.set("options", opts); + auxValue = this.get("value"); + for (i = 0; i < auxValue.length; i += 1) { + this.setItemChecked({ + value: auxValue[i], + checked: true + }); + } + } else { + this.setItemChecked({ + value: this.attributes.value, + checked: true + }); + } + for (i = 0; i < selected.length; i += 1) { + this.setItemChecked({ + value: selected[i].trim ? selected[i].trim() : selected[i], + checked: true + }); + } + if (!this.attributes.disabled) { + this.get("validator").set({ + valueDomain: this.get("value"), + options: this.get("options") + }); + this.get("validator").set("value", this.get("selected").length); + this.get("validator").verifyValue(); + } + if (this.attributes.data) { + this.attributes.data["value"] = this.get("value"); + } + return this; + }, + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + */ + afterExecuteQuery: function (response) { + this.mergeRemoteOptions(response); + if (this.get("view")) { + this.get("view").switchSpinnerByControl(); + } + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(); + form.visited = []; + if (response !== "abort") { + this.get("view").showQueryFailMessage(); + this.get("view").switchSpinnerByControl(); + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + } + this.mergeRemoteOptions([]); + return this; + }, + + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + * @param dependencyData {object}, data to complete the component domain + * Is used in the method PMDynaform.model.CheckGroup.recoreryRemoteOptions + */ + setAppData: function (values, dependencyData) { + var data = { + value: [], + label: [] + }, + i, + options; + this.recoveryRemoteOptions(dependencyData); + options = this.findOptions(values, "value"); + if (_.isArray(options)) { + for (i = 0; i < options.length; i += 1) { + data.value.push(options[i].value); + data.label.push(options[i].label); + } + } + data.label = JSON.stringify(data.label); + this.set({ "data": data }, { silent: true }); + this.set({ "value": data.value }, { silent: true }); + this.set("toDraw", true); + return this; + }, + /** + * Trigger the dependencies for this Field + * @param {*} fn + * @returns {CheckGroupModel} + */ + triggerDependencies: function (fn) { + this.get("form").get("dependentsManager").createBidirectional(this, fn); + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.CheckGroupR", CheckGroupModel); +}()); + +(function () { + var CheckBoxModel = PMDynaform.model.Field.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dataType: "boolean", + disabled: false, + group: "form", + hint: "", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("checkgroup"), + label: "untitled label", + tabIndex: "", + ariaLabel: "", + ariaLabelVisible: true, + localOptions: [], + mode: "edit", + options: [], + required: false, + type: "checkbox", + validator: null, + valid: true, + value: null, + columnName: null, + originalType: null, + data: {}, + defaultValue: null, + labelsSelected: null, + optionsToTrue: [true, 1, "true", "1"], + optionsToFalse: [false, 0, "false", "0"], + variable: "", + enableValidate: true, + /** + * @member toDraw {boolean}: toDraw: When this property change, the view is redrawn + */ + toDraw: false + }, + /** + * This initialize data + * @param defData: json with valid options value and label + * @returns {CheckBoxModel} + */ + initialize: function (attrs) { + var data; + this.on("change:data", this.updateValue, this); + this.on("change:value", this.updateItemSelected, this); + this.set("validator", new PMDynaform.model.Validator({ + type: this.get("type"), + required: this.get("required"), + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + if (_.isArray(this.get("options")) && !this.get("options").length) { + this.attributes.options = [ + { + "value": "1", + "label": "true" + }, + { + "value": "0", + "label": "false" + } + ]; + this.attributes.dataType = "boolean"; + } + if (this.get("data") || this.get("value") || this.get("defaultValue")) { + data = this.initData(this.get("defaultValue"), this.get("value"), this.get("data"), this.get("variable")); + this.set({data: data}, {silent: true}); + this.attributes.value = this.get("data")["value"]; + } else { + this.attributes.data["value"] = ""; + this.attributes.data["label"] = ""; + this.attributes.value = this.get("data")["value"]; + } + this.initControl(); + this.attributes.value = this.get("data").value; + this.get("validator").set("value", this.get("value")); + this.setLocalOptions(); + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this.defineModelEvents(); + return this; + }, + initControl: function () { + var opts = this.get("options"), + i, + newOpts = [], + itemsSelected = []; + if (_.isArray(opts)) { + for (i = 0; i < opts.length; i += 1) { + if (!opts[i].value && (typeof opts[i].value !== "number")) { + opts[i].value = opts[i].label; + } + if (this.get("data") && this.get("data").value) { + if (this.get("data").value.indexOf(opts[i].value) > -1) { + opts[i].selected = true; + } else { + opts[i].selected = false; + } + } + newOpts.push({ + label: opts[i].label, + value: opts[i].value, + selected: opts[i].selected ? true : false + }); + } + } + this.set("options", newOpts); + this.set("selected", itemsSelected); + }, + setLocalOptions: function () { + this.set("localOptions", this.get("options")); + return this; + }, + getData: function () { + if (this.get("group") === "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: [this.get("value")] + } + + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: [this.get("value")] + } + } + return this; + }, + validate: function (attrs) { + var value; + value = parseInt(this.get("data")["value"]); + if (this.get("enableValidate")) { + this.get("validator").set("value", value); + if (this.get("options").length) { + this.get("validator").set("options", this.attributes.options); + } + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + isValid: function () { + return this.get("valid"); + }, + /** + * Update data with the current value + * @returns {CheckBoxModel} + */ + updateItemSelected: function () { + var currValue = this.get("value"), + currData = this.get("data"); + if (!this.attributes.disabled) { + this.get("validator").set({ + valueDomain: currValue, + options: this.get("options") + }); + this.get("validator").set("value", this.get("selected").length); + this.get("validator").verifyValue(); + } + if (currValue && currData) { + this.setData(currValue); + } + return this; + }, + /** + * Update value with the current data + * @returns {CheckBoxModel} + */ + updateValue: function () { + var currentData = this.get("data"); + if (currentData && currentData.value) { + this.set({value: currentData.value}, {silent: true}); + } + return this; + }, + /** + * Get Value from data + * @returns {null} + */ + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * Set Value + * @param value + * @returns {CheckBoxModel} + */ + setValue: function (value) { + var valuesForTrue = [1, true, "1", "true"], + valuesForFalse = [0, false, "0", "false"]; + value = (_.isArray(value) && value.length > 0) ? value[0] : value; + if (value !== undefined) { + if (valuesForTrue.indexOf(value) > -1) { + this.set("value", "1"); + } else if (valuesForFalse.indexOf(value) > -1) { + this.set("value", "0"); + } + } + return this; + }, + /** + * Set Data + * @param value + * @returns {CheckBoxModel} + */ + setData: function (value) { + var data = this.findOption(value, "value"); + if (data) { + this.set('data', { + value: data.value || '', + label: data.label || '' + }); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {boolean|string|number} valid data for this component + */ + setAppData: function (value) { + var data; + data = this.findOption(value, "value"); + if (data) { + this.selectedOptions("index", [data.index]); + this.set({"data": data}, {silent: true}); + this.set({"value": data["value"]}, {silent: true}); + this.set("toDraw", true); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.CheckBox", CheckBoxModel); +}()); + +(function () { + var DatetimeModel = PMDynaform.model.FieldR.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dataType: "date", + group: "form", + hint: "", + id: "", + name: "", + placeholder: "", + tabIndex: "", + ariaLabel: "", + required: false, + validator: null, + originalType: null, + disabled: false, + format: "YYYY-MM-DD", + mode: "edit", + data: { + value: "", + label: "" + }, + value: "", + stepping: 1, + minDate: false, + maxDate: false, + useCurrent: false, + collapse: true, + defaultDate: '', + disabledDates: [], + sideBySide: false, + daysOfWeekDisabled: false, + calendarWeeks: true, + viewMode: "days", + toolbarPlacement: "default", + showTodayButton: true, + showClear: true, + widgetPositioning: { + horizontal: "left", + vertical: "bottom" + }, + keepOpen: false, + dayViewHeaderFormat: "MMMM YYYY", + pickType: "datetime", + keyLabel: "", + enableValidate: true, + text: "", + variable: "", + type: "datetime", + label: "untitled label", + datetimeIsoFormat: "YYYY-MM-DD HH:mm:ss", + dateIsoFormat: "YYYY-MM-DD", + dependentOptions: {}, + dependencyDidUpdate: false + }, + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") + } + + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + } + return this; + }, + initialize: function (options) { + var useDefaults = { + showClear: false, + useCurrent: false + }, + useCurrentOptions = [true, false, 'year', 'month', 'day', 'hour', 'minute'], + viewMode = ['years', 'months', 'days'], + data = { + value: "", + label: "" + }, + defaultDate, + maxOrMinDate, + flag = true, + dependentOption; + this.redefinepropertiesV4(options); + + if (this.get("useCurrent") === "true") { + this.attributes.useCurrent = JSON.parse(this.get("useCurrent")); + } + if (useCurrentOptions.indexOf(this.get("useCurrent")) === -1) { + this.attributes.useCurrent = useDefaults["useCurrent"]; + } + + if (this.get("showClear") === "true") { + this.attributes.showClear = JSON.parse(this.get("showClear")); + } + + if (this.get("showClear") === "false") { + this.attributes.showClear = JSON.parse(this.get("showClear")); + } + if (typeof this.get("showClear") !== "boolean") { + this.attributes.showClear = useDefaults["showClear"]; + } + + if (this.get("format") === "false") { + this.attributes.format = JSON.parse(this.get("format")); + } + + this.customPickTimeIcon(this.get("pickType")); + + if (!_.isEmpty(this.get("data")) && (this.get("data")["value"] !== "" || this.get("data")["label"] !== "")) { + this.set("defaultDate", false); + } else { + this.set("value", this.get("defaultDate")); + this.set("data", data); + } + if (typeof this.get("maxDate") === "boolean") { + this.set("maxDate", ""); + } + + if (!this.isDate(this.get("maxDate"))) { + this.set("maxDate", ""); + } + + if (!this.isDate(this.get("minDate"))) { + this.set("minDate", ""); + } + + if (!this.isDate(this.get("defaultDate"))) { + this.set("defaultDate", ""); + } + + if (this.get("maxDate").trim().length && this.get("defaultDate") && this.get("defaultDate").trim().length) { + defaultDate = this.get("defaultDate").split("-"); + maxOrMinDate = this.get("maxDate").split("-"); + if ((parseInt(defaultDate[0]) <= parseInt(maxOrMinDate[0]))) { + if ((parseInt(defaultDate[1]) <= parseInt(maxOrMinDate[1]))) { + if ((parseInt(defaultDate[2]) <= parseInt(maxOrMinDate[2]))) { + flag = true; + } else { + flag = false; + } + } else { + flag = false; + } + } else { + flag = false; + } + if (!flag) { + this.set("defaultDate", false); + } + } + if (flag) { + if (typeof this.get("minDate") === "boolean") { + this.set("minDate", ""); + } + if (this.get("minDate").trim().length && this.get("defaultDate") && this.get("defaultDate").trim().length) { + defaultDate = this.get("defaultDate").split("-"); + maxOrMinDate = this.get("minDate").split("-"); + if ((parseInt(defaultDate[0]) >= parseInt(maxOrMinDate[0]))) { + if ((parseInt(defaultDate[1]) >= parseInt(maxOrMinDate[1]))) { + if ((parseInt(defaultDate[2]) >= parseInt(maxOrMinDate[2]))) { + flag = true; + } else { + flag = false; + } + } else { + flag = false; + } + } else { + flag = false; + } + if (!flag) { + this.set("defaultDate", false); + } + } + } + if (this.get("data") && this.get("data")["value"] !== "") { + this.attributes.value = this.get("data")["value"]; + this.attributes.keyLabel = this.get("data")["label"]; + } else { + if (this.get("defaultDate") !== "") { + this.attributes.data = { + value: this.get("defaultDate"), + label: this.get("defaultDate") + }; + } else { + this.attributes.data = { + value: "", + label: "" + }; + } + } + this.set("validator", new PMDynaform.model.Validator({ + required: this.get("required"), + type: this.get("type"), + dataType: this.get("dataType"), + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this.defineModelEvents(); + this.set("text", this.get("data")["label"]); + // Registering dependency events + if (this.get("dependentOptions")) { + for (dependentOption in this.get("dependentOptions")) { + this._dependentFieldEventRegister(this.get("dependentOptions")[dependentOption]); + } + } + return this; + }, + customPickTimeIcon: function (format) { + + }, + isValid: function () { + return this.get("valid"); + }, + validate: function (attrs) { + var valueFixed = this.get("data")["value"]; + if (this.get("enableValidate")) { + this.get("validator").set("value", valueFixed); + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + isDate: function (dateValue) { + var pattern = /@@|@\$|@=/; + var d = new Date(dateValue); + if (pattern.test(dateValue) || d == "Invalid Date" || typeof d == "undefined" || !d) { + return false; + } + return true; + }, + validateDate: function (date) { + var valid, data, value; + value = date.replace(/-/g, "/"); + if (new Date(value).toString() !== "Invalid Date") { + valid = true; + } else { + valid = false; + } + return valid; + }, + formatedData: function (value) { + var newData, + format = 'YYYY-MM-DD HH:mm:ss'; + if (value) { + newData = { + value: moment(value).format(format), + label: moment(value).format(this.get('format')) + }; + } + return newData; + }, + onChangeValue: function (attrs, item) { + var data = { value: "", label: "" }; + if (item !== undefined) { + if (this.validateDate(item)) { + data = this.formatedData(item); + } + } + this.set("data", data); + this.attributes.value = data["value"]; + this.attributes.text = data["label"]; + return this; + }, + onChangeText: function (attrs, item) { + // This method is not support to this control type + return this; + }, + /** + * Some property values that were modified in updating v3 to v4 is redefined necessary + * @param {Object} settings json configuration stored in definitiong + * @return {Object} new json configuration + */ + redefinepropertiesV4: function (settings) { + var propConf; + if (typeof settings === "object") { + if (this.get("daysOfWeekDisabled")) { + propConf = this.get("daysOfWeekDisabled"); + propConf = (_.isArray(propConf) && _.isEmpty(propConf)) ? false : propConf; + this.set("daysOfWeekDisabled", propConf); + } + } + return this; + }, + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * Set value + * @param value + * @param {callback} fn + * @returns {DatetimeModel} + */ + setValue: function (value, fn) { + if (value !== undefined && value !== null) { + this.set("value", value); + this.set("text", value); + this.set("data", { + value: value, + label: value + }); + if (_.isFunction(fn)) { + fn(); + } + } + return this; + }, + /** + * Set text + * @param value + * @param {callback} fn + */ + setText: function (value, fn) { + this.setValue(value); + if (_.isFunction(fn)) { + fn(); + } + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {string} valid data for this component + */ + setAppData: function (value) { + if (value !== undefined) { + value = value.replace(/-/g, "/"); + if (new Date(value).toString() !== "Invalid Date") { + this.set("value", value); + } else if (!value) { + this.set("value", ""); + } + } + return this; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * Subscribe the changes in dependencies + * @param {*} dt + * @param {*} serial + * @returns {FieldModel} + */ + executeDependency: function (dt, serial) { + var that = this; + _.extend(dt, this.preparePostData()); + this.set("dependencyDidUpdate", { error: false }); + this.get("form").get("dependentsManager").emit({ + channel: "dependencies", + event: that.getFieldId() + serial, + payload: "" + }); + newOptions = this.getWidgetOption(dt); + this.get("view").updateSettings(newOptions); + if (this.get("parent").get("type") === "grid" && dt.internalType !== "grid") { + this.get("parent").updateGridColumn(dt, this.getDataOptions(dt)); + } + return this; + }, + /** + * Get and prepare options for bootstrap DateTimepicker widget + * @param {Object} dt + * @returns {Object} + */ + getWidgetOption: function (dt) { + var widgetOption = {}, + option, + item, + optionSelected; + for (item in dt) { + optionSelected = null; + for (option in this.get("dependentOptions")) { + if (this.get("dependentOptions")[option].substr(2) === item) { + optionSelected = option; + break; + } + } + if (optionSelected && moment(dt[item]).isValid()) { + widgetOption[optionSelected] = moment(dt[item]).format(this.get("format")); + } + } + return widgetOption; + }, + /** + * Get and prepare options for dependencies + * @param {Object} dt + * @returns {Object} + */ + getDataOptions: function (dt) { + var widgetOption = {}, + option, + item, + optionSelected; + for (item in dt) { + optionSelected = null; + for (option in this.get("dependentOptions")) { + if (this.get("dependentOptions")[option].substr(2) === item) { + optionSelected = option; + break; + } + } + if (optionSelected && moment(dt[item]).isValid()) { + widgetOption[optionSelected] = dt[item]; + } + } + return widgetOption; + }, + /** + * After render Handler, will be fired if the form was rendered + * First time the dependent fields need to be update if there is dependencies + */ + afterRenderHook: function () { + if (!_.isEmpty(this.get("dependentOptions"))) { + this.get("form").get("dependentsManager").defaultValuesDependency(this); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.DatetimeR", DatetimeModel); +}()); + +(function () { + var SuggestModel = PMDynaform.model.FieldR.extend({ + defaults: { + autoComplete: "off", + type: "suggest", + placeholder: "untitled", + label: "untitled label", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("suggest"), + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + group: "form", + defaultValue: "", + tabIndex: "", + ariaLabel: "", + maxLengthLabel: 15, + mode: "edit", + tooltipLabel: "", + disabled: false, + dataType: "string", + executeInit: true, + required: false, + maxLength: null, + validator: null, + valid: true, + proxy: null, + variable: '', + var_uid: null, + var_name: null, + options: [], + localOptions: [], + remoteOptions: [], + columnName: null, + originalType: null, + mask: "", + clickedControl: true, + keyLabel: "", + enableValidate: true, + filter: '', + data: { + value: '', + label: '' + }, + hint: '', + nameModalSuggest: null, + dependencyDidUpdate: false, + memoryCache: false, + dataForDependent: {}, + resultsLimit: "10" + }, + eventsMobile: { + EXECUTE_QUERY_SUGGEST: "suggestField/executeQuery" + }, + /** + * Initialize the Field model + * @param {*} attrs + */ + initialize: function (attrs) { + var data; + this.set("dataType", this.get("dataType").trim().length ? this.get("dataType") : "string"); + this.set("optionsSql", null); + this.set("label", this.get("label")); + this.set("dataForDependent", {}); + this.set("defaultValue", this.get("defaultValue")); + this.set("validator", new PMDynaform.model.Validator({ + "required": this.get("required"), + requiredFieldErrorMessage: this.get("requiredFieldErrorMessage") + })); + this.initControl(); + this.setLocalOptions(); + this.setRemoteOptions(); + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this._dependentFieldEventRegister(this.get("sql")); + }, + /** + * Init the control with the default value + */ + initControl: function () { + var data = this.get("data"); + if (data && data["value"] === "" && data["label"] === "") { + if (this.get("defaultValue")) { + this.set("data", { + label: this.get("data").label, + value: this.get("defaultValue") + }); + } + } + }, + /** + * Set the local options in model + * @returns {SuggestModel} + */ + setLocalOptions: function () { + this.set("localOptions", this.get("options")); + return this; + }, + /** + * Return the flag valid + * @returns {boolean} + */ + isValid: function () { + return this.get("valid"); + }, + /** + * Validate the model + * @param {*} attrs + * @returns {SuggestModel} + */ + validate: function (attrs) { + var valueFixed = this.get("data")["value"]; + if (this.get("enableValidate")) { + this.get("validator").set("type", this.get("type")); + this.get("validator").set("required", this.get("required")); + this.get("validator").set("value", valueFixed); + this.get("validator").set("dataType", this.get("dataType")); + this.get("validator").verifyValue(); + } else { + this.get("validator").set("valid", true); + } + this.set("valid", this.get("validator").get("valid")); + return this; + }, + /** + * Return the data in format + * @returns {Object} + */ + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("data")["value"] + } + } + }, + /** + * Return the value + * @returns {Object} + */ + getValue: function () { + var data = this.get("data"); + return data ? data["value"] : null; + }, + /** + * Set Value Only works in mobile GRID ATTENTION!!!! + * @param value + * @param callback + * @returns {SuggestModel} + */ + setValue: function (value, callback) { + var that = this, dt; + this.executeQuery({ + value: value, + typeSearch: 'val' + }, function (response, err) { + if (response) { + dt = that._findOption(response, 'val', value); + that.dependencyWillUpdate({ + data: { + value: dt.value, + label: dt.text + }, + fn: callback + }); + } + }); + }, + /** + * Set Text Only works in mobile GRID ATTENTION!!!! + * @param value + * @param callback + * @returns {SuggestModel} + */ + setText: function (value, callback) { + var that = this, dt; + this.executeQuery({ + value: value, + typeSearch: 'text' + }, function (response, err) { + if (response) { + dt = that._findOption(response, 'text', value); + that.dependencyWillUpdate({ + data: { + value: dt.value, + label: dt.text + }, + fn: callback + }); + } + }); + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + * @returns {SuggestModel} + */ + setAppData: function (data) { + if (data.hasOwnProperty("value") && data.hasOwnProperty("label")) { + this.set({ "data": data }, { silent: true }); + this.set({ "value": data.value }, { silent: true }); + this.set("toDraw", true); + } + return this; + }, + /** + * buildDataForQuery, Builds the data needed to execute the query correctly + * @param info {object}: the initial data of the fields on which this component depends + * @returns dataForDependent {object} + */ + buildDataForQuery: function (info) { + var dataForDependent = this.get("form").get("dependentsManager").getDependenciesData(this); + _.extend(dataForDependent, this.preparePostData()); + _.extend(dataForDependent, { + app_uid: (PMDynaform.getProjectKeys() && PMDynaform.getProjectKeys().caseUID) ? + PMDynaform.getProjectKeys().caseUID : null, + filter: this.get('data').value, + order_by: "ASC", + var_name: this.get("id"), + limit: this.get("resultsLimit"), + sql: this.get("sql") + }); + if (this.get("dataForDependent")) { + _.extend(dataForDependent, this.get("dataForDependent")); + } + return dataForDependent; + }, + /** + * EXECUTION DEPENDENCIES METHOD + * @param {*} dt + * @param {*} serial + * @returns {SuggestModel} + */ + executeDependency: function (dt, serial) { + this.set("data", { + label: "", + value: "" + }); + this.set("dataForDependent", _.extend(dt, this.preparePostData())); + this.set("dependencyDidUpdate", { error: false }); + this.trigger('change:dependencyDidUpdate'); + this.get("form").get("dependentsManager").emit({ + channel: "dependencies", + event: this.getFieldId() + serial, + payload: "" + }); + return this; + }, + /** + * Only work with setValue helper or setOnChange helper + * @param {*} params + * @param {*} callback + */ + executeQuery: function (params, callback) { + var prj = this.get("project"), + variable, + data = { + "query": { + match: (params.typeSearch === 'text') ? { text: params.value } : { value: params.value } + } + }; + _.extend(data, this.buildDataForQuery({})); + + if (this.get("group") === "grid") { + variable = this.get("columnName"); + } else { + variable = this.get("id"); + } + + if (PMDynaform.core.ProjectMobile) { + prj.requestManager.channelEvents({ + handler: this.get("id"), + type: this.eventsMobile.EXECUTE_QUERY_SUGGEST, + bridge: true, + data: data, + callback: function (response) { + if (_.isFunction(callback)) { + callback(response); + } + } + }); + } else { + this.xhr = prj.webServiceManager.execQuerySuggest({ + data: data, + variable: variable, + callback: callback, + async: this.get("form").get("isSync") ? false : true + }); + } + }, + /** + * Filter local options + * @param value + * @param maxItems + * @param elements + * @returns {Array} + */ + filterLocalOptions: function (value, maxItems, elements) { + var itemLabel, + count = 0, + data = []; + if (value) { + $.grep(elements, function (options) { + itemLabel = options.label.toString(); + if ((itemLabel.toLowerCase().indexOf(value.toLowerCase()) !== -1) && count < maxItems) { + data.push(options); + count += 1; + } + }); + } else { + data = $.grep(elements, function (n, i) { + return (i < maxItems); + }); + } + return data; + }, + /** + * Merge Local Options And Remote Options + * @param data + * @param params + * @returns {*} + */ + mergeLocalAndRemoteOptions: function (data, params) { + var elements = [], + par = params && params.data ? params.data.filter : params.term; + elements = this.filterLocalOptions(par, this.get("resultsLimit"), this.get('options')); + data = elements.concat(data); + data = (!data.length && !params.term) ? data.concat(this.get("view").getDataSelect2()) : data; + return data; + }, + /** + * Look up the value and the text + * @param response + * @param typeSearch + * @param value + * @returns {*} + * @private + */ + _findOption: function (response, typeSearch, value) { + var newOpt, + dataMerge = response.concat(this.get('options')); + if (typeSearch === 'text') { + //if the setText helper is executed + newOpt = _.find(dataMerge, function (item) { + var text = item.label || item.text; + return text.toUpperCase() === value.toUpperCase(); + }); + } else { + //if the setValue helper is executed + newOpt = _.find(dataMerge, function (item) { + return item.value.toUpperCase() === value.toUpperCase(); + }); + } + return newOpt; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.SuggestR", SuggestModel); +}()); + +(function () { + var LinkModel = PMDynaform.model.Field.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dataType: "string", + defaultValue: "", + disabled: false, + group: "form", + hint: "", + href: "", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("link"), + label: "untitled label", + tabIndex: "", + ariaLabel: "", + mode: "edit", + required: false, + target: "_blank", + targetOptions: { + blank: "_blank", + parent: "_parent", + self: "_self", + top: "_top" + }, + rel:"noopener noreferrer", + type: "link", + valid: true, + value: "", + columnName: null, + originalType: null, + text: "", + protocol: "http://" + }, + initialize: function (options) { + var data = this.getData(), + text = data ? data.label : this.get("value"); + this.set("text", text || ""); + this.setHref(this.get("href")); + this.on("change:text", this.onChangeText, this); + this.on("change:value", this.onChangeValue, this); + this.setTarget(); + }, + setTarget: function () { + var opt = this.get("targetOptions"), + target; + + target = opt[this.get("target")] ? opt[this.get("target")] : "_blank"; + this.set("target", target); + }, + getData: function () { + return this.get("data"); + }, + /** + * Validation w3c URL standards + * @param url + * @returns {boolean} + */ + validationURL: function (url) { + var regExp = new RegExp (['^ *((ed2k|ftp|http|https|irc|mailto|news|gopher|nntp|telnet|webcal|xmpp|callto', + '|feed|svn|urn|aim|rsync|tag|ssh|sftp|rtsp|afs|file|javascript|tel|ldap):|#|\\/|\\.|\\?)'].join('')); + return regExp.test(url); + }, + + /** + * Reformat URL, add protocol + * @param url + * @returns {*} + */ + reformatURL: function (url) { + return this.get("protocol") + url; + }, + setHref: function (href) { + var newHref = href; + if (!this.validationURL(href)) { + newHref = this.reformatURL(href); + } + this.set("href", newHref); + this.updateData(newHref, this.get("text")); + return this; + }, + onChangeValue: function (attrs, item) { + if (item) { + this.setHref(item); + } + return this; + }, + onChangeText: function (attrs, item) { + if (item) { + this.set("text", item); + this.updateData(this.get("href"), item); + } + return this; + }, + updateData: function (href, dText) { + this.set("data", { + value: href, + label: dText + }); + return this; + }, + getValue: function () { + var href = this.get("href"); + return href ? href : ""; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Link", LinkModel); +}()); +(function () { + + var Label = PMDynaform.model.FieldR.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + group: "form", + hint: "", + namespace: "pmdynaform", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("label"), + label: "untitled label", + mode: "view", + options: [], + required: false, + type: "label", + columnName: null, + originalType: null, + variable: "", + var_uid: null, + var_name: null, + localOptions: [], + remoteOptions: [], + fullOptions: [""], + data: null, + value: null, + dataType: null, + keyValue: null, + optionsSql: [], + enableValidate: true, + optionsToTrue: [true, 1, "true", "1"], + optionsToFalse: [false, 0, "false", "0"], + /** + * @param {object}: dataForDependent, Stores data to eject dependent field service + */ + dataForDependent: {}, + /** + * @param {boolean}: supportedOptions + */ + supportedOptions: false, + ariaLabel: "" + }, + initialize: function (options) { + var originalType = this.get("originalType"), + newData; + if (options && _.isArray(options["options"])) { + this.set("supportedOptions", true); + } + this.set("dataForDependent", {}); + this.set("label", this.get("label")); + this.set('defaultValue', this.get('defaultDate') || this.get('defaultValue')); + this.on("change:label", this.onChangeLabel, this); + this.on("change:options", this.onChangeOptions, this); + this.on("change:data", this.onChangeData, this); + this.setLocalOptions(); + this.setRemoteOptions(); + this.mergeOptionsSql(); + this.setData(options.data); + if (originalType === "checkbox") { + newData = this.initData(this.get("defaultValue"), this.get("value"), this.get("data")); + this.setData(newData); + } + if (_.isString(this.get("variable")) && this.get("variable") !== "") { + this.set("name", this.get("variable") ? this.get("variable") : this.get("id")); + } + if (typeof this.get("formula") === "string" && + this.get('formula') !== "undefined" && + this.get('formula') !== "null" && + this.get('formula').length > 1) { + this.set("formulator", new PMDynaform.core.Formula(this.get("formula"))); + this.set("disabled", true); + } + this._dependentFieldEventRegister(this.get("sql")); + return this; + }, + getData: function () { + var value = ""; + if (this.get("group") == "grid") { + if (this.get("originalType") !== "label") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("keyValue") + } + } else { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") + } + } + } else { + if (this.get("originalType") !== "label") { + value = this.get("data")["value"]; + if (this.get('originalType') === 'checkbox') { + value = this.get("value"); + } + return { + name: this.get("name") ? this.get("name") : "", + value: value + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") + } + } + } + }, + /** + * setData, Set the data in the component + * @chainable + */ + setData: function (data) { + //when it is checkgroup it is necessary to verify the data + if (this.get("originalType") === "checkgroup") { + data = this.getDataCheckgroup(data); + } + + if (data && !_.isEmpty(data) && data.value) { + this.set("data", data); + this.set({ "value": data["value"] }, { silent: true }); + } else { + this.set("data", this.getDataWithDefaultValue()); + this.set({ "value": this.get('data')['value'] }, { silent: true }); + } + this.set("fullOptions", this.obtainingLabelsToShow()); + return this; + }, + /** + * Check data for CheckGroup + * @param data + * @returns {*} + */ + getDataCheckgroup: function (data) { + var value; + if (data && !_.isEmpty(data)) { + value = data.hasOwnProperty("value") && data.value; + if (!value || _.isEmpty(value)) { + data = { + value: [], + label: JSON.stringify([]) + }; + } + } + return data; + }, + setValue: function (value) { + var originalType = this.get("originalType"), + newData; + switch (originalType) { + case "checkbox": + newData = this.getCheckBoxData(value); + break; + case "checkgroup": + newData = this.getCheckGroupData(value); + break; + case "dropdown": + newData = this.getDropDownData(value); + break; + case "datetime": + newData = this.getDateTimeData(value); + break; + case "radio": + newData = this.getRadioData(value); + break; + case "suggest": + newData = this.getSuggestData(value); + break; + default: + newData = this.getTextBoxData(value); + break; + } + this.setNewData(newData); + return this; + }, + /** + * Gets checkbox's data + * @param value + * @returns {{}} + */ + getCheckBoxData: function (value) { + var valuesForTrue = [1, true, "1", "true"], + valuesForFalse = [0, false, "0", "false"], + options = this.get("options"), + valueDefault = (_.isArray(value) && value.length) ? value[0] : value, + dataObject = {}; + if (valuesForTrue.indexOf(valueDefault) > -1) { + dataObject = { + value: options[0]["value"], + label: options[0]["label"] + }; + } else if (valuesForFalse.indexOf(valueDefault) > -1) { + dataObject = { + value: options[1]["value"], + label: options[1]["label"] + }; + } + return dataObject; + }, + /** + * Gets checkgroup's data + * @param values + * @returns {{value: Array, label}} + */ + getCheckGroupData: function (values) { + var data, + dataObject = { + value: [], + label: "[]" + }, + resultOptions; + if (_.isString(values)) { + values = values.split(","); + } + if (_.isArray(values)) { + resultOptions = this.findOptions(values, "value"); + data = this.returnOptionsData(resultOptions); + dataObject = { + value: data["value"], + label: _.isString(data["label"]) ? JSON.parse(data["label"]) : data["label"] + }; + } + return dataObject; + }, + /** + * Gets dropdown's data + * @param value + * @returns {*|boolean|Object|{value: string, label: string}} + */ + getDropDownData: function (value) { + var defaultData = { + value: "", + label: "" + }, + dataObject = this.findOption(value, "value"); + if (!dataObject) { + dataObject = this.get("data"); + } + return dataObject || defaultData; + }, + /** + * Gets datetime's data + * @param value + * @returns {{value: string, label: string}} + */ + getDateTimeData: function (value) { + var format = 'YYYY-MM-DD HH:mm:ss', + dataObject = { value: "", label: "" }; + value = value.replace(/-/g, "/"); + if (new Date(value).toString() !== "Invalid Date") { + dataObject = { + value: moment(value).format(format), + label: moment(value).format(this.get('format')) + } + } + return dataObject; + }, + /** + * Gets radio's data + * @param value + * @returns {*|boolean|Object|{value: string, label: string}} + */ + getRadioData: function (value) { + return this.findOption(value, "value") || { value: "", label: "" }; + }, + /** + * Gets suggest's data + * @param data + * @returns {{value: *, label: *}} + */ + getSuggestData: function (data) { + var dataObject = { + value: data, + label: data + }; + if (data && _.isObject(data) && data.hasOwnProperty("value") && data.hasOwnProperty("label")) { + dataObject = { + value: data.value !== undefined ? data['value'] : "", + label: data.label !== undefined ? data['label'] : "" + } + } + return dataObject; + }, + /** + * Gets textbox and textarea's data + * @param value + * @returns {{value: *, label: *}} + */ + getTextBoxData: function (value) { + return { value: value, label: value } + }, + /** + * Sets new data getted + * @param dataObject + * @returns {Label} + */ + setNewData: function (dataObject) { + this.set("value", dataObject.value); + this.set("data", dataObject); + this.setFullOptions(dataObject.label); + return this; + }, + /** + * Gets full options + * @param items + * @returns {Label} + */ + setFullOptions: function (items) { + var options, + element, + showLabels = []; + if (_.isArray(items)) { + this.set("fullOptions", items); + } else { + try { + options = JSON.parse(JSON.stringify(items)); + if (_.isArray(options)) { + this.set("fullOptions", options); + } else { + element = options; + showLabels.push(element); + this.set("fullOptions", showLabels); + } + } catch (e) { + element = items; + showLabels.push(element); + this.set("fullOptions", showLabels); + } + } + return this; + }, + getValue: function () { + var data = this.get("data"); + return (data && data.value) || ""; + }, + getDataWithDefaultValue: function () { + var data, + options, + i; + data = { + label: this.get("defaultValue") || "", + value: this.get("defaultValue") || "" + }; + options = this.get("options") || []; + for (i = 0; i < options.length; i += 1) { + if (this.get("defaultValue") === options[i].value) { + data = options[i]; + break; + } + } + return data; + }, + setLocalOptions: function () { + this.set("localOptions", this.get("options")); + return this; + }, + addFormulaTokenAssociated: function (formulator) { + if (formulator instanceof PMDynaform.core.Formula) { + formulator.addTokenValue(this.get("id"), this.get("value")); + } + return this; + }, + updateFormulaValueAssociated: function (field) { + var resultField = field.model.get("formulator").evaluate(); + field.model.set("value", resultField); + return this; + }, + addFormulaFieldName: function (otherField) { + this.get("formulator").addField("field", otherField); + return this; + }, + /** + * Gets all labels to show + * @returns {Array} + */ + obtainingLabelsToShow: function () { + var data, + labels = []; + data = this.get("data"); + if (data && !_.isEmpty(data)) { + if (this.get("originalType") === "checkgroup") { + labels = PMDynaform.core.Utils.isJsonAndParse(data["label"]); + } else { + labels.push(data["label"]); + } + } + return labels; + }, + /** + * afterExecuteQuery: After executing the dependent field service, + * it retrieves a data array, here it handles the new data + * @param response {array}: response data set + * @chainable + */ + afterExecuteQuery: function (response) { + var currentValue = this.get("value"), + newValue; + this.clearOptions(); + this.mergeRemoteOptions(response); + this.setFirstOptionInData(); + newValue = this.get("value"); + if (_.isArray(response) && response.length > 1 && this.get("showDependentSpinners") && currentValue !== newValue) { + this.enableDependencySpinners(); + } + return this; + }, + /** + * setFirstOptionInData: Sets the first domain option if it exists + * if there are not domain a default empty data has been setted + */ + setFirstOptionInData: function () { + var index = 0, + supportedOptions = this.get("supportedOptions"), + data, + value, + responseDefault = [{ + value: "", + text: "" + }], + options = this.get("options") || []; + + _.defaults(options, responseDefault); + if (this.get("view")) { + this.get("view").switchSpinnerByControl(); + } + if (_.isArray(options)) { + if (supportedOptions) { + this.mergeRemoteOptions(options); + this.setDomainValue(index, 'index'); + } else { + value = options[index].value ? options[index].value : ""; + data = { + value: value, + label: value + }; + this.set("data", data); + } + this.set("value", this.get("data").value); + } + return this; + }, + /* + * Handler when the execute-query service fails. + * @param {*} response + * @chainable + */ + afterExecuteQueryFail: function (response) { + var form = this.get("form"), + name = this.evaluateName(), + data = { + value: "", + label: "" + }; + form.visited = []; + if (response !== "abort") { + this.get("view").showQueryFailMessage(); + } + this.set("data", data); + this.set("value", data.value); + if (this.get("view")) { + this.get("view").switchSpinnerByControl(); + } + + form.disableDependencySpinners(this.getNameToRegisterEvent(name)); + return this; + }, + /** + * setDomainValue: Set an element of the options as the data for the component + * @param value {number|string|number}: The value you are looking for in the options + * @param criteria {string}: Search criteria, The accepted values can be + * - index + * - value + * - label + * @chainable + */ + setDomainValue: function (value, criteria) { + var options = this.get("options"), + option, + invalidForAutocomplete = ["suggest"], + originalType = this.get("originalType"), + data = { + value: "", + label: "" + }; + if (criteria === "index") { + option = options[value]; + } else if (criteria === "value" || criteria === "label") { + option = this.findOption(value, criteria); + } + if (invalidForAutocomplete.indexOf(originalType) === -1) { + this.set("data", option ? option : data); + } else { + this.setData(data); + } + return this; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + * @param dependencyData {object}, data to complete the component domain + * @chainable + */ + setAppData: function (value, dependencyData) { + var data, + originalType = this.get("originalType"), + values; + + switch (originalType) { + case "checkgroup": + this.recoveryRemoteOptions(dependencyData); + values = this.findOptions(value, "value"); + this.setAppDataToCheckGroup(values); + break; + case "radio": + this.recoveryRemoteOptions(dependencyData); + data = this.findOption(value, "value"); + break; + case "checkbox": + data = this.findOption(value[0], "value"); + break; + case "dropdown": + case "suggest": + if (value.hasOwnProperty("value") && value.hasOwnProperty("label")) { + data = value; + } else { + data = this.findOption(value, value); + } + break; + case "text": + case "textarea": + data = { + value: value, + label: value + }; + break; + case "datetime": + data = this.setDatetimeValue(value); + break; + } + data = data || this.get("data"); + this.set({ "data": data }, { silent: true }); + this.set({ "value": value }, { silent: true }); + if (originalType === "checkgroup") { + this.set("fullOptions", [JSON.parse(data.label)]); + } else { + this.set("fullOptions", [data.label]); + } + this.set("toDraw", true); + return this; + }, + /** + * setDatetimeValue: Sets the corresponding data in the datetime + * @param values {date} valid data for this component + */ + setDatetimeValue: function (value) { + var format = 'YYYY-MM-DD HH:mm:ss'; + value = value.replace(/-/g, "/"); + if (new Date(value).toString() !== "Invalid Date") { + return { + value: moment(value).format(format), + label: moment(value).format(this.get('format')) + }; + } + return null; + }, + /** + * setAppDataToCheckGroup: Sets the corresponding data in the component + * @param values {array} valid data for this component + * @chainable + */ + setAppDataToCheckGroup: function (values) { + var data = { + value: [], + label: [] + }, + i; + if (_.isArray(values)) { + for (i = 0; i < values.length; i += 1) { + data.value.push(values[i].value); + data.label.push(values[i].label); + } + } + data.label = JSON.stringify(data.label); + this.set({ "data": data }, { silent: true }); + this.set({ "value": data.value }, { silent: true }); + return this; + }, + /** + * Abstract method to implement in the extended classes + */ + setAppDataToCheckbox: function () { + + }, + /** + * Retrieves the domain of the component based on + * the fields on which it depends + * @param data {object}: Data of the fields on which it depends + */ + recoveryRemoteOptions: function (data) { + var dependentsManager = this.getDependentsManager(), + response; + if (typeof data === "object" && this.get("supportedOptions")) { + _.extend(data, this.preparePostData()); + this.executeQuery(data); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Label", Label); +}()); + +(function () { + var Title = PMDynaform.model.Field.extend({ + defaults: { + type: "title", + label: "untitled label", + ariaLabel: "", + mode: "view", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("title"), + colSpan: 12, + namespace: "pmdynaform", + className: { + title: "pmdynaform-label-title", + subtitle: "pmdynaform-label-subtitle" + } + }, + initialize: function () { + this.set("label", this.get("label")); + }, + getValue: function () { + var data = this.get("label"); + return data ? data : ""; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Title", Title); +}()); +(function () { + var Empty = Backbone.Model.extend({ + defaults: { + colSpan: 12, + namespace: "pmdynaform", + id: PMDynaform.core.Utils.generateID(), + type: "empty" + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.Empty", Empty); +}()); +(function () { + var HiddenModel = PMDynaform.model.Field.extend({ + defaults: { + colSpan: 12, + dataType: "string", + namespace: "pmdynaform", + defaultValue: null, + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("hidden"), + type: "hidden", + valid: true, + value: "", + group: "form", + var_name: "", + data: null, + keyLabel: "", + options: [], + optionsSql: [], + remoteOptions: [], + text: "", + variable: "" + }, + defineModelEvents: function () { + this.on("change:value", this.onChange, this); + this.on("change:text", this.onChange, this); + return this; + }, + initialize: function (options) { + var data = {}; + this.set("defaultValue", this.get("defaultValue")); + if (!this.get("data")) { + data = { + value: this.get("defaultValue"), + label: this.get("defaultValue") + }; + this.attributes.data = data; + } + this.set("value", this.get("data")["value"]); + this.set("keyLabel", this.get("data")["label"]); + this.setLocalOptions(); + this.setRemoteOptions(); + this.mergeOptionsSql(); + this.initControl(); + if (this.get("variable").trim().length === 0) { + if (this.get("group") === "form") { + this.attributes.name = ""; + } else { + this.attributes.name = this.get("id"); + } + } + this.defineModelEvents(); + this.set("text", this.get("data")["label"]); + return this; + }, + initControl: function () { + if (this.get("defaultValue")) { + this.set("value", this.get("defaultValue")); + } + }, + onChangeValue: function () { + }, + getData: function () { + if (this.get("group") == "grid") { + return { + name: this.get("columnName") ? this.get("columnName") : "", + value: this.get("value") ? this.get("value") : "" + } + } else { + return { + name: this.get("name") ? this.get("name") : "", + value: this.get("value") ? this.get("value") : "" + } + } + }, + onChange: function (attrs, item) { + var data; + data = { + value: item || "", + label: item || "" + }; + this.set("data", data); + this.set({text: item, value: item}); + return this; + }, + getValue: function () { + var data = this.getData(); + return data ? data["value"] : null; + }, + /** + * Sets value and data + * @param value + * @returns {HiddenModel} + */ + setValue: function (value) { + if (value !== null && value !== undefined) { + this.set("value", value); + this.set("data", { + value: value, + label: value + }); + } + return this; + }, + /** + * Will update the column model + * in order to create a new cell + * @param {Object} dt + */ + updateGridModels: function(dt) { + newOptions = {data: this.get("data")}; + this.get("parent").updateGridColumn(dt, newOptions); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.Hidden", HiddenModel); +}()); + +(function () { + var ImageModel = PMDynaform.model.Field.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + disabled: false, + defaultValue: "", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("image"), + label: "untitled label", + tabIndex: "", + ariaLabel: "", + crossorigin: "anonymous", + alt: "", + src: "", + height: "", + width: "", + mode: "view", + shape: "thumbnail", + shapeTypes: { + thumbnail: "img-thumbnail", + rounded: "img-rounded", + circle: "img-circle" + }, + type: "image", + columnName: null, + originalType: null, + group: "form", + alternateText: "", + comment: "", + hint: "" + }, + initialize: function (options) { + var defaults; + this.set("label", this.get("label")); + this.set("defaultValue", this.get("defaultValue")); + this.on("change:label", this.onChangeLabel, this); + this.on("change:value", this.onChangeValue, this); + if (options && options.project) { + this.project = options.project; + } + this.setShapeType(); + }, + setShapeType: function () { + var shape = this.get("shape"), + types = this.get("shapeTypes"), + selected; + + selected = types[shape] ? types[shape] : types["thumbnail"]; + this.set("shape", selected); + return this; + }, + getValue: function () { + var value = this.get("src"); + return value ? value : ""; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.Image", ImageModel); +}()); + +(function () { + var SubFormModel = Backbone.Model.extend({ + defaults: { + colSpan: 12, + namespace: "pmdynaform", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("form"), + type: "form", + mode: "edit", + valid: true, + modelForm: null + }, + initialize: function () { + + }, + getData: function () { + return { + name: this.get("name"), + id: this.get("id"), + variables: {} + } + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.SubForm", SubFormModel); +}()); +(function () { + + var GeoMapModel = PMDynaform.model.Field.extend({ + defaults: { + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + namespace: "pmdynaform", + dragMarker: false, + dataType: "string", + disabled: false, + decimals: 6, + group: "form", + hint: "", + fullscreen: false, + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("link"), + googlemap: null, + label: "untitled label", + mode: "edit", + required: false, + valid: true, + value: "", + navigator: true, + currentLocation: false, + supportNavigator: false, + altitude: 0, + latitude: 0, + longitude: 0, + marker: null, + zoom: 15, + tooltipLabel: "", + panControl: false, + zoomControl: false, + scaleControl: false, + streetViewControl: false, + overviewMapControl: false, + mapTypeControl: false, + title: "" + }, + initialize: function () { + this.set("label", this.get("label")); + this.checkSupportGeoLocation(); + }, + checkSupportGeoLocation: function () { + var supportNavigator = navigator.geolocation ? true : false; + + this.set("supportNavigator", supportNavigator); + + return this; + }, + rightToLeftLabels: function () { + var marker = this.get("marker"), + infowindow = new google.maps.InfoWindow(); + + infowindow.setContent('القاهرة'); + google.maps.event.addListener(marker, 'click', function () { + infowindow.open(this.get("googlemap"), marker); + }); + }, + getData: function () { + return { + name: this.get("variable") ? this.get("variable").var_name : this.get("name"), + value: this.get("longitude") + "|" + this.get("latitude") + }; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.GeoMap", GeoMapModel); +}()); +(function () { + var Annotation = PMDynaform.model.Field.extend({ + defaults: { + type: "annotation", + label: "untitled label", + id: PMDynaform.core.Utils.generateID(), + name: PMDynaform.core.Utils.generateName("title"), + colSpan: 12, + namespace: "pmdynaform", + ariaLabel: "" + }, + initialize: function () { + this.set("label", this.get("label")); + }, + getValue: function () { + var data = this.get("label"); + return data ? data : null; + }, + getAppData: function () { + return {}; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Annotation", Annotation); +}()); +(function () { + var PanelField = PMDynaform.model.Field.extend({ + defaults: { + type: "panel", + showHeader: false, + showFooter: false, + title: "untitled-panel", + footerContent: "
    footer pmdynaform!
    ", + content: "
    content Body in panel PMDynaform
    ", + id: PMDynaform.core.Utils.generateID(), + colSpan: 12, + namespace: "pmdynaform", + typePanel: "default", + border: "1px" + }, + initialize: function (options) { + var length; + if (this.get("border")) { + length = this.verifyLenght(this.get("border")); + this.set("border", length); + } + }, + verifyLenght: function (length) { + if (typeof length === 'number') { + length = length + "px"; + } else if (Number(length).toString() != "NaN") { + length = length + "px"; + } else if (/^\d+(\.\d+)?px$/.test(length)) { + length = length; + } else if (/^\d+(\.\d+)?%$/.test(length)) { + length = length; + } else if (/^\d+(\.\d+)?em$/.test(length)) { + length = length; + } else if (length === 'auto' || length === 'inherit') { + length = length; + } else { + length = "1px"; + } + return length; + } + + }); + PMDynaform.extendNamespace("PMDynaform.model.PanelField", PanelField); +}()); +(function () { + /** + * @class PMDynaform.view.FlashMessageView + * A message to display for a while. + * + * Usage example: + * + * @example + * flashModel = new PMDynaform.ui.FlashMessageModel({ + * message : "This is a flas message", + * emphasisMessage: "Info", + * startAnimation:5000, + * closable:true, + * type:"danger", + * appendTo:document.body, + * duration:5000 + * }); + * flashView = new PMDynaform.ui.FlashMessageView({model:flashModel}) + * flashView.render(); + * + */ + var FlashMessageView = Backbone.View.extend({ + template: _.template($('#tpl-flashMessage').html()), + initialize: function () { + this.model.on('change', this.render, this); + }, + render: function () { + var offsetTarget; + this.$el.html(this.template(this.model.toJSON())); + this.configurateAnimation(); + return this; + }, + /** + * This method sets the necessary parameters for the effect shown + * the message using animation Jquery + * @return {[type]} [description] + */ + configurateAnimation: function () { + var offsetTarget, + target, + animation, + duration = this.model.get('duration'); + + target = this.model.get('appendTo'); + if (!(target instanceof jQuery)) { + target = jQuery(target); + } + offsetTarget = this.calculateContainerPosition(target); + this.fixPosition(offsetTarget); + + animation = this.$el.finish().css({ + 'top': offsetTarget.top - 50 + }).fadeTo(1, 0).animate({ + top: offsetTarget.top, + opacity: 1, + zIndex: '1060' + }, this.model.get('startAnimation'), 'swing'); + + if (duration) { + animation.delay(duration) + .animate({ + top: this.model.get("absoluteTop") ? 0 : offsetTarget.top, + opacity: 0, + zIndex: '0' + }); + } + + $(document.body).append(this.$el); + }, + /** + * This method calculates the position of parent container + * to place the message at the head of it + * @param {[HTMLElement]} target : this a HTML element target + * @return {[type]} return a positions left, top, width + */ + calculateContainerPosition: function (target) { + var offset, + width, + target = target || this.model.get('appendTo'); + if (!(target instanceof jQuery)) { + target = jQuery(target); + } + offset = target.offset(); + width = target.outerWidth(); + if (this.model.get("absoluteTop")) { + offset.top = this.getAbsoluteTopScrollElement(target); + } + return { + top: offset.top || 0, + left: offset.left || 0, + width: width || 0 + } + }, + /** + * This method recalculates and sets the position of the component flash message + * @param {[type]} offset this object with positions for to set in the component + */ + fixPosition: function (offset) { + var showWidth = offset.width / 2, + showLeft = offset.width / 4 + offset.left; + if (this.$el.length) { + this.$el.css({ + top: offset.top, + width: showWidth, + left: showLeft, + position: 'absolute' + }); + } + return this; + }, + getAbsoluteTopScrollElement: function () { + var scrollTop = 0; + if (document.body) { + scrollTop = $(document).scrollTop(); + } + return scrollTop; + } + }); + PMDynaform.extendNamespace('PMDynaform.ui.FlashMessageView', FlashMessageView); +}()); + +(function () { + var FileMobile = PMDynaform.model.Field.extend({ + defaults: { + autoUpload: false, + camera: true, + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + disabled: false, + dnd: false, + dndMessage: "Drag or choose local files", + extensions: "pdf, png, jpg, mp3, doc, txt", + group: "form", + height: "100%", + hint: "", + id: PMDynaform.core.Utils.generateID(), + items: [], + label: "Untitled label", + labelButton: "Choose Files", + mode: "edit", + multiple: false, + name: PMDynaform.core.Utils.generateName("file"), + preview: false, + required: false, + size: 1, //1 MB + type: "file", + proxy: [], + valid: true, + validator: null, + value: "", + files: [], + data: { + value: [], + label: null + }, + enableValidate: true + }, + + initialize: function () { + this.attributes.files = []; + this.set("items", []); + this.set("proxy", []); + if (this.get("id") && this.get("id").trim().length !== 0) { + this.set("name", this.get("id")); + } + }, + getAppData: function () { + var data, + idFiles = [], + respData = {}; + data = this.get("data"); + idFiles = _.isObject(data) && !_.isEmpty(data) && data.value ? data.value : idFiles; + respData[this.get("id")] = idFiles; + return respData; + }, + /** + * Validate a file mobile + * @returns {FileMobile} + */ + validate: function () { + var isValid = false, + value, + data = this.getAppData(); + + value = data[this.get("name")]; + if (PMDynaform.core.ProjectMobile && this.get("required") && this.get("enableValidate")) { + if (value && _.isArray(value) && value.length > 0) { + isValid = true; + } + } else { + isValid = true; + } + this.set("valid", isValid); + return this; + }, + getIDImage: function (index) { + return this.attributes.images[index].id; + }, + getBase64Image: function (index) { + return this.attributes.images[index].value; + }, + makeBase64Image: function (base64) { + return "data:image/png;base64," + base64; + }, + /** + * Request Array Image Data + * @param arrayImages + * @returns [{id:"123456789...", base64: "sdhfg%4hd/f24g.."}] || [] + */ + remoteProxyData: function (arrayImages) { + var project = this.get("project"), + response, + requestManager = project && PMDynaform.core.ProjectMobile ? project.getRequestManager() : null, + respData = [], + data; + data = this.formatArrayImagesToSend(arrayImages); + response = requestManager ? requestManager.imagesInfo(data) : project.webServiceManager.imagesInfo(data); + respData = this.formatArrayImages(response); + return respData; + }, + /** + * Format structure of the array of objects(files) + * @param arrayImages + * @returns {Array} + */ + formatArrayImagesToSend: function (arrayImages) { + var i, + item, + imageId, + defaultSize = 100, + dataToSend = []; + for (i = 0; i < arrayImages.length; i += 1) { + imageId = arrayImages[i]; + item = {}; + item.fileId = imageId; + item.version = 1; + if (PMDynaform.core.ProjectMobile) { + item.width = defaultSize; + } + dataToSend.push(item); + } + return dataToSend; + }, + /** + * Format response array + * @param arrayImages + * @returns {*} + */ + formatArrayImages: function (arrayImages) { + var i; + for (i = 0; i < arrayImages.length; i += 1) { + arrayImages[i].id = arrayImages[i]['fileId']; + arrayImages[i].base64 = arrayImages[i]['fileContent']; + delete arrayImages[i].fileId; + delete arrayImages[i].fileContent; + } + return arrayImages; + }, + remoteProxyDataMedia: function (id) { + var prj = this.get("project"), + url; + url = prj.webServiceManager.getFullURLStreaming(id); + return url; + }, + urlFileStreaming: function (id) { + var prj = this.get("project"), + url, + dataToSend; + url = prj.webServiceManager.getFullURLStreaming(id); + dataToSend = { + id: id, + filePath: url + }; + return dataToSend; + }, + getEndpointVariables: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + endpoint = endPointFixed; + } + } + } + return endPointFixed; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var view = this.get("view"); + if (data && view) { + view.setFilesRFC(data); + } + return this; + }, + /** + * Get Array Files Image Control + */ + getFiles: function () { + return this.get("files"); + }, + /** + * Set Array Files + * @param arrayFiles + * @returns {FileMobile} + */ + setFiles: function (arrayFiles) { + if (arrayFiles.length) { + this.set("files", arrayFiles); + } + return this; + }, + /** + * Update data + * @param arrayFiles + * @returns {FileMobile} + */ + updateData: function (arrayFiles) { + var i, + data, + idFiles = [], + max = _.isArray(arrayFiles) ? arrayFiles.length : 0; + for (i = 0; i < max; i += 1) { + idFiles.push(arrayFiles[i].id); + } + this.set("data", { + value: idFiles, + label: null + }); + return this; + }, + /** + * Add Item to Array Files + * @param item + */ + addItemFile: function (item) { + var arrayFiles = this.getFiles(); + if (item) { + arrayFiles.push(item); + } + this.setFiles(arrayFiles); + this.updateData(arrayFiles); + return this; + }, + /** + * Change the file id with a "newID". Using the "oldId" to do that used only for offline purposes + * @param oldId + * @param newId + */ + exchangeMobileDataId: function (oldId, newId){ + var dataArray = this.get('data').value, + filesArray = this.get('files'), + index = dataArray.indexOf(oldId); + if (index >= 0) { + dataArray[index] = newId; + // force to update files id + if (_.isArray(filesArray) && filesArray[index]) { + filesArray[index].id = newId; + } + } + this.setFiles(filesArray); + this.updateData(filesArray); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.FileMobile", FileMobile); +}()); + +(function () { + var ImageFieldModel = PMDynaform.model.Field.extend({ + defaults: { + autoUpload: false, + camera: true, + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + disabled: false, + dnd: false, + extensions: "pdf, png, jpg, mp3, doc, txt", + group: "form", + height: "100%", + hint: "", + id: PMDynaform.core.Utils.generateID(), + items: [], + label: "Untitled label", + labelButton: "Choose Files", + mode: "edit", + multiple: false, + name: PMDynaform.core.Utils.generateName("file"), + preview: false, + required: false, + size: 1, //1 MB + type: "file", + proxy: [], + valid: true, + validator: null, + value: "", + files: [], + data: { + value: [], + label: null + }, + enableValidate: true, + blockPreviewImage: false, // block the preview image when image upload progress + deletedFiles: [], // Images deleted Array + fileInProgress: "" + }, + + initialize: function () { + this.attributes.files = []; + this.set("items", []); + this.set("proxy", []); + if (this.get("id") && this.get("id").trim().length !== 0) { + this.set("name", this.get("id")); + } + }, + /** + * Get the data for this model + */ + getAppData: function () { + var data, + idFiles = [], + respData = {}; + data = this.get("data"); + idFiles = _.isObject(data) && !_.isEmpty(data) && data.value ? data.value : idFiles; + respData[this.get("id")] = idFiles; + return respData; + }, + /** + * Validate a file mobile + * @returns {FileMobile} + */ + validate: function () { + var isValid = false, + value, + data = this.getAppData(); + + value = data[this.get("name")]; + if (PMDynaform.core.ProjectMobile && this.get("required") && this.get("enableValidate")) { + if (value && _.isArray(value) && value.length > 0) { + isValid = true; + } + } else { + isValid = true; + } + this.set("valid", isValid); + return this; + }, + /** + * With the index, this method returns the id + * @param index + * @returns {*} + */ + getIDImage: function (index) { + return this.attributes.images[index].id; + }, + /** + * With the index return the base64 data image + * @param index + * @returns {*} + */ + getBase64Image: function (index) { + return this.attributes.images[index].value; + }, + /** + * This method returns a format for image tag base 64 + * @param base64 + * @returns {string} + */ + makeBase64Image: function (base64) { + return "data:image/png;base64," + base64; + }, + /** + * Request Array Image Data + * @param arrayImages + * @returns [{id:"123456789...", base64: "sdhfg%4hd/f24g.."}] || [] + */ + remoteProxyData: function (arrayImages) { + var project = this.get("project"), + response, + requestManager = project && PMDynaform.core.ProjectMobile ? project.getRequestManager() : null, + respData = [], + data; + data = this.formatArrayImagesToSend(arrayImages); + response = requestManager ? requestManager.imagesInfo(data) : project.webServiceManager.imagesInfo(data); + respData = this.formatArrayImages(response); + return respData; + }, + /** + * Format structure of the array of objects(files) + * @param arrayImages + * @returns {Array} + */ + formatArrayImagesToSend: function (arrayImages) { + var i, + item, + imageId, + defaultSize = 100, + dataToSend = []; + for (i = 0; i < arrayImages.length; i += 1) { + imageId = arrayImages[i]; + item = {}; + item.fileId = imageId; + item.version = 1; + if (PMDynaform.core.ProjectMobile) { + item.width = defaultSize; + } + dataToSend.push(item); + } + return dataToSend; + }, + /** + * Format response array + * @param arrayImages + * @returns {*} + */ + formatArrayImages: function (arrayImages) { + var i; + for (i = 0; i < arrayImages.length; i += 1) { + arrayImages[i].id = arrayImages[i]['fileId']; + arrayImages[i].base64 = arrayImages[i]['fileContent']; + delete arrayImages[i].fileId; + delete arrayImages[i].fileContent; + } + return arrayImages; + }, + /** + * Returns the url for get the image in tag html image + * @param id + * @returns {{filePath: *, id: *}} + */ + urlFileStreaming: function (id) { + var prj = this.get("project"), + url, + dataToSend; + url = prj.webServiceManager.getFullURLStreaming(id); + dataToSend = { + id: id, + filePath: url + }; + return dataToSend; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var view = this.get("view"); + if (data && view) { + view.setFilesRFC(data); + } + return this; + }, + /** + * Get Array Files Image Control + */ + getFiles: function () { + return this.get("files"); + }, + /** + * Set Array Files + * @param arrayFiles + * @returns {FileMobile} + */ + setFiles: function (arrayFiles) { + if (arrayFiles.length) { + this.set("files", arrayFiles); + } + return this; + }, + /** + * Delete file in files attribute and data + * @param idFile + */ + deleteFile: function (idFile) { + var nfiles = _.reject(this.attributes.files, function (obj) {return obj.id === idFile;}), + narr = _.map(nfiles, function (obj) {return obj.id;}); + this.addDeleteFileInProject(idFile); + this.set("files", nfiles); + this.set("data", { + label: "", + value: narr + }); + }, + /** + * Update data + * @param arrayFiles + * @returns {FileMobile} + */ + updateData: function (arrayFiles) { + var i, + data, + values = this.get("data").value, + idFiles = [], + max = _.isArray(arrayFiles) ? arrayFiles.length : 0; + for (i = 0; i < max; i += 1) { + idFiles.push(arrayFiles[i].id); + } + this.set("data", { + value: idFiles, + label: null + }); + return this; + }, + /** + * The method add to data the object with the file information to delete when the submit is pressed + * @param fileId + * @returns {ImageFieldModel} + */ + addDeleteFileInProject: function (fileId) { + var file, + fileDel, + prj = this.get("project"), + data = prj.getDataExtra("__VARIABLE_DOCUMENT_DELETE__"); + if (prj) { + fileDel = { + "appDocUid": fileId, + "name": "", + "version": 1 + }; + this.get("deletedFiles").push(fileDel); + data[this.get("id")] = this.get("deletedFiles"); + prj.setDataExtra("__VARIABLE_DOCUMENT_DELETE__", data); + } + return this; + }, + /** + * Add Item to Array Files + * @param item + */ + addItemFile: function (item) { + var arrayFiles = this.getFiles(); + if (item) { + arrayFiles.push(item); + } + this.setFiles(arrayFiles); + this.updateData(arrayFiles); + return this; + }, + /** + * Change the file id with a "newID". Using the "oldId" to do that used only for offline purposes + * @param oldId + * @param newId + */ + exchangeMobileDataId: function (oldId, newId) { + var dataArray = this.get('data').value, + filesArray = this.get('files'), + index = dataArray.indexOf(oldId); + if (index >= 0) { + dataArray[index] = newId; + // force to update files id + if (_.isArray(filesArray) && filesArray[index]) { + filesArray[index].id = newId; + } + } + this.setFiles(filesArray); + this.updateData(filesArray); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.ImageFieldModel", ImageFieldModel); +}()); + +(function () { + var GeoMobile = PMDynaform.model.Field.extend({ + defaults: { + id: PMDynaform.core.Utils.generateID(), + type: "location", + label: "Untitled label", + mode: "edit", + group: "form", + labelButton: "Map", + name: "name", + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + height: "auto", + value: "", + required: false, + hint: "", + disabled: false, + preview: false, + valid: true, + geoData: null, + interactive: true, + fixedLocation: false + }, + eventsMobile: { + SET_FIXED_LOCATION: "geoMapField/setFixedLocation" + }, + initialize: function () { + this.initControl(); + if (this.get("variable") && this.get("variable").trim().length !== 0) { + this.set("name", this.get("variable")); + } + }, + initControl: function () { + this.attributes.images = []; + this.set("preview", true); + return this; + }, + isValid: function () { + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + getDataRFC: function () { + var geoValue = this.attributes.geoData; + if (geoValue == "null" || geoValue == null) { + geoValue = null; + } else { + if (geoValue.imageId == "" || geoValue.imageId == null || typeof geoValue.imageId == "undefined") { + geoValue = geoValue; + } + } + if (geoValue) { + if (geoValue.data) { + delete geoValue.data; + } + } + return { + name: this.get("name"), + value: geoValue + }; + }, + getAppData: function () { + var data = {}, + geoValue = this.attributes.geoData; + if (geoValue) { + if (geoValue.base64) { + delete geoValue.base64; + } + } + data[this.get("name")] = geoValue; + return data; + }, + validate: function (attrs) { + }, + /** + * Get Image in Base64 + * @param id + * @returns {*} + */ + remoteProxyData: function (id) { + var project = this.get("project"); + if (id) { + return project.webServiceManager.imageInfo(id, 600); + } + }, + getImagesNetwork: function (location) { + var prj = this.get("project"), + url, + restClient, + endpoint, + respData = {}; + endpoint = this.getEndpointVariables({ + type: "getImageGeo", + keys: { + "{fileID}": location.imageId, + "{caseID}": prj.keys.caseID, + } + }); + url = prj.getFullURL(endpoint); + restClient = new PMDynaform.core.Proxy({ + url: url, + method: 'POST', + data: { + fileId: location.imageId, + width: "600", + version: 1 + }, + keys: prj.token, + successCallback: function (xhr, response) { + respData = response; + } + }); + this.set("proxy", restClient); + return respData; + }, + getEndpointVariables: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + endpoint = endPointFixed; + } + } + } + return endPointFixed; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var view; + if (data) { + view = this.get("view"); + if (view) { + view.setLocation(data); + } + } + return this; + }, + /** + * Get GeoData + * @returns {*} + */ + getGeoData: function () { + return this.get("geoData"); + }, + /** + * Set Geo Data + * @param data + * @returns {GeoMobile} + */ + setGeoData: function (data) { + if (data && typeof data === "object") { + this.set("geoData", data); + } + return this; + }, + /** + * Sets fixed location property + * and updates it's own property + */ + setFixedLocation: function (value) { + var prj = this.get("project"); + this.set("fixedLocation", value); + prj.requestManager.channelEvents({ + handler: this.get("id"), + type: this.eventsMobile.SET_FIXED_LOCATION, + bridge: true, + data: {fixedLocation: value}, + callback: function (response) { + //TODO callback actions + } + }); + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.GeoMobile", GeoMobile); +}()); + +(function () { + var Qrcode_mobile = PMDynaform.model.Field.extend({ + defaults: { + id: PMDynaform.core.Utils.generateID(), + type: "scannercode", + label: "Untitled label", + mode: "edit", + group: "form", + labelButton: "Scanner Code", + name: "name", + colSpan: 12, + colSpanLabel: 3, + colSpanControl: 9, + height: "auto", + value: "", + required: false, + hint: "", + disabled: false, + preview: false, + valid: true, + codes: [], + geoData: null, + interactive: true + }, + initialize: function () { + this.initControl(); + if (this.get("variable") && this.get("variable").trim().length !== 0) { + this.set("name", this.get("variable")); + } + }, + initControl: function () { + this.attributes.codes = []; + this.set("preview", true); + return this; + }, + isValid: function () { + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + getAppData: function () { + var data = {}; + data[this.get("name")] = this.get("codes"); + return data; + }, + addCode: function (newCode) { + var codes = this.get("codes"); + codes.push(newCode); + }, + validate: function (attrs) { + + }, + getEndpointVariables: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + endpoint = endPointFixed; + } + } + } + return endPointFixed; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var view; + view = this.get("view"); + if (data && view) { + view.setScannerCode(data); + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.model.Qrcode_mobile", Qrcode_mobile); +}()); + +(function () { + var Signature_mobile = PMDynaform.model.Field.extend({ + defaults: { + id: PMDynaform.core.Utils.generateID(), + type: "signature", + label: "Untitled label", + mode: "edit", + group: "form", + labelButton: "Signature", + name: "name", + colSpanLabel: 3, + colSpanControl: 9, + colSpan: 12, + height: "auto", + value: "", + required: false, + hint: "", + disabled: false, + preview: false, + valid: true, + files: [] + }, + initialize: function () { + this.initControl(); + if (this.get("id") && this.get("id").trim().length !== 0) { + this.set("name", this.get("id")); + } + }, + initControl: function () { + this.attributes.files = []; + this.set("preview", true); + return this; + }, + isValid: function () { + this.set("valid", this.get("validator").get("valid")); + return this.get("valid"); + }, + getAppData: function () { + var i, + data = {}, + response = [], + signatureValue = this.attributes.files; + for (i = 0; i < signatureValue.length; i++) { + if (typeof signatureValue[i].id != "undefined" && signatureValue[i].id != null) { + response.push(signatureValue[i].id); + } + } + data[this.get("name")] = response; + return data; + }, + getDataCustom: function () { + var signatureValue = this.attributes.files; + return { + name: this.get("name"), + value: signatureValue + }; + }, + validate: function (attrs) { + + }, + remoteProxyData: function (id) { + return this.get("project").webServiceManager.imageInfo(id, 300); + }, + remoteGenerateID: function (location) { + var prj = this.get("project"), + url, + restClient, + endpoint, + respData = {}; + endpoint = this.getEndpointVariable({ + type: "generateImageGeo", + keys: { + "{caseID}": prj.keys.caseID + } + }); + url = prj.getFullURL(endpoint); + restClient = new PMDynaform.core.Proxy({ + url: url, + method: 'POST', + data: location, + keys: prj.token, + successCallback: function (xhr, response) { + respData = response; + } + }); + this.set("proxy", restClient); + return respData; + + }, + getEndpointVariables: function (urlObj) { + var prj = this.get("project"), + endPointFixed, + variable, + endpoint; + if (prj.endPointsPath[urlObj.type]) { + endpoint = prj.endPointsPath[urlObj.type] + for (variable in urlObj.keys) { + if (urlObj.keys.hasOwnProperty(variable)) { + endPointFixed = endpoint.replace(new RegExp(variable, "g"), urlObj.keys[variable]); + endpoint = endPointFixed; + } + } + } + return endPointFixed; + }, + /** + * setAppData: Sets the corresponding data that is obtained from the + * service to the component + * @param data {object} valid data for this component + */ + setAppData: function (data) { + var view = this.get("view"); + + if (data && view) { + view.setSignature(data); + } + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.model.Signature_mobile", Signature_mobile); +}()); + +(function () { + var MultipleFileModel = PMDynaform.model.Field.extend({ + defaults: { + skin: "neoclassic", + href: "#", + colSpanLabel: 3, + colSpanControl: 9, + colSpan: 12, + disabled: false, + group: "form", + height: "100%", + hint: "", + id: PMDynaform.core.Utils.generateID(), + label: "Untitled label".translate(), + tabIndex: "", + ariaLabel: "", + labelButton: "Choose Files".translate(), + mode: "edit", + name: PMDynaform.core.Utils.generateName("file"), + required: false, + type: "file", + valid: true, + validator: null, + value: "", + gridDetail: "", + gridDetailArray: [], + toRemoveArray: [], + multiFileCount: 0, + data: { + value: [], + label: [] + }, + file: { + title: "", + extension: "", + size: "" + }, + types: { + "264": "video", + "bmp": "image", + "dib": "image", + "dng": "image", + "dt2": "image", + "emf": "image", + "gif": "image", + "ico": "image", + "icon": "image", + "jpeg": "image", + "jpg": "image", + "pcx": "image", + "pic": "image", + "png": "image", + "psd": "image", + "raw": "image", + "tga": "image", + "thm": "image", + "tif": "image", + "tiff": "image", + "wbmp": "image", + "wdp": "image", + "webp": "image", + "7z": "compress", + "7zip": "compress", + "arc": "compress", + "arj": "compress", + "bin": "compress", + "cab": "compress", + "cbr": "compress", + "cbz": "compress", + "cso": "compress", + "dlc": "compress", + "gz": "compress", + "gzip": "compress", + "jar": "compress", + "rar": "compress", + "tar": "compress", + "tar.gz": "compress", + "tgz": "compress", + "zip": "compress", + "3ga": "audio", + "aac": "audio", + "amr": "audio", + "ape": "audio", + "asf": "audio", + "asx": "audio", + "cda": "audio", + "dvf": "audio", + "flac": "audio", + "gp4": "audio", + "gp5": "audio", + "gpx": "audio", + "logic": "audio", + "m4a": "audio", + "m4b": "audio", + "m4p": "audio", + "midi": "audio", + "mp3": "audio", + "ogg": "audio", + "pcm": "audio", + "snd": "audio", + "uax": "audio", + "wav": "audio", + "wma": "audio", + "wpl": "audio", + "numbers": "xls", + "ods": "xls", + "sdc": "xls", + "sxc": "xls", + "xls": "xls", + "xlsm": "xls", + "xlsx": "xls", + "pdf": "pdf", + "1st": "txt", + "alx": "txt", + "asp": "txt", + "csv": "txt", + "eng": "txt", + "htm": "txt", + "html": "txt", + "log": "txt", + "lrc": "txt", + "lst": "txt", + "nfo": "txt", + "opml": "txt", + "plist": "txt", + "pts": "txt", + "reg": "txt", + "rep": "txt", + "srt": "txt", + "sub": "txt", + "tbl": "txt", + "text": "txt", + "txt": "txt", + "xml": "txt", + "xsd": "txt", + "xsl": "txt", + "xslt": "txt", + "odp": "ppt", + "pot": "ppt", + "potx": "ppt", + "pps": "ppt", + "ppsx": "ppt", + "ppt": "ppt", + "pptm": "ppt", + "pptx": "ppt", + "sdd": "ppt", + "key": "ppt", + "keynote": "ppt", + "xps": "ppt", + "3g2": "video", + "3gp": "video", + "avi": "video", + "bik": "video", + "dash": "video", + "dat": "video", + "dvr": "video", + "flv": "video", + "h264": "video", + "m2t": "video", + "m2ts": "video", + "m4v": "video", + "mkv": "video", + "mod": "video", + "mov": "video", + "mp4": "video", + "mpeg": "video", + "mpg": "video", + "mswmm": "video", + "mts": "video", + "ogv": "video", + "prproj": "video", + "rec": "video", + "rmvb": "video", + "swf": "video", + "tod": "video", + "tp": "video", + "ts": "video", + "vob": "video", + "webm": "video", + "wmv": "video", + "abw": "doc", + "aww": "doc", + "cnt": "doc", + "doc": "doc", + "docm": "doc", + "docx": "doc", + "dot": "doc", + "dotm": "doc", + "dotx": "doc", + "epub": "doc", + "ind": "doc", + "indd": "doc", + "odf": "doc", + "odt": "doc", + "ott": "doc", + "oxps": "doc", + "pages": "doc", + "pmd": "doc", + "pub": "doc", + "pwi": "doc", + "rtf": "doc", + "wpd": "doc", + "wps": "doc", + "wri": "doc" + }, + files: [], + fileCollection: null, + formData: null, + fileArray: [], + messageValidations: "This field is required.".translate(), + enableValidate: true + }, + initialize: function (options) { + if (_.isString(this.get("variable")) && this.get("variable") !== "") { + this.set("name", this.get("variable") ? this.get("variable") : this.get("id")); + } + this.set('fileArray', []); + this.set('gridDetailArray', []); + this.set('toRemoveArray', []); + this.set('multiFileCount', 0); + this.set('extensions', this.processPropertyExtension(this.get("extensions"))); + this.set("fileCollection", new PMDynaform.file.FileCollection()); + this.listenTo(this.get("fileCollection"), 'destroy', this.destroyModel); + this.listenTo(this.get("fileCollection"), 'add', this.addModel); + this.set("validator", new Backbone.Model({ + message: { + required: this.get("requiredFieldErrorMessage") || this.get("messageValidations") + } + })); + return this; + }, + /** + * Function to pre-process the extension before input into template + * @param ext{string} + * @returns {string} + */ + processPropertyExtension: function (ext) { + var resp = "", + val, + arr = []; + if (_.isString(ext)) { + $.each(ext.split(","), function (index, value) { + val = value.replace(/\*./g, "."); + val = val.replace(/\.\*/g, "*"); + arr.push(val); + }); + resp = arr.join(","); + } + return resp; + }, + isValid: function () { + + }, + /** + * Function for set data RFC + * @param data + * @returns {FileUpload} + */ + setData: function (data) { + var value, + index; + try { + value = _.isString(data.value) ? JSON.parse(data.value) : data.value; + for (index = 0; index < data.value.length; index += 1) { + this.addFileModelByJSON(data.value[index]); + } + } catch (e) { + console.error(e); + } + }, + /** + * Function for get data for Rest RFC + * @returns {{name: *, value}} + */ + getData: function () { + var data; + data = this.get("fileCollection").getData(); + return { + name: this.get("name"), + value: data + }; + }, + /** + * RFC + * @returns {{name: *, value: *}} + */ + getKeyLabel: function () { + var names; + names = this.get("fileCollection").getNames(); + return { + name: this.get("id") ? this.get("id").concat("_label") : "", + value: names + } + }, + /** + * Validate a file upload + * @returns {FileUpload} + */ + validate: function () { + var isValid = true, + files = this.get("fileCollection"), + data = this.get("data"); + if (this.get("enableValidate")) { + if (this.get("required") === true && !files.validate()) { + isValid = false; + } + } else { + isValid = true; + } + this.set("valid", isValid); + return this; + }, + /** + * Add file based from file wizard browser RFC + * @param file + * @returns {*} + */ + addFileModel: function (file) { + var files = this.get("fileCollection"), + fileSize, + fileExtension, + fileModel; + + fileModel = files.add(new PMDynaform.file.FileModel({ + file: file, + mode: "edit", + parent: this, + project: this.get("project"), + form: this.get("form"), + size: this.get("size"), + sizeUnity: this.get("sizeUnity"), + extensions: this.get("extensions") + })); + + fileSize = fileModel._isFileSizeValid(file, this.get("size"), this.get("sizeUnity")); + fileExtension = fileModel._isFileExtensionValid(file, this.get("extensions")); + + if (!fileSize) { + fileModel.set("isValid", fileSize); + fileModel.set("errorSize", true); + } + if (!fileExtension) { + fileModel.set("isValid", fileExtension); + fileModel.set("errorType", true); + } + files.updateIndex(); + return fileModel; + }, + /** + * Add file based in JSON from setData RFC + * @param file + * @returns {*} + */ + addFileModelByJSON: function (file) { + var files = this.get("fileCollection"), + fileModel; + + fileModel = files.add(new PMDynaform.file.FileModel({ + appDocUid: file.appDocUid, + file: { + name: file.name + }, + version: file.version, + mode: "view", + parent: this, + project: this.get("project"), + form: this.get("form") + })); + fileModel.set("index", files.indexOf(fileModel)); + fileModel.set("completed", true); + return fileModel; + }, + /** + * Function for get value + * @returns {string} + */ + getValue: function () { + var value = ""; + return value; + }, + destroyModel: function (model) { + var i, + files = this.get("fileCollection"); + files.updateIndex(); + this.get("toRemoveArray").push(model); + this.createRemovedHiddens(model); + this.get('view').removeHiddens(); + if (files.models && files.models.length) { + for (i = 0; i < files.models.length; i += 1) { + this.get('view').createHiddenByModel(files.models[i]); + } + } + this.updateData(); + return this; + }, + updateGridDetail: function (fileModel) { + var textDetail = '', + gridDetail = this.get('gridDetailArray'), + i; + if (_.isArray(gridDetail)) { + if (fileModel.get("isValid")) { + gridDetail.push(fileModel.get('file')['name']); + for (i = 0; i < gridDetail.length; i += 1) { + textDetail += (i > 0 ? ', ' : '') + gridDetail[i]; + } + this.set('gridDetail', textDetail); + } + } + }, + /** + * Removes the removed file in the Grid Detail info considering colon + * and if there is one file in multiple file field + * @param fileModel + */ + removeFromGridDetail: function (fileModel) { + var textDetail = '', + gridDetail = this.get('gridDetailArray'), + i; + if (_.isArray(gridDetail) && fileModel.get('index') !== null) { + // remove from array + gridDetail.splice(fileModel.get('index'), 1); + if (gridDetail.length > 0) { + for (i = 0; i < gridDetail.length; i += 1) { + textDetail += (i > 0 ? ', ' : '') + gridDetail[i]; + } + } else { + textDetail = 'Choose File'.translate(); + } + this.set('gridDetail', textDetail); + } + }, + /** + * Create a inputs hidden from a files for delete in Back End + * @param fileModel + */ + createRemovedHiddens: function (fileModel) { + this.get('view').createAllHiddens('add'); + if (fileModel.get("isValid")) { + this.get('view').createDelHiddens(fileModel); + } + }, + /** + * Reset the input Files in views for load a custom files + * @param fileModel + */ + resetInputFile: function () { + if (this.get('group') !== 'grid') { + this.get('view').resetInputFile(); + } else { + this.get('view').resetInputFileModal(); + } + return this; + }, + /** + * Update the data for getData from Form + */ + updateData: function () { + this.set("data", { + value: this.get("fileCollection").getData(), + label: this.get("fileCollection").getNames() + }); + }, + /** + * Delete files in a field + * @returns {MultipleFileModel} + */ + deleteFiles: function () { + this.get("fileCollection").deleteFiles(); + return this; + }, + /** + * Make the array that contains all deleted files + * @returns {object} + */ + makeVariableDocumentDelete: function() { + var removeArray = this.get("toRemoveArray"), + i, + item, + data = [], + result = {}; + for (i = 0; i < removeArray.length; i += 1) { + item = removeArray[i]; + data.push({ + "appDocUid": item.get("appDocUid"), + "name": item.get("file").name, + "version": item.get("version") + }); + } + result[this.get("name")] = data; + return result; + } + }); + PMDynaform.extendNamespace("PMDynaform.file.MultipleFileModel", MultipleFileModel); +}()); + +(function () { + var MultipleFileView = PMDynaform.view.Field.extend({ + template: _.template($("#tpl-multiplefile").html()), + templateInGrid: _.template($("#tpl-multiplefile-grid").html()), + templateInGridField: _.template($("#tpl-multiplefile-grid-field").html()), + validator: null, + $hiddenFile: null, + $hiddenValue: null, + $hiddenLabel: null, + $data: null, + events: { + "click .btn-uploadfile": "onClickButton", + "click .pm-multiplefile-upload": "onClickUploadModal" + }, + initialize: function (options) { + this.form = options.form ? options.form : null; + this.hiddenFile = null; + this.$hiddenFile = null; + this.$hiddenValue = null; + this.$hiddenLabel = null; + this.uploadModalModel = null; + this.uploadModalView = null; + this.model.on('change:gridDetail', this.gridDetailChange, this); + return this; + }, + /** + * Click button for choose files + * @param event + * @returns {FileUpload} + */ + onClickButton: function (event) { + event.preventDefault(); + event.stopPropagation(); + if (this.model.get("mode") === "edit") { + this.openFileWizardWeb(); + } + return this; + }, + onClickUploadModal: function (event) { + var that = this; + event.preventDefault(); + event.stopPropagation(); + this.uploadModalModel = new PMDynaform.file.UploadModalModel({ + parent: that.model + }); + this.uploadModalView = new PMDynaform.file.UploadModalView({ + model: this.uploadModalModel + }); + this.uploadModalView.renderForm(that.model.get('fileCollection')); + return this; + }, + openFileWizardWeb: function (event) { + this.$el.find(".pmdynaform-multiplefile-control input:file").trigger("click"); + return this; + }, + /** + * Function for render field + * @returns {FileUpload} + */ + render: function () { + if (this.model.get('group') === 'grid') { + this.$el.html(this.templateInGrid(this.model.toJSON())); + } else { + this.$el.html(this.template(this.model.toJSON())); + this.$data = this.$el.find(".file-upload-box"); + this.$hiddenFile = this.$el.find("input:file"); + this.$data.hide(); + this.eventsBinding(); + } + this.loadDataFromAppData(); + this.model.updateData(); + this.populateItemsPrintMode(this.getKeyLabel()); + PMDynaform.view.Field.prototype.render.apply(this, arguments); + return this; + }, + loadDataFromAppData: function () { + var data, + name; + if (this.project.mobileDataControls) { + data = this.project.mobileDataControls; + // for purposes of web grids + if (this.model.get('group') === 'grid' + && data[this.parent.model.get('id')] + && data[this.parent.model.get('id')][this.model.get('row') + 1] + && data[this.parent.model.get('id')][this.model.get('row') + 1][this.model.get('columnId')] + && data[this.parent.model.get('id')][this.model.get('row') + 1][this.model.get('columnId')][0] + && data[this.parent.model.get('id')][this.model.get('row') + 1][this.model.get('columnId')][0].appDocUid !== "") { + this.clearHiddenByModel(); + this.setData({ + value: data[this.parent.model.get('id')][this.model.get('row') + 1][this.model.get('columnId')], + label: data[this.parent.model.get('id')][this.model.get('row') + 1][this.model.get('columnId')] + }); + } + //end for purposes of web grids + if (data[this.model.get("name")]) { + name = this.model.get("name"); + this.setData({ + value: data[name], + label: data[name + "_label"] ? data[name + "_label"] : data[name] + }); + } + } + return this; + }, + /** + * Function for get data from model + * @returns {*} + */ + getData: function () { + return this.model.getData(); + }, + getKeyLabel: function () { + return this.model.getKeyLabel(); + }, + /** + * Change ID, this function is used when the device use a async calls to Rest + * @param arrayNew + * @returns {FileUpload} + */ + changeID: function (arrayNew) { + if (_.isArray(arrayNew)) { + this.model.changeID(arrayNew[0]); + } + return this; + }, + /** + * This function execute with setData2 from form Panel + * @param data + * @returns {FileUpload} + */ + setData: function (data) { + var value, + index; + try { + value = _.isString(data.value) ? JSON.parse(data.value) : data.value; + for (index = 0; index < value.length; index += 1) { + if (this.model.get('group') === 'grid') { + this.createGridMultiFile(value, index); + } else { + this.createFormMultiFile(value, index); + } + } + } catch (e) { + console.error(e); + } + }, + /** + * Creates into a form a file model, creates all hiddens related to file + * append the html tag to parent container + * @param options + * @param index + * @returns {MultipleFileView} + */ + + createFormMultiFile: function (options, index) { + var model, + view, + box = this.$el.find(".pmdynaform-multiplefile-box"); + model = this.model.addFileModelByJSON(options[index]); + view = new PMDynaform.file.FileView({ + model: model, + versionable: this.model.get("enableVersioning") + }); + view.render(); + view.createHiddenForProperty(); + box.append(view.$el); + return this; + }, + /** + * Call hiddens creator, an updates the grid info label. + * @param options + * @param index + * @returns {MultipleFileView} + */ + createGridMultiFile: function (options, index) { + var model; + model = this.model.addFileModelByJSON(options[index]); + this.model.updateGridDetail(model); + this.createHiddenByModel(model); + return this; + }, + /** + * trigger to update Detail info in a grid row + */ + gridDetailChange: function () { + var htmlOutput = this.templateInGridField(this.model.toJSON()), + box = this.$el.find(".pm-multiplefile-grid"); + box.html(htmlOutput); + }, + /** + * Validate a File Upload + * @returns {FileUpload} + */ + validate: function () { + if (this.model.get("mode") !== "view") { + if (this.validator) { + this.validator.$el.remove(); + if (_.isFunction(this.removeStyleError)) { + this.removeStyleError(); + } + } + if (_.isFunction(this.model.validate)) { + this.model.validate(); + } + if (!this.model.get("valid")) { + this.validator = new PMDynaform.view.Validator({ + model: this.model.get("validator") + }); + if (this.model.get('group') === 'grid') { + this.$el.find(".pm-multiplefile-grid").append(this.validator.$el); + } else { + this.$el.find(".pmdynaform-field-control").append(this.validator.$el); + } + + if (_.isFunction(this.applyStyleError)) { + this.applyStyleError(); + } + } + } + return this; + }, + /** + * This function apply style error in this field + * @returns {FileUpload} + */ + applyStyleError: function () { + this.$el.addClass("has-error has-feedback"); + return this; + }, + /** + * THis function remove style error in this field + * @returns {FileUpload} + */ + removeStyleError: function () { + this.$el.removeClass('has-error has-feedback'); + return this; + }, + /** + * Add events to view + * @returns {MultipleFileView} + */ + eventsBinding: function () { + var that = this, + dropBox = this.$el.find(".pmdynaform-file-dropbox"); + + this.$hiddenFile.on('change', this.changeFileControl()); + dropBox.on("drop", this.drop()); + dropBox.on('dragover', this.dragOver()); + dropBox.on('dragleave', this.dragLeave()); + return this; + }, + /** + * This function is trigger when select a file in wizard File browser + * @returns {Function} + */ + changeFileControl: function () { + var that = this; + this.populateItemsPrintMode(this.model.getKeyLabel()); + return function (event, ui) { + var files; + event.preventDefault(); + event.stopPropagation(); + files = event.target.files; + that.processFiles(files); + event.target.value = ""; + that.$el.find(that.hiddenFile).remove(); + return false; + }; + }, + drop: function () { + var that = this; + return function (event) { + var files; + event.preventDefault(); + event.stopPropagation(); + files = event.originalEvent.dataTransfer.files; + that.processFiles(files); + return false; + }; + }, + dragLeave: function () { + var that = this; + return function () { + return false; + }; + }, + dragOver: function () { + var that = this; + return function () { + return false + }; + }, + /** + * Add the file to the model multipleFile + * @param files + * @returns {MultipleFileView} + */ + processFiles: function (files) { + var index = 0, + fileView, + fileModel, + box = this.$el.find(".pmdynaform-multiplefile-box"); + if (files.length) { + for (index = 0; index < files.length; index += 1) { + fileModel = this.model.addFileModel(files[index], "edit"); + //create an instance of a file + fileView = new PMDynaform.file.FileView({ + versionable: this.model.get("enableVersioning"), + model: fileModel, + loading: true + }); + //fire wizard flag + fileModel.set('fromWizard', true); + fileView.render(); + box.append(fileView.$el); + fileModel.fileUploadMultipart(); + fileModel.set('fromWizard', false); + } + } + this.validate(); + this.populateItemsPrintMode(this.model.getKeyLabel()); + return this; + }, + /** + * Function for get value from model + * @returns {*} + */ + getValue: function () { + return this.model.getValue(); + }, + /** + * update the files counter + * @param action + * @returns {MultipleFileView} + */ + createAllHiddens: function (action) { + var files = this.model.get("fileCollection"), + i; + this.removeHiddens(); + switch (action) { + case 'add': + if (files.models && files.models.length) { + for (i = 0; i < files.models.length; i += 1) { + if (files.models[i].get('isValid')) { + this.model.get('view').createHiddenByModel(files.models[i]); + } + } + } + break; + case 'remove': + break; + default: + //TODO Actually have not the default behavior + break; + } + this.model.updateData(); + return this; + }, + /** + * Create a inputs hidden to make the object &b send the post HTML + * @returns {FileView} + */ + createHiddenByModel: function (model) { + var prop, + hidden, + name, + nameLabel, + hiddenLabel, + data = model.getData(); + if (model.get("isValid")) { + for (prop in data) { + if (data.hasOwnProperty(prop)) { + if (this.model.get('group') === 'grid') { + name = this.model.get('nameToPostControl') + "[" + model.get("index") + "]" + "[" + prop + "]"; + } else { + name = "form[" + model.getNameFileParent() + "]" + "[" + model.get("index") + "]" + "[" + prop + "]"; + } + hidden = $("", {name: name, type: "hidden", value: data[prop]}); + this.$el.append(hidden); + this.model.get('fileArray').push(hidden); + } + + } + if (this.model.get('group') === 'grid') { + nameLabel = this.model.get('nameToPostLabelControl') + "[" + model.get("index") + "]"; + hiddenLabel = $("", {name: nameLabel, type: "hidden", value: model.get('file')['name']}); + this.$el.append(hiddenLabel); + this.model.get('fileArray').push(hiddenLabel); + } + + } + return this; + }, + /** + * Remove the inputs hidden fron a file + * @returns {FileView} + */ + removeHiddens: function () { + var index; + if (_.isArray(this.model.get('fileArray'))) { + for (index = 0; index < this.model.get('fileArray').length; index += 1) { + this.model.get('fileArray')[index].remove(); + } + } + return this; + }, + /** + * Create hiddes to send the deleted files by POST + * @param model + * @returns {MultipleFileView} + */ + createDelHiddens: function (model) { + var data = model.getData(), + prop, + prj = this.model.get("project"), + hidden, + name; + for (prop in data) { + if (data.hasOwnProperty(prop)) { + name = this.createNameforHidden(prop, model); + hidden = $("", {name: name, type: "hidden", value: data[prop]}); + if (prj) { + prj.view.$el.find("form").append(hidden); + } + } + } + return this; + }, + /** + * Reset the input file html tag for reset properties + */ + resetInputFile: function () { + var nInput = $("", { + type: "file", + style: "display:none", + multiple: "multiple", + accept: this.model.get("extensions") + }); + this.$hiddenFile.before(nInput).remove(); + this.$hiddenFile = nInput; + this.eventsBinding(); + return this; + }, + /** + * Reset the input file in modal case Grid + */ + resetInputFileModal: function () { + this.uploadModalView.resetInputFile(); + return this; + }, + /** + * Create the name string for create hiddens to delete files in form & send to BackEnd + * @param prop + * @returns {string} + */ + createNameforHidden: function (prop, model) { + var index, + name = "", + indexRow = "", + varName = 'form[__VARIABLE_DOCUMENT_DELETE__]', + propName = "[" + prop + "]", + colName = "[" + this.model.get("columnId") + "]", + toRemove = this.model.get('toRemoveArray'), + parent = this.parent || null, + indexArrayRemove = this.model.get("toRemoveArray").length - 1, + column; + if (this.model.get("group") === "grid") { + column = this.model.get("columnId"); + index = parent.getColumnFileDelete(column, model.getNameFileParent()); + indexRow = "[" + index.row + "]"; + name = varName + "[" + this.parent.model.get("name") + "]" + indexRow + colName + "[" + indexArrayRemove + "]" + propName; + } else { + name = varName + "[" + model.getNameFileParent() + "]" + "[" + toRemove.length + "]" + propName; + } + return name; + }, + /** + * Populate MultipleFile on print Mode + * @param arrayItems + */ + populateItemsPrintMode: function (arrayItems) { + var i, + max, + containerPrint = this.$el.find(".content-print"), + itemsMultipleFile = arrayItems.value; + containerPrint.empty(); + for (i = 0, max = itemsMultipleFile.length; i < max; i += 1) { + containerPrint.append("
  • " + itemsMultipleFile[i] + "
  • "); + } + }, + /** + * Gets all files that was not uploaded completely + * @returns {array} + */ + getFilesNotUploaded: function () { + return this.model.get("fileCollection").getFilesNotUploaded(); + }, + /** + * Show flash message with files no uploaded yet. + * @param files + */ + showFilesNoUploaded: function (files) { + var flashModel, + i, + nameFiles = [], + message = "Form cannot be submitted because file(s) {%%%FILES%%%} (are/is) still uploading".translate(); + for (i = 0; i < files.length; i += 1) { + if (files[i].type) { + message = "Form cannot be submitted because file(s) {%%%FILES%%%} (are/is) didn't upload correctly," + + " remove the files from the form or upload the files again".translate(); + } + nameFiles.push(files[i].name); + } + if (files.length > 0) { + message = message.replace("{%%%FILES%%%}", nameFiles); + flashModel = { + message: message, + startAnimation: 1000, + type: "danger", + duration: 4000, + absoluteTop: true + }; + this.project.flashMessage(flashModel); + } + }, + /** + * Remove the inputs type hidden. + */ + clearHiddenByModel: function () { + $(this.el).find('input[type="hidden"]').remove(); + } + }); + + PMDynaform.extendNamespace("PMDynaform.file.MultipleFileView", MultipleFileView); +}()); + +"use strict"; +(function () { + var FileModel = Backbone.Model.extend({ + defaults: { + xhr: null, + file: null, + percentage: null, + appDocUid: null, + index: null, + updateIndex: false, + version: 1, + isValid: true, + fromWizard: false, + urlBase: "{server}/sys{ws}/en/{skin}/cases/cases_ShowDocument?a={docUID}&v=1", + linkService: "showDocument", + errorSize: false, + errorType: false, + error: null, + completed: false + }, + initialize: function (options) { + return this; + }, + /** + * Return a object with basic propeties to save data + * @returns {{appDocUid: *, name: *, version: number}} + */ + getData: function () { + return { + "appDocUid": this.get("appDocUid"), + "name": this.get("file").name, + "version": this.get("version") + }; + }, + /** + * Return the appDocUid from File + * @returns {{appDocUid: *}} + */ + getValue: function () { + return { + appDocUid: this.get("appDocUid") + }; + }, + /** + * Return the name from file + * @returns {*} + */ + getName: function () { + return this.get("file").name; + }, + /** + * Prepare the data for consume the endPoint and the data form multipart to save it. + * @param file + * @return {Array} + */ + prepareDataToUploadMultipart: function (file) { + var arrayResp = [], + parent = this.get("parent"), + type = parent && parent.get("inp_doc_uid") ? "INPUT" : null, + formData, + fieldName; + fieldName = this.get("parent").get("group") === "form" ? this.get("parent").get("var_name") :this.get("parent").get("id"); + formData = new FormData(); + formData.append('form[]', file); + arrayResp.push({ + "name": file.name, + "fieldName": fieldName, + "docUid": parent.get("inp_doc_uid"), + "appDocType": type, + "formData": formData + }); + return arrayResp; + }, + /** + * Execute the new upload endPoint. + * @return {FileModel} + */ + fileUploadMultipart: function () { + var project = this.get("project"), + index = 0, + xhr, + formData, + appDoc, + that = this; + if (project.webServiceManager && this.get("isValid")) { + formData = this.prepareDataToUploadMultipart(this.get("file")); + if (_.isFunction(project.webServiceManager.uploadMultipart)) { + xhr = project.webServiceManager.uploadMultipart(formData, function (err, data) { + if (err && err.code) { + that.set("error", err); + that.trigger("upload_error"); + } else { + //mark as completed the file upload procedure. + appDoc = data[index].appDocUid; + that.set("appDocUid", appDoc); + that.set("completed", true); + that.trigger("upload_complete"); + } + }, this.progressValue()); + this.set("xhr", xhr); + } + } else { + this.set("updateIndex", true); + this.get('parent').set('multiFileCount', this.get('parent').get('multiFileCount') + 1); + } + return this; + }, + /** + * Parse the name to obtain the extension + * @param path + * @returns {*} + */ + parseExtension: function (path) { + var name, + ext, + indexExt = 1, + parseExt = /(?:\.)([0-9a-z]+$)/i; + name = this.parseName(path); + ext = parseExt.exec(name); + return (ext && _.isArray(ext)) ? ext[indexExt] : ""; + }, + /** + * Parse name from a URL dir path + * @param path + * @returns {*} + */ + parseName: function (path) { + var name, + parsePath = /^.*[\\\/]/; + name = path.replace(parsePath, ''); + return name; + }, + /** + * Update the percentage upload + * @returns {Function} + */ + progressValue: function () { + var that = this; + return function (e) { + var max, current, percentage; + if (e.lengthComputable) { + max = e.total; + current = e.loaded; + percentage = (current * 100) / max; + that.set("percentage", percentage); + } + } + }, + /** + * Get Name from multipleFile Model + * @returns {*} + */ + getNameFileParent: function () { + return this.get("parent").get("name"); + }, + /** + * Perform a file extension validation. + * @param file + * @param {String} extensions A bunch of extensions separated by comma. + * @returns {boolean} + * @private + */ + _isFileExtensionValid: function (file, extensions) { + var allowedExtensions = extensions.trim().toLowerCase(), + fileExtension; + + if (allowedExtensions === "" || allowedExtensions === "*") { + return true; + } + + allowedExtensions = allowedExtensions.split(",").map(function (i) { + return i.replace(/\./, "").trim(); + }); + + fileExtension = file.name.split(".").pop().toLowerCase(); + + return allowedExtensions.indexOf(fileExtension) >= 0; + }, + /** + * Returns the amount in bytes of a value in another unit. + * @param {Number} amount + * @param {String} units A string that specifies the input amount is in, it only supports 'MB' and 'KB'. + * @returns {*} + * @private + */ + _getSizeInBytes: function (amount, units) { + switch (units) { + case 'MB': + amount *= 1024; + case 'KB': + amount *= 1024; + break; + default: + throw new Error('_getSizeInBytes(): Invalid \"units\" parameter'); + } + + return amount; + }, + /** + * Verifies if the file accomplish the size limit. + * @param {File} file The file to be verified. + * @param {Number} maxAllowedSize The amount size. + * @param {String} unit The unit the amount is in, at the moment it only supports 'MB' and 'KB'. + * @returns {boolean} + * @private + */ + _isFileSizeValid: function (file, maxAllowedSize, unit) { + var maxAllowedSize = this._getSizeInBytes(maxAllowedSize, unit); + + return maxAllowedSize === 0 || file.size <= maxAllowedSize; + }, + /** + * Convert bytes to other unit rounded to two decimals + * @param qBytes + * @param unit + * @returns {number} + */ + convertTo: function (qBytes, unit) { + var units = ["bytes", "KB", "MB", "GB"], + constant = 1024, + factor = 1, + exponent = 0, + decimals = 2, + result = 0; + if (qBytes && unit) { + exponent = units.indexOf(unit.toUpperCase()); + factor = Math.pow(constant, exponent); + result = Number((qBytes/factor).toFixed(decimals)); + } + return result; + }, + /** + * Parse de Allow Extensions + * @returns {*} + */ + parseAllowExtensions: function () { + var extensions = this.get("extensions").trim(), + allowExtension; + if (extensions) { + extensions = extensions.replace(/\s*\./g, ''); + allowExtension = extensions.split(","); + } + return allowExtension; + }, + /** + * Return a object to render with a url + * @returns {{ext: *, icon: *, name: *, href: *}|*} + */ + getLinkDownload: function () { + var resp = {}, + proj = this.get("project"); + if (proj && proj.webServiceManager && proj.webServiceManager.showDocument) { + resp = proj.webServiceManager.showDocument({ + uid: this.get("appDocUid"), + type: this.get("linkService"), + version: this.get("version") + }); + } + return resp; + }, + /** + * Calls to endpoint of download + * @param version {string} + * @param callback {function} + * @returns {FileModel} + */ + downloadFileVersion: function (version, callback) { + var project = this.get("project"), + webServiceManager = project.webServiceManager, + dataFile = { + docUID: this.get("appDocUid"), + version: version + }; + webServiceManager.downloadFile(dataFile, function (data) { + callback(data); + }); + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.file.FileModel", FileModel); +}()); + +(function () { + var FileView = Backbone.View.extend({ + template: _.template($("#tpl-multiplefile-file").html()), + loaderTemplate: _.template($("#tpl-multiplefile-version-loader").html()), + $hiddens: [], + events: { + "click .pmdynaform-mfile > .pmdynaform-mfile-actions li[data-action=delete] a": "onClickDelete", + "click .pmdynaform-mfile > .pmdynaform-mfile-actions li[data-action=abort] a": "onClickCancelUpload", + "click .pmdynaform-mfile > .pmdynaform-mfile-actions li[data-action=upload] a": "_fireUploadDialog", + "click .pmdynaform-mfile > .pmdynaform-mfile-actions li[data-action=list] a": "_listVersions", + "click .pmdynaform-mfile > .pmdynaform-mfile-actions li[data-action=unlist] a": "_unlistVersions", + "click .pmdynaform-mfile-versions li[data-action=download] a": "_downloadVersion", + "change .pmdynaform-mfile > .pmdynaform-mfile-input": "_uploadFile" + }, + iconsMap: { + "bmp": "file-image-o", + "dib": "file-image-o", + "dng": "file-image-o", + "dt2": "file-image-o", + "emf": "file-image-o", + "gif": "file-image-o", + "ico": "file-image-o", + "icon": "file-image-o", + "jpeg": "file-image-o", + "jpg": "file-image-o", + "pcx": "file-image-o", + "pic": "file-image-o", + "png": "file-image-o", + "psd": "file-image-o", + "raw": "file-image-o", + "tga": "file-image-o", + "thm": "file-image-o", + "tif": "file-image-o", + "tiff": "file-image-o", + "wbmp": "file-image-o", + "wdp": "file-image-o", + "webp": "file-image-o", + "7z": "file-zip-o", + "7zip": "file-zip-o", + "arc": "file-zip-o", + "arj": "file-zip-o", + "bin": "file-zip-o", + "cab": "file-zip-o", + "cbr": "file-zip-o", + "cbz": "file-zip-o", + "cso": "file-zip-o", + "dlc": "file-zip-o", + "gz": "file-zip-o", + "gzip": "file-zip-o", + "jar": "file-zip-o", + "rar": "file-zip-o", + "tar": "file-zip-o", + "tar.gz": "file-zip-o", + "tgz": "file-zip-o", + "zip": "file-zip-o", + "3ga": "file-audio-o", + "amr": "file-audio-o", + "ape": "file-audio-o", + "asf": "file-audio-o", + "asx": "file-audio-o", + "cda": "file-audio-o", + "dvf": "file-audio-o", + "flac": "file-audio-o", + "gp4": "file-audio-o", + "gp5": "file-audio-o", + "gpx": "file-audio-o", + "logic": "file-audio-o", + "m4a": "file-audio-o", + "m4b": "file-audio-o", + "m4p": "file-audio-o", + "midi": "file-audio-o", + "mp3": "file-audio-o", + "ogg": "file-audio-o", + "aac": "file-audio-o", + "pcm": "file-audio-o", + "snd": "file-audio-o", + "uax": "file-audio-o", + "wav": "file-audio-o", + "wma": "file-audio-o", + "wpl": "file-audio-o", + "numbers": "file-excel-o", + "ods": "file-excel-o", + "sdc": "file-excel-o", + "sxc": "file-excel-o", + "xls": "file-excel-o", + "xlsm": "file-excel-o", + "xlsx": "file-excel-o", + "pdf": "file-pdf-o", + "1st": "file-text-o", + "alx": "file-text-o", + "asp": "file-text-o", + "csv": "file-text-o", + "eng": "file-text-o", + "htm": "file-text-o", + "html": "file-text-o", + "log": "file-text-o", + "lrc": "file-text-o", + "lst": "file-text-o", + "nfo": "file-text-o", + "opml": "file-text-o", + "plist": "file-text-o", + "pts": "file-text-o", + "reg": "file-text-o", + "rep": "file-text-o", + "srt": "file-text-o", + "sub": "file-text-o", + "tbl": "file-text-o", + "text": "file-text-o", + "txt": "file-text-o", + "xml": "file-text-o", + "xsd": "file-text-o", + "xsl": "file-text-o", + "xslt": "file-text-o", + "odp": "file-powerpoint-o", + "pot": "file-powerpoint-o", + "potx": "file-powerpoint-o", + "pps": "file-powerpoint-o", + "ppsx": "file-powerpoint-o", + "ppt": "file-powerpoint-o", + "pptm": "file-powerpoint-o", + "pptx": "file-powerpoint-o", + "sdd": "file-powerpoint-o", + "key": "file-powerpoint-o", + "keynote": "file-powerpoint-o", + "xps": "file-powerpoint-o", + "264": "file-video-o", + "3g2": "file-video-o", + "3gp": "file-video-o", + "avi": "file-video-o", + "bik": "file-video-o", + "dash": "file-video-o", + "dat": "file-video-o", + "dvr": "file-video-o", + "flv": "file-video-o", + "h264": "file-video-o", + "m2t": "file-video-o", + "m2ts": "file-video-o", + "m4v": "file-video-o", + "mkv": "file-video-o", + "mod": "file-video-o", + "mov": "file-video-o", + "mp4": "file-video-o", + "mpeg": "file-video-o", + "mpg": "file-video-o", + "mswmm": "file-video-o", + "mts": "file-video-o", + "ogv": "file-video-o", + "prproj": "file-video-o", + "rec": "file-video-o", + "rmvb": "file-video-o", + "swf": "file-video-o", + "tod": "file-video-o", + "tp": "file-video-o", + "ts": "file-video-o", + "vob": "file-video-o", + "webm": "file-video-o", + "wmv": "file-video-o", + "abw": "file-word-o", + "aww": "file-word-o", + "cnt": "file-word-o", + "doc": "file-word-o", + "docm": "file-word-o", + "docx": "file-word-o", + "dot": "file-word-o", + "dotm": "file-word-o", + "dotx": "file-word-o", + "epub": "file-word-o", + "ind": "file-word-o", + "indd": "file-word-o", + "odf": "file-word-o", + "odt": "file-word-o", + "ott": "file-word-o", + "oxps": "file-word-o", + "pages": "file-word-o", + "pmd": "file-word-o", + "pub": "dofile-word-oc", + "pwi": "file-word-o", + "rtf": "file-word-o", + "wpd": "file-word-o", + "wps": "file-word-o", + "wri": "file-word-o" + }, + /** + * Initialize the view. + * @param options + * @returns {FileView} + */ + initialize: function (options) { + this.$hiddens = []; + this._versionable = options.versionable || false; + this._versions = []; + this._initLoading = options.loading; + this.listenTo(this.model, 'change:percentage', this._updatePercentage); + this.listenTo(this.model, 'change:appDocUid', this.createHiddenForProperty); + this._project = this.model.get('project'); + this._parent = this.model.get("parent"); + + if (this._initLoading) { + this.listenTo(this.model, 'upload_complete', this._onComplete); + this.listenTo(this.model, 'upload_error', this.onError); + } + + this._dom = {}; + return this; + }, + /** + * Execute the button Cancel + * @param e + * @returns {FileView} + */ + onClickCancelUpload: function (e) { + var xhr; + e.preventDefault(); + e.stopPropagation(); + + if (this._initLoading) { + xhr = this.model.get("xhr"); + if (xhr && xhr.abort) { + xhr.abort(); + this.onClickDelete(e); + } + } else if (this._xhr) { + this._xhr.abort(); + this._onComplete(); + } + + return this; + }, + /** + * Resets and displays the file uploading progress bar. + * @private + */ + _showProgressBar: function () { + var progressBar, + progressBarContainer; + if (!this._dom.progressBar) { + progressBarContainer = document.createElement('div'); + progressBarContainer.className = "progress"; + + progressBar = document.createElement('div'); + progressBar.className = "progress-bar progress-bar-success"; + + progressBarContainer.appendChild(progressBar); + + this._dom.progressBar = progressBar; + this._dom.progressBarContainer = progressBarContainer; + } + + this._dom.progressBar.textContent = ""; + this._dom.progressBar.style.width = "0%"; + this._dom.$fileInfo.append(this._dom.progressBarContainer); + this._hideButtonsFromActionList('abort'); + this._dom.$fileActions.show(); + }, + /** + * Render only file view + * @returns {FileView} + */ + render: function () { + var mode = this._parent.get("mode"), + filename = this.model.get("file").name, + ext = this.model.parseExtension(filename), + versionList; + + this.setElement(this.template({ + downloadLink: '#', + viewid: this.cid, + filename: filename, + fileversion: '', + versionable: this._versionable, + mode: mode, + iconClass: this._getIconClass(ext), + details: '', + extensions: this._parent.get("extensions") + })); + + versionList = document.createElement('ul'); + versionList.className = "pmdynaform-mfile-versions"; + this.el.appendChild(versionList); + + this._dom.$fileTitle = this.$el.find('> .pmdynaform-mfile .pmdynaform-mfile-title'); + this._dom.$fileName = this.$el.find('> .pmdynaform-mfile .pmdynaform-mfile-name'); + this._dom.$fileVersion = this.$el.find('> .pmdynaform-mfile .pmdynaform-mfile-version'); + this._dom.$fileInfo = this.$el.find('> .pmdynaform-mfile .pmdynaform-mfile-details'); + this._dom.$fileActions = this.$el.find('> .pmdynaform-mfile .pmdynaform-mfile-actions'); + this._dom.$buttonList = this._dom.$fileActions.find('li[data-action=list]'); + this._dom.fileInput = this.$el.find('#pmdynaform-input-' + this.cid); + this._dom.$versionList = $(versionList); + this._dom.$listLoaderMessage = $(this.loaderTemplate()); + + if (mode === 'edit') { + if (this._initLoading) { + this._showProgressBar(); + } else { + this._onComplete(); + } + + if (!this.model.get("isValid")) { + this.showMessageError(); + } + } else { + this._onComplete(); + } + }, + /** + * Set Message Error + */ + showMessageError: function () { + $(this._dom.progressBar).removeClass('progress-bar-success') + .addClass('progress-bar-danger') + .css("width", '100%') + .text(this.model.get("errorSize") ? this.constructMessageError("size") + : this.constructMessageError("type")); + + this._hideButtonsFromActionList('delete'); + this._dom.$fileActions.show(); + + return this; + }, + /** + * Shows the server's error + */ + _showServerError: function (message) { + var parent = this.model.get("parent"); + if (message) { + $(this._dom.progressBar).removeClass('progress-bar-success') + .addClass('progress-bar-danger') + .text(message); + this._hideButtonsFromActionList('delete'); + this._dom.$fileActions.show(); + if (parent.get("parentIsGrid")) { + parent.removeFromGridDetail(this.model); + } + } + + return this; + }, + /** + * Displays a Flash Message in error mode. + * @param message + * @returns {FileView} + * @private + */ + _showFlashErrorMessage: function (message) { + this._project.flashMessage({ + message: message, + duration: 0, + type: 'danger', + emphasisMessage: 'Error:' + }); + + return this; + }, + /** + * Displays a server error + */ + onError: function () { + var response = this.model.get("error"); + if (response) { + this._showServerError(response.message ? response.message : response.error.message); + } + }, + /** + * Destroys model. + */ + destroy: function () { + this.model.destroy(); + }, + /** + * Builds the message error. + * @param value + * @returns {string} + */ + constructMessageError: function (value, file) { + var sizeUnity = this._parent.get("sizeUnity"), + sizeAllow = this._parent.get("size") + sizeUnity, + typeAllow = this._parent.get("extensions"), + message = ""; + + switch (value) { + case "size": + message = (file ? "\"" + file.name + "\"" : 'File') + " size exceeds the allowable limit of {" + sizeAllow + "}"; + break; + case "type": + message = "Invalid file format " + (file ? 'for "' + file.name + '"': '') + ", please upload a file with one of the following formats {" + typeAllow + "}"; + break; + } + return message; + }, + /** + * update the percentage of progressbar + * @returns {FileView} + */ + _updatePercentage: function (model, value) { + value = Math.floor(value); + this._dom.progressBar.textContent = this._dom.progressBar.style.width = value + '%'; + + return this; + }, + /** + * Sets the view in its final mode. + * @returns {FileView} + * @private + */ + _onComplete: function () { + var that = this, + file = this.model.get("file"); + + setTimeout(function () { + var buttons = ['download'], + mode = that.model.get('parent').get("mode"); + + that._dom.fileInput.val(""); + that._initLoading = false; + that._dom.$fileName.text(file.name); + that._dom.$fileTitle.attr("title", file.name); + // TODO: Set the file details in the format "Created by John Doe on 2017-03-03" + that._dom.$fileInfo.empty().text(""); + that._dom.$fileActions.find('[data-action=download] a').attr('href', that.model.getLinkDownload()); + + if (mode === 'edit') { + buttons.push('delete'); + } + + if (that._versionable) { + buttons.push('list', 'unlist'); + + if (mode === 'edit') { + buttons.push('upload'); + } + } + + that._hideButtonsFromActionList(buttons); + that._dom.$fileActions.show(); + that._renderVersions(that._versions); + }, 300); + + return this; + }, + + createHiddenForProperty: function () { + var parentView = this.model.get('parent').get('view'); + if (parentView) { + parentView.clearHiddenByModel(); + parentView.createAllHiddens('add'); + } + }, + /** + * Returns the icon class for the file + * @param ext + * @returns {*|string} + * @private + */ + _getIconClass: function (ext) { + return this.iconsMap[ext] || "file-o"; + }, + /** + * Hide all action buttons, except by the especified ones. + * @param [exceptions] An array of strings with the exceptions. + * @returns {FileView} + * @private + */ + _hideButtonsFromActionList: function (exceptions) { + var exceptionSelector = [], + itemWidth = 29; // TODO: find a way to find this width dinamically + + if (typeof exceptions === 'string') { + exceptions = [exceptions]; + } + + if (_.isArray(exceptions)) { + exceptions.forEach(function (item) { + exceptionSelector.push('[data-action="' + item + '"]'); + }); + exceptionSelector = exceptionSelector.join(','); + } else { + exceptionSelector = null; + } + + if (exceptionSelector) { + this._dom.$fileActions.find('li').css("display", "").not(exceptionSelector).hide(); + } else { + this._dom.$fileActions.find('li').hide(); + } + + this._dom.$fileTitle.css('width', 'calc(100% - ' + + (this._dom.$fileActions.find(exceptionSelector || "li").size() * itemWidth) + 'px)'); + + return this; + }, + /** + * Render the supplied version in list. + * @param version + * + * @returns {FileView} + * @private + */ + _renderVersionInList: function (version) { + var versionItem = $(this.template({ + downloadLink: "#", + viewid: this.cid + "_v" + version.app_doc_version, + filename: version.app_doc_filename, + fileversion: version.app_doc_version, + versionable: false, + mode: "view", + details: "Uploaded by " + version.app_doc_create_user + " on " + version.app_doc_create_date, + iconClass: this._getIconClass(this.model.parseExtension(version.app_doc_filename)) + })); + + this._dom.$listLoaderMessage.remove(); + + versionItem.find('a').attr("data-version-number", version.app_doc_version); + versionItem.find('a').attr("data-file-name", version.app_doc_filename); + versionItem.find('.pmdynaform-mfile-action-item').not('[data-action=download]').remove() + .end().end().find('.pmdynaform-mfile-actions').show(); + + this._dom.$versionList.append(versionItem); + + return this; + }, + /** + * Renders the supplied versions on the versions list. + * @param {Array} versions + * @private + */ + _renderVersions: function (versions) { + var that = this; + + if (versions.length) { + this._dom.$versionList.empty(); + + versions.forEach(function (version) { + that._renderVersionInList(version); + }); + + } else { + this._dom.$listLoaderMessage.text("0 items"); + } + }, + /** + * Collapse the versions list. + * @param {Event} e + * @private + */ + _unlistVersions: function (e) { + e.preventDefault(); + this._dom.$versionList.stop().slideUp(); + this._dom.$buttonList.attr("data-action", "list").find('a').get(0).className = 'fa fa-chevron-circle-down'; + }, + /** + * Displays the versions list. + * @param {Event} e + * @returns {FileView} + * @private + */ + _listVersions: function (e) { + var appDocUID = this.model.get("appDocUid"), + that = this; + + e.preventDefault(); + + this._dom.$versionList.empty().append(this._dom.$listLoaderMessage.text("loading...")).stop().slideDown(); + this._dom.$buttonList.attr("data-action", "unlist").find('a').get(0).className = 'fa fa-chevron-circle-up'; + + this._project.webServiceManager.getFileVersions(appDocUID, function (err, resp) { + if (err) { + that._showFlashErrorMessage(err.status); + } else { + that._versions = resp.data.sort(function (a, b) { + return parseInt(a.app_doc_version, 10) < parseInt(b.app_doc_version, 10) ? 1 : -1; + }); + + that._renderVersions(that._versions); + } + }); + + return this; + }, + /** + * Start the upload process. + * @param {Event} e + * @private + */ + _uploadFile: function (e) { + var files = e.target.files, + index = 0, + that = this, + errorMessage, + file, + data, + fieldName, + formData = new FormData(); + + e.preventDefault(); + + if (files.length === 1) { + file = files.item(0); + + if (!this.model._isFileExtensionValid(file, this._parent.get("extensions"))) { + errorMessage = this.constructMessageError('type', file); + } else if (!this.model._isFileSizeValid(file, this._parent.get("size"), this._parent.get("sizeUnity"))) { + errorMessage = this.constructMessageError('size', file); + } + + if (errorMessage) { + return this._showFlashErrorMessage(errorMessage); + } + formData.append("form[]", file); + fieldName = this.model.get('parent').get('group') === "form" ? this.model.get('parent').get('var_name') : this.model.get('parent').get('id'); + data = { + name: file.name, + fieldName: fieldName, + docUid: this.model.get("parent").get("inp_doc_uid"), + appDocType: "INPUT", + appDocUid: this.model.get("appDocUid"), + formData: formData + }; + this._dom.$fileName.text(data.name); + this._showProgressBar(); + + this._xhr = this._project.webServiceManager.uploadMultipart([data], function (err, data) { + var newVersion, + oldAppDocUid; + + if (err) { + that._showFlashErrorMessage(err.message); + return that._onComplete(); + } + + newVersion = { + app_doc_uid: data[index].appDocUid, + app_doc_filename: data[index].appDocFilename, + doc_uid: data[index].appDocUid, + app_doc_version: data[index].docVersion, + app_doc_create_date: data[index].appDocCreateDate, + app_doc_create_user: data[index].appDocCreateUser, + app_doc_type: data[index].appDocType, + app_doc_index: data[index].appDocIndex + }; + oldAppDocUid = that.model.get("appDocUid"); + + that._xhr = null; + that._versions.unshift(newVersion); + + that.model.set({ + file: { + name: newVersion.app_doc_filename + }, + version: newVersion.app_doc_version + }).set("appDocUid", newVersion.app_doc_uid); + //The appDocUid update is not being performed in the first call due it is necessary to ensure + // it is called after the name and version update, in order to update the hidden fields. + + if (oldAppDocUid === newVersion.app_doc_uid) { + that.createHiddenForProperty(); + } + that._onComplete(); + }, function (e) { + if (e.lengthComputable) { + that._updatePercentage(null, (e.loaded * 100) / e.total); + } + }); + } else if (files.length > 1) { + this._showFlashErrorMessage("Only one version per file can be uploaded."); + } + + }, + /** + * Get data and create link of download + * @param e + * @private + */ + _downloadVersion: function (e) { + var that = this, + item = e.target, + version = item.getAttribute("data-version-number"), + nameFile = item.getAttribute("data-file-name"), + url; + this.model.downloadFileVersion(version, function (data) { + if (window.navigator && window.navigator.msSaveOrOpenBlob) { + window.navigator.msSaveOrOpenBlob(data, nameFile); + } else { + url = URL.createObjectURL(data); + that._executeFakeLink(url, nameFile); + window.URL.revokeObjectURL(url); + } + }); + e.preventDefault(); + }, + /** + * Execute download + * @param url {string} + * @param nameFile {string} + * @returns {FileView} + * @private + */ + _executeFakeLink: function (url, nameFile) { + var fakeLink = $("", { + "id": "fakeDownloadLink", + "href": url, + "download": nameFile + }).hide(); + fakeLink.appendTo("body"); + fakeLink[0].click(); + fakeLink.remove(); + return this; + }, + _fireUploadDialog: function (e) { + e.preventDefault(); + this._dom.fileInput.click(); + }, + /** + * Delete a file handler + * @returns {FileView} + */ + onClickDelete: function (e) { + var parentView = this.model.get('parent').get('view'); + if (this.model.get("parent").get("mode") === "edit" && parentView) { + this.model.destroy(); + this.remove(); + if (this.model.get('parent').get('group') === 'grid') { + this.model.get('parent').removeFromGridDetail(this.model); + } + this.model.get('parent').resetInputFile(); + } + + e.preventDefault(); + + return this; + } + }); + + PMDynaform.extendNamespace("PMDynaform.file.FileView", FileView); +}()); + +(function () { + var FileCollection = Backbone.Collection.extend({ + model: PMDynaform.file.FileModel, + /** + * Get the values from all Files + * @returns {Array} + */ + getValues: function () { + var index, + resp = []; + for (index = 0; index < this.models.length; index += 1) { + if (_.isFunction(this.models[index].getValue)) { + resp.push(this.models[index].getValue()); + } + } + return resp; + }, + /** + * Get the data{appDocuid, name, version} form all files + * @returns {Array} + */ + getData: function () { + var index, + resp = []; + for (index = 0; index < this.models.length; index += 1) { + if (_.isFunction(this.models[index].getData)) { + resp.push(this.models[index].getData()); + } + } + return resp; + }, + /** + * Get the names from files + * @returns {Array} + */ + getNames: function () { + var index, + resp = []; + for (index = 0; index < this.models.length; index += 1) { + if (_.isFunction(this.models[index].getName)) { + resp.push(this.models[index].getName()); + } + } + return resp; + }, + /** + * Validate the file + * @returns {Array} + */ + validate: function () { + var index, + resp = false; + for (index = 0; index < this.models.length; index += 1) { + if (this.models[index].get("isValid")) { + resp = true; + break; + } + } + return resp; + }, + /** + * Update index valid in all files + * @returns {Array} + */ + updateIndex: function () { + var index, + indexNew = 0; + for (index = 0; index < this.models.length; index += 1) { + if (this.models[index].get("isValid")) { + this.models[index].set("index", indexNew); + indexNew += 1; + } + } + return this; + }, + /** + * Delete files in a field + * @returns {FileCollection} + */ + deleteFiles: function () { + var index = 0; + while (this.models.length > 0) { + this.models[index].destroy(); + } + return this; + }, + /** + * Gets all files the the completed attribute is "false" + */ + getFilesNotUploaded: function() { + var index, + resp = false, + unCompletedFiles= []; + for (index = 0; index < this.models.length; index += 1) { + if (!this.models[index].get("completed") && !this.models[index].get("error")) { + unCompletedFiles.push({ "name": this.models[index].attributes.file.name}); + } + } + return unCompletedFiles; + } + }); + + PMDynaform.extendNamespace("PMDynaform.file.FileCollection", FileCollection); +}()); + +(function () { + var ProgressBar = Backbone.View.extend({ + template: _.template($("#tpl-progressbar").html()), + percentage: 0, + message: "", + title: "", + striped: false, + animate: false, + type: "default", + types: ["default", "info", "success", "warning", "danger", "file"], + col: 12, + initialize: function (options) { + this.percentage = options.percentage ? options.percentage : 0; + this.title = options.title ? options.title : ""; + if (options.type && _.indexOf(this.types, options.type) !== -1) { + this.type = options.type; + } + this.striped = options.striped ? options.striped : false; + this.animate = options.animate ? options.animate : false; + this.message = options.message ? options.message : ""; + this.col = options.col ? options.col : 12; + return this; + }, + /** + * Render the view of progressBar + */ + render: function () { + var obj = { + value: 0, + title: this.title, + col: this.col, + type: this.type, + striped: this.striped, + animate: this.animate + }; + this.setElement(this.template(obj)); + this.setPercentage(this.percentage); + this.setMessage(this.message); + this.$el.find(".progressbar-title").tooltip({ + title: this.title + }); + return this; + }, + /** + * Set the percentage to progressbar + * @param percentage + */ + setPercentage: function (percentage) { + var bar = this.$el.find(".progress-bar"); + bar.width(percentage + "%"); + return this; + }, + /** + * Set the type[color] to progresBar + * @param type + */ + setType: function (type) { + var bar = this.$el.find(".progress-bar"); + bar.removeClass("progress-bar-" + this.type); + if (_.indexOf(this.types, type) !== -1) { + bar.addClass("progress-bar-" + type); + this.type = type; + } + return this; + }, + /** + * Set the message in the progress bar + * @param message + * @returns {ProgressBar} + */ + setMessage: function (message) { + var bar = this.$el.find(".progress-bar"); + bar.html(message); + return this; + }, + /** + * Disable the animation striped in the progressbar + * @param message + * @returns {ProgressBar} + */ + disableAnimation: function (message) { + var bar = this.$el.find(".progress-bar"); + bar.removeClass("active"); + return this; + }, + /** + * Set the progress bar striped for animation + * @param value + * @returns {ProgressBar} + */ + setStriped: function (value) { + var bar = this.$el.find(".progress-bar"); + if (_.isBoolean(value)) { + this.striped = value; + if (value) { + bar.addClass("progress-bar-striped"); + } else { + bar.removeClass("progress-bar-striped"); + } + } + return this; + } + }); + PMDynaform.extendNamespace("PMDynaform.ui.ProgressBar", ProgressBar); +}()); +(function () { + /** + * UploadModalModel class Inherited from MultipleFileModel + * + */ + var UploadModalModel = PMDynaform.file.MultipleFileModel.extend({ + defaults: { + parent: null + }, + /** + * Adds the file model to collection to drive all files in a collection + * validates the size too + * @param file + * @param mode + * @param parentView + * @returns {*} + */ + addFileModel: function (file) { + var parentFile = this.get('parent'), + files = parentFile.get('fileCollection'), + fileSize, + fileExtension, + fileModel; + + fileModel = new PMDynaform.file.FileModel({ + file: file, + mode: "edit", + parent: parentFile, + project: parentFile.get('project'), + form: parentFile.get('form'), + size: parentFile.get('size'), + sizeUnity: parentFile.get('sizeUnity'), + extensions: parentFile.get("extensions") + }); + + fileSize = fileModel._isFileSizeValid(file, parentFile.get("size"), parentFile.get("sizeUnity")); + fileExtension = fileModel._isFileExtensionValid(file, parentFile.get("extensions")); + + if (!fileSize) { + fileModel.set("isValid", fileSize); + fileModel.set("errorSize", true); + } + if (!fileExtension) { + fileModel.set("isValid", fileExtension); + fileModel.set("errorType", true); + } + if (fileModel.get("isValid")) { + fileModel = files.add(fileModel); + files.updateIndex(); + } + return fileModel; + } + + }); + PMDynaform.extendNamespace("PMDynaform.file.UploadModalModel", UploadModalModel); +}()); +(function () { + var UploadModal = Backbone.View.extend({ + timeHide: 1000, + template: _.template($("#tpl-upload-modal").html()), + modal: null, + $hiddenFile: null, + labelButton: "Choose Files".translate(), + labelClose: "Close".translate(), + $hiddens: [], + initialize: function () { + //TODO: no need params. + }, + /** + * Render the modal from a multiple file in a grid field, receive a backbone collection + * @param collection + * @returns {UploadModal} + */ + renderForm: function (collection) { + var that = this, + box, + i, + model, + mode = "edit", + ext = "", + view, + parent = this.model.get("parent"); + + if ($('#modalUpload').length) { + $('#modalUpload').remove(); + } + mode = parent ? parent.get("mode") : mode; + ext = parent ? parent.get("extensions") : ext; + this.modal = $(this.template({ + mode: mode, + labelButton: this.labelButton, + labelClose: this.labelClose, + extensions: ext + })); + $('body').append(this.modal); + + this.show(); + this.eventsBinding(); + this.modal.find('.btn-uploadfile').on('click', function (e) { + that.onClickUploadButton(e); + }); + box = this.modal.find(".pmdynaform-multiplefile-box"); + if (collection instanceof Backbone.Collection) { + for (i = 0; i < collection.length; i += 1) { + model = collection.at(i); + if (!model.get("error")) { + view = new PMDynaform.file.FileView({ + model: model, + versionable: this.model.get("parent").get("enableVersioning") + }); + view.render(); + box.append(view.$el); + } + } + } + this.removeModal(); + return this; + }, + + /** + * show modal form + */ + show: function () { + var modalUpload = $('#modalUpload'); + modalUpload.modal({backdrop: 'static', keyboard: false}, 'show'); + return this; + }, + /** + * Listen event hidden and remove modal if exist + * @returns {UploadModal} + */ + removeModal: function () { + var modalUpload = $('#modalUpload'); + modalUpload.on('hidden.bs.modal', function () { + if (modalUpload.length) { + modalUpload.remove(); + } + }); + return this; + }, + /** + * upload button handler + * @param event + */ + onClickUploadButton: function (event) { + event.preventDefault(); + event.stopPropagation(); + if (this.model.get("parent") && this.model.get("parent").get('mode') === "edit") { + this.openFileWizardWeb(); + } + }, + /*** + * Open Wizard to select upload files + * @param event + */ + openFileWizardWeb: function () { + $('.pm-modal-upload').find("input:file").trigger("click"); + return this; + }, + + /** + * change files handler + * @param event + * @returns {boolean} + */ + changeFileControl: function (event) { + var files, + parent = this.model.get("parent"); + event.preventDefault(); + event.stopPropagation(); + files = event.target.files; + this.processFiles(files); + event.target.value = ""; + parent.get('view').populateItemsPrintMode(parent.getKeyLabel()); + return false; + }, + /** + * process al files to upload to create an instance of a file model an view + * at last render the upload file + * @param files + * @returns {UploadModal} + */ + processFiles: function (files) { + var index = 0, + fileView, + fileModel, + box = this.modal.find(".pmdynaform-multiplefile-box"); + if (files.length) { + for (index = 0; index < files.length; index += 1) { + fileModel = this.model.addFileModel(files[index], "edit", this); + + fileView = new PMDynaform.file.FileView({ + model: fileModel, + loading: true, + versionable: this.model.get("parent").get("enableVersioning") + }); + fileModel.set('fromWizard', true); + fileView.render(); + box.append(fileView.$el); + fileModel.fileUploadMultipart(); + + fileModel.set('fromWizard', false); + this.model.get('parent').updateGridDetail(fileModel); + } + } + return this; + }, + /** + * Reset the input file html tag for reset properties + */ + resetInputFile: function () { + var parent = this.model.get("parent"), + nInput = $("", { + type: "file", + style: "display:none", + multiple: "multiple", + accept: parent.get("extensions") + }); + this.$hiddenFile.before(nInput).remove(); + this.$hiddenFile = nInput; + this.eventsBinding(); + parent.get('view').populateItemsPrintMode(parent.getKeyLabel()); + return this; + }, + eventsBinding: function () { + var that = this; + this.$hiddenFile = this.modal.find("input:file"); + this.$hiddenFile.on('change', function (e) { + that.changeFileControl(e); + }); + } + }); + PMDynaform.extendNamespace("PMDynaform.file.UploadModalView", UploadModal); +}()); + +(function() { + var Spinner = Backbone.View.extend({ + template: _.template($("#tpl-spinner").html()), + initialize: function(options) { + return this; + }, + /** + * Render the view of progressBar + * @chainable + */ + render: function() { + var obj = { + col: this.col + }; + this.setElement(this.template(obj)); + return this; + }, + /** + * Hides the progress html item + * @chainable + */ + hide: function() { + var progress = this.$el.find(".pm-field-loading"); + progress.addClass('hidden'); + return this; + }, + /** + * Shows the progress bar html item + * @chainable + */ + show: function() { + var progress = this.$el.find(".pm-field-loading"); + if(progress.hasClass('hidden')) { + progress.removeClass('hidden'); + } + return this; + } + + }); + PMDynaform.extendNamespace("PMDynaform.ui.Spinner", Spinner); +})(); + diff --git a/workflow/public_html/lib/pmdynaform/build/pmdynaform.html b/workflow/public_html/lib/pmdynaform/build/pmdynaform.html new file mode 100644 index 000000000..82f1e6af0 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/build/pmdynaform.html @@ -0,0 +1,2025 @@ + + + + PMDynaform + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {javascript} + + diff --git a/workflow/public_html/lib/pmdynaform/libs/animate-css/animate.css b/workflow/public_html/lib/pmdynaform/libs/animate-css/animate.css new file mode 100644 index 000000000..dac48f174 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/libs/animate-css/animate.css @@ -0,0 +1,3623 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.7.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2018 Daniel Eden + */ + +@-webkit-keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +@keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +@keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes heartBeat { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 14% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 28% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 42% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 70% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes heartBeat { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 14% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 28% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 42% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 70% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.heartBeat { + -webkit-animation-name: heartBeat; + animation-name: heartBeat; + -webkit-animation-duration: 1.3s; + animation-duration: 1.3s; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; +} + +@-webkit-keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +.bounceOut { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) + rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) + rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) + rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) + rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-name: hinge; + animation-name: hinge; +} + +@-webkit-keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.jackInTheBox { + -webkit-animation-name: jackInTheBox; + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.delay-1s { + -webkit-animation-delay: 1s; + animation-delay: 1s; +} + +.animated.delay-2s { + -webkit-animation-delay: 2s; + animation-delay: 2s; +} + +.animated.delay-3s { + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.animated.delay-4s { + -webkit-animation-delay: 4s; + animation-delay: 4s; +} + +.animated.delay-5s { + -webkit-animation-delay: 5s; + animation-delay: 5s; +} + +.animated.fast { + -webkit-animation-duration: 800ms; + animation-duration: 800ms; +} + +.animated.faster { + -webkit-animation-duration: 500ms; + animation-duration: 500ms; +} + +.animated.slow { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.slower { + -webkit-animation-duration: 3s; + animation-duration: 3s; +} + +@media (print), (prefers-reduced-motion) { + .animated { + -webkit-animation: unset !important; + animation: unset !important; + -webkit-transition: none !important; + transition: none !important; + } +} diff --git a/workflow/public_html/lib/pmdynaform/libs/backbone/backbone-min.js b/workflow/public_html/lib/pmdynaform/libs/backbone/backbone-min.js new file mode 100644 index 000000000..26ff009f2 --- /dev/null +++ b/workflow/public_html/lib/pmdynaform/libs/backbone/backbone-min.js @@ -0,0 +1 @@ +(function(t,e){if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){t.Backbone=e(t,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore");e(t,exports,i)}else{t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}})(this,function(t,e,i,r){var s=t.Backbone;var n=[];var a=n.push;var o=n.slice;var h=n.splice;e.VERSION="1.1.2";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var u=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,r){if(!c(this,"once",t,[e,r])||!e)return this;var s=this;var n=i.once(function(){s.off(t,n);e.apply(this,arguments)});n._callback=e;return this.on(t,n,r)},off:function(t,e,r){var s,n,a,o,h,u,l,f;if(!this._events||!c(this,"off",t,[e,r]))return this;if(!t&&!e&&!r){this._events=void 0;return this}o=t?[t]:i.keys(this._events);for(h=0,u=o.length;h").attr(t);this.setElement(r,false)}else{this.setElement(i.result(this,"el"),false)}}});e.sync=function(t,r,s){var n=T[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:n,dataType:"json"};if(!s.url){a.url=i.result(r,"url")||M()}if(s.data==null&&r&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(s.attrs||r.toJSON(s))}if(s.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(s.emulateHTTP&&(n==="PUT"||n==="DELETE"||n==="PATCH")){a.type="POST";if(s.emulateJSON)a.data._method=n;var o=s.beforeSend;s.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",n);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!s.emulateJSON){a.processData=false}if(a.type==="PATCH"&&k){a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var h=s.xhr=e.ajax(i.extend(a,s));r.trigger("request",r,h,s);return h};var k=typeof window!=="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent);var T={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var $=e.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var S=/\((.*?)\)/g;var H=/(\(\?)?:\w+/g;var A=/\*\w+/g;var I=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend($.prototype,u,{initialize:function(){},route:function(t,r,s){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(r)){s=r;r=""}if(!s)s=this[r];var n=this;e.history.route(t,function(i){var a=n._extractParameters(t,i);n.execute(s,a);n.trigger.apply(n,["route:"+r].concat(a));n.trigger("route",r,a);e.history.trigger("route",n,r,a)});return this},execute:function(t,e){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(I,"\\$&").replace(S,"(?:$1)?").replace(H,function(t,e){return e?t:"([^/?]+)"}).replace(A,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return i.map(r,function(t,e){if(e===r.length-1)return t||null;return t?decodeURIComponent(t):null})}});var N=e.History=function(){this.handlers=[];i.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var R=/^[#\/]|\s+$/g;var O=/^\/+|\/+$/g;var P=/msie [\w.]+/;var C=/\/$/;var j=/#.*$/;N.started=false;i.extend(N.prototype,u,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.slice(i.length)}else{t=this.getHash()}}return t.replace(R,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var r=this.getFragment();var s=document.documentMode;var n=P.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);this.root=("/"+this.root+"/").replace(O,"/");if(n&&this._wantsHashChange){var a=e.$('

    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

    ctWy1O9qjv8R53fch;yV6 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%0ApCglYbr6)5W$Cr@?ij{4`35* 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⋘i^m0d+hV%&dU~x&VQ;B8EDZSubqjOtUq@x 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 z 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Ř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≈3 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%0A4Xfh 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